<?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>27818</bug_id>
          
          <creation_ts>2009-07-29 15:40:11 -0700</creation_ts>
          <short_desc>Toggling underline or strike through affects each other</short_desc>
          <delta_ts>2016-04-11 01:23:17 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>28968</dependson>
    
    <dependson>46205</dependson>
    
    <dependson>49813</dependson>
    
    <dependson>49938</dependson>
          <blocked>144670</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>alexander.steitz</cc>
    
    <cc>ap</cc>
    
    <cc>brunoabinader</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>kling</cc>
    
    <cc>mitz</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>ojan</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>135698</commentid>
    <comment_count>0</comment_count>
      <attachid>33746</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-29 15:40:11 -0700</bug_when>
    <thetext>Created attachment 33746
demonstrates the bug

Toggling text decorations by execCommand(underline) or execCommand(strikeThrough) would remove all other text decorations applied.
e.g. exeCommand(underline) to &lt;u&gt;hello &lt;s&gt;world&lt;/s&gt;&lt;/u&gt; would produce hello world without s around world.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135699</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-29 15:44:16 -0700</bug_when>
    <thetext>Because we currently pass CSSMutableStyleDeclaration to ApplyStyleCommand, ApplyStyleCommand cannot tell whether we are removing some text decorations or adding them, or replacing all text decorations with new ones.

We either need to add new argument to ApplyStyleCommand, or add some member variables &amp; functions to CSSMutableStyleDeclaration.  We could derive a new class from CSSMutableStyleDeclaration that stores those extra information &amp; takes care of a lot of things for editing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135702</commentid>
    <comment_count>2</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-07-29 15:55:28 -0700</bug_when>
    <thetext>&gt; We could derive a new class from CSSMutableStyleDeclaration that stores those extra 
&gt; information &amp; takes care of a lot of things for editing.

Without knowing what those other things are it&apos;s hard to say if it&apos;s worth mucking with CSSMutableStyleDeclaration.  I&apos;d just add an argument to ApplyStyleCommand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140123</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-08-13 18:13:55 -0700</bug_when>
    <thetext>This bug no longer blocks 23892.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140279</commentid>
    <comment_count>4</comment_count>
      <attachid>34862</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-08-14 11:16:08 -0700</bug_when>
    <thetext>Created attachment 34862
my attempt to add parameter

This is my attempt to add parameter. It contains a lot of cleanup and bug fixes are that splitted into a separate patch. It currently causes some regression to occur and probably require 2-3 cleanup patches before being able to fix this bug. I&apos;ll add this patch for people who will work on this bug near future. The big idea is:

1. I added extra parameter to ApplyStyleCommand, which requires adding extra parameters to a bunch of functions in Editor.cpp
  a. ReplaceAllTextDecorations mode is what WebKit currently implements. We need to preserve the behavior if we&apos;re using this default mode
  b. RemoveTextDecoration mode will remove all text decoration styles that are PRESENT in the style passed to ApplyStyleCommand
       This is very tricky because the style we get is different from the style we apply. We have to be very careful about how we check the emptiness of style and how we add inline style
  c. AddTextDecoration mode will add new text decoration present in the style passed to ApplyStyleCommand. This is less tricker than RemoveTextDecoration but whenever we&apos;re adding style, we need to merge text decorations rather than replacing them.

2. I modified how we push-down text decorations to remove text-decorations. This is where we remove text-decoration from the selected nodes (we reapply the style later)  For RemoveTextDecoration, we shouldn&apos;t be removing any text decorations except the ones we&apos;re removing; i.e. we should remove text decorations present in the style passed to ApplyStyleCommand.  For AddTextDecoration, we shouldn&apos;t remove any text-decorations.

3. We need to change how we add style.  For RemoveTextDecoration, we should ignore text-decorations all together.  For AddTextDecoration, we need to merge text decorations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282077</commentid>
    <comment_count>5</comment_count>
      <attachid>68185</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-20 21:17:44 -0700</bug_when>
    <thetext>Created attachment 68185
work in progress

The same approach but this one works.  I need to add a test and probably split it into two patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282823</commentid>
    <comment_count>6</comment_count>
      <attachid>68345</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-22 01:01:19 -0700</bug_when>
    <thetext>Created attachment 68345
work in progress 2 (works but needs a test)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282824</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-22 01:05:02 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; We could derive a new class from CSSMutableStyleDeclaration that stores those extra 
&gt; &gt; information &amp; takes care of a lot of things for editing.
&gt; 
&gt; Without knowing what those other things are it&apos;s hard to say if it&apos;s worth mucking with CSSMutableStyleDeclaration.  I&apos;d just add an argument to ApplyStyleCommand.

We can put functions like getPropertiesNotInComputedStyle, editingStyleAtPosition, and prepareEditingStyleToApplyAt into this class.  We can even merge StyleChange with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090336</commentid>
    <comment_count>8</comment_count>
      <attachid>252032</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-04-29 20:25:31 -0700</bug_when>
    <thetext>Created attachment 252032
WIP3

With this patch, editing/execCommand/merge-text-decoration-with-typing-style.html is the only failing test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090744</commentid>
    <comment_count>9</comment_count>
      <attachid>252141</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-05-01 01:51:48 -0700</bug_when>
    <thetext>Created attachment 252141
WIP4

Now passes all the tests but there are some edge cases we&apos;re not getting right still.
Will finish it tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091014</commentid>
    <comment_count>10</comment_count>
      <attachid>252209</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-05-01 18:04:08 -0700</bug_when>
    <thetext>Created attachment 252209
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091015</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-05-01 18:07:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/3790443&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091077</commentid>
    <comment_count>12</comment_count>
      <attachid>252209</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-02 07:24:58 -0700</bug_when>
    <thetext>Comment on attachment 252209
Fixes the bug

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

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:1457
&gt; +    if (const StyleProperties* styleToMerge = styleChange.cssStyle()) {

I would use auto here.

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:1460
&gt; +                Ref&lt;EditingStyle&gt; inlineStyle = EditingStyle::create(existingStyle);

I would use auto here.

&gt; Source/WebCore/editing/EditingStyle.cpp:256
&gt; +    bool matches(const Element&amp; elem) const { return HTMLElementEquivalent::matches(elem) &amp;&amp; elem.hasAttribute(m_attrName); }

Should expand &quot;elem&quot; to &quot;element&quot;.

&gt; Source/WebCore/editing/EditingStyle.cpp:336
&gt;      : m_shouldUseFixedDefaultFontSize(false)
&gt; +    , m_underlineChange(static_cast&lt;unsigned&gt;(TextDecorationChange::None))
&gt; +    , m_strikeThroughChange(static_cast&lt;unsigned&gt;(TextDecorationChange::None))
&gt;      , m_fontSizeDelta(NoFontDelta)

These should all be initialized in the class definition on the lines that define these data members. Then you wouldn’t have to call the EditingStyle() constructor from the other constructors.

&gt; Source/WebCore/editing/EditingStyle.cpp:776
&gt; +    if (!value || !is&lt;CSSValueList&gt;(*value))
&gt; +        return nullptr;

This can be written:

    if (!is&lt;CSSValueList(value.get())
        return nullptr;

I suggest doing it that way.

&gt; Source/WebCore/editing/EditingStyle.cpp:901
&gt;      const Vector&lt;std::unique_ptr&lt;HTMLElementEquivalent&gt;&gt;&amp; HTMLElementEquivalents = htmlElementEquivalents();
&gt;      for (size_t i = 0; i &lt; HTMLElementEquivalents.size(); ++i) {
&gt;          const HTMLElementEquivalent* equivalent = HTMLElementEquivalents[i].get();

Should use modern for loop.

&gt; Source/WebCore/editing/EditingStyle.cpp:942
&gt;      const Vector&lt;std::unique_ptr&lt;HTMLAttributeEquivalent&gt;&gt;&amp; HTMLAttributeEquivalents = htmlAttributeEquivalents();
&gt;      for (size_t i = 0; i &lt; HTMLAttributeEquivalents.size(); ++i) {
&gt; -        if (HTMLAttributeEquivalents[i]-&gt;matches(element) &amp;&amp; HTMLAttributeEquivalents[i]-&gt;propertyExistsInStyle(m_mutableStyle.get())
&gt; -            &amp;&amp; !HTMLAttributeEquivalents[i]-&gt;valueIsPresentInStyle(element, m_mutableStyle.get()))
&gt; +        if (HTMLAttributeEquivalents[i]-&gt;matches(*element)
&gt; +            &amp;&amp; HTMLAttributeEquivalents[i]-&gt;propertyExistsInStyle(*this)
&gt; +            &amp;&amp; !HTMLAttributeEquivalents[i]-&gt;valueIsPresentInStyle(*element, *this))
&gt;              return true;
&gt;      }

Can we make this a lot easier to read with a modern for loop?

    for (auto&amp; equivalent : htmlAttributeEquivalents()) {
        if (equivalent-&gt;matches(*element) &amp;&amp; equivalent-&gt;propertyExistsInStyle(*this) &amp;&amp; !equivalent-&gt;valueIsPresentInStyle(*element, *this))
            return true;
    }

&gt; Source/WebCore/editing/EditingStyle.cpp:1204
&gt;      RefPtr&lt;CSSPrimitiveValue&gt; underline = cssValuePool().createIdentifierValue(CSSValueUnderline);
&gt;      RefPtr&lt;CSSPrimitiveValue&gt; lineThrough = cssValuePool().createIdentifierValue(CSSValueLineThrough);

These can be Ref instead of RefPtr. MY preferred technique is to use auto. Then there would be a WTF::move below instead of a releaseNonNull.

&gt; Source/WebCore/editing/EditingStyle.cpp:1554
&gt; -    Document* document = position.anchorNode() ? &amp;position.anchorNode()-&gt;document() : 0;
&gt; -    if (!style || !style-&gt;style() || !document || !document-&gt;frame())
&gt; +    Document* document = position.deprecatedNode() ? &amp;position.deprecatedNode()-&gt;document() : 0;
&gt; +    if (!style || style-&gt;isEmpty() || !document || !document-&gt;frame())
&gt;          return;

That’s sad. Adding in a new use of deprecatedNode. Is there a way to avoid this?

&gt; Source/WebCore/editing/EditingStyle.cpp:1575
&gt; +        if (!value || !is&lt;CSSValueList&gt;(*value))

if (!is&lt;CSSSValueList&gt;(value.get())

&gt; Source/WebCore/editing/EditingStyle.cpp:1579
&gt; +        if (value &amp;&amp; is&lt;CSSValueList&gt;(*value))

if (is&lt;CSSSValueList&gt;(value.get())

&gt; Source/WebCore/editing/EditingStyle.h:127
&gt;      bool conflictsWithInlineStyleOfElement(StyledElement* element) const { return conflictsWithInlineStyleOfElement(element, 0, 0); }

Should take a StyledElement&amp;.

&gt; Source/WebCore/editing/EditingStyle.h:128
&gt; +    bool conflictsWithInlineStyleOfElement(StyledElement* element, RefPtr&lt;MutableStyleProperties&gt;&amp; newInlineStyle,

Should take a StyledElement&amp;.

&gt; Source/WebCore/editing/EditingStyle.h:178
&gt; +    bool conflictsWithInlineStyleOfElement(StyledElement*, RefPtr&lt;MutableStyleProperties&gt;* newInlineStyle, EditingStyle* extractedStyle) const;

Should take a StyledElement&amp;.

&gt; Source/WebCore/editing/Editor.cpp:950
&gt; +    if (!style || style-&gt;isEmpty() || !canEditRichly())
&gt; +        return;
&gt; +
&gt; +    // FIXME: This is wrong for text decorations since m_mutableStyle is empty.
&gt; +    if (client() &amp;&amp; client()-&gt;shouldApplyStyle(style-&gt;style(), m_frame.selection().toNormalizedRange().get()))
&gt; +        applyStyle(WTF::move(style), editingAction);

Should write all the conditions as early returns.

&gt; Source/WebCore/editing/EditorCommand.cpp:121
&gt; +    // Mac: present at the beginning of selection
&gt; +    // other: present throughout the selection

I think you should say &quot;Mac&quot; and &quot;Windows&quot; here rather than &quot;Mac&quot; and &quot;other&quot;. Others are in both categories. Open source Unix systems tend to just match Windows but iOS, for example, matches Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091486</commentid>
    <comment_count>13</comment_count>
      <attachid>252209</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-05-04 12:44:48 -0700</bug_when>
    <thetext>Comment on attachment 252209
Fixes the bug

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

&gt;&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:1457
&gt;&gt; +    if (const StyleProperties* styleToMerge = styleChange.cssStyle()) {
&gt; 
&gt; I would use auto here.

Done.

&gt;&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:1460
&gt;&gt; +                Ref&lt;EditingStyle&gt; inlineStyle = EditingStyle::create(existingStyle);
&gt; 
&gt; I would use auto here.

Done.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:256
&gt;&gt; +    bool matches(const Element&amp; elem) const { return HTMLElementEquivalent::matches(elem) &amp;&amp; elem.hasAttribute(m_attrName); }
&gt; 
&gt; Should expand &quot;elem&quot; to &quot;element&quot;.

Fixed.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:336
&gt;&gt;      , m_fontSizeDelta(NoFontDelta)
&gt; 
&gt; These should all be initialized in the class definition on the lines that define these data members. Then you wouldn’t have to call the EditingStyle() constructor from the other constructors.

Unfortunately we can&apos;t because they&apos;re bitfields :(
I&apos;ve moved the initialziation of m_fontSizeDelta to the class declaration since it&apos;s a float.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:776
&gt;&gt; +        return nullptr;
&gt; 
&gt; This can be written:
&gt; 
&gt;     if (!is&lt;CSSValueList(value.get())
&gt;         return nullptr;
&gt; 
&gt; I suggest doing it that way.

Fixed.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:901
&gt;&gt;          const HTMLElementEquivalent* equivalent = HTMLElementEquivalents[i].get();
&gt; 
&gt; Should use modern for loop.

Fixed.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:942
&gt;&gt;      }
&gt; 
&gt; Can we make this a lot easier to read with a modern for loop?
&gt; 
&gt;     for (auto&amp; equivalent : htmlAttributeEquivalents()) {
&gt;         if (equivalent-&gt;matches(*element) &amp;&amp; equivalent-&gt;propertyExistsInStyle(*this) &amp;&amp; !equivalent-&gt;valueIsPresentInStyle(*element, *this))
&gt;             return true;
&gt;     }

Fixed.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1204
&gt;&gt;      RefPtr&lt;CSSPrimitiveValue&gt; lineThrough = cssValuePool().createIdentifierValue(CSSValueLineThrough);
&gt; 
&gt; These can be Ref instead of RefPtr. MY preferred technique is to use auto. Then there would be a WTF::move below instead of a releaseNonNull.

Fixed.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1554
&gt;&gt;          return;
&gt; 
&gt; That’s sad. Adding in a new use of deprecatedNode. Is there a way to avoid this?

I&apos;m simply replacing the incorrect use of anchorNode() here because it&apos;s used as a &quot;deprecated&quot; node.
I swear we used to have deprecatedNode here. I don&apos;t know who replaced it with anchorNode :(

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1575
&gt;&gt; +        if (!value || !is&lt;CSSValueList&gt;(*value))
&gt; 
&gt; if (!is&lt;CSSSValueList&gt;(value.get())

Fixed.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:1579
&gt;&gt; +        if (value &amp;&amp; is&lt;CSSValueList&gt;(*value))
&gt; 
&gt; if (is&lt;CSSSValueList&gt;(value.get())

Fixed.

&gt;&gt; Source/WebCore/editing/EditingStyle.h:127
&gt;&gt;      bool conflictsWithInlineStyleOfElement(StyledElement* element) const { return conflictsWithInlineStyleOfElement(element, 0, 0); }
&gt; 
&gt; Should take a StyledElement&amp;.

I&apos;ll do that in a separate patch to avoid making this patch even larger.

&gt;&gt; Source/WebCore/editing/EditingStyle.h:128
&gt;&gt; +    bool conflictsWithInlineStyleOfElement(StyledElement* element, RefPtr&lt;MutableStyleProperties&gt;&amp; newInlineStyle,
&gt; 
&gt; Should take a StyledElement&amp;.

Ditto.

&gt;&gt; Source/WebCore/editing/EditingStyle.h:178
&gt;&gt; +    bool conflictsWithInlineStyleOfElement(StyledElement*, RefPtr&lt;MutableStyleProperties&gt;* newInlineStyle, EditingStyle* extractedStyle) const;
&gt; 
&gt; Should take a StyledElement&amp;.

Ditto.

&gt;&gt; Source/WebCore/editing/Editor.cpp:950
&gt;&gt; +        applyStyle(WTF::move(style), editingAction);
&gt; 
&gt; Should write all the conditions as early returns.

Done.

&gt;&gt; Source/WebCore/editing/EditorCommand.cpp:121
&gt;&gt; +    // other: present throughout the selection
&gt; 
&gt; I think you should say &quot;Mac&quot; and &quot;Windows&quot; here rather than &quot;Mac&quot; and &quot;other&quot;. Others are in both categories. Open source Unix systems tend to just match Windows but iOS, for example, matches Mac.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091488</commentid>
    <comment_count>14</comment_count>
      <attachid>252326</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-05-04 12:46:49 -0700</bug_when>
    <thetext>Created attachment 252326
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091514</commentid>
    <comment_count>15</comment_count>
      <attachid>252326</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-04 13:44:14 -0700</bug_when>
    <thetext>Comment on attachment 252326
Patch for landing

Clearing flags on attachment: 252326

Committed r183770: &lt;http://trac.webkit.org/changeset/183770&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091515</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-04 13:44:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091983</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-05-05 18:50:57 -0700</bug_when>
    <thetext>Two strikethrough tests are broken on Windows and Gtk. Ryosuke, can you take a look?

https://build.webkit.org/results/Apple%20Win%207%20Debug%20(Tests)/r183833%20(66056)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092035</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-05-05 21:41:22 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Two strikethrough tests are broken on Windows and Gtk. Ryosuke, can you take
&gt; a look?
&gt; 
&gt; https://build.webkit.org/results/Apple%20Win%207%20Debug%20(Tests)/
&gt; r183833%20(66056)/results.html

Oops, these tests are expecting Mac editing behavior. Fixed the tests in http://trac.webkit.org/changeset/183848.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182634</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-04-11 01:23:17 -0700</bug_when>
    <thetext>*** Bug 120530 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>33746</attachid>
            <date>2009-07-29 15:40:11 -0700</date>
            <delta_ts>2009-07-29 15:40:11 -0700</delta_ts>
            <desc>demonstrates the bug</desc>
            <filename>t2.html</filename>
            <type>text/html</type>
            <size>759</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5Pgo8ZGl2IGlkPSJlIiBjb250ZW50ZWRpdGFibGU9InRydWUiPgo8ZGl2IGlk
PSJ0ZXN0Ij48dT5oZWxsbyA8cz53b3JsZDwvcz4gd2Via2l0PC91PjwvZGl2Pgo8L2Rpdj4KCjx1
bD4KPGxpPkJlZm9yZTo8c3BhbiBpZD0iYzEiPjwvc3Bhbj48L2xpPgo8bGk+QWZ0ZXI6PHNwYW4g
aWQ9ImMyIj48L3NwYW4+PC9saT4KPC91bD4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
Ij4KCmlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7Cgp2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlJyk7
CmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjMScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKGUuaW5uZXJIVE1MKSk7Cgp2YXIgcyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsK
dmFyIHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwpyLnNlbGVjdE5vZGUoZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3Rlc3QnKSk7Ci8vci5zZXRFbmQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3Rlc3QnKSwxKTsKcy5yZW1vdmVBbGxSYW5nZXMoKTsKcy5hZGRSYW5nZShyKTsKZG9jdW1lbnQu
ZXhlY0NvbW1hbmQoInVuZGVybGluZSIsIGZhbHNlLCB0cnVlKTsKCmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjMicpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUuaW5uZXJI
VE1MKSk7Cgo8L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34862</attachid>
            <date>2009-08-14 11:16:08 -0700</date>
            <delta_ts>2010-09-20 21:17:44 -0700</delta_ts>
            <desc>my attempt to add parameter</desc>
            <filename>add-param-track</filename>
            <type>text/plain</type>
            <size>34013</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQ2OTI2KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC01NDEsNyArNTQxLDcgQEAgX19aTjdXZWJDb3JlNVJhbmdl
RDFFdgogX19aTjdXZWJDb3JlNWNhY2hlRXYKIF9fWk43V2ViQ29yZTVlcXVhbEVQTlNfMTBTdHJp
bmdJbXBsRVBLYwogX19aTjdXZWJDb3JlNWVxdWFsRVBOU18xMFN0cmluZ0ltcGxFUzFfCi1fX1pO
N1dlYkNvcmU2RWRpdG9yMTBhcHBseVN0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNf
MTBFZGl0QWN0aW9uRQorX19aTjdXZWJDb3JlNkVkaXRvcjEwYXBwbHlTdHlsZUVQTlNfMTlDU1NT
dHlsZURlY2xhcmF0aW9uRU5TXzEwRWRpdEFjdGlvbkVOU18yOEFwcGx5U3R5bGVUZXh0RGVjb3Jh
dGlvbk1vZGVFCiBfX1pON1dlYkNvcmU2RWRpdG9yMTBpbnNlcnRUZXh0RVJLTlNfNlN0cmluZ0VQ
TlNfNUV2ZW50RQogX19aTjdXZWJDb3JlNkVkaXRvcjEzY2FuREhUTUxQYXN0ZUV2CiBfX1pON1dl
YkNvcmU2RWRpdG9yMTNwZXJmb3JtRGVsZXRlRXYKQEAgLTU1NCw3ICs1NTQsNyBAQCBfX1pON1dl
YkNvcmU2RWRpdG9yMThjb25maXJtQ29tcG9zaXRpb25FCiBfX1pON1dlYkNvcmU2RWRpdG9yMThj
b25maXJtQ29tcG9zaXRpb25FdgogX19aTjdXZWJDb3JlNkVkaXRvcjE5ZGVsZXRlV2l0aERpcmVj
dGlvbkVOU18xOVNlbGVjdGlvbkNvbnRyb2xsZXIxMEVEaXJlY3Rpb25FTlNfMTVUZXh0R3JhbnVs
YXJpdHlFYmIKIF9fWk43V2ViQ29yZTZFZGl0b3IxOWluc2VydFVub3JkZXJlZExpc3RFdgotX19a
TjdXZWJDb3JlNkVkaXRvcjIxYXBwbHlTdHlsZVRvU2VsZWN0aW9uRVBOU18xOUNTU1N0eWxlRGVj
bGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRQorX19aTjdXZWJDb3JlNkVkaXRvcjIxYXBwbHlTdHls
ZVRvU2VsZWN0aW9uRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRU5T
XzI4QXBwbHlTdHlsZVRleHREZWNvcmF0aW9uTW9kZUUKIF9fWk43V2ViQ29yZTZFZGl0b3IyMWlz
U2VsZWN0aW9uTWlzc3BlbGxlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjNzZXRCYXNlV3JpdGlu
Z0RpcmVjdGlvbkVOU18xNldyaXRpbmdEaXJlY3Rpb25FCiBfX1pON1dlYkNvcmU2RWRpdG9yMjRh
ZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmdFYgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCShyZXZpc2lv
biA0NjkyNikKKysrIFdlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk2LDYgKzk2LDE2IEBAIGJvb2wgQ1NTVmFsdWVMaXN0OjpoYXNWYWx1ZShDU1NWYWx1ZSog
dmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1Bhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NW
YWx1ZUxpc3Q6OmNvcHkoKQoreworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG5ld0xpc3QgPSBt
X2lzU3BhY2VTZXBhcmF0ZWQgPyBjcmVhdGVTcGFjZVNlcGFyYXRlZCgpIDogY3JlYXRlQ29tbWFT
ZXBhcmF0ZWQoKTsKKworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX3ZhbHVl
cy5zaXplKCk7IGluZGV4KyspCisgICAgICAgIG5ld0xpc3QtPmFwcGVuZChtX3ZhbHVlcy5hdChp
bmRleCkpOworICAgIAorICAgIHJldHVybiBuZXdMaXN0OworfQorCiBTdHJpbmcgQ1NTVmFsdWVM
aXN0Ojpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVzdWx0ID0gIiI7CkluZGV4OiBX
ZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NW
YWx1ZUxpc3QuaAkocmV2aXNpb24gNDY5MjYpCisrKyBXZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVw
ZW5kKFBhc3NSZWZQdHI8Q1NTVmFsdWU+KTsKICAgICBib29sIHJlbW92ZUFsbChDU1NWYWx1ZSop
OwogICAgIGJvb2wgaGFzVmFsdWUoQ1NTVmFsdWUqKTsKKyAgICBQYXNzUmVmUHRyPENTU1ZhbHVl
TGlzdD4gY29weSgpOwogCiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQ2OTI2KQor
KysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAzLDcgKzMwMyw3IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZVN0eWxlU3Bh
bkUKICAgICByZXR1cm4gc3R5bGVFbGVtZW50LnJlbGVhc2UoKTsKIH0KICAgICAKLVJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZ2V0UHJvcGVydGllc05vdEluQ29tcHV0ZWRTdHls
ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
KiBjb21wdXRlZFN0eWxlKQorUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBnZXRQ
cm9wZXJ0aWVzTm90SW5Db21wdXRlZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBD
U1NTdHlsZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxlKQogewogICAgIEFTU0VSVChzdHlsZSk7
CiAgICAgQVNTRVJUKGNvbXB1dGVkU3R5bGUpOwpAQCAtMzIyLDE0ICszMjIsMTQgQEAgUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBnZXRQcgogICAgICAgICBpZiAoIXN0eWxlVmFs
dWUgfHwgIXN0eWxlVmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBDU1NWYWx1ZUxpc3QqIGRlc2lyZWRWYWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxD
U1NWYWx1ZUxpc3QqPihzdHlsZVZhbHVlLmdldCgpKTsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gZGVzaXJlZFZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHN0eWxl
VmFsdWUuZ2V0KCkpLT5jb3B5KCk7CiAgICAgICAgIENTU1ZhbHVlTGlzdCogY29tcHV0ZWRWYWx1
ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihjb21wdXRlZFZhbHVlLmdldCgpKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXNpcmVkVmFsdWVMaXN0LT5sZW5ndGgo
KTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIWNvbXB1dGVkVmFsdWVMaXN0LT5oYXNWYWx1ZShk
ZXNpcmVkVmFsdWVMaXN0LT5pdGVtKGkpKSkgewotICAgICAgICAgICAgICAgIHJlc3VsdC0+cmVt
b3ZlUHJvcGVydHkodGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzW25dKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvbXB1dGVkVmFsdWVMaXN0LT5sZW5ndGgoKTsgaSsrKQorICAgICAgICAgICAg
ZGVzaXJlZFZhbHVlTGlzdC0+cmVtb3ZlQWxsKGNvbXB1dGVkVmFsdWVMaXN0LT5pdGVtKGkpKTsK
KyAgICAgICAgaWYgKCFkZXNpcmVkVmFsdWVMaXN0LT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJl
c3VsdC0+cmVtb3ZlUHJvcGVydHkodGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzW25dKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0LT5zZXRQcm9wZXJ0eSh0ZXh0RGVjb3JhdGlvblBy
b3BlcnRpZXNbbl0sIGRlc2lyZWRWYWx1ZUxpc3QtPmNzc1RleHQoKSk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTQyMiw4ICs0MjIsOCBAQCB2b2lkIHJlbW92ZVN0eWxlc0FkZGVk
QnlOb2RlKENTU011dGFibGVTCiAgICAgcGFyZW50U3R5bGUtPmRpZmYoc3R5bGUuZ2V0KCkpOwog
ICAgIHN0eWxlLT5kaWZmKGVkaXRpbmdTdHlsZSk7CiB9Ci0gICAgCi1BcHBseVN0eWxlQ29tbWFu
ZDo6QXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uLCBFUHJvcGVydHlMZXZlbCBwcm9w
ZXJ0eUxldmVsKQorCitBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1l
bnQqIGRvY3VtZW50LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0aW9uLCBFUHJvcGVydHlMZXZlbCBwcm9wZXJ0eUxldmVsLCBBcHBseVN0eWxlVGV4dERl
Y29yYXRpb25Nb2RlIG1vZGUpCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCkK
ICAgICAsIG1fc3R5bGUoc3R5bGUtPm1ha2VNdXRhYmxlKCkpCiAgICAgLCBtX2VkaXRpbmdBY3Rp
b24oZWRpdGluZ0FjdGlvbikKQEAgLTQzMyw2ICs0MzMsNyBAQCBBcHBseVN0eWxlQ29tbWFuZDo6
QXBwbHlTdHlsZUNvbW1hbmQoRG9jCiAgICAgLCBtX3VzZUVuZGluZ1NlbGVjdGlvbih0cnVlKQog
ICAgICwgbV9zdHlsZWRJbmxpbmVFbGVtZW50KDApCiAgICAgLCBtX3JlbW92ZU9ubHkoZmFsc2Up
CisgICAgLCBtX2FwcGx5U3R5bGVNb2RlKG1vZGUpCiB7CiB9CiAKQEAgLTQ0Niw2ICs0NDcsNyBA
QCBBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQoRG9jCiAgICAgLCBtX3VzZUVu
ZGluZ1NlbGVjdGlvbihmYWxzZSkKICAgICAsIG1fc3R5bGVkSW5saW5lRWxlbWVudCgwKQogICAg
ICwgbV9yZW1vdmVPbmx5KGZhbHNlKQorICAgICwgbV9hcHBseVN0eWxlTW9kZShSZXBsYWNlQWxs
VGV4dERlY29yYXRpb25zKQogewogfQogCkBAIC00NTksNiArNDYxLDcgQEAgQXBwbHlTdHlsZUNv
bW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKFBhcwogICAgICwgbV91c2VFbmRpbmdTZWxlY3Rpb24o
dHJ1ZSkKICAgICAsIG1fc3R5bGVkSW5saW5lRWxlbWVudChlbGVtZW50KQogICAgICwgbV9yZW1v
dmVPbmx5KHJlbW92ZU9ubHkpCisgICAgLCBtX2FwcGx5U3R5bGVNb2RlKFJlcGxhY2VBbGxUZXh0
RGVjb3JhdGlvbnMpCiB7CiB9CiAKQEAgLTEwNTksNTIgKzEwNjIsNjQgQEAgdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICB9CiAgICAgfQogfQorICAgIAor
Ym9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkUmVtb3ZlVGV4dERlY29yYXRpb24oQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGVUb0FwcGx5LCBpbnQgdGV4dERlY29yYXRpb25WYWx1ZSkgY29u
c3QKK3sKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uc1RvQXBwbHkgPSBzdHls
ZVRvQXBwbHktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdCk7CisgICAgCisgICAgaWYgKCF0ZXh0RGVjb3JhdGlvbnNUb0FwcGx5IHx8
ICF0ZXh0RGVjb3JhdGlvbnNUb0FwcGx5LT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICB0ZXh0RGVj
b3JhdGlvbnNUb0FwcGx5ID0gc3R5bGVUb0FwcGx5LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5VGV4dERlY29yYXRpb24pOworCisgICAgLy8gd2hlbiB0aGVyZSBpcyBubyB0ZXh0IGRl
Y29yYXRpb25zIHRvIGFwcGx5LCBkZWxldGUgYWxsIG9ubHkgaWYgcmVwbGFjaW5nIGFsbCB0ZXh0
IGRlY29yYXRpb25zCisgICAgaWYgKCF0ZXh0RGVjb3JhdGlvbnNUb0FwcGx5IHx8ICF0ZXh0RGVj
b3JhdGlvbnNUb0FwcGx5LT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICByZXR1cm4gbV9hcHBseVN0
eWxlTW9kZSA9PSBSZXBsYWNlQWxsVGV4dERlY29yYXRpb25zOworCisgICAgQ1NTVmFsdWVMaXN0
KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih0ZXh0RGVjb3JhdGlvbnNU
b0FwcGx5LmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodGV4dERlY29yYXRpb25WYWx1ZSk7CisK
KyAgICByZXR1cm4gKG1fYXBwbHlTdHlsZU1vZGUgPT0gUmVwbGFjZUFsbFRleHREZWNvcmF0aW9u
cyAmJiAhdmFsdWVMaXN0LT5oYXNWYWx1ZSh2YWx1ZS5nZXQoKSkpCisgICAgICAgIHx8IChtX2Fw
cGx5U3R5bGVNb2RlID09IFJlbW92ZVRleHREZWNvcmF0aW9uICYmIHZhbHVlTGlzdC0+aGFzVmFs
dWUodmFsdWUuZ2V0KCkpKTsKK30KKworYm9vbCBwcm9wZXJ0eUV4aXN0QW5kRGlmZmVyZW50RnJv
bShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgaW50IHByb3BlcnR5SUQsIFN0cmluZyBkZXNp
cmVkVmFsdWUpCit7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBhY3R1YWxWYWx1ZSA9IHN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworICAgIGlmICghYWN0dWFsVmFsdWUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIWVxdWFsSWdub3JpbmdDYXNlKGFjdHVh
bFZhbHVlLT5jc3NUZXh0KCksIGRlc2lyZWRWYWx1ZSk7Cit9CiAKIC8vIFRoaXMgZnVuY3Rpb24g
bWFwcyBmcm9tIHN0eWxpbmcgdGFncyB0byBDU1Mgc3R5bGVzLiAgVXNlZCBmb3Iga25vd2luZyB3
aGljaAogLy8gc3R5bGluZyB0YWdzIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gdG9nZ2xpbmcgc3R5
bGVzLgogYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aW1wbGljaXRseVN0eWxlZEVsZW1lbnRTaG91
bGRCZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHlsZShIVE1MRWxlbWVudCogZWxlbSwgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7Ci0gICAgZm9yIChDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9
ICppdDsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHJlLXdyaXR0
ZW4gdG8gbG9va3VwIHRoZSB0YWduYW1lIGluIGEKLSAgICAgICAgLy8gaGFzaCBhbmQgbWF0Y2gg
YWdhaW5zdCBhbiBleHBlY3RlZCBwcm9wZXJ0eS92YWx1ZSBwYWlyLgotICAgICAgICBzd2l0Y2gg
KHByb3BlcnR5LmlkKCkpIHsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6Ci0g
ICAgICAgICAgICAvLyBJRSBpbnNlcnRzICJzdHJvbmciIHRhZ3MgZm9yIGV4ZWNDb21tYW5kKCJi
b2xkIiksIHNvIHdlIHJlbW92ZSB0aGVtLCBldmVuIHRob3VnaCB0aGV5J3JlIG5vdCBzdHJpY3Rs
eSBwcmVzZW50YXRpb25hbAotICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0xvY2FsTmFtZShiVGFn
KSB8fCBlbGVtLT5oYXNMb2NhbE5hbWUoc3Ryb25nVGFnKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5VmVy
dGljYWxBbGlnbjoKLSAgICAgICAgICAgIGlmIChlbGVtLT5oYXNMb2NhbE5hbWUoc3ViVGFnKSB8
fCBlbGVtLT5oYXNMb2NhbE5hbWUoc3VwVGFnKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0eWxl
OgotICAgICAgICAgICAgLy8gSUUgaW5zZXJ0cyAiZW0iIHRhZ3MgZm9yIGV4ZWNDb21tYW5kKCJp
dGFsaWMiKSwgc28gd2UgcmVtb3ZlIHRoZW0sIGV2ZW4gdGhvdWdoIHRoZXkncmUgbm90IHN0cmlj
dGx5IHByZXNlbnRhdGlvbmFsCi0gICAgICAgICAgICBpZiAoZWxlbS0+aGFzTG9jYWxOYW1lKGlU
YWcpIHx8IGVsZW0tPmhhc0xvY2FsTmFtZShlbVRhZykpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRE
ZWNvcmF0aW9uOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25z
SW5FZmZlY3Q6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHByb3BlcnR5LnZhbHVlKCkpOwotICAg
ICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVMaXN0Kj4ocHJvcGVydHkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiwgdW5kZXJsaW5lLCAoQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVVbmRlcmxpbmUpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiwgbGluZVRocm91Z2gsIChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmll
cihDU1NWYWx1ZUxpbmVUaHJvdWdoKSkpOwotICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNl
IHN0eWxlIGlzIG5ldyBzdHlsZSB0byBiZSBhcHBsaWVkLCB3ZSBkZWxldGUgZWxlbWVudCBvbmx5
IGlmIHRoZSBlbGVtZW50IGlzIG5vdCB1c2VkIGluIHN0eWxlLgotICAgICAgICAgICAgICAgICAg
ICBpZiAoIXZhbHVlTGlzdC0+aGFzVmFsdWUodW5kZXJsaW5lLmdldCgpKSAmJiBlbGVtLT5oYXNM
b2NhbE5hbWUodVRhZykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZUxpc3QtPmhhc1ZhbHVlKGxpbmVUaHJvdWdoLmdl
dCgpKSAmJiAoZWxlbS0+aGFzTG9jYWxOYW1lKHN0cmlrZVRhZykgfHwgZWxlbS0+aGFzTG9jYWxO
YW1lKHNUYWcpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBp
cyBOT1QgYSBsaXN0LCB0aGVuIGl0IG11c3QgYmUgIm5vbmUiLCBpbiB3aGljaCBjYXNlIHdlIHNo
b3VsZCByZW1vdmUgYWxsIHRleHQgZGVjb3JhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgIEFT
U0VSVChwcm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCkgPT0gIm5vbmUiKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGVsZW0tPmhhc0xvY2FsTmFtZSh1VGFnKSB8fCBlbGVtLT5oYXNMb2NhbE5h
bWUoc3RyaWtlVGFnKSB8fCBlbGVtLT5oYXNMb2NhbE5hbWUoc1RhZykpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQVNTRVJUKGVsZW0pOworICAgIEFTU0VS
VChzdHlsZSk7CisKKyAgICAvLyBEZWxldGUgaWYgZWxlbSBkb2VzIG5vdCBoYXZlIGFueSBjaGls
ZHJlbiBiZWNhdXNlIHRoZW4gZWxlbSBpcyByZWR1bmRhbnQgKG1heSBhZGQgdGhlIGFzbWUgdGFn
IGFnYWluIGluIGFkZElubGluZVN0eWxlSWZOZWNlc3NhcnkpLgorICAgIC8vIERvIG5vdCBkZWxl
dGUgaWYgdGhlIHN0eWxlIHRvIGFwcGx5IGRvZXMgbm90IGhhdmUgdGhlIHJlbGV2YW50IHByb3Bl
cnR5IGJlY2F1c2Ugd2UncmUgbm90IGNoYW5naW5nIHRoYXQgc3R5bGUuCisgICAgLy8gRGVsZXRl
IGlmIHRoZSBzdHlsZSB0byBhcHBseSBoYXMgdGhlIHJlbGV2YW50IHByb3BlcnR5IGFuZCBkaWZm
ZXJlbnQgZnJvbSB0aGUgdmFsdWUgcHJvZHVjZWQgYnkgZWxlbS4KKworICAgIC8vIElFIGluc2Vy
dHMgInN0cm9uZyIgdGFncyBmb3IgZXhlY0NvbW1hbmQoImJvbGQiKSwgc28gd2UgcmVtb3ZlIHRo
ZW0sIGV2ZW4gdGhvdWdoIHRoZXkncmUgbm90IHN0cmljdGx5IHByZXNlbnRhdGlvbmFsCisgICAg
aWYgKGVsZW0tPmhhc1RhZ05hbWUoYlRhZykgfHwgZWxlbS0+aGFzVGFnTmFtZShzdHJvbmdUYWcp
KQorICAgICAgICByZXR1cm4gIWVsZW0tPmhhc0NoaWxkTm9kZXMoKSB8fCBwcm9wZXJ0eUV4aXN0
QW5kRGlmZmVyZW50RnJvbShzdHlsZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0LCAiYm9sZCIpOwor
CisgICAgLy8gSUUgaW5zZXJ0cyAiZW0iIHRhZ3MgZm9yIGV4ZWNDb21tYW5kKCJpdGFsaWMiKSwg
c28gd2UgcmVtb3ZlIHRoZW0sIGV2ZW4gdGhvdWdoIHRoZXkncmUgbm90IHN0cmljdGx5IHByZXNl
bnRhdGlvbmFsCisgICAgaWYgKGVsZW0tPmhhc1RhZ05hbWUoaVRhZykgfHwgZWxlbS0+aGFzVGFn
TmFtZShlbVRhZykpCisgICAgICAgIHJldHVybiAhZWxlbS0+aGFzQ2hpbGROb2RlcygpIHx8IHBy
b3BlcnR5RXhpc3RBbmREaWZmZXJlbnRGcm9tKHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSwg
Iml0YWxpYyIpOworCisgICAgaWYgKGVsZW0tPmhhc1RhZ05hbWUodVRhZykpCisgICAgICAgIHJl
dHVybiAhZWxlbS0+aGFzQ2hpbGROb2RlcygpIHx8IHNob3VsZFJlbW92ZVRleHREZWNvcmF0aW9u
KHN0eWxlLCBDU1NWYWx1ZVVuZGVybGluZSk7CisKKyAgICBpZiAoZWxlbS0+aGFzVGFnTmFtZShz
VGFnKSB8fCBlbGVtLT5oYXNUYWdOYW1lKHN0cmlrZVRhZykpCisgICAgICAgIHJldHVybiAhZWxl
bS0+aGFzQ2hpbGROb2RlcygpIHx8IHNob3VsZFJlbW92ZVRleHREZWNvcmF0aW9uKHN0eWxlLCBD
U1NWYWx1ZUxpbmVUaHJvdWdoKTsKKworICAgIGlmIChlbGVtLT5oYXNUYWdOYW1lKHN1YlRhZykp
CisgICAgICAgIHJldHVybiAhZWxlbS0+aGFzQ2hpbGROb2RlcygpIHx8IHByb3BlcnR5RXhpc3RB
bmREaWZmZXJlbnRGcm9tKHN0eWxlLCBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24sICJzdWIiKTsK
KworICAgIGlmIChlbGVtLT5oYXNUYWdOYW1lKHN1cFRhZykpCisgICAgICAgIHJldHVybiAhZWxl
bS0+aGFzQ2hpbGROb2RlcygpIHx8IHByb3BlcnR5RXhpc3RBbmREaWZmZXJlbnRGcm9tKHN0eWxl
LCBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24sICJzdXAiKTsKKwogICAgIHJldHVybiBmYWxzZTsK
IH0KIApAQCAtMTE4Niw2ICsxMjAxLDEyIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92
ZUNTU1N0eWxlKEMKICAgICBpZiAoIWRlY2wpCiAgICAgICAgIHJldHVybjsKIAorICAgIGJvb2wg
ZW1wdHkgPSB0cnVlOworICAgIGlmIChkZWNsLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5V2hpdGVTcGFjZSkgJiYgaXNUYWJTcGFuTm9kZShlbGVtKSkKKyAgICAgICAgZW1wdHkgPSBm
YWxzZTsKKyAgICBpZiAoIWRlY2wtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlVbmljb2Rl
QmlkaSkuaXNFbXB0eSgpIHx8ICFkZWNsLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5RGly
ZWN0aW9uKS5pc0VtcHR5KCkpCisgICAgICAgIGVtcHR5ID0gZmFsc2U7CisKICAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOwog
ICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
c3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQgPSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPigoKml0KS5pZCgpKTsKQEAg
LTEyNTYsNyArMTI3Nyw3IEBAIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IEEKICAgICByZXR1cm4gdGV4dERlY29yYXRpb25TdHlsZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEFwcGx5U3R5bGVDb21tYW5kOjpleHRy
YWN0QW5kTmVnYXRlVGV4dERlY29yYXRpb25TdHlsZShOb2RlKiBub2RlKQorUGFzc1JlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQXBwbHlTdHlsZUNvbW1hbmQ6OmV4dHJhY3RBbmRO
ZWdhdGVUZXh0RGVjb3JhdGlvblN0eWxlKE5vZGUqIG5vZGUsIENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlVG9BcHBseSwgYm9vbCB0YWtlQ2FyZU9mU3R5bGVSdWxlcykKIHsKICAgICBBU1NFUlQo
bm9kZSk7CiAgICAgQVNTRVJUKG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7CkBAIC0xMjY2LDI2ICsx
Mjg3LDM4IEBAIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEEKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBu
b2RlU3R5bGUgPSBjb21wdXRlZFN0eWxlKG5vZGUpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gaW5saW5lU3R5bGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihu
b2RlKS0+aW5saW5lU3R5bGVEZWNsKCk7CiAgICAgQVNTRVJUKG5vZGVTdHlsZSk7CisgICAgCisg
ICAgaWYgKCF0YWtlQ2FyZU9mU3R5bGVSdWxlcyAmJiAhaW5saW5lU3R5bGUpCisgICAgICAgIHJl
dHVybiAwOwogCiAgICAgaW50IHByb3BlcnRpZXNbMV0gPSB7IENTU1Byb3BlcnR5VGV4dERlY29y
YXRpb24gfTsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHRleHREZWNv
cmF0aW9uU3R5bGUgPSBub2RlU3R5bGUtPmNvcHlQcm9wZXJ0aWVzSW5TZXQocHJvcGVydGllcywg
MSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IHRha2VD
YXJlT2ZTdHlsZVJ1bGVzID8gbm9kZVN0eWxlLT5jb3B5UHJvcGVydGllc0luU2V0KHByb3BlcnRp
ZXMsIDEpIDogaW5saW5lU3R5bGUtPmNvcHlQcm9wZXJ0aWVzSW5TZXQocHJvcGVydGllcywgMSk7
CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHByb3BlcnR5ID0gbm9kZVN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwotICAgIGlmIChwcm9wZXJ0eSAm
JiAhZXF1YWxJZ25vcmluZ0Nhc2UocHJvcGVydHktPmNzc1RleHQoKSwgIm5vbmUiKSkgewotICAg
ICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG5ld1N0eWxlID0gdGV4dERl
Y29yYXRpb25TdHlsZS0+Y29weSgpOwotICAgICAgICBuZXdTdHlsZS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgIm5vbmUiKTsKLSAgICAgICAgYXBwbHlUZXh0RGVjb3Jh
dGlvblN0eWxlKG5vZGUsIG5ld1N0eWxlLmdldCgpKTsKKyAgICBpZiAobV9hcHBseVN0eWxlTW9k
ZSA9PSBSZW1vdmVUZXh0RGVjb3JhdGlvbikgeworICAgICAgICAvLyBHZXQgdGV4dCBkZWNvcmF0
aW9ucyB0aGF0IGFyZSBub3QgcmVtb3ZlZAorICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IG5ld1N0eWxlID0gZ2V0UHJvcGVydGllc05vdEluQ29tcHV0ZWRTdHlsZShz
dHlsZS5nZXQoKSwgc3R5bGVUb0FwcGx5KTsKKyAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2Fz
ZShzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKSwgbmV3
U3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbikpKQorICAg
ICAgICAgICAgYXBwbHlUZXh0RGVjb3JhdGlvblN0eWxlKG5vZGUsIG5ld1N0eWxlLmdldCgpKTsK
KyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcHJvcGVydHkgPSBz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKKyAg
ICAgICAgaWYgKHByb3BlcnR5ICYmICFlcXVhbElnbm9yaW5nQ2FzZShwcm9wZXJ0eS0+Y3NzVGV4
dCgpLCAibm9uZSIpKSB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IG5ld1N0eWxlID0gc3R5bGUtPmNvcHkoKTsKKyAgICAgICAgICAgIG5ld1N0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCAibm9uZSIpOworICAgICAgICAg
ICAgYXBwbHlUZXh0RGVjb3JhdGlvblN0eWxlKG5vZGUsIG5ld1N0eWxlLmdldCgpKTsKKyAgICAg
ICAgfQogICAgIH0KIAotICAgIHJldHVybiB0ZXh0RGVjb3JhdGlvblN0eWxlLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjphcHBseVRleHREZWNvcmF0aW9uU3R5bGUoTm9kZSAqbm9kZSwgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24gKnN0eWxlKQogewogICAgIEFTU0VSVChub2RlKTsKIAotICAgIGlmICghc3R5bGUg
fHwgc3R5bGUtPmNzc1RleHQoKS5pc0VtcHR5KCkpCisgICAgaWYgKCFzdHlsZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkgewpAQCAtMTI5OCwyMSArMTMz
MSwyMiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVRleHREZWNvcmF0CiAgICAgICAg
IHJldHVybjsKIAogICAgIEhUTUxFbGVtZW50ICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQgKj4obm9kZSk7Ci0gICAgICAgIAotICAgIFN0eWxlQ2hhbmdlIHN0eWxlQ2hhbmdlKHN0
eWxlLCBQb3NpdGlvbihlbGVtZW50LCAwKSk7Ci0gICAgaWYgKHN0eWxlQ2hhbmdlLmNzc1N0eWxl
KCkubGVuZ3RoKCkpIHsKLSAgICAgICAgU3RyaW5nIGNzc1RleHQgPSBzdHlsZUNoYW5nZS5jc3NT
dHlsZSgpOwotICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqZGVjbCA9IGVsZW1l
bnQtPmlubGluZVN0eWxlRGVjbCgpOwotICAgICAgICBpZiAoZGVjbCkKLSAgICAgICAgICAgIGNz
c1RleHQgKz0gZGVjbC0+Y3NzVGV4dCgpOwotICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1l
bnQsIHN0eWxlQXR0ciwgY3NzVGV4dCk7Ci0gICAgfQorICAgIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBkZWNsID0gZWxlbWVudC0+Z2V0SW5saW5lU3R5bGVEZWNsKCk7CisgICAgU3RyaW5n
IG5ld1ZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3Jh
dGlvbik7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKG5ld1ZhbHVlLmlzRW1w
dHkoKSkKKyAgICAgICAgZGVjbC0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3Jh
dGlvbiwgZWMpOworICAgIGVsc2UKKyAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlUZXh0RGVjb3JhdGlvbiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbikpOworCisgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIs
IGRlY2wtPmNzc1RleHQoKSk7CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3du
VGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5vZGUoTm9kZSogdGFyZ2V0Tm9kZSwgYm9vbCBmb3Jj
ZU5lZ2F0ZSkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duVGV4dERlY29yYXRpb25T
dHlsZUFyb3VuZE5vZGUoTm9kZSogdGFyZ2V0Tm9kZSwgYm9vbCBmb3JjZU5lZ2F0ZSwgUmFuZ2Uq
IHJhbmdlVG9QdXNoRG93biwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVUb0FwcGx5KQogewog
ICAgIEFTU0VSVCh0YXJnZXROb2RlKTsKICAgICBOb2RlKiBoaWdoZXN0QW5jZXN0b3IgPSBoaWdo
ZXN0QW5jZXN0b3JXaXRoVGV4dERlY29yYXRpb24odGFyZ2V0Tm9kZSk7CisgICAgLy8gV2hlbiBh
ZGRpbmcgdGV4dCBkZWNvcmF0aW9uLCB0aGVyZSBpcyBubyBuZWVkIHRvIHB1c2ggZG93bi4KICAg
ICBpZiAoIWhpZ2hlc3RBbmNlc3RvcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMzIxLDE3ICsx
MzU1LDM1IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duVGV4dERlY28KICAgICB3
aGlsZSAoY3VycmVudCAhPSB0YXJnZXROb2RlKSB7CiAgICAgICAgIEFTU0VSVChjdXJyZW50KTsK
ICAgICAgICAgQVNTRVJUKGN1cnJlbnQtPmNvbnRhaW5zKHRhcmdldE5vZGUpKTsKLSAgICAgICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkZWNvcmF0aW9uID0gZm9yY2VOZWdh
dGUgPyBleHRyYWN0QW5kTmVnYXRlVGV4dERlY29yYXRpb25TdHlsZShjdXJyZW50KSA6IGV4dHJh
Y3RUZXh0RGVjb3JhdGlvblN0eWxlKGN1cnJlbnQpOworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IGRlY29yYXRpb24gPSBleHRyYWN0QW5kTmVnYXRlVGV4dERlY29y
YXRpb25TdHlsZShjdXJyZW50LCBzdHlsZVRvQXBwbHksIGZvcmNlTmVnYXRlKTsKIAogICAgICAg
ICAvLyBUaGUgaW5uZXIgbG9vcCB3aWxsIGdvIHRocm91Z2ggY2hpbGRyZW4gb24gZWFjaCBsZXZl
bAogICAgICAgICBOb2RlKiBjaGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAg
d2hpbGUgKGNoaWxkKSB7CiAgICAgICAgICAgICBOb2RlKiBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gZGVjb3JhdGlvblRvQXBwbHkgPSBkZWNvcmF0aW9uOworCisgICAgICAgICAgICAvLyBJZiB3
ZSBhcmUgcmVtb3ZpbmcgdGV4dCBkZWNvcmF0aW9uLCB0aGVuIHdlIHNob3VsZG4ndCBhZGQgdGhl
IHZlcnkgdmFsdWUgd2UncmUgcmVtb3ZpbmcuCisgICAgICAgICAgICBpZiAoaXNOb2RlVmlzaWJs
eUNvbnRhaW5lZFdpdGhpbihjaGlsZCwgcmFuZ2VUb1B1c2hEb3duKSAmJiBtX2FwcGx5U3R5bGVN
b2RlID09IFJlbW92ZVRleHREZWNvcmF0aW9uICYmIGRlY29yYXRpb24pIHsKKyAgICAgICAgICAg
ICAgICBkZWNvcmF0aW9uVG9BcHBseSA9IGRlY29yYXRpb24tPmNvcHkoKTsKKworICAgICAgICAg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGcm9tUGFyZW50ID0gZGVjb3JhdGlvblRvQXBw
bHktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisgICAg
ICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZVRvQXBwbHkgPSBzdHlsZVRvQXBwbHkt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlRnJvbVBhcmVudCAmJiB2YWx1ZUZyb21Q
YXJlbnQtPmlzVmFsdWVMaXN0KCkgJiYgdmFsdWVUb0FwcGx5ICYmIHZhbHVlVG9BcHBseS0+aXNW
YWx1ZUxpc3QoKSkgeworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2
YWx1ZUxpc3RGcm9tUGFyZW50ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWVGcm9t
UGFyZW50LmdldCgpKS0+Y29weSgpOworICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUxpc3Qq
IHZhbHVlTGlzdFRvQXBwbHkgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZVRvQXBw
bHkuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZh
bHVlTGlzdFRvQXBwbHktPmxlbmd0aCgpOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZUxpc3RGcm9tUGFyZW50LT5yZW1vdmVBbGwodmFsdWVMaXN0VG9BcHBseS0+aXRlbShpKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVMaXN0RnJvbVBhcmVudC0+bGVuZ3RoKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWNvcmF0aW9uVG9BcHBseS0+cmVtb3ZlUHJvcGVy
dHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGRlY29y
YXRpb25Ub0FwcGx5LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCB2YWx1
ZUxpc3RGcm9tUGFyZW50LT5jc3NUZXh0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgLy8gQXBwbHkgdGV4dCBkZWNvcmF0aW9uIHRvIGFsbCBub2Rl
cyBjb250YWluaW5nIHRhcmdldE5vZGUgYW5kIHRoZWlyIHNpYmxpbmdzIGJ1dCBOT1QgdG8gdGFy
Z2V0Tm9kZQogICAgICAgICAgICAgaWYgKGNoaWxkICE9IHRhcmdldE5vZGUpCi0gICAgICAgICAg
ICAgICAgYXBwbHlUZXh0RGVjb3JhdGlvblN0eWxlKGNoaWxkLCBkZWNvcmF0aW9uLmdldCgpKTsK
LSAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFwcGx5VGV4dERlY29yYXRpb25TdHlsZShj
aGlsZCwgZGVjb3JhdGlvblRvQXBwbHkuZ2V0KCkpOworCiAgICAgICAgICAgICAvLyBXZSBmb3Vu
ZCB0aGUgbmV4dCBub2RlIGZvciB0aGUgb3V0ZXIgbG9vcCAoY29udGFpbnMgdGFyZ2V0Tm9kZSkK
ICAgICAgICAgICAgIC8vIFdoZW4gcmVhY2hlZCB0YXJnZXROb2RlLCBzdG9wIHRoZSBvdXRlciBs
b29wIHVwb24gdGhlIGNvbXBsZXRpb24gb2YgdGhlIGN1cnJlbnQgaW5uZXIgbG9vcAogICAgICAg
ICAgICAgaWYgKGNoaWxkID09IHRhcmdldE5vZGUgfHwgY2hpbGQtPmNvbnRhaW5zKHRhcmdldE5v
ZGUpKQpAQCAtMTM0MiwyMCArMTM5NCwyNSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNo
RG93blRleHREZWNvCiAgICAgfQogfQogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93
blRleHREZWNvcmF0aW9uU3R5bGVBdEJvdW5kYXJpZXMoY29uc3QgUG9zaXRpb24gJnN0YXJ0LCBj
b25zdCBQb3NpdGlvbiAmZW5kKQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25UZXh0
RGVjb3JhdGlvblN0eWxlQXRCb3VuZGFyaWVzKGNvbnN0IFBvc2l0aW9uICZzdGFydCwgY29uc3Qg
UG9zaXRpb24gJmVuZCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVUb0FwcGx5KQogewogICAg
IC8vIFdlIG5lZWQgdG8gd29yayBpbiB0d28gcGFzc2VzLiBGaXJzdCB3ZSBwdXNoIGRvd24gYW55
IGlubGluZQogICAgIC8vIHN0eWxlcyB0aGF0IHNldCB0ZXh0IGRlY29yYXRpb24uIFRoZW4gd2Ug
bG9vayBmb3IgYW55IHJlbWFpbmluZwogICAgIC8vIHN0eWxlcyAoY2F1c2VkIGJ5IHN0eWxlc2hl
ZXRzKSBhbmQgZXhwbGljaXRseSBuZWdhdGUgdGV4dAogICAgIC8vIGRlY29yYXRpb24gd2hpbGUg
cHVzaGluZyBkb3duLgogCi0gICAgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9k
ZShzdGFydC5ub2RlKCksIGZhbHNlKTsKKyAgICBpZiAobV9hcHBseVN0eWxlTW9kZSA9PSBBZGRU
ZXh0RGVjb3JhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZVRvUHVzaERvd24gPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHJhbmdlQ29tcGxpYW50RXF1
aXZhbGVudChzdGFydCksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChlbmQpKTsKKworICAgIHB1
c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5vZGUoc3RhcnQubm9kZSgpLCBmYWxzZSwg
cmFuZ2VUb1B1c2hEb3duLmdldCgpLCBzdHlsZVRvQXBwbHkpOwogICAgIHVwZGF0ZUxheW91dCgp
OwotICAgIHB1c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5vZGUoc3RhcnQubm9kZSgp
LCB0cnVlKTsKKyAgICBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91bmROb2RlKHN0YXJ0
Lm5vZGUoKSwgdHJ1ZSwgcmFuZ2VUb1B1c2hEb3duLmdldCgpLCBzdHlsZVRvQXBwbHkpOwogCi0g
ICAgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZShlbmQubm9kZSgpLCBmYWxz
ZSk7CisgICAgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9kZShlbmQubm9kZSgp
LCBmYWxzZSwgcmFuZ2VUb1B1c2hEb3duLmdldCgpLCBzdHlsZVRvQXBwbHkpOwogICAgIHVwZGF0
ZUxheW91dCgpOwotICAgIHB1c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUFyb3VuZE5vZGUoZW5k
Lm5vZGUoKSwgdHJ1ZSk7CisgICAgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9k
ZShlbmQubm9kZSgpLCB0cnVlLCByYW5nZVRvUHVzaERvd24uZ2V0KCksIHN0eWxlVG9BcHBseSk7
CiB9CiAKIHN0YXRpYyBpbnQgbWF4UmFuZ2VPZmZzZXQoTm9kZSAqbikKQEAgLTEzNzYsMTMgKzE0
MzMsMjAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bAogICAgIEFT
U0VSVChzdGFydC5ub2RlKCktPmluRG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKGVuZC5ub2RlKCkt
PmluRG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKGNvbXBhcmVQb3NpdGlvbnMoc3RhcnQsIGVuZCkg
PD0gMCk7Ci0gICAgCisKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uU3BlY2lh
bFByb3BlcnR5ID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CiAKLSAgICBpZiAodGV4dERlY29yYXRpb25TcGVjaWFs
UHJvcGVydHkpIHsKLSAgICAgICAgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXRCb3VuZGFy
aWVzKHN0YXJ0LmRvd25zdHJlYW0oKSwgZW5kLnVwc3RyZWFtKCkpOworICAgIGlmICh0ZXh0RGVj
b3JhdGlvblNwZWNpYWxQcm9wZXJ0eSAmJiBtX2FwcGx5U3R5bGVNb2RlICE9IEFkZFRleHREZWNv
cmF0aW9uKSB7CisgICAgICAgIHB1c2hEb3duVGV4dERlY29yYXRpb25TdHlsZUF0Qm91bmRhcmll
cyhzdGFydC5kb3duc3RyZWFtKCksIGVuZC51cHN0cmVhbSgpLCBzdHlsZS5nZXQoKSk7CiAgICAg
ICAgIHN0eWxlID0gc3R5bGUtPmNvcHkoKTsKLSAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb24sIHRleHREZWNvcmF0aW9uU3BlY2lhbFByb3BlcnR5LT5j
c3NUZXh0KCksIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KENTU1Byb3BlcnR5V2Via2l0VGV4
dERlY29yYXRpb25zSW5FZmZlY3QpKTsKKyAgICAgICAgaWYgKG1fYXBwbHlTdHlsZU1vZGUgPT0g
UmVwbGFjZUFsbFRleHREZWNvcmF0aW9ucykKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCB0ZXh0RGVjb3JhdGlvblNwZWNpYWxQcm9wZXJ0
eS0+Y3NzVGV4dCgpLCBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShDU1NQcm9wZXJ0eVdlYmtp
dFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
Ly8gU2luY2Ugd2UgYXJlIHJlbW92aW5nIHRoZSB0ZXh0IGRlY29yYXRpb25zIHNwZWNpZmllZCBp
biAtd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0LAorICAgICAgICAgICAgLy8gd2Ug
c2hvdWxkIG5vdCBhZGQgYW55dGhpbmcgdG8gb3IgcmVwbGFjZSB0ZXh0IGRlY29yYXRpb24uCisg
ICAgICAgICAgICBBU1NFUlQobV9hcHBseVN0eWxlTW9kZSA9PSBSZW1vdmVUZXh0RGVjb3JhdGlv
bik7CisgICAgICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVj
b3JhdGlvbik7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBUaGUgcyBhbmQgZSB2YXJpYWJs
ZXMgc3RvcmUgdGhlIHBvc2l0aW9ucyB1c2VkIHRvIHNldCB0aGUgZW5kaW5nIHNlbGVjdGlvbiBh
ZnRlciBzdHlsZSByZW1vdmFsCkBAIC0xNzAzLDggKzE3NjcsMTQgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZgogewogICAgIGlmIChtX3JlbW92ZU9ubHkpCiAgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IG5ld1N0eWxlID0gc3R5bGUtPmNvcHkoKTsKKyAgICBpZiAoIXNob3VsZEluY2x1ZGVUZXh0RGVj
b3JhdGlvbigpKSB7CisgICAgICAgIG5ld1N0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKKyAgICAgICAgbmV3U3R5bGUtPnJlbW92
ZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworICAgIH0KIAotICAgIFN0eWxl
Q2hhbmdlIHN0eWxlQ2hhbmdlKHN0eWxlLCBQb3NpdGlvbihzdGFydE5vZGUsIDApKTsKKyAgICBT
dHlsZUNoYW5nZSBzdHlsZUNoYW5nZShuZXdTdHlsZS5nZXQoKSwgUG9zaXRpb24oc3RhcnROb2Rl
LCAwKSk7CiAKICAgICAvLwogICAgIC8vIEZvbnQgdGFncyBuZWVkIHRvIGdvIG91dHNpZGUgb2Yg
Q1NTIHNvIHRoYXQgQ1NTIGZvbnQgc2l6ZXMgb3ZlcnJpZGUgbGVhZ2N5IGZvbnQgc2l6ZXMuCklu
ZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2aXNpb24gNDY5MjYpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2RlZmluZSBBcHBseVN0eWxlQ29tbWFuZF9oCiAKICNpbmNsdWRlICJDb21w
b3NpdGVFZGl0Q29tbWFuZC5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQwLDcgKzQxLDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEFwcGx5U3R5bGVDb21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBhY3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdl
QXR0cmlidXRlcywgRVByb3BlcnR5TGV2ZWwgbGV2ZWwgPSBQcm9wZXJ0eURlZmF1bHQpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFwcGx5U3R5bGVDb21tYW5kKGRvY3VtZW50
LCBzdHlsZSwgYWN0aW9uLCBsZXZlbCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFw
cGx5U3R5bGVDb21tYW5kKGRvY3VtZW50LCBzdHlsZSwgYWN0aW9uLCBsZXZlbCwgUmVwbGFjZUFs
bFRleHREZWNvcmF0aW9ucykpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBseVN0
eWxlQ29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIEVkaXRBY3Rpb24gYWN0aW9uLCBBcHBseVN0eWxlVGV4dERlY29yYXRpb25Nb2Rl
IG1vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFwcGx5U3R5bGVDb21t
YW5kKGRvY3VtZW50LCBzdHlsZSwgYWN0aW9uLCBQcm9wZXJ0eURlZmF1bHQsIG1vZGUpKTsKICAg
ICB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXBwbHlTdHlsZUNvbW1hbmQ+IGNyZWF0ZShEb2N1
bWVudCogZG9jdW1lbnQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24gYWN0aW9uID0gRWRpdEFj
dGlvbkNoYW5nZUF0dHJpYnV0ZXMsIEVQcm9wZXJ0eUxldmVsIGxldmVsID0gUHJvcGVydHlEZWZh
dWx0KQogICAgIHsKQEAgLTUyLDcgKzU3LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LSAgICBBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCosIENTU1N0eWxlRGVjbGFyYXRpb24qLCBF
ZGl0QWN0aW9uLCBFUHJvcGVydHlMZXZlbCk7CisgICAgQXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1l
bnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlvbiwgRVByb3BlcnR5TGV2ZWwsIEFw
cGx5U3R5bGVUZXh0RGVjb3JhdGlvbk1vZGUpOwogICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3Vt
ZW50KiwgQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
UG9zaXRpb24mIGVuZCwgRWRpdEFjdGlvbiwgRVByb3BlcnR5TGV2ZWwpOwogICAgIEFwcGx5U3R5
bGVDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4sIGJvb2wgcmVtb3ZlT25seSwgRWRpdEFjdGlv
bik7CiAKQEAgLTYwLDYgKzY1LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24g
ZWRpdGluZ0FjdGlvbigpIGNvbnN0OwogCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIGJvb2wgc2hvdWxk
UmVtb3ZlVGV4dERlY29yYXRpb24oQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVUb0FwcGx5LCBp
bnQgdGV4dERlY29yYXRpb25WYWx1ZSkgY29uc3Q7CisgICAgYm9vbCBzaG91bGRJbmNsdWRlVGV4
dERlY29yYXRpb24oKSBjb25zdCB7cmV0dXJuIG1fYXBwbHlTdHlsZU1vZGUgIT0gUmVtb3ZlVGV4
dERlY29yYXRpb247fQogCiAgICAgLy8gc3R5bGUtcmVtb3ZhbCBoZWxwZXJzCiAgICAgYm9vbCBp
bXBsaWNpdGx5U3R5bGVkRWxlbWVudFNob3VsZEJlUmVtb3ZlZFdoZW5BcHBseWluZ1N0eWxlKEhU
TUxFbGVtZW50KiwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKTsKQEAgLTcxLDEwICs3OCwx
MCBAQCBwcml2YXRlOgogICAgIGJvb2wgbm9kZUZ1bGx5U2VsZWN0ZWQoTm9kZSosIGNvbnN0IFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29uc3Q7CiAgICAgYm9vbCBub2Rl
RnVsbHlVbnNlbGVjdGVkKE5vZGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0
aW9uJiBlbmQpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IGV4dHJhY3RUZXh0RGVjb3JhdGlvblN0eWxlKE5vZGUqKTsKLSAgICBQYXNzUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBleHRyYWN0QW5kTmVnYXRlVGV4dERlY29yYXRpb25T
dHlsZShOb2RlKik7CisgICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
ZXh0cmFjdEFuZE5lZ2F0ZVRleHREZWNvcmF0aW9uU3R5bGUoTm9kZSosIENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlVG9BcHBseSwgYm9vbCB0YWtlQ2FyZU9mU3R5bGVSdWxlcyk7CiAgICAgdm9p
ZCBhcHBseVRleHREZWNvcmF0aW9uU3R5bGUoTm9kZSosIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uICpzdHlsZSk7Ci0gICAgdm9pZCBwdXNoRG93blRleHREZWNvcmF0aW9uU3R5bGVBcm91bmRO
b2RlKE5vZGUqLCBib29sIGZvcmNlTmVnYXRlKTsKLSAgICB2b2lkIHB1c2hEb3duVGV4dERlY29y
YXRpb25TdHlsZUF0Qm91bmRhcmllcyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0
aW9uJiBlbmQpOworICAgIHZvaWQgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXJvdW5kTm9k
ZShOb2RlKiwgYm9vbCBmb3JjZU5lZ2F0ZSwgUmFuZ2UqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZVRvQXBwbHkpOworICAgIHZvaWQgcHVzaERvd25UZXh0RGVjb3JhdGlvblN0eWxlQXRCb3Vu
ZGFyaWVzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGVUb0FwcGx5KTsKICAgICAKICAgICAvLyBzdHlsZS1hcHBsaWNh
dGlvbiBoZWxwZXJzCiAgICAgdm9pZCBhcHBseUJsb2NrU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qKTsKQEAgLTExMCwxMSArMTE3LDEyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Vz
ZUVuZGluZ1NlbGVjdGlvbjsKICAgICBSZWZQdHI8RWxlbWVudD4gbV9zdHlsZWRJbmxpbmVFbGVt
ZW50OwogICAgIGJvb2wgbV9yZW1vdmVPbmx5OworICAgIEFwcGx5U3R5bGVUZXh0RGVjb3JhdGlv
bk1vZGUgbV9hcHBseVN0eWxlTW9kZTsKIH07CiAKIGJvb2wgaXNTdHlsZVNwYW4oY29uc3QgTm9k
ZSopOwogUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChEb2N1
bWVudCopOwotUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBnZXRQcm9wZXJ0aWVz
Tm90SW5Db21wdXRlZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24qIGNvbXB1dGVkU3R5bGUpOworUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBnZXRQcm9wZXJ0aWVzTm90SW5Db21wdXRlZFN0eWxlKENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxlKTsKIAog
ZW51bSBTaG91bGRJbmNsdWRlVHlwaW5nU3R5bGUgewogICAgIEluY2x1ZGVUeXBpbmdTdHlsZSwK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA0NjkyNikKKysrIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTMsNyArNzEzLDcgQEAgYm9vbCBFZGl0b3I6
OmRpc3BhdGNoQ1BQRXZlbnQoY29uc3QgQXRvbQogICAgIHJldHVybiAhbm9EZWZhdWx0UHJvY2Vz
c2luZzsKIH0KIAotdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK3ZvaWQgRWRpdG9yOjphcHBseVN0eWxl
KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIEFw
cGx5U3R5bGVUZXh0RGVjb3JhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb25UeXBlKCkpIHsKICAgICAgICAgY2FzZSBWaXNpYmxlU2Vs
ZWN0aW9uOjpOb1NlbGVjdGlvbjoKQEAgLTcyNCw3ICs3MjQsNyBAQCB2b2lkIEVkaXRvcjo6YXBw
bHlTdHlsZShDU1NTdHlsZURlY2xhcmF0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKICAgICAgICAgICAgIGlmIChzdHls
ZSkKLSAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0
ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOworICAgICAgICAg
ICAgICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKG1fZnJhbWUtPmRv
Y3VtZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uLCBtb2RlKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICB9CiB9CkBAIC03NDgsMTMgKzc0OCwxMyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJh
Z3JhcGhTdHlsZShDU1NTdHlsCiAgICAgfQogfQogCi12b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRv
U2VsZWN0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24pCit2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIEFwcGx5U3R5bGVUZXh0RGVj
b3JhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5sZW5ndGgoKSA9
PSAwIHx8ICFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChjbGll
bnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQotICAgICAgICBhcHBseVN0eWxlKHN0
eWxlLCBlZGl0aW5nQWN0aW9uKTsKKyAgICAgICAgYXBwbHlTdHlsZShzdHlsZSwgZWRpdGluZ0Fj
dGlvbiwgbW9kZSk7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlVG9TZWxl
Y3Rpb24oQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
bikKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDQ2OTI2KQorKysgV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBAIHN0cnVjdCBDb21wb3NpdGlv
blVuZGVybGluZSB7CiBlbnVtIFRyaVN0YXRlIHsgRmFsc2VUcmlTdGF0ZSwgVHJ1ZVRyaVN0YXRl
LCBNaXhlZFRyaVN0YXRlIH07CiBlbnVtIEVkaXRvckNvbW1hbmRTb3VyY2UgeyBDb21tYW5kRnJv
bU1lbnVPcktleUJpbmRpbmcsIENvbW1hbmRGcm9tRE9NLCBDb21tYW5kRnJvbURPTVdpdGhVc2Vy
SW50ZXJmYWNlIH07CiBlbnVtIFdyaXRpbmdEaXJlY3Rpb24geyBOYXR1cmFsV3JpdGluZ0RpcmVj
dGlvbiwgTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uLCBSaWdodFRvTGVmdFdyaXRpbmdEaXJl
Y3Rpb24gfTsKK2VudW0gQXBwbHlTdHlsZVRleHREZWNvcmF0aW9uTW9kZSB7UmVwbGFjZUFsbFRl
eHREZWNvcmF0aW9ucyA9IDAsIEFkZFRleHREZWNvcmF0aW9uLCBSZW1vdmVUZXh0RGVjb3JhdGlv
bn07CiAKIGNsYXNzIEVkaXRvciB7CiBwdWJsaWM6CkBAIC0xMzksOSArMTQwLDkgQEAgcHVibGlj
OgogICAgIE5vZGUqIHJlbW92ZWRBbmNob3IoKSBjb25zdCB7IHJldHVybiBtX3JlbW92ZWRBbmNo
b3IuZ2V0KCk7IH0KICAgICB2b2lkIHNldFJlbW92ZWRBbmNob3IoUGFzc1JlZlB0cjxOb2RlPiBu
KSB7IG1fcmVtb3ZlZEFuY2hvciA9IG47IH0KIAotICAgIHZvaWQgYXBwbHlTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25VbnNwZWNpZmllZCk7CisgICAg
dm9pZCBhcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBFZGl0QWN0aW9uID0gRWRpdEFj
dGlvblVuc3BlY2lmaWVkLCBBcHBseVN0eWxlVGV4dERlY29yYXRpb25Nb2RlID0gUmVwbGFjZUFs
bFRleHREZWNvcmF0aW9ucyk7CiAgICAgdm9pZCBhcHBseVBhcmFncmFwaFN0eWxlKENTU1N0eWxl
RGVjbGFyYXRpb24qLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKLSAgICB2
b2lkIGFwcGx5U3R5bGVUb1NlbGVjdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlv
bik7CisgICAgdm9pZCBhcHBseVN0eWxlVG9TZWxlY3Rpb24oQ1NTU3R5bGVEZWNsYXJhdGlvbios
IEVkaXRBY3Rpb24sIEFwcGx5U3R5bGVUZXh0RGVjb3JhdGlvbk1vZGUgPSBSZXBsYWNlQWxsVGV4
dERlY29yYXRpb25zKTsKICAgICB2b2lkIGFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihD
U1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlvbik7CiAKICAgICB2b2lkIGFwcGxpZWRFZGl0
aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDQ2OTI2KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxNiArOTAsMTYgQEAgc3RhdGljIEZyYW1lKiB0YXJn
ZXRGcmFtZShGcmFtZSogZnJhbWUsIAogICAgIHJldHVybiBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpOwogfQogCi1zdGF0aWMgYm9vbCBhcHBseUNvbW1hbmRUb0ZyYW1lKEZyYW1lKiBmcmFtZSwg
RWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCitzdGF0aWMgYm9vbCBhcHBseUNvbW1hbmRUb0ZyYW1l
KEZyYW1lKiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0
aW9uLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEFwcGx5U3R5bGVUZXh0RGVj
b3JhdGlvbk1vZGUgbW9kZSA9IFJlcGxhY2VBbGxUZXh0RGVjb3JhdGlvbnMpCiB7CiAgICAgLy8g
RklYTUU6IFdlIGRvbid0IGNhbGwgc2hvdWxkQXBwbHlTdHlsZSB3aGVuIHRoZSBzb3VyY2UgaXMg
RE9NOyBpcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGF0PwogICAgIHN3aXRjaCAoc291cmNl
KSB7CiAgICAgICAgIGNhc2UgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nOgotICAgICAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLT5hcHBseVN0eWxlVG9TZWxlY3Rpb24oc3R5bGUsIGFjdGlvbik7
CisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGVUb1NlbGVjdGlvbihzdHls
ZSwgYWN0aW9uLCBtb2RlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNl
IENvbW1hbmRGcm9tRE9NOgogICAgICAgICBjYXNlIENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJbnRl
cmZhY2U6Ci0gICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoc3R5bGUpOwor
ICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5hcHBseVN0eWxlKHN0eWxlLCBFZGl0QWN0aW9u
VW5zcGVjaWZpZWQsIG1vZGUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTIzLDIyICsxMjMsMTkgQEAgc3RhdGljIGJvb2wg
ZXhlY3V0ZUFwcGx5U3R5bGUoRnJhbWUqIGZyYQogLy8gRklYTUU6IGV4ZWN1dGVUb2dnbGVTdHls
ZUluTGlzdCBkb2VzIG5vdCBoYW5kbGUgY29tcGxpY2F0ZWQgY2FzZXMgc3VjaCBhcyA8Yj48dT5o
ZWxsbzwvdT53b3JsZDwvYj4gcHJvcGVybHkuCiAvLyAgICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0
IHVzZSBFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBz
dHlsZSBidXQgd2UgY2Fubm90IGZpeCB0aGlzCiAvLyAgICAgICAgdW50aWwgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3ODE4IGlzIHJlc29sdmVkLgotc3RhdGljIGJv
b2wgZXhlY3V0ZVRvZ2dsZVN0eWxlSW5MaXN0KEZyYW1lKiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNv
dXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBpbnQgcHJvcGVydHlJRCwgQ1NTVmFsdWUq
IHZhbHVlKQorc3RhdGljIGJvb2wgZXhlY3V0ZVRvZ2dsZVRleHREZWNvcmF0aW9uKEZyYW1lKiBm
cmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBpbnQg
cHJvcGVydHlJRCwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIE5vZGUqIG5vZGVUb1JlbW92ZSA9IDA7CiAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9uU3R5bGUgPSBmcmFtZS0+c2VsZWN0aW9uQ29tcHV0ZWRT
dHlsZShub2RlVG9SZW1vdmUpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc2VsZWN0ZWRDU1NWYWx1
ZSA9IHNlbGVjdGlvblN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwotICAg
IFN0cmluZyBuZXdTdHlsZSA9ICJub25lIjsKKworICAgIEFwcGx5U3R5bGVUZXh0RGVjb3JhdGlv
bk1vZGUgbW9kZSA9IEFkZFRleHREZWNvcmF0aW9uOwogICAgIGlmIChzZWxlY3RlZENTU1ZhbHVl
LT5pc1ZhbHVlTGlzdCgpKSB7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNlbGVjdGVk
Q1NTVmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oc2VsZWN0ZWRDU1NWYWx1
ZS5nZXQoKSk7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPnJlbW92ZUFsbCh2
YWx1ZSkpCi0gICAgICAgICAgICBzZWxlY3RlZENTU1ZhbHVlTGlzdC0+YXBwZW5kKHZhbHVlKTsK
LSAgICAgICAgaWYgKHNlbGVjdGVkQ1NTVmFsdWVMaXN0LT5sZW5ndGgoKSkKLSAgICAgICAgICAg
IG5ld1N0eWxlID0gc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPmNzc1RleHQoKTsKLQotICAgIH0gZWxz
ZSBpZiAoc2VsZWN0ZWRDU1NWYWx1ZS0+Y3NzVGV4dCgpID09ICJub25lIikKLSAgICAgICAgbmV3
U3R5bGUgPSB2YWx1ZS0+Y3NzVGV4dCgpOworICAgICAgICBpZiAoc2VsZWN0ZWRDU1NWYWx1ZUxp
c3QtPmhhc1ZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIG1vZGUgPSBSZW1vdmVUZXh0RGVjb3Jh
dGlvbjsKKyAgICB9CiAKICAgICBBU1NFUlQoZWMgPT0gMCk7CiAgICAgaWYgKG5vZGVUb1JlbW92
ZSkgewpAQCAtMTQ4LDggKzE0NSw4IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVUb2dnbGVTdHlsZUlu
TGlzdChGcmEKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgaGF2aW5nIHRvIGNvbnZl
cnQgbmV3IHN0eWxlIGludG8gdGV4dC4gIFdlIHNob3VsZCBoYXZlIHNldFByb3BlcnR5Q1NTVmFs
dWUuCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBuZXdNdXRhYmxlU3R5
bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgbmV3TXV0YWJs
ZVN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBuZXdTdHlsZSxlYyk7Ci0gICAgcmV0dXJu
IGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJhbWUsIHNvdXJjZSwgYWN0aW9uLCBuZXdNdXRhYmxlU3R5
bGUuZ2V0KCkpOworICAgIG5ld011dGFibGVTdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwg
dmFsdWUtPmNzc1RleHQoKSwgZWMpOworICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZy
YW1lLCBzb3VyY2UsIGFjdGlvbiwgbmV3TXV0YWJsZVN0eWxlLmdldCgpLCBtb2RlKTsKIH0KIAog
c3RhdGljIGJvb2wgZXhlY3V0ZVRvZ2dsZVN0eWxlKEZyYW1lKiBmcmFtZSwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBpbnQgcHJvcGVydHlJRCwgY29uc3Qg
Y2hhciogb2ZmVmFsdWUsIGNvbnN0IGNoYXIqIG9uVmFsdWUpCkBAIC05NjAsNyArOTU3LDcgQEAg
c3RhdGljIGJvb2wgZXhlY3V0ZVNldE1hcmsoRnJhbWUqIGZyYW1lLAogc3RhdGljIGJvb2wgZXhl
Y3V0ZVN0cmlrZXRocm91Z2goRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQogewogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbGluZVRocm91Z2ggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NW
YWx1ZUxpbmVUaHJvdWdoKTsKLSAgICByZXR1cm4gZXhlY3V0ZVRvZ2dsZVN0eWxlSW5MaXN0KGZy
YW1lLCBzb3VyY2UsIEVkaXRBY3Rpb25VbmRlcmxpbmUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERl
Y29yYXRpb25zSW5FZmZlY3QsIGxpbmVUaHJvdWdoLmdldCgpKTsKKyAgICByZXR1cm4gZXhlY3V0
ZVRvZ2dsZVRleHREZWNvcmF0aW9uKGZyYW1lLCBzb3VyY2UsIEVkaXRBY3Rpb25VbmRlcmxpbmUs
IENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsIGxpbmVUaHJvdWdoLmdl
dCgpKTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZVN0eWxlV2l0aENTUyhGcmFtZSogZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTEw
MTQsNyArMTAxMSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVUcmFuc3Bvc2UoRnJhbWUqIGZyYW0K
IHN0YXRpYyBib29sIGV4ZWN1dGVVbmRlcmxpbmUoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRv
ckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQogewogICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gdW5kZXJsaW5lID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50
aWZpZXIoQ1NTVmFsdWVVbmRlcmxpbmUpOwotICAgIHJldHVybiBleGVjdXRlVG9nZ2xlU3R5bGVJ
bkxpc3QoZnJhbWUsIHNvdXJjZSwgRWRpdEFjdGlvblVuZGVybGluZSwgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgdW5kZXJsaW5lLmdldCgpKTsKKyAgICByZXR1cm4g
ZXhlY3V0ZVRvZ2dsZVRleHREZWNvcmF0aW9uKGZyYW1lLCBzb3VyY2UsIEVkaXRBY3Rpb25VbmRl
cmxpbmUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsIHVuZGVybGlu
ZS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVVbmRvKEZyYW1lKiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68185</attachid>
            <date>2010-09-20 21:17:44 -0700</date>
            <delta_ts>2010-09-22 01:01:19 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>wip27818</filename>
            <type>text/plain</type>
            <size>37984</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA2Nzg3OSkKKysrIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MTQ5LDcgKzUxNDksNyBAQAog
ICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXTsKICAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh3ZWJGcmFtZSk7CiAgICAgaWYgKGNvcmVGcmFtZSkK
LSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShjb3JlKHN0eWxlKSk7Cisg
ICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoY29yZShzdHlsZSksIFJlcGxh
Y2VUZXh0RGVjb3JhdGlvbik7CiB9CiAKIEBlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0J
KHJldmlzaW9uIDY3ODc5KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC04ODksNyArODg5LDcgQEAKIHsKICAgICBpZiAoIV9wcml2YXRlLT5jb3Jl
RnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3Io
KS0+Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKGNvcmUoc3R5bGUpLCB1bmRvQWN0aW9uKTsKKyAg
ICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS0+Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxl
KGNvcmUoc3R5bGUpLCBSZXBsYWNlVGV4dERlY29yYXRpb24sIHVuZG9BY3Rpb24pOwogfQogCiAt
ICh2b2lkKV9kcmFnU291cmNlRW5kZWRBdDooTlNQb2ludCl3aW5kb3dMb2Mgb3BlcmF0aW9uOihO
U0RyYWdPcGVyYXRpb24pb3BlcmF0aW9uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
CShyZXZpc2lvbiA2Nzg3OSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDM0NCw3ICs0MzQ0LDcgQEAKIC0gKHZvaWQpX2FwcGx5U3R5bGVU
b1NlbGVjdGlvbjooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRvQWN0aW9u
OihFZGl0QWN0aW9uKXVuZG9BY3Rpb24KIHsKICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5
bGVUb1NlbGVjdGlvbihjb3JlKHN0eWxlKSwgdW5kb0FjdGlvbik7CisgICAgICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGVUb1NlbGVjdGlvbihjb3JlKHN0eWxlKSwgUmVwbGFjZVRl
eHREZWNvcmF0aW9uLCB1bmRvQWN0aW9uKTsKIH0KIAogLSAodm9pZClfYXBwbHlQYXJhZ3JhcGhT
dHlsZVRvU2VsZWN0aW9uOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0aFVuZG9B
Y3Rpb246KEVkaXRBY3Rpb24pdW5kb0FjdGlvbgpAQCAtNDY2OCw3ICs0NjY4LDcgQEAKICAgICBX
ZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwogICAgIGlmIChbW3dlYlZpZXcgX2Vk
aXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6
c3R5bGUgdG9FbGVtZW50c0luRE9NUmFuZ2U6cmFuZ2VdKQogICAgICAgICBpZiAoRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgICAgICBjb3JlRnJhbWUtPmVk
aXRvcigpLT5hcHBseVN0eWxlKGNvcmUoc3R5bGUpLCBbc2VsZiBfdW5kb0FjdGlvbkZyb21Db2xv
clBhbmVsV2l0aFNlbGVjdG9yOnNlbGVjdG9yXSk7CisgICAgICAgICAgICBjb3JlRnJhbWUtPmVk
aXRvcigpLT5hcHBseVN0eWxlKGNvcmUoc3R5bGUpLCBSZXBsYWNlVGV4dERlY29yYXRpb24sIFtz
ZWxmIF91bmRvQWN0aW9uRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6c2VsZWN0b3JdKTsKIH0K
IAogLSAodm9pZCljaGFuZ2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjooaWQpc2VuZGVyCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5l
eHAuaW4JKHJldmlzaW9uIDY3ODc5KQorKysgV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtNjAzLDcgKzYwMyw3IEBACiBfX1pON1dlYkNvcmU2Q3Vyc29yOGZyb21UeXBl
RU5TMF80VHlwZUUKIF9fWk43V2ViQ29yZTZDdXJzb3JEMUV2CiBfX1pON1dlYkNvcmU2Q3Vyc29y
YVNFUktTMF8KLV9fWk43V2ViQ29yZTZFZGl0b3IxMGFwcGx5U3R5bGVFUE5TXzE5Q1NTU3R5bGVE
ZWNsYXJhdGlvbkVOU18xMEVkaXRBY3Rpb25FCitfX1pON1dlYkNvcmU2RWRpdG9yMTBhcHBseVN0
eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMjlUZXh0RGVjb3JhdGlvbkFwcGxpY2F0
aW9uTW9kZUVOU18xMEVkaXRBY3Rpb25FCiBfX1pON1dlYkNvcmU2RWRpdG9yMTBmaW5kU3RyaW5n
RVJLTjNXVEY2U3RyaW5nRWJiYmIKIF9fWk43V2ViQ29yZTZFZGl0b3IxMGluc2VydFRleHRFUktO
M1dURjZTdHJpbmdFUE5TXzVFdmVudEUKIF9fWk43V2ViQ29yZTZFZGl0b3IxM2NhbkRIVE1MUGFz
dGVFdgpAQCAtNjE5LDExICs2MTksMTEgQEAKIF9fWk43V2ViQ29yZTZFZGl0b3IxOWNvdW50TWF0
Y2hlc0ZvclRleHRFUktOM1dURjZTdHJpbmdFYmpiCiBfX1pON1dlYkNvcmU2RWRpdG9yMTlkZWxl
dGVXaXRoRGlyZWN0aW9uRU5TXzE5U2VsZWN0aW9uQ29udHJvbGxlcjEwRURpcmVjdGlvbkVOU18x
NVRleHRHcmFudWxhcml0eUViYgogX19aTjdXZWJDb3JlNkVkaXRvcjE5aW5zZXJ0VW5vcmRlcmVk
TGlzdEV2Ci1fX1pON1dlYkNvcmU2RWRpdG9yMjFhcHBseVN0eWxlVG9TZWxlY3Rpb25FUE5TXzE5
Q1NTU3R5bGVEZWNsYXJhdGlvbkVOU18xMEVkaXRBY3Rpb25FCitfX1pON1dlYkNvcmU2RWRpdG9y
MjFhcHBseVN0eWxlVG9TZWxlY3Rpb25FUE5TXzE5Q1NTU3R5bGVEZWNsYXJhdGlvbkVOU18yOVRl
eHREZWNvcmF0aW9uQXBwbGljYXRpb25Nb2RlRU5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29y
ZTZFZGl0b3IyMWlzU2VsZWN0aW9uTWlzc3BlbGxlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjNz
ZXRCYXNlV3JpdGluZ0RpcmVjdGlvbkVOU18xNldyaXRpbmdEaXJlY3Rpb25FCiBfX1pON1dlYkNv
cmU2RWRpdG9yMjRhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmdFYgotX19aTjdXZWJDb3JlNkVkaXRv
cjI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNf
MTBFZGl0QWN0aW9uRQorX19aTjdXZWJDb3JlNkVkaXRvcjI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0
eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMjlUZXh0RGVjb3JhdGlvbkFwcGxpY2F0
aW9uTW9kZUVOU18xMEVkaXRBY3Rpb25FCiBfX1pON1dlYkNvcmU2RWRpdG9yMjRoYW5kbGVSZWpl
Y3RlZENvcnJlY3Rpb25FdgogX19aTjdXZWJDb3JlNkVkaXRvcjI0aXNTZWxlY3Rpb25VbmdyYW1t
YXRpY2FsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
RXYKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNp
b24gNjc4NzkpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAKIAogdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBl
ZGl0aW5nQWN0aW9uKQogewotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGx5U3R5bGVD
b21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24pKTsKKyAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50
KCksIHN0eWxlLCBSZXBsYWNlVGV4dERlY29yYXRpb24sIGVkaXRpbmdBY3Rpb24pKTsKIH0KIAog
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShy
ZXZpc2lvbiA2Nzg3OSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsMTYgKzk1LDE2IEBACiAgICAgcmV0dXJuIG5vZGUtPmRvY3VtZW50
KCktPmZyYW1lKCk7CiB9CiAKLXN0YXRpYyBib29sIGFwcGx5Q29tbWFuZFRvRnJhbWUoRnJhbWUq
IGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3N0YXRpYyBib29sIGFwcGx5Q29tbWFu
ZFRvRnJhbWUoRnJhbWUqIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFj
dGlvbiBhY3Rpb24sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgVGV4dERlY29y
YXRpb25BcHBsaWNhdGlvbk1vZGUgdGV4dERlY29yYXRpb25Nb2RlKQogewogICAgIC8vIEZJWE1F
OiBXZSBkb24ndCBjYWxsIHNob3VsZEFwcGx5U3R5bGUgd2hlbiB0aGUgc291cmNlIGlzIERPTTsg
aXMgdGhlcmUgYSBnb29kIHJlYXNvbiBmb3IgdGhhdD8KICAgICBzd2l0Y2ggKHNvdXJjZSkgewog
ICAgIGNhc2UgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nOgotICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmFwcGx5U3R5bGVUb1NlbGVjdGlvbihzdHlsZSwgYWN0aW9uKTsKKyAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5hcHBseVN0eWxlVG9TZWxlY3Rpb24oc3R5bGUsIHRleHREZWNvcmF0aW9u
TW9kZSwgYWN0aW9uKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDb21tYW5kRnJv
bURPTToKICAgICBjYXNlIENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJbnRlcmZhY2U6Ci0gICAgICAg
IGZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShzdHlsZSk7CisgICAgICAgIGZyYW1lLT5lZGl0
b3IoKS0+YXBwbHlTdHlsZShzdHlsZSwgdGV4dERlY29yYXRpb25Nb2RlKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTE1LDE0ICsx
MTUsMTQgQEAKIHsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
ID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShwcm9wZXJ0eUlELCBwcm9wZXJ0eVZhbHVlKTsKLSAgICByZXR1cm4gYXBwbHlDb21t
YW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdldCgpKTsKKyAgICByZXR1
cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdldCgp
LCBSZXBsYWNlVGV4dERlY29yYXRpb24pOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlQXBwbHlT
dHlsZShGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9u
IGFjdGlvbiwgaW50IHByb3BlcnR5SUQsIGludCBwcm9wZXJ0eVZhbHVlKQogewogICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHBy
b3BlcnR5VmFsdWUpOwotICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3Vy
Y2UsIGFjdGlvbiwgc3R5bGUuZ2V0KCkpOworICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1l
KGZyYW1lLCBzb3VyY2UsIGFjdGlvbiwgc3R5bGUuZ2V0KCksIFJlcGxhY2VUZXh0RGVjb3JhdGlv
bik7CiB9CiAKIC8vIEZJWE1FOiBleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QgZG9lcyBub3QgaGFu
ZGxlIGNvbXBsaWNhdGVkIGNhc2VzIHN1Y2ggYXMgPGI+PHU+aGVsbG88L3U+d29ybGQ8L2I+IHBy
b3Blcmx5LgpAQCAtMTMwLDM0ICsxMzAsMjEgQEAKIC8vICAgICAgICB1bnRpbCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc4MTggaXMgcmVzb2x2ZWQuCiBzdGF0aWMg
Ym9vbCBleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QoRnJhbWUqIGZyYW1lLCBFZGl0b3JDb21tYW5k
U291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIGludCBwcm9wZXJ0eUlELCBDU1NWYWx1
ZSogdmFsdWUpCiB7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgTm9kZSogbm9kZVRv
UmVtb3ZlID0gMDsKLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBzZWxl
Y3Rpb25TdHlsZSA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShub2Rl
VG9SZW1vdmUpOwotICAgIGlmICghc2VsZWN0aW9uU3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShw
cm9wZXJ0eUlELCB2YWx1ZS0+Y3NzVGV4dCgpKTsgLy8gV2UgbmVlZCB0byBhZGQgdGhpcyBzdHls
ZSB0byBwYXNzIGl0IHRvIHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgLyBzZWxlY3Rpb25IYXNTdHls
ZQogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBzZWxlY3RlZENTU1ZhbHVlID0gc2VsZWN0aW9uU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Ci0gICAgU3RyaW5nIG5ld1N0eWxl
ID0gIm5vbmUiOwotICAgIGlmIChzZWxlY3RlZENTU1ZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNlbGVjdGVkQ1NTVmFsdWVMaXN0ID0gc3RhdGlj
X2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oc2VsZWN0ZWRDU1NWYWx1ZS5nZXQoKSk7Ci0gICAgICAgIGlm
ICghc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPnJlbW92ZUFsbCh2YWx1ZSkpCi0gICAgICAgICAgICBz
ZWxlY3RlZENTU1ZhbHVlTGlzdC0+YXBwZW5kKHZhbHVlKTsKLSAgICAgICAgaWYgKHNlbGVjdGVk
Q1NTVmFsdWVMaXN0LT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG5ld1N0eWxlID0gc2VsZWN0ZWRD
U1NWYWx1ZUxpc3QtPmNzc1RleHQoKTsKKyAgICAvLyBTdHlsZSBpcyBjb25zaWRlcmVkIHByZXNl
bnQgd2hlbgorICAgIC8vIG1hYzogcHJlc2VudCBhdCB0aGUgYmVnaW5uaW5nIG9mIHNlbGVjdGlv
bgorICAgIC8vIG90aGVyOiBwcmVzZW50IHRocm91Z2hvdXQgdGhlIHNlbGVjdGlvbgogCi0gICAg
fSBlbHNlIGlmIChzZWxlY3RlZENTU1ZhbHVlLT5jc3NUZXh0KCkgPT0gIm5vbmUiKQotICAgICAg
ICBuZXdTdHlsZSA9IHZhbHVlLT5jc3NUZXh0KCk7CisgICAgLy8gRklYTUU6IE1ha2Ugc3RhdGVT
dHlsZSgpIHRvIHVzZSB0aGlzIGVkaXRpbmcgbWV0aG9kIHRvbyBmb3IgdGhlIGNhc2VzIHdoZXJl
IGl0J3MgdXNlZCBmb3IgcXVlcnlDb21tYW5kU3RhdGUuCisgICAgYm9vbCBzdHlsZUlzUHJlc2Vu
dDsKKyAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5iZWhhdmlvcigpLnNob3VsZFRvZ2dsZVN0eWxl
QmFzZWRPblN0YXJ0T2ZTZWxlY3Rpb24oKSkKKyAgICAgICAgc3R5bGVJc1ByZXNlbnQgPSBmcmFt
ZS0+ZWRpdG9yKCktPnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoc3R5bGUuZ2V0KCkpOworICAgIGVs
c2UKKyAgICAgICAgc3R5bGVJc1ByZXNlbnQgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhh
c1N0eWxlKHN0eWxlLmdldCgpKSA9PSBUcnVlVHJpU3RhdGU7CiAKLSAgICBBU1NFUlQoIWVjKTsK
LSAgICBpZiAobm9kZVRvUmVtb3ZlKSB7Ci0gICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKGVj
KTsKLSAgICAgICAgQVNTRVJUKCFlYyk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBiZSBoYXZpbmcgdG8gY29udmVydCBuZXcgc3R5bGUgaW50byB0ZXh0LiAgV2Ugc2hvdWxk
IGhhdmUgc2V0UHJvcGVydHlDU1NWYWx1ZS4KLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IG5ld011dGFibGVTdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpj
cmVhdGUoKTsKLSAgICBuZXdNdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5l
d1N0eWxlLCBlYyk7Ci0gICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJhbWUsIHNvdXJj
ZSwgYWN0aW9uLCBuZXdNdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIHJldHVybiBhcHBseUNvbW1h
bmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIGFjdGlvbiwgc3R5bGUuZ2V0KCksIHN0eWxlSXNQcmVz
ZW50ID8gUmVtb3ZlVGV4dERlY29yYXRpb24gOiBBZGRUZXh0RGVjb3JhdGlvbik7CiB9CiAKIHN0
YXRpYyBib29sIGV4ZWN1dGVUb2dnbGVTdHlsZShGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRT
b3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgaW50IHByb3BlcnR5SUQsIGNvbnN0IGNo
YXIqIG9mZlZhbHVlLCBjb25zdCBjaGFyKiBvblZhbHVlKQpAQCAtMTc3LDcgKzE2NCw3IEBACiAg
ICAgICAgIHN0eWxlSXNQcmVzZW50ID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHls
ZShzdHlsZS5nZXQoKSkgPT0gVHJ1ZVRyaVN0YXRlOwogCiAgICAgc3R5bGUtPnNldFByb3BlcnR5
KHByb3BlcnR5SUQsIHN0eWxlSXNQcmVzZW50ID8gb2ZmVmFsdWUgOiBvblZhbHVlKTsKLSAgICBy
ZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdl
dCgpKTsKKyAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rp
b24sIHN0eWxlLmdldCgpLCBSZXBsYWNlVGV4dERlY29yYXRpb24pOwogfQogCiBzdGF0aWMgYm9v
bCBleGVjdXRlQXBwbHlQYXJhZ3JhcGhTdHlsZShGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRT
b3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgcHJvcGVydHlWYWx1ZSkKQEAgLTU4MSw3ICs1NjgsNyBAQAogICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Y3JlYXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJp
ZGksIENTU1ZhbHVlRW1iZWQpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURp
cmVjdGlvbiwgQ1NTVmFsdWVMdHIpOwotICAgIGZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShz
dHlsZS5nZXQoKSwgRWRpdEFjdGlvblNldFdyaXRpbmdEaXJlY3Rpb24pOworICAgIGZyYW1lLT5l
ZGl0b3IoKS0+YXBwbHlTdHlsZShzdHlsZS5nZXQoKSwgUmVwbGFjZVRleHREZWNvcmF0aW9uLCBF
ZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTU4OSw3ICs1NzYsNyBAQAogewogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlTm9ybWFsKTsK
LSAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoc3R5bGUuZ2V0KCksIEVkaXRBY3Rpb25T
ZXRXcml0aW5nRGlyZWN0aW9uKTsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoc3R5
bGUuZ2V0KCksIFJlcGxhY2VUZXh0RGVjb3JhdGlvbiwgRWRpdEFjdGlvblNldFdyaXRpbmdEaXJl
Y3Rpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01OTgsNyArNTg1LDcgQEAKICAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZUVtYmVkKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlUnRsKTsKLSAgICBmcmFtZS0+ZWRpdG9yKCktPmFw
cGx5U3R5bGUoc3R5bGUuZ2V0KCksIEVkaXRBY3Rpb25TZXRXcml0aW5nRGlyZWN0aW9uKTsKKyAg
ICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoc3R5bGUuZ2V0KCksIFJlcGxhY2VUZXh0RGVj
b3JhdGlvbiwgRWRpdEFjdGlvblNldFdyaXRpbmdEaXJlY3Rpb24pOwogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNjc4NzkpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk1LDE4ICs3OTUsMTggQEAKICAg
ICByZXR1cm4gZmluZEV2ZW50VGFyZ2V0RnJvbShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkpOwogfQogCi12b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQordm9pZCBFZGl0b3I6OmFwcGx5U3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFRleHREZWNvcmF0aW9uQXBwbGljYXRpb25N
b2RlIHRleHREZWNvcmF0aW9uTW9kZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewogICAg
IHN3aXRjaCAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvblR5cGUoKSkgewogICAgIGNh
c2UgVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgIC8vIGRvIG5vdGhpbmcK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlv
bjoKLSAgICAgICAgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9u
KTsKKyAgICAgICAgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKHN0eWxlLCB0ZXh0RGVjb3JhdGlv
bk1vZGUsIGVkaXRpbmdBY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZpc2libGVT
ZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAg
ICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVu
dCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOworICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFw
cGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3R5bGUsIHRleHRE
ZWNvcmF0aW9uTW9kZSwgZWRpdGluZ0FjdGlvbikpOwogICAgICAgICBicmVhazsKICAgICB9CiB9
CkBAIC04MjUsMTggKzgyNSwxOCBAQAogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRT
ZWxlY3Rpb246CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKICAg
ICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21t
YW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24sIEFw
cGx5U3R5bGVDb21tYW5kOjpGb3JjZUJsb2NrUHJvcGVydGllcykpOworICAgICAgICAgICAgYXBw
bHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
c3R5bGUsIFJlcGxhY2VUZXh0RGVjb3JhdGlvbiwgZWRpdGluZ0FjdGlvbiwgQXBwbHlTdHlsZUNv
bW1hbmQ6OkZvcmNlQmxvY2tQcm9wZXJ0aWVzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
IAotdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQordm9pZCBFZGl0b3I6OmFwcGx5U3R5
bGVUb1NlbGVjdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgVGV4dERlY29yYXRpb25B
cHBsaWNhdGlvbk1vZGUgdGV4dERlY29yYXRpb25Nb2RlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rp
b24pCiB7CiAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmxlbmd0aCgpIHx8ICFjYW5FZGl0Umlj
aGx5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+
c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpKQotICAgICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9u
KTsKKyAgICAgICAgYXBwbHlTdHlsZShzdHlsZSwgdGV4dERlY29yYXRpb25Nb2RlLCBlZGl0aW5n
QWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlv
bihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpA
QCAtMzIwMywyOCArMzIwMyw2MiBAQAogICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbmV3
U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVj
dGluZyk7CiB9CiAKLXZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK3N0YXRpYyB2
b2lkIHJlc29sdmVUZXh0RGVjb3JhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIFRleHREZWNvcmF0aW9uQXBwbGljYXRpb25Nb2RlIHRleHREZWNvcmF0aW9uTW9kZSwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogZXhpc3RpbmdTdHlsZSkKIHsKKyAgICBpZiAodGV4dERlY29yYXRp
b25Nb2RlID09IFJlcGxhY2VUZXh0RGVjb3JhdGlvbiB8fCAhc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKKyAg
ICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVmUHRyPENTU1ZhbHVlPiBleGlzdGluZ1ZhbHVlID0gZXhpc3RpbmdTdHlsZSA/IGV4
aXN0aW5nU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlv
bikgOiAwOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG5ld1ZhbHVlTGlzdCA9IHRleHREZWNv
cmF0aW9uTW9kZSA9PSBBZGRUZXh0RGVjb3JhdGlvbiA/IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlz
dCo+KHZhbHVlLmdldCgpKS0+Y29weSgpIDogQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFy
YXRlZCgpOworICAgIGlmIChleGlzdGluZ1ZhbHVlICYmIGV4aXN0aW5nVmFsdWUtPmlzVmFsdWVM
aXN0KCkpIAorICAgIHsKKyAgICAgICAgQVNTRVJUKHRleHREZWNvcmF0aW9uTW9kZSA9PSBBZGRU
ZXh0RGVjb3JhdGlvbiB8fCB0ZXh0RGVjb3JhdGlvbk1vZGUgPT0gUmVtb3ZlVGV4dERlY29yYXRp
b24pOworCisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3Qq
PihleGlzdGluZ1ZhbHVlLmdldCgpKS0+bGVuZ3RoKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gc3Rh
dGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oZXhpc3RpbmdWYWx1ZS5nZXQoKSktPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICBpZiAodGV4dERlY29yYXRpb25Nb2RlID09IEFk
ZFRleHREZWNvcmF0aW9uCisgICAgICAgICAgICAgICAgfHwgKHRleHREZWNvcmF0aW9uTW9kZSA9
PSBSZW1vdmVUZXh0RGVjb3JhdGlvbiAmJiAhc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFs
dWUuZ2V0KCkpLT5oYXNWYWx1ZShpdGVtKSkpCisgICAgICAgICAgICAgICAgbmV3VmFsdWVMaXN0
LT5hcHBlbmQoaXRlbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVj
OworICAgIGlmIChuZXdWYWx1ZUxpc3QtPmxlbmd0aCgpKQorICAgICAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgbmV3VmFsdWVM
aXN0LT5jc3NUZXh0KCksIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KENTU1Byb3BlcnR5V2Vi
a2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpLCBlYyk7CisgICAgZWxzZQorICAgICAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwg
Im5vbmUiLCBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KSwgZWMpOworfQorCit2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNl
dFR5cGluZ1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBUZXh0RGVjb3JhdGlvbkFw
cGxpY2F0aW9uTW9kZSB0ZXh0RGVjb3JhdGlvbk1vZGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
bikKK3sKICAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bGVuZ3RoKCkpIHsKICAgICAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKyAgICAKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHVuaWNvZGVCaWRpOworICAgIFJlZlB0
cjxDU1NWYWx1ZT4gZGlyZWN0aW9uOworICAgIGlmIChlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rp
b25TZXRXcml0aW5nRGlyZWN0aW9uKSB7CisgICAgICAgIHVuaWNvZGVCaWRpID0gc3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7CisgICAgICAgIGRpcmVj
dGlvbiA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsK
KyAgICB9CisgICAgTm9kZSogbm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKIAogICAgIC8vIENhbGN1
bGF0ZSB0aGUgY3VycmVudCB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBtdXRhYmxlU3R5bGUgPSBzdHlsZS0+bWFrZU11dGFibGUoKTsKKyAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGV4aXN0aWduU3R5bGUgPSBjb21wdXRl
ZFN0eWxlKG5vZGUpLT5jb3B5KCk7CiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT50eXBp
bmdTdHlsZSgpKSB7Ci0gICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgp
LT5tZXJnZShtdXRhYmxlU3R5bGUuZ2V0KCkpOwotICAgICAgICBtdXRhYmxlU3R5bGUgPSBtX2Zy
YW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKKyAgICAgICAgbXV0YWJsZVN0eWxlLT5t
ZXJnZShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKSwgZmFsc2UpOworICAgICAg
ICBleGlzdGlnblN0eWxlLT5tZXJnZShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUo
KSk7CiAgICAgfQogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlQmlkaTsKLSAgICBSZWZQ
dHI8Q1NTVmFsdWU+IGRpcmVjdGlvbjsKLSAgICBpZiAoZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0
aW9uU2V0V3JpdGluZ0RpcmVjdGlvbikgewotICAgICAgICB1bmljb2RlQmlkaSA9IG11dGFibGVT
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsKLSAgICAg
ICAgZGlyZWN0aW9uID0gbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5RGlyZWN0aW9uKTsKLSAgICB9CisgICAgcmVzb2x2ZVRleHREZWNvcmF0aW9uKG11dGFibGVT
dHlsZS5nZXQoKSwgdGV4dERlY29yYXRpb25Nb2RlLCBleGlzdGlnblN0eWxlLmdldCgpKTsKIAot
ICAgIE5vZGUqIG5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7CiAgICAgY29tcHV0ZWRTdHlsZShub2Rl
KS0+ZGlmZihtdXRhYmxlU3R5bGUuZ2V0KCkpOwogCiAgICAgaWYgKGVkaXRpbmdBY3Rpb24gPT0g
RWRpdEFjdGlvblNldFdyaXRpbmdEaXJlY3Rpb24gJiYgdW5pY29kZUJpZGkpIHsKQEAgLTMyNDAs
NyArMzI3NCw3IEBACiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBibG9j
a1N0eWxlID0gbXV0YWJsZVN0eWxlLT5jb3B5QmxvY2tQcm9wZXJ0aWVzKCk7CiAgICAgYmxvY2tT
dHlsZS0+ZGlmZihtdXRhYmxlU3R5bGUuZ2V0KCkpOwogICAgIGlmIChibG9ja1N0eWxlLT5sZW5n
dGgoKSA+IDApCi0gICAgICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRl
KG1fZnJhbWUtPmRvY3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCksIGVkaXRpbmdBY3Rpb24pKTsK
KyAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+
ZG9jdW1lbnQoKSwgYmxvY2tTdHlsZS5nZXQoKSwgUmVwbGFjZVRleHREZWNvcmF0aW9uLCBlZGl0
aW5nQWN0aW9uKSk7CiAKICAgICAvLyBTZXQgdGhlIHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlw
aW5nIHN0eWxlLgogICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHlsZShtdXRh
YmxlU3R5bGUucmVsZWFzZSgpKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5o
CShyZXZpc2lvbiA2Nzg3OSkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEFwcGx5U3R5bGVDb21t
YW5kX2gKIAogI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAiRWRp
dG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDUsOSArNDYsOSBAQAogICAgIGVu
dW0gSW5saW5lU3R5bGVSZW1vdmFsTW9kZSB7IFJlbW92ZUlmTmVlZGVkLCBSZW1vdmVBbHdheXMs
IFJlbW92ZU5vbmUgfTsKICAgICBlbnVtIEVBZGRTdHlsZWRFbGVtZW50IHsgQWRkU3R5bGVkRWxl
bWVudCwgRG9Ob3RBZGRTdHlsZWRFbGVtZW50IH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
cHBseVN0eWxlQ29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rpb24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJp
YnV0ZXMsIEVQcm9wZXJ0eUxldmVsIGxldmVsID0gUHJvcGVydHlEZWZhdWx0KQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEFwcGx5U3R5bGVDb21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgVGV4dERlY29yYXRpb25BcHBsaWNhdGlvbk1v
ZGUgdGV4dERlY29yYXRpb25Nb2RlLCBFZGl0QWN0aW9uIGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFu
Z2VBdHRyaWJ1dGVzLCBFUHJvcGVydHlMZXZlbCBsZXZlbCA9IFByb3BlcnR5RGVmYXVsdCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1l
bnQsIHN0eWxlLCBhY3Rpb24sIGxldmVsKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1lbnQsIHN0eWxlLCB0ZXh0RGVjb3JhdGlvbk1vZGUsIGFj
dGlvbiwgbGV2ZWwpKTsKICAgICB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXBwbHlTdHlsZUNv
bW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rp
b24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMsIEVQcm9wZXJ0eUxldmVsIGxl
dmVsID0gUHJvcGVydHlEZWZhdWx0KQogICAgIHsKQEAgLTYxLDcgKzYyLDcgQEAKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0eWxlQXRQ
b3NpdGlvbihQb3NpdGlvbiBwb3MsIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSBzaG91bGRJbmNs
dWRlVHlwaW5nU3R5bGUgPSBJZ25vcmVUeXBpbmdTdHlsZSk7CiAKIHByaXZhdGU6Ci0gICAgQXBw
bHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlv
biwgRVByb3BlcnR5TGV2ZWwpOworICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiosIFRleHREZWNvcmF0aW9uQXBwbGljYXRpb25Nb2RlLCBFZGl0QWN0
aW9uLCBFUHJvcGVydHlMZXZlbCk7CiAgICAgQXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqLCBD
U1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kLCBFZGl0QWN0aW9uLCBFUHJvcGVydHlMZXZlbCk7CiAgICAgQXBwbHlTdHlsZUNvbW1h
bmQoUGFzc1JlZlB0cjxFbGVtZW50PiwgYm9vbCByZW1vdmVPbmx5LCBFZGl0QWN0aW9uKTsKIApA
QCAtNzIsMTEgKzczLDExIEBACiAKICAgICAvLyBzdHlsZS1yZW1vdmFsIGhlbHBlcnMKICAgICBi
b29sIHJlbW92ZVN0eWxlRnJvbVJ1bkJlZm9yZUFwcGx5aW5nU3R5bGUoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIHN0eWxlLCBOb2RlKiYgcnVuU3RhcnQsIE5vZGUqJiBydW5FbmQpOwotICAg
IGJvb2wgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUlmTmVl
ZGVkKTsKKyAgICBib29sIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qLCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBS
ZW1vdmVJZk5lZWRlZCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGV4dHJhY3RlZFN0eWxl
ID0gMCk7CiAgICAgaW5saW5lIGJvb2wgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVu
dChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBlbGVtZW50
KSB7cmV0dXJuIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGVsZW1lbnQsIFJl
bW92ZU5vbmUpO30KICAgICBib29sIHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxN
b2RlLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZXh0cmFjdGVkU3R5bGUgPSAwKTsKICAg
ICB2b2lkIHJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhIVE1MRWxl
bWVudComKTsKLSAgICBib29sIHJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiwgSFRNTEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3ZlSWZOZWVk
ZWQpOworICAgIGJvb2wgcmVtb3ZlQ1NTU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
LCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVJZk5lZWRlZCwg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGV4dHJhY3RlZFN0eWxlID0gMCk7CiAgICAgSFRN
TEVsZW1lbnQqIGhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxlKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgTm9kZSopOwogICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IGV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24oQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qLCBOb2RlKiwgYm9vbCBpc1N0eWxlZEVsZW1lbnQpOwogICAgIHZv
aWQgYXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSosIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uICpzdHlsZSk7CkBAIC0xMjIsNiArMTIzLDcgQEAKICAgICBib29sIG1fdXNlRW5kaW5n
U2VsZWN0aW9uOwogICAgIFJlZlB0cjxFbGVtZW50PiBtX3N0eWxlZElubGluZUVsZW1lbnQ7CiAg
ICAgYm9vbCBtX3JlbW92ZU9ubHk7CisgICAgVGV4dERlY29yYXRpb25BcHBsaWNhdGlvbk1vZGUg
bV90ZXh0RGVjb3JhdGlvbk1vZGU7CiB9OwogCiBib29sIGlzU3R5bGVTcGFuKGNvbnN0IE5vZGUq
KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDY3ODc5KQorKysgV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBACiBlbnVtIFRyaVN0YXRlIHsg
RmFsc2VUcmlTdGF0ZSwgVHJ1ZVRyaVN0YXRlLCBNaXhlZFRyaVN0YXRlIH07CiBlbnVtIEVkaXRv
ckNvbW1hbmRTb3VyY2UgeyBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmcsIENvbW1hbmRGcm9t
RE9NLCBDb21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJmYWNlIH07CiBlbnVtIFdyaXRpbmdEaXJl
Y3Rpb24geyBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiwgTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0
aW9uLCBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb24gfTsKK2VudW0gVGV4dERlY29yYXRpb25B
cHBsaWNhdGlvbk1vZGUgeyBSZXBsYWNlVGV4dERlY29yYXRpb24gPSAwLCBBZGRUZXh0RGVjb3Jh
dGlvbiwgUmVtb3ZlVGV4dERlY29yYXRpb24gfTsKIAogY2xhc3MgRWRpdG9yIHsKIHB1YmxpYzoK
QEAgLTE1MCw5ICsxNTEsOSBAQAogICAgIE5vZGUqIHJlbW92ZWRBbmNob3IoKSBjb25zdCB7IHJl
dHVybiBtX3JlbW92ZWRBbmNob3IuZ2V0KCk7IH0KICAgICB2b2lkIHNldFJlbW92ZWRBbmNob3Io
UGFzc1JlZlB0cjxOb2RlPiBuKSB7IG1fcmVtb3ZlZEFuY2hvciA9IG47IH0KIAotICAgIHZvaWQg
YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25V
bnNwZWNpZmllZCk7CisgICAgdm9pZCBhcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBU
ZXh0RGVjb3JhdGlvbkFwcGxpY2F0aW9uTW9kZSwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25VbnNw
ZWNpZmllZCk7CiAgICAgdm9pZCBhcHBseVBhcmFncmFwaFN0eWxlKENTU1N0eWxlRGVjbGFyYXRp
b24qLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKLSAgICB2b2lkIGFwcGx5
U3R5bGVUb1NlbGVjdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlvbik7CisgICAg
dm9pZCBhcHBseVN0eWxlVG9TZWxlY3Rpb24oQ1NTU3R5bGVEZWNsYXJhdGlvbiosIFRleHREZWNv
cmF0aW9uQXBwbGljYXRpb25Nb2RlLCBFZGl0QWN0aW9uKTsKICAgICB2b2lkIGFwcGx5UGFyYWdy
YXBoU3R5bGVUb1NlbGVjdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlvbik7CiAK
ICAgICB2b2lkIGFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsKQEAgLTMz
Miw3ICszMzMsNyBAQAogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG1hcmsoKSBjb25zdDsg
Ly8gTWFyaywgdG8gYmUgdXNlZCBhcyBlbWFjcyB1c2VzIGl0LgogICAgIHZvaWQgc2V0TWFyayhj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICB2b2lkIGNvbXB1dGVBbmRTZXRUeXBpbmdT
dHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiAsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVj
aWZpZWQpOworICAgIHZvaWQgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKENTU1N0eWxlRGVjbGFy
YXRpb24qLCBUZXh0RGVjb3JhdGlvbkFwcGxpY2F0aW9uTW9kZSwgRWRpdEFjdGlvbiA9IEVkaXRB
Y3Rpb25VbnNwZWNpZmllZCk7CiAgICAgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1l
bnQoKSBjb25zdDsKICAgICB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KEVsZW1lbnQq
KSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZp
c2lvbiA2Nzg3OSkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwMSw3ICs1MDEsNyBAQAogICAgIHN0eWxlLT5kaWZmKGVkaXRpbmdT
dHlsZSk7CiB9CiAKLUFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVu
dCogZG9jdW1lbnQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb24sIEVQcm9wZXJ0eUxldmVsIHByb3BlcnR5TGV2ZWwpCitBcHBseVN0eWxlQ29tbWFu
ZDo6QXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSwgVGV4dERlY29yYXRpb25BcHBsaWNhdGlvbk1vZGUgdGV4dERlY29yYXRpb25N
b2RlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIEVQcm9wZXJ0eUxldmVsIHByb3BlcnR5TGV2
ZWwpCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCkKICAgICAsIG1fc3R5bGUo
c3R5bGUtPm1ha2VNdXRhYmxlKCkpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlv
bikKQEAgLTUxMSw2ICs1MTEsNyBAQAogICAgICwgbV91c2VFbmRpbmdTZWxlY3Rpb24odHJ1ZSkK
ICAgICAsIG1fc3R5bGVkSW5saW5lRWxlbWVudCgwKQogICAgICwgbV9yZW1vdmVPbmx5KGZhbHNl
KQorICAgICwgbV90ZXh0RGVjb3JhdGlvbk1vZGUodGV4dERlY29yYXRpb25Nb2RlKQogewogfQog
CkBAIC01MjQsNiArNTI1LDcgQEAKICAgICAsIG1fdXNlRW5kaW5nU2VsZWN0aW9uKGZhbHNlKQog
ICAgICwgbV9zdHlsZWRJbmxpbmVFbGVtZW50KDApCiAgICAgLCBtX3JlbW92ZU9ubHkoZmFsc2Up
CisgICAgLCBtX3RleHREZWNvcmF0aW9uTW9kZShSZXBsYWNlVGV4dERlY29yYXRpb24pCiB7CiB9
CiAKQEAgLTUzNyw2ICs1MzksNyBAQAogICAgICwgbV91c2VFbmRpbmdTZWxlY3Rpb24odHJ1ZSkK
ICAgICAsIG1fc3R5bGVkSW5saW5lRWxlbWVudChlbGVtZW50KQogICAgICwgbV9yZW1vdmVPbmx5
KHJlbW92ZU9ubHkpCisgICAgLCBtX3RleHREZWNvcmF0aW9uTW9kZShSZXBsYWNlVGV4dERlY29y
YXRpb24pCiB7CiB9CiAKQEAgLTEwNjgsNiArMTA3MSw5IEBACiAgICAgaWYgKHN0YXJ0ID09IGVu
ZCAmJiBzdGFydC5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQogICAgICAgICBwYXN0RW5kTm9k
ZSA9IHN0YXJ0Lm5vZGUoKS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogCisgICAgaWYgKG1fcmVtb3Zl
T25seSB8fCBtX3RleHREZWNvcmF0aW9uTW9kZSA9PSBSZW1vdmVUZXh0RGVjb3JhdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgYXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKHN0eWxlLCBz
dGFydE5vZGUsIHBhc3RFbmROb2RlKTsKIH0KIApAQCAtMTE2MSwxOSArMTE2NywyMiBAQAogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVT
dHlsZUZyb21FbGVtZW50KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVs
ZW1lbnQqIGVsZW1lbnQsIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9kZSkKK2Jvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbWVudCwgSW5saW5lU3R5bGVSZW1v
dmFsTW9kZSBtb2RlLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZXh0cmFjdGVkU3R5bGUp
CiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQoZWxlbWVudCk7CiAKICAgICBpZiAo
bV9zdHlsZWRJbmxpbmVFbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUobV9zdHlsZWRJbmxp
bmVFbGVtZW50LT50YWdRTmFtZSgpKSkgewotICAgICAgICBpZiAobW9kZSAhPSBSZW1vdmVOb25l
KQorICAgICAgICBpZiAobW9kZSAhPSBSZW1vdmVOb25lKSB7CisgICAgICAgICAgICBpZiAoZXh0
cmFjdGVkU3R5bGUgJiYgZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCkpCisgICAgICAgICAgICAg
ICAgZXh0cmFjdGVkU3R5bGUtPm1lcmdlKGVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgpKTsKICAg
ICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CisgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgYm9vbCByZW1vdmVkID0gZmFs
c2U7Ci0gICAgaWYgKHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KHN0eWxlLCBlbGVtZW50
LCBtb2RlKSkKKyAgICBpZiAocmVtb3ZlSW1wbGljaXRseVN0eWxlZEVsZW1lbnQoc3R5bGUsIGVs
ZW1lbnQsIG1vZGUsIGV4dHJhY3RlZFN0eWxlKSkKICAgICAgICAgcmVtb3ZlZCA9IHRydWU7CiAK
ICAgICBpZiAoIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkKQEAgLTExODEsNyArMTE5MCw3IEBACiAK
ICAgICAvLyBJZiB0aGUgbm9kZSB3YXMgY29udmVydGVkIHRvIGEgc3BhbiwgdGhlIHNwYW4gbWF5
IHN0aWxsIGNvbnRhaW4gcmVsZXZhbnQKICAgICAvLyBzdHlsZXMgd2hpY2ggbXVzdCBiZSByZW1v
dmVkIChlLmcuIDxiIHN0eWxlPSdmb250LXdlaWdodDogYm9sZCc+KQotICAgIGlmIChyZW1vdmVD
U1NTdHlsZShzdHlsZSwgZWxlbWVudCwgbW9kZSkpCisgICAgaWYgKHJlbW92ZUNTU1N0eWxlKHN0
eWxlLCBlbGVtZW50LCBtb2RlLCBleHRyYWN0ZWRTdHlsZSkpCiAgICAgICAgIHJlbW92ZWQgPSB0
cnVlOwogCiAgICAgcmV0dXJuIHJlbW92ZWQ7CkBAIC0xMTkwLDcgKzExOTksNyBAQAogZW51bSBF
UHVzaERvd25UeXBlIHsgU2hvdWxkQmVQdXNoZWREb3duLCBTaG91bGROb3RCZVB1c2hlZERvd24g
fTsKIHN0cnVjdCBIVE1MRXF1aXZhbGVudCB7CiAgICAgaW50IHByb3BlcnR5SUQ7Ci0gICAgYm9v
bCBpc1ZhbHVlTGlzdDsKKyAgICBib29sIGlzVGV4dERlY29yYXRpb247CiAgICAgaW50IHByaW1p
dGl2ZUlkOwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGVsZW1lbnQ7CiAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSogYXR0cmlidXRlOwpAQCAtMTI2NCwxMCArMTI3MywxNiBAQAogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBtYXBWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKGVxdWl2YWxlbnQucHJpbWl0aXZlSWQpLmdldCgpOwogCisgICAgICAgIC8vIFdoZW4g
YWRkaW5nIG9yIHJlbW92aW5nIGEgdGV4dCBkZWNvcmF0aW9uLCBhdm9pZCByZW1vdmluZyB1bnJl
bGF0ZWQgdGV4dCBkZWNvcmF0aW9ucy4KKyAgICAgICAgaWYgKG1fdGV4dERlY29yYXRpb25Nb2Rl
ICE9IFJlcGxhY2VUZXh0RGVjb3JhdGlvbgorICAgICAgICAgICAgJiYgZXF1aXZhbGVudC5pc1Rl
eHREZWNvcmF0aW9uICYmIHN0eWxlVmFsdWUtPmlzVmFsdWVMaXN0KCkKKyAgICAgICAgICAgICYm
ICFzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihzdHlsZVZhbHVlLmdldCgpKS0+aGFzVmFsdWUo
bWFwVmFsdWUuZ2V0KCkpKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgaWYgKG1v
ZGUgIT0gUmVtb3ZlQWx3YXlzKSB7Ci0gICAgICAgICAgICBpZiAoZXF1aXZhbGVudC5pc1ZhbHVl
TGlzdCAmJiBzdHlsZVZhbHVlLT5pc1ZhbHVlTGlzdCgpICYmIHN0YXRpY19jYXN0PENTU1ZhbHVl
TGlzdCo+KHN0eWxlVmFsdWUuZ2V0KCkpLT5oYXNWYWx1ZShtYXBWYWx1ZS5nZXQoKSkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7IC8vIElmIENTUyB2YWx1ZSBhc3N1bWVzIENTU1ZhbHVlTGlz
dCwgdGhlbiBvbmx5IHNraXAgaWYgdGhlIHZhbHVlIHdhcyBwcmVzZW50IGluIHN0eWxlIHRvIGFw
cGx5LgotICAgICAgICAgICAgZWxzZSBpZiAobWFwVmFsdWUgJiYgc3R5bGVWYWx1ZS0+Y3NzVGV4
dCgpID09IG1hcFZhbHVlLT5jc3NUZXh0KCkpCisgICAgICAgICAgICBpZiAobV90ZXh0RGVjb3Jh
dGlvbk1vZGUgPT0gQWRkVGV4dERlY29yYXRpb24gJiYgc3R5bGVWYWx1ZS0+aXNWYWx1ZUxpc3Qo
KSAmJiBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihzdHlsZVZhbHVlLmdldCgpKS0+aGFzVmFs
dWUobWFwVmFsdWUuZ2V0KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKG1fdGV4dERlY29yYXRpb25Nb2RlID09IFJlcGxhY2VUZXh0RGVjb3JhdGlvbiAmJiBt
YXBWYWx1ZSAmJiBzdHlsZVZhbHVlLT5jc3NUZXh0KCkgPT0gbWFwVmFsdWUtPmNzc1RleHQoKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gSWYgQ1NTIHZhbHVlIGlzIHByaW1pdGl2ZSwg
dGhlbiBza2lwIGlmIHRoZXkgYXJlIGVxdWFsLgogICAgICAgICB9CiAKQEAgLTEyODgsNyArMTMw
Myw3IEBACiAgICAgfQogICAgIHJldHVybiByZW1vdmVkOwogfQotICAgIAorCiB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjpyZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMo
SFRNTEVsZW1lbnQqJiBlbGVtKQogewogICAgIGJvb2wgcmVtb3ZlTm9kZSA9IGZhbHNlOwpAQCAt
MTMxMyw4ICsxMzI4LDIzIEBACiAgICAgfQogfQogCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpy
ZW1vdmVDU1NTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVt
ZW50KiBlbGVtLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUpCitzdGF0aWMgdm9pZCBtZXJn
ZVRleHREZWNvcmF0aW9ucyhDU1NWYWx1ZSogdmFsdWUsIENTU1ZhbHVlKiBzb3VyY2VWYWx1ZSkK
IHsKKyAgICBpZiAoIXZhbHVlIHx8ICFzb3VyY2VWYWx1ZSB8fCAhdmFsdWUtPmlzVmFsdWVMaXN0
KCkgfHwgIXNvdXJjZVZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZh
bHVlKTsKKyAgICBDU1NWYWx1ZUxpc3QqIHNvdXJjZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1
ZUxpc3QqPihzb3VyY2VWYWx1ZSk7CisgICAgc2l6ZV90IGxlbmd0aCA9IHNvdXJjZUxpc3QtPmxl
bmd0aCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgQ1NTVmFsdWUqIGl0ZW0gPSBzb3VyY2VMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkp
OworICAgICAgICBpZiAoIXZhbHVlTGlzdC0+aGFzVmFsdWUoaXRlbSkpCisgICAgICAgICAgICB2
YWx1ZUxpc3QtPmFwcGVuZChpdGVtKTsKKyAgICB9Cit9CisKK2Jvb2wgQXBwbHlTdHlsZUNvbW1h
bmQ6OnJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRN
TEVsZW1lbnQqIGVsZW0sIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9kZSwgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIGV4dHJhY3RlZFN0eWxlKQorewogICAgIEFTU0VSVChzdHlsZSk7CiAg
ICAgQVNTRVJUKGVsZW0pOwogCkBAIC0xMzI3LDEwICsxMzU3LDQ3IEBACiAgICAgZm9yIChDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9
IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KCgqaXQpLmlkKCkpOwogICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlID0gZGVjbC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsK
LSAgICAgICAgaWYgKHZhbHVlICYmIChwcm9wZXJ0eUlEICE9IENTU1Byb3BlcnR5V2hpdGVTcGFj
ZSB8fCAhaXNUYWJTcGFuTm9kZShlbGVtKSkpIHsKKyAgICAgICAgaWYgKCF2YWx1ZSB8fCAocHJv
cGVydHlJRCA9PSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UgJiYgaXNUYWJTcGFuTm9kZShlbGVtKSkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJv
cGVydHlUZXh0RGVjb3JhdGlvbiB8fCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0VGV4
dERlY29yYXRpb25zSW5FZmZlY3QpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gZGlmZiA9IGRlY2wtPmNvcHkoKTsKKyAgICAgICAgICAgIGRpZmZUZXh0
RGVjb3JhdGlvbnMoZGlmZi5nZXQoKSwgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgaXQtPnZh
bHVlKCkpOworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBkaWZmVmFsdWUgPSBkaWZmLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworICAgICAgICAg
ICAgLy8gRG8gbm90aGluZyBpZiB0ZXh0IGRlY29yYXRpb25zIGRvIG5vIG92ZXJsYXAuCisgICAg
ICAgICAgICBpZiAobV90ZXh0RGVjb3JhdGlvbk1vZGUgIT0gUmVwbGFjZVRleHREZWNvcmF0aW9u
ICYmIGRpZmZWYWx1ZSAmJiBkaWZmVmFsdWUtPmlzVmFsdWVMaXN0KCkgJiYgdmFsdWUgJiYgdmFs
dWUtPmlzVmFsdWVMaXN0KCkKKyAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxDU1NWYWx1
ZUxpc3QqPihkaWZmVmFsdWUuZ2V0KCkpLT5sZW5ndGgoKSA9PSBzdGF0aWNfY2FzdDxDU1NWYWx1
ZUxpc3QqPih2YWx1ZS5nZXQoKSktPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBpZiAobV90ZXh0RGVjb3JhdGlvbk1vZGUgPT0gQWRkVGV4dERlY29y
YXRpb24gJiYgbW9kZSAhPSBSZW1vdmVBbHdheXMpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKICAgICAgICAgICAgIHJlbW92ZWQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKG1vZGUgPT0g
UmVtb3ZlTm9uZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworCQkJaWYgKG1fdGV4
dERlY29yYXRpb25Nb2RlICE9IFJlcGxhY2VUZXh0RGVjb3JhdGlvbikgeworCQkJCXNldE5vZGVB
dHRyaWJ1dGUoZWxlbSwgc3R5bGVBdHRyLCBkaWZmLT5jc3NUZXh0KCkpOworICAgICAgICAgICAg
ICAgIGRlY2wgPSBlbGVtLT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgICAgICAgICBpZiAo
ZXh0cmFjdGVkU3R5bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsK
KyAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5
SUQsIGl0LT52YWx1ZSgpLT5jc3NUZXh0KCksIGl0LT5pc0ltcG9ydGFudCgpLCBlYyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZXh0cmFjdGVkU3R5bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsK
KyAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5
SUQsIHZhbHVlLT5jc3NUZXh0KCksIGl0LT5pc0ltcG9ydGFudCgpLCBlYyk7CisgICAgICAgICAg
ICAgICAgfQorCQkJCXJlbW92ZUNTU1Byb3BlcnR5KGVsZW0sIHByb3BlcnR5SUQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGV4dHJhY3RlZFN0eWxl
KSB7CisgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgICAgICAgICBl
eHRyYWN0ZWRTdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUtPmNzc1RleHQoKSwg
aXQtPmlzSW1wb3J0YW50KCksIGVjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92
ZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9uZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgICAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoZWxl
bSwgcHJvcGVydHlJRCk7CiAgICAgICAgICAgICBpZiAocHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0
eVVuaWNvZGVCaWRpICYmICFkZWNsLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5RGlyZWN0
aW9uKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoZWxlbSwg
Q1NTUHJvcGVydHlEaXJlY3Rpb24pOwpAQCAtMTM3MCw3ICsxNDM3LDcgQEAKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBcHBs
eVN0eWxlQ29tbWFuZDo6ZXh0cmFjdElubGluZVN0eWxlVG9QdXNoRG93bihDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGVUb0FwcGx5LCBOb2RlKiBub2RlLCBib29sIGlzU3R5bGVkRWxl
bWVudCkKK1Bhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEFwcGx5U3R5bGVD
b21tYW5kOjpleHRyYWN0SW5saW5lU3R5bGVUb1B1c2hEb3duKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZVRvQXBwbHksIE5vZGUqIG5vZGUsIGJvb2wpCiB7CiAgICAgQVNTRVJUKG5v
ZGUpOwogICAgIEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwpAQCAtMTM3OSw0MCArMTQ0
NiwxMCBAQAogICAgIGlmICghbm9kZS0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
Pihub2RlKTsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0g
ZWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgaWYgKGlzU3R5bGVkRWxlbWVudCkgewot
ICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwotICAgICAgICBy
ZXR1cm4gc3R5bGUucmVsZWFzZSgpOwotICAgIH0KKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IHN0eWxlVG9QdXNoRG93biA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpjcmVhdGUoKTsKKyAgICByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlVG9BcHBs
eSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKSwgUmVtb3ZlSWZOZWVkZWQsIHN0eWxl
VG9QdXNoRG93bi5nZXQoKSk7CiAKLSAgICBpZiAoIXN0eWxlKSB7Ci0gICAgICAgIHN0eWxlID0g
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwotICAgICAgICByZW1vdmVJbXBs
aWNpdGx5U3R5bGVkRWxlbWVudChzdHlsZVRvQXBwbHksIGVsZW1lbnQsIFJlbW92ZUlmTmVlZGVk
LCBzdHlsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBzdHlsZS5yZWxlYXNlKCk7Ci0gICAgfQot
Ci0gICAgVmVjdG9yPGludD4gcHJvcGVydGllczsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGVUb0FwcGx5LT5lbmQoKTsKLSAgICBmb3Ig
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlVG9B
cHBseS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBwcm9wZXJ0aWVzLmFwcGVu
ZChpdC0+aWQoKSk7Ci0KLSAgICBzdHlsZSA9IHN0eWxlLT5jb3B5UHJvcGVydGllc0luU2V0KHBy
b3BlcnRpZXMuZGF0YSgpLCBwcm9wZXJ0aWVzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwcm9wZXJ0aWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1
ZT4gcHJvcGVydHkgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsK
LSAgICAgICAgaWYgKHByb3BlcnR5KQotICAgICAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoZWxl
bWVudCwgc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcGVydGllc1tpXSkpOwotICAgIH0K
LQotICAgIGlmIChlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKSAmJiBlbGVtZW50LT5pbmxpbmVT
dHlsZURlY2woKS0+aXNFbXB0eSgpKQotICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1l
bnQsIHN0eWxlQXR0cik7Ci0KLSAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5
bGVTdHlsZVNwYW4oZWxlbWVudCkpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4oZWxlbWVudCk7Ci0KLSAgICByZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChzdHlsZVRv
QXBwbHksIGVsZW1lbnQsIFJlbW92ZUlmTmVlZGVkLCBzdHlsZS5nZXQoKSk7Ci0KLSAgICByZXR1
cm4gc3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBzdHlsZVRvUHVzaERvd24ucmVsZWFzZSgp
OwogfQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9QdXNoRG93
bihOb2RlKiBub2RlLCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCkBAIC0xNDM3
LDI0ICsxNDc0LDggQEAKICAgICAgICAgICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPnNldFBy
b3BlcnR5KGl0LT5pZCgpLCBpdC0+dmFsdWUoKS0+Y3NzVGV4dCgpLCBpdC0+aXNJbXBvcnRhbnQo
KSwgZWMpOwogCiAgICAgICAgICAgICAgICAgLy8gdGV4dC1kZWNvcmF0aW9ucyBhZGRzIHVwCi0g
ICAgICAgICAgICAgICAgaWYgKGl0LT5pZCgpID09IENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24p
IHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbiA9
IG5ld0lubGluZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29y
YXRpb24pOwotICAgICAgICAgICAgICAgICAgICBpZiAodGV4dERlY29yYXRpb24pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0ZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIHRleHREZWNvcmF0aW9uT2ZJ
bmxpbmVTdHlsZSA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHRleHREZWNvcmF0aW9uLmdl
dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogdGV4dERlY29yYXRp
b25PZlN0eWxlQXBwbGllZCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KGl0LT52YWx1ZSgp
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+LCB1bmRlcmxpbmUsIChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
SWRlbnRpZmllcihDU1NWYWx1ZVVuZGVybGluZSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiwgbGluZVRocm91
Z2gsIChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUxpbmVUaHJv
dWdoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodGV4dERlY29yYXRpb25PZlN0eWxlQXBwbGllZC0+aGFzVmFsdWUodW5kZXJsaW5lLmdl
dCgpKSAmJiAhdGV4dERlY29yYXRpb25PZklubGluZVN0eWxlLT5oYXNWYWx1ZSh1bmRlcmxpbmUu
Z2V0KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uT2ZJbmxp
bmVTdHlsZS0+YXBwZW5kKHVuZGVybGluZS5nZXQoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXh0RGVjb3JhdGlvbk9mU3R5bGVBcHBsaWVkLT5oYXNWYWx1ZShsaW5lVGhyb3Vn
aC5nZXQoKSkgJiYgIXRleHREZWNvcmF0aW9uT2ZJbmxpbmVTdHlsZS0+aGFzVmFsdWUobGluZVRo
cm91Z2guZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9u
T2ZJbmxpbmVTdHlsZS0+YXBwZW5kKGxpbmVUaHJvdWdoLmdldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXQtPmlkKCkg
PT0gQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2VU
ZXh0RGVjb3JhdGlvbnMobmV3SW5saW5lU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlUZXh0RGVjb3JhdGlvbikuZ2V0KCksIGl0LT52YWx1ZSgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTE1NTUsNyArMTU3Niw3IEBACiAgICAgcHVzaERvd25Jbmxp
bmVTdHlsZUFyb3VuZE5vZGUoc3R5bGUuZ2V0KCksIHB1c2hEb3duU3RhcnQubm9kZSgpKTsKICAg
ICBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShzdHlsZS5nZXQoKSwgcHVzaERvd25FbmQu
bm9kZSgpKTsKIAotICAgIC8vIFRoZSBzIGFuZCBlIHZhcmlhYmxlcyBzdG9yZSB0aGUgcG9zaXRp
b25zIHVzZWQgdG8gc2V0IHRoZSBlbmRpbmcgc2VsZWN0aW9uIGFmdGVyIHN0eWxlIHJlbW92YWwK
KyAgICAvLyBUaGUgcyBhbmQgZSB2YXJpYWJsZXMgc3RvcmUgdGhlIHBvc2l0aW9ucyB1c2VkIHRv
IHNldCB0aGUgZW5kaW5nIHNlbGVjdGlvbiBhZnRlciBzdHlsZRkgcmVtb3ZhbAogICAgIC8vIHRh
a2VzIHBsYWNlLiBUaGlzIHdpbGwgaGVscCBjYWxsZXJzIHRvIHJlY29nbml6ZSB3aGVuIGVpdGhl
ciB0aGUgc3RhcnQgbm9kZSBvciB0aGUgZW5kIG5vZGUKICAgICAvLyBhcmUgcmVtb3ZlZCBmcm9t
IHRoZSBkb2N1bWVudCBkdXJpbmcgdGhlIHdvcmsgb2YgdGhpcyBmdW5jdGlvbi4KICAgICAvLyBJ
ZiBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSBoYXMgcHJ1bmVkIHN0YXJ0Lm5vZGUoKSBv
ciBlbmQubm9kZSgpLApJbmRleDogV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2Nzg3
OSkKKysrIFdlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwMCw3ICs0MDAsNyBAQAogICAgICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLmdldCgpLCBpbm5lclJhbmdlLmdldCgpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgbV9jbGllbnQtPndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKLSAgICAgICAg
aW5uZXJGcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoc3R5bGUuZ2V0KCksIEVkaXRBY3Rpb25T
ZXRDb2xvcik7CisgICAgICAgIGlubmVyRnJhbWUtPmVkaXRvcigpLT5hcHBseVN0eWxlKHN0eWxl
LmdldCgpLCBSZXBsYWNlVGV4dERlY29yYXRpb24sIEVkaXRBY3Rpb25TZXRDb2xvcik7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgJKHJldmlzaW9uIDY3
ODc5KQorKysgV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDExICs0OSwxMiBAQAogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5zaXplKCk7IH0KICAgICBDU1NWYWx1ZSogaXRlbSh1bnNpZ25lZCk7CiAgICAgQ1NTVmFsdWUq
IGl0ZW1XaXRob3V0Qm91bmRzQ2hlY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVz
W2luZGV4XS5nZXQoKTsgfQorICAgIGNvbnN0IENTU1ZhbHVlKiBpdGVtV2l0aG91dEJvdW5kc0No
ZWNrKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF0uZ2V0KCk7
IH0KIAogICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q1NTVmFsdWU+KTsKICAgICB2b2lkIHBy
ZXBlbmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4pOwotICAgIGJvb2wgcmVtb3ZlQWxsKENTU1ZhbHVl
Kik7Ci0gICAgYm9vbCBoYXNWYWx1ZShDU1NWYWx1ZSopOworICAgIGJvb2wgcmVtb3ZlQWxsKGNv
bnN0IENTU1ZhbHVlKik7CisgICAgYm9vbCBoYXNWYWx1ZShjb25zdCBDU1NWYWx1ZSopOwogICAg
IFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjb3B5KCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBj
c3NUZXh0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHJldmlzaW9uIDY3ODc5KQor
KysgV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyAr
NjgsNyBAQAogICAgIG1fdmFsdWVzLnByZXBlbmQodmFsKTsKIH0KIAotYm9vbCBDU1NWYWx1ZUxp
c3Q6OnJlbW92ZUFsbChDU1NWYWx1ZSogdmFsKQorYm9vbCBDU1NWYWx1ZUxpc3Q6OnJlbW92ZUFs
bChjb25zdCBDU1NWYWx1ZSogdmFsKQogewogICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAv
LyBGSVhNRTogd2Ugc2hvdWxkIGJlIGltcGxlbWVudGluZyBvcGVyYXRvcj09IHRvIENTU1ZhbHVl
IGFuZCBpdHMgZGVyaXZlZCBjbGFzc2VzCkBAIC04Myw3ICs4Myw3IEBACiAgICAgcmV0dXJuIGZv
dW5kOwogfQogICAgIAotYm9vbCBDU1NWYWx1ZUxpc3Q6Omhhc1ZhbHVlKENTU1ZhbHVlKiB2YWwp
Citib29sIENTU1ZhbHVlTGlzdDo6aGFzVmFsdWUoY29uc3QgQ1NTVmFsdWUqIHZhbCkKIHsKICAg
ICAvLyBGSVhNRTogd2Ugc2hvdWxkIGJlIGltcGxlbWVudGluZyBvcGVyYXRvcj09IHRvIENTU1Zh
bHVlIGFuZCBpdHMgZGVyaXZlZCBjbGFzc2VzCiAgICAgLy8gdG8gbWFrZSBjb21wYXJpc29uIG1v
cmUgZmxleGlibGUgYW5kIGZhc3QuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68345</attachid>
            <date>2010-09-22 01:01:19 -0700</date>
            <delta_ts>2015-04-29 20:24:46 -0700</delta_ts>
            <desc>work in progress 2 (works but needs a test)</desc>
            <filename>wip27818b</filename>
            <type>text/plain</type>
            <size>28966</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA2ODAxNikKKysrIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MTYwLDcgKzUxNjAsNyBAQAog
ICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXTsKICAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh3ZWJGcmFtZSk7CiAgICAgaWYgKGNvcmVGcmFtZSkK
LSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShjb3JlKHN0eWxlKSk7Cisg
ICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoY29yZShzdHlsZSksIFJlcGxh
Y2VUZXh0RGVjb3JhdGlvbik7CiB9CiAKIEBlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0J
KHJldmlzaW9uIDY4MDE2KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC04ODksNyArODg5LDcgQEAKIHsKICAgICBpZiAoIV9wcml2YXRlLT5jb3Jl
RnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3Io
KS0+Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKGNvcmUoc3R5bGUpLCB1bmRvQWN0aW9uKTsKKyAg
ICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS0+Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxl
KGNvcmUoc3R5bGUpLCBSZXBsYWNlVGV4dERlY29yYXRpb24sIHVuZG9BY3Rpb24pOwogfQogCiAt
ICh2b2lkKV9kcmFnU291cmNlRW5kZWRBdDooTlNQb2ludCl3aW5kb3dMb2Mgb3BlcmF0aW9uOihO
U0RyYWdPcGVyYXRpb24pb3BlcmF0aW9uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
CShyZXZpc2lvbiA2ODAxNikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDM0NCw3ICs0MzQ0LDcgQEAKIC0gKHZvaWQpX2FwcGx5U3R5bGVU
b1NlbGVjdGlvbjooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRvQWN0aW9u
OihFZGl0QWN0aW9uKXVuZG9BY3Rpb24KIHsKICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5
bGVUb1NlbGVjdGlvbihjb3JlKHN0eWxlKSwgdW5kb0FjdGlvbik7CisgICAgICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGVUb1NlbGVjdGlvbihjb3JlKHN0eWxlKSwgUmVwbGFjZVRl
eHREZWNvcmF0aW9uLCB1bmRvQWN0aW9uKTsKIH0KIAogLSAodm9pZClfYXBwbHlQYXJhZ3JhcGhT
dHlsZVRvU2VsZWN0aW9uOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0aFVuZG9B
Y3Rpb246KEVkaXRBY3Rpb24pdW5kb0FjdGlvbgpAQCAtNDY2OCw3ICs0NjY4LDcgQEAKICAgICBX
ZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwogICAgIGlmIChbW3dlYlZpZXcgX2Vk
aXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6
c3R5bGUgdG9FbGVtZW50c0luRE9NUmFuZ2U6cmFuZ2VdKQogICAgICAgICBpZiAoRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgICAgICBjb3JlRnJhbWUtPmVk
aXRvcigpLT5hcHBseVN0eWxlKGNvcmUoc3R5bGUpLCBbc2VsZiBfdW5kb0FjdGlvbkZyb21Db2xv
clBhbmVsV2l0aFNlbGVjdG9yOnNlbGVjdG9yXSk7CisgICAgICAgICAgICBjb3JlRnJhbWUtPmVk
aXRvcigpLT5hcHBseVN0eWxlKGNvcmUoc3R5bGUpLCBSZXBsYWNlVGV4dERlY29yYXRpb24sIFtz
ZWxmIF91bmRvQWN0aW9uRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6c2VsZWN0b3JdKTsKIH0K
IAogLSAodm9pZCljaGFuZ2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjooaWQpc2VuZGVyCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5l
eHAuaW4JKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtNjA0LDcgKzYwNCw3IEBACiBfX1pON1dlYkNvcmU2Q3Vyc29yOGZyb21UeXBl
RU5TMF80VHlwZUUKIF9fWk43V2ViQ29yZTZDdXJzb3JEMUV2CiBfX1pON1dlYkNvcmU2Q3Vyc29y
YVNFUktTMF8KLV9fWk43V2ViQ29yZTZFZGl0b3IxMGFwcGx5U3R5bGVFUE5TXzE5Q1NTU3R5bGVE
ZWNsYXJhdGlvbkVOU18xMEVkaXRBY3Rpb25FCitfX1pON1dlYkNvcmU2RWRpdG9yMTBhcHBseVN0
eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMjlUZXh0RGVjb3JhdGlvbkFwcGxpY2F0
aW9uTW9kZUVOU18xMEVkaXRBY3Rpb25FCiBfX1pON1dlYkNvcmU2RWRpdG9yMTBmaW5kU3RyaW5n
RVJLTjNXVEY2U3RyaW5nRWJiYmIKIF9fWk43V2ViQ29yZTZFZGl0b3IxMGluc2VydFRleHRFUktO
M1dURjZTdHJpbmdFUE5TXzVFdmVudEUKIF9fWk43V2ViQ29yZTZFZGl0b3IxM2NhbkRIVE1MUGFz
dGVFdgpAQCAtNjIwLDExICs2MjAsMTEgQEAKIF9fWk43V2ViQ29yZTZFZGl0b3IxOWNvdW50TWF0
Y2hlc0ZvclRleHRFUktOM1dURjZTdHJpbmdFYmpiCiBfX1pON1dlYkNvcmU2RWRpdG9yMTlkZWxl
dGVXaXRoRGlyZWN0aW9uRU5TXzE5U2VsZWN0aW9uQ29udHJvbGxlcjEwRURpcmVjdGlvbkVOU18x
NVRleHRHcmFudWxhcml0eUViYgogX19aTjdXZWJDb3JlNkVkaXRvcjE5aW5zZXJ0VW5vcmRlcmVk
TGlzdEV2Ci1fX1pON1dlYkNvcmU2RWRpdG9yMjFhcHBseVN0eWxlVG9TZWxlY3Rpb25FUE5TXzE5
Q1NTU3R5bGVEZWNsYXJhdGlvbkVOU18xMEVkaXRBY3Rpb25FCitfX1pON1dlYkNvcmU2RWRpdG9y
MjFhcHBseVN0eWxlVG9TZWxlY3Rpb25FUE5TXzE5Q1NTU3R5bGVEZWNsYXJhdGlvbkVOU18yOVRl
eHREZWNvcmF0aW9uQXBwbGljYXRpb25Nb2RlRU5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29y
ZTZFZGl0b3IyMWlzU2VsZWN0aW9uTWlzc3BlbGxlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjNz
ZXRCYXNlV3JpdGluZ0RpcmVjdGlvbkVOU18xNldyaXRpbmdEaXJlY3Rpb25FCiBfX1pON1dlYkNv
cmU2RWRpdG9yMjRhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmdFYgotX19aTjdXZWJDb3JlNkVkaXRv
cjI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNf
MTBFZGl0QWN0aW9uRQorX19aTjdXZWJDb3JlNkVkaXRvcjI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0
eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMjlUZXh0RGVjb3JhdGlvbkFwcGxpY2F0
aW9uTW9kZUVOU18xMEVkaXRBY3Rpb25FCiBfX1pON1dlYkNvcmU2RWRpdG9yMjRoYW5kbGVSZWpl
Y3RlZENvcnJlY3Rpb25FdgogX19aTjdXZWJDb3JlNkVkaXRvcjI0aXNTZWxlY3Rpb25VbmdyYW1t
YXRpY2FsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
RXYKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNp
b24gNjgwMTYpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAKIAogdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBl
ZGl0aW5nQWN0aW9uKQogewotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGx5U3R5bGVD
b21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24pKTsKKyAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50
KCksIHN0eWxlLCBSZXBsYWNlVGV4dERlY29yYXRpb24sIGVkaXRpbmdBY3Rpb24pKTsKIH0KIAog
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShy
ZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsMTYgKzk1LDE2IEBACiAgICAgcmV0dXJuIG5vZGUtPmRvY3VtZW50
KCktPmZyYW1lKCk7CiB9CiAKLXN0YXRpYyBib29sIGFwcGx5Q29tbWFuZFRvRnJhbWUoRnJhbWUq
IGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3N0YXRpYyBib29sIGFwcGx5Q29tbWFu
ZFRvRnJhbWUoRnJhbWUqIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFj
dGlvbiBhY3Rpb24sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgVGV4dERlY29y
YXRpb25BcHBsaWNhdGlvbk1vZGUgdGV4dERlY29yYXRpb25Nb2RlKQogewogICAgIC8vIEZJWE1F
OiBXZSBkb24ndCBjYWxsIHNob3VsZEFwcGx5U3R5bGUgd2hlbiB0aGUgc291cmNlIGlzIERPTTsg
aXMgdGhlcmUgYSBnb29kIHJlYXNvbiBmb3IgdGhhdD8KICAgICBzd2l0Y2ggKHNvdXJjZSkgewog
ICAgIGNhc2UgQ29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nOgotICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmFwcGx5U3R5bGVUb1NlbGVjdGlvbihzdHlsZSwgYWN0aW9uKTsKKyAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5hcHBseVN0eWxlVG9TZWxlY3Rpb24oc3R5bGUsIHRleHREZWNvcmF0aW9u
TW9kZSwgYWN0aW9uKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDb21tYW5kRnJv
bURPTToKICAgICBjYXNlIENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJbnRlcmZhY2U6Ci0gICAgICAg
IGZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShzdHlsZSk7CisgICAgICAgIGZyYW1lLT5lZGl0
b3IoKS0+YXBwbHlTdHlsZShzdHlsZSwgdGV4dERlY29yYXRpb25Nb2RlKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTE1LDE0ICsx
MTUsMTQgQEAKIHsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
ID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShwcm9wZXJ0eUlELCBwcm9wZXJ0eVZhbHVlKTsKLSAgICByZXR1cm4gYXBwbHlDb21t
YW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdldCgpKTsKKyAgICByZXR1
cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdldCgp
LCBSZXBsYWNlVGV4dERlY29yYXRpb24pOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlQXBwbHlT
dHlsZShGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9u
IGFjdGlvbiwgaW50IHByb3BlcnR5SUQsIGludCBwcm9wZXJ0eVZhbHVlKQogewogICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHBy
b3BlcnR5VmFsdWUpOwotICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3Vy
Y2UsIGFjdGlvbiwgc3R5bGUuZ2V0KCkpOworICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1l
KGZyYW1lLCBzb3VyY2UsIGFjdGlvbiwgc3R5bGUuZ2V0KCksIFJlcGxhY2VUZXh0RGVjb3JhdGlv
bik7CiB9CiAKIC8vIEZJWE1FOiBleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QgZG9lcyBub3QgaGFu
ZGxlIGNvbXBsaWNhdGVkIGNhc2VzIHN1Y2ggYXMgPGI+PHU+aGVsbG88L3U+d29ybGQ8L2I+IHBy
b3Blcmx5LgpAQCAtMTMwLDM0ICsxMzAsMjEgQEAKIC8vICAgICAgICB1bnRpbCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc4MTggaXMgcmVzb2x2ZWQuCiBzdGF0aWMg
Ym9vbCBleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QoRnJhbWUqIGZyYW1lLCBFZGl0b3JDb21tYW5k
U291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIGludCBwcm9wZXJ0eUlELCBDU1NWYWx1
ZSogdmFsdWUpCiB7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgTm9kZSogbm9kZVRv
UmVtb3ZlID0gMDsKLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBzZWxl
Y3Rpb25TdHlsZSA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShub2Rl
VG9SZW1vdmUpOwotICAgIGlmICghc2VsZWN0aW9uU3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShw
cm9wZXJ0eUlELCB2YWx1ZS0+Y3NzVGV4dCgpKTsgLy8gV2UgbmVlZCB0byBhZGQgdGhpcyBzdHls
ZSB0byBwYXNzIGl0IHRvIHNlbGVjdGlvblN0YXJ0SGFzU3R5bGUgLyBzZWxlY3Rpb25IYXNTdHls
ZQogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBzZWxlY3RlZENTU1ZhbHVlID0gc2VsZWN0aW9uU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Ci0gICAgU3RyaW5nIG5ld1N0eWxl
ID0gIm5vbmUiOwotICAgIGlmIChzZWxlY3RlZENTU1ZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNlbGVjdGVkQ1NTVmFsdWVMaXN0ID0gc3RhdGlj
X2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oc2VsZWN0ZWRDU1NWYWx1ZS5nZXQoKSk7Ci0gICAgICAgIGlm
ICghc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPnJlbW92ZUFsbCh2YWx1ZSkpCi0gICAgICAgICAgICBz
ZWxlY3RlZENTU1ZhbHVlTGlzdC0+YXBwZW5kKHZhbHVlKTsKLSAgICAgICAgaWYgKHNlbGVjdGVk
Q1NTVmFsdWVMaXN0LT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG5ld1N0eWxlID0gc2VsZWN0ZWRD
U1NWYWx1ZUxpc3QtPmNzc1RleHQoKTsKKyAgICAvLyBTdHlsZSBpcyBjb25zaWRlcmVkIHByZXNl
bnQgd2hlbgorICAgIC8vIG1hYzogcHJlc2VudCBhdCB0aGUgYmVnaW5uaW5nIG9mIHNlbGVjdGlv
bgorICAgIC8vIG90aGVyOiBwcmVzZW50IHRocm91Z2hvdXQgdGhlIHNlbGVjdGlvbgogCi0gICAg
fSBlbHNlIGlmIChzZWxlY3RlZENTU1ZhbHVlLT5jc3NUZXh0KCkgPT0gIm5vbmUiKQotICAgICAg
ICBuZXdTdHlsZSA9IHZhbHVlLT5jc3NUZXh0KCk7CisgICAgLy8gRklYTUU6IE1ha2Ugc3RhdGVT
dHlsZSgpIHRvIHVzZSB0aGlzIGVkaXRpbmcgbWV0aG9kIHRvbyBmb3IgdGhlIGNhc2VzIHdoZXJl
IGl0J3MgdXNlZCBmb3IgcXVlcnlDb21tYW5kU3RhdGUuCisgICAgYm9vbCBzdHlsZUlzUHJlc2Vu
dDsKKyAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5iZWhhdmlvcigpLnNob3VsZFRvZ2dsZVN0eWxl
QmFzZWRPblN0YXJ0T2ZTZWxlY3Rpb24oKSkKKyAgICAgICAgc3R5bGVJc1ByZXNlbnQgPSBmcmFt
ZS0+ZWRpdG9yKCktPnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUoc3R5bGUuZ2V0KCkpOworICAgIGVs
c2UKKyAgICAgICAgc3R5bGVJc1ByZXNlbnQgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhh
c1N0eWxlKHN0eWxlLmdldCgpKSA9PSBUcnVlVHJpU3RhdGU7CiAKLSAgICBBU1NFUlQoIWVjKTsK
LSAgICBpZiAobm9kZVRvUmVtb3ZlKSB7Ci0gICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKGVj
KTsKLSAgICAgICAgQVNTRVJUKCFlYyk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBiZSBoYXZpbmcgdG8gY29udmVydCBuZXcgc3R5bGUgaW50byB0ZXh0LiAgV2Ugc2hvdWxk
IGhhdmUgc2V0UHJvcGVydHlDU1NWYWx1ZS4KLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IG5ld011dGFibGVTdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpj
cmVhdGUoKTsKLSAgICBuZXdNdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5l
d1N0eWxlLCBlYyk7Ci0gICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJhbWUsIHNvdXJj
ZSwgYWN0aW9uLCBuZXdNdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIHJldHVybiBhcHBseUNvbW1h
bmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIGFjdGlvbiwgc3R5bGUuZ2V0KCksIHN0eWxlSXNQcmVz
ZW50ID8gUmVtb3ZlVGV4dERlY29yYXRpb24gOiBBZGRUZXh0RGVjb3JhdGlvbik7CiB9CiAKIHN0
YXRpYyBib29sIGV4ZWN1dGVUb2dnbGVTdHlsZShGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRT
b3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgaW50IHByb3BlcnR5SUQsIGNvbnN0IGNo
YXIqIG9mZlZhbHVlLCBjb25zdCBjaGFyKiBvblZhbHVlKQpAQCAtMTc3LDcgKzE2NCw3IEBACiAg
ICAgICAgIHN0eWxlSXNQcmVzZW50ID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHls
ZShzdHlsZS5nZXQoKSkgPT0gVHJ1ZVRyaVN0YXRlOwogCiAgICAgc3R5bGUtPnNldFByb3BlcnR5
KHByb3BlcnR5SUQsIHN0eWxlSXNQcmVzZW50ID8gb2ZmVmFsdWUgOiBvblZhbHVlKTsKLSAgICBy
ZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdl
dCgpKTsKKyAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rp
b24sIHN0eWxlLmdldCgpLCBSZXBsYWNlVGV4dERlY29yYXRpb24pOwogfQogCiBzdGF0aWMgYm9v
bCBleGVjdXRlQXBwbHlQYXJhZ3JhcGhTdHlsZShGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRT
b3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgcHJvcGVydHlWYWx1ZSkKQEAgLTU4MSw3ICs1NjgsNyBAQAogICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Y3JlYXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJp
ZGksIENTU1ZhbHVlRW1iZWQpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURp
cmVjdGlvbiwgQ1NTVmFsdWVMdHIpOwotICAgIGZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShz
dHlsZS5nZXQoKSwgRWRpdEFjdGlvblNldFdyaXRpbmdEaXJlY3Rpb24pOworICAgIGZyYW1lLT5l
ZGl0b3IoKS0+YXBwbHlTdHlsZShzdHlsZS5nZXQoKSwgUmVwbGFjZVRleHREZWNvcmF0aW9uLCBF
ZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTU4OSw3ICs1NzYsNyBAQAogewogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlTm9ybWFsKTsK
LSAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoc3R5bGUuZ2V0KCksIEVkaXRBY3Rpb25T
ZXRXcml0aW5nRGlyZWN0aW9uKTsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoc3R5
bGUuZ2V0KCksIFJlcGxhY2VUZXh0RGVjb3JhdGlvbiwgRWRpdEFjdGlvblNldFdyaXRpbmdEaXJl
Y3Rpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01OTgsNyArNTg1LDcgQEAKICAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZUVtYmVkKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NT
UHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlUnRsKTsKLSAgICBmcmFtZS0+ZWRpdG9yKCktPmFw
cGx5U3R5bGUoc3R5bGUuZ2V0KCksIEVkaXRBY3Rpb25TZXRXcml0aW5nRGlyZWN0aW9uKTsKKyAg
ICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoc3R5bGUuZ2V0KCksIFJlcGxhY2VUZXh0RGVj
b3JhdGlvbiwgRWRpdEFjdGlvblNldFdyaXRpbmdEaXJlY3Rpb24pOwogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gNjgwMTYpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk1LDE4ICs3OTUsMTggQEAKICAg
ICByZXR1cm4gZmluZEV2ZW50VGFyZ2V0RnJvbShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkpOwogfQogCi12b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQordm9pZCBFZGl0b3I6OmFwcGx5U3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFRleHREZWNvcmF0aW9uQXBwbGljYXRpb25N
b2RlIHRleHREZWNvcmF0aW9uTW9kZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewogICAg
IHN3aXRjaCAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvblR5cGUoKSkgewogICAgIGNh
c2UgVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgIC8vIGRvIG5vdGhpbmcK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlv
bjoKLSAgICAgICAgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9u
KTsKKyAgICAgICAgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKHN0eWxlLCB0ZXh0RGVjb3JhdGlv
bk1vZGUsIGVkaXRpbmdBY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZpc2libGVT
ZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAg
ICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVu
dCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOworICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFw
cGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3R5bGUsIHRleHRE
ZWNvcmF0aW9uTW9kZSwgZWRpdGluZ0FjdGlvbikpOwogICAgICAgICBicmVhazsKICAgICB9CiB9
CkBAIC04MjUsMTggKzgyNSwxOCBAQAogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRT
ZWxlY3Rpb246CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKICAg
ICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21t
YW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24sIEFw
cGx5U3R5bGVDb21tYW5kOjpGb3JjZUJsb2NrUHJvcGVydGllcykpOworICAgICAgICAgICAgYXBw
bHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
c3R5bGUsIFJlcGxhY2VUZXh0RGVjb3JhdGlvbiwgZWRpdGluZ0FjdGlvbiwgQXBwbHlTdHlsZUNv
bW1hbmQ6OkZvcmNlQmxvY2tQcm9wZXJ0aWVzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
IAotdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQordm9pZCBFZGl0b3I6OmFwcGx5U3R5
bGVUb1NlbGVjdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgVGV4dERlY29yYXRpb25B
cHBsaWNhdGlvbk1vZGUgdGV4dERlY29yYXRpb25Nb2RlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rp
b24pCiB7CiAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmxlbmd0aCgpIHx8ICFjYW5FZGl0Umlj
aGx5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+
c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpKQotICAgICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9u
KTsKKyAgICAgICAgYXBwbHlTdHlsZShzdHlsZSwgdGV4dERlY29yYXRpb25Nb2RlLCBlZGl0aW5n
QWN0aW9uKTsKIH0KIAogdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlv
bihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpA
QCAtMzIwMywyOCArMzIwMyw2MiBAQAogICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbmV3
U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVj
dGluZyk7CiB9CiAKLXZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK3N0YXRpYyB2
b2lkIHJlc29sdmVUZXh0RGVjb3JhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIFRleHREZWNvcmF0aW9uQXBwbGljYXRpb25Nb2RlIHRleHREZWNvcmF0aW9uTW9kZSwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogZXhpc3RpbmdTdHlsZSkKIHsKKyAgICBpZiAodGV4dERlY29yYXRp
b25Nb2RlID09IFJlcGxhY2VUZXh0RGVjb3JhdGlvbiB8fCAhc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKKyAg
ICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVmUHRyPENTU1ZhbHVlPiBleGlzdGluZ1ZhbHVlID0gZXhpc3RpbmdTdHlsZSA/IGV4
aXN0aW5nU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlv
bikgOiAwOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG5ld1ZhbHVlTGlzdCA9IHRleHREZWNv
cmF0aW9uTW9kZSA9PSBBZGRUZXh0RGVjb3JhdGlvbiA/IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlz
dCo+KHZhbHVlLmdldCgpKS0+Y29weSgpIDogQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFy
YXRlZCgpOworICAgIGlmIChleGlzdGluZ1ZhbHVlICYmIGV4aXN0aW5nVmFsdWUtPmlzVmFsdWVM
aXN0KCkpIAorICAgIHsKKyAgICAgICAgQVNTRVJUKHRleHREZWNvcmF0aW9uTW9kZSA9PSBBZGRU
ZXh0RGVjb3JhdGlvbiB8fCB0ZXh0RGVjb3JhdGlvbk1vZGUgPT0gUmVtb3ZlVGV4dERlY29yYXRp
b24pOworCisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3Qq
PihleGlzdGluZ1ZhbHVlLmdldCgpKS0+bGVuZ3RoKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gc3Rh
dGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oZXhpc3RpbmdWYWx1ZS5nZXQoKSktPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICBpZiAodGV4dERlY29yYXRpb25Nb2RlID09IEFk
ZFRleHREZWNvcmF0aW9uCisgICAgICAgICAgICAgICAgfHwgKHRleHREZWNvcmF0aW9uTW9kZSA9
PSBSZW1vdmVUZXh0RGVjb3JhdGlvbiAmJiAhc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFs
dWUuZ2V0KCkpLT5oYXNWYWx1ZShpdGVtKSkpCisgICAgICAgICAgICAgICAgbmV3VmFsdWVMaXN0
LT5hcHBlbmQoaXRlbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGVj
OworICAgIGlmIChuZXdWYWx1ZUxpc3QtPmxlbmd0aCgpKQorICAgICAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgbmV3VmFsdWVM
aXN0LT5jc3NUZXh0KCksIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KENTU1Byb3BlcnR5V2Vi
a2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpLCBlYyk7CisgICAgZWxzZQorICAgICAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwg
Im5vbmUiLCBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KSwgZWMpOworfQorCit2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNl
dFR5cGluZ1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBUZXh0RGVjb3JhdGlvbkFw
cGxpY2F0aW9uTW9kZSB0ZXh0RGVjb3JhdGlvbk1vZGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
bikKK3sKICAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bGVuZ3RoKCkpIHsKICAgICAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKyAgICAKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHVuaWNvZGVCaWRpOworICAgIFJlZlB0
cjxDU1NWYWx1ZT4gZGlyZWN0aW9uOworICAgIGlmIChlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rp
b25TZXRXcml0aW5nRGlyZWN0aW9uKSB7CisgICAgICAgIHVuaWNvZGVCaWRpID0gc3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7CisgICAgICAgIGRpcmVj
dGlvbiA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsK
KyAgICB9CisgICAgTm9kZSogbm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKIAogICAgIC8vIENhbGN1
bGF0ZSB0aGUgY3VycmVudCB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBtdXRhYmxlU3R5bGUgPSBzdHlsZS0+bWFrZU11dGFibGUoKTsKKyAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGV4aXN0aWduU3R5bGUgPSBjb21wdXRl
ZFN0eWxlKG5vZGUpLT5jb3B5KCk7CiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT50eXBp
bmdTdHlsZSgpKSB7Ci0gICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgp
LT5tZXJnZShtdXRhYmxlU3R5bGUuZ2V0KCkpOwotICAgICAgICBtdXRhYmxlU3R5bGUgPSBtX2Zy
YW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKKyAgICAgICAgbXV0YWJsZVN0eWxlLT5t
ZXJnZShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKSwgZmFsc2UpOworICAgICAg
ICBleGlzdGlnblN0eWxlLT5tZXJnZShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUo
KSk7CiAgICAgfQogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlQmlkaTsKLSAgICBSZWZQ
dHI8Q1NTVmFsdWU+IGRpcmVjdGlvbjsKLSAgICBpZiAoZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0
aW9uU2V0V3JpdGluZ0RpcmVjdGlvbikgewotICAgICAgICB1bmljb2RlQmlkaSA9IG11dGFibGVT
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsKLSAgICAg
ICAgZGlyZWN0aW9uID0gbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5RGlyZWN0aW9uKTsKLSAgICB9CisgICAgcmVzb2x2ZVRleHREZWNvcmF0aW9uKG11dGFibGVT
dHlsZS5nZXQoKSwgdGV4dERlY29yYXRpb25Nb2RlLCBleGlzdGlnblN0eWxlLmdldCgpKTsKIAot
ICAgIE5vZGUqIG5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7CiAgICAgY29tcHV0ZWRTdHlsZShub2Rl
KS0+ZGlmZihtdXRhYmxlU3R5bGUuZ2V0KCkpOwogCiAgICAgaWYgKGVkaXRpbmdBY3Rpb24gPT0g
RWRpdEFjdGlvblNldFdyaXRpbmdEaXJlY3Rpb24gJiYgdW5pY29kZUJpZGkpIHsKQEAgLTMyNDAs
NyArMzI3NCw3IEBACiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBibG9j
a1N0eWxlID0gbXV0YWJsZVN0eWxlLT5jb3B5QmxvY2tQcm9wZXJ0aWVzKCk7CiAgICAgYmxvY2tT
dHlsZS0+ZGlmZihtdXRhYmxlU3R5bGUuZ2V0KCkpOwogICAgIGlmIChibG9ja1N0eWxlLT5sZW5n
dGgoKSA+IDApCi0gICAgICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRl
KG1fZnJhbWUtPmRvY3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCksIGVkaXRpbmdBY3Rpb24pKTsK
KyAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+
ZG9jdW1lbnQoKSwgYmxvY2tTdHlsZS5nZXQoKSwgUmVwbGFjZVRleHREZWNvcmF0aW9uLCBlZGl0
aW5nQWN0aW9uKSk7CiAKICAgICAvLyBTZXQgdGhlIHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlw
aW5nIHN0eWxlLgogICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHlsZShtdXRh
YmxlU3R5bGUucmVsZWFzZSgpKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5o
CShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEFwcGx5U3R5bGVDb21t
YW5kX2gKIAogI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAiRWRp
dG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDUsOSArNDYsOSBAQAogICAgIGVu
dW0gSW5saW5lU3R5bGVSZW1vdmFsTW9kZSB7IFJlbW92ZUlmTmVlZGVkLCBSZW1vdmVBbHdheXMs
IFJlbW92ZU5vbmUgfTsKICAgICBlbnVtIEVBZGRTdHlsZWRFbGVtZW50IHsgQWRkU3R5bGVkRWxl
bWVudCwgRG9Ob3RBZGRTdHlsZWRFbGVtZW50IH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
cHBseVN0eWxlQ29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rpb24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJp
YnV0ZXMsIEVQcm9wZXJ0eUxldmVsIGxldmVsID0gUHJvcGVydHlEZWZhdWx0KQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEFwcGx5U3R5bGVDb21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgVGV4dERlY29yYXRpb25BcHBsaWNhdGlvbk1v
ZGUgdGV4dERlY29yYXRpb25Nb2RlLCBFZGl0QWN0aW9uIGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFu
Z2VBdHRyaWJ1dGVzLCBFUHJvcGVydHlMZXZlbCBsZXZlbCA9IFByb3BlcnR5RGVmYXVsdCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1l
bnQsIHN0eWxlLCBhY3Rpb24sIGxldmVsKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1lbnQsIHN0eWxlLCB0ZXh0RGVjb3JhdGlvbk1vZGUsIGFj
dGlvbiwgbGV2ZWwpKTsKICAgICB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXBwbHlTdHlsZUNv
bW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rp
b24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMsIEVQcm9wZXJ0eUxldmVsIGxl
dmVsID0gUHJvcGVydHlEZWZhdWx0KQogICAgIHsKQEAgLTYxLDcgKzYyLDcgQEAKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0eWxlQXRQ
b3NpdGlvbihQb3NpdGlvbiBwb3MsIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSBzaG91bGRJbmNs
dWRlVHlwaW5nU3R5bGUgPSBJZ25vcmVUeXBpbmdTdHlsZSk7CiAKIHByaXZhdGU6Ci0gICAgQXBw
bHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlv
biwgRVByb3BlcnR5TGV2ZWwpOworICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiosIFRleHREZWNvcmF0aW9uQXBwbGljYXRpb25Nb2RlLCBFZGl0QWN0
aW9uLCBFUHJvcGVydHlMZXZlbCk7CiAgICAgQXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqLCBD
U1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kLCBFZGl0QWN0aW9uLCBFUHJvcGVydHlMZXZlbCk7CiAgICAgQXBwbHlTdHlsZUNvbW1h
bmQoUGFzc1JlZlB0cjxFbGVtZW50PiwgYm9vbCByZW1vdmVPbmx5LCBFZGl0QWN0aW9uKTsKIApA
QCAtMTIxLDYgKzEyMiw3IEBACiAgICAgYm9vbCBtX3VzZUVuZGluZ1NlbGVjdGlvbjsKICAgICBS
ZWZQdHI8RWxlbWVudD4gbV9zdHlsZWRJbmxpbmVFbGVtZW50OwogICAgIGJvb2wgbV9yZW1vdmVP
bmx5OworICAgIFRleHREZWNvcmF0aW9uQXBwbGljYXRpb25Nb2RlIG1fdGV4dERlY29yYXRpb25N
b2RlOwogfTsKIAogYm9vbCBpc1N0eWxlU3Bhbihjb25zdCBOb2RlKik7CkluZGV4OiBXZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5o
CShyZXZpc2lvbiA2ODAxNikKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNzAsNiArNzAsNyBAQAogZW51bSBUcmlTdGF0ZSB7IEZhbHNlVHJpU3RhdGUsIFRy
dWVUcmlTdGF0ZSwgTWl4ZWRUcmlTdGF0ZSB9OwogZW51bSBFZGl0b3JDb21tYW5kU291cmNlIHsg
Q29tbWFuZEZyb21NZW51T3JLZXlCaW5kaW5nLCBDb21tYW5kRnJvbURPTSwgQ29tbWFuZEZyb21E
T01XaXRoVXNlckludGVyZmFjZSB9OwogZW51bSBXcml0aW5nRGlyZWN0aW9uIHsgTmF0dXJhbFdy
aXRpbmdEaXJlY3Rpb24sIExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiwgUmlnaHRUb0xlZnRX
cml0aW5nRGlyZWN0aW9uIH07CitlbnVtIFRleHREZWNvcmF0aW9uQXBwbGljYXRpb25Nb2RlIHsg
UmVwbGFjZVRleHREZWNvcmF0aW9uID0gMCwgQWRkVGV4dERlY29yYXRpb24sIFJlbW92ZVRleHRE
ZWNvcmF0aW9uIH07CiAKIGNsYXNzIEVkaXRvciB7CiBwdWJsaWM6CkBAIC0xNTAsOSArMTUxLDkg
QEAKICAgICBOb2RlKiByZW1vdmVkQW5jaG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdmVkQW5j
aG9yLmdldCgpOyB9CiAgICAgdm9pZCBzZXRSZW1vdmVkQW5jaG9yKFBhc3NSZWZQdHI8Tm9kZT4g
bikgeyBtX3JlbW92ZWRBbmNob3IgPSBuOyB9CiAKLSAgICB2b2lkIGFwcGx5U3R5bGUoQ1NTU3R5
bGVEZWNsYXJhdGlvbiosIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOworICAg
IHZvaWQgYXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgVGV4dERlY29yYXRpb25BcHBs
aWNhdGlvbk1vZGUsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOwogICAgIHZv
aWQgYXBwbHlQYXJhZ3JhcGhTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlvbiA9
IEVkaXRBY3Rpb25VbnNwZWNpZmllZCk7Ci0gICAgdm9pZCBhcHBseVN0eWxlVG9TZWxlY3Rpb24o
Q1NTU3R5bGVEZWNsYXJhdGlvbiosIEVkaXRBY3Rpb24pOworICAgIHZvaWQgYXBwbHlTdHlsZVRv
U2VsZWN0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qLCBUZXh0RGVjb3JhdGlvbkFwcGxpY2F0aW9u
TW9kZSwgRWRpdEFjdGlvbik7CiAgICAgdm9pZCBhcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rp
b24oQ1NTU3R5bGVEZWNsYXJhdGlvbiosIEVkaXRBY3Rpb24pOwogCiAgICAgdm9pZCBhcHBsaWVk
RWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7CkBAIC0zMzIsNyArMzMzLDcgQEAKICAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtYXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVz
ZWQgYXMgZW1hY3MgdXNlcyBpdC4KICAgICB2b2lkIHNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpOwogCi0gICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKKyAgICB2b2lk
IGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgVGV4dERlY29y
YXRpb25BcHBsaWNhdGlvbk1vZGUsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQp
OwogICAgIHZvaWQgYXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3Q7CiAgICAg
dm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVtZW50KikgY29uc3Q7CiAKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNjgwMTYpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDEsNyArNTAxLDcgQEAKICAgICBzdHlsZS0+ZGlmZihlZGl0aW5nU3R5bGUpOwogfQogCi1BcHBs
eVN0eWxlQ29tbWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uLCBFUHJvcGVy
dHlMZXZlbCBwcm9wZXJ0eUxldmVsKQorQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21t
YW5kKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFRleHRE
ZWNvcmF0aW9uQXBwbGljYXRpb25Nb2RlIHRleHREZWNvcmF0aW9uTW9kZSwgRWRpdEFjdGlvbiBl
ZGl0aW5nQWN0aW9uLCBFUHJvcGVydHlMZXZlbCBwcm9wZXJ0eUxldmVsKQogICAgIDogQ29tcG9z
aXRlRWRpdENvbW1hbmQoZG9jdW1lbnQpCiAgICAgLCBtX3N0eWxlKHN0eWxlLT5tYWtlTXV0YWJs
ZSgpKQogICAgICwgbV9lZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pCkBAIC01MTEsNiArNTEx
LDcgQEAKICAgICAsIG1fdXNlRW5kaW5nU2VsZWN0aW9uKHRydWUpCiAgICAgLCBtX3N0eWxlZElu
bGluZUVsZW1lbnQoMCkKICAgICAsIG1fcmVtb3ZlT25seShmYWxzZSkKKyAgICAsIG1fdGV4dERl
Y29yYXRpb25Nb2RlKHRleHREZWNvcmF0aW9uTW9kZSkKIHsKIH0KIApAQCAtNTI0LDYgKzUyNSw3
IEBACiAgICAgLCBtX3VzZUVuZGluZ1NlbGVjdGlvbihmYWxzZSkKICAgICAsIG1fc3R5bGVkSW5s
aW5lRWxlbWVudCgwKQogICAgICwgbV9yZW1vdmVPbmx5KGZhbHNlKQorICAgICwgbV90ZXh0RGVj
b3JhdGlvbk1vZGUoUmVwbGFjZVRleHREZWNvcmF0aW9uKQogewogfQogCkBAIC01MzcsNiArNTM5
LDcgQEAKICAgICAsIG1fdXNlRW5kaW5nU2VsZWN0aW9uKHRydWUpCiAgICAgLCBtX3N0eWxlZElu
bGluZUVsZW1lbnQoZWxlbWVudCkKICAgICAsIG1fcmVtb3ZlT25seShyZW1vdmVPbmx5KQorICAg
ICwgbV90ZXh0RGVjb3JhdGlvbk1vZGUoUmVwbGFjZVRleHREZWNvcmF0aW9uKQogewogfQogCkBA
IC0xMDY4LDYgKzEwNzEsOSBAQAogICAgIGlmIChzdGFydCA9PSBlbmQgJiYgc3RhcnQubm9kZSgp
LT5oYXNUYWdOYW1lKGJyVGFnKSkKICAgICAgICAgcGFzdEVuZE5vZGUgPSBzdGFydC5ub2RlKCkt
PnRyYXZlcnNlTmV4dE5vZGUoKTsKIAorICAgIGlmIChtX3JlbW92ZU9ubHkgfHwgbV90ZXh0RGVj
b3JhdGlvbk1vZGUgPT0gUmVtb3ZlVGV4dERlY29yYXRpb24pCisgICAgICAgIHJldHVybjsKKwog
ICAgIGFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZShzdHlsZSwgc3RhcnROb2RlLCBwYXN0RW5k
Tm9kZSk7CiB9CiAKQEAgLTExOTMsNyArMTE5OSw3IEBACiBlbnVtIEVQdXNoRG93blR5cGUgeyBT
aG91bGRCZVB1c2hlZERvd24sIFNob3VsZE5vdEJlUHVzaGVkRG93biB9Owogc3RydWN0IEhUTUxF
cXVpdmFsZW50IHsKICAgICBpbnQgcHJvcGVydHlJRDsKLSAgICBib29sIGlzVmFsdWVMaXN0Owor
ICAgIGJvb2wgaXNUZXh0RGVjb3JhdGlvbjsKICAgICBpbnQgcHJpbWl0aXZlSWQ7CiAgICAgY29u
c3QgUXVhbGlmaWVkTmFtZSogZWxlbWVudDsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRy
aWJ1dGU7CkBAIC0xMjY3LDEwICsxMjczLDE3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG1hcFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoZXF1aXZhbGVu
dC5wcmltaXRpdmVJZCkuZ2V0KCk7CiAKKyAgICAgICAgLy8gV2hlbiBhZGRpbmcgb3IgcmVtb3Zp
bmcgYSB0ZXh0IGRlY29yYXRpb24sIGF2b2lkIHJlbW92aW5nIHVucmVsYXRlZCB0ZXh0IGRlY29y
YXRpb25zLgorICAgICAgICBpZiAobV90ZXh0RGVjb3JhdGlvbk1vZGUgIT0gUmVwbGFjZVRleHRE
ZWNvcmF0aW9uCisgICAgICAgICAgICAmJiBlcXVpdmFsZW50LmlzVGV4dERlY29yYXRpb24gJiYg
c3R5bGVWYWx1ZS0+aXNWYWx1ZUxpc3QoKQorICAgICAgICAgICAgJiYgIXN0YXRpY19jYXN0PENT
U1ZhbHVlTGlzdCo+KHN0eWxlVmFsdWUuZ2V0KCkpLT5oYXNWYWx1ZShtYXBWYWx1ZS5nZXQoKSkp
CisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBpZiAobW9kZSAhPSBSZW1vdmVBbHdh
eXMpIHsKLSAgICAgICAgICAgIGlmIChlcXVpdmFsZW50LmlzVmFsdWVMaXN0ICYmIHN0eWxlVmFs
dWUtPmlzVmFsdWVMaXN0KCkgJiYgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oc3R5bGVWYWx1
ZS5nZXQoKSktPmhhc1ZhbHVlKG1hcFZhbHVlLmdldCgpKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsgLy8gSWYgQ1NTIHZhbHVlIGFzc3VtZXMgQ1NTVmFsdWVMaXN0LCB0aGVuIG9ubHkgc2tp
cCBpZiB0aGUgdmFsdWUgd2FzIHByZXNlbnQgaW4gc3R5bGUgdG8gYXBwbHkuCi0gICAgICAgICAg
ICBlbHNlIGlmIChtYXBWYWx1ZSAmJiBzdHlsZVZhbHVlLT5jc3NUZXh0KCkgPT0gbWFwVmFsdWUt
PmNzc1RleHQoKSkKKyAgICAgICAgICAgIGlmIChtX3RleHREZWNvcmF0aW9uTW9kZSA9PSBBZGRU
ZXh0RGVjb3JhdGlvbiAmJiBzdHlsZVZhbHVlLT5pc1ZhbHVlTGlzdCgpCisgICAgICAgICAgICAg
ICAgJiYgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oc3R5bGVWYWx1ZS5nZXQoKSktPmhhc1Zh
bHVlKG1hcFZhbHVlLmdldCgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGlmIChtX3RleHREZWNvcmF0aW9uTW9kZSA9PSBSZXBsYWNlVGV4dERlY29yYXRpb24gJiYg
bWFwVmFsdWUgJiYgc3R5bGVWYWx1ZS0+Y3NzVGV4dCgpID09IG1hcFZhbHVlLT5jc3NUZXh0KCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIElmIENTUyB2YWx1ZSBpcyBwcmltaXRpdmUs
IHRoZW4gc2tpcCBpZiB0aGV5IGFyZSBlcXVhbC4KICAgICAgICAgfQogCkBAIC0xMjkxLDcgKzEz
MDQsNyBAQAogICAgIH0KICAgICByZXR1cm4gcmVtb3ZlZDsKIH0KLSAgICAKKwogdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVz
KEhUTUxFbGVtZW50KiYgZWxlbSkKIHsKICAgICBib29sIHJlbW92ZU5vZGUgPSBmYWxzZTsKQEAg
LTEzMzAsMjEgKzEzNDMsNTkgQEAKICAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVy
dHlJRD4oaXQtPmlkKCkpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZGVjbC0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKLSAgICAgICAgaWYgKHZhbHVlICYmIChw
cm9wZXJ0eUlEICE9IENTU1Byb3BlcnR5V2hpdGVTcGFjZSB8fCAhaXNUYWJTcGFuTm9kZShlbGVt
ZW50KSkpIHsKKyAgICAgICAgaWYgKCF2YWx1ZSB8fCAocHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0
eVdoaXRlU3BhY2UgJiYgaXNUYWJTcGFuTm9kZShlbGVtZW50KSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBpZiAocHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uIHx8IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdCkgeworICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBk
aWZmID0gZGVjbC0+Y29weSgpOworICAgICAgICAgICAgZGlmZlRleHREZWNvcmF0aW9ucyhkaWZm
LmdldCgpLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCBpdC0+dmFsdWUoKSk7CisgICAgICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IGRpZmZWYWx1ZSA9IGRpZmYtPmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisgICAgICAgICAgICAvLyBEbyBub3RoaW5n
IGlmIHRleHQgZGVjb3JhdGlvbnMgZG8gbm8gb3ZlcmxhcC4KKyAgICAgICAgICAgIGlmIChtX3Rl
eHREZWNvcmF0aW9uTW9kZSAhPSBSZXBsYWNlVGV4dERlY29yYXRpb24gJiYgZGlmZlZhbHVlICYm
IGRpZmZWYWx1ZS0+aXNWYWx1ZUxpc3QoKSAmJiB2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KQorICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KGRpZmZWYWx1
ZS5nZXQoKSktPmxlbmd0aCgpID09IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlLmdl
dCgpKS0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBp
ZiAobV90ZXh0RGVjb3JhdGlvbk1vZGUgPT0gQWRkVGV4dERlY29yYXRpb24gJiYgbW9kZSAhPSBS
ZW1vdmVBbHdheXMpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgICAgIHJl
bW92ZWQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9uZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgICAgICAgICAgaWYgKG1fdGV4dERlY29yYXRp
b25Nb2RlICE9IFJlcGxhY2VUZXh0RGVjb3JhdGlvbikgeworICAgICAgICAgICAgICAgIHNldE5v
ZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBkaWZmLT5jc3NUZXh0KCkpOworICAgICAg
ICAgICAgICAgIGRlY2wgPSBlbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZXh0cmFjdGVkU3R5bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYzsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPnNldFByb3BlcnR5
KHByb3BlcnR5SUQsIGl0LT52YWx1ZSgpLT5jc3NUZXh0KCksIGl0LT5pc0ltcG9ydGFudCgpLCBl
Yyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZXh0cmFjdGVkU3R5bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYzsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPnNldFByb3BlcnR5
KHByb3BlcnR5SUQsIHZhbHVlLT5jc3NUZXh0KCksIGl0LT5pc0ltcG9ydGFudCgpLCBlYyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5KGVsZW1l
bnQsIHByb3BlcnR5SUQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKGV4dHJhY3RlZFN0eWxlKSB7CisgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYzsKKyAgICAgICAgICAgICAgICBleHRyYWN0ZWRTdHlsZS0+c2V0UHJvcGVydHkocHJvcGVy
dHlJRCwgdmFsdWUtPmNzc1RleHQoKSwgaXQtPmlzSW1wb3J0YW50KCksIGVjKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAobW9k
ZSA9PSBSZW1vdmVOb25lKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgICAgIGlmIChleHRyYWN0ZWRTdHls
ZSkKICAgICAgICAgICAgICAgICBleHRyYWN0ZWRTdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJ
RCwgdmFsdWUtPmNzc1RleHQoKSwgZGVjbC0+Z2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0eUlE
KSwgZWMpOwogICAgICAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHlJ
RCk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVy
dHlVbmljb2RlQmlkaSAmJiAhZGVjbC0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eURpcmVj
dGlvbikuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV4dHJhY3RlZFN0eWxlKQot
ICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlEaXJlY3Rpb24sIGRlY2wtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24p
LCBkZWNsLT5nZXRQcm9wZXJ0eVByaW9yaXR5KENTU1Byb3BlcnR5RGlyZWN0aW9uKSwgZWMpOwot
ICAgICAgICAgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5KGVsZW1lbnQsIENTU1Byb3BlcnR5RGly
ZWN0aW9uKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJv
cGVydHlVbmljb2RlQmlkaSAmJiAhZGVjbC0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eURp
cmVjdGlvbikuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICAgICAgICAgIGlmIChleHRyYWN0ZWRTdHlsZSkKKyAgICAgICAgICAgICAgICBleHRyYWN0
ZWRTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIGRlY2wtPmdldFByb3Bl
cnR5VmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pLCBkZWNsLT5nZXRQcm9wZXJ0eVByaW9yaXR5
KENTU1Byb3BlcnR5RGlyZWN0aW9uKSwgZWMpOworICAgICAgICAgICAgcmVtb3ZlQ1NTUHJvcGVy
dHkoZWxlbWVudCwgQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwogICAgICAgICB9CiAgICAgfQogCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDY4MDE2KQorKysgV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDcgKzQwMCw3IEBA
CiAgICAgICAgIGlmICghaW5uZXJGcmFtZS0+ZWRpdG9yKCktPnNob3VsZEFwcGx5U3R5bGUoc3R5
bGUuZ2V0KCksIGlubmVyUmFuZ2UuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBtX2NsaWVudC0+d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOwotICAgICAgICBpbm5lckZyYW1lLT5lZGl0
b3IoKS0+YXBwbHlTdHlsZShzdHlsZS5nZXQoKSwgRWRpdEFjdGlvblNldENvbG9yKTsKKyAgICAg
ICAgaW5uZXJGcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoc3R5bGUuZ2V0KCksIFJlcGxhY2VU
ZXh0RGVjb3JhdGlvbiwgRWRpdEFjdGlvblNldENvbG9yKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252032</attachid>
            <date>2015-04-29 20:25:31 -0700</date>
            <delta_ts>2015-05-01 01:51:48 -0700</delta_ts>
            <desc>WIP3</desc>
            <filename>wip27818.patch</filename>
            <type>text/plain</type>
            <size>57895</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShy
ZXZpc2lvbiAxODM0OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQ1LDE3ICs5NDUsMTQgQEAKICAgICBpZiAobW9k
ZSA9PSBSZW1vdmVOb25lKQogICAgICAgICByZXR1cm4gc3R5bGUtPmNvbmZsaWN0c1dpdGhJbmxp
bmVTdHlsZU9mRWxlbWVudChlbGVtZW50KTsKIAotICAgIFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiBw
cm9wZXJ0aWVzOwotICAgIGlmICghc3R5bGUtPmNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxl
bWVudChlbGVtZW50LCBleHRyYWN0ZWRTdHlsZSwgcHJvcGVydGllcykpCisgICAgUmVmUHRyPE11
dGFibGVTdHlsZVByb3BlcnRpZXM+IG5ld0lubGluZVN0eWxlOworICAgIGlmICghc3R5bGUtPmNv
bmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChlbGVtZW50LCBuZXdJbmxpbmVTdHlsZSwg
ZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHVzZSBhIG1hc3MtcmVtb3ZhbCBmdW5jdGlvbiBoZXJlIGJ1dCB3ZSBkb24ndCBo
YXZlIGFuIHVuZG9hYmxlIG9uZSB5ZXQuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9w
ZXJ0aWVzLnNpemUoKTsgaSsrKQotICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eShlbGVtZW50LCBw
cm9wZXJ0aWVzW2ldKTsKLQotICAgIC8vIE5vIG5lZWQgdG8gc2VyaWFsaXplIDxmb28gc3R5bGU9
IiI+IGlmIHdlIGp1c3QgcmVtb3ZlZCB0aGUgbGFzdCBjc3MgcHJvcGVydHkKLSAgICBpZiAoZWxl
bWVudC0+aW5saW5lU3R5bGUoKS0+aXNFbXB0eSgpKQorICAgIGlmIChuZXdJbmxpbmVTdHlsZS0+
aXNFbXB0eSgpKQogICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0
cik7CisgICAgZWxzZQorICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0
ciwgbmV3SW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKIAogICAgIGlmIChpc1NwYW5XaXRob3V0QXR0
cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCiAgICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAxODM0OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCwxMCArMTYwLDEwIEBA
CiAgICAgSFRNTEVsZW1lbnRFcXVpdmFsZW50KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlSUQgcHJp
bWl0aXZlVmFsdWUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpOwogCiAgICAgdmlydHVh
bCB+SFRNTEVsZW1lbnRFcXVpdmFsZW50KCkgeyB9Ci0gICAgdmlydHVhbCBib29sIG1hdGNoZXMo
Y29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4gIW1fdGFnTmFtZSB8fCBlbGVt
ZW50LT5oYXNUYWdOYW1lKCptX3RhZ05hbWUpOyB9CisgICAgdmlydHVhbCBib29sIG1hdGNoZXMo
Y29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QgeyByZXR1cm4gIW1fdGFnTmFtZSB8fCBlbGVt
ZW50Lmhhc1RhZ05hbWUoKm1fdGFnTmFtZSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQXR0cmli
dXRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcHJvcGVydHlF
eGlzdHNJblN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUpIGNvbnN0IHsgcmV0dXJu
IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqLCBTdHlsZVByb3BlcnRpZXMqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcHJvcGVydHlFeGlzdHNJblN0eWxlKGNvbnN0IEVkaXRp
bmdTdHlsZSYgc3R5bGUpIGNvbnN0IHsgcmV0dXJuIHN0eWxlLm1fbXV0YWJsZVN0eWxlICYmIHN0
eWxlLm1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQmLCBjb25zdCBF
ZGl0aW5nU3R5bGUmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkVG9TdHlsZShFbGVtZW50
KiwgRWRpdGluZ1N0eWxlKikgY29uc3Q7CiAKIHByb3RlY3RlZDoKQEAgLTE5NCw5ICsxOTQsOSBA
QAogICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZSAhPSBDU1NWYWx1ZUludmFsaWQpOwogfQogCi1i
b29sIEhUTUxFbGVtZW50RXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQq
IGVsZW1lbnQsIFN0eWxlUHJvcGVydGllcyogc3R5bGUpIGNvbnN0Citib29sIEhUTUxFbGVtZW50
RXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IEVkaXRpbmdTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7CisgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlLm1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKG1fcHJvcGVydHlJRCk7CiAgICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkgJiYgaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gbV9wcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
OwogfQogCkBAIC0yMDcsMzkgKzIwNyw1NSBAQAogCiBjbGFzcyBIVE1MVGV4dERlY29yYXRpb25F
cXVpdmFsZW50IDogcHVibGljIEhUTUxFbGVtZW50RXF1aXZhbGVudCB7CiBwdWJsaWM6Ci0gICAg
SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudChDU1NWYWx1ZUlEIHByaW1pdGl2ZVZhbHVlLCBj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKTsKKyAgICBIVE1MVGV4dERlY29yYXRpb25FcXVp
dmFsZW50KENTU1ZhbHVlSUQgcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUpCisgICAgICAgIDogSFRNTEVsZW1lbnRFcXVpdmFsZW50KENTU1Byb3BlcnR5VGV4dERl
Y29yYXRpb24sIHByaW1pdGl2ZVZhbHVlLCB0YWdOYW1lKQorICAgICAgICAsIG1faXNVbmRlcmxp
bmUocHJpbWl0aXZlVmFsdWUgPT0gQ1NTVmFsdWVVbmRlcmxpbmUpCisgICAgeworICAgIH0KIAot
ICAgIHZpcnR1YWwgYm9vbCBwcm9wZXJ0eUV4aXN0c0luU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0
aWVzKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVt
ZW50KiwgU3R5bGVQcm9wZXJ0aWVzKikgY29uc3Q7Ci19OworICAgIGJvb2wgcHJvcGVydHlFeGlz
dHNJblN0eWxlKGNvbnN0IEVkaXRpbmdTdHlsZSYgc3R5bGUpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICBpZiAoY2hhbmdlSW5TdHlsZShzdHlsZSkgIT0gVGV4dERlY29yYXRpb25DaGFu
Z2U6Ok5vbmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotSFRNTFRleHREZWNvcmF0aW9u
RXF1aXZhbGVudDo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudChDU1NWYWx1ZUlEIHByaW1p
dGl2ZVZhbHVlLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQotICAgIDogSFRNTEVsZW1l
bnRFcXVpdmFsZW50KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIHByaW1pdGl2ZVZhbHVlLCB0
YWdOYW1lKQotICAgIC8vIG1fcHJvcGVydHlJRCBpcyB1c2VkIGluIEhUTUxFbGVtZW50RXF1aXZh
bGVudDo6YWRkVG9TdHlsZQotewotfQorICAgICAgICBpZiAoIXN0eWxlLm1fbXV0YWJsZVN0eWxl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi1ib29sIEhUTUxUZXh0RGVjb3JhdGlvbkVx
dWl2YWxlbnQ6OnByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0
eWxlKSBjb25zdAotewotICAgIHJldHVybiBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSB8fCBzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKLX0KKyAgICAgICAgYXV0byYg
bXV0YWJsZVN0eWxlID0gKnN0eWxlLm1fbXV0YWJsZVN0eWxlOworICAgICAgICByZXR1cm4gbXV0
YWJsZVN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdCkKKyAgICAgICAgICAgIHx8IG11dGFibGVTdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworICAgIH0KIAotYm9vbCBIVE1MVGV4
dERlY29yYXRpb25FcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCogZWxl
bWVudCwgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSkgY29uc3QKLXsKLSAgICBSZWZQdHI8Q1NTVmFs
dWU+IHN0eWxlVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdl
YmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKLSAgICBpZiAoIXN0eWxlVmFsdWUpCi0gICAg
ICAgIHN0eWxlVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRl
eHREZWNvcmF0aW9uKTsKLSAgICByZXR1cm4gbWF0Y2hlcyhlbGVtZW50KSAmJiBpczxDU1NWYWx1
ZUxpc3Q+KHN0eWxlVmFsdWUuZ2V0KCkpICYmIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnN0eWxl
VmFsdWUpLmhhc1ZhbHVlKG1fcHJpbWl0aXZlVmFsdWUuZ2V0KCkpOwotfQorICAgIGJvb2wgdmFs
dWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEVkaXRpbmdTdHlsZSYg
c3R5bGUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1hdGNoZXMoZWxlbWVu
dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gY2hhbmdlID0gY2hh
bmdlSW5TdHlsZShzdHlsZSk7CisgICAgICAgIGlmIChjaGFuZ2UgIT0gVGV4dERlY29yYXRpb25D
aGFuZ2U6Ok5vbmUpCisgICAgICAgICAgICByZXR1cm4gY2hhbmdlID09IFRleHREZWNvcmF0aW9u
Q2hhbmdlOjpBZGQ7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3R5bGVWYWx1ZSA9IHN0eWxl
Lm1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4
dERlY29yYXRpb25zSW5FZmZlY3QpOworICAgICAgICBpZiAoIXN0eWxlVmFsdWUpCisgICAgICAg
ICAgICBzdHlsZVZhbHVlID0gc3R5bGUubV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisgICAgICAgIHJldHVybiBpczxDU1NWYWx1
ZUxpc3Q+KHN0eWxlVmFsdWUuZ2V0KCkpICYmIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnN0eWxl
VmFsdWUpLmhhc1ZhbHVlKG1fcHJpbWl0aXZlVmFsdWUuZ2V0KCkpOworICAgIH0KIAorcHJpdmF0
ZToKKyAgICBUZXh0RGVjb3JhdGlvbkNoYW5nZSBjaGFuZ2VJblN0eWxlKGNvbnN0IEVkaXRpbmdT
dHlsZSYgc3R5bGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pc1VuZGVybGluZSA/
IHN0eWxlLnVuZGVybGluZUNoYW5nZSgpIDogc3R5bGUuc3RyaWtlVGhyb3VnaENoYW5nZSgpOwor
ICAgIH0KKworICAgIGJvb2wgbV9pc1VuZGVybGluZTsKK307CisKIGNsYXNzIEhUTUxBdHRyaWJ1
dGVFcXVpdmFsZW50IDogcHVibGljIEhUTUxFbGVtZW50RXF1aXZhbGVudCB7CiBwdWJsaWM6CiAg
ICAgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQoQ1NTUHJvcGVydHlJRCwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpOwogICAgIEhUTUxB
dHRyaWJ1dGVFcXVpdmFsZW50KENTU1Byb3BlcnR5SUQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lKTsKIAotICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVtKSBjb25zdCB7
IHJldHVybiBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6Om1hdGNoZXMoZWxlbSkgJiYgZWxlbS0+aGFz
QXR0cmlidXRlKG1fYXR0ck5hbWUpOyB9CisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IEVsZW1lbnQm
IGVsZW0pIGNvbnN0IHsgcmV0dXJuIEhUTUxFbGVtZW50RXF1aXZhbGVudDo6bWF0Y2hlcyhlbGVt
KSAmJiBlbGVtLmhhc0F0dHJpYnV0ZShtX2F0dHJOYW1lKTsgfQogICAgIHZpcnR1YWwgYm9vbCBo
YXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIHZh
bHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiwgU3R5bGVQcm9wZXJ0aWVzKikgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50JiwgY29uc3QgRWRp
dGluZ1N0eWxlJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkZFRvU3R5bGUoRWxlbWVudCos
IEVkaXRpbmdTdHlsZSopIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
YXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKEVsZW1lbnQqKSBjb25zdDsKICAgICBpbmxpbmUgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0ck5h
bWU7IH0KQEAgLTI2MCwxMCArMjc2LDEwIEBACiB7CiB9CiAKLWJvb2wgSFRNTEF0dHJpYnV0ZUVx
dWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiBlbGVtZW50LCBTdHlsZVBy
b3BlcnRpZXMqIHN0eWxlKSBjb25zdAorYm9vbCBIVE1MQXR0cmlidXRlRXF1aXZhbGVudDo6dmFs
dWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEVkaXRpbmdTdHlsZSYg
c3R5bGUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGF0dHJpYnV0ZVZh
bHVlQXNDU1NWYWx1ZShlbGVtZW50KTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHN0eWxlVmFsdWUg
PSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoJmVsZW1lbnQpOworICAg
IFJlZlB0cjxDU1NWYWx1ZT4gc3R5bGVWYWx1ZSA9IHN0eWxlLm1fbXV0YWJsZVN0eWxlLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7CiAgICAgCiAgICAgcmV0dXJuIGNvbXBhcmVD
U1NWYWx1ZVB0cih2YWx1ZSwgc3R5bGVWYWx1ZSk7CiB9CkBAIC0zMTUsMjcgKzMzMSwyNiBAQAog
CiBFZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZSgpCiAgICAgOiBtX3Nob3VsZFVzZUZpeGVkRGVm
YXVsdEZvbnRTaXplKGZhbHNlKQorICAgICwgbV91bmRlcmxpbmVDaGFuZ2Uoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lKSkKKyAgICAsIG1fc3RyaWtlVGhy
b3VnaENoYW5nZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oVGV4dERlY29yYXRpb25DaGFuZ2U6Ok5v
bmUpKQogICAgICwgbV9mb250U2l6ZURlbHRhKE5vRm9udERlbHRhKQogewogfQogCiBFZGl0aW5n
U3R5bGU6OkVkaXRpbmdTdHlsZShOb2RlKiBub2RlLCBQcm9wZXJ0aWVzVG9JbmNsdWRlIHByb3Bl
cnRpZXNUb0luY2x1ZGUpCi0gICAgOiBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplKGZh
bHNlKQotICAgICwgbV9mb250U2l6ZURlbHRhKE5vRm9udERlbHRhKQorICAgIDogRWRpdGluZ1N0
eWxlKCkKIHsKICAgICBpbml0KG5vZGUsIHByb3BlcnRpZXNUb0luY2x1ZGUpOwogfQogCiBFZGl0
aW5nU3R5bGU6OkVkaXRpbmdTdHlsZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIFByb3BlcnRp
ZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5jbHVkZSkKLSAgICA6IG1fc2hvdWxkVXNlRml4ZWRE
ZWZhdWx0Rm9udFNpemUoZmFsc2UpCi0gICAgLCBtX2ZvbnRTaXplRGVsdGEoTm9Gb250RGVsdGEp
CisgICAgOiBFZGl0aW5nU3R5bGUoKQogewogICAgIGluaXQocG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKSwgcHJvcGVydGllc1RvSW5jbHVkZSk7CiB9CiAKIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0
eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUpCi0gICAgOiBtX3Nob3VsZFVzZUZpeGVk
RGVmYXVsdEZvbnRTaXplKGZhbHNlKQotICAgICwgbV9mb250U2l6ZURlbHRhKE5vRm9udERlbHRh
KQorICAgIDogRWRpdGluZ1N0eWxlKCkKIHsKICAgICBpZiAoc3R5bGUpCiAgICAgICAgIG1fbXV0
YWJsZVN0eWxlID0gc3R5bGUtPm11dGFibGVDb3B5KCk7CkBAIC0zNDMsMTMgKzM1OCwxOSBAQAog
fQogCiBFZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgOiBtX211dGFibGVTdHlsZSgwKQotICAgICwgbV9z
aG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShmYWxzZSkKLSAgICAsIG1fZm9udFNpemVEZWx0
YShOb0ZvbnREZWx0YSkKKyAgICA6IEVkaXRpbmdTdHlsZSgpCiB7CiAgICAgc2V0UHJvcGVydHko
cHJvcGVydHlJRCwgdmFsdWUpOworICAgIGV4dHJhY3RGb250U2l6ZURlbHRhKCk7CiB9CiAKK0Vk
aXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFs
dWVJRCB2YWx1ZSkKKyAgICA6IEVkaXRpbmdTdHlsZSgpCit7CisgICAgbV9tdXRhYmxlU3R5bGUg
PSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKKyAgICBtX211dGFibGVTdHlsZS0+
c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUpOworfQorCiBFZGl0aW5nU3R5bGU6On5FZGl0
aW5nU3R5bGUoKQogewogfQpAQCAtNDkyLDcgKzUxMyw4IEBACiAKIGJvb2wgRWRpdGluZ1N0eWxl
Ojppc0VtcHR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKCFtX211dGFibGVTdHlsZSB8fCBtX211
dGFibGVTdHlsZS0+aXNFbXB0eSgpKSAmJiBtX2ZvbnRTaXplRGVsdGEgPT0gTm9Gb250RGVsdGE7
CisgICAgcmV0dXJuICghbV9tdXRhYmxlU3R5bGUgfHwgbV9tdXRhYmxlU3R5bGUtPmlzRW1wdHko
KSkgJiYgbV9mb250U2l6ZURlbHRhID09IE5vRm9udERlbHRhCisgICAgICAgICYmIHVuZGVybGlu
ZUNoYW5nZSgpID09IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lICYmIHN0cmlrZVRocm91Z2hD
aGFuZ2UoKSA9PSBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6Tm9uZTsKIH0KIAogYm9vbCBFZGl0aW5n
U3R5bGU6OnRleHREaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiYgd3JpdGluZ0RpcmVjdGlvbikg
Y29uc3QKQEAgLTUzNywxMSArNTU5LDY1IEBACiAgICAgcmV0dXJuIG1lcmdlU3R5bGUoc3R5bGUs
IE92ZXJyaWRlVmFsdWVzKTsKIH0KIAorc3RhdGljIHZvaWQgYXBwbHlUZXh0RGVjb3JhdGlvbkNo
YW5nZShDU1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgVGV4dERlY29yYXRpb25DaGFuZ2UgY2hhbmdl
LCBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpCit7CisgICAgc3dpdGNoIChjaGFuZ2Up
IHsKKyAgICBjYXNlIFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lOgorICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRleHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQ6CisgICAgICAgIHZhbHVlTGlzdC5h
cHBlbmQoc3RkOjptb3ZlKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dERl
Y29yYXRpb25DaGFuZ2U6OlJlbW92ZToKKyAgICAgICAgdmFsdWVMaXN0LnJlbW92ZUFsbCgmdmFs
dWUuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgRWRpdGluZ1N0eWxl
OjpvdmVycmlkZVdpdGhTdHlsZShjb25zdCBFZGl0aW5nU3R5bGUmIHN0eWxlKQoreworICAgIG1l
cmdlU3R5bGUoc3R5bGUubV9tdXRhYmxlU3R5bGUuZ2V0KCksIE92ZXJyaWRlVmFsdWVzKTsKKwor
ICAgIG1fZm9udFNpemVEZWx0YSArPSBzdHlsZS5tX2ZvbnRTaXplRGVsdGE7CisKKyAgICBhdXRv
IHVuZGVybGluZUNoYW5nZSA9IHN0eWxlLnVuZGVybGluZUNoYW5nZSgpOworICAgIGF1dG8gc3Ry
aWtlVGhyb3VnaENoYW5nZSA9IHN0eWxlLnN0cmlrZVRocm91Z2hDaGFuZ2UoKTsKKyAgICBpZiAo
dW5kZXJsaW5lQ2hhbmdlID09IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lICYmIHN0cmlrZVRo
cm91Z2hDaGFuZ2UgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6Ok5vbmUpCisgICAgICAgIHJldHVy
bjsKKworICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gdW5kZXJsaW5lID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5kZXJsaW5lKTsKKyAgICBSZWY8Q1NT
UHJpbWl0aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpOworICAgIGlmIChtX211dGFibGVTdHlsZSkg
eworICAgICAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzID0gbV9tdXRh
YmxlU3R5bGUuZ2V0KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBw
cm9wZXJ0aWVzLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29y
YXRpb25zSW5FZmZlY3QpOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHByb3BlcnRpZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbik7CisgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0
KCkpIHsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCA9IGRvd25jYXN0
PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKKyAgICAgICAgICAgICAgICBhcHBseVRleHREZWNvcmF0
aW9uQ2hhbmdlKHZhbHVlTGlzdCwgdW5kZXJsaW5lQ2hhbmdlLCBzdGQ6Om1vdmUodW5kZXJsaW5l
KSk7CisgICAgICAgICAgICAgICAgYXBwbHlUZXh0RGVjb3JhdGlvbkNoYW5nZSh2YWx1ZUxpc3Qs
IHN0cmlrZVRocm91Z2hDaGFuZ2UsIHN0ZDo6bW92ZShsaW5lVGhyb3VnaCkpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFJl
ZjxDU1NWYWx1ZUxpc3Q+IHZhbHVlTGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBh
cmF0ZWQoKTsKKyAgICBpZiAodW5kZXJsaW5lQ2hhbmdlID09IFRleHREZWNvcmF0aW9uQ2hhbmdl
OjpBZGQpCisgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKHN0ZDo6bW92ZSh1bmRlcmxpbmUpKTsK
KyAgICBpZiAoc3RyaWtlVGhyb3VnaENoYW5nZSA9PSBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6QWRk
KQorICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChzdGQ6Om1vdmUobGluZVRocm91Z2gpKTsKKwor
ICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCisgICAgICAgIG1fbXV0YWJsZVN0eWxlID0gTXV0YWJs
ZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CisgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sICZ2YWx1ZUxpc3QuZ2V0KCkpOworfQorCiB2
b2lkIEVkaXRpbmdTdHlsZTo6Y2xlYXIoKQogewogICAgIG1fbXV0YWJsZVN0eWxlLmNsZWFyKCk7
CiAgICAgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IGZhbHNlOwogICAgIG1fZm9u
dFNpemVEZWx0YSA9IE5vRm9udERlbHRhOworICAgIHNldFVuZGVybGluZUNoYW5nZShUZXh0RGVj
b3JhdGlvbkNoYW5nZTo6Tm9uZSk7CisgICAgc2V0U3RyaWtlVGhyb3VnaENoYW5nZShUZXh0RGVj
b3JhdGlvbkNoYW5nZTo6Tm9uZSk7CiB9CiAKIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBFZGl0
aW5nU3R5bGU6OmNvcHkoKSBjb25zdApAQCAtNTQ5LDggKzYyNSw3IEBACiAgICAgUmVmUHRyPEVk
aXRpbmdTdHlsZT4gY29weSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CiAgICAgaWYgKG1fbXV0
YWJsZVN0eWxlKQogICAgICAgICBjb3B5LT5tX211dGFibGVTdHlsZSA9IG1fbXV0YWJsZVN0eWxl
LT5tdXRhYmxlQ29weSgpOwotICAgIGNvcHktPm1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNp
emUgPSBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplOwotICAgIGNvcHktPm1fZm9udFNp
emVEZWx0YSA9IG1fZm9udFNpemVEZWx0YTsKKyAgICBjb3B5LT5jb3B5QWRkaXRpb25hbFN0eWxl
RnJvbSgqdGhpcyk7CiAgICAgcmV0dXJuIGNvcHk7CiB9CiAKQEAgLTY5NCwxNiArNzY5LDY3IEBA
CiAgICAgcmV0dXJuIHN0YXRlOwogfQogCi1ib29sIEVkaXRpbmdTdHlsZTo6Y29uZmxpY3RzV2l0
aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIEVkaXRpbmdTdHls
ZSogZXh0cmFjdGVkU3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiogY29uZmxpY3RpbmdQcm9w
ZXJ0aWVzKSBjb25zdAorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHRleHREZWNvcmF0aW9u
VmFsdWVMaXN0KGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcykKIHsKKyAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5VGV4dERlY29yYXRpb24pOworICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ZhbHVl
TGlzdCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZG93bmNhc3Q8Q1NT
VmFsdWVMaXN0Pih2YWx1ZS5nZXQoKSk7Cit9CisKK2Jvb2wgRWRpdGluZ1N0eWxlOjpjb25mbGlj
dHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCwgUmVmUHRy
PE11dGFibGVTdHlsZVByb3BlcnRpZXM+KiBuZXdJbmxpbmVTdHlsZVB0ciwgRWRpdGluZ1N0eWxl
KiBleHRyYWN0ZWRTdHlsZSkgY29uc3QKK3sKICAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgQVNT
RVJUKCFjb25mbGljdGluZ1Byb3BlcnRpZXMgfHwgY29uZmxpY3RpbmdQcm9wZXJ0aWVzLT5pc0Vt
cHR5KCkpOwogCiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBpbmxpbmVTdHlsZSA9IGVsZW1l
bnQtPmlubGluZVN0eWxlKCk7Ci0gICAgaWYgKCFtX211dGFibGVTdHlsZSB8fCAhaW5saW5lU3R5
bGUpCisgICAgaWYgKCFpbmxpbmVTdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJv
b2wgY29uZmxpY3RzID0gZmFsc2U7CisgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IG5ld0lubGluZVN0eWxlOworICAgIGlmIChuZXdJbmxpbmVTdHlsZVB0cikgeworICAgICAgICBu
ZXdJbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlLT5tdXRhYmxlQ29weSgpOworICAgICAgICAqbmV3
SW5saW5lU3R5bGVQdHIgPSBuZXdJbmxpbmVTdHlsZTsKKyAgICB9CiAKLSAgICB1bnNpZ25lZCBw
cm9wZXJ0eUNvdW50ID0gbV9tdXRhYmxlU3R5bGUtPnByb3BlcnR5Q291bnQoKTsKKyAgICBib29s
IHNob3VsZFJlbW92ZVVuZGVybGluZSA9IHVuZGVybGluZUNoYW5nZSgpID09IFRleHREZWNvcmF0
aW9uQ2hhbmdlOjpSZW1vdmU7CisgICAgYm9vbCBzaG91bGRSZW1vdmVTdHJpa2VUaHJvdWdoID0g
c3RyaWtlVGhyb3VnaENoYW5nZSgpID09IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpSZW1vdmU7Cisg
ICAgaWYgKHNob3VsZFJlbW92ZVVuZGVybGluZSB8fCBzaG91bGRSZW1vdmVTdHJpa2VUaHJvdWdo
KSB7CisgICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZUxpc3QgPSB0ZXh0RGVj
b3JhdGlvblZhbHVlTGlzdCgqaW5saW5lU3R5bGUpKSB7CisgICAgICAgICAgICBSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBuZXdWYWx1ZUxpc3QgPSB2YWx1ZUxpc3QtPmNvcHkoKTsKKyAgICAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGV4dHJhY3RlZFZhbHVlTGlzdCA9IENTU1ZhbHVlTGlzdDo6
Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKKworICAgICAgICAgICAgUmVmPENTU1ByaW1pdGl2ZVZh
bHVlPiB1bmRlcmxpbmUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVVbmRlcmxpbmUpOworICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZVVuZGVybGluZSAm
JiB2YWx1ZUxpc3QtPmhhc1ZhbHVlKHVuZGVybGluZS5wdHIoKSkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5ld0lubGluZVN0eWxlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBuZXdWYWx1ZUxpc3QtPnJlbW92ZUFsbCh1bmRlcmxpbmUucHRyKCkp
OworICAgICAgICAgICAgICAgIGV4dHJhY3RlZFZhbHVlTGlzdC0+YXBwZW5kKHN0ZDo6bW92ZSh1
bmRlcmxpbmUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUxpbmVUaHJvdWdoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVTdHJp
a2VUaHJvdWdoICYmIHZhbHVlTGlzdC0+aGFzVmFsdWUobGluZVRocm91Z2gucHRyKCkpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFuZXdJbmxpbmVTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgbmV3VmFsdWVMaXN0LT5yZW1vdmVBbGwobGlu
ZVRocm91Z2gucHRyKCkpOworICAgICAgICAgICAgICAgIGV4dHJhY3RlZFZhbHVlTGlzdC0+YXBw
ZW5kKHN0ZDo6bW92ZShsaW5lVGhyb3VnaCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoZXh0cmFjdGVkVmFsdWVMaXN0LT5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGNv
bmZsaWN0cyA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlTGlzdC0+bGVuZ3Ro
KCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVRleHREZWNvcmF0aW9uLCBuZXdWYWx1ZUxpc3QpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworCisgICAgICAgICAgICAgICAgaWYgKGV4dHJhY3Rl
ZFN0eWxlKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNJbXBvcnRhbnQgPSBpbmxpbmVT
dHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKKyAg
ICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
VGV4dERlY29yYXRpb24sIGV4dHJhY3RlZFZhbHVlTGlzdC0+Y3NzVGV4dCgpLCBpc0ltcG9ydGFu
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IG1fbXV0YWJsZVN0eWxlID8gbV9tdXRhYmxl
U3R5bGUtPnByb3BlcnR5Q291bnQoKSA6IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHByb3BlcnR5Q291bnQ7ICsraSkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQg
PSBtX211dGFibGVTdHlsZS0+cHJvcGVydHlBdChpKS5pZCgpOwogCkBAIC03MTIsMzUgKzgzOCwz
NiBAQAogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0g
Q1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCAmJiBpbmxpbmVTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKSkgewotICAgICAg
ICAgICAgaWYgKCFjb25mbGljdGluZ1Byb3BlcnRpZXMpCisgICAgICAgICAgICBpZiAoIW5ld0lu
bGluZVN0eWxlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgY29u
ZmxpY3RpbmdQcm9wZXJ0aWVzLT5hcHBlbmQoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7Cisg
ICAgICAgICAgICBjb25mbGljdHMgPSB0cnVlOworICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUt
PnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwogICAgICAgICAgICAg
aWYgKGV4dHJhY3RlZFN0eWxlKQogICAgICAgICAgICAgICAgIGV4dHJhY3RlZFN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCBpbmxpbmVTdHlsZS0+Z2V0UHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKSwgaW5saW5lU3R5bGUtPnByb3BlcnR5
SXNJbXBvcnRhbnQoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbikpOwotICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWlubGluZVN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKHByb3BlcnR5SUQpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
aWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlVbmljb2RlQmlkaSAmJiBpbmxpbmVTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbikpIHsKLSAgICAgICAgICAg
IGlmICghY29uZmxpY3RpbmdQcm9wZXJ0aWVzKQorICAgICAgICAgICAgaWYgKCFuZXdJbmxpbmVT
dHlsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGNvbmZsaWN0
aW5nUHJvcGVydGllcy0+YXBwZW5kKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IGNvbmZsaWN0cyA9IHRydWU7CisgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlUHJv
cGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwogICAgICAgICAgICAgaWYgKGV4dHJhY3RlZFN0
eWxlKQogICAgICAgICAgICAgICAgIGV4dHJhY3RlZFN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0
eUlELCBpbmxpbmVTdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKSwgaW5saW5lU3R5
bGUtPnByb3BlcnR5SXNJbXBvcnRhbnQocHJvcGVydHlJRCkpOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKCFjb25mbGljdGluZ1Byb3BlcnRpZXMpCisgICAgICAgIGlmICghbmV3SW5saW5lU3R5
bGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBjb25mbGljdGluZ1Byb3Bl
cnRpZXMtPmFwcGVuZChwcm9wZXJ0eUlEKTsKLQorICAgICAgICBjb25mbGljdHMgPSB0cnVlOwor
ICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7CiAgICAg
ICAgIGlmIChleHRyYWN0ZWRTdHlsZSkKICAgICAgICAgICAgIGV4dHJhY3RlZFN0eWxlLT5zZXRQ
cm9wZXJ0eShwcm9wZXJ0eUlELCBpbmxpbmVTdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0
eUlEKSwgaW5saW5lU3R5bGUtPnByb3BlcnR5SXNJbXBvcnRhbnQocHJvcGVydHlJRCkpOwogICAg
IH0KIAotICAgIHJldHVybiBjb25mbGljdGluZ1Byb3BlcnRpZXMgJiYgIWNvbmZsaWN0aW5nUHJv
cGVydGllcy0+aXNFbXB0eSgpOworICAgIHJldHVybiBjb25mbGljdHM7CiB9CiAKIHN0YXRpYyBj
b25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhUTUxFbGVtZW50RXF1aXZhbGVudD4+JiBodG1s
RWxlbWVudEVxdWl2YWxlbnRzKCkKQEAgLTc2NiwxNCArODkzLDE0IEBACiAKIGJvb2wgRWRpdGlu
Z1N0eWxlOjpjb25mbGljdHNXaXRoSW1wbGljaXRTdHlsZU9mRWxlbWVudChIVE1MRWxlbWVudCog
ZWxlbWVudCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSwgU2hvdWxkRXh0cmFjdE1hdGNo
aW5nU3R5bGUgc2hvdWxkRXh0cmFjdE1hdGNoaW5nU3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X211dGFibGVTdHlsZSkKKyAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhUTUxFbGVtZW50RXF1aXZhbGVu
dD4+JiBIVE1MRWxlbWVudEVxdWl2YWxlbnRzID0gaHRtbEVsZW1lbnRFcXVpdmFsZW50cygpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSFRNTEVsZW1lbnRFcXVpdmFsZW50cy5zaXplKCk7
ICsraSkgewogICAgICAgICBjb25zdCBIVE1MRWxlbWVudEVxdWl2YWxlbnQqIGVxdWl2YWxlbnQg
PSBIVE1MRWxlbWVudEVxdWl2YWxlbnRzW2ldLmdldCgpOwotICAgICAgICBpZiAoZXF1aXZhbGVu
dC0+bWF0Y2hlcyhlbGVtZW50KSAmJiBlcXVpdmFsZW50LT5wcm9wZXJ0eUV4aXN0c0luU3R5bGUo
bV9tdXRhYmxlU3R5bGUuZ2V0KCkpCi0gICAgICAgICAgICAmJiAoc2hvdWxkRXh0cmFjdE1hdGNo
aW5nU3R5bGUgPT0gRXh0cmFjdE1hdGNoaW5nU3R5bGUgfHwgIWVxdWl2YWxlbnQtPnZhbHVlSXNQ
cmVzZW50SW5TdHlsZShlbGVtZW50LCBtX211dGFibGVTdHlsZS5nZXQoKSkpKSB7CisgICAgICAg
IGlmIChlcXVpdmFsZW50LT5tYXRjaGVzKCplbGVtZW50KSAmJiBlcXVpdmFsZW50LT5wcm9wZXJ0
eUV4aXN0c0luU3R5bGUoKnRoaXMpCisgICAgICAgICAgICAmJiAoc2hvdWxkRXh0cmFjdE1hdGNo
aW5nU3R5bGUgPT0gRXh0cmFjdE1hdGNoaW5nU3R5bGUgfHwgIWVxdWl2YWxlbnQtPnZhbHVlSXNQ
cmVzZW50SW5TdHlsZSgqZWxlbWVudCwgKnRoaXMpKSkgewogICAgICAgICAgICAgaWYgKGV4dHJh
Y3RlZFN0eWxlKQogICAgICAgICAgICAgICAgIGVxdWl2YWxlbnQtPmFkZFRvU3R5bGUoZWxlbWVu
dCwgZXh0cmFjdGVkU3R5bGUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC04MDMsMTMg
KzkzMCwxNCBAQAogYm9vbCBFZGl0aW5nU3R5bGU6OmNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxl
T2ZBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIEFTU0VSVChl
bGVtZW50KTsKLSAgICBpZiAoIW1fbXV0YWJsZVN0eWxlKQorICAgIGlmIChpc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
SFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ+PiYgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnRzID0gaHRt
bEF0dHJpYnV0ZUVxdWl2YWxlbnRzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBIVE1M
QXR0cmlidXRlRXF1aXZhbGVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKEhUTUxBdHRy
aWJ1dGVFcXVpdmFsZW50c1tpXS0+bWF0Y2hlcyhlbGVtZW50KSAmJiBIVE1MQXR0cmlidXRlRXF1
aXZhbGVudHNbaV0tPnByb3BlcnR5RXhpc3RzSW5TdHlsZShtX211dGFibGVTdHlsZS5nZXQoKSkK
LSAgICAgICAgICAgICYmICFIVE1MQXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPnZhbHVlSXNQcmVz
ZW50SW5TdHlsZShlbGVtZW50LCBtX211dGFibGVTdHlsZS5nZXQoKSkpCisgICAgICAgIGlmIChI
VE1MQXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPm1hdGNoZXMoKmVsZW1lbnQpCisgICAgICAgICAg
ICAmJiBIVE1MQXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPnByb3BlcnR5RXhpc3RzSW5TdHlsZSgq
dGhpcykKKyAgICAgICAgICAgICYmICFIVE1MQXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPnZhbHVl
SXNQcmVzZW50SW5TdHlsZSgqZWxlbWVudCwgKnRoaXMpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCkBAIC04MzQsOCArOTYyLDggQEAKICAgICAgICAgaWYgKHNob3VsZFByZXNl
cnZlV3JpdGluZ0RpcmVjdGlvbiA9PSBQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24gJiYgZXF1aXZh
bGVudC0+YXR0cmlidXRlTmFtZSgpID09IEhUTUxOYW1lczo6ZGlyQXR0cikKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghZXF1aXZhbGVudC0+bWF0Y2hlcyhlbGVtZW50KSB8
fCAhZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxlKG1fbXV0YWJsZVN0eWxlLmdldCgp
KQotICAgICAgICAgICAgfHwgKHNob3VsZEV4dHJhY3RNYXRjaGluZ1N0eWxlID09IERvTm90RXh0
cmFjdE1hdGNoaW5nU3R5bGUgJiYgZXF1aXZhbGVudC0+dmFsdWVJc1ByZXNlbnRJblN0eWxlKGVs
ZW1lbnQsIG1fbXV0YWJsZVN0eWxlLmdldCgpKSkpCisgICAgICAgIGlmICghZXF1aXZhbGVudC0+
bWF0Y2hlcygqZWxlbWVudCkgfHwgIWVxdWl2YWxlbnQtPnByb3BlcnR5RXhpc3RzSW5TdHlsZSgq
dGhpcykKKyAgICAgICAgICAgIHx8IChzaG91bGRFeHRyYWN0TWF0Y2hpbmdTdHlsZSA9PSBEb05v
dEV4dHJhY3RNYXRjaGluZ1N0eWxlICYmIGVxdWl2YWxlbnQtPnZhbHVlSXNQcmVzZW50SW5TdHls
ZSgqZWxlbWVudCwgKnRoaXMpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlm
IChleHRyYWN0ZWRTdHlsZSkKQEAgLTg0OSwxMCArOTc3LDI3IEBACiAKIGJvb2wgRWRpdGluZ1N0
eWxlOjpzdHlsZUlzUHJlc2VudEluQ29tcHV0ZWRTdHlsZU9mTm9kZShOb2RlKiBub2RlKSBjb25z
dAogewotICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCisgICAgaWYgKGlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0eWxl
KG5vZGUpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0aWVzTm90SW4oKm1fbXV0YWJsZVN0eWxlLCBj
b21wdXRlZFN0eWxlKS0+aXNFbXB0eSgpOworCisgICAgYm9vbCBzaG91bGRBZGRVbmRlcmxpbmUg
PSB1bmRlcmxpbmVDaGFuZ2UoKSA9PSBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6QWRkOworICAgIGJv
b2wgc2hvdWxkQWRkTGluZVRocm91Z2ggPSBzdHJpa2VUaHJvdWdoQ2hhbmdlKCkgPT0gVGV4dERl
Y29yYXRpb25DaGFuZ2U6OkFkZDsKKyAgICBpZiAoc2hvdWxkQWRkVW5kZXJsaW5lIHx8IHNob3Vs
ZEFkZExpbmVUaHJvdWdoKSB7CisgICAgICAgIGJvb2wgaGFzVW5kZXJsaW5lID0gZmFsc2U7Cisg
ICAgICAgIGJvb2wgaGFzTGluZVRocm91Z2ggPSBmYWxzZTsKKyAgICAgICAgaWYgKFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlU
ZXh0RGVjb3JhdGlvbikpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkg
eworICAgICAgICAgICAgICAgIGNvbnN0IENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gZG93bmNh
c3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOworICAgICAgICAgICAgICAgIGhhc1VuZGVybGluZSA9
IHZhbHVlTGlzdC5oYXNWYWx1ZSgmY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlVW5kZXJsaW5lKS5nZXQoKSk7CisgICAgICAgICAgICAgICAgaGFzTGluZVRocm91
Z2ggPSB2YWx1ZUxpc3QuaGFzVmFsdWUoJmNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUxpbmVUaHJvdWdoKS5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKChzaG91bGRBZGRVbmRlcmxpbmUgJiYgIWhhc1VuZGVybGluZSkgfHwg
KHNob3VsZEFkZExpbmVUaHJvdWdoICYmICFoYXNMaW5lVGhyb3VnaCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuICFtX211dGFibGVTdHlsZSB8fCBnZXRQ
cm9wZXJ0aWVzTm90SW4oKm1fbXV0YWJsZVN0eWxlLCBjb21wdXRlZFN0eWxlKS0+aXNFbXB0eSgp
OwogfQogCiBib29sIEVkaXRpbmdTdHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9ySFRNTEVxdWl2
YWxlbnQoY29uc3QgSFRNTEVsZW1lbnQqIGVsZW1lbnQpCkBAIC04NjQsNyArMTAwOSw3IEBACiAg
ICAgICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTEVsZW1lbnRFcXVpdmFsZW50
Pj4mIEhUTUxFbGVtZW50RXF1aXZhbGVudHMgPSBodG1sRWxlbWVudEVxdWl2YWxlbnRzKCk7CiAg
ICAgICAgIHNpemVfdCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFRNTEVsZW1lbnRFcXVp
dmFsZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKEhUTUxFbGVtZW50RXF1aXZh
bGVudHNbaV0tPm1hdGNoZXMoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChIVE1MRWxlbWVu
dEVxdWl2YWxlbnRzW2ldLT5tYXRjaGVzKCplbGVtZW50KSkgewogICAgICAgICAgICAgICAgIGVs
ZW1lbnRJc1NwYW5PckVsZW1lbnRFcXVpdmFsZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTg3Nyw3ICsxMDIyLDcgQEAKICAgICB1bnNpZ25lZCBt
YXRjaGVkQXR0cmlidXRlcyA9IDA7CiAgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxI
VE1MQXR0cmlidXRlRXF1aXZhbGVudD4+JiBIVE1MQXR0cmlidXRlRXF1aXZhbGVudHMgPSBodG1s
QXR0cmlidXRlRXF1aXZhbGVudHMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhUTUxB
dHRyaWJ1dGVFcXVpdmFsZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoSFRNTEF0dHJp
YnV0ZUVxdWl2YWxlbnRzW2ldLT5tYXRjaGVzKGVsZW1lbnQpICYmIEhUTUxBdHRyaWJ1dGVFcXVp
dmFsZW50c1tpXS0+YXR0cmlidXRlTmFtZSgpICE9IEhUTUxOYW1lczo6ZGlyQXR0cikKKyAgICAg
ICAgaWYgKEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS0+bWF0Y2hlcygqZWxlbWVudCkgJiYg
SFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnRzW2ldLT5hdHRyaWJ1dGVOYW1lKCkgIT0gSFRNTE5hbWVz
OjpkaXJBdHRyKQogICAgICAgICAgICAgbWF0Y2hlZEF0dHJpYnV0ZXMrKzsKICAgICB9CiAKQEAg
LTk2OSwxMCArMTExNCwxNCBAQAogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudE1hdGNo
ZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2woY29uc3QgSFRNTEVsZW1lbnRFcXVp
dmFsZW50KiBlcXVpdmFsZW50LCBjb25zdCBTdHlsZWRFbGVtZW50KiBlbGVtZW50LAotICAgIEVk
aXRpbmdTdHlsZTo6Q1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSwgU3R5bGVQcm9wZXJ0aWVz
KiBzdHlsZSkKKyAgICBFZGl0aW5nU3R5bGU6OkNTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlIG1vZGUs
IEVkaXRpbmdTdHlsZSYgc3R5bGUpCiB7Ci0gICAgcmV0dXJuIGVxdWl2YWxlbnQtPm1hdGNoZXMo
ZWxlbWVudCkgJiYgKCFlbGVtZW50LT5pbmxpbmVTdHlsZSgpIHx8ICFlcXVpdmFsZW50LT5wcm9w
ZXJ0eUV4aXN0c0luU3R5bGUoZWxlbWVudC0+aW5saW5lU3R5bGUoKSkpCi0gICAgICAgICYmICht
b2RlID09IEVkaXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMgfHwgIWVxdWl2YWxlbnQtPnByb3Bl
cnR5RXhpc3RzSW5TdHlsZShzdHlsZSkpOworICAgIGlmICghZXF1aXZhbGVudC0+bWF0Y2hlcygq
ZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobW9kZSAhPSBFZGl0aW5n
U3R5bGU6Ok92ZXJyaWRlVmFsdWVzICYmIGVxdWl2YWxlbnQtPnByb3BlcnR5RXhpc3RzSW5TdHls
ZShzdHlsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAhZWxlbWVudC0+
aW5saW5lU3R5bGUoKSB8fCAhZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxlKEVkaXRp
bmdTdHlsZTo6Y3JlYXRlKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpLmdldCgpKTsKIH0KIAogc3Rh
dGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZXh0cmFjdEVkaXRpbmdQcm9w
ZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRpbmdTdHlsZTo6UHJvcGVy
dGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQpAQCAtMTAwNSw3ICsxMTU0LDcgQEAK
IAogICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTEVsZW1lbnRFcXVpdmFsZW50
Pj4mIGVsZW1lbnRFcXVpdmFsZW50cyA9IGh0bWxFbGVtZW50RXF1aXZhbGVudHMoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGVsZW1lbnRFcXVpdmFsZW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAoZWxlbWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURl
Y2woZWxlbWVudEVxdWl2YWxlbnRzW2ldLmdldCgpLCBlbGVtZW50LCBtb2RlLCBtX211dGFibGVT
dHlsZS5nZXQoKSkpCisgICAgICAgIGlmIChlbGVtZW50TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJ
bklubGluZVN0eWxlRGVjbChlbGVtZW50RXF1aXZhbGVudHNbaV0uZ2V0KCksIGVsZW1lbnQsIG1v
ZGUsICp0aGlzKSkKICAgICAgICAgICAgIGVsZW1lbnRFcXVpdmFsZW50c1tpXS0+YWRkVG9TdHls
ZShlbGVtZW50LCB0aGlzKTsKICAgICB9CiAKQEAgLTEwMTMsNyArMTE2Miw3IEBACiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVFcXVpdmFsZW50cy5zaXplKCk7ICsraSkgewog
ICAgICAgICBpZiAoYXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPmF0dHJpYnV0ZU5hbWUoKSA9PSBI
VE1MTmFtZXM6OmRpckF0dHIpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBpbmNsdWRlIGRpcmVjdGlvbmFsaXR5Ci0gICAgICAgIGlmIChlbGVtZW50TWF0Y2hlc0Fu
ZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChhdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS5n
ZXQoKSwgZWxlbWVudCwgbW9kZSwgbV9tdXRhYmxlU3R5bGUuZ2V0KCkpKQorICAgICAgICBpZiAo
ZWxlbWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2woYXR0cmlidXRl
RXF1aXZhbGVudHNbaV0uZ2V0KCksIGVsZW1lbnQsIG1vZGUsICp0aGlzKSkKICAgICAgICAgICAg
IGF0dHJpYnV0ZUVxdWl2YWxlbnRzW2ldLT5hZGRUb1N0eWxlKGVsZW1lbnQsIHRoaXMpOwogICAg
IH0KIH0KQEAgLTEzOTcsOCArMTU0Niw4IEBACiAgICAgLCBtX2FwcGx5U3Vic2NyaXB0KGZhbHNl
KQogICAgICwgbV9hcHBseVN1cGVyc2NyaXB0KGZhbHNlKQogewotICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHBvc2l0aW9uLmFuY2hvck5vZGUoKSA/ICZwb3NpdGlvbi5hbmNob3JOb2RlKCktPmRv
Y3VtZW50KCkgOiAwOwotICAgIGlmICghc3R5bGUgfHwgIXN0eWxlLT5zdHlsZSgpIHx8ICFkb2N1
bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKSA/ICZwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5kb2N1
bWVudCgpIDogMDsKKyAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWRvY3Vt
ZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSog
bm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKQEAgLTE0MDgsMTIgKzE1NTcsMzIgQEAK
ICAgICBDb21wdXRlZFN0eWxlRXh0cmFjdG9yIGNvbXB1dGVkU3R5bGUobm9kZSk7CiAKICAgICAv
LyBGSVhNRTogdGFrZSBjYXJlIG9mIGJhY2tncm91bmQtY29sb3IgaW4gZWZmZWN0Ci0gICAgUmVm
UHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFibGVTdHlsZSA9IGdldFByb3BlcnRpZXNO
b3RJbigqc3R5bGUtPnN0eWxlKCksIGNvbXB1dGVkU3R5bGUpOworICAgIFJlZlB0cjxNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzPiBtdXRhYmxlU3R5bGUgPSBzdHlsZS0+c3R5bGUoKSA/CisgICAgICAg
IGdldFByb3BlcnRpZXNOb3RJbigqc3R5bGUtPnN0eWxlKCksIGNvbXB1dGVkU3R5bGUpIDogTXV0
YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAKICAgICByZWNvbmNpbGVUZXh0RGVjb3Jh
dGlvblByb3BlcnRpZXMobXV0YWJsZVN0eWxlLmdldCgpKTsKLSAgICBpZiAoIWRvY3VtZW50LT5m
cmFtZSgpLT5lZGl0b3IoKS5zaG91bGRTdHlsZVdpdGhDU1MoKSkKKyAgICBib29sIHNob3VsZFN0
eWxlV2l0aENTUyA9IGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS5zaG91bGRTdHlsZVdpdGhD
U1MoKTsKKyAgICBpZiAoIXNob3VsZFN0eWxlV2l0aENTUykKICAgICAgICAgZXh0cmFjdFRleHRT
dHlsZXMoZG9jdW1lbnQsICptdXRhYmxlU3R5bGUsIGNvbXB1dGVkU3R5bGUudXNlRml4ZWRGb250
RGVmYXVsdFNpemUoKSk7CiAKKyAgICBib29sIHNob3VsZEFkZFVuZGVybGluZSA9IHN0eWxlLT51
bmRlcmxpbmVDaGFuZ2UoKSA9PSBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6QWRkOworICAgIGJvb2wg
c2hvdWxkQWRkU3RyaWtlVGhyb3VnaCA9IHN0eWxlLT5zdHJpa2VUaHJvdWdoQ2hhbmdlKCkgPT0g
VGV4dERlY29yYXRpb25DaGFuZ2U6OkFkZDsKKyAgICBpZiAoc2hvdWxkQWRkVW5kZXJsaW5lIHx8
IHNob3VsZEFkZFN0cmlrZVRocm91Z2gpIHsKKyAgICAgICAgaWYgKHNob3VsZFN0eWxlV2l0aENT
UykgeworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVMaXN0ID0gdGV4dERl
Y29yYXRpb25WYWx1ZUxpc3QoKm11dGFibGVTdHlsZSk7CisgICAgICAgICAgICBpZiAoIXZhbHVl
TGlzdCkKKyAgICAgICAgICAgICAgICB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNw
YWNlU2VwYXJhdGVkKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkQWRkVW5kZXJsaW5lKQorICAg
ICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZVVuZGVybGluZSkpOworICAgICAgICAgICAgaWYgKHNob3VsZEFk
ZFN0cmlrZVRocm91Z2gpCisgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpKTsKKyAg
ICAgICAgICAgIG11dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3Jh
dGlvbiwgdmFsdWVMaXN0LmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
YXBwbHlVbmRlcmxpbmUgPSBzaG91bGRBZGRVbmRlcmxpbmU7CisgICAgICAgICAgICBtX2FwcGx5
TGluZVRocm91Z2ggPSBzaG91bGRBZGRTdHJpa2VUaHJvdWdoOworICAgICAgICB9CisgICAgfQor
CiAgICAgLy8gQ2hhbmdpbmcgdGhlIHdoaXRlc3BhY2Ugc3R5bGUgaW4gYSB0YWIgc3BhbiB3b3Vs
ZCBjb2xsYXBzZSB0aGUgdGFiIGludG8gYSBzcGFjZS4KICAgICBpZiAoaXNUYWJTcGFuVGV4dE5v
ZGUocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkgfHwgaXNUYWJTcGFuTm9kZSgocG9zaXRpb24u
ZGVwcmVjYXRlZE5vZGUoKSkpKQogICAgICAgICBtdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5V2hpdGVTcGFjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmgJKHJldmlzaW9uIDE4MzQ5NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiV3JpdGluZ0RpcmVjdGlvbi5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
VHJpU3RhdGUuaD4KQEAgLTYxLDkgKzYyLDEwIEBACiBjbGFzcyBTdHlsZWRFbGVtZW50OwogY2xh
c3MgVmlzaWJsZVNlbGVjdGlvbjsKIAorZW51bSBjbGFzcyBUZXh0RGVjb3JhdGlvbkNoYW5nZSB7
IE5vbmUsIEFkZCwgUmVtb3ZlIH07CisKIGNsYXNzIEVkaXRpbmdTdHlsZSA6IHB1YmxpYyBSZWZD
b3VudGVkPEVkaXRpbmdTdHlsZT4gewogcHVibGljOgotCiAgICAgZW51bSBQcm9wZXJ0aWVzVG9J
bmNsdWRlIHsgQWxsUHJvcGVydGllcywgT25seUVkaXRpbmdJbmhlcml0YWJsZVByb3BlcnRpZXMs
IEVkaXRpbmdQcm9wZXJ0aWVzSW5FZmZlY3QgfTsKIAogICAgIGVudW0gU2hvdWxkUHJlc2VydmVX
cml0aW5nRGlyZWN0aW9uIHsgUHJlc2VydmVXcml0aW5nRGlyZWN0aW9uLCBEb05vdFByZXNlcnZl
V3JpdGluZ0RpcmVjdGlvbiB9OwpAQCAtOTUsNiArOTcsMTEgQEAKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRWRpdGluZ1N0eWxlKHByb3BlcnR5SUQsIHZhbHVlKSk7CiAgICAgfQogCisg
ICAgc3RhdGljIFJlZjxFZGl0aW5nU3R5bGU+IGNyZWF0ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIENTU1ZhbHVlSUQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBFZGl0aW5nU3R5bGUocHJvcGVydHlJRCwgdmFsdWUpKTsKKyAgICB9CisKICAgICBXRUJDT1JF
X0VYUE9SVCB+RWRpdGluZ1N0eWxlKCk7CiAKICAgICBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBz
dHlsZSgpIHsgcmV0dXJuIG1fbXV0YWJsZVN0eWxlLmdldCgpOyB9CkBAIC0xMDIsNiArMTA5LDcg
QEAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQ
dHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4pOwogICAgIHZvaWQgb3ZlcnJpZGVXaXRoU3R5bGUo
Y29uc3QgU3R5bGVQcm9wZXJ0aWVzKik7CisgICAgdm9pZCBvdmVycmlkZVdpdGhTdHlsZShjb25z
dCBFZGl0aW5nU3R5bGUmKTsKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgUGFzc1JlZlB0cjxFZGl0
aW5nU3R5bGU+IGNvcHkoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZXh0
cmFjdEFuZFJlbW92ZUJsb2NrUHJvcGVydGllcygpOwpAQCAtMTE1LDkgKzEyMywxMCBAQAogICAg
IFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHlsZShFZGl0aW5nU3R5bGUqKSBjb25zdDsKICAgICBUcmlT
dGF0ZSB0cmlTdGF0ZU9mU3R5bGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OwogICAg
IGJvb2wgY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChl
bGVtZW50LCAwLCAwKTsgfQotICAgIGJvb2wgY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVt
ZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUs
IFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiYgY29uZmxpY3RpbmdQcm9wZXJ0aWVzKSBjb25zdAorICAg
IGJvb2wgY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVs
ZW1lbnQsIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiYgbmV3SW5saW5lU3R5bGUsCisg
ICAgICAgIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50KGVsZW1lbnQsIGV4dHJh
Y3RlZFN0eWxlLCAmY29uZmxpY3RpbmdQcm9wZXJ0aWVzKTsKKyAgICAgICAgcmV0dXJuIGNvbmZs
aWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChlbGVtZW50LCAmbmV3SW5saW5lU3R5bGUsIGV4
dHJhY3RlZFN0eWxlKTsKICAgICB9CiAgICAgYm9vbCBjb25mbGljdHNXaXRoSW1wbGljaXRTdHls
ZU9mRWxlbWVudChIVE1MRWxlbWVudCosIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUgPSAw
LCBTaG91bGRFeHRyYWN0TWF0Y2hpbmdTdHlsZSA9IERvTm90RXh0cmFjdE1hdGNoaW5nU3R5bGUp
IGNvbnN0OwogICAgIGJvb2wgY29uZmxpY3RzV2l0aEltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMo
SFRNTEVsZW1lbnQqKSBjb25zdDsKQEAgLTE0NCw2ICsxNTMsMTEgQEAKICAgICBmbG9hdCBmb250
U2l6ZURlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2l6ZURlbHRhOyB9CiAgICAgYm9vbCBo
YXNGb250U2l6ZURlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2l6ZURlbHRhICE9IE5vRm9u
dERlbHRhOyB9CiAgICAgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemU7IH0KKyAgICAKKyAgICB2
b2lkIHNldFVuZGVybGluZUNoYW5nZShUZXh0RGVjb3JhdGlvbkNoYW5nZSBjaGFuZ2UpIHsgbV91
bmRlcmxpbmVDaGFuZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhbmdlKTsgfQorICAgIFRl
eHREZWNvcmF0aW9uQ2hhbmdlIHVuZGVybGluZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFRleHREZWNvcmF0aW9uQ2hhbmdlPihtX3VuZGVybGluZUNoYW5nZSk7IH0KKyAgICB2
b2lkIHNldFN0cmlrZVRocm91Z2hDaGFuZ2UoVGV4dERlY29yYXRpb25DaGFuZ2UgY2hhbmdlKSB7
IG1fc3RyaWtlVGhyb3VnaENoYW5nZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGFuZ2UpOyB9
CisgICAgVGV4dERlY29yYXRpb25DaGFuZ2Ugc3RyaWtlVGhyb3VnaENoYW5nZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFRleHREZWNvcmF0aW9uQ2hhbmdlPihtX3N0cmlrZVRocm91Z2hD
aGFuZ2UpOyB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlQXRT
ZWxlY3Rpb25TdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBzaG91bGRVc2VCYWNr
Z3JvdW5kQ29sb3JJbkVmZmVjdCA9IGZhbHNlKTsKICAgICBzdGF0aWMgV3JpdGluZ0RpcmVjdGlv
biB0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBFZGl0
aW5nU3R5bGUqIHR5cGluZ1N0eWxlLCBib29sJiBoYXNOZXN0ZWRPck11bHRpcGxlRW1iZWRkaW5n
cyk7CkBAIC0xNTMsMjEgKzE2NywzMyBAQAogICAgIEVkaXRpbmdTdHlsZShjb25zdCBQb3NpdGlv
biYsIFByb3BlcnRpZXNUb0luY2x1ZGUpOwogICAgIGV4cGxpY2l0IEVkaXRpbmdTdHlsZShjb25z
dCBTdHlsZVByb3BlcnRpZXMqKTsKICAgICBFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgRWRpdGluZ1N0eWxlKENTU1Byb3BlcnR5SUQsIENTU1Zh
bHVlSUQpOwogICAgIHZvaWQgaW5pdChOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7CiAgICAg
dm9pZCByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKFJlbmRlclN0eWxlKik7
CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKICAgICB2b2lkIGV4dHJhY3RGb250U2l6ZURlbHRh
KCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVHJpU3RhdGUgdHJpU3RhdGVPZlN0eWxlKFQm
IHN0eWxlVG9Db21wYXJlLCBTaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNvbnN0Owot
ICAgIGJvb2wgY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQq
LCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlLCBWZWN0b3I8Q1NTUHJvcGVydHlJRD4qIGNv
bmZsaWN0aW5nUHJvcGVydGllcykgY29uc3Q7CisgICAgYm9vbCBjb25mbGljdHNXaXRoSW5saW5l
U3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCosIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzPiogbmV3SW5saW5lU3R5bGUsIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpIGNvbnN0
OwogICAgIHZvaWQgbWVyZ2VJbmxpbmVBbmRJbXBsaWNpdFN0eWxlT2ZFbGVtZW50KFN0eWxlZEVs
ZW1lbnQqLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSwgUHJvcGVydGllc1RvSW5jbHVkZSk7CiAg
ICAgdm9pZCBtZXJnZVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyosIENTU1Byb3BlcnR5T3Zl
cnJpZGVNb2RlKTsKIAorICAgIHZvaWQgY29weUFkZGl0aW9uYWxTdHlsZUZyb20oY29uc3QgRWRp
dGluZ1N0eWxlJiBzb3VyY2UpCisgICAgeworICAgICAgICBtX3Nob3VsZFVzZUZpeGVkRGVmYXVs
dEZvbnRTaXplID0gc291cmNlLm1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemU7CisgICAg
ICAgIG1fdW5kZXJsaW5lQ2hhbmdlID0gc291cmNlLm1fdW5kZXJsaW5lQ2hhbmdlOworICAgICAg
ICBtX3N0cmlrZVRocm91Z2hDaGFuZ2UgPSBzb3VyY2UubV9zdHJpa2VUaHJvdWdoQ2hhbmdlOwor
ICAgICAgICBtX2ZvbnRTaXplRGVsdGEgPSBzb3VyY2UubV9mb250U2l6ZURlbHRhOworICAgIH0K
KwogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBtX211dGFibGVTdHlsZTsKLSAg
ICBib29sIG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemU7CisgICAgdW5zaWduZWQgbV9z
aG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSA6IDE7CisgICAgdW5zaWduZWQgbV91bmRlcmxp
bmVDaGFuZ2UgOiAyOworICAgIHVuc2lnbmVkIG1fc3RyaWtlVGhyb3VnaENoYW5nZSA6IDI7CiAg
ICAgZmxvYXQgbV9mb250U2l6ZURlbHRhOwogCiAgICAgZnJpZW5kIGNsYXNzIEhUTUxFbGVtZW50
RXF1aXZhbGVudDsKICAgICBmcmllbmQgY2xhc3MgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ7Cisg
ICAgZnJpZW5kIGNsYXNzIEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ7CiB9OwogCiBjbGFz
cyBTdHlsZUNoYW5nZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lv
biAxODM0OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg4Nyw3ICs4ODcsNyBAQAogICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246Ci0gICAg
ICAgIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CisgICAg
ICAgIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGU6OmNyZWF0ZShzdHlsZSks
IGVkaXRpbmdBY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZpc2libGVTZWxlY3Rp
b246OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICBpZiAoc3R5bGUpCkBAIC04OTUsNiArODk1LDIz
IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KKwordm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUo
UmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQor
eworICAgIHN3aXRjaCAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25U
eXBlKCkpIHsKKyAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgorICAgICAg
ICAvLyBkbyBub3RoaW5nCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlv
bjo6Q2FyZXRTZWxlY3Rpb246CisgICAgICAgIC8vIEZJWE1FOiBQYXNzIGluIEVkaXRpbmdTdHls
ZSBoZXJlLgorICAgICAgICBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoKnN0eWxlLCBlZGl0aW5n
QWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5n
ZVNlbGVjdGlvbjoKKyAgICAgICAgaWYgKHN0eWxlKQorICAgICAgICAgICAgYXBwbHlDb21tYW5k
KEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3R5bGUuZ2V0KCksIGVkaXRp
bmdBY3Rpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQogICAgIAogYm9vbCBFZGl0b3I6
OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgUmFuZ2UqIHJhbmdlKQog
eyAgIApAQCAtOTI0LDYgKzk0MSwxNiBAQAogICAgICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0
aW5nQWN0aW9uKTsKIH0KIAordm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWZQ
dHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCit7Cisg
ICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0IGRl
Y29yYXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgorICAgIGlmIChjbGllbnQo
KSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGUoKSwgbV9mcmFtZS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICAgICAgYXBwbHlTdHls
ZShXVEY6Om1vdmUoc3R5bGUpLCBlZGl0aW5nQWN0aW9uKTsKK30KKwogdm9pZCBFZGl0b3I6OmFw
cGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0
eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkpCkBAIC0yOTUyLDIwICsyOTc5LDIwIEBACiAgICAgcmV0
dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBuZXdTZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0KIAotdm9pZCBF
ZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCit2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGlu
Z1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsK
LSAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkpIHsKKyAgICBpZiAoc3R5bGUuaXNF
bXB0eSgpKSB7CiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJUeXBpbmdTdHlsZSgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50
IHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZTsKLSAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKSB7Ci0gICAgICAgIHR5cGlu
Z1N0eWxlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpLT5jb3B5KCk7Ci0gICAg
ICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVdpdGhTdHlsZShzdHlsZSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHR5cGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoc3R5bGUpOworICAgIGlm
IChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnR5cGluZ1N0
eWxlKCkpCisgICAgICAgIHR5cGluZ1N0eWxlID0gZXhpc3RpbmdUeXBpbmdTdHlsZS0+Y29weSgp
OworICAgIGVsc2UKKyAgICAgICAgdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgp
OworICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVdpdGhTdHlsZShzdHlsZSk7CiAKICAgICB0eXBp
bmdTdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCksIEVkaXRpbmdTdHlsZTo6UHJlc2VydmVX
cml0aW5nRGlyZWN0aW9uKTsKIApAQCAtMjk3OCw2ICszMDA1LDExIEBACiAgICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZSh0eXBpbmdTdHlsZSk7CiB9CiAKK3ZvaWQgRWRpdG9y
Ojpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCit7CisgICAgcmV0dXJuIGNvbXB1dGVBbmRTZXRUeXBp
bmdTdHlsZShFZGl0aW5nU3R5bGU6OmNyZWF0ZSgmcHJvcGVydGllcyksIGVkaXRpbmdBY3Rpb24p
OworfQorCiB2b2lkIEVkaXRvcjo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqIGUp
CiB7CiAgICAgaWYgKGNsaWVudCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZp
c2lvbiAxODM0OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODMsOCArMTgzLDEwIEBACiAgICAgYm9vbCBkaXNwYXRjaENQUEV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYsIERhdGFUcmFuc2ZlckFjY2Vzc1BvbGljeSk7CiAgICAgCiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyosIEVkaXRBY3Rp
b24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOworICAgIHZvaWQgYXBwbHlTdHlsZShSZWZQdHI8
RWRpdGluZ1N0eWxlPiYmLCBFZGl0QWN0aW9uKTsKICAgICB2b2lkIGFwcGx5UGFyYWdyYXBoU3R5
bGUoU3R5bGVQcm9wZXJ0aWVzKiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25VbnNwZWNpZmllZCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9w
ZXJ0aWVzKiwgRWRpdEFjdGlvbik7CisgICAgdm9pZCBhcHBseVN0eWxlVG9TZWxlY3Rpb24oUmVm
UHRyPEVkaXRpbmdTdHlsZT4mJiwgRWRpdEFjdGlvbik7CiAgICAgdm9pZCBhcHBseVBhcmFncmFw
aFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiwgRWRpdEFjdGlvbik7CiAKICAgICB2
b2lkIGFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+KTsKQEAg
LTM2MSw3ICszNjMsOCBAQAogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG1hcmsoKSBjb25z
dDsgLy8gTWFyaywgdG8gYmUgdXNlZCBhcyBlbWFjcyB1c2VzIGl0LgogICAgIHZvaWQgc2V0TWFy
ayhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNv
bXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMqICwgRWRpdEFjdGlvbiA9IEVk
aXRBY3Rpb25VbnNwZWNpZmllZCk7CisgICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUo
RWRpdGluZ1N0eWxlJiAsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVy
dGllcyYgLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0OwogICAg
IHZvaWQgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCopIGNvbnN0OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE4MzQ5
NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk4LDE2ICs5OCwxNiBAQAogICAgIHJldHVybiBub2RlLT5kb2N1bWVudCgpLmZy
YW1lKCk7CiB9CiAKLXN0YXRpYyBib29sIGFwcGx5Q29tbWFuZFRvRnJhbWUoRnJhbWUmIGZyYW1l
LCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIFN0eWxlUHJv
cGVydGllcyogc3R5bGUpCitzdGF0aWMgYm9vbCBhcHBseUNvbW1hbmRUb0ZyYW1lKEZyYW1lJiBm
cmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiYmIHN0eWxlKQogewogICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjYWxs
IHNob3VsZEFwcGx5U3R5bGUgd2hlbiB0aGUgc291cmNlIGlzIERPTTsgaXMgdGhlcmUgYSBnb29k
IHJlYXNvbiBmb3IgdGhhdD8KICAgICBzd2l0Y2ggKHNvdXJjZSkgewogICAgIGNhc2UgQ29tbWFu
ZEZyb21NZW51T3JLZXlCaW5kaW5nOgotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hcHBseVN0eWxl
VG9TZWxlY3Rpb24oc3R5bGUsIGFjdGlvbik7CisgICAgICAgIGZyYW1lLmVkaXRvcigpLmFwcGx5
U3R5bGVUb1NlbGVjdGlvbihXVEY6Om1vdmUoc3R5bGUpLCBhY3Rpb24pOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBjYXNlIENvbW1hbmRGcm9tRE9NOgogICAgIGNhc2UgQ29tbWFuZEZyb21E
T01XaXRoVXNlckludGVyZmFjZToKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYXBwbHlTdHlsZShz
dHlsZSk7CisgICAgICAgIGZyYW1lLmVkaXRvcigpLmFwcGx5U3R5bGUoV1RGOjptb3ZlKHN0eWxl
KSwgRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTE2LDU5ICsxMTYsMzMgQEAKIAogc3RhdGlj
IGJvb2wgZXhlY3V0ZUFwcGx5U3R5bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNl
IHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eVZhbHVlKQogewotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzPiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwotICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBwcm9wZXJ0eVZhbHVlKTsKLSAgICByZXR1cm4g
YXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdldCgpKTsK
KyAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIEVk
aXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHByb3BlcnR5VmFsdWUpKTsKIH0KIAogc3Rh
dGljIGJvb2wgZXhlY3V0ZUFwcGx5U3R5bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291
cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Q1NTVmFsdWVJRCBwcm9wZXJ0eVZhbHVlKQogewotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzPiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwotICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBwcm9wZXJ0eVZhbHVlKTsKLSAgICByZXR1cm4g
YXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdldCgpKTsK
KyAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIEVk
aXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHByb3BlcnR5VmFsdWUpKTsKIH0KIAotLy8g
RklYTUU6IGV4ZWN1dGVUb2dnbGVTdHlsZUluTGlzdCBkb2VzIG5vdCBoYW5kbGUgY29tcGxpY2F0
ZWQgY2FzZXMgc3VjaCBhcyA8Yj48dT5oZWxsbzwvdT53b3JsZDwvYj4gcHJvcGVybHkuCi0vLyAg
ICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IHVzZSBFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxlIHRv
IGRldGVybWluZSB0aGUgY3VycmVudCBzdHlsZSBidXQgd2UgY2Fubm90IGZpeCB0aGlzCi0vLyAg
ICAgICAgdW50aWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3ODE4
IGlzIHJlc29sdmVkLgotc3RhdGljIGJvb2wgZXhlY3V0ZVRvZ2dsZVN0eWxlSW5MaXN0KEZyYW1l
JiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBib29sIGlz
U3R5bGVQcmVzZW50KEVkaXRvciYgZWRpdG9yLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNv
bnN0IGNoYXIqIG9uVmFsdWUpCiB7Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9u
U3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgaWYgKCFzZWxlY3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9u
U3R5bGUtPnN0eWxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxDU1NW
YWx1ZT4gc2VsZWN0ZWRDU1NWYWx1ZSA9IHNlbGVjdGlvblN0eWxlLT5zdHlsZSgpLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwotICAgIFN0cmluZyBuZXdTdHlsZSA9IEFTQ0lJTGl0
ZXJhbCgibm9uZSIpOwotICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCpzZWxlY3RlZENTU1ZhbHVl
KSkgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBzZWxlY3RlZENTU1ZhbHVlTGlzdCA9
IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oc2VsZWN0ZWRDU1NWYWx1ZS5nZXQoKSk7Ci0gICAgICAg
IGlmICghc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPnJlbW92ZUFsbCh2YWx1ZSkpCi0gICAgICAgICAg
ICBzZWxlY3RlZENTU1ZhbHVlTGlzdC0+YXBwZW5kKCp2YWx1ZSk7Ci0gICAgICAgIGlmIChzZWxl
Y3RlZENTU1ZhbHVlTGlzdC0+bGVuZ3RoKCkpCi0gICAgICAgICAgICBuZXdTdHlsZSA9IHNlbGVj
dGVkQ1NTVmFsdWVMaXN0LT5jc3NUZXh0KCk7Ci0KLSAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQ1NT
VmFsdWUtPmNzc1RleHQoKSA9PSAibm9uZSIpCi0gICAgICAgIG5ld1N0eWxlID0gdmFsdWUtPmNz
c1RleHQoKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgaGF2aW5nIHRvIGNvbnZl
cnQgbmV3IHN0eWxlIGludG8gdGV4dC4gIFdlIHNob3VsZCBoYXZlIHNldFByb3BlcnR5Q1NTVmFs
dWUuCi0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG5ld011dGFibGVTdHlsZSA9
IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwotICAgIG5ld011dGFibGVTdHlsZS0+
c2V0UHJvcGVydHkocHJvcGVydHlJRCwgbmV3U3R5bGUpOwotICAgIHJldHVybiBhcHBseUNvbW1h
bmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIGFjdGlvbiwgbmV3TXV0YWJsZVN0eWxlLmdldCgpKTsK
KyAgICAvLyBTdHlsZSBpcyBjb25zaWRlcmVkIHByZXNlbnQgd2hlbgorICAgIC8vIE1hYzogcHJl
c2VudCBhdCB0aGUgYmVnaW5uaW5nIG9mIHNlbGVjdGlvbgorICAgIC8vIG90aGVyOiBwcmVzZW50
IHRocm91Z2hvdXQgdGhlIHNlbGVjdGlvbgorICAgIGlmIChlZGl0b3IuYmVoYXZpb3IoKS5zaG91
bGRUb2dnbGVTdHlsZUJhc2VkT25TdGFydE9mU2VsZWN0aW9uKCkpCisgICAgICAgIHJldHVybiBl
ZGl0b3Iuc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShwcm9wZXJ0eUlELCBvblZhbHVlKTsKKyAgICBy
ZXR1cm4gZWRpdG9yLnNlbGVjdGlvbkhhc1N0eWxlKHByb3BlcnR5SUQsIG9uVmFsdWUpID09IFRy
dWVUcmlTdGF0ZTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZVRvZ2dsZVN0eWxlKEZyYW1lJiBm
cmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IGNoYXIqIG9mZlZhbHVlLCBjb25zdCBjaGFyKiBv
blZhbHVlKQogewotICAgIC8vIFN0eWxlIGlzIGNvbnNpZGVyZWQgcHJlc2VudCB3aGVuCi0gICAg
Ly8gTWFjOiBwcmVzZW50IGF0IHRoZSBiZWdpbm5pbmcgb2Ygc2VsZWN0aW9uCi0gICAgLy8gb3Ro
ZXI6IHByZXNlbnQgdGhyb3VnaG91dCB0aGUgc2VsZWN0aW9uCisgICAgYm9vbCBzdHlsZUlzUHJl
c2VudCA9IGlzU3R5bGVQcmVzZW50KGZyYW1lLmVkaXRvcigpLCBwcm9wZXJ0eUlELCBvblZhbHVl
KTsKKyAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24s
IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHN0eWxlSXNQcmVzZW50ID8gb2ZmVmFs
dWUgOiBvblZhbHVlKSk7Cit9CiAKLSAgICBib29sIHN0eWxlSXNQcmVzZW50OwotICAgIGlmIChm
cmFtZS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFRvZ2dsZVN0eWxlQmFzZWRPblN0YXJ0T2ZT
ZWxlY3Rpb24oKSkKLSAgICAgICAgc3R5bGVJc1ByZXNlbnQgPSBmcmFtZS5lZGl0b3IoKS5zZWxl
Y3Rpb25TdGFydEhhc1N0eWxlKHByb3BlcnR5SUQsIG9uVmFsdWUpOwotICAgIGVsc2UKLSAgICAg
ICAgc3R5bGVJc1ByZXNlbnQgPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3Rpb25IYXNTdHlsZShwcm9w
ZXJ0eUlELCBvblZhbHVlKSA9PSBUcnVlVHJpU3RhdGU7Ci0KLSAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHN0eWxlSXNQcmVz
ZW50ID8gb2ZmVmFsdWUgOiBvblZhbHVlKTsKLSAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFt
ZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLT5zdHlsZSgpKTsKK3N0YXRpYyBUZXh0RGVj
b3JhdGlvbkNoYW5nZSB0ZXh0RGVjb3JhdGlvbkNoYW5nZUZvclRvZ2dsaW5nKEVkaXRvciYgZWRp
dG9yLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IGNoYXIqIG9uVmFsdWUpCit7Cisg
ICAgcmV0dXJuIGlzU3R5bGVQcmVzZW50KGVkaXRvciwgcHJvcGVydHlJRCwgb25WYWx1ZSkgPyBU
ZXh0RGVjb3JhdGlvbkNoYW5nZTo6UmVtb3ZlIDogVGV4dERlY29yYXRpb25DaGFuZ2U6OkFkZDsK
IH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZUFwcGx5UGFyYWdyYXBoU3R5bGUoRnJhbWUmIGZyYW1l
LCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVZhbHVlKQpAQCAtMTA2MCw4
ICsxMDM0LDEwIEBACiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTdHJpa2V0aHJvdWdoKEZyYW1lJiBm
cmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJikK
IHsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVMaW5lVGhyb3VnaCk7Ci0gICAgcmV0
dXJuIGV4ZWN1dGVUb2dnbGVTdHlsZUluTGlzdChmcmFtZSwgc291cmNlLCBFZGl0QWN0aW9uVW5k
ZXJsaW5lLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCBsaW5lVGhy
b3VnaC5nZXQoKSk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGUgPSBFZGl0aW5nU3R5
bGU6OmNyZWF0ZSgpOworICAgIHN0eWxlLT5zZXRTdHJpa2VUaHJvdWdoQ2hhbmdlKHRleHREZWNv
cmF0aW9uQ2hhbmdlRm9yVG9nZ2xpbmcoZnJhbWUuZWRpdG9yKCksIENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb25zSW5FZmZlY3QsICJsaW5lLXRocm91Z2giKSk7CisgICAgLy8gRklYTUU6
IE5lZWRzIGEgbmV3IEVkaXRBY3Rpb24hCisgICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUo
ZnJhbWUsIHNvdXJjZSwgRWRpdEFjdGlvblVuZGVybGluZSwgV1RGOjptb3ZlKHN0eWxlKSk7CiB9
CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTdHlsZVdpdGhDU1MoRnJhbWUmIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0xMTI1LDggKzEx
MDEsMTAgQEAKIAogc3RhdGljIGJvb2wgZXhlY3V0ZVVuZGVybGluZShGcmFtZSYgZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB1bmRlcmxpbmUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZVVuZGVybGluZSk7Ci0gICAgcmV0dXJuIGV4ZWN1dGVU
b2dnbGVTdHlsZUluTGlzdChmcmFtZSwgc291cmNlLCBFZGl0QWN0aW9uVW5kZXJsaW5lLCBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCB1bmRlcmxpbmUuZ2V0KCkpOwor
ICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsK
KyAgICBUZXh0RGVjb3JhdGlvbkNoYW5nZSBjaGFuZ2UgPSB0ZXh0RGVjb3JhdGlvbkNoYW5nZUZv
clRvZ2dsaW5nKGZyYW1lLmVkaXRvcigpLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9u
c0luRWZmZWN0LCAidW5kZXJsaW5lIik7CisgICAgc3R5bGUtPnNldFVuZGVybGluZUNoYW5nZShj
aGFuZ2UpOworICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIEVk
aXRBY3Rpb25VbmRlcmxpbmUsIFdURjo6bW92ZShzdHlsZSkpOwogfQogCiBzdGF0aWMgYm9vbCBl
eGVjdXRlVW5kbyhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29u
c3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2
aXNpb24gMTgzNDk3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtOTQxLDcgKzk0MSw3IEBACiAgICAgICAgIHJldHVybjsKICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gY3JlYXRlIGEgY29weSBoZXJlLgogICAgIFJl
ZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKGNvcmUoc3R5bGUpLT5jb3B5UHJv
cGVydGllcygpKTsKLSAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5jb21wdXRlQW5k
U2V0VHlwaW5nU3R5bGUocHJvcGVydGllcy5wdHIoKSwgdW5kb0FjdGlvbik7CisgICAgX3ByaXZh
dGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKHByb3BlcnRp
ZXMuZ2V0KCksIHVuZG9BY3Rpb24pOwogfQogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gMTgz
NDk3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDc3NSwxMiArNDc3NSwxNiBAQAogICAgICAgICBbc3R5bGUgc2V0VmVydGlj
YWxBbGlnbjpAImJhc2VsaW5lIl07CiAgICAgaW50IHVuZGVybGluZUludCA9IFtbZGljdGlvbmFy
eSBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsK
ICAgICAvLyBGSVhNRTogVW5kZXJsaW5lIHdpbnMgaGVyZSBpZiB3ZSBoYXZlIGJvdGggKHNlZSBi
dWcgMzc5MDQ0MykuCi0gICAgaWYgKHN0cmlrZXRocm91Z2hJbnQgPT0gTlNVbmRlcmxpbmVTdHls
ZU5vbmUgJiYgdW5kZXJsaW5lSW50ID09IE5TVW5kZXJsaW5lU3R5bGVOb25lKQotICAgICAgICBb
c3R5bGUgc2V0UHJvcGVydHk6QCItd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2
YWx1ZTpAIm5vbmUiIHByaW9yaXR5OkAiIl07Ci0gICAgZWxzZSBpZiAodW5kZXJsaW5lSW50ID09
IE5TVW5kZXJsaW5lU3R5bGVOb25lKQorICAgIGJvb2wgaGFzU3RyaWtlVGhyb3VnaCA9IHN0cmlr
ZXRocm91Z2hJbnQgIT0gTlNVbmRlcmxpbmVTdHlsZU5vbmU7CisgICAgYm9vbCBoYXNVbmRlcmxp
bmUgPSB1bmRlcmxpbmVJbnQgIT0gTlNVbmRlcmxpbmVTdHlsZU5vbmU7CisgICAgaWYgKGhhc1N0
cmlrZVRocm91Z2ggJiYgaGFzVW5kZXJsaW5lKQorICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6
QCItd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAInVuZGVybGluZSBs
aW5lLXRocm91Z2giIHByaW9yaXR5OkAiIl07CisgICAgZWxzZSBpZiAoaGFzU3RyaWtlVGhyb3Vn
aCkKICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLXdlYmtpdC10ZXh0LWRlY29yYXRpb25z
LWluLWVmZmVjdCIgdmFsdWU6QCJsaW5lLXRocm91Z2giIHByaW9yaXR5OkAiIl07CisgICAgZWxz
ZSBpZiAoaGFzVW5kZXJsaW5lKQorICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCItd2Via2l0
LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAInVuZGVybGluZSIgcHJpb3JpdHk6
QCIiXTsKICAgICBlbHNlCi0gICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi13ZWJraXQtdGV4
dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAidW5kZXJsaW5lIiBwcmlvcml0eTpAIiJd
OworICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCItd2Via2l0LXRleHQtZGVjb3JhdGlvbnMt
aW4tZWZmZWN0IiB2YWx1ZTpAIm5vbmUiIHByaW9yaXR5OkAiIl07CiAKICAgICByZXR1cm4gc3R5
bGU7CiB9CkBAIC01MDM0LDEzICs1MDM4LDExIEBACiAKICAgICBpbnQgc2EgPSBbW2Egb2JqZWN0
Rm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwogICAg
IGludCBzYiA9IFtbYiBvYmplY3RGb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVO
YW1lXSBpbnRWYWx1ZV07CisgICAgYm9vbCBjaGFuZ2VzU3RyaWtlVGhyb3VnaCA9IGZhbHNlOwor
ICAgIGJvb2wgYXBwbHlTdHJpa2VUaHJvdWdoID0gZmFsc2U7CiAgICAgaWYgKHNhID09IHNiKSB7
Ci0gICAgICAgIGlmIChzYSA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSkKLSAgICAgICAgICAgIFtz
dHlsZSBzZXRQcm9wZXJ0eTpAIi13ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZh
bHVlOkAibm9uZSIgcHJpb3JpdHk6QCIiXTsKLSAgICAgICAgICAgIC8vIHdlIHJlYWxseSBtZWFu
ICJubyBsaW5lLXRocm91Z2giIHJhdGhlciB0aGFuICJub25lIgotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCItd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4t
ZWZmZWN0IiB2YWx1ZTpAImxpbmUtdGhyb3VnaCIgcHJpb3JpdHk6QCIiXTsKLSAgICAgICAgICAg
IC8vIHdlIHJlYWxseSBtZWFuICJhZGQgbGluZS10aHJvdWdoIiByYXRoZXIgdGhhbiAibGluZS10
aHJvdWdoIgorICAgICAgICBjaGFuZ2VzU3RyaWtlVGhyb3VnaCA9IHRydWU7CisgICAgICAgIGFw
cGx5U3RyaWtlVGhyb3VnaCA9IHNhICE9IE5TVW5kZXJsaW5lU3R5bGVOb25lOwogICAgIH0KIAog
ICAgIHNhID0gW1thIG9iamVjdEZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50
VmFsdWVdOwpAQCAtNTA1NiwxMyArNTA1OCwyMyBAQAogCiAgICAgaW50IHVhID0gW1thIG9iamVj
dEZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwogICAgIGlu
dCB1YiA9IFtbYiBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGlu
dFZhbHVlXTsKKyAgICBib29sIGNoYW5nZXNVbmRlcmxpbmUgPSBmYWxzZTsKKyAgICBib29sIGFw
cGx5VW5kZXJsaW5lID0gZmFsc2U7CiAgICAgaWYgKHVhID09IHViKSB7Ci0gICAgICAgIGlmICh1
YSA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSkKKyAgICAgICAgY2hhbmdlc1VuZGVybGluZSA9IHRy
dWU7CisgICAgICAgIGFwcGx5VW5kZXJsaW5lID0gdWEgIT0gTlNVbmRlcmxpbmVTdHlsZU5vbmU7
CisgICAgfQorCisgICAgaWYgKGNoYW5nZXNTdHJpa2VUaHJvdWdoIHx8IGNoYW5nZXNVbmRlcmxp
bmUpIHsKKyAgICAgICAgLy8gRklYTUU6IER1ZSB0byB3ZWJraXQub3JnL2IvMjc4MTgsIHdlIGNh
bid0IGFwcGx5IG9yIHVuYXBwbHkgc3RyaWtlIHRocm91Z2ggYW5kIHVuZGVybGluZSBzZXBhcmF0
ZWx5LgorICAgICAgICBpZiAoYXBwbHlTdHJpa2VUaHJvdWdoICYmIGFwcGx5VW5kZXJsaW5lKQor
ICAgICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLXdlYmtpdC10ZXh0LWRlY29yYXRpb25z
LWluLWVmZmVjdCIgdmFsdWU6QCJ1bmRlcmxpbmUgbGluZS10aHJvdWdoIiBwcmlvcml0eTpAIiJd
OworICAgICAgICBlbHNlIGlmIChhcHBseVN0cmlrZVRocm91Z2gpCisgICAgICAgICAgICBbc3R5
bGUgc2V0UHJvcGVydHk6QCItd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1
ZTpAImxpbmUtdGhyb3VnaCIgcHJpb3JpdHk6QCIiXTsKKyAgICAgICAgZWxzZSBpZiAoYXBwbHlV
bmRlcmxpbmUpCisgICAgICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCItd2Via2l0LXRleHQt
ZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAInVuZGVybGluZSIgcHJpb3JpdHk6QCIiXTsK
KyAgICAgICAgZWxzZQogICAgICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLXdlYmtpdC10
ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJub25lIiBwcmlvcml0eTpAIiJdOwot
ICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gIm5vIHVuZGVybGluZSIgcmF0aGVyIHRoYW4g
Im5vbmUiCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi13
ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAidW5kZXJsaW5lIiBwcmlv
cml0eTpAIiJdOwotICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gImFkZCB1bmRlcmxpbmUi
IHJhdGhlciB0aGFuICJ1bmRlcmxpbmUiCiAgICAgfQogCiAgICAgcmV0dXJuIHN0eWxlOwpJbmRl
eDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvdG9nZ2xlLXN0
eWxlLTIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9z
Y3JpcHQtdGVzdHMvdG9nZ2xlLXN0eWxlLTIuanMJKHJldmlzaW9uIDE4MzQ5NykKKysrIExheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2NyaXB0LXRlc3RzL3RvZ2dsZS1zdHlsZS0yLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiB0ZXN0RG91YmxlVG9nZ2xlKCJzdHJp
a2V0aHJvdWdoIiwgInRlc3QiLCAidGVzdCIpOwogCiB0ZXN0U2luZ2xlVG9nZ2xlKCJzdHJpa2V0
aHJvdWdoIiwgIjx1PnRlc3Q8L3U+IiwgIjx1PjxzdHJpa2U+dGVzdDwvc3RyaWtlPjwvdT4iKTsK
LXRlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsICI8c3RyaWtlPnRlc3Q8L3N0cmlrZT4iLCAi
PHU+PHN0cmlrZT50ZXN0PC9zdHJpa2U+PC91PiIpOwordGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJs
aW5lIiwgIjxzdHJpa2U+dGVzdDwvc3RyaWtlPiIsICI8c3RyaWtlPjx1PnRlc3Q8L3U+PC9zdHJp
a2U+Iik7CiAKIHRlc3RTaW5nbGVUb2dnbGUoInN0cmlrZXRocm91Z2giLCAnPHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmU7Ij50ZXN0PC9zcGFuPicsICc8c3BhbiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTsiPjxzdHJpa2U+dGVzdDwvc3RyaWtlPjwvc3Bhbj4n
KTsKIHRlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsICc8c3BhbiBzdHlsZT0idGV4dC1kZWNv
cmF0aW9uOiBvdmVybGluZTsiPnRlc3Q8L3NwYW4+JywgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IG92ZXJsaW5lOyI+PHU+dGVzdDwvdT48L3NwYW4+Jyk7CkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3NjcmlwdC10ZXN0cy90b2dnbGUtdGV4dC1kZWNvcmF0aW9u
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3Njcmlw
dC10ZXN0cy90b2dnbGUtdGV4dC1kZWNvcmF0aW9ucy5qcwkocmV2aXNpb24gMTgzNDk3KQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvdG9nZ2xlLXRleHQt
ZGVjb3JhdGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDggQEAKIAogdGVzdFNp
bmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwgInRlc3QiLCAiPHNwYW4gc3R5bGU9XCJ0ZXh0LWRlY29y
YXRpb246IHVuZGVybGluZTtcIj50ZXN0PC9zcGFuPiIpOwogdGVzdFNpbmdsZVRvZ2dsZSgidW5k
ZXJsaW5lIiwgIjxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XCI+dGVz
dDwvc3Bhbj4iLCAidGVzdCIpOwotdGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwgIjxzcGFu
IHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10aHJvdWdoIG92ZXJsaW5l
O1wiPnRlc3Q8L3NwYW4+IiwgIjxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiBvdmVybGlu
ZSBsaW5lLXRocm91Z2g7XCI+dGVzdDwvc3Bhbj4iKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVy
bGluZSIsICI8c3BhbiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGxpbmUtdGhy
b3VnaCBvdmVybGluZTtcIj50ZXN0PC9zcGFuPiIsCisgICAgIjxzcGFuIHN0eWxlPVwidGV4dC1k
ZWNvcmF0aW9uOiBsaW5lLXRocm91Z2ggb3ZlcmxpbmU7XCI+dGVzdDwvc3Bhbj4iKTsKIHRlc3RT
aW5nbGVUb2dnbGUoInN0cmlrZXRocm91Z2giLCAidGVzdCIsICI8c3BhbiBzdHlsZT1cInRleHQt
ZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1wiPnRlc3Q8L3NwYW4+Iik7CiB0ZXN0U2luZ2xlVG9n
Z2xlKCJzdHJpa2V0aHJvdWdoIiwgIjxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiBsaW5l
LXRocm91Z2g7XCI+dGVzdDwvc3Bhbj4iLCAidGVzdCIpOwogdGVzdFNpbmdsZVRvZ2dsZSgic3Ry
aWtldGhyb3VnaCIsICI8c3BhbiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGxp
bmUtdGhyb3VnaCBvdmVybGluZTtcIj50ZXN0PC9zcGFuPiIsICI8c3BhbiBzdHlsZT1cInRleHQt
ZGVjb3JhdGlvbjogdW5kZXJsaW5lIG92ZXJsaW5lO1wiPnRlc3Q8L3NwYW4+Iik7CkluZGV4OiBM
YXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS1zdHlsZS0yLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS1z
dHlsZS0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTgzNDk3KQorKysgTGF5b3V0VGVzdHMvZWRp
dGluZy9leGVjQ29tbWFuZC90b2dnbGUtc3R5bGUtMi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEwLDcgKzEwLDcgQEAKIFBBU1Mgb25lIHN0cmlrZXRocm91Z2ggY29tbWFuZCBjb252
ZXJ0ZWQgPHU+PGI+PHN0cmlrZT50ZXN0PC9zdHJpa2U+PC9iPjwvdT4gdG8gPHU+PGI+dGVzdDwv
Yj48L3U+CiBQQVNTIHR3byBzdHJpa2V0aHJvdWdoIGNvbW1hbmRzIGNvbnZlcnRlZCB0ZXN0IHRv
IHRlc3QKIFBBU1Mgb25lIHN0cmlrZXRocm91Z2ggY29tbWFuZCBjb252ZXJ0ZWQgPHU+dGVzdDwv
dT4gdG8gPHU+PHN0cmlrZT50ZXN0PC9zdHJpa2U+PC91PgotUEFTUyBvbmUgdW5kZXJsaW5lIGNv
bW1hbmQgY29udmVydGVkIDxzdHJpa2U+dGVzdDwvc3RyaWtlPiB0byA8dT48c3RyaWtlPnRlc3Q8
L3N0cmlrZT48L3U+CitQQVNTIG9uZSB1bmRlcmxpbmUgY29tbWFuZCBjb252ZXJ0ZWQgPHN0cmlr
ZT50ZXN0PC9zdHJpa2U+IHRvIDxzdHJpa2U+PHU+dGVzdDwvdT48L3N0cmlrZT4KIFBBU1Mgb25l
IHN0cmlrZXRocm91Z2ggY29tbWFuZCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3Jh
dGlvbjogb3ZlcmxpbmU7Ij50ZXN0PC9zcGFuPiB0byA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0
aW9uOiBvdmVybGluZTsiPjxzdHJpa2U+dGVzdDwvc3RyaWtlPjwvc3Bhbj4KIFBBU1Mgb25lIHVu
ZGVybGluZSBjb21tYW5kIGNvbnZlcnRlZCA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBv
dmVybGluZTsiPnRlc3Q8L3NwYW4+IHRvIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG92
ZXJsaW5lOyI+PHU+dGVzdDwvdT48L3NwYW4+CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS10ZXh0LWRl
Y29yYXRpb25zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5n
L2V4ZWNDb21tYW5kL3RvZ2dsZS10ZXh0LWRlY29yYXRpb25zLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMTgzNDk3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90b2dnbGUtdGV4
dC1kZWNvcmF0aW9ucy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUsNyArNSw3IEBA
CiAKIFBBU1Mgb25lIHVuZGVybGluZSBjb21tYW5kIGNvbnZlcnRlZCB0ZXN0IHRvIDxzcGFuIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPnRlc3Q8L3NwYW4+CiBQQVNTIG9uZSB1
bmRlcmxpbmUgY29tbWFuZCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lOyI+dGVzdDwvc3Bhbj4gdG8gdGVzdAotUEFTUyBvbmUgdW5kZXJsaW5lIGNvbW1h
bmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBsaW5l
LXRocm91Z2ggb3ZlcmxpbmU7Ij50ZXN0PC9zcGFuPiB0byA8c3BhbiBzdHlsZT0idGV4dC1kZWNv
cmF0aW9uOiBvdmVybGluZSBsaW5lLXRocm91Z2g7Ij50ZXN0PC9zcGFuPgorUEFTUyBvbmUgdW5k
ZXJsaW5lIGNvbW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVu
ZGVybGluZSBsaW5lLXRocm91Z2ggb3ZlcmxpbmU7Ij50ZXN0PC9zcGFuPiB0byA8c3BhbiBzdHls
ZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2ggb3ZlcmxpbmU7Ij50ZXN0PC9zcGFuPgog
UEFTUyBvbmUgc3RyaWtldGhyb3VnaCBjb21tYW5kIGNvbnZlcnRlZCB0ZXN0IHRvIDxzcGFuIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPnRlc3Q8L3NwYW4+CiBQQVNTIG9u
ZSBzdHJpa2V0aHJvdWdoIGNvbW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IGxpbmUtdGhyb3VnaDsiPnRlc3Q8L3NwYW4+IHRvIHRlc3QKIFBBU1Mgb25lIHN0cmlr
ZXRocm91Z2ggY29tbWFuZCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lIGxpbmUtdGhyb3VnaCBvdmVybGluZTsiPnRlc3Q8L3NwYW4+IHRvIDxzcGFuIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBvdmVybGluZTsiPnRlc3Q8L3NwYW4+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3B1c2gt
ZG93bi1pbmxpbmUtc3R5bGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTgzNDk3KQorKysgTGF5
b3V0VGVzdHMvZWRpdGluZy9zdHlsZS9wdXNoLWRvd24taW5saW5lLXN0eWxlcy1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKIFBBU1MgdW5kZXJsaW5lIGNvbnZl
cnRlZCA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZGl2IGlkPSJ0
ZXN0Ij5oZWxsbzwvZGl2PjxibG9ja3F1b3RlPndvcmxkPGJyPndlYmtpdDwvYmxvY2txdW90ZT48
L3NwYW4+IHRvIDxkaXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+PGJsb2NrcXVvdGUgc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+d29ybGQ8YnI+d2Via2l0PC9ibG9ja3F1b3RlPgog
UEFTUyB1bmRlcmxpbmUgY29udmVydGVkIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVu
ZGVybGluZTsiPmhlbGxvPGRpdiBpZD0idGVzdCI+d29ybGQ8L2Rpdj53ZWJraXQ8L3U+IHRvIDx1
PmhlbGxvPC91PjxkaXYgaWQ9InRlc3QiPndvcmxkPC9kaXY+PHU+d2Via2l0PC91PgogRkFJTCB1
bmRlcmxpbmUgY29udmVydGVkIDxkaXYgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5l
OyI+PGRpdj5oZWxsbzwvc3Bhbj48L2Rpdj48ZGl2IGlkPSJ0ZXN0Ij53ZWJraXQ8L2Rpdj48c3Bh
biBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+cm9ja3M8L3NwYW4+IHRvIDxkaXY+PGRpdiBz
dHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5oZWxsbzwvZGl2PjxkaXYgaWQ9InRl
c3QiPndlYmtpdDwvZGl2PjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsg
Zm9udC1zdHlsZTogaXRhbGljOyI+cm9ja3M8L3NwYW4+PC9kaXY+LCBleHBlY3RlZCA8ZGl2Pjxk
aXYgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+aGVsbG88L3NwYW4+PC9kaXY+
PGRpdiBpZD0idGVzdCI+d2Via2l0PC9kaXY+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0
YWxpYzsiPnJvY2tzPC9zcGFuPjwvdT48L2Rpdj4KLVBBU1MgdW5kZXJsaW5lIGNvbnZlcnRlZCA8
c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48ZGl2IHN0eWxlPSJ0ZXh0
LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmhlbGxvPC9kaXY+PGRpdiBpZD0idGVzdCI+d29y
bGQ8L2Rpdj48L3NwYW4+IHRvIDxkaXYgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5l
IGxpbmUtdGhyb3VnaDsiPmhlbGxvPC9kaXY+PGRpdiBpZD0idGVzdCI+d29ybGQ8L2Rpdj4KK1BB
U1MgdW5kZXJsaW5lIGNvbnZlcnRlZCA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmU7Ij48ZGl2IHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmhlbGxv
PC9kaXY+PGRpdiBpZD0idGVzdCI+d29ybGQ8L2Rpdj48L3NwYW4+IHRvIDxkaXYgc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGxpbmUtdGhyb3VnaDsiPmhlbGxvPC9kaXY+PGRpdiBp
ZD0idGVzdCIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+d29ybGQ8L2Rp
dj4KIFBBU1Mgc3RyaWtlVGhyb3VnaCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3Jh
dGlvbjogbGluZS10aHJvdWdoOyI+PGRpdiBpZD0idGVzdCI+aGVsbG88L2Rpdj48ZGl2IHN0eWxl
PSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPndvcmxkPC9kaXY+PC9zcGFuPiB0byA8ZGl2
IGlkPSJ0ZXN0Ij5oZWxsbzwvZGl2PjxkaXYgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10
aHJvdWdoIHVuZGVybGluZTsiPndvcmxkPC9kaXY+CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCiAKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc3R5bGUvc2NyaXB0LXRlc3RzL3B1
c2gtZG93bi1pbmxpbmUtc3R5bGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvc3R5bGUvc2NyaXB0LXRlc3RzL3B1c2gtZG93bi1pbmxpbmUtc3R5bGVzLmpzCShyZXZpc2lv
biAxODM0OTcpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3N0eWxlL3NjcmlwdC10ZXN0cy9wdXNo
LWRvd24taW5saW5lLXN0eWxlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOSBAQAog
dGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwKICAgICAnPGRpdiBzdHlsZT0idGV4dC1kZWNv
cmF0aW9uOiB1bmRlcmxpbmU7Ij48ZGl2PmhlbGxvPC9zcGFuPjwvZGl2PjxkaXYgaWQ9InRlc3Qi
PndlYmtpdDwvZGl2PjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5yb2Nrczwvc3Bh
bj4nLAogICAgICc8ZGl2PjxkaXYgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+
aGVsbG88L3NwYW4+PC9kaXY+PGRpdiBpZD0idGVzdCI+d2Via2l0PC9kaXY+PHU+PHNwYW4gc3R5
bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPnJvY2tzPC9zcGFuPjwvdT48L2Rpdj4nKTsKLXRlc3RT
aW5nbGVUb2dnbGUoInVuZGVybGluZSIsICc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7Ij48ZGl2IHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmhl
bGxvPC9kaXY+PGRpdiBpZD0idGVzdCI+d29ybGQ8L2Rpdj48L3NwYW4+JywgJzxkaXYgc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGxpbmUtdGhyb3VnaDsiPmhlbGxvPC9kaXY+PGRp
diBpZD0idGVzdCI+d29ybGQ8L2Rpdj4nKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIs
CisgICAgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxkaXYgc3R5
bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+aGVsbG88L2Rpdj48ZGl2IGlkPSJ0
ZXN0Ij53b3JsZDwvZGl2Pjwvc3Bhbj4nLAorICAgICc8ZGl2IHN0eWxlPSJ0ZXh0LWRlY29yYXRp
b246IHVuZGVybGluZSBsaW5lLXRocm91Z2g7Ij5oZWxsbzwvZGl2PjxkaXYgaWQ9InRlc3QiIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPndvcmxkPC9kaXY+Jyk7CiB0ZXN0
U2luZ2xlVG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiwgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRp
b246IGxpbmUtdGhyb3VnaDsiPjxkaXYgaWQ9InRlc3QiPmhlbGxvPC9kaXY+PGRpdiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij53b3JsZDwvZGl2Pjwvc3Bhbj4nLCAnPGRpdiBp
ZD0idGVzdCI+aGVsbG88L2Rpdj48ZGl2IHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhy
b3VnaCB1bmRlcmxpbmU7Ij53b3JsZDwvZGl2PicpOwogCiBkb2N1bWVudC5ib2R5LnJlbW92ZUNo
aWxkKHRlc3RDb250YWluZXIpOwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvL3JlbW92
ZS1jc3MtcHJvcGVydHktYW5kLXJlbW92ZS1zdHlsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvL3JlbW92ZS1jc3MtcHJvcGVydHktYW5kLXJlbW92
ZS1zdHlsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE4MzQ5NykKKysrIExheW91dFRlc3RzL2Vk
aXRpbmcvdW5kby9yZW1vdmUtY3NzLXByb3BlcnR5LWFuZC1yZW1vdmUtc3R5bGUtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBACiAKIFVuZG8gc2hvdWxkIHJlc2V0
IHRoZSBzdHlsZSBhdHRyaWJ1dGUgc28gdGhhdCAidGVzdCIgaXMgYm90aCBib2xkIGFuZCBibHVl
OgogfCA8c3Bhbj4KLXwgICBzdHlsZT0iY29sb3I6IGJsdWU7IGZvbnQtd2VpZ2h0OiA5MDA7Igor
fCAgIHN0eWxlPSJmb250LXdlaWdodDogOTAwOyBjb2xvcjogYmx1ZTsiCiB8ICAgIjwjc2VsZWN0
aW9uLWFuY2hvcj50ZXN0PCNzZWxlY3Rpb24tZm9jdXM+IgogCiBSZWRvIHNob3VsZCBvbmx5IHJl
bW92ZSBmb250LXdlaWdodCBhbmQgbGVhdmUgInRlc3QiIGJsdWU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252141</attachid>
            <date>2015-05-01 01:51:48 -0700</date>
            <delta_ts>2015-05-01 18:03:59 -0700</delta_ts>
            <desc>WIP4</desc>
            <filename>wip27818b.patch</filename>
            <type>text/plain</type>
            <size>69103</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4MzY2OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA0LTMwICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFRvZ2dsaW5nIHVuZGVybGluZSBvciBzdHJpa2Ug
dGhyb3VnaCBhZmZlY3RzIGVhY2ggb3RoZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI3ODE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYSByZWdyZXNzaW9uIHRlc3QgYW5kIHJlYmFzZWxpbmVk
IHZhcmlvdXMgdGVzdHMgYXMgZXhwbGFpbmVkIGJlbG93LgorCisgICAgICAgICogZWRpdGluZy9l
eGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvdG9nZ2xlLXN0eWxlLTIuanM6IFRoZSBvcmRlciBpbiB3
aGljaCB1IGFuZCBzdHJpa2UgZWxlbWVudHMgYXBwZWFyIGhhdmUgc3dpdGNoZWQuCisgICAgICAg
ICogZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvdG9nZ2xlLXRleHQtZGVjb3JhdGlv
bnMuanM6IERpdHRvIGZvciBsaW5lLXRocm91Z2ggYW5kIG92ZXJsaW5lLgorICAgICAgICAqIGVk
aXRpbmcvZXhlY0NvbW1hbmQvdG9nZ2xlLW1peGVkLXRleHQtZGVjb3JhdGlvbnMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS1taXhlZC10
ZXh0LWRlY29yYXRpb25zLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1h
bmQvdG9nZ2xlLXN0eWxlLTItZXhwZWN0ZWQudHh0OiBSZWJhc2VsaW5lZC4KKyAgICAgICAgKiBl
ZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS10ZXh0LWRlY29yYXRpb25zLWV4cGVjdGVkLnR4dDog
UmViYXNlbGluZWQuCisgICAgICAgICogZWRpdGluZy91bmRvL3JlbW92ZS1jc3MtcHJvcGVydHkt
YW5kLXJlbW92ZS1zdHlsZS1leHBlY3RlZC50eHQ6IFRoZSBvcmRlciBpbiB3aGljaCBjb2xvciBh
bmQgZm9udC13ZWlnaHQgcHJvcGVydGllcworICAgICAgICBhcHBlYXIgaGF2ZSBzd2l0Y2hlZC4K
KwogMjAxNS0wNC0zMCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLiBVcGRhdGUgcmVzdWx0cyBvZiBpbnNwZWN0b3Ig
dGVzdHMuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3NjcmlwdC10ZXN0
cy90b2dnbGUtc3R5bGUtMi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4
ZWNDb21tYW5kL3NjcmlwdC10ZXN0cy90b2dnbGUtc3R5bGUtMi5qcwkocmV2aXNpb24gMTgzNDk3
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvdG9nZ2xl
LXN0eWxlLTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIHRlc3REb3VibGVU
b2dnbGUoInN0cmlrZXRocm91Z2giLCAidGVzdCIsICJ0ZXN0Iik7CiAKIHRlc3RTaW5nbGVUb2dn
bGUoInN0cmlrZXRocm91Z2giLCAiPHU+dGVzdDwvdT4iLCAiPHU+PHN0cmlrZT50ZXN0PC9zdHJp
a2U+PC91PiIpOwotdGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwgIjxzdHJpa2U+dGVzdDwv
c3RyaWtlPiIsICI8dT48c3RyaWtlPnRlc3Q8L3N0cmlrZT48L3U+Iik7Cit0ZXN0U2luZ2xlVG9n
Z2xlKCJ1bmRlcmxpbmUiLCAiPHN0cmlrZT50ZXN0PC9zdHJpa2U+IiwgIjxzdHJpa2U+PHU+dGVz
dDwvdT48L3N0cmlrZT4iKTsKIAogdGVzdFNpbmdsZVRvZ2dsZSgic3RyaWtldGhyb3VnaCIsICc8
c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTsiPnRlc3Q8L3NwYW4+JywgJzxz
cGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lOyI+PHN0cmlrZT50ZXN0PC9zdHJp
a2U+PC9zcGFuPicpOwogdGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwgJzxzcGFuIHN0eWxl
PSJ0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lOyI+dGVzdDwvc3Bhbj4nLCAnPHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmU7Ij48dT50ZXN0PC91Pjwvc3Bhbj4nKTsKSW5kZXg6
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2NyaXB0LXRlc3RzL3RvZ2dsZS10ZXh0
LWRlY29yYXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0Nv
bW1hbmQvc2NyaXB0LXRlc3RzL3RvZ2dsZS10ZXh0LWRlY29yYXRpb25zLmpzCShyZXZpc2lvbiAx
ODM0OTcpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3NjcmlwdC10ZXN0cy90
b2dnbGUtdGV4dC1kZWNvcmF0aW9ucy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksOCBA
QAogCiB0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCAidGVzdCIsICI8c3BhbiBzdHlsZT1c
InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPnRlc3Q8L3NwYW4+Iik7CiB0ZXN0U2luZ2xl
VG9nZ2xlKCJ1bmRlcmxpbmUiLCAiPHNwYW4gc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVy
bGluZTtcIj50ZXN0PC9zcGFuPiIsICJ0ZXN0Iik7Ci10ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxp
bmUiLCAiPHNwYW4gc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBsaW5lLXRocm91
Z2ggb3ZlcmxpbmU7XCI+dGVzdDwvc3Bhbj4iLCAiPHNwYW4gc3R5bGU9XCJ0ZXh0LWRlY29yYXRp
b246IG92ZXJsaW5lIGxpbmUtdGhyb3VnaDtcIj50ZXN0PC9zcGFuPiIpOwordGVzdFNpbmdsZVRv
Z2dsZSgidW5kZXJsaW5lIiwgIjxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxp
bmUgbGluZS10aHJvdWdoIG92ZXJsaW5lO1wiPnRlc3Q8L3NwYW4+IiwKKyAgICAiPHNwYW4gc3R5
bGU9XCJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCBvdmVybGluZTtcIj50ZXN0PC9zcGFu
PiIpOwogdGVzdFNpbmdsZVRvZ2dsZSgic3RyaWtldGhyb3VnaCIsICJ0ZXN0IiwgIjxzcGFuIHN0
eWxlPVwidGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XCI+dGVzdDwvc3Bhbj4iKTsKIHRl
c3RTaW5nbGVUb2dnbGUoInN0cmlrZXRocm91Z2giLCAiPHNwYW4gc3R5bGU9XCJ0ZXh0LWRlY29y
YXRpb246IGxpbmUtdGhyb3VnaDtcIj50ZXN0PC9zcGFuPiIsICJ0ZXN0Iik7CiB0ZXN0U2luZ2xl
VG9nZ2xlKCJzdHJpa2V0aHJvdWdoIiwgIjxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmUgbGluZS10aHJvdWdoIG92ZXJsaW5lO1wiPnRlc3Q8L3NwYW4+IiwgIjxzcGFuIHN0
eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgb3ZlcmxpbmU7XCI+dGVzdDwvc3Bhbj4i
KTsKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdG9nZ2xlLW1peGVkLXRl
eHQtZGVjb3JhdGlvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Vk
aXRpbmcvZXhlY0NvbW1hbmQvdG9nZ2xlLW1peGVkLXRleHQtZGVjb3JhdGlvbnMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90b2dn
bGUtbWl4ZWQtdGV4dC1kZWNvcmF0aW9ucy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNiBAQAorVGVzdCB0byBtYWtlIHN1cmUgd2UgY2FuIHRvZ2dsZSB1bmRlcmxpbmUg
YW5kIHN0cmlrZSB0aHJvdWdoIHNlcGFyYXRlbHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitkb2N1bWVudC5leGVjQ29tbWFuZCgic3R5bGVXaXRoQ1NTIiwgZmFsc2UsIGZhbHNl
KTsKKworVG9nZ2xpbmcgc3RyaWtlVGhyb3VnaAorUEFTUyBjb250ZW50KCI8cz48dT5hPC91PmI8
L3M+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIikgaXMgIjx1PmE8L3U+
YiIKK1BBU1MgY29udGVudCgiPHM+PHU+YTwvdT5iPHU+YzwvdT48L3M+Iik7IHNlbGVjdCgwLCAz
KTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIikgaXMgIjx1PmE8L3U+Yjx1PmM8L3U+IgorUEFTUyBj
b250ZW50KCI8cz5hPHU+YjwvdT5jPC9zPiIpOyBzZWxlY3QoMCwgMyk7IHRvZ2dsZSgic3RyaWtl
VGhyb3VnaCIpIGlzICJhPHU+YjwvdT5jIgorUEFTUyBjb250ZW50KCI8cz5hPHU+YjwvdT5jPC9z
PiIpOyBzZWxlY3QoMSwgMyk7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpIGlzICI8c3RyaWtlPmE8
L3N0cmlrZT48dT5iPC91PmMiCitQQVNTIGNvbnRlbnQoIjxzPmE8dT5iPC91PmM8L3M+Iik7IHNl
bGVjdCgwLCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIikgaXMgImE8dT5iPC91PjxzdHJpa2U+
Yzwvc3RyaWtlPiIKK1BBU1MgY29udGVudCgiPHM+PHU+YWI8L3U+PC9zPmMiKTsgc2VsZWN0KDEs
IDMpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAiPHU+PHN0cmlrZT5hPC9zdHJpa2U+Yjwv
dT5jIgorUEFTUyBjb250ZW50KCI8cz5hPHU+YjwvdT48L3M+YyIpOyBzZWxlY3QoMSwgMyk7IHRv
Z2dsZSgic3RyaWtlVGhyb3VnaCIpIGlzICI8c3RyaWtlPmE8L3N0cmlrZT48dT5iPC91PmMiCitQ
QVNTIGNvbnRlbnQoImE8cz48dT5iPC91PmM8L3M+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJz
dHJpa2VUaHJvdWdoIikgaXMgIjxzdHJpa2U+YTwvc3RyaWtlPjxzPjx1PmI8L3U+Yzwvcz4iCitQ
QVNTIGNvbnRlbnQoImE8c3RyaWtlPjx1PmI8L3U+Yzwvc3RyaWtlPiIpOyBzZWxlY3QoMCwgMik7
IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpIGlzICI8c3RyaWtlPmE8dT5iPC91PmM8L3N0cmlrZT4i
CitQQVNTIGNvbnRlbnQoImE8dT48cz5iYzwvcz48L3U+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xl
KCJzdHJpa2VUaHJvdWdoIikgaXMgIjxzdHJpa2U+YTwvc3RyaWtlPjx1PjxzPmJjPC9zPjwvdT4i
CitQQVNTIGNvbnRlbnQoImE8cz48Yj48dT5iYzwvdT48L2I+PC9zPiIpOyBzZWxlY3QoMCwgMik7
IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpIGlzICI8c3RyaWtlPmE8L3N0cmlrZT48cz48Yj48dT5i
YzwvdT48L2I+PC9zPiIKK1BBU1MgY29udGVudCgiYTxzdHJpa2U+PGI+PHU+YmM8L3U+PC9iPjwv
c3RyaWtlPiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpIGlzICI8c3Ry
aWtlPmE8Yj48dT5iYzwvdT48L2I+PC9zdHJpa2U+IgorCitUb2dnbGluZyB1bmRlcmxpbmUKK1BB
U1MgY29udGVudCgiPHU+PHM+YTwvcz5iPC91PiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5k
ZXJsaW5lIikgaXMgIjxzPmE8L3M+YiIKK1BBU1MgY29udGVudCgiPHU+PHM+YTwvcz5iPHM+Yzwv
cz48L3U+Iik7IHNlbGVjdCgwLCAzKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBpcyAiPHM+YTwvcz5i
PHM+Yzwvcz4iCitQQVNTIGNvbnRlbnQoIjx1PmE8cz5iPC9zPmM8L3U+Iik7IHNlbGVjdCgwLCAz
KTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBpcyAiYTxzPmI8L3M+YyIKK1BBU1MgY29udGVudCgiPHU+
YTxzPmI8L3M+YzwvdT4iKTsgc2VsZWN0KDEsIDMpOyB0b2dnbGUoInVuZGVybGluZSIpIGlzICI8
dT5hPC91PjxzPmI8L3M+YyIKK1BBU1MgY29udGVudCgiPHU+YTxzPmI8L3M+YzwvdT4iKTsgc2Vs
ZWN0KDAsIDIpOyB0b2dnbGUoInVuZGVybGluZSIpIGlzICJhPHM+Yjwvcz48dT5jPC91PiIKK1BB
U1MgY29udGVudCgiPHU+PHM+YWI8L3M+PC91PmMiKTsgc2VsZWN0KDEsIDMpOyB0b2dnbGUoInVu
ZGVybGluZSIpIGlzICI8cz48dT5hPC91PmI8L3M+YyIKK1BBU1MgY29udGVudCgiPHU+YTxzPmI8
L3M+PC91PmMiKTsgc2VsZWN0KDEsIDMpOyB0b2dnbGUoInVuZGVybGluZSIpIGlzICI8dT5hPC91
PjxzPmI8L3M+YyIKK1BBU1MgY29udGVudCgiYTx1PjxzPmI8L3M+YzwvdT4iKTsgc2VsZWN0KDAs
IDIpOyB0b2dnbGUoInVuZGVybGluZSIpIGlzICI8dT5hPHM+Yjwvcz5jPC91PiIKK1BBU1MgY29u
dGVudCgiYTxzPjx1PmJjPC91Pjwvcz4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUoInVuZGVybGlu
ZSIpIGlzICI8dT5hPC91PjxzPjx1PmJjPC91Pjwvcz4iCitQQVNTIGNvbnRlbnQoImE8dT48Yj48
cz5iYzwvcz48L2I+PC91PiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMg
Ijx1PmE8Yj48cz5iYzwvcz48L2I+PC91PiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorYWJjCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWND
b21tYW5kL3RvZ2dsZS1taXhlZC10ZXh0LWRlY29yYXRpb25zLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90b2dnbGUtbWl4ZWQtdGV4dC1kZWNvcmF0
aW9ucy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFu
ZC90b2dnbGUtbWl4ZWQtdGV4dC1kZWNvcmF0aW9ucy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitkZXNj
cmlwdGlvbigiVGVzdCB0byBtYWtlIHN1cmUgd2UgY2FuIHRvZ2dsZSB1bmRlcmxpbmUgYW5kIHN0
cmlrZSB0aHJvdWdoIHNlcGFyYXRlbHkuIikKKwordmFyIHRlc3RDb250YWluZXIgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK3Rlc3RDb250YWluZXIuY29udGVudEVkaXRhYmxlID0g
dHJ1ZTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdENvbnRhaW5lcik7CisKK2Z1bmN0
aW9uIHRlc3RTaW5nbGVUb2dnbGUodG9nZ2xlQ29tbWFuZCwgaW5pdGlhbENvbnRlbnRzLCBleHBl
Y3RlZENvbnRlbnRzKQoreworICAgIHRlc3RDb250YWluZXIuaW5uZXJIVE1MID0gaW5pdGlhbENv
bnRlbnRzOworICAgIGdldFNlbGVjdGlvbigpLmNvbGxhcHNlKHRlc3RDb250YWluZXIsIDApOwor
ICAgIGdldFNlbGVjdGlvbigpLm1vZGlmeSgnJykKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCku
c2VsZWN0QWxsQ2hpbGRyZW4odGVzdENvbnRhaW5lcik7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1h
bmQoInN0eWxlV2l0aENTUyIsIGZhbHNlLCBmYWxzZSk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1h
bmQodG9nZ2xlQ29tbWFuZCwgZmFsc2UsIG51bGwpOworICAgIGlmICh0ZXN0Q29udGFpbmVyLmlu
bmVySFRNTCA9PT0gZXhwZWN0ZWRDb250ZW50cykgeworICAgICAgICB0ZXN0UGFzc2VkKCJvbmUg
IiArIHRvZ2dsZUNvbW1hbmQgKyAiIGNvbW1hbmQgY29udmVydGVkICIgKyBpbml0aWFsQ29udGVu
dHMgKyAiIHRvICIgKyBleHBlY3RlZENvbnRlbnRzKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0
ZXN0RmFpbGVkKCJvbmUgIiArIHRvZ2dsZUNvbW1hbmQgKyAiIGNvbW1hbmQgY29udmVydGVkICIg
KyBpbml0aWFsQ29udGVudHMgKyAiIHRvICIgKyB0ZXN0Q29udGFpbmVyLmlubmVySFRNTCArICIs
IGV4cGVjdGVkICIgKyBleHBlY3RlZENvbnRlbnRzKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNv
bnRlbnQobWFya3VwKSB7CisgICAgdGVzdENvbnRhaW5lci5pbm5lckhUTUwgPSBtYXJrdXA7Cit9
CisKK2Z1bmN0aW9uIHNlbGVjdChvZmZzZXQsIGV4dGVudCkgeworICAgIGdldFNlbGVjdGlvbigp
LmNvbGxhcHNlKHRlc3RDb250YWluZXIsIDApOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2Zm
c2V0OyBpKyspCisgICAgICAgIGdldFNlbGVjdGlvbigpLm1vZGlmeSgnbW92ZScsICdmb3J3YXJk
JywgJ2NoYXJhY3RlcicpOworICAgIGZvciAodmFyIGkgPSBvZmZzZXQ7IGkgPCBleHRlbnQ7IGkr
KykKKyAgICAgICAgZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICdj
aGFyYWN0ZXInKTsKK30KKworZnVuY3Rpb24gdG9nZ2xlKGNvbW1hbmQpIHsKKyAgICBkb2N1bWVu
dC5leGVjQ29tbWFuZChjb21tYW5kLCBmYWxzZSwgbnVsbCk7CisgICAgcmV0dXJuIHRlc3RDb250
YWluZXIuaW5uZXJIVE1MOworfQorCitldmFsQW5kTG9nKCdkb2N1bWVudC5leGVjQ29tbWFuZCgi
c3R5bGVXaXRoQ1NTIiwgZmFsc2UsIGZhbHNlKTsnKTsKKworZGVidWcoJycpOworZGVidWcoJ1Rv
Z2dsaW5nIHN0cmlrZVRocm91Z2gnKTsKK3Nob3VsZEJlKCdjb250ZW50KCI8cz48dT5hPC91PmI8
L3M+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLCAnIjx1PmE8L3U+
YiInKTsKK3Nob3VsZEJlKCdjb250ZW50KCI8cz48dT5hPC91PmI8dT5jPC91Pjwvcz4iKTsgc2Vs
ZWN0KDAsIDMpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKScsICciPHU+YTwvdT5iPHU+YzwvdT4i
Jyk7CitzaG91bGRCZSgnY29udGVudCgiPHM+YTx1PmI8L3U+Yzwvcz4iKTsgc2VsZWN0KDAsIDMp
OyB0b2dnbGUoInN0cmlrZVRocm91Z2giKScsICciYTx1PmI8L3U+YyInKTsKK3Nob3VsZEJlKCdj
b250ZW50KCI8cz5hPHU+YjwvdT5jPC9zPiIpOyBzZWxlY3QoMSwgMyk7IHRvZ2dsZSgic3RyaWtl
VGhyb3VnaCIpJywgJyI8c3RyaWtlPmE8L3N0cmlrZT48dT5iPC91PmMiJyk7CitzaG91bGRCZSgn
Y29udGVudCgiPHM+YTx1PmI8L3U+Yzwvcz4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlr
ZVRocm91Z2giKScsICciYTx1PmI8L3U+PHN0cmlrZT5jPC9zdHJpa2U+IicpOworc2hvdWxkQmUo
J2NvbnRlbnQoIjxzPjx1PmFiPC91Pjwvcz5jIik7IHNlbGVjdCgxLCAzKTsgdG9nZ2xlKCJzdHJp
a2VUaHJvdWdoIiknLCAnIjx1PjxzdHJpa2U+YTwvc3RyaWtlPmI8L3U+YyInKTsKK3Nob3VsZEJl
KCdjb250ZW50KCI8cz5hPHU+YjwvdT48L3M+YyIpOyBzZWxlY3QoMSwgMyk7IHRvZ2dsZSgic3Ry
aWtlVGhyb3VnaCIpJywgJyI8c3RyaWtlPmE8L3N0cmlrZT48dT5iPC91PmMiJyk7CitzaG91bGRC
ZSgnY29udGVudCgiYTxzPjx1PmI8L3U+Yzwvcz4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0
cmlrZVRocm91Z2giKScsICciPHN0cmlrZT5hPC9zdHJpa2U+PHM+PHU+YjwvdT5jPC9zPiInKTsK
K3Nob3VsZEJlKCdjb250ZW50KCJhPHN0cmlrZT48dT5iPC91PmM8L3N0cmlrZT4iKTsgc2VsZWN0
KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKScsICciPHN0cmlrZT5hPHU+YjwvdT5jPC9z
dHJpa2U+IicpOworc2hvdWxkQmUoJ2NvbnRlbnQoImE8dT48cz5iYzwvcz48L3U+Iik7IHNlbGVj
dCgwLCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLCAnIjxzdHJpa2U+YTwvc3RyaWtlPjx1
PjxzPmJjPC9zPjwvdT4iJyk7CitzaG91bGRCZSgnY29udGVudCgiYTxzPjxiPjx1PmJjPC91Pjwv
Yj48L3M+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLCAnIjxzdHJp
a2U+YTwvc3RyaWtlPjxzPjxiPjx1PmJjPC91PjwvYj48L3M+IicpOworc2hvdWxkQmUoJ2NvbnRl
bnQoImE8c3RyaWtlPjxiPjx1PmJjPC91PjwvYj48L3N0cmlrZT4iKTsgc2VsZWN0KDAsIDIpOyB0
b2dnbGUoInN0cmlrZVRocm91Z2giKScsICciPHN0cmlrZT5hPGI+PHU+YmM8L3U+PC9iPjwvc3Ry
aWtlPiInKTsKKworZGVidWcoJycpOworZGVidWcoJ1RvZ2dsaW5nIHVuZGVybGluZScpOworc2hv
dWxkQmUoJ2NvbnRlbnQoIjx1PjxzPmE8L3M+YjwvdT4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUo
InVuZGVybGluZSIpJywgJyI8cz5hPC9zPmIiJyk7CitzaG91bGRCZSgnY29udGVudCgiPHU+PHM+
YTwvcz5iPHM+Yzwvcz48L3U+Iik7IHNlbGVjdCgwLCAzKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScs
ICciPHM+YTwvcz5iPHM+Yzwvcz4iJyk7CitzaG91bGRCZSgnY29udGVudCgiPHU+YTxzPmI8L3M+
YzwvdT4iKTsgc2VsZWN0KDAsIDMpOyB0b2dnbGUoInVuZGVybGluZSIpJywgJyJhPHM+Yjwvcz5j
IicpOworc2hvdWxkQmUoJ2NvbnRlbnQoIjx1PmE8cz5iPC9zPmM8L3U+Iik7IHNlbGVjdCgxLCAz
KTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScsICciPHU+YTwvdT48cz5iPC9zPmMiJyk7CitzaG91bGRC
ZSgnY29udGVudCgiPHU+YTxzPmI8L3M+YzwvdT4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUoInVu
ZGVybGluZSIpJywgJyJhPHM+Yjwvcz48dT5jPC91PiInKTsKK3Nob3VsZEJlKCdjb250ZW50KCI8
dT48cz5hYjwvcz48L3U+YyIpOyBzZWxlY3QoMSwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIiknLCAn
IjxzPjx1PmE8L3U+Yjwvcz5jIicpOworc2hvdWxkQmUoJ2NvbnRlbnQoIjx1PmE8cz5iPC9zPjwv
dT5jIik7IHNlbGVjdCgxLCAzKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScsICciPHU+YTwvdT48cz5i
PC9zPmMiJyk7CitzaG91bGRCZSgnY29udGVudCgiYTx1PjxzPmI8L3M+YzwvdT4iKTsgc2VsZWN0
KDAsIDIpOyB0b2dnbGUoInVuZGVybGluZSIpJywgJyI8dT5hPHM+Yjwvcz5jPC91PiInKTsKK3No
b3VsZEJlKCdjb250ZW50KCJhPHM+PHU+YmM8L3U+PC9zPiIpOyBzZWxlY3QoMCwgMik7IHRvZ2ds
ZSgidW5kZXJsaW5lIiknLCAnIjx1PmE8L3U+PHM+PHU+YmM8L3U+PC9zPiInKTsKK3Nob3VsZEJl
KCdjb250ZW50KCJhPHU+PGI+PHM+YmM8L3M+PC9iPjwvdT4iKTsgc2VsZWN0KDAsIDIpOyB0b2dn
bGUoInVuZGVybGluZSIpJywgJyI8dT5hPGI+PHM+YmM8L3M+PC9iPjwvdT4iJyk7CisKK2V2YWxB
bmRMb2coJ2RvY3VtZW50LmV4ZWNDb21tYW5kKCJzdHlsZVdpdGhDU1MiLCBmYWxzZSwgdHJ1ZSk7
Jyk7CisKK2RlYnVnKCcnKTsKK2RlYnVnKCdUb2dnbGluZyBzdHJpa2VUaHJvdWdoJyk7CitzaG91
bGRCZSgnY29udGVudChcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3Vn
aDsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSI+YTwvc3Bhbj5iPC9z
cGFuPlwnKTtcbicKKyAgICArICdzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIp
JywKKyAgICAnXCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5hPC9z
cGFuPmJcJycpOworc2hvdWxkQmUoJ2NvbnRlbnQoXCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0
aW9uOiBsaW5lLXRocm91Z2g7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxp
bmU7Ij5hPC9zcGFuPmI8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUiPmM8
L3NwYW4+PC9zcGFuPlwnKTtcbicKKyAgICArICdzZWxlY3QoMCwgMyk7IHRvZ2dsZSgic3RyaWtl
VGhyb3VnaCIpJywKKyAgICAnXCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxp
bmU7Ij5hPC9zcGFuPmI8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5j
PC9zcGFuPlwnJyk7CitzaG91bGRCZSgnY29udGVudChcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IGxpbmUtdGhyb3VnaDsiPmE8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmU7Ij5iPC9zcGFuPmM8L3NwYW4+XCcpO1xuJworICAgICsgJ3NlbGVjdCgwLCAzKTsgdG9n
Z2xlKCJzdHJpa2VUaHJvdWdoIiknLAorICAgICdcJ2E8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0
aW9uOiB1bmRlcmxpbmU7Ij5iPC9zcGFuPmNcJycpOworc2hvdWxkQmUoJ2NvbnRlbnQoXCc8c3Bh
biBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hPHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+Yjwvc3Bhbj5jPC9zcGFuPlwnKTtcbicKKyAgICAr
ICdzZWxlY3QoMSwgMyk7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywKKyAgICAnXCc8c3BhbiBz
dHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hPC9zcGFuPjxzcGFuIHN0eWxl
PSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmI8L3NwYW4+Y1wnJyk7CitzaG91bGRCZSgn
Y29udGVudChcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmE8
c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5iPC9zcGFuPmM8L3NwYW4+
XCcpO1xuJworICAgICsgJ3NlbGVjdCgwLCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLAor
ICAgICdcJ2E8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5iPC9zcGFu
PjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmM8L3NwYW4+XCcn
KTsKK3Nob3VsZEJlKCdjb250ZW50KFwnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGlu
ZS10aHJvdWdoOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YWI8
L3NwYW4+PC9zcGFuPmNcJyk7XG4nCisgICAgKyAnc2VsZWN0KDEsIDMpOyB0b2dnbGUoInN0cmlr
ZVRocm91Z2giKScsCisgICAgJ1wnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJs
aW5lOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTwvc3Bh
bj5iPC9zcGFuPmNcJycpOworc2hvdWxkQmUoJ2NvbnRlbnQoXCdhPHNwYW4gc3R5bGU9InRleHQt
ZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lOyI+Yjwvc3Bhbj5jPC9zcGFuPlwnKTtcbicKKyAgICArICdzZWxlY3QoMCwgMik7
IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywKKyAgICAnXCc8c3BhbiBzdHlsZT0idGV4dC1kZWNv
cmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hPC9zcGFuPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRp
b246IGxpbmUtdGhyb3VnaDsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGlu
ZTsiPmI8L3NwYW4+Yzwvc3Bhbj5cJycpOworLy8gICAgIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IGxpbmUtdGhyb3VnaDsiPmE8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmU7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGxpbmUtdGhyb3VnaDsiPmI8L3NwYW4+
Yzwvc3Bhbj4KK3Nob3VsZEJlKCdjb250ZW50KFwnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRp
b246IGxpbmUtdGhyb3VnaDsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGlu
ZTsiPmI8L3NwYW4+Yzwvc3Bhbj5cJyk7XG4nCisgICAgKyAnc2VsZWN0KDAsIDIpOyB0b2dnbGUo
InN0cmlrZVRocm91Z2giKScsCisgICAgJ1wnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
bGluZS10aHJvdWdoOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsi
PmI8L3NwYW4+Yzwvc3Bhbj5cJycpOworLy8gICAgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogbGluZS10aHJvdWdoOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGlu
ZTsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10aHJvdWdoOyI+Yjwvc3Bhbj5jPC9z
cGFuPgorCitkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RDb250YWluZXIpOworCit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS1zdHlsZS0yLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L3RvZ2dsZS1zdHlsZS0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTgzNDk3KQorKysgTGF5b3V0
VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90b2dnbGUtc3R5bGUtMi1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDcgQEAKIFBBU1Mgb25lIHN0cmlrZXRocm91Z2ggY29t
bWFuZCBjb252ZXJ0ZWQgPHU+PGI+PHN0cmlrZT50ZXN0PC9zdHJpa2U+PC9iPjwvdT4gdG8gPHU+
PGI+dGVzdDwvYj48L3U+CiBQQVNTIHR3byBzdHJpa2V0aHJvdWdoIGNvbW1hbmRzIGNvbnZlcnRl
ZCB0ZXN0IHRvIHRlc3QKIFBBU1Mgb25lIHN0cmlrZXRocm91Z2ggY29tbWFuZCBjb252ZXJ0ZWQg
PHU+dGVzdDwvdT4gdG8gPHU+PHN0cmlrZT50ZXN0PC9zdHJpa2U+PC91PgotUEFTUyBvbmUgdW5k
ZXJsaW5lIGNvbW1hbmQgY29udmVydGVkIDxzdHJpa2U+dGVzdDwvc3RyaWtlPiB0byA8dT48c3Ry
aWtlPnRlc3Q8L3N0cmlrZT48L3U+CitQQVNTIG9uZSB1bmRlcmxpbmUgY29tbWFuZCBjb252ZXJ0
ZWQgPHN0cmlrZT50ZXN0PC9zdHJpa2U+IHRvIDxzdHJpa2U+PHU+dGVzdDwvdT48L3N0cmlrZT4K
IFBBU1Mgb25lIHN0cmlrZXRocm91Z2ggY29tbWFuZCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogb3ZlcmxpbmU7Ij50ZXN0PC9zcGFuPiB0byA8c3BhbiBzdHlsZT0idGV4
dC1kZWNvcmF0aW9uOiBvdmVybGluZTsiPjxzdHJpa2U+dGVzdDwvc3RyaWtlPjwvc3Bhbj4KIFBB
U1Mgb25lIHVuZGVybGluZSBjb21tYW5kIGNvbnZlcnRlZCA8c3BhbiBzdHlsZT0idGV4dC1kZWNv
cmF0aW9uOiBvdmVybGluZTsiPnRlc3Q8L3NwYW4+IHRvIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IG92ZXJsaW5lOyI+PHU+dGVzdDwvdT48L3NwYW4+CiBQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2ds
ZS10ZXh0LWRlY29yYXRpb25zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS10ZXh0LWRlY29yYXRpb25zLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMTgzNDk3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90
b2dnbGUtdGV4dC1kZWNvcmF0aW9ucy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUs
NyArNSw3IEBACiAKIFBBU1Mgb25lIHVuZGVybGluZSBjb21tYW5kIGNvbnZlcnRlZCB0ZXN0IHRv
IDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPnRlc3Q8L3NwYW4+CiBQ
QVNTIG9uZSB1bmRlcmxpbmUgY29tbWFuZCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVj
b3JhdGlvbjogdW5kZXJsaW5lOyI+dGVzdDwvc3Bhbj4gdG8gdGVzdAotUEFTUyBvbmUgdW5kZXJs
aW5lIGNvbW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVy
bGluZSBsaW5lLXRocm91Z2ggb3ZlcmxpbmU7Ij50ZXN0PC9zcGFuPiB0byA8c3BhbiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZSBsaW5lLXRocm91Z2g7Ij50ZXN0PC9zcGFuPgorUEFT
UyBvbmUgdW5kZXJsaW5lIGNvbW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IHVuZGVybGluZSBsaW5lLXRocm91Z2ggb3ZlcmxpbmU7Ij50ZXN0PC9zcGFuPiB0byA8
c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2ggb3ZlcmxpbmU7Ij50ZXN0
PC9zcGFuPgogUEFTUyBvbmUgc3RyaWtldGhyb3VnaCBjb21tYW5kIGNvbnZlcnRlZCB0ZXN0IHRv
IDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPnRlc3Q8L3NwYW4+
CiBQQVNTIG9uZSBzdHJpa2V0aHJvdWdoIGNvbW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSJ0
ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPnRlc3Q8L3NwYW4+IHRvIHRlc3QKIFBBU1Mg
b25lIHN0cmlrZXRocm91Z2ggY29tbWFuZCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVj
b3JhdGlvbjogdW5kZXJsaW5lIGxpbmUtdGhyb3VnaCBvdmVybGluZTsiPnRlc3Q8L3NwYW4+IHRv
IDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBvdmVybGluZTsiPnRlc3Q8
L3NwYW4+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG8vcmVtb3ZlLWNzcy1wcm9wZXJ0
eS1hbmQtcmVtb3ZlLXN0eWxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3VuZG8vcmVtb3ZlLWNzcy1wcm9wZXJ0eS1hbmQtcmVtb3ZlLXN0eWxlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMTgzNDk3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvL3Jl
bW92ZS1jc3MtcHJvcGVydHktYW5kLXJlbW92ZS1zdHlsZS1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDcgKzU5LDcgQEAKIAogVW5kbyBzaG91bGQgcmVzZXQgdGhlIHN0eWxlIGF0
dHJpYnV0ZSBzbyB0aGF0ICJ0ZXN0IiBpcyBib3RoIGJvbGQgYW5kIGJsdWU6CiB8IDxzcGFuPgot
fCAgIHN0eWxlPSJjb2xvcjogYmx1ZTsgZm9udC13ZWlnaHQ6IDkwMDsiCit8ICAgc3R5bGU9ImZv
bnQtd2VpZ2h0OiA5MDA7IGNvbG9yOiBibHVlOyIKIHwgICAiPCNzZWxlY3Rpb24tYW5jaG9yPnRl
c3Q8I3NlbGVjdGlvbi1mb2N1cz4iCiAKIFJlZG8gc2hvdWxkIG9ubHkgcmVtb3ZlIGZvbnQtd2Vp
Z2h0IGFuZCBsZWF2ZSAidGVzdCIgYmx1ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzY2
OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDY0IEBACisyMDE1LTA0LTMwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFRvZ2dsaW5nIHVuZGVybGluZSBvciBzdHJpa2UgdGhyb3VnaCBhZmZlY3RzIGVhY2gg
b3RoZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3
ODE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVz
dDogZWRpdGluZy9leGVjQ29tbWFuZC90b2dnbGUtbWl4ZWQtdGV4dC1kZWNvcmF0aW9ucy5odG1s
CisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDU1NTdHlsZSk6CisgICAgICAgICogZWRp
dGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRFcXVp
dmFsZW50OjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50RXF1aXZhbGVu
dDo6cHJvcGVydHlFeGlzdHNJblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50
RXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6OkhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6Y2hhbmdl
SW5TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXR0cmlidXRlRXF1aXZhbGVudDo6bWF0
Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXR0cmlidXRlRXF1aXZhbGVudDo6dmFsdWVJ
c1ByZXNlbnRJblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6RWRpdGlu
Z1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6aXNFbXB0eSk6CisgICAg
ICAgIChXZWJDb3JlOjphcHBseVRleHREZWNvcmF0aW9uQ2hhbmdlVG9WYWx1ZUxpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpvdmVycmlkZVR5cGluZ1N0eWxlQXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dERlY29yYXRpb25WYWx1
ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjb25mbGljdHNXaXRoSW5s
aW5lU3R5bGVPZkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjb25m
bGljdHNXaXRoSW1wbGljaXRTdHlsZU9mRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OmNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxlT2ZBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6ZXh0cmFjdENvbmZsaWN0aW5nSW1wbGljaXRTdHls
ZU9mQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnN0eWxlSXNQ
cmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdT
dHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9ySFRNTEVxdWl2YWxlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZWxlbWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2wpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJnZUlubGluZUFuZEltcGxpY2l0U3R5
bGVPZkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJnZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50Ojpwcm9wZXJ0eUV4aXN0c0lu
U3R5bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1
aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjb25mbGljdHNXaXRoSW5saW5l
U3R5bGVPZkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpzZXRVbmRl
cmxpbmVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjp1bmRlcmxpbmVD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpzZXRTdHJpa2VUaHJvdWdo
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6c3RyaWtlVGhyb3VnaENo
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmNvcHlBZGRpdGlvbmFsU3R5
bGVGcm9tKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVN0
eWxlVG9TZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogZWRp
dGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Q29tbWFuZFRv
RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZUFwcGx5U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6aXNTdHlsZVByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVRvZ2ds
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnRleHREZWNvcmF0aW9uQ2hhbmdlRm9yVG9nZ2xp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVN0cmlrZXRocm91Z2gpOgorICAgICAgICAo
V2ViQ29yZTo6ZXhlY3V0ZVVuZGVybGluZSk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlVG9n
Z2xlU3R5bGVJbkxpc3QpOiBEZWxldGVkLgorCiAyMDE1LTA0LTMwICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ29tcGlsZSBmaXggd2hlbiB1
c2luZyBjb250ZW50IGV4dGVuc2lvbnMgZGVidWdnaW5nIGNvZGUuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTgzNDk3KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk0NSwxNyArOTQ1LDE0IEBACiAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9uZSkK
ICAgICAgICAgcmV0dXJuIHN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQo
ZWxlbWVudCk7CiAKLSAgICBWZWN0b3I8Q1NTUHJvcGVydHlJRD4gcHJvcGVydGllczsKLSAgICBp
ZiAoIXN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoZWxlbWVudCwgZXh0
cmFjdGVkU3R5bGUsIHByb3BlcnRpZXMpKQorICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzPiBuZXdJbmxpbmVTdHlsZTsKKyAgICBpZiAoIXN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5l
U3R5bGVPZkVsZW1lbnQoZWxlbWVudCwgbmV3SW5saW5lU3R5bGUsIGV4dHJhY3RlZFN0eWxlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgYSBt
YXNzLXJlbW92YWwgZnVuY3Rpb24gaGVyZSBidXQgd2UgZG9uJ3QgaGF2ZSBhbiB1bmRvYWJsZSBv
bmUgeWV0LgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7IGkr
KykKLSAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydGllc1tpXSk7Ci0K
LSAgICAvLyBObyBuZWVkIHRvIHNlcmlhbGl6ZSA8Zm9vIHN0eWxlPSIiPiBpZiB3ZSBqdXN0IHJl
bW92ZWQgdGhlIGxhc3QgY3NzIHByb3BlcnR5Ci0gICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxl
KCktPmlzRW1wdHkoKSkKKyAgICBpZiAobmV3SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkKICAgICAg
ICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIpOworICAgIGVsc2UKKyAg
ICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxl
LT5hc1RleHQoKSk7CiAKICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVk
U3R5bGVTcGFuKGVsZW1lbnQpKQogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVu
KGVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAko
cmV2aXNpb24gMTgzNDk3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTAgKzE2MCwxMCBAQAogICAgIEhUTUxFbGVtZW50
RXF1aXZhbGVudChDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZUlEIHByaW1pdGl2ZVZhbHVlLCBjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKTsKIAogICAgIHZpcnR1YWwgfkhUTUxFbGVtZW50RXF1
aXZhbGVudCgpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBtYXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0IHsgcmV0dXJuICFtX3RhZ05hbWUgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSgq
bV90YWdOYW1lKTsgfQorICAgIHZpcnR1YWwgYm9vbCBtYXRjaGVzKGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQpIGNvbnN0IHsgcmV0dXJuICFtX3RhZ05hbWUgfHwgZWxlbWVudC5oYXNUYWdOYW1lKCpt
X3RhZ05hbWUpOyB9CiAgICAgdmlydHVhbCBib29sIGhhc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25z
dCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlKSBjb25zdCB7IHJldHVybiBzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOyB9Ci0gICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVz
ZW50SW5TdHlsZShFbGVtZW50KiwgU3R5bGVQcm9wZXJ0aWVzKikgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIHByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25zdCBFZGl0aW5nU3R5bGUmIHN0eWxlKSBj
b25zdCB7IHJldHVybiBzdHlsZS5tX211dGFibGVTdHlsZSAmJiBzdHlsZS5tX211dGFibGVTdHls
ZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOyB9CisgICAgdmlydHVhbCBib29s
IHZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50JiwgY29uc3QgRWRpdGluZ1N0eWxlJikgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkZFRvU3R5bGUoRWxlbWVudCosIEVkaXRpbmdTdHlsZSop
IGNvbnN0OwogCiBwcm90ZWN0ZWQ6CkBAIC0xOTQsOSArMTk0LDkgQEAKICAgICBBU1NFUlQocHJp
bWl0aXZlVmFsdWUgIT0gQ1NTVmFsdWVJbnZhbGlkKTsKIH0KIAotYm9vbCBIVE1MRWxlbWVudEVx
dWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiBlbGVtZW50LCBTdHlsZVBy
b3BlcnRpZXMqIHN0eWxlKSBjb25zdAorYm9vbCBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OnZhbHVl
SXNQcmVzZW50SW5TdHlsZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBFZGl0aW5nU3R5bGUmIHN0
eWxlKSBjb25zdAogewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUg
PSBzdHlsZS5tX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQp
OwogICAgIHJldHVybiBtYXRjaGVzKGVsZW1lbnQpICYmIGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZS5nZXQoKSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFs
dWVJRCgpID09IG1fcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKTsKIH0KIApAQCAtMjA3LDM5
ICsyMDcsNTUgQEAKIAogY2xhc3MgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudCA6IHB1Ymxp
YyBIVE1MRWxlbWVudEVxdWl2YWxlbnQgewogcHVibGljOgotICAgIEhUTUxUZXh0RGVjb3JhdGlv
bkVxdWl2YWxlbnQoQ1NTVmFsdWVJRCBwcmltaXRpdmVWYWx1ZSwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSk7CisgICAgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudChDU1NWYWx1ZUlE
IHByaW1pdGl2ZVZhbHVlLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQorICAgICAgICA6
IEhUTUxFbGVtZW50RXF1aXZhbGVudChDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCBwcmltaXRp
dmVWYWx1ZSwgdGFnTmFtZSkKKyAgICAgICAgLCBtX2lzVW5kZXJsaW5lKHByaW1pdGl2ZVZhbHVl
ID09IENTU1ZhbHVlVW5kZXJsaW5lKQorICAgIHsKKyAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wg
cHJvcGVydHlFeGlzdHNJblN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCB2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCosIFN0eWxlUHJvcGVy
dGllcyopIGNvbnN0OwotfTsKKyAgICBib29sIHByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25zdCBF
ZGl0aW5nU3R5bGUmIHN0eWxlKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGNo
YW5nZUluU3R5bGUoc3R5bGUpICE9IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLUhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6OkhUTUxU
ZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQoQ1NTVmFsdWVJRCBwcmltaXRpdmVWYWx1ZSwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKLSAgICA6IEhUTUxFbGVtZW50RXF1aXZhbGVudChDU1NQ
cm9wZXJ0eVRleHREZWNvcmF0aW9uLCBwcmltaXRpdmVWYWx1ZSwgdGFnTmFtZSkKLSAgICAvLyBt
X3Byb3BlcnR5SUQgaXMgdXNlZCBpbiBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OmFkZFRvU3R5bGUK
LXsKLX0KKyAgICAgICAgaWYgKCFzdHlsZS5tX211dGFibGVTdHlsZSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotYm9vbCBIVE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50Ojpwcm9wZXJ0
eUV4aXN0c0luU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0
RGVjb3JhdGlvbnNJbkVmZmVjdCkgfHwgc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlUZXh0RGVjb3JhdGlvbik7Ci19CisgICAgICAgIGF1dG8mIG11dGFibGVTdHlsZSA9ICpz
dHlsZS5tX211dGFibGVTdHlsZTsKKyAgICAgICAgcmV0dXJuIG11dGFibGVTdHlsZS5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpCisg
ICAgICAgICAgICB8fCBtdXRhYmxlU3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eVRleHREZWNvcmF0aW9uKTsKKyAgICB9CiAKLWJvb2wgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZh
bGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqIGVsZW1lbnQsIFN0eWxlUHJvcGVy
dGllcyogc3R5bGUpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBzdHlsZVZhbHVlID0g
c3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCk7Ci0gICAgaWYgKCFzdHlsZVZhbHVlKQotICAgICAgICBzdHlsZVZhbHVlID0g
c3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7Ci0g
ICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkgJiYgaXM8Q1NTVmFsdWVMaXN0PihzdHlsZVZhbHVl
LmdldCgpKSAmJiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpzdHlsZVZhbHVlKS5oYXNWYWx1ZSht
X3ByaW1pdGl2ZVZhbHVlLmdldCgpKTsKLX0KKyAgICBib29sIHZhbHVlSXNQcmVzZW50SW5TdHls
ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBFZGl0aW5nU3R5bGUmIHN0eWxlKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtYXRjaGVzKGVsZW1lbnQpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIGNoYW5nZSA9IGNoYW5nZUluU3R5bGUoc3R5bGUp
OworICAgICAgICBpZiAoY2hhbmdlICE9IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lKQorICAg
ICAgICAgICAgcmV0dXJuIGNoYW5nZSA9PSBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6QWRkOworICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN0eWxlVmFsdWUgPSBzdHlsZS5tX211dGFibGVTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZm
ZWN0KTsKKyAgICAgICAgaWYgKCFzdHlsZVZhbHVlKQorICAgICAgICAgICAgc3R5bGVWYWx1ZSA9
IHN0eWxlLm1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4
dERlY29yYXRpb24pOworICAgICAgICByZXR1cm4gaXM8Q1NTVmFsdWVMaXN0PihzdHlsZVZhbHVl
LmdldCgpKSAmJiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpzdHlsZVZhbHVlKS5oYXNWYWx1ZSht
X3ByaW1pdGl2ZVZhbHVlLmdldCgpKTsKKyAgICB9CiAKK3ByaXZhdGU6CisgICAgVGV4dERlY29y
YXRpb25DaGFuZ2UgY2hhbmdlSW5TdHlsZShjb25zdCBFZGl0aW5nU3R5bGUmIHN0eWxlKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNVbmRlcmxpbmUgPyBzdHlsZS51bmRlcmxpbmVD
aGFuZ2UoKSA6IHN0eWxlLnN0cmlrZVRocm91Z2hDaGFuZ2UoKTsKKyAgICB9CisKKyAgICBib29s
IG1faXNVbmRlcmxpbmU7Cit9OworCiBjbGFzcyBIVE1MQXR0cmlidXRlRXF1aXZhbGVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudEVxdWl2YWxlbnQgewogcHVibGljOgogICAgIEhUTUxBdHRyaWJ1dGVF
cXVpdmFsZW50KENTU1Byb3BlcnR5SUQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKTsKICAgICBIVE1MQXR0cmlidXRlRXF1aXZhbGVu
dChDU1NQcm9wZXJ0eUlELCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSk7CiAKLSAgICBi
b29sIG1hdGNoZXMoY29uc3QgRWxlbWVudCogZWxlbSkgY29uc3QgeyByZXR1cm4gSFRNTEVsZW1l
bnRFcXVpdmFsZW50OjptYXRjaGVzKGVsZW0pICYmIGVsZW0tPmhhc0F0dHJpYnV0ZShtX2F0dHJO
YW1lKTsgfQorICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVtZW50JiBlbGVtKSBjb25zdCB7IHJl
dHVybiBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6Om1hdGNoZXMoZWxlbSkgJiYgZWxlbS5oYXNBdHRy
aWJ1dGUobV9hdHRyTmFtZSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzQXR0cmlidXRlKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCB2YWx1ZUlzUHJlc2VudEluU3R5
bGUoRWxlbWVudCosIFN0eWxlUHJvcGVydGllcyopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCB2
YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCYsIGNvbnN0IEVkaXRpbmdTdHlsZSYpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBhZGRUb1N0eWxlKEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUqKSBj
b25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGF0dHJpYnV0ZVZhbHVlQXND
U1NWYWx1ZShFbGVtZW50KikgY29uc3Q7CiAgICAgaW5saW5lIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJOYW1lOyB9CkBAIC0yNjAsMTAg
KzI3NiwxMCBAQAogewogfQogCi1ib29sIEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50Ojp2YWx1ZUlz
UHJlc2VudEluU3R5bGUoRWxlbWVudCogZWxlbWVudCwgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSkg
Y29uc3QKK2Jvb2wgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHls
ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBFZGl0aW5nU3R5bGUmIHN0eWxlKSBjb25zdAogewot
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoZWxl
bWVudCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
YXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKCZlbGVtZW50KTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+
IHN0eWxlVmFsdWUgPSBzdHlsZS5tX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZSht
X3Byb3BlcnR5SUQpOwogICAgIAogICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVQdHIodmFsdWUs
IHN0eWxlVmFsdWUpOwogfQpAQCAtMzE1LDI3ICszMzEsMjYgQEAKIAogRWRpdGluZ1N0eWxlOjpF
ZGl0aW5nU3R5bGUoKQogICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShmYWxz
ZSkKKyAgICAsIG1fdW5kZXJsaW5lQ2hhbmdlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihUZXh0RGVj
b3JhdGlvbkNoYW5nZTo6Tm9uZSkpCisgICAgLCBtX3N0cmlrZVRocm91Z2hDaGFuZ2Uoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lKSkKICAgICAsIG1fZm9u
dFNpemVEZWx0YShOb0ZvbnREZWx0YSkKIHsKIH0KIAogRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5
bGUoTm9kZSogbm9kZSwgUHJvcGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQot
ICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShmYWxzZSkKLSAgICAsIG1fZm9u
dFNpemVEZWx0YShOb0ZvbnREZWx0YSkKKyAgICA6IEVkaXRpbmdTdHlsZSgpCiB7CiAgICAgaW5p
dChub2RlLCBwcm9wZXJ0aWVzVG9JbmNsdWRlKTsKIH0KIAogRWRpdGluZ1N0eWxlOjpFZGl0aW5n
U3R5bGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBQcm9wZXJ0aWVzVG9JbmNsdWRlIHByb3Bl
cnRpZXNUb0luY2x1ZGUpCi0gICAgOiBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplKGZh
bHNlKQotICAgICwgbV9mb250U2l6ZURlbHRhKE5vRm9udERlbHRhKQorICAgIDogRWRpdGluZ1N0
eWxlKCkKIHsKICAgICBpbml0KHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCksIHByb3BlcnRpZXNU
b0luY2x1ZGUpOwogfQogCiBFZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZShjb25zdCBTdHlsZVBy
b3BlcnRpZXMqIHN0eWxlKQotICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShm
YWxzZSkKLSAgICAsIG1fZm9udFNpemVEZWx0YShOb0ZvbnREZWx0YSkKKyAgICA6IEVkaXRpbmdT
dHlsZSgpCiB7CiAgICAgaWYgKHN0eWxlKQogICAgICAgICBtX211dGFibGVTdHlsZSA9IHN0eWxl
LT5tdXRhYmxlQ29weSgpOwpAQCAtMzQzLDEzICszNTgsMTkgQEAKIH0KIAogRWRpdGluZ1N0eWxl
OjpFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZh
bHVlKQotICAgIDogbV9tdXRhYmxlU3R5bGUoMCkKLSAgICAsIG1fc2hvdWxkVXNlRml4ZWREZWZh
dWx0Rm9udFNpemUoZmFsc2UpCi0gICAgLCBtX2ZvbnRTaXplRGVsdGEoTm9Gb250RGVsdGEpCisg
ICAgOiBFZGl0aW5nU3R5bGUoKQogewogICAgIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVl
KTsKKyAgICBleHRyYWN0Rm9udFNpemVEZWx0YSgpOwogfQogCitFZGl0aW5nU3R5bGU6OkVkaXRp
bmdTdHlsZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlSUQgdmFsdWUpCisgICAg
OiBFZGl0aW5nU3R5bGUoKQoreworICAgIG1fbXV0YWJsZVN0eWxlID0gTXV0YWJsZVN0eWxlUHJv
cGVydGllczo6Y3JlYXRlKCk7CisgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KHByb3Bl
cnR5SUQsIHZhbHVlKTsKK30KKwogRWRpdGluZ1N0eWxlOjp+RWRpdGluZ1N0eWxlKCkKIHsKIH0K
QEAgLTQ5Miw3ICs1MTMsOCBAQAogCiBib29sIEVkaXRpbmdTdHlsZTo6aXNFbXB0eSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICghbV9tdXRhYmxlU3R5bGUgfHwgbV9tdXRhYmxlU3R5bGUtPmlzRW1w
dHkoKSkgJiYgbV9mb250U2l6ZURlbHRhID09IE5vRm9udERlbHRhOworICAgIHJldHVybiAoIW1f
bXV0YWJsZVN0eWxlIHx8IG1fbXV0YWJsZVN0eWxlLT5pc0VtcHR5KCkpICYmIG1fZm9udFNpemVE
ZWx0YSA9PSBOb0ZvbnREZWx0YQorICAgICAgICAmJiB1bmRlcmxpbmVDaGFuZ2UoKSA9PSBUZXh0
RGVjb3JhdGlvbkNoYW5nZTo6Tm9uZSAmJiBzdHJpa2VUaHJvdWdoQ2hhbmdlKCkgPT0gVGV4dERl
Y29yYXRpb25DaGFuZ2U6Ok5vbmU7CiB9CiAKIGJvb2wgRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0
aW9uKFdyaXRpbmdEaXJlY3Rpb24mIHdyaXRpbmdEaXJlY3Rpb24pIGNvbnN0CkBAIC01MzcsMTEg
KzU1OSw2MSBAQAogICAgIHJldHVybiBtZXJnZVN0eWxlKHN0eWxlLCBPdmVycmlkZVZhbHVlcyk7
CiB9CiAKK3N0YXRpYyB2b2lkIGFwcGx5VGV4dERlY29yYXRpb25DaGFuZ2VUb1ZhbHVlTGlzdChD
U1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgVGV4dERlY29yYXRpb25DaGFuZ2UgY2hhbmdlLCBSZWY8
Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpCit7CisgICAgc3dpdGNoIChjaGFuZ2UpIHsKKyAg
ICBjYXNlIFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lOgorICAgICAgICBicmVhazsKKyAgICBj
YXNlIFRleHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQ6CisgICAgICAgIHZhbHVlTGlzdC5hcHBlbmQo
c3RkOjptb3ZlKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dERlY29yYXRp
b25DaGFuZ2U6OlJlbW92ZToKKyAgICAgICAgdmFsdWVMaXN0LnJlbW92ZUFsbCgmdmFsdWUuZ2V0
KCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgRWRpdGluZ1N0eWxlOjpvdmVy
cmlkZVR5cGluZ1N0eWxlQXQoY29uc3QgRWRpdGluZ1N0eWxlJiBzdHlsZSwgY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uKQoreworICAgIG1lcmdlU3R5bGUoc3R5bGUubV9tdXRhYmxlU3R5bGUuZ2V0
KCksIE92ZXJyaWRlVmFsdWVzKTsKKworICAgIG1fZm9udFNpemVEZWx0YSArPSBzdHlsZS5tX2Zv
bnRTaXplRGVsdGE7CisKKyAgICBwcmVwYXJlVG9BcHBseUF0KHBvc2l0aW9uLCBFZGl0aW5nU3R5
bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbik7CisKKyAgICBhdXRvIHVuZGVybGluZUNoYW5n
ZSA9IHN0eWxlLnVuZGVybGluZUNoYW5nZSgpOworICAgIGF1dG8gc3RyaWtlVGhyb3VnaENoYW5n
ZSA9IHN0eWxlLnN0cmlrZVRocm91Z2hDaGFuZ2UoKTsKKyAgICBpZiAodW5kZXJsaW5lQ2hhbmdl
ID09IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lICYmIHN0cmlrZVRocm91Z2hDaGFuZ2UgPT0g
VGV4dERlY29yYXRpb25DaGFuZ2U6Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV9tdXRhYmxlU3R5bGUpCisgICAgICAgIG1fbXV0YWJsZVN0eWxlID0gTXV0YWJsZVN0eWxlUHJv
cGVydGllczo6Y3JlYXRlKCk7CisKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IHVuZGVybGlu
ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVVuZGVybGlu
ZSk7CisgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxpbmVUaHJvdWdoKTsKKyAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gbV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CisgICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gdmFsdWVMaXN0OworICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkgeworICAgICAgICB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1
ZSkuY29weSgpOworICAgICAgICBhcHBseVRleHREZWNvcmF0aW9uQ2hhbmdlVG9WYWx1ZUxpc3Qo
KnZhbHVlTGlzdCwgdW5kZXJsaW5lQ2hhbmdlLCBzdGQ6Om1vdmUodW5kZXJsaW5lKSk7CisgICAg
ICAgIGFwcGx5VGV4dERlY29yYXRpb25DaGFuZ2VUb1ZhbHVlTGlzdCgqdmFsdWVMaXN0LCBzdHJp
a2VUaHJvdWdoQ2hhbmdlLCBzdGQ6Om1vdmUobGluZVRocm91Z2gpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
CisgICAgICAgIGlmICh1bmRlcmxpbmVDaGFuZ2UgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6OkFk
ZCkKKyAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKHN0ZDo6bW92ZSh1bmRlcmxpbmUpKTsK
KyAgICAgICAgaWYgKHN0cmlrZVRocm91Z2hDaGFuZ2UgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6
OkFkZCkKKyAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKHN0ZDo6bW92ZShsaW5lVGhyb3Vn
aCkpOworICAgIH0KKyAgICBtX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgdmFsdWVMaXN0LmdldCgpKTsKK30KKwogdm9p
ZCBFZGl0aW5nU3R5bGU6OmNsZWFyKCkKIHsKICAgICBtX211dGFibGVTdHlsZS5jbGVhcigpOwog
ICAgIG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUgPSBmYWxzZTsKICAgICBtX2ZvbnRT
aXplRGVsdGEgPSBOb0ZvbnREZWx0YTsKKyAgICBzZXRVbmRlcmxpbmVDaGFuZ2UoVGV4dERlY29y
YXRpb25DaGFuZ2U6Ok5vbmUpOworICAgIHNldFN0cmlrZVRocm91Z2hDaGFuZ2UoVGV4dERlY29y
YXRpb25DaGFuZ2U6Ok5vbmUpOwogfQogCiBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGlu
Z1N0eWxlOjpjb3B5KCkgY29uc3QKQEAgLTU0OSw4ICs2MjEsNyBAQAogICAgIFJlZlB0cjxFZGl0
aW5nU3R5bGU+IGNvcHkgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwogICAgIGlmIChtX211dGFi
bGVTdHlsZSkKICAgICAgICAgY29weS0+bV9tdXRhYmxlU3R5bGUgPSBtX211dGFibGVTdHlsZS0+
bXV0YWJsZUNvcHkoKTsKLSAgICBjb3B5LT5tX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXpl
ID0gbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZTsKLSAgICBjb3B5LT5tX2ZvbnRTaXpl
RGVsdGEgPSBtX2ZvbnRTaXplRGVsdGE7CisgICAgY29weS0+Y29weUFkZGl0aW9uYWxTdHlsZUZy
b20oKnRoaXMpOwogICAgIHJldHVybiBjb3B5OwogfQogCkBAIC02OTQsMTYgKzc2NSw2NyBAQAog
ICAgIHJldHVybiBzdGF0ZTsKIH0KIAotYm9vbCBFZGl0aW5nU3R5bGU6OmNvbmZsaWN0c1dpdGhJ
bmxpbmVTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50LCBFZGl0aW5nU3R5bGUq
IGV4dHJhY3RlZFN0eWxlLCBWZWN0b3I8Q1NTUHJvcGVydHlJRD4qIGNvbmZsaWN0aW5nUHJvcGVy
dGllcykgY29uc3QKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB0ZXh0RGVjb3JhdGlvblZh
bHVlTGlzdChjb25zdCBTdHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMpCiB7CisgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eVRleHREZWNvcmF0aW9uKTsKKyAgICBpZiAoIXZhbHVlIHx8ICFpczxDU1NWYWx1ZUxpc3Q+
KCp2YWx1ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KHZhbHVlLmdldCgpKTsKK30KKworYm9vbCBFZGl0aW5nU3R5bGU6OmNvbmZs
aWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50LCBSZWZQ
dHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4qIG5ld0lubGluZVN0eWxlUHRyLCBFZGl0aW5nU3R5
bGUqIGV4dHJhY3RlZFN0eWxlKSBjb25zdAorewogICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBB
U1NFUlQoIWNvbmZsaWN0aW5nUHJvcGVydGllcyB8fCBjb25mbGljdGluZ1Byb3BlcnRpZXMtPmlz
RW1wdHkoKSk7CiAKICAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMqIGlubGluZVN0eWxlID0gZWxl
bWVudC0+aW5saW5lU3R5bGUoKTsKLSAgICBpZiAoIW1fbXV0YWJsZVN0eWxlIHx8ICFpbmxpbmVT
dHlsZSkKKyAgICBpZiAoIWlubGluZVN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Ym9vbCBjb25mbGljdHMgPSBmYWxzZTsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gbmV3SW5saW5lU3R5bGU7CisgICAgaWYgKG5ld0lubGluZVN0eWxlUHRyKSB7CisgICAgICAg
IG5ld0lubGluZVN0eWxlID0gaW5saW5lU3R5bGUtPm11dGFibGVDb3B5KCk7CisgICAgICAgICpu
ZXdJbmxpbmVTdHlsZVB0ciA9IG5ld0lubGluZVN0eWxlOworICAgIH0KIAotICAgIHVuc2lnbmVk
IHByb3BlcnR5Q291bnQgPSBtX211dGFibGVTdHlsZS0+cHJvcGVydHlDb3VudCgpOworICAgIGJv
b2wgc2hvdWxkUmVtb3ZlVW5kZXJsaW5lID0gdW5kZXJsaW5lQ2hhbmdlKCkgPT0gVGV4dERlY29y
YXRpb25DaGFuZ2U6OlJlbW92ZTsKKyAgICBib29sIHNob3VsZFJlbW92ZVN0cmlrZVRocm91Z2gg
PSBzdHJpa2VUaHJvdWdoQ2hhbmdlKCkgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6OlJlbW92ZTsK
KyAgICBpZiAoc2hvdWxkUmVtb3ZlVW5kZXJsaW5lIHx8IHNob3VsZFJlbW92ZVN0cmlrZVRocm91
Z2gpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlTGlzdCA9IHRleHRE
ZWNvcmF0aW9uVmFsdWVMaXN0KCppbmxpbmVTdHlsZSkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IG5ld1ZhbHVlTGlzdCA9IHZhbHVlTGlzdC0+Y29weSgpOworICAgICAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZXh0cmFjdGVkVmFsdWVMaXN0ID0gQ1NTVmFsdWVMaXN0
OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworCisgICAgICAgICAgICBSZWY8Q1NTUHJpbWl0aXZl
VmFsdWU+IHVuZGVybGluZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVVuZGVybGluZSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlVW5kZXJsaW5l
ICYmIHZhbHVlTGlzdC0+aGFzVmFsdWUodW5kZXJsaW5lLnB0cigpKSkgeworICAgICAgICAgICAg
ICAgIGlmICghbmV3SW5saW5lU3R5bGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIG5ld1ZhbHVlTGlzdC0+cmVtb3ZlQWxsKHVuZGVybGluZS5wdHIo
KSk7CisgICAgICAgICAgICAgICAgZXh0cmFjdGVkVmFsdWVMaXN0LT5hcHBlbmQoc3RkOjptb3Zl
KHVuZGVybGluZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTGluZVRocm91Z2gpOworICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZVN0
cmlrZVRocm91Z2ggJiYgdmFsdWVMaXN0LT5oYXNWYWx1ZShsaW5lVGhyb3VnaC5wdHIoKSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIW5ld0lubGluZVN0eWxlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBuZXdWYWx1ZUxpc3QtPnJlbW92ZUFsbChs
aW5lVGhyb3VnaC5wdHIoKSk7CisgICAgICAgICAgICAgICAgZXh0cmFjdGVkVmFsdWVMaXN0LT5h
cHBlbmQoc3RkOjptb3ZlKGxpbmVUaHJvdWdoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChleHRyYWN0ZWRWYWx1ZUxpc3QtPmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAg
Y29uZmxpY3RzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWVMaXN0LT5sZW5n
dGgoKSkKKyAgICAgICAgICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb24sIG5ld1ZhbHVlTGlzdCk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVydHko
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisKKyAgICAgICAgICAgICAgICBpZiAoZXh0cmFj
dGVkU3R5bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0ltcG9ydGFudCA9IGlubGlu
ZVN0eWxlLT5wcm9wZXJ0eUlzSW1wb3J0YW50KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwor
ICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlUZXh0RGVjb3JhdGlvbiwgZXh0cmFjdGVkVmFsdWVMaXN0LT5jc3NUZXh0KCksIGlzSW1wb3J0
YW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gbV9tdXRhYmxlU3R5bGUgPyBtX211dGFi
bGVTdHlsZS0+cHJvcGVydHlDb3VudCgpIDogMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcHJvcGVydHlDb3VudDsgKytpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCA9IG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0eUF0KGkpLmlkKCk7CiAKQEAgLTcxMiwzNSArODM0
LDM2IEBACiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAocHJvcGVydHlJRCA9
PSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0ICYmIGlubGluZVN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pKSB7Ci0gICAg
ICAgICAgICBpZiAoIWNvbmZsaWN0aW5nUHJvcGVydGllcykKKyAgICAgICAgICAgIGlmICghbmV3
SW5saW5lU3R5bGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBj
b25mbGljdGluZ1Byb3BlcnRpZXMtPmFwcGVuZChDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsK
KyAgICAgICAgICAgIGNvbmZsaWN0cyA9IHRydWU7CisgICAgICAgICAgICBuZXdJbmxpbmVTdHls
ZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CiAgICAgICAgICAg
ICBpZiAoZXh0cmFjdGVkU3R5bGUpCiAgICAgICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIGlubGluZVN0eWxlLT5nZXRQcm9w
ZXJ0eVZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pLCBpbmxpbmVTdHlsZS0+cHJvcGVy
dHlJc0ltcG9ydGFudChDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKSk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW5saW5lU3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUocHJvcGVydHlJRCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICBpZiAocHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpICYmIGlubGluZVN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKSkgewotICAgICAgICAg
ICAgaWYgKCFjb25mbGljdGluZ1Byb3BlcnRpZXMpCisgICAgICAgICAgICBpZiAoIW5ld0lubGlu
ZVN0eWxlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgY29uZmxp
Y3RpbmdQcm9wZXJ0aWVzLT5hcHBlbmQoQ1NTUHJvcGVydHlEaXJlY3Rpb24pOworICAgICAgICAg
ICAgY29uZmxpY3RzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbik7CiAgICAgICAgICAgICBpZiAoZXh0cmFjdGVk
U3R5bGUpCiAgICAgICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPnNldFByb3BlcnR5KHByb3Bl
cnR5SUQsIGlubGluZVN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpLCBpbmxpbmVT
dHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eUlEKSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoIWNvbmZsaWN0aW5nUHJvcGVydGllcykKKyAgICAgICAgaWYgKCFuZXdJbmxpbmVT
dHlsZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGNvbmZsaWN0aW5nUHJv
cGVydGllcy0+YXBwZW5kKHByb3BlcnR5SUQpOwotCisgICAgICAgIGNvbmZsaWN0cyA9IHRydWU7
CisgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKICAg
ICAgICAgaWYgKGV4dHJhY3RlZFN0eWxlKQogICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPnNl
dFByb3BlcnR5KHByb3BlcnR5SUQsIGlubGluZVN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3Bl
cnR5SUQpLCBpbmxpbmVTdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eUlEKSk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGNvbmZsaWN0aW5nUHJvcGVydGllcyAmJiAhY29uZmxpY3RpbmdQ
cm9wZXJ0aWVzLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuIGNvbmZsaWN0czsKIH0KIAogc3RhdGlj
IGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTEVsZW1lbnRFcXVpdmFsZW50Pj4mIGh0
bWxFbGVtZW50RXF1aXZhbGVudHMoKQpAQCAtNzY2LDE0ICs4ODksMTQgQEAKIAogYm9vbCBFZGl0
aW5nU3R5bGU6OmNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxlT2ZFbGVtZW50KEhUTUxFbGVtZW50
KiBlbGVtZW50LCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlLCBTaG91bGRFeHRyYWN0TWF0
Y2hpbmdTdHlsZSBzaG91bGRFeHRyYWN0TWF0Y2hpbmdTdHlsZSkgY29uc3QKIHsKLSAgICBpZiAo
IW1fbXV0YWJsZVN0eWxlKQorICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTEVsZW1lbnRFcXVpdmFs
ZW50Pj4mIEhUTUxFbGVtZW50RXF1aXZhbGVudHMgPSBodG1sRWxlbWVudEVxdWl2YWxlbnRzKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBIVE1MRWxlbWVudEVxdWl2YWxlbnRzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEhUTUxFbGVtZW50RXF1aXZhbGVudCogZXF1aXZhbGVu
dCA9IEhUTUxFbGVtZW50RXF1aXZhbGVudHNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChlcXVpdmFs
ZW50LT5tYXRjaGVzKGVsZW1lbnQpICYmIGVxdWl2YWxlbnQtPnByb3BlcnR5RXhpc3RzSW5TdHls
ZShtX211dGFibGVTdHlsZS5nZXQoKSkKLSAgICAgICAgICAgICYmIChzaG91bGRFeHRyYWN0TWF0
Y2hpbmdTdHlsZSA9PSBFeHRyYWN0TWF0Y2hpbmdTdHlsZSB8fCAhZXF1aXZhbGVudC0+dmFsdWVJ
c1ByZXNlbnRJblN0eWxlKGVsZW1lbnQsIG1fbXV0YWJsZVN0eWxlLmdldCgpKSkpIHsKKyAgICAg
ICAgaWYgKGVxdWl2YWxlbnQtPm1hdGNoZXMoKmVsZW1lbnQpICYmIGVxdWl2YWxlbnQtPnByb3Bl
cnR5RXhpc3RzSW5TdHlsZSgqdGhpcykKKyAgICAgICAgICAgICYmIChzaG91bGRFeHRyYWN0TWF0
Y2hpbmdTdHlsZSA9PSBFeHRyYWN0TWF0Y2hpbmdTdHlsZSB8fCAhZXF1aXZhbGVudC0+dmFsdWVJ
c1ByZXNlbnRJblN0eWxlKCplbGVtZW50LCAqdGhpcykpKSB7CiAgICAgICAgICAgICBpZiAoZXh0
cmFjdGVkU3R5bGUpCiAgICAgICAgICAgICAgICAgZXF1aXZhbGVudC0+YWRkVG9TdHlsZShlbGVt
ZW50LCBleHRyYWN0ZWRTdHlsZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgwMywx
MyArOTI2LDE0IEBACiBib29sIEVkaXRpbmdTdHlsZTo6Y29uZmxpY3RzV2l0aEltcGxpY2l0U3R5
bGVPZkF0dHJpYnV0ZXMoSFRNTEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGVsZW1lbnQpOwotICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCisgICAgaWYgKGlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxIVE1MQXR0cmlidXRlRXF1aXZhbGVudD4+JiBIVE1MQXR0cmlidXRlRXF1aXZhbGVudHMgPSBo
dG1sQXR0cmlidXRlRXF1aXZhbGVudHMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhU
TUxBdHRyaWJ1dGVFcXVpdmFsZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoSFRNTEF0
dHJpYnV0ZUVxdWl2YWxlbnRzW2ldLT5tYXRjaGVzKGVsZW1lbnQpICYmIEhUTUxBdHRyaWJ1dGVF
cXVpdmFsZW50c1tpXS0+cHJvcGVydHlFeGlzdHNJblN0eWxlKG1fbXV0YWJsZVN0eWxlLmdldCgp
KQotICAgICAgICAgICAgJiYgIUhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS0+dmFsdWVJc1By
ZXNlbnRJblN0eWxlKGVsZW1lbnQsIG1fbXV0YWJsZVN0eWxlLmdldCgpKSkKKyAgICAgICAgaWYg
KEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS0+bWF0Y2hlcygqZWxlbWVudCkKKyAgICAgICAg
ICAgICYmIEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS0+cHJvcGVydHlFeGlzdHNJblN0eWxl
KCp0aGlzKQorICAgICAgICAgICAgJiYgIUhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS0+dmFs
dWVJc1ByZXNlbnRJblN0eWxlKCplbGVtZW50LCAqdGhpcykpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTgzNCw4ICs5NTgsOCBAQAogICAgICAgICBpZiAoc2hvdWxkUHJl
c2VydmVXcml0aW5nRGlyZWN0aW9uID09IFByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbiAmJiBlcXVp
dmFsZW50LT5hdHRyaWJ1dGVOYW1lKCkgPT0gSFRNTE5hbWVzOjpkaXJBdHRyKQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKCFlcXVpdmFsZW50LT5tYXRjaGVzKGVsZW1lbnQp
IHx8ICFlcXVpdmFsZW50LT5wcm9wZXJ0eUV4aXN0c0luU3R5bGUobV9tdXRhYmxlU3R5bGUuZ2V0
KCkpCi0gICAgICAgICAgICB8fCAoc2hvdWxkRXh0cmFjdE1hdGNoaW5nU3R5bGUgPT0gRG9Ob3RF
eHRyYWN0TWF0Y2hpbmdTdHlsZSAmJiBlcXVpdmFsZW50LT52YWx1ZUlzUHJlc2VudEluU3R5bGUo
ZWxlbWVudCwgbV9tdXRhYmxlU3R5bGUuZ2V0KCkpKSkKKyAgICAgICAgaWYgKCFlcXVpdmFsZW50
LT5tYXRjaGVzKCplbGVtZW50KSB8fCAhZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxl
KCp0aGlzKQorICAgICAgICAgICAgfHwgKHNob3VsZEV4dHJhY3RNYXRjaGluZ1N0eWxlID09IERv
Tm90RXh0cmFjdE1hdGNoaW5nU3R5bGUgJiYgZXF1aXZhbGVudC0+dmFsdWVJc1ByZXNlbnRJblN0
eWxlKCplbGVtZW50LCAqdGhpcykpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
aWYgKGV4dHJhY3RlZFN0eWxlKQpAQCAtODQ5LDEwICs5NzMsMjcgQEAKIAogYm9vbCBFZGl0aW5n
U3R5bGU6OnN0eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxlT2ZOb2RlKE5vZGUqIG5vZGUpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX211dGFibGVTdHlsZSkKKyAgICBpZiAoaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBDb21wdXRlZFN0eWxlRXh0cmFjdG9yIGNvbXB1dGVkU3R5
bGUobm9kZSk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnRpZXNOb3RJbigqbV9tdXRhYmxlU3R5bGUs
IGNvbXB1dGVkU3R5bGUpLT5pc0VtcHR5KCk7CisKKyAgICBib29sIHNob3VsZEFkZFVuZGVybGlu
ZSA9IHVuZGVybGluZUNoYW5nZSgpID09IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQ7CisgICAg
Ym9vbCBzaG91bGRBZGRMaW5lVGhyb3VnaCA9IHN0cmlrZVRocm91Z2hDaGFuZ2UoKSA9PSBUZXh0
RGVjb3JhdGlvbkNoYW5nZTo6QWRkOworICAgIGlmIChzaG91bGRBZGRVbmRlcmxpbmUgfHwgc2hv
dWxkQWRkTGluZVRocm91Z2gpIHsKKyAgICAgICAgYm9vbCBoYXNVbmRlcmxpbmUgPSBmYWxzZTsK
KyAgICAgICAgYm9vbCBoYXNMaW5lVGhyb3VnaCA9IGZhbHNlOworICAgICAgICBpZiAoUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IGNvbXB1dGVkU3R5bGUucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eVRleHREZWNvcmF0aW9uKSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgp
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSBkb3du
Y2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgaGFzVW5kZXJsaW5l
ID0gdmFsdWVMaXN0Lmhhc1ZhbHVlKCZjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVVbmRlcmxpbmUpLmdldCgpKTsKKyAgICAgICAgICAgICAgICBoYXNMaW5lVGhy
b3VnaCA9IHZhbHVlTGlzdC5oYXNWYWx1ZSgmY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpLmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoKHNob3VsZEFkZFVuZGVybGluZSAmJiAhaGFzVW5kZXJsaW5lKSB8
fCAoc2hvdWxkQWRkTGluZVRocm91Z2ggJiYgIWhhc0xpbmVUaHJvdWdoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gIW1fbXV0YWJsZVN0eWxlIHx8IGdl
dFByb3BlcnRpZXNOb3RJbigqbV9tdXRhYmxlU3R5bGUsIGNvbXB1dGVkU3R5bGUpLT5pc0VtcHR5
KCk7CiB9CiAKIGJvb2wgRWRpdGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1
aXZhbGVudChjb25zdCBIVE1MRWxlbWVudCogZWxlbWVudCkKQEAgLTg2NCw3ICsxMDA1LDcgQEAK
ICAgICAgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxIVE1MRWxlbWVudEVxdWl2YWxl
bnQ+PiYgSFRNTEVsZW1lbnRFcXVpdmFsZW50cyA9IGh0bWxFbGVtZW50RXF1aXZhbGVudHMoKTsK
ICAgICAgICAgc2l6ZV90IGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBIVE1MRWxlbWVudEVx
dWl2YWxlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoSFRNTEVsZW1lbnRFcXVp
dmFsZW50c1tpXS0+bWF0Y2hlcyhlbGVtZW50KSkgeworICAgICAgICAgICAgaWYgKEhUTUxFbGVt
ZW50RXF1aXZhbGVudHNbaV0tPm1hdGNoZXMoKmVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAg
ZWxlbWVudElzU3Bhbk9yRWxlbWVudEVxdWl2YWxlbnQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtODc3LDcgKzEwMTgsNyBAQAogICAgIHVuc2lnbmVk
IG1hdGNoZWRBdHRyaWJ1dGVzID0gMDsKICAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50Pj4mIEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50cyA9IGh0
bWxBdHRyaWJ1dGVFcXVpdmFsZW50cygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSFRN
TEF0dHJpYnV0ZUVxdWl2YWxlbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChIVE1MQXR0
cmlidXRlRXF1aXZhbGVudHNbaV0tPm1hdGNoZXMoZWxlbWVudCkgJiYgSFRNTEF0dHJpYnV0ZUVx
dWl2YWxlbnRzW2ldLT5hdHRyaWJ1dGVOYW1lKCkgIT0gSFRNTE5hbWVzOjpkaXJBdHRyKQorICAg
ICAgICBpZiAoSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnRzW2ldLT5tYXRjaGVzKCplbGVtZW50KSAm
JiBIVE1MQXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPmF0dHJpYnV0ZU5hbWUoKSAhPSBIVE1MTmFt
ZXM6OmRpckF0dHIpCiAgICAgICAgICAgICBtYXRjaGVkQXR0cmlidXRlcysrOwogICAgIH0KIApA
QCAtOTY5LDEwICsxMTEwLDE0IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50TWF0
Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChjb25zdCBIVE1MRWxlbWVudEVx
dWl2YWxlbnQqIGVxdWl2YWxlbnQsIGNvbnN0IFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsCi0gICAg
RWRpdGluZ1N0eWxlOjpDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSBtb2RlLCBTdHlsZVByb3BlcnRp
ZXMqIHN0eWxlKQorICAgIEVkaXRpbmdTdHlsZTo6Q1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9k
ZSwgRWRpdGluZ1N0eWxlJiBzdHlsZSkKIHsKLSAgICByZXR1cm4gZXF1aXZhbGVudC0+bWF0Y2hl
cyhlbGVtZW50KSAmJiAoIWVsZW1lbnQtPmlubGluZVN0eWxlKCkgfHwgIWVxdWl2YWxlbnQtPnBy
b3BlcnR5RXhpc3RzSW5TdHlsZShlbGVtZW50LT5pbmxpbmVTdHlsZSgpKSkKLSAgICAgICAgJiYg
KG1vZGUgPT0gRWRpdGluZ1N0eWxlOjpPdmVycmlkZVZhbHVlcyB8fCAhZXF1aXZhbGVudC0+cHJv
cGVydHlFeGlzdHNJblN0eWxlKHN0eWxlKSk7CisgICAgaWYgKCFlcXVpdmFsZW50LT5tYXRjaGVz
KCplbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtb2RlICE9IEVkaXRp
bmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMgJiYgZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0
eWxlKHN0eWxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICFlbGVtZW50
LT5pbmxpbmVTdHlsZSgpIHx8ICFlcXVpdmFsZW50LT5wcm9wZXJ0eUV4aXN0c0luU3R5bGUoRWRp
dGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVudC0+aW5saW5lU3R5bGUoKSkuZ2V0KCkpOwogfQogCiBz
dGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBleHRyYWN0RWRpdGluZ1By
b3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdGluZ1N0eWxlOjpQcm9w
ZXJ0aWVzVG9JbmNsdWRlIHByb3BlcnRpZXNUb0luY2x1ZGUpCkBAIC0xMDA1LDcgKzExNTAsNyBA
QAogCiAgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxIVE1MRWxlbWVudEVxdWl2YWxl
bnQ+PiYgZWxlbWVudEVxdWl2YWxlbnRzID0gaHRtbEVsZW1lbnRFcXVpdmFsZW50cygpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZWxlbWVudEVxdWl2YWxlbnRzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChlbGVtZW50TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxl
RGVjbChlbGVtZW50RXF1aXZhbGVudHNbaV0uZ2V0KCksIGVsZW1lbnQsIG1vZGUsIG1fbXV0YWJs
ZVN0eWxlLmdldCgpKSkKKyAgICAgICAgaWYgKGVsZW1lbnRNYXRjaGVzQW5kUHJvcGVydHlJc05v
dEluSW5saW5lU3R5bGVEZWNsKGVsZW1lbnRFcXVpdmFsZW50c1tpXS5nZXQoKSwgZWxlbWVudCwg
bW9kZSwgKnRoaXMpKQogICAgICAgICAgICAgZWxlbWVudEVxdWl2YWxlbnRzW2ldLT5hZGRUb1N0
eWxlKGVsZW1lbnQsIHRoaXMpOwogICAgIH0KIApAQCAtMTAxMyw3ICsxMTU4LDcgQEAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dHJpYnV0ZUVxdWl2YWxlbnRzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIGlmIChhdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS0+YXR0cmlidXRlTmFtZSgpID09
IEhUTUxOYW1lczo6ZGlyQXR0cikKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBXZSBkb24ndCB3
YW50IHRvIGluY2x1ZGUgZGlyZWN0aW9uYWxpdHkKLSAgICAgICAgaWYgKGVsZW1lbnRNYXRjaGVz
QW5kUHJvcGVydHlJc05vdEluSW5saW5lU3R5bGVEZWNsKGF0dHJpYnV0ZUVxdWl2YWxlbnRzW2ld
LmdldCgpLCBlbGVtZW50LCBtb2RlLCBtX211dGFibGVTdHlsZS5nZXQoKSkpCisgICAgICAgIGlm
IChlbGVtZW50TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChhdHRyaWJ1
dGVFcXVpdmFsZW50c1tpXS5nZXQoKSwgZWxlbWVudCwgbW9kZSwgKnRoaXMpKQogICAgICAgICAg
ICAgYXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPmFkZFRvU3R5bGUoZWxlbWVudCwgdGhpcyk7CiAg
ICAgfQogfQpAQCAtMTA0OSwxNiArMTE5NCwxNiBAQAogfQogCiAKLXN0YXRpYyB2b2lkIG1lcmdl
VGV4dERlY29yYXRpb25WYWx1ZXMoQ1NTVmFsdWVMaXN0KiBtZXJnZWRWYWx1ZSwgY29uc3QgQ1NT
VmFsdWVMaXN0KiB2YWx1ZVRvTWVyZ2UpCitzdGF0aWMgdm9pZCBtZXJnZVRleHREZWNvcmF0aW9u
VmFsdWVzKENTU1ZhbHVlTGlzdCYgbWVyZ2VkVmFsdWUsIGNvbnN0IENTU1ZhbHVlTGlzdCYgdmFs
dWVUb01lcmdlKQogewogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdW5kZXJsaW5lID0g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5kZXJsaW5lKTsK
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpOwogCi0gICAgaWYg
KHZhbHVlVG9NZXJnZS0+aGFzVmFsdWUodW5kZXJsaW5lLmdldCgpKSAmJiAhbWVyZ2VkVmFsdWUt
Pmhhc1ZhbHVlKHVuZGVybGluZS5nZXQoKSkpCi0gICAgICAgIG1lcmdlZFZhbHVlLT5hcHBlbmQo
dW5kZXJsaW5lLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICh2YWx1ZVRvTWVyZ2UuaGFzVmFs
dWUodW5kZXJsaW5lLmdldCgpKSAmJiAhbWVyZ2VkVmFsdWUuaGFzVmFsdWUodW5kZXJsaW5lLmdl
dCgpKSkKKyAgICAgICAgbWVyZ2VkVmFsdWUuYXBwZW5kKHVuZGVybGluZS5yZWxlYXNlTm9uTnVs
bCgpKTsKIAotICAgIGlmICh2YWx1ZVRvTWVyZ2UtPmhhc1ZhbHVlKGxpbmVUaHJvdWdoLmdldCgp
KSAmJiAhbWVyZ2VkVmFsdWUtPmhhc1ZhbHVlKGxpbmVUaHJvdWdoLmdldCgpKSkKLSAgICAgICAg
bWVyZ2VkVmFsdWUtPmFwcGVuZChsaW5lVGhyb3VnaC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBp
ZiAodmFsdWVUb01lcmdlLmhhc1ZhbHVlKGxpbmVUaHJvdWdoLmdldCgpKSAmJiAhbWVyZ2VkVmFs
dWUuaGFzVmFsdWUobGluZVRocm91Z2guZ2V0KCkpKQorICAgICAgICBtZXJnZWRWYWx1ZS5hcHBl
bmQobGluZVRocm91Z2gucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIHZvaWQgRWRpdGluZ1N0eWxl
OjptZXJnZVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUsIENTU1Byb3BlcnR5T3Zl
cnJpZGVNb2RlIG1vZGUpCkBAIC0xMDc3LDE2ICsxMjIyLDE5IEBACiAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUgPSBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9w
ZXJ0eS5pZCgpKTsKIAogICAgICAgICAvLyB0ZXh0IGRlY29yYXRpb25zIG5ldmVyIG92ZXJyaWRl
IHZhbHVlcy4KLSAgICAgICAgaWYgKChwcm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5VGV4dERl
Y29yYXRpb24gfHwgcHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0
aW9uc0luRWZmZWN0KSAmJiBwcm9wZXJ0eS52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpICYmIHZhbHVl
KSB7CisgICAgICAgIGlmICgocHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uIHx8IHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdCkKKyAgICAgICAgICAgICYmIGlzPENTU1ZhbHVlTGlzdD4oKnByb3BlcnR5LnZhbHVl
KCkpICYmIHZhbHVlKSB7CiAgICAgICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
KSB7Ci0gICAgICAgICAgICAgICAgbWVyZ2VUZXh0RGVjb3JhdGlvblZhbHVlcyhkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KHZhbHVlLmdldCgpKSwgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pihwcm9wZXJ0
eS52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbmV3VmFs
dWUgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkuY29weSgpOworICAgICAgICAgICAg
ICAgIG1lcmdlVGV4dERlY29yYXRpb25WYWx1ZXMoKm5ld1ZhbHVlLCBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCpwcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgbV9tdXRhYmxlU3R5
bGUtPnNldFByb3BlcnR5KHByb3BlcnR5LmlkKCksIG5ld1ZhbHVlLnJlbGVhc2UoKSwgcHJvcGVy
dHkuaXNJbXBvcnRhbnQoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB2YWx1ZSA9IG51bGxwdHI7IC8vIHRleHQtZGVjb3JhdGlvbjogbm9u
ZSBpcyBlcXVpdmFsZW50IHRvIG5vdCBoYXZpbmcgdGhlIHByb3BlcnR5LgogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKG1vZGUgPT0gT3ZlcnJpZGVWYWx1ZXMgfHwgKG1vZGUgPT0gRG9Ob3RPdmVy
cmlkZVZhbHVlcyAmJiAhdmFsdWUpKQotICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFBy
b3BlcnR5KHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCktPmNzc1RleHQoKSwgcHJvcGVy
dHkuaXNJbXBvcnRhbnQoKSk7CisgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+c2V0UHJvcGVy
dHkocHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFsdWUoKSwgcHJvcGVydHkuaXNJbXBvcnRhbnQo
KSk7CiAgICAgfQogCiAgICAgaW50IG9sZEZvbnRTaXplRGVsdGEgPSBtX2ZvbnRTaXplRGVsdGE7
CkBAIC0xMzk3LDggKzE1NDUsOCBAQAogICAgICwgbV9hcHBseVN1YnNjcmlwdChmYWxzZSkKICAg
ICAsIG1fYXBwbHlTdXBlcnNjcmlwdChmYWxzZSkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBwb3NpdGlvbi5hbmNob3JOb2RlKCkgPyAmcG9zaXRpb24uYW5jaG9yTm9kZSgpLT5kb2N1bWVu
dCgpIDogMDsKLSAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+c3R5bGUoKSB8fCAhZG9jdW1lbnQg
fHwgIWRvY3VtZW50LT5mcmFtZSgpKQorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHBvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCkgPyAmcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+ZG9jdW1lbnQo
KSA6IDA7CisgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFkb2N1bWVudCB8
fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5vZGUg
PSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CkBAIC0xNDA4LDEyICsxNTU2LDQ0IEBACiAgICAg
Q29tcHV0ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0eWxlKG5vZGUpOwogCiAgICAgLy8gRklY
TUU6IHRha2UgY2FyZSBvZiBiYWNrZ3JvdW5kLWNvbG9yIGluIGVmZmVjdAotICAgIFJlZlB0cjxN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBtdXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVzTm90SW4o
KnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKTsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gbXV0YWJsZVN0eWxlID0gc3R5bGUtPnN0eWxlKCkgPworICAgICAgICBnZXRQ
cm9wZXJ0aWVzTm90SW4oKnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKSA6IE11dGFibGVT
dHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29yYXRpb25Q
cm9wZXJ0aWVzKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0gICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUo
KS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCkpCisgICAgYm9vbCBzaG91bGRTdHlsZVdp
dGhDU1MgPSBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCk7
CisgICAgaWYgKCFzaG91bGRTdHlsZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVz
KGRvY3VtZW50LCAqbXV0YWJsZVN0eWxlLCBjb21wdXRlZFN0eWxlLnVzZUZpeGVkRm9udERlZmF1
bHRTaXplKCkpOwogCisgICAgYm9vbCBzaG91bGRBZGRVbmRlcmxpbmUgPSBzdHlsZS0+dW5kZXJs
aW5lQ2hhbmdlKCkgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6OkFkZDsKKyAgICBib29sIHNob3Vs
ZEFkZFN0cmlrZVRocm91Z2ggPSBzdHlsZS0+c3RyaWtlVGhyb3VnaENoYW5nZSgpID09IFRleHRE
ZWNvcmF0aW9uQ2hhbmdlOjpBZGQ7CisgICAgaWYgKHNob3VsZEFkZFVuZGVybGluZSB8fCBzaG91
bGRBZGRTdHJpa2VUaHJvdWdoKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBj
b21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCk7CisgICAgICAgIGlmICghdmFsdWUgfHwgIWlzPENTU1ZhbHVlTGlzdD4oKnZh
bHVlKSkKKyAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0eVZhbHVlKENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworCisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IHZhbHVlTGlzdDsKKyAgICAgICAgaWYgKHZhbHVlICYmIGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVl
KSkKKyAgICAgICAgICAgIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUu
Z2V0KCkpOworCisgICAgICAgIFJlZjxDU1NWYWx1ZT4gdW5kZXJsaW5lID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5kZXJsaW5lKTsKKyAgICAgICAgYm9v
bCBoYXNVbmRlcmxpbmUgPSB2YWx1ZUxpc3QgJiYgdmFsdWVMaXN0LT5oYXNWYWx1ZSh1bmRlcmxp
bmUucHRyKCkpOworCisgICAgICAgIFJlZjxDU1NWYWx1ZT4gbGluZVRocm91Z2ggPSBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCk7CisgICAg
ICAgIGJvb2wgaGFzTGluZVRocm91Z2ggPSB2YWx1ZUxpc3QgJiYgdmFsdWVMaXN0LT5oYXNWYWx1
ZShsaW5lVGhyb3VnaC5wdHIoKSk7CisKKyAgICAgICAgaWYgKHNob3VsZFN0eWxlV2l0aENTUykg
eworICAgICAgICAgICAgdmFsdWVMaXN0ID0gdmFsdWVMaXN0ID8gdmFsdWVMaXN0LT5jb3B5KCkg
OiBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgICAgICAgICBpZiAo
c2hvdWxkQWRkVW5kZXJsaW5lICYmICFoYXNVbmRlcmxpbmUpCisgICAgICAgICAgICAgICAgdmFs
dWVMaXN0LT5hcHBlbmQoc3RkOjptb3ZlKHVuZGVybGluZSkpOworICAgICAgICAgICAgaWYgKHNo
b3VsZEFkZFN0cmlrZVRocm91Z2ggJiYgIWhhc0xpbmVUaHJvdWdoKQorICAgICAgICAgICAgICAg
IHZhbHVlTGlzdC0+YXBwZW5kKHN0ZDo6bW92ZShsaW5lVGhyb3VnaCkpOworICAgICAgICAgICAg
bXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCB2YWx1
ZUxpc3QuZ2V0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9hcHBseVVuZGVy
bGluZSA9IHNob3VsZEFkZFVuZGVybGluZSAmJiAhaGFzVW5kZXJsaW5lOworICAgICAgICAgICAg
bV9hcHBseUxpbmVUaHJvdWdoID0gc2hvdWxkQWRkU3RyaWtlVGhyb3VnaCAmJiAhaGFzTGluZVRo
cm91Z2g7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBDaGFuZ2luZyB0aGUgd2hpdGVzcGFj
ZSBzdHlsZSBpbiBhIHRhYiBzcGFuIHdvdWxkIGNvbGxhcHNlIHRoZSB0YWIgaW50byBhIHNwYWNl
LgogICAgIGlmIChpc1RhYlNwYW5UZXh0Tm9kZShwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSB8
fCBpc1RhYlNwYW5Ob2RlKChwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkpCiAgICAgICAgIG11
dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXaGl0ZVNwYWNlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMTgzNDk3KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJX
cml0aW5nRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UcmlTdGF0ZS5oPgpAQCAtNjEsOSArNjIsMTAgQEAK
IGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCitlbnVtIGNs
YXNzIFRleHREZWNvcmF0aW9uQ2hhbmdlIHsgTm9uZSwgQWRkLCBSZW1vdmUgfTsKKwogY2xhc3Mg
RWRpdGluZ1N0eWxlIDogcHVibGljIFJlZkNvdW50ZWQ8RWRpdGluZ1N0eWxlPiB7CiBwdWJsaWM6
Ci0KICAgICBlbnVtIFByb3BlcnRpZXNUb0luY2x1ZGUgeyBBbGxQcm9wZXJ0aWVzLCBPbmx5RWRp
dGluZ0luaGVyaXRhYmxlUHJvcGVydGllcywgRWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdCB9Owog
CiAgICAgZW51bSBTaG91bGRQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24geyBQcmVzZXJ2ZVdyaXRp
bmdEaXJlY3Rpb24sIERvTm90UHJlc2VydmVXcml0aW5nRGlyZWN0aW9uIH07CkBAIC05NSw2ICs5
NywxMSBAQAogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFZGl0aW5nU3R5bGUocHJvcGVy
dHlJRCwgdmFsdWUpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVmPEVkaXRpbmdTdHlsZT4gY3Jl
YXRlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWVJRCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVkaXRpbmdTdHlsZShwcm9wZXJ0eUlELCB2YWx1
ZSkpOworICAgIH0KKwogICAgIFdFQkNPUkVfRVhQT1JUIH5FZGl0aW5nU3R5bGUoKTsKIAogICAg
IE11dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlKCkgeyByZXR1cm4gbV9tdXRhYmxlU3R5bGUu
Z2V0KCk7IH0KQEAgLTEwMiw2ICsxMDksNyBAQAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPik7CiAg
ICAgdm9pZCBvdmVycmlkZVdpdGhTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMqKTsKKyAgICB2
b2lkIG92ZXJyaWRlVHlwaW5nU3R5bGVBdChjb25zdCBFZGl0aW5nU3R5bGUmLCBjb25zdCBQb3Np
dGlvbiYpOwogICAgIHZvaWQgY2xlYXIoKTsKICAgICBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4g
Y29weSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBleHRyYWN0QW5kUmVt
b3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CkBAIC0xMTUsOSArMTIzLDEwIEBACiAgICAgVHJpU3RhdGUg
dHJpU3RhdGVPZlN0eWxlKEVkaXRpbmdTdHlsZSopIGNvbnN0OwogICAgIFRyaVN0YXRlIHRyaVN0
YXRlT2ZTdHlsZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CiAgICAgYm9vbCBjb25m
bGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29u
c3QgeyByZXR1cm4gY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50KGVsZW1lbnQsIDAs
IDApOyB9Ci0gICAgYm9vbCBjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVk
RWxlbWVudCogZWxlbWVudCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSwgVmVjdG9yPENT
U1Byb3BlcnR5SUQ+JiBjb25mbGljdGluZ1Byb3BlcnRpZXMpIGNvbnN0CisgICAgYm9vbCBjb25m
bGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCwgUmVm
UHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+JiBuZXdJbmxpbmVTdHlsZSwKKyAgICAgICAgRWRp
dGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBj
b25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoZWxlbWVudCwgZXh0cmFjdGVkU3R5bGUs
ICZjb25mbGljdGluZ1Byb3BlcnRpZXMpOworICAgICAgICByZXR1cm4gY29uZmxpY3RzV2l0aElu
bGluZVN0eWxlT2ZFbGVtZW50KGVsZW1lbnQsICZuZXdJbmxpbmVTdHlsZSwgZXh0cmFjdGVkU3R5
bGUpOwogICAgIH0KICAgICBib29sIGNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxlT2ZFbGVtZW50
KEhUTUxFbGVtZW50KiwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSA9IDAsIFNob3VsZEV4
dHJhY3RNYXRjaGluZ1N0eWxlID0gRG9Ob3RFeHRyYWN0TWF0Y2hpbmdTdHlsZSkgY29uc3Q7CiAg
ICAgYm9vbCBjb25mbGljdHNXaXRoSW1wbGljaXRTdHlsZU9mQXR0cmlidXRlcyhIVE1MRWxlbWVu
dCopIGNvbnN0OwpAQCAtMTQ0LDYgKzE1MywxMSBAQAogICAgIGZsb2F0IGZvbnRTaXplRGVsdGEo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRTaXplRGVsdGE7IH0KICAgICBib29sIGhhc0ZvbnRTaXpl
RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRTaXplRGVsdGEgIT0gTm9Gb250RGVsdGE7IH0K
ICAgICBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZTsgfQorICAgIAorICAgIHZvaWQgc2V0VW5k
ZXJsaW5lQ2hhbmdlKFRleHREZWNvcmF0aW9uQ2hhbmdlIGNoYW5nZSkgeyBtX3VuZGVybGluZUNo
YW5nZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGFuZ2UpOyB9CisgICAgVGV4dERlY29yYXRp
b25DaGFuZ2UgdW5kZXJsaW5lQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4
dERlY29yYXRpb25DaGFuZ2U+KG1fdW5kZXJsaW5lQ2hhbmdlKTsgfQorICAgIHZvaWQgc2V0U3Ry
aWtlVGhyb3VnaENoYW5nZShUZXh0RGVjb3JhdGlvbkNoYW5nZSBjaGFuZ2UpIHsgbV9zdHJpa2VU
aHJvdWdoQ2hhbmdlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYW5nZSk7IH0KKyAgICBUZXh0
RGVjb3JhdGlvbkNoYW5nZSBzdHJpa2VUaHJvdWdoQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VGV4dERlY29yYXRpb25DaGFuZ2U+KG1fc3RyaWtlVGhyb3VnaENoYW5nZSk7IH0K
IAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGVBdFNlbGVjdGlvblN0
YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIHNob3VsZFVzZUJhY2tncm91bmRDb2xv
ckluRWZmZWN0ID0gZmFsc2UpOwogICAgIHN0YXRpYyBXcml0aW5nRGlyZWN0aW9uIHRleHREaXJl
Y3Rpb25Gb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIEVkaXRpbmdTdHlsZSog
dHlwaW5nU3R5bGUsIGJvb2wmIGhhc05lc3RlZE9yTXVsdGlwbGVFbWJlZGRpbmdzKTsKQEAgLTE1
MywyMSArMTY3LDMzIEBACiAgICAgRWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJiwgUHJvcGVy
dGllc1RvSW5jbHVkZSk7CiAgICAgZXhwbGljaXQgRWRpdGluZ1N0eWxlKGNvbnN0IFN0eWxlUHJv
cGVydGllcyopOwogICAgIEVkaXRpbmdTdHlsZShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlKTsKKyAgICBFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWVJRCk7CiAg
ICAgdm9pZCBpbml0KE5vZGUqLCBQcm9wZXJ0aWVzVG9JbmNsdWRlKTsKICAgICB2b2lkIHJlbW92
ZVRleHRGaWxsQW5kU3Ryb2tlQ29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAgICB2b2lk
IHNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50ID0gZmFsc2UpOwogICAgIHZvaWQgZXh0cmFjdEZvbnRTaXplRGVsdGEoKTsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoVCYgc3R5bGVUb0Nv
bXBhcmUsIFNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3Q7Ci0gICAgYm9vbCBj
b25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCosIEVkaXRpbmdT
dHlsZSogZXh0cmFjdGVkU3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiogY29uZmxpY3RpbmdQ
cm9wZXJ0aWVzKSBjb25zdDsKKyAgICBib29sIGNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxl
bWVudChTdHlsZWRFbGVtZW50KiwgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+KiBuZXdJ
bmxpbmVTdHlsZSwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSkgY29uc3Q7CiAgICAgdm9p
ZCBtZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCosIENT
U1Byb3BlcnR5T3ZlcnJpZGVNb2RlLCBQcm9wZXJ0aWVzVG9JbmNsdWRlKTsKICAgICB2b2lkIG1l
cmdlU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUp
OwogCisgICAgdm9pZCBjb3B5QWRkaXRpb25hbFN0eWxlRnJvbShjb25zdCBFZGl0aW5nU3R5bGUm
IHNvdXJjZSkKKyAgICB7CisgICAgICAgIG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUg
PSBzb3VyY2UubV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZTsKKyAgICAgICAgbV91bmRl
cmxpbmVDaGFuZ2UgPSBzb3VyY2UubV91bmRlcmxpbmVDaGFuZ2U7CisgICAgICAgIG1fc3RyaWtl
VGhyb3VnaENoYW5nZSA9IHNvdXJjZS5tX3N0cmlrZVRocm91Z2hDaGFuZ2U7CisgICAgICAgIG1f
Zm9udFNpemVEZWx0YSA9IHNvdXJjZS5tX2ZvbnRTaXplRGVsdGE7CisgICAgfQorCiAgICAgUmVm
UHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG1fbXV0YWJsZVN0eWxlOwotICAgIGJvb2wgbV9z
aG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZTsKKyAgICB1bnNpZ25lZCBtX3Nob3VsZFVzZUZp
eGVkRGVmYXVsdEZvbnRTaXplIDogMTsKKyAgICB1bnNpZ25lZCBtX3VuZGVybGluZUNoYW5nZSA6
IDI7CisgICAgdW5zaWduZWQgbV9zdHJpa2VUaHJvdWdoQ2hhbmdlIDogMjsKICAgICBmbG9hdCBt
X2ZvbnRTaXplRGVsdGE7CiAKICAgICBmcmllbmQgY2xhc3MgSFRNTEVsZW1lbnRFcXVpdmFsZW50
OwogICAgIGZyaWVuZCBjbGFzcyBIVE1MQXR0cmlidXRlRXF1aXZhbGVudDsKKyAgICBmcmllbmQg
Y2xhc3MgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDsKIH07CiAKIGNsYXNzIFN0eWxlQ2hh
bmdlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDE4MzQ5NykK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODg3LDcgKzg4Nyw3IEBACiAgICAgICAgIC8vIGRvIG5vdGhpbmcKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKLSAgICAgICAgY29tcHV0
ZUFuZFNldFR5cGluZ1N0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKKyAgICAgICAgY29tcHV0
ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHN0eWxlKSwgZWRpdGluZ0Fj
dGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VT
ZWxlY3Rpb246CiAgICAgICAgIGlmIChzdHlsZSkKQEAgLTg5NSw2ICs4OTUsMjMgQEAKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogfQorCit2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShSZWZQdHI8RWRp
dGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCit7CisgICAgc3dp
dGNoIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSkgewor
ICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CisgICAgICAgIC8vIGRvIG5v
dGhpbmcKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNl
bGVjdGlvbjoKKyAgICAgICAgLy8gRklYTUU6IFBhc3MgaW4gRWRpdGluZ1N0eWxlIGhlcmUuCisg
ICAgICAgIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZSgqc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9u
OgorICAgICAgICBpZiAoc3R5bGUpCisgICAgICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHls
ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbikp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CiAgICAgCiBib29sIEVkaXRvcjo6c2hvdWxkQXBw
bHlTdHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBSYW5nZSogcmFuZ2UpCiB7ICAgCkBAIC05
MjQsNiArOTQxLDE2IEBACiAgICAgICAgIGFwcGx5U3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24p
OwogfQogCit2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFJlZlB0cjxFZGl0aW5n
U3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK3sKKyAgICBpZiAoIXN0
eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgZm9yIHRleHQgZGVjb3JhdGlvbnMg
c2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHkuCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVu
dCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZSgpLCBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgICAgICBhcHBseVN0eWxlKFdURjo6bW92
ZShzdHlsZSksIGVkaXRpbmdBY3Rpb24pOworfQorCiB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3Jh
cGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRp
dGluZ0FjdGlvbikKIHsKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNh
bkVkaXRSaWNobHkoKSkKQEAgLTI5NTIsMjMgKzI5NzksMjEgQEAKICAgICByZXR1cm4gY2xpZW50
KCkgJiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwogfQogCi12b2lkIEVkaXRvcjo6Y29t
cHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24g
ZWRpdGluZ0FjdGlvbikKK3ZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRp
dGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewotICAgIGlmICgh
c3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSkgeworICAgIGlmIChzdHlsZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5jbGVhclR5cGluZ1N0eWxlKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGN1cnJlbnQgdHlwaW5nIHN0
eWxlLgogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlOwotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpIHsKLSAgICAgICAgdHlwaW5nU3R5bGUgPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCktPmNvcHkoKTsKLSAgICAgICAgdHlwaW5n
U3R5bGUtPm92ZXJyaWRlV2l0aFN0eWxlKHN0eWxlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdHlw
aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShzdHlsZSk7CisgICAgaWYgKGF1dG8gZXhp
c3RpbmdUeXBpbmdTdHlsZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkKKyAg
ICAgICAgdHlwaW5nU3R5bGUgPSBleGlzdGluZ1R5cGluZ1N0eWxlLT5jb3B5KCk7CisgICAgZWxz
ZQorICAgICAgICB0eXBpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CisgICAgdHlw
aW5nU3R5bGUtPm92ZXJyaWRlVHlwaW5nU3R5bGVBdChzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKIAotICAgIHR5
cGluZ1N0eWxlLT5wcmVwYXJlVG9BcHBseUF0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2
ZVdyaXRpbmdEaXJlY3Rpb24pOwotCiAgICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxlcywgc3Vic3Ry
YWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBibG9ja1N0eWxlID0gdHlwaW5nU3R5bGUtPmV4dHJhY3RBbmRSZW1vdmVCbG9ja1Byb3Bl
cnRpZXMoKTsKICAgICBpZiAoIWJsb2NrU3R5bGUtPmlzRW1wdHkoKSkKQEAgLTI5NzgsNiArMzAw
MywxMSBAQAogICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0VHlwaW5nU3R5bGUodHlwaW5nU3R5
bGUpOwogfQogCit2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJv
cGVydGllcyYgcHJvcGVydGllcywgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQoreworICAgIHJl
dHVybiBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlOjpjcmVhdGUoJnByb3Bl
cnRpZXMpLCBlZGl0aW5nQWN0aW9uKTsKK30KKwogdm9pZCBFZGl0b3I6OnRleHRGaWVsZERpZEJl
Z2luRWRpdGluZyhFbGVtZW50KiBlKQogewogICAgIGlmIChjbGllbnQoKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMTgzNDk3KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDggKzE4MywxMCBAQAogICAgIGJv
b2wgZGlzcGF0Y2hDUFBFdmVudChjb25zdCBBdG9taWNTdHJpbmcmLCBEYXRhVHJhbnNmZXJBY2Nl
c3NQb2xpY3kpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdHlsZShTdHls
ZVByb3BlcnRpZXMqLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKKyAgICB2
b2lkIGFwcGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiwgRWRpdEFjdGlvbik7CiAgICAg
dm9pZCBhcHBseVBhcmFncmFwaFN0eWxlKFN0eWxlUHJvcGVydGllcyosIEVkaXRBY3Rpb24gPSBF
ZGl0QWN0aW9uVW5zcGVjaWZpZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdHls
ZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyosIEVkaXRBY3Rpb24pOworICAgIHZvaWQgYXBw
bHlTdHlsZVRvU2VsZWN0aW9uKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYsIEVkaXRBY3Rpb24pOwog
ICAgIHZvaWQgYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyos
IEVkaXRBY3Rpb24pOwogCiAgICAgdm9pZCBhcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPENvbXBv
c2l0ZUVkaXRDb21tYW5kPik7CkBAIC0zNjEsNyArMzYzLDggQEAKICAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBtYXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVzZWQgYXMgZW1hY3MgdXNl
cyBpdC4KICAgICB2b2lkIHNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0
aWVzKiAsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOworICAgIHZvaWQgY29t
cHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZSYgLCBFZGl0QWN0aW9uID0gRWRpdEFj
dGlvblVuc3BlY2lmaWVkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbXB1dGVBbmRTZXRU
eXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMmICwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25VbnNw
ZWNpZmllZCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvQm9k
eUVsZW1lbnQoKSBjb25zdDsKICAgICB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9FbGVtZW50KEVs
ZW1lbnQqKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCShyZXZpc2lvbiAxODM0OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxNiArOTgsMTYgQEAKICAgICByZXR1
cm4gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogfQogCi1zdGF0aWMgYm9vbCBhcHBseUNvbW1h
bmRUb0ZyYW1lKEZyYW1lJiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRB
Y3Rpb24gYWN0aW9uLCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlKQorc3RhdGljIGJvb2wgYXBwbHlD
b21tYW5kVG9GcmFtZShGcmFtZSYgZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBF
ZGl0QWN0aW9uIGFjdGlvbiwgUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSkKIHsKICAgICAv
LyBGSVhNRTogV2UgZG9uJ3QgY2FsbCBzaG91bGRBcHBseVN0eWxlIHdoZW4gdGhlIHNvdXJjZSBp
cyBET007IGlzIHRoZXJlIGEgZ29vZCByZWFzb24gZm9yIHRoYXQ/CiAgICAgc3dpdGNoIChzb3Vy
Y2UpIHsKICAgICBjYXNlIENvbW1hbmRGcm9tTWVudU9yS2V5QmluZGluZzoKLSAgICAgICAgZnJh
bWUuZWRpdG9yKCkuYXBwbHlTdHlsZVRvU2VsZWN0aW9uKHN0eWxlLCBhY3Rpb24pOworICAgICAg
ICBmcmFtZS5lZGl0b3IoKS5hcHBseVN0eWxlVG9TZWxlY3Rpb24oV1RGOjptb3ZlKHN0eWxlKSwg
YWN0aW9uKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDb21tYW5kRnJvbURPTToK
ICAgICBjYXNlIENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJbnRlcmZhY2U6Ci0gICAgICAgIGZyYW1l
LmVkaXRvcigpLmFwcGx5U3R5bGUoc3R5bGUpOworICAgICAgICBmcmFtZS5lZGl0b3IoKS5hcHBs
eVN0eWxlKFdURjo6bW92ZShzdHlsZSksIEVkaXRBY3Rpb25VbnNwZWNpZmllZCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTExNiw1
OSArMTE2LDMzIEBACiAKIHN0YXRpYyBib29sIGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lJiBmcmFt
ZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlWYWx1ZSkKIHsKLSAgICBS
ZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzOjpjcmVhdGUoKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgcHJvcGVy
dHlWYWx1ZSk7Ci0gICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJhbWUsIHNvdXJjZSwg
YWN0aW9uLCBzdHlsZS5nZXQoKSk7CisgICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJh
bWUsIHNvdXJjZSwgYWN0aW9uLCBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCBwcm9w
ZXJ0eVZhbHVlKSk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lJiBm
cmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlSUQgcHJvcGVydHlWYWx1ZSkKIHsKLSAgICBS
ZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzOjpjcmVhdGUoKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgcHJvcGVy
dHlWYWx1ZSk7Ci0gICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJhbWUsIHNvdXJjZSwg
YWN0aW9uLCBzdHlsZS5nZXQoKSk7CisgICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJh
bWUsIHNvdXJjZSwgYWN0aW9uLCBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCBwcm9w
ZXJ0eVZhbHVlKSk7CiB9CiAKLS8vIEZJWE1FOiBleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QgZG9l
cyBub3QgaGFuZGxlIGNvbXBsaWNhdGVkIGNhc2VzIHN1Y2ggYXMgPGI+PHU+aGVsbG88L3U+d29y
bGQ8L2I+IHByb3Blcmx5LgotLy8gICAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCB1c2UgRWRpdG9y
OjpzZWxlY3Rpb25IYXNTdHlsZSB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3R5bGUgYnV0IHdl
IGNhbm5vdCBmaXggdGhpcwotLy8gICAgICAgIHVudGlsIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNzgxOCBpcyByZXNvbHZlZC4KLXN0YXRpYyBib29sIGV4ZWN1dGVU
b2dnbGVTdHlsZUluTGlzdChGcmFtZSYgZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNl
LCBFZGl0QWN0aW9uIGFjdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBDU1NWYWx1ZSog
dmFsdWUpCitzdGF0aWMgYm9vbCBpc1N0eWxlUHJlc2VudChFZGl0b3ImIGVkaXRvciwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBjaGFyKiBvblZhbHVlKQogewotICAgIFJlZlB0cjxF
ZGl0aW5nU3R5bGU+IHNlbGVjdGlvblN0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0
aW9uU3RhcnQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwotICAgIGlmICghc2VsZWN0
aW9uU3R5bGUgfHwgIXNlbGVjdGlvblN0eWxlLT5zdHlsZSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHNlbGVjdGVkQ1NTVmFsdWUgPSBzZWxlY3Rpb25T
dHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKLSAgICBTdHJp
bmcgbmV3U3R5bGUgPSBBU0NJSUxpdGVyYWwoIm5vbmUiKTsKLSAgICBpZiAoaXM8Q1NTVmFsdWVM
aXN0Pigqc2VsZWN0ZWRDU1NWYWx1ZSkpIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4g
c2VsZWN0ZWRDU1NWYWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHNlbGVjdGVkQ1NT
VmFsdWUuZ2V0KCkpOwotICAgICAgICBpZiAoIXNlbGVjdGVkQ1NTVmFsdWVMaXN0LT5yZW1vdmVB
bGwodmFsdWUpKQotICAgICAgICAgICAgc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPmFwcGVuZCgqdmFs
dWUpOwotICAgICAgICBpZiAoc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPmxlbmd0aCgpKQotICAgICAg
ICAgICAgbmV3U3R5bGUgPSBzZWxlY3RlZENTU1ZhbHVlTGlzdC0+Y3NzVGV4dCgpOwotCi0gICAg
fSBlbHNlIGlmIChzZWxlY3RlZENTU1ZhbHVlLT5jc3NUZXh0KCkgPT0gIm5vbmUiKQotICAgICAg
ICBuZXdTdHlsZSA9IHZhbHVlLT5jc3NUZXh0KCk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
bid0IGJlIGhhdmluZyB0byBjb252ZXJ0IG5ldyBzdHlsZSBpbnRvIHRleHQuICBXZSBzaG91bGQg
aGF2ZSBzZXRQcm9wZXJ0eUNTU1ZhbHVlLgotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzPiBuZXdNdXRhYmxlU3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsK
LSAgICBuZXdNdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5ld1N0eWxlKTsK
LSAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIG5l
d011dGFibGVTdHlsZS5nZXQoKSk7CisgICAgLy8gU3R5bGUgaXMgY29uc2lkZXJlZCBwcmVzZW50
IHdoZW4KKyAgICAvLyBNYWM6IHByZXNlbnQgYXQgdGhlIGJlZ2lubmluZyBvZiBzZWxlY3Rpb24K
KyAgICAvLyBvdGhlcjogcHJlc2VudCB0aHJvdWdob3V0IHRoZSBzZWxlY3Rpb24KKyAgICBpZiAo
ZWRpdG9yLmJlaGF2aW9yKCkuc2hvdWxkVG9nZ2xlU3R5bGVCYXNlZE9uU3RhcnRPZlNlbGVjdGlv
bigpKQorICAgICAgICByZXR1cm4gZWRpdG9yLnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUocHJvcGVy
dHlJRCwgb25WYWx1ZSk7CisgICAgcmV0dXJuIGVkaXRvci5zZWxlY3Rpb25IYXNTdHlsZShwcm9w
ZXJ0eUlELCBvblZhbHVlKSA9PSBUcnVlVHJpU3RhdGU7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1
dGVUb2dnbGVTdHlsZShGcmFtZSYgZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBF
ZGl0QWN0aW9uIGFjdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBjaGFyKiBv
ZmZWYWx1ZSwgY29uc3QgY2hhciogb25WYWx1ZSkKIHsKLSAgICAvLyBTdHlsZSBpcyBjb25zaWRl
cmVkIHByZXNlbnQgd2hlbgotICAgIC8vIE1hYzogcHJlc2VudCBhdCB0aGUgYmVnaW5uaW5nIG9m
IHNlbGVjdGlvbgotICAgIC8vIG90aGVyOiBwcmVzZW50IHRocm91Z2hvdXQgdGhlIHNlbGVjdGlv
bgorICAgIGJvb2wgc3R5bGVJc1ByZXNlbnQgPSBpc1N0eWxlUHJlc2VudChmcmFtZS5lZGl0b3Io
KSwgcHJvcGVydHlJRCwgb25WYWx1ZSk7CisgICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUo
ZnJhbWUsIHNvdXJjZSwgYWN0aW9uLCBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCBz
dHlsZUlzUHJlc2VudCA/IG9mZlZhbHVlIDogb25WYWx1ZSkpOworfQogCi0gICAgYm9vbCBzdHls
ZUlzUHJlc2VudDsKLSAgICBpZiAoZnJhbWUuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRUb2dn
bGVTdHlsZUJhc2VkT25TdGFydE9mU2VsZWN0aW9uKCkpCi0gICAgICAgIHN0eWxlSXNQcmVzZW50
ID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShwcm9wZXJ0eUlELCBvblZh
bHVlKTsKLSAgICBlbHNlCi0gICAgICAgIHN0eWxlSXNQcmVzZW50ID0gZnJhbWUuZWRpdG9yKCku
c2VsZWN0aW9uSGFzU3R5bGUocHJvcGVydHlJRCwgb25WYWx1ZSkgPT0gVHJ1ZVRyaVN0YXRlOwot
Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShw
cm9wZXJ0eUlELCBzdHlsZUlzUHJlc2VudCA/IG9mZlZhbHVlIDogb25WYWx1ZSk7Ci0gICAgcmV0
dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJhbWUsIHNvdXJjZSwgYWN0aW9uLCBzdHlsZS0+c3R5
bGUoKSk7CitzdGF0aWMgVGV4dERlY29yYXRpb25DaGFuZ2UgdGV4dERlY29yYXRpb25DaGFuZ2VG
b3JUb2dnbGluZyhFZGl0b3ImIGVkaXRvciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25z
dCBjaGFyKiBvblZhbHVlKQoreworICAgIHJldHVybiBpc1N0eWxlUHJlc2VudChlZGl0b3IsIHBy
b3BlcnR5SUQsIG9uVmFsdWUpID8gVGV4dERlY29yYXRpb25DaGFuZ2U6OlJlbW92ZSA6IFRleHRE
ZWNvcmF0aW9uQ2hhbmdlOjpBZGQ7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVBcHBseVBhcmFn
cmFwaFN0eWxlKEZyYW1lJiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRB
Y3Rpb24gYWN0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgcHJv
cGVydHlWYWx1ZSkKQEAgLTEwNjAsOCArMTAzNCwxMCBAQAogCiBzdGF0aWMgYm9vbCBleGVjdXRl
U3RyaWtldGhyb3VnaChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBz
b3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBs
aW5lVGhyb3VnaCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVl
TGluZVRocm91Z2gpOwotICAgIHJldHVybiBleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QoZnJhbWUs
IHNvdXJjZSwgRWRpdEFjdGlvblVuZGVybGluZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdCwgbGluZVRocm91Z2guZ2V0KCkpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5
bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKKyAgICBzdHlsZS0+c2V0U3RyaWtl
VGhyb3VnaENoYW5nZSh0ZXh0RGVjb3JhdGlvbkNoYW5nZUZvclRvZ2dsaW5nKGZyYW1lLmVkaXRv
cigpLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCAibGluZS10aHJv
dWdoIikpOworICAgIC8vIEZJWE1FOiBOZWVkcyBhIG5ldyBFZGl0QWN0aW9uIQorICAgIHJldHVy
biBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIEVkaXRBY3Rpb25VbmRlcmxpbmUs
IFdURjo6bW92ZShzdHlsZSkpOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlU3R5bGVXaXRoQ1NT
KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQpAQCAtMTEyNSw4ICsxMTAxLDEwIEBACiAKIHN0YXRpYyBib29sIGV4ZWN1dGVVbmRl
cmxpbmUoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBj
b25zdCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdW5kZXJsaW5l
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVVbmRlcmxpbmUp
OwotICAgIHJldHVybiBleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QoZnJhbWUsIHNvdXJjZSwgRWRp
dEFjdGlvblVuZGVybGluZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVj
dCwgdW5kZXJsaW5lLmdldCgpKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVk
aXRpbmdTdHlsZTo6Y3JlYXRlKCk7CisgICAgVGV4dERlY29yYXRpb25DaGFuZ2UgY2hhbmdlID0g
dGV4dERlY29yYXRpb25DaGFuZ2VGb3JUb2dnbGluZyhmcmFtZS5lZGl0b3IoKSwgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgInVuZGVybGluZSIpOworICAgIHN0eWxl
LT5zZXRVbmRlcmxpbmVDaGFuZ2UoY2hhbmdlKTsKKyAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9G
cmFtZShmcmFtZSwgc291cmNlLCBFZGl0QWN0aW9uVW5kZXJsaW5lLCBXVEY6Om1vdmUoc3R5bGUp
KTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZVVuZG8oRnJhbWUmIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDE4MzQ5NykKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTk0MSw3ICs5NDEsNyBAQAog
ICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGNyZWF0
ZSBhIGNvcHkgaGVyZS4KICAgICBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcHJvcGVydGll
cyhjb3JlKHN0eWxlKS0+Y29weVByb3BlcnRpZXMoKSk7Ci0gICAgX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+ZWRpdG9yKCkuY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKHByb3BlcnRpZXMucHRyKCksIHVu
ZG9BY3Rpb24pOworICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmNvbXB1dGVBbmRT
ZXRUeXBpbmdTdHlsZShwcm9wZXJ0aWVzLmdldCgpLCB1bmRvQWN0aW9uKTsKIH0KIAogI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252209</attachid>
            <date>2015-05-01 18:04:08 -0700</date>
            <delta_ts>2015-05-04 12:46:43 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-27818-20150501180256.patch</filename>
            <type>text/plain</type>
            <size>89812</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzY5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNS0wNS0wMSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBUb2dnbGluZyB1bmRlcmxpbmUg
b3Igc3RyaWtlIHRocm91Z2ggYWZmZWN0cyBlYWNoIG90aGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzgxOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBt
ZWNoYW5pc20gdG8gYXBwbHkgYW5kIHJlbW92ZSB0ZXh0IGRlY29yYXRpb25zLiBUaGlzIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIHRleHQKKyAgICAgICAgZGVjb3JhdGlvbnMgYXJlIGFsd2F5cyBhZGRp
dGl2ZSBhbmQgd2UgY2FuJ3QgZGlmZmVyZW50aWF0ZSB3aGV0aGVyIHdlJ3JlIGFkZGluZyBvciBy
ZW1vdmluZyBhIHRleHQgZGVjb3JhdGlvbi4KKyAgICAgICAgQ29uY2VwdHVhbGx5LCB3ZSBuZWVk
IGZvdXIgdmFsdWVzIGZvciB0ZXh0IGRlY29yYXRpb25zOiBhZGRpbmcgdW5kZXJsaW5lLCByZW1v
dmluZyB1bmRlcmxpbmUsIGFkZGluZworICAgICAgICBsaW5lLXRocm91Z2gsIGFuZCByZW1vdmlu
ZyBsaW5lLXRocm91Z2ggYnV0IHdlIGhhdmUgb25seSB0aHJlZTogdW5kZXJsaW5lLCBsaW5lLXRo
cm91Z2gsIG5vbmUuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgdGhlcmUgYXJlIHRocmVl
IG1lY2hhbmlzbSBieSB3aGljaCB0ZXh0IGRlY29yYXRpb25zIHN0YXRlcyBhcmUga2VwdCB0cmFj
a2VkLiBXaGlsZSBhcHBseWluZworICAgICAgICBvciByZW1vdmluZyB0ZXh0IGRlY29yYXRpb25z
LCB3ZSB1c2UgbmV3bHkgYWRkZWQgbV91bmRlcmxpbmVDaGFuZ2UgYW5kIG1fc3RyaWtlVGhyb3Vn
aENoYW5nZSBpbiBFZGl0aW5nU3R5bGUuCisgICAgICAgIEZvciB0aGUgdHlwaW5nIHN0eWxlLCB3
ZSB1c2UgLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCB0byBzdG9yZSB0aGUgc3Rh
dGUgc2luY2Ugd2UgbmVlZCB0byBwcmVzZXJ2ZQorICAgICAgICBldmVyeSB0eXBlIG9mIHRleHQg
ZGVjb3JhdGlvbnMgc3VjaCBhcyBvdmVybGluZSBpbiBhZGRpdGlvbiB0byB1bmRlcmxpbmUgYW5k
IGxpbmUtdGhyb3VnaC4gT25jZSBhcHBsaWVkLCBhbGwKKyAgICAgICAgdGV4dCBkZWNvcmF0aW9u
cyBzaG91bGQgYmUgZXhwcmVzc2VkIGluIHRlcm1zIG9mIHRoZSBzdGFuZGFyZCB0ZXh0LWRlY29y
YXRpb24gcHJvcGVydHkuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9leGVjQ29tbWFuZC90b2dn
bGUtbWl4ZWQtdGV4dC1kZWNvcmF0aW9ucy5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUJsb2NrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJl
bW92ZUNTU1N0eWxlKTogY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50IG5vdyBjcmVh
dGVzIGEgbmV3IGlubGluZSBzdHlsZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGlzdCBvZiBwcm9w
ZXJ0aWVzIHRvIHJlbW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjph
ZGRCbG9ja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eUlubGluZVN0eWxlQ2hhbmdlKTogTWVyZ2UgaW5saW5lIHN0eWxlcyBpbnN0ZWFkIG9mIGFkZGlu
ZyBhcyBzdHJpbmcuCisgICAgICAgIE90aGVyd2lzZSBpdCB3b3VsZCBnZW5lcmF0ZSBzdHlsZSBj
b250ZW50IGF0dHJpYnV0ZSB3aXRoIG11bHRpcGxlIHRleHQtZGVjb3JhdGlvbiBwcm9wZXJ0aWVz
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnRFcXVpdmFsZW50OjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50RXF1aXZhbGVudDo6cHJvcGVydHlFeGlzdHNJblN0eWxlKTogVGFrZXMgYW4gRWRp
dGluZ1N0eWxlIGluc3RlYWQgb2YgU3R5bGVQcm9wZXJ0aWVzLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnRFcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6SFRNTFRleHREZWNvcmF0aW9u
RXF1aXZhbGVudCk6IAorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZh
bGVudDo6cHJvcGVydHlFeGlzdHNJblN0eWxlKTogUmVzcGVjdCBuZXdseSBhZGRlZCBtX3N0cmlr
ZVRocm91Z2hDaGFuZ2UgYW5kCisgICAgICAgIG1fdW5kZXJsaW5lQ2hhbmdlIGluIEVkaXRpbmdT
dHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6OnZh
bHVlSXNQcmVzZW50SW5TdHlsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRE
ZWNvcmF0aW9uRXF1aXZhbGVudDo6Y2hhbmdlSW5TdHlsZSk6IEFkZGVkLiBSZXRyaWV2ZXMgdGhl
IGNoYW5nZSBlbnVtIGZvciB0aGUgYXNzb2NpYXRlZAorICAgICAgICB0eXBlIG9mIHRleHQtZGVj
b3JhdGlvbiAodW5kZXJsaW5lIG9yIHN0cmlrZSB0aHJvdWdoKS4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50OjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxBdHRyaWJ1dGVFcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUpOiBJbml0aWFsaXplIG1fdW5kZXJs
aW5lQ2hhbmdlIGFuZCBtX3N0cmlrZVRocm91Z2hDaGFuZ2UuIEFsc28gdXNlIHRoZQorICAgICAg
ICBkZWxlZ2F0aW5nIGNvbnN0cnVjdG9yIGVsc2V3aGVyZS4gQWxzbyBhZGRlZCB0aGUgbWlzc2lu
ZyBjYWxsIHRvIGV4dHJhY3RGb250U2l6ZURlbHRhKCkgaW4gdGhlIHZhcmlhbnQgdGhhdAorICAg
ICAgICB0YWtlcyBDU1NQcm9wZXJ0eUlEIGFuZCBTdHJpbmcsIGFuZCBhZGRlZCBhIHZhcmlhbnQg
dGhhdCB0YWtlcyBDU1NQcm9wZXJ0eUlEIGFuZCBDU1NWYWx1ZUlELgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjppc0VtcHR5KTogUmV0dXJuIGZhbHNlIHdoZW4gbV91bmRlcmxpbmVD
aGFuZ2UgYW5kIG1fc3RyaWtlVGhyb3VnaENoYW5nZSBhcmUgbm90ICJub25lIi4KKyAgICAgICAg
KFdlYkNvcmU6OmFwcGx5VGV4dERlY29yYXRpb25DaGFuZ2VUb1ZhbHVlTGlzdCk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpvdmVycmlkZVR5cGluZ1N0eWxlQXQpOiBB
ZGRlZC4gVXNlZCBieSBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZSB0byBzZXQgYSBu
ZXcKKyAgICAgICAgdHlwaW5nIHN0eWxlLiBSZXNvbHZlIG1fdW5kZXJsaW5lQ2hhbmdlIGFuZCBt
X3N0cmlrZVRocm91Z2hDaGFuZ2UgaW50byAtd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZm
ZWN0LgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjbGVhcik6IENsZWFyIG1fdW5k
ZXJsaW5lQ2hhbmdlIGFuZCBtX3N0cmlrZVRocm91Z2hDaGFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0aW5nU3R5bGU6OmNvcHkpOiBDb3B5IG1fdW5kZXJsaW5lQ2hhbmdlIGFuZCBtX3N0cmlr
ZVRocm91Z2hDaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjp0ZXh0RGVjb3JhdGlvblZhbHVlTGlz
dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjb25mbGljdHNXaXRo
SW5saW5lU3R5bGVPZkVsZW1lbnQpOiBOb3cgdGFrZXMgYSBwb2ludGVyIHRvIE11dGFibGVTdHls
ZVByb3BlcnRpZXMKKyAgICAgICAgaW5zdGVhZCBvZiBhIHZlY3Rvci4gVGhpcyB3YXMgbmVjZXNz
YXJ5IHdlIGNhbid0IHNpbXBseSByZW1vdmUgdGV4dC1kZWNvcmF0aW9uIHByb3BlcnR5IGluIEFw
cGx5U3R5bGVDb21tYW5kJ3MKKyAgICAgICAgcmVtb3ZlQ1NTU3R5bGUgYXMgdGhhdCB3b3VsZCBy
ZXN1bHQgaW4gdW5yZWxhdGVkIHRleHQgZGVjb3JhdGlvbnMgYWxzbyBnZXR0aW5nIHJlbW92ZWQu
IEFsc28gYWRkZWQgdGhlIGNvZGUKKyAgICAgICAgZm9yIG1fdW5kZXJsaW5lQ2hhbmdlIGFuZCBt
X3N0cmlrZVRocm91Z2hDaGFuZ2UuIE9ubHkgcmVtb3ZpbmcgdGV4dCBkZWNvcmF0aW9uIGNoYW5n
ZXMgY2FuIGNhdXNlIGEgY29uZmxpY3QKKyAgICAgICAgc2luY2UgdGV4dCBkZWNvcmF0aW9ucyBh
cmUgYWx3YXlzIGFkZGl0aXZlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjb25m
bGljdHNXaXRoSW1wbGljaXRTdHlsZU9mRWxlbWVudCk6IENoZWNrIGlzRW1wdHkoKSBpbnN0ZWFk
IG9mIHRoZSBudWxsaXR5IG9mCisgICAgICAgIG1fbXV0YWJsZVN0eWxlIHRvIHJlc3BlY3QgbV91
bmRlcmxpbmVDaGFuZ2UgYW5kIG1fc3RyaWtlVGhyb3VnaENoYW5nZS4KKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRpbmdTdHlsZTo6Y29uZmxpY3RzV2l0aEltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpleHRyYWN0Q29uZmxpY3RpbmdJbXBs
aWNpdFN0eWxlT2ZBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6
c3R5bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5bGVPZk5vZGUpOiBSZXNwZWN0IHRoZSB2YWx1ZXMg
b2YgbV91bmRlcmxpbmVDaGFuZ2UgYW5kCisgICAgICAgIG1fc3RyaWtlVGhyb3VnaENoYW5nZS4g
SGVyZSwgdGhlIHN0eWxlIGlzIGNvbnNpZGVyZWQgcHJlc2VudCBpZiBpdCBoYXMgdGV4dCBkZWNv
cmF0aW9ucyB0aGF0IGFyZSBiZWluZyBhZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdT
dHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9ySFRNTEVxdWl2YWxlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZWxlbWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2wpOiBU
YWtlcyBFZGl0aW5nU3R5bGUgaW5zdGVhZCBvZiBTdHlsZVByb3BlcnRpZXMgdG8KKyAgICAgICAg
cmVzcGVjdCBtX3VuZGVybGluZUNoYW5nZSBhbmQgbV9zdHJpa2VUaHJvdWdoQ2hhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVP
ZkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VUZXh0RGVjb3JhdGlvblZhbHVlcyk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUpOiBNYWtlIGEgY29w
eSBvZiBDU1NWYWx1ZUxpc3QgYmVmb3JlIG1vZGlmeWluZyBpdCBzaW5jZSBDU1NWYWx1ZUxpc3Qn
cyBhcmUKKyAgICAgICAgc2hhcmVkIHdpdGggb3RoZXIgaW1tdXRhYmxlIFN0eWxlUHJvcGVydGll
cy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZSk6IFNldCBtX2Fw
cGx5VW5kZXJsaW5lLCBtX2FwcGx5TGluZVRocm91Z2gsIGFuZCBtX2Nzc1N0eWxlIGlmIGVpdGhl
cgorICAgICAgICBtX3VuZGVybGluZUNoYW5nZSBvciBtX3N0cmlrZVRocm91Z2hDaGFuZ2UgYXJl
IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQgaW4gRWRpdGluZ1N0eWxlIGlmIHRoZSBjdXJyZW50
IHBvc2l0aW9uCisgICAgICAgIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIHRoZSBtYXRjaGluZyBzdHls
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2hhbmdlOjpvcGVyYXRvcj09KTogTW92ZWQgZnJv
bSB0aGUgaGVhZGVyIGZpbGUuIEFsc28gYWRkZWQgdGhlIGxvZ2ljIHRvIGNvbXBhcmUgbV9jc3NT
dHlsZSBub3cKKyAgICAgICAgdGhhdCBpdCdzIGEgU3R5bGVQcm9wZXJ0aWVzIGluc3RlYWQgb2Yg
U3RyaW5nLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuaDogQWRkZWQgVGV4dERl
Y29yYXRpb25DaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmNyZWF0ZSk6
IEFkZGVkIGEgdmFyaWFudCB0aGF0IHRha2VzIENTU1Byb3BlcnR5SUQgYW5kIENTU1ZhbHVlSUQu
CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmNvbmZsaWN0c1dpdGhJbmxpbmVTdHls
ZU9mRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnNldFVuZGVybGlu
ZUNoYW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjp1bmRlcmxp
bmVDaGFuZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6c2V0U3Ry
aWtlVGhyb3VnaENoYW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxl
OjpzdHJpa2VUaHJvdWdoQ2hhbmdlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNo
YW5nZTo6Y3NzU3R5bGUpOiBOb3cgcmV0dXJucyBTdHlsZVByb3BlcnRpZXMqIGluc3RlYWQgb2Yg
U3RyaW5nIHNvIHRoYXQgQXBwbHlTdHlsZUNvbW1hbmQncworICAgICAgICBhcHBseUlubGluZVN0
eWxlQ2hhbmdlIGNvdWxkIG1lcmdlIGlubGluZSBzdHlsZXMgaW5zdGVhZCBvZiBqdXN0IGFwcGVu
ZGluZyBpdCB0byB0aGUgZW5kLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6Om9wZXJh
dG9yPT0pOiBNb3ZlZCBpbnRvIHRoZSBjcHAgZmlsZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRp
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZSk6IEFkZGVkLiBU
aGlzIHZhcmlhbnQgdGFrZXMgRWRpdGluZ1N0eWxlIGluc3RlYWQgb2YgU3R5bGVQcm9wZXJ0aWVz
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKTog
QWRkZWQgYSB2YXJpYW50IGZvciBFZGl0aW5nU3R5bGUuIEFsc28gdXNlIG92ZXJyaWRlVHlwaW5n
U3R5bGVBdAorICAgICAgICB0byBzZXQgLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVj
dCBiYXNlZCBvbiBtX3VuZGVybGluZUNoYW5nZSBhbmQgbV9zdHJpa2VUaHJvdWdoQ2hhbmdlIAor
CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlDb21tYW5kVG9GcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjppc1N0eWxlUHJlc2VudCk6IEV4dHJhY3RlZCBmcm9tIGV4ZWN1dGVUb2dn
bGVTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVBcHBseVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmV4ZWN1dGVUb2dnbGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRl
VG9nZ2xlU3R5bGVJbkxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dGV4dERlY29y
YXRpb25DaGFuZ2VGb3JUb2dnbGluZyk6IEFkZGVkLiBVc2VkIGluIGV4ZWN1dGVTdHJpa2V0aHJv
dWdoIGFuZCBleGVjdXRlVW5kZXJsaW5lLgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVN0cmlr
ZXRocm91Z2gpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVVuZGVybGluZSk6CisKIDIwMTUt
MDUtMDEgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxODM2ODcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTgzNDk3KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5
bGUoCiAgICAgVmlzaWJsZVBvc2l0aW9uIGJleW9uZEVuZChlbmRPZlBhcmFncmFwaCh2aXNpYmxl
RW5kKS5uZXh0KCkpOwogICAgIHdoaWxlIChwYXJhZ3JhcGhTdGFydC5pc05vdE51bGwoKSAmJiBw
YXJhZ3JhcGhTdGFydCAhPSBiZXlvbmRFbmQpIHsKICAgICAgICAgU3R5bGVDaGFuZ2Ugc3R5bGVD
aGFuZ2Uoc3R5bGUsIHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBp
ZiAoc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS5sZW5ndGgoKSB8fCBtX3JlbW92ZU9ubHkpIHsKKyAg
ICAgICAgaWYgKHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkgfHwgbV9yZW1vdmVPbmx5KSB7CiAgICAg
ICAgICAgICBSZWZQdHI8Tm9kZT4gYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhwYXJhZ3JhcGhTdGFy
dC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAgICAgaWYgKCFt
X3JlbW92ZU9ubHkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3QmxvY2sgPSBt
b3ZlUGFyYWdyYXBoQ29udGVudHNUb05ld0Jsb2NrSWZOZWNlc3NhcnkocGFyYWdyYXBoU3RhcnQu
ZGVlcEVxdWl2YWxlbnQoKSk7CkBAIC05NDUsMTcgKzk0NSwxNCBAQCBib29sIEFwcGx5U3R5bGVD
b21tYW5kOjpyZW1vdmVDU1NTdHlsZShFCiAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9uZSkKICAg
ICAgICAgcmV0dXJuIHN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoZWxl
bWVudCk7CiAKLSAgICBWZWN0b3I8Q1NTUHJvcGVydHlJRD4gcHJvcGVydGllczsKLSAgICBpZiAo
IXN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoZWxlbWVudCwgZXh0cmFj
dGVkU3R5bGUsIHByb3BlcnRpZXMpKQorICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
PiBuZXdJbmxpbmVTdHlsZTsKKyAgICBpZiAoIXN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5lU3R5
bGVPZkVsZW1lbnQoZWxlbWVudCwgbmV3SW5saW5lU3R5bGUsIGV4dHJhY3RlZFN0eWxlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgYSBtYXNz
LXJlbW92YWwgZnVuY3Rpb24gaGVyZSBidXQgd2UgZG9uJ3QgaGF2ZSBhbiB1bmRvYWJsZSBvbmUg
eWV0LgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7IGkrKykK
LSAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydGllc1tpXSk7Ci0KLSAg
ICAvLyBObyBuZWVkIHRvIHNlcmlhbGl6ZSA8Zm9vIHN0eWxlPSIiPiBpZiB3ZSBqdXN0IHJlbW92
ZWQgdGhlIGxhc3QgY3NzIHByb3BlcnR5Ci0gICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlKCkt
PmlzRW1wdHkoKSkKKyAgICBpZiAobmV3SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAg
cmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIpOworICAgIGVsc2UKKyAgICAg
ICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5h
c1RleHQoKSk7CiAKICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5
bGVTcGFuKGVsZW1lbnQpKQogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVs
ZW1lbnQpOwpAQCAtMTM3MCwxMiArMTM2NywxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpz
dXJyb3VuZE5vZGVSYW5nCiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJsb2NrU3R5bGUo
Y29uc3QgU3R5bGVDaGFuZ2UmIHN0eWxlQ2hhbmdlLCBIVE1MRWxlbWVudCogYmxvY2spCiB7Cisg
ICAgQVNTRVJUKHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkpOwogICAgIC8vIERvIG5vdCBjaGVjayBm
b3IgbGVnYWN5IHN0eWxlcyBoZXJlLiBUaG9zZSBzdHlsZXMsIGxpa2UgPEI+IGFuZCA8ST4sIG9u
bHkgYXBwbHkgZm9yCiAgICAgLy8gaW5saW5lIGNvbnRlbnQuCiAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBTdHJpbmcgY3NzU3R5bGUgPSBzdHlsZUNoYW5n
ZS5jc3NTdHlsZSgpOworICAgIFN0cmluZyBjc3NTdHlsZSA9IHN0eWxlQ2hhbmdlLmNzc1N0eWxl
KCktPmFzVGV4dCgpOwogICAgIFN0cmluZ0J1aWxkZXIgY3NzVGV4dDsKICAgICBjc3NUZXh0LmFw
cGVuZChjc3NTdHlsZSk7CiAgICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydGllcyogZGVjbCA9IGJs
b2NrLT5pbmxpbmVTdHlsZSgpKSB7CkBAIC0xNDU2LDIxICsxNDU0LDE3IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpKSB7CisgICAgaWYgKGNvbnN0IFN0eWxl
UHJvcGVydGllcyogc3R5bGVUb01lcmdlID0gc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKSkgewogICAg
ICAgICBpZiAoc3R5bGVDb250YWluZXIpIHsKICAgICAgICAgICAgIGlmIChjb25zdCBTdHlsZVBy
b3BlcnRpZXMqIGV4aXN0aW5nU3R5bGUgPSBzdHlsZUNvbnRhaW5lci0+aW5saW5lU3R5bGUoKSkg
ewotICAgICAgICAgICAgICAgIFN0cmluZyBleGlzdGluZ1RleHQgPSBleGlzdGluZ1N0eWxlLT5h
c1RleHQoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGNzc1RleHQ7Ci0gICAgICAg
ICAgICAgICAgY3NzVGV4dC5hcHBlbmQoZXhpc3RpbmdUZXh0KTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWV4aXN0aW5nVGV4dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGNzc1RleHQu
YXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICAgICAgY3NzVGV4dC5hcHBlbmQoc3R5bGVDaGFuZ2Uu
Y3NzU3R5bGUoKSk7Ci0gICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNvbnRh
aW5lciwgc3R5bGVBdHRyLCBjc3NUZXh0LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIFJl
ZjxFZGl0aW5nU3R5bGU+IGlubGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoZXhpc3Rp
bmdTdHlsZSk7CisgICAgICAgICAgICAgICAgaW5saW5lU3R5bGUtPm92ZXJyaWRlV2l0aFN0eWxl
KHN0eWxlVG9NZXJnZSk7CisgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNv
bnRhaW5lciwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkpOwogICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNv
bnRhaW5lciwgc3R5bGVBdHRyLCBzdHlsZUNoYW5nZS5jc3NTdHlsZSgpKTsKKyAgICAgICAgICAg
ICAgICBzZXROb2RlQXR0cmlidXRlKHN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIsIHN0eWxlVG9N
ZXJnZS0+YXNUZXh0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUmVmUHRyPEVs
ZW1lbnQ+IHN0eWxlRWxlbWVudCA9IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoZG9jdW1lbnQoKSk7
Ci0gICAgICAgICAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHN0eWxl
Q2hhbmdlLmNzc1N0eWxlKCkpOworICAgICAgICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1
dGUoc3R5bGVBdHRyLCBzdHlsZVRvTWVyZ2UtPmFzVGV4dCgpKTsKICAgICAgICAgICAgIHN1cnJv
dW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoc3RhcnROb2RlLCBlbmROb2RlLCBzdHlsZUVsZW1lbnQu
cmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDE4MzQ5NykKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDEwICsxNjAsMTAg
QEAgcHVibGljOgogICAgIEhUTUxFbGVtZW50RXF1aXZhbGVudChDU1NQcm9wZXJ0eUlELCBDU1NW
YWx1ZUlEIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKTsKIAog
ICAgIHZpcnR1YWwgfkhUTUxFbGVtZW50RXF1aXZhbGVudCgpIHsgfQotICAgIHZpcnR1YWwgYm9v
bCBtYXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuICFtX3RhZ05h
bWUgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSgqbV90YWdOYW1lKTsgfQorICAgIHZpcnR1YWwgYm9v
bCBtYXRjaGVzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuICFtX3RhZ05h
bWUgfHwgZWxlbWVudC5oYXNUYWdOYW1lKCptX3RhZ05hbWUpOyB9CiAgICAgdmlydHVhbCBib29s
IGhhc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29s
IHByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlKSBjb25z
dCB7IHJldHVybiBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOyB9Ci0g
ICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiwgU3R5bGVQcm9w
ZXJ0aWVzKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHByb3BlcnR5RXhpc3RzSW5TdHlsZShj
b25zdCBFZGl0aW5nU3R5bGUmIHN0eWxlKSBjb25zdCB7IHJldHVybiBzdHlsZS5tX211dGFibGVT
dHlsZSAmJiBzdHlsZS5tX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShtX3Byb3Bl
cnR5SUQpOyB9CisgICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50
JiwgY29uc3QgRWRpdGluZ1N0eWxlJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkZFRvU3R5
bGUoRWxlbWVudCosIEVkaXRpbmdTdHlsZSopIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CkBAIC0xOTQs
OSArMTk0LDkgQEAgSFRNTEVsZW1lbnRFcXVpdmFsZW50OjpIVE1MRWxlbWVudEVxdWl2YQogICAg
IEFTU0VSVChwcmltaXRpdmVWYWx1ZSAhPSBDU1NWYWx1ZUludmFsaWQpOwogfQogCi1ib29sIEhU
TUxFbGVtZW50RXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqIGVsZW1l
bnQsIFN0eWxlUHJvcGVydGllcyogc3R5bGUpIGNvbnN0Citib29sIEhUTUxFbGVtZW50RXF1aXZh
bGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEVkaXRp
bmdTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7CisgICAgUmVmUHRyPENTU1Zh
bHVlPiB2YWx1ZSA9IHN0eWxlLm1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG1f
cHJvcGVydHlJRCk7CiAgICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkgJiYgaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlLmdldCgpKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKS5nZXRWYWx1ZUlEKCkgPT0gbV9wcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpOwogfQog
CkBAIC0yMDcsMzkgKzIwNyw1NSBAQCB2b2lkIEhUTUxFbGVtZW50RXF1aXZhbGVudDo6YWRkVG9T
dHlsZShFCiAKIGNsYXNzIEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQgOiBwdWJsaWMgSFRN
TEVsZW1lbnRFcXVpdmFsZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MVGV4dERlY29yYXRpb25FcXVp
dmFsZW50KENTU1ZhbHVlSUQgcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUpOworICAgIEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQoQ1NTVmFsdWVJRCBwcmlt
aXRpdmVWYWx1ZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKKyAgICAgICAgOiBIVE1M
RWxlbWVudEVxdWl2YWxlbnQoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgcHJpbWl0aXZlVmFs
dWUsIHRhZ05hbWUpCisgICAgICAgICwgbV9pc1VuZGVybGluZShwcmltaXRpdmVWYWx1ZSA9PSBD
U1NWYWx1ZVVuZGVybGluZSkKKyAgICB7CisgICAgfQogCi0gICAgdmlydHVhbCBib29sIHByb3Bl
cnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqLCBTdHlsZVByb3BlcnRpZXMq
KSBjb25zdDsKLX07CisgICAgYm9vbCBwcm9wZXJ0eUV4aXN0c0luU3R5bGUoY29uc3QgRWRpdGlu
Z1N0eWxlJiBzdHlsZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChjaGFuZ2VJ
blN0eWxlKHN0eWxlKSAhPSBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6Tm9uZSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOwogCi1IVE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50OjpIVE1MVGV4dERl
Y29yYXRpb25FcXVpdmFsZW50KENTU1ZhbHVlSUQgcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUpCi0gICAgOiBIVE1MRWxlbWVudEVxdWl2YWxlbnQoQ1NTUHJvcGVy
dHlUZXh0RGVjb3JhdGlvbiwgcHJpbWl0aXZlVmFsdWUsIHRhZ05hbWUpCi0gICAgLy8gbV9wcm9w
ZXJ0eUlEIGlzIHVzZWQgaW4gSFRNTEVsZW1lbnRFcXVpdmFsZW50OjphZGRUb1N0eWxlCi17Ci19
CisgICAgICAgIGlmICghc3R5bGUubV9tdXRhYmxlU3R5bGUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLWJvb2wgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6cHJvcGVydHlFeGlz
dHNJblN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29y
YXRpb25zSW5FZmZlY3QpIHx8IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
VGV4dERlY29yYXRpb24pOwotfQorICAgICAgICBhdXRvJiBtdXRhYmxlU3R5bGUgPSAqc3R5bGUu
bV9tdXRhYmxlU3R5bGU7CisgICAgICAgIHJldHVybiBtdXRhYmxlU3R5bGUuZ2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KQorICAgICAg
ICAgICAgfHwgbXV0YWJsZVN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbik7CisgICAgfQogCi1ib29sIEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6
OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiBlbGVtZW50LCBTdHlsZVByb3BlcnRpZXMq
IHN0eWxlKSBjb25zdAotewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3R5bGVWYWx1ZSA9IHN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5F
ZmZlY3QpOwotICAgIGlmICghc3R5bGVWYWx1ZSkKLSAgICAgICAgc3R5bGVWYWx1ZSA9IHN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwotICAgIHJl
dHVybiBtYXRjaGVzKGVsZW1lbnQpICYmIGlzPENTU1ZhbHVlTGlzdD4oc3R5bGVWYWx1ZS5nZXQo
KSkgJiYgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigqc3R5bGVWYWx1ZSkuaGFzVmFsdWUobV9wcmlt
aXRpdmVWYWx1ZS5nZXQoKSk7Ci19CisgICAgYm9vbCB2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgRWRpdGluZ1N0eWxlJiBzdHlsZSkgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmICghbWF0Y2hlcyhlbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgYXV0byBjaGFuZ2UgPSBjaGFuZ2VJblN0eWxlKHN0eWxlKTsKKyAg
ICAgICAgaWYgKGNoYW5nZSAhPSBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6Tm9uZSkKKyAgICAgICAg
ICAgIHJldHVybiBjaGFuZ2UgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6OkFkZDsKKyAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiBzdHlsZVZhbHVlID0gc3R5bGUubV9tdXRhYmxlU3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7
CisgICAgICAgIGlmICghc3R5bGVWYWx1ZSkKKyAgICAgICAgICAgIHN0eWxlVmFsdWUgPSBzdHls
ZS5tX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIGlzPENTU1ZhbHVlTGlzdD4oc3R5bGVWYWx1ZS5nZXQo
KSkgJiYgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigqc3R5bGVWYWx1ZSkuaGFzVmFsdWUobV9wcmlt
aXRpdmVWYWx1ZS5nZXQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFRleHREZWNvcmF0aW9u
Q2hhbmdlIGNoYW5nZUluU3R5bGUoY29uc3QgRWRpdGluZ1N0eWxlJiBzdHlsZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2lzVW5kZXJsaW5lID8gc3R5bGUudW5kZXJsaW5lQ2hhbmdl
KCkgOiBzdHlsZS5zdHJpa2VUaHJvdWdoQ2hhbmdlKCk7CisgICAgfQorCisgICAgYm9vbCBtX2lz
VW5kZXJsaW5lOworfTsKIAogY2xhc3MgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQgOiBwdWJsaWMg
SFRNTEVsZW1lbnRFcXVpdmFsZW50IHsKIHB1YmxpYzoKICAgICBIVE1MQXR0cmlidXRlRXF1aXZh
bGVudChDU1NQcm9wZXJ0eUlELCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSk7CiAgICAgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQoQ1NT
UHJvcGVydHlJRCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpOwogCi0gICAgYm9vbCBt
YXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW0pIGNvbnN0IHsgcmV0dXJuIEhUTUxFbGVtZW50RXF1
aXZhbGVudDo6bWF0Y2hlcyhlbGVtKSAmJiBlbGVtLT5oYXNBdHRyaWJ1dGUobV9hdHRyTmFtZSk7
IH0KKyAgICBib29sIG1hdGNoZXMoY29uc3QgRWxlbWVudCYgZWxlbSkgY29uc3QgeyByZXR1cm4g
SFRNTEVsZW1lbnRFcXVpdmFsZW50OjptYXRjaGVzKGVsZW0pICYmIGVsZW0uaGFzQXR0cmlidXRl
KG1fYXR0ck5hbWUpOyB9CiAgICAgdmlydHVhbCBib29sIGhhc0F0dHJpYnV0ZSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0eWxlKEVs
ZW1lbnQqLCBTdHlsZVByb3BlcnRpZXMqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgdmFsdWVJ
c1ByZXNlbnRJblN0eWxlKEVsZW1lbnQmLCBjb25zdCBFZGl0aW5nU3R5bGUmKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkVG9TdHlsZShFbGVtZW50KiwgRWRpdGluZ1N0eWxlKikgY29uc3Q7
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBhdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFs
dWUoRWxlbWVudCopIGNvbnN0OwogICAgIGlubGluZSBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyTmFtZTsgfQpAQCAtMjYwLDEwICsyNzYs
MTAgQEAgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ6OkhUTUxBdHRyaWJ1dGVFcQogewogfQogCi1i
b29sIEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVu
dCogZWxlbWVudCwgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSkgY29uc3QKK2Jvb2wgSFRNTEF0dHJp
YnV0ZUVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50JiBlbGVtZW50LCBj
b25zdCBFZGl0aW5nU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoZWxlbWVudCk7Ci0gICAgUmVmUHRyPENT
U1ZhbHVlPiBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0
eUlEKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gYXR0cmlidXRlVmFsdWVBc0NTU1Zh
bHVlKCZlbGVtZW50KTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHN0eWxlVmFsdWUgPSBzdHlsZS5t
X211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOwogICAgIAog
ICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVQdHIodmFsdWUsIHN0eWxlVmFsdWUpOwogfQpAQCAt
MzE1LDI3ICszMzEsMjYgQEAgZmxvYXQgRWRpdGluZ1N0eWxlOjpOb0ZvbnREZWx0YSA9IDAuMGY7
CiAKIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKCkKICAgICA6IG1fc2hvdWxkVXNlRml4ZWRE
ZWZhdWx0Rm9udFNpemUoZmFsc2UpCisgICAgLCBtX3VuZGVybGluZUNoYW5nZShzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oVGV4dERlY29yYXRpb25DaGFuZ2U6Ok5vbmUpKQorICAgICwgbV9zdHJpa2VU
aHJvdWdoQ2hhbmdlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihUZXh0RGVjb3JhdGlvbkNoYW5nZTo6
Tm9uZSkpCiAgICAgLCBtX2ZvbnRTaXplRGVsdGEoTm9Gb250RGVsdGEpCiB7CiB9CiAKIEVkaXRp
bmdTdHlsZTo6RWRpdGluZ1N0eWxlKE5vZGUqIG5vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUgcHJv
cGVydGllc1RvSW5jbHVkZSkKLSAgICA6IG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUo
ZmFsc2UpCi0gICAgLCBtX2ZvbnRTaXplRGVsdGEoTm9Gb250RGVsdGEpCisgICAgOiBFZGl0aW5n
U3R5bGUoKQogewogICAgIGluaXQobm9kZSwgcHJvcGVydGllc1RvSW5jbHVkZSk7CiB9CiAKIEVk
aXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgUHJvcGVy
dGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQotICAgIDogbV9zaG91bGRVc2VGaXhl
ZERlZmF1bHRGb250U2l6ZShmYWxzZSkKLSAgICAsIG1fZm9udFNpemVEZWx0YShOb0ZvbnREZWx0
YSkKKyAgICA6IEVkaXRpbmdTdHlsZSgpCiB7CiAgICAgaW5pdChwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpLCBwcm9wZXJ0aWVzVG9JbmNsdWRlKTsKIH0KIAogRWRpdGluZ1N0eWxlOjpFZGl0aW5n
U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSkKLSAgICA6IG1fc2hvdWxkVXNlRml4
ZWREZWZhdWx0Rm9udFNpemUoZmFsc2UpCi0gICAgLCBtX2ZvbnRTaXplRGVsdGEoTm9Gb250RGVs
dGEpCisgICAgOiBFZGl0aW5nU3R5bGUoKQogewogICAgIGlmIChzdHlsZSkKICAgICAgICAgbV9t
dXRhYmxlU3R5bGUgPSBzdHlsZS0+bXV0YWJsZUNvcHkoKTsKQEAgLTM0MywxMSArMzU4LDE4IEBA
IEVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0IFN0eWxlUHIKIH0KIAogRWRpdGluZ1N0
eWxlOjpFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgIDogbV9tdXRhYmxlU3R5bGUoMCkKLSAgICAsIG1fc2hvdWxkVXNlRml4ZWRE
ZWZhdWx0Rm9udFNpemUoZmFsc2UpCi0gICAgLCBtX2ZvbnRTaXplRGVsdGEoTm9Gb250RGVsdGEp
CisgICAgOiBFZGl0aW5nU3R5bGUoKQogewogICAgIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZh
bHVlKTsKKyAgICBleHRyYWN0Rm9udFNpemVEZWx0YSgpOworfQorCitFZGl0aW5nU3R5bGU6OkVk
aXRpbmdTdHlsZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlSUQgdmFsdWUpCisg
ICAgOiBFZGl0aW5nU3R5bGUoKQoreworICAgIG1fbXV0YWJsZVN0eWxlID0gTXV0YWJsZVN0eWxl
UHJvcGVydGllczo6Y3JlYXRlKCk7CisgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIHZhbHVlKTsKKyAgICBleHRyYWN0Rm9udFNpemVEZWx0YSgpOwogfQogCiBFZGl0
aW5nU3R5bGU6On5FZGl0aW5nU3R5bGUoKQpAQCAtNDkyLDcgKzUxNCw4IEBAIHZvaWQgRWRpdGlu
Z1N0eWxlOjpleHRyYWN0Rm9udFNpemVEZWx0YSgKIAogYm9vbCBFZGl0aW5nU3R5bGU6OmlzRW1w
dHkoKSBjb25zdAogewotICAgIHJldHVybiAoIW1fbXV0YWJsZVN0eWxlIHx8IG1fbXV0YWJsZVN0
eWxlLT5pc0VtcHR5KCkpICYmIG1fZm9udFNpemVEZWx0YSA9PSBOb0ZvbnREZWx0YTsKKyAgICBy
ZXR1cm4gKCFtX211dGFibGVTdHlsZSB8fCBtX211dGFibGVTdHlsZS0+aXNFbXB0eSgpKSAmJiBt
X2ZvbnRTaXplRGVsdGEgPT0gTm9Gb250RGVsdGEKKyAgICAgICAgJiYgdW5kZXJsaW5lQ2hhbmdl
KCkgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6Ok5vbmUgJiYgc3RyaWtlVGhyb3VnaENoYW5nZSgp
ID09IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lOwogfQogCiBib29sIEVkaXRpbmdTdHlsZTo6
dGV4dERpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uJiB3cml0aW5nRGlyZWN0aW9uKSBjb25zdApA
QCAtNTM3LDExICs1NjAsNjEgQEAgdm9pZCBFZGl0aW5nU3R5bGU6Om92ZXJyaWRlV2l0aFN0eWxl
KGNvbgogICAgIHJldHVybiBtZXJnZVN0eWxlKHN0eWxlLCBPdmVycmlkZVZhbHVlcyk7CiB9CiAK
K3N0YXRpYyB2b2lkIGFwcGx5VGV4dERlY29yYXRpb25DaGFuZ2VUb1ZhbHVlTGlzdChDU1NWYWx1
ZUxpc3QmIHZhbHVlTGlzdCwgVGV4dERlY29yYXRpb25DaGFuZ2UgY2hhbmdlLCBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+JiYgdmFsdWUpCit7CisgICAgc3dpdGNoIChjaGFuZ2UpIHsKKyAgICBjYXNl
IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFRl
eHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQ6CisgICAgICAgIHZhbHVlTGlzdC5hcHBlbmQoV1RGOjpt
b3ZlKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dERlY29yYXRpb25DaGFu
Z2U6OlJlbW92ZToKKyAgICAgICAgdmFsdWVMaXN0LnJlbW92ZUFsbCgmdmFsdWUuZ2V0KCkpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgRWRpdGluZ1N0eWxlOjpvdmVycmlkZVR5
cGluZ1N0eWxlQXQoY29uc3QgRWRpdGluZ1N0eWxlJiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uKQoreworICAgIG1lcmdlU3R5bGUoc3R5bGUubV9tdXRhYmxlU3R5bGUuZ2V0KCksIE92
ZXJyaWRlVmFsdWVzKTsKKworICAgIG1fZm9udFNpemVEZWx0YSArPSBzdHlsZS5tX2ZvbnRTaXpl
RGVsdGE7CisKKyAgICBwcmVwYXJlVG9BcHBseUF0KHBvc2l0aW9uLCBFZGl0aW5nU3R5bGU6OlBy
ZXNlcnZlV3JpdGluZ0RpcmVjdGlvbik7CisKKyAgICBhdXRvIHVuZGVybGluZUNoYW5nZSA9IHN0
eWxlLnVuZGVybGluZUNoYW5nZSgpOworICAgIGF1dG8gc3RyaWtlVGhyb3VnaENoYW5nZSA9IHN0
eWxlLnN0cmlrZVRocm91Z2hDaGFuZ2UoKTsKKyAgICBpZiAodW5kZXJsaW5lQ2hhbmdlID09IFRl
eHREZWNvcmF0aW9uQ2hhbmdlOjpOb25lICYmIHN0cmlrZVRocm91Z2hDaGFuZ2UgPT0gVGV4dERl
Y29yYXRpb25DaGFuZ2U6Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9tdXRh
YmxlU3R5bGUpCisgICAgICAgIG1fbXV0YWJsZVN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGll
czo6Y3JlYXRlKCk7CisKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IHVuZGVybGluZSA9IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVVuZGVybGluZSk7Cisg
ICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxpbmVUaHJvdWdoKTsKKyAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gbV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CisgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gdmFsdWVMaXN0OworICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkg
eworICAgICAgICB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkuY29w
eSgpOworICAgICAgICBhcHBseVRleHREZWNvcmF0aW9uQ2hhbmdlVG9WYWx1ZUxpc3QoKnZhbHVl
TGlzdCwgdW5kZXJsaW5lQ2hhbmdlLCBXVEY6Om1vdmUodW5kZXJsaW5lKSk7CisgICAgICAgIGFw
cGx5VGV4dERlY29yYXRpb25DaGFuZ2VUb1ZhbHVlTGlzdCgqdmFsdWVMaXN0LCBzdHJpa2VUaHJv
dWdoQ2hhbmdlLCBXVEY6Om1vdmUobGluZVRocm91Z2gpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAg
ICAgIGlmICh1bmRlcmxpbmVDaGFuZ2UgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6OkFkZCkKKyAg
ICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKFdURjo6bW92ZSh1bmRlcmxpbmUpKTsKKyAgICAg
ICAgaWYgKHN0cmlrZVRocm91Z2hDaGFuZ2UgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6OkFkZCkK
KyAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKFdURjo6bW92ZShsaW5lVGhyb3VnaCkpOwor
ICAgIH0KKyAgICBtX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgdmFsdWVMaXN0LmdldCgpKTsKK30KKwogdm9pZCBFZGl0
aW5nU3R5bGU6OmNsZWFyKCkKIHsKICAgICBtX211dGFibGVTdHlsZS5jbGVhcigpOwogICAgIG1f
c2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUgPSBmYWxzZTsKICAgICBtX2ZvbnRTaXplRGVs
dGEgPSBOb0ZvbnREZWx0YTsKKyAgICBzZXRVbmRlcmxpbmVDaGFuZ2UoVGV4dERlY29yYXRpb25D
aGFuZ2U6Ok5vbmUpOworICAgIHNldFN0cmlrZVRocm91Z2hDaGFuZ2UoVGV4dERlY29yYXRpb25D
aGFuZ2U6Ok5vbmUpOwogfQogCiBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxl
Ojpjb3B5KCkgY29uc3QKQEAgLTU1MCw2ICs2MjMsOCBAQCBQYXNzUmVmUHRyPEVkaXRpbmdTdHls
ZT4gRWRpdGluZ1N0eWxlOjpjCiAgICAgaWYgKG1fbXV0YWJsZVN0eWxlKQogICAgICAgICBjb3B5
LT5tX211dGFibGVTdHlsZSA9IG1fbXV0YWJsZVN0eWxlLT5tdXRhYmxlQ29weSgpOwogICAgIGNv
cHktPm1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUgPSBtX3Nob3VsZFVzZUZpeGVkRGVm
YXVsdEZvbnRTaXplOworICAgIGNvcHktPm1fdW5kZXJsaW5lQ2hhbmdlID0gbV91bmRlcmxpbmVD
aGFuZ2U7CisgICAgY29weS0+bV9zdHJpa2VUaHJvdWdoQ2hhbmdlID0gbV9zdHJpa2VUaHJvdWdo
Q2hhbmdlOwogICAgIGNvcHktPm1fZm9udFNpemVEZWx0YSA9IG1fZm9udFNpemVEZWx0YTsKICAg
ICByZXR1cm4gY29weTsKIH0KQEAgLTY5NCwxNiArNzY5LDY3IEBAIFRyaVN0YXRlIEVkaXRpbmdT
dHlsZTo6dHJpU3RhdGVPZlN0eWxlKGMKICAgICByZXR1cm4gc3RhdGU7CiB9CiAKLWJvb2wgRWRp
dGluZ1N0eWxlOjpjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVu
dCogZWxlbWVudCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSwgVmVjdG9yPENTU1Byb3Bl
cnR5SUQ+KiBjb25mbGljdGluZ1Byb3BlcnRpZXMpIGNvbnN0CitzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlTGlzdD4gdGV4dERlY29yYXRpb25WYWx1ZUxpc3QoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBw
cm9wZXJ0aWVzKQoreworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBwcm9wZXJ0aWVzLmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisgICAgaWYgKCF2
YWx1ZSB8fCAhaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZS5nZXQoKSk7Cit9CisK
K2Jvb2wgRWRpdGluZ1N0eWxlOjpjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5
bGVkRWxlbWVudCogZWxlbWVudCwgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+KiBuZXdJ
bmxpbmVTdHlsZVB0ciwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSkgY29uc3QKIHsKICAg
ICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgQVNTRVJUKCFjb25mbGljdGluZ1Byb3BlcnRpZXMgfHwg
Y29uZmxpY3RpbmdQcm9wZXJ0aWVzLT5pc0VtcHR5KCkpOwogCiAgICAgY29uc3QgU3R5bGVQcm9w
ZXJ0aWVzKiBpbmxpbmVTdHlsZSA9IGVsZW1lbnQtPmlubGluZVN0eWxlKCk7Ci0gICAgaWYgKCFt
X211dGFibGVTdHlsZSB8fCAhaW5saW5lU3R5bGUpCisgICAgaWYgKCFpbmxpbmVTdHlsZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgY29uZmxpY3RzID0gZmFsc2U7CisgICAgUmVm
UHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG5ld0lubGluZVN0eWxlOworICAgIGlmIChuZXdJ
bmxpbmVTdHlsZVB0cikgeworICAgICAgICBuZXdJbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlLT5t
dXRhYmxlQ29weSgpOworICAgICAgICAqbmV3SW5saW5lU3R5bGVQdHIgPSBuZXdJbmxpbmVTdHls
ZTsKKyAgICB9CisKKyAgICBib29sIHNob3VsZFJlbW92ZVVuZGVybGluZSA9IHVuZGVybGluZUNo
YW5nZSgpID09IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpSZW1vdmU7CisgICAgYm9vbCBzaG91bGRS
ZW1vdmVTdHJpa2VUaHJvdWdoID0gc3RyaWtlVGhyb3VnaENoYW5nZSgpID09IFRleHREZWNvcmF0
aW9uQ2hhbmdlOjpSZW1vdmU7CisgICAgaWYgKHNob3VsZFJlbW92ZVVuZGVybGluZSB8fCBzaG91
bGRSZW1vdmVTdHJpa2VUaHJvdWdoKSB7CisgICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWVMaXN0
PiB2YWx1ZUxpc3QgPSB0ZXh0RGVjb3JhdGlvblZhbHVlTGlzdCgqaW5saW5lU3R5bGUpKSB7Cisg
ICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBuZXdWYWx1ZUxpc3QgPSB2YWx1ZUxpc3Qt
PmNvcHkoKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGV4dHJhY3RlZFZhbHVl
TGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKKworICAgICAgICAg
ICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB1bmRlcmxpbmUgPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpOworICAgICAgICAgICAgaWYgKHNo
b3VsZFJlbW92ZVVuZGVybGluZSAmJiB2YWx1ZUxpc3QtPmhhc1ZhbHVlKHVuZGVybGluZS5wdHIo
KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld0lubGluZVN0eWxlKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBuZXdWYWx1ZUxpc3QtPnJlbW92
ZUFsbCh1bmRlcmxpbmUucHRyKCkpOworICAgICAgICAgICAgICAgIGV4dHJhY3RlZFZhbHVlTGlz
dC0+YXBwZW5kKFdURjo6bW92ZSh1bmRlcmxpbmUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUxpbmVUaHJvdWdoKTsKKyAgICAgICAgICAg
IGlmIChzaG91bGRSZW1vdmVTdHJpa2VUaHJvdWdoICYmIHZhbHVlTGlzdC0+aGFzVmFsdWUobGlu
ZVRocm91Z2gucHRyKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFuZXdJbmxpbmVTdHlsZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgbmV3VmFs
dWVMaXN0LT5yZW1vdmVBbGwobGluZVRocm91Z2gucHRyKCkpOworICAgICAgICAgICAgICAgIGV4
dHJhY3RlZFZhbHVlTGlzdC0+YXBwZW5kKFdURjo6bW92ZShsaW5lVGhyb3VnaCkpOworICAgICAg
ICAgICAgfQogCi0gICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IG1fbXV0YWJsZVN0eWxlLT5w
cm9wZXJ0eUNvdW50KCk7CisgICAgICAgICAgICBpZiAoZXh0cmFjdGVkVmFsdWVMaXN0LT5sZW5n
dGgoKSkgeworICAgICAgICAgICAgICAgIGNvbmZsaWN0cyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgaWYgKG5ld1ZhbHVlTGlzdC0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0lu
bGluZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCBuZXdWYWx1
ZUxpc3QpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV3SW5s
aW5lU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworCisg
ICAgICAgICAgICAgICAgaWYgKGV4dHJhY3RlZFN0eWxlKSB7CisgICAgICAgICAgICAgICAgICAg
IGJvb2wgaXNJbXBvcnRhbnQgPSBpbmxpbmVTdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChDU1NQ
cm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkU3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIGV4dHJhY3RlZFZhbHVl
TGlzdC0+Y3NzVGV4dCgpLCBpc0ltcG9ydGFudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9
IG1fbXV0YWJsZVN0eWxlID8gbV9tdXRhYmxlU3R5bGUtPnByb3BlcnR5Q291bnQoKSA6IDA7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkgewogICAgICAg
ICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBtX211dGFibGVTdHlsZS0+cHJvcGVydHlBdChp
KS5pZCgpOwogCkBAIC03MTIsMzUgKzgzOCwzNiBAQCBib29sIEVkaXRpbmdTdHlsZTo6Y29uZmxp
Y3RzV2l0aElubGluZVN0CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAocHJv
cGVydHlJRCA9PSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0ICYmIGlu
bGluZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24p
KSB7Ci0gICAgICAgICAgICBpZiAoIWNvbmZsaWN0aW5nUHJvcGVydGllcykKKyAgICAgICAgICAg
IGlmICghbmV3SW5saW5lU3R5bGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICBjb25mbGljdGluZ1Byb3BlcnRpZXMtPmFwcGVuZChDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uKTsKKyAgICAgICAgICAgIGNvbmZsaWN0cyA9IHRydWU7CisgICAgICAgICAgICBuZXdJ
bmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CiAg
ICAgICAgICAgICBpZiAoZXh0cmFjdGVkU3R5bGUpCiAgICAgICAgICAgICAgICAgZXh0cmFjdGVk
U3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIGlubGluZVN0eWxl
LT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pLCBpbmxpbmVTdHls
ZS0+cHJvcGVydHlJc0ltcG9ydGFudChDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKSk7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW5saW5lU3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICBpZiAocHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpICYmIGlu
bGluZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKSkgewot
ICAgICAgICAgICAgaWYgKCFjb25mbGljdGluZ1Byb3BlcnRpZXMpCisgICAgICAgICAgICBpZiAo
IW5ld0lubGluZVN0eWxlKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgY29uZmxpY3RpbmdQcm9wZXJ0aWVzLT5hcHBlbmQoQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwor
ICAgICAgICAgICAgY29uZmxpY3RzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5ld0lubGluZVN0eWxl
LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbik7CiAgICAgICAgICAgICBpZiAo
ZXh0cmFjdGVkU3R5bGUpCiAgICAgICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPnNldFByb3Bl
cnR5KHByb3BlcnR5SUQsIGlubGluZVN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQp
LCBpbmxpbmVTdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eUlEKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoIWNvbmZsaWN0aW5nUHJvcGVydGllcykKKyAgICAgICAgaWYgKCFu
ZXdJbmxpbmVTdHlsZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGNvbmZs
aWN0aW5nUHJvcGVydGllcy0+YXBwZW5kKHByb3BlcnR5SUQpOwotCisgICAgICAgIGNvbmZsaWN0
cyA9IHRydWU7CisgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0
eUlEKTsKICAgICAgICAgaWYgKGV4dHJhY3RlZFN0eWxlKQogICAgICAgICAgICAgZXh0cmFjdGVk
U3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIGlubGluZVN0eWxlLT5nZXRQcm9wZXJ0eVZh
bHVlKHByb3BlcnR5SUQpLCBpbmxpbmVTdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0
eUlEKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbmZsaWN0aW5nUHJvcGVydGllcyAmJiAhY29u
ZmxpY3RpbmdQcm9wZXJ0aWVzLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuIGNvbmZsaWN0czsKIH0K
IAogc3RhdGljIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTEVsZW1lbnRFcXVpdmFs
ZW50Pj4mIGh0bWxFbGVtZW50RXF1aXZhbGVudHMoKQpAQCAtNzY2LDE0ICs4OTMsMTQgQEAgc3Rh
dGljIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTAogCiBib29sIEVkaXRpbmdTdHls
ZTo6Y29uZmxpY3RzV2l0aEltcGxpY2l0U3R5bGVPZkVsZW1lbnQoSFRNTEVsZW1lbnQqIGVsZW1l
bnQsIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUsIFNob3VsZEV4dHJhY3RNYXRjaGluZ1N0
eWxlIHNob3VsZEV4dHJhY3RNYXRjaGluZ1N0eWxlKSBjb25zdAogewotICAgIGlmICghbV9tdXRh
YmxlU3R5bGUpCisgICAgaWYgKGlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxIVE1MRWxlbWVudEVxdWl2YWxlbnQ+PiYg
SFRNTEVsZW1lbnRFcXVpdmFsZW50cyA9IGh0bWxFbGVtZW50RXF1aXZhbGVudHMoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IEhUTUxFbGVtZW50RXF1aXZhbGVudHMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgY29uc3QgSFRNTEVsZW1lbnRFcXVpdmFsZW50KiBlcXVpdmFsZW50ID0gSFRN
TEVsZW1lbnRFcXVpdmFsZW50c1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKGVxdWl2YWxlbnQtPm1h
dGNoZXMoZWxlbWVudCkgJiYgZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxlKG1fbXV0
YWJsZVN0eWxlLmdldCgpKQotICAgICAgICAgICAgJiYgKHNob3VsZEV4dHJhY3RNYXRjaGluZ1N0
eWxlID09IEV4dHJhY3RNYXRjaGluZ1N0eWxlIHx8ICFlcXVpdmFsZW50LT52YWx1ZUlzUHJlc2Vu
dEluU3R5bGUoZWxlbWVudCwgbV9tdXRhYmxlU3R5bGUuZ2V0KCkpKSkgeworICAgICAgICBpZiAo
ZXF1aXZhbGVudC0+bWF0Y2hlcygqZWxlbWVudCkgJiYgZXF1aXZhbGVudC0+cHJvcGVydHlFeGlz
dHNJblN0eWxlKCp0aGlzKQorICAgICAgICAgICAgJiYgKHNob3VsZEV4dHJhY3RNYXRjaGluZ1N0
eWxlID09IEV4dHJhY3RNYXRjaGluZ1N0eWxlIHx8ICFlcXVpdmFsZW50LT52YWx1ZUlzUHJlc2Vu
dEluU3R5bGUoKmVsZW1lbnQsICp0aGlzKSkpIHsKICAgICAgICAgICAgIGlmIChleHRyYWN0ZWRT
dHlsZSkKICAgICAgICAgICAgICAgICBlcXVpdmFsZW50LT5hZGRUb1N0eWxlKGVsZW1lbnQsIGV4
dHJhY3RlZFN0eWxlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODAzLDEzICs5MzAs
MTQgQEAgc3RhdGljIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTAogYm9vbCBFZGl0
aW5nU3R5bGU6OmNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxlT2ZBdHRyaWJ1dGVzKEhUTUxFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBpZiAoIW1f
bXV0YWJsZVN0eWxlKQorICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTEF0dHJpYnV0ZUVxdWl2YWxl
bnQ+PiYgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnRzID0gaHRtbEF0dHJpYnV0ZUVxdWl2YWxlbnRz
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBIVE1MQXR0cmlidXRlRXF1aXZhbGVudHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS0+
bWF0Y2hlcyhlbGVtZW50KSAmJiBIVE1MQXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPnByb3BlcnR5
RXhpc3RzSW5TdHlsZShtX211dGFibGVTdHlsZS5nZXQoKSkKLSAgICAgICAgICAgICYmICFIVE1M
QXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPnZhbHVlSXNQcmVzZW50SW5TdHlsZShlbGVtZW50LCBt
X211dGFibGVTdHlsZS5nZXQoKSkpCisgICAgICAgIGlmIChIVE1MQXR0cmlidXRlRXF1aXZhbGVu
dHNbaV0tPm1hdGNoZXMoKmVsZW1lbnQpCisgICAgICAgICAgICAmJiBIVE1MQXR0cmlidXRlRXF1
aXZhbGVudHNbaV0tPnByb3BlcnR5RXhpc3RzSW5TdHlsZSgqdGhpcykKKyAgICAgICAgICAgICYm
ICFIVE1MQXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPnZhbHVlSXNQcmVzZW50SW5TdHlsZSgqZWxl
bWVudCwgKnRoaXMpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC04MzQs
OCArOTYyLDggQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmV4dHJhY3RDb25mbGljdGluZ0ltcAogICAg
ICAgICBpZiAoc2hvdWxkUHJlc2VydmVXcml0aW5nRGlyZWN0aW9uID09IFByZXNlcnZlV3JpdGlu
Z0RpcmVjdGlvbiAmJiBlcXVpdmFsZW50LT5hdHRyaWJ1dGVOYW1lKCkgPT0gSFRNTE5hbWVzOjpk
aXJBdHRyKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKCFlcXVpdmFsZW50
LT5tYXRjaGVzKGVsZW1lbnQpIHx8ICFlcXVpdmFsZW50LT5wcm9wZXJ0eUV4aXN0c0luU3R5bGUo
bV9tdXRhYmxlU3R5bGUuZ2V0KCkpCi0gICAgICAgICAgICB8fCAoc2hvdWxkRXh0cmFjdE1hdGNo
aW5nU3R5bGUgPT0gRG9Ob3RFeHRyYWN0TWF0Y2hpbmdTdHlsZSAmJiBlcXVpdmFsZW50LT52YWx1
ZUlzUHJlc2VudEluU3R5bGUoZWxlbWVudCwgbV9tdXRhYmxlU3R5bGUuZ2V0KCkpKSkKKyAgICAg
ICAgaWYgKCFlcXVpdmFsZW50LT5tYXRjaGVzKCplbGVtZW50KSB8fCAhZXF1aXZhbGVudC0+cHJv
cGVydHlFeGlzdHNJblN0eWxlKCp0aGlzKQorICAgICAgICAgICAgfHwgKHNob3VsZEV4dHJhY3RN
YXRjaGluZ1N0eWxlID09IERvTm90RXh0cmFjdE1hdGNoaW5nU3R5bGUgJiYgZXF1aXZhbGVudC0+
dmFsdWVJc1ByZXNlbnRJblN0eWxlKCplbGVtZW50LCAqdGhpcykpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgaWYgKGV4dHJhY3RlZFN0eWxlKQpAQCAtODQ5LDEwICs5NzcsMjcg
QEAgYm9vbCBFZGl0aW5nU3R5bGU6OmV4dHJhY3RDb25mbGljdGluZ0ltcAogCiBib29sIEVkaXRp
bmdTdHlsZTo6c3R5bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5bGVPZk5vZGUoTm9kZSogbm9kZSkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fbXV0YWJsZVN0eWxlKQorICAgIGlmIChpc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRT
dHlsZShub2RlKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydGllc05vdEluKCptX211dGFibGVTdHls
ZSwgY29tcHV0ZWRTdHlsZSktPmlzRW1wdHkoKTsKKworICAgIGJvb2wgc2hvdWxkQWRkVW5kZXJs
aW5lID0gdW5kZXJsaW5lQ2hhbmdlKCkgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6OkFkZDsKKyAg
ICBib29sIHNob3VsZEFkZExpbmVUaHJvdWdoID0gc3RyaWtlVGhyb3VnaENoYW5nZSgpID09IFRl
eHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQ7CisgICAgaWYgKHNob3VsZEFkZFVuZGVybGluZSB8fCBz
aG91bGRBZGRMaW5lVGhyb3VnaCkgeworICAgICAgICBib29sIGhhc1VuZGVybGluZSA9IGZhbHNl
OworICAgICAgICBib29sIGhhc0xpbmVUaHJvdWdoID0gZmFsc2U7CisgICAgICAgIGlmIChSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0eVZhbHVlKENTU1Byb3Bl
cnR5VGV4dERlY29yYXRpb24pKSB7CisgICAgICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0
KCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBDU1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCA9IGRv
d25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKKyAgICAgICAgICAgICAgICBoYXNVbmRlcmxp
bmUgPSB2YWx1ZUxpc3QuaGFzVmFsdWUoJmNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZVVuZGVybGluZSkuZ2V0KCkpOworICAgICAgICAgICAgICAgIGhhc0xpbmVU
aHJvdWdoID0gdmFsdWVMaXN0Lmhhc1ZhbHVlKCZjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCkuZ2V0KCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmICgoc2hvdWxkQWRkVW5kZXJsaW5lICYmICFoYXNVbmRlcmxpbmUp
IHx8IChzaG91bGRBZGRMaW5lVGhyb3VnaCAmJiAhaGFzTGluZVRocm91Z2gpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiAhbV9tdXRhYmxlU3R5bGUgfHwg
Z2V0UHJvcGVydGllc05vdEluKCptX211dGFibGVTdHlsZSwgY29tcHV0ZWRTdHlsZSktPmlzRW1w
dHkoKTsKIH0KIAogYm9vbCBFZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0eWxlZFNwYW5PckhUTUxF
cXVpdmFsZW50KGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtZW50KQpAQCAtODY0LDcgKzEwMDksNyBA
QCBib29sIEVkaXRpbmdTdHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9yCiAgICAgICAgIGNvbnN0
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTEVsZW1lbnRFcXVpdmFsZW50Pj4mIEhUTUxFbGVt
ZW50RXF1aXZhbGVudHMgPSBodG1sRWxlbWVudEVxdWl2YWxlbnRzKCk7CiAgICAgICAgIHNpemVf
dCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFRNTEVsZW1lbnRFcXVpdmFsZW50cy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgaWYgKEhUTUxFbGVtZW50RXF1aXZhbGVudHNbaV0tPm1h
dGNoZXMoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChIVE1MRWxlbWVudEVxdWl2YWxlbnRz
W2ldLT5tYXRjaGVzKCplbGVtZW50KSkgewogICAgICAgICAgICAgICAgIGVsZW1lbnRJc1NwYW5P
ckVsZW1lbnRFcXVpdmFsZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KQEAgLTg3Nyw3ICsxMDIyLDcgQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmVsZW1lbnRJ
c1N0eWxlZFNwYW5PcgogICAgIHVuc2lnbmVkIG1hdGNoZWRBdHRyaWJ1dGVzID0gMDsKICAgICBj
b25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50Pj4mIEhU
TUxBdHRyaWJ1dGVFcXVpdmFsZW50cyA9IGh0bWxBdHRyaWJ1dGVFcXVpdmFsZW50cygpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnRzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmIChIVE1MQXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPm1hdGNoZXMo
ZWxlbWVudCkgJiYgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnRzW2ldLT5hdHRyaWJ1dGVOYW1lKCkg
IT0gSFRNTE5hbWVzOjpkaXJBdHRyKQorICAgICAgICBpZiAoSFRNTEF0dHJpYnV0ZUVxdWl2YWxl
bnRzW2ldLT5tYXRjaGVzKCplbGVtZW50KSAmJiBIVE1MQXR0cmlidXRlRXF1aXZhbGVudHNbaV0t
PmF0dHJpYnV0ZU5hbWUoKSAhPSBIVE1MTmFtZXM6OmRpckF0dHIpCiAgICAgICAgICAgICBtYXRj
aGVkQXR0cmlidXRlcysrOwogICAgIH0KIApAQCAtOTY5LDEwICsxMTE0LDE0IEBAIHZvaWQgRWRp
dGluZ1N0eWxlOjptZXJnZUlubGluZVN0eWxlT2ZFbGUKIH0KIAogc3RhdGljIGlubGluZSBib29s
IGVsZW1lbnRNYXRjaGVzQW5kUHJvcGVydHlJc05vdEluSW5saW5lU3R5bGVEZWNsKGNvbnN0IEhU
TUxFbGVtZW50RXF1aXZhbGVudCogZXF1aXZhbGVudCwgY29uc3QgU3R5bGVkRWxlbWVudCogZWxl
bWVudCwKLSAgICBFZGl0aW5nU3R5bGU6OkNTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlIG1vZGUsIFN0
eWxlUHJvcGVydGllcyogc3R5bGUpCisgICAgRWRpdGluZ1N0eWxlOjpDU1NQcm9wZXJ0eU92ZXJy
aWRlTW9kZSBtb2RlLCBFZGl0aW5nU3R5bGUmIHN0eWxlKQogewotICAgIHJldHVybiBlcXVpdmFs
ZW50LT5tYXRjaGVzKGVsZW1lbnQpICYmICghZWxlbWVudC0+aW5saW5lU3R5bGUoKSB8fCAhZXF1
aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxlKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpKQot
ICAgICAgICAmJiAobW9kZSA9PSBFZGl0aW5nU3R5bGU6Ok92ZXJyaWRlVmFsdWVzIHx8ICFlcXVp
dmFsZW50LT5wcm9wZXJ0eUV4aXN0c0luU3R5bGUoc3R5bGUpKTsKKyAgICBpZiAoIWVxdWl2YWxl
bnQtPm1hdGNoZXMoKmVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1v
ZGUgIT0gRWRpdGluZ1N0eWxlOjpPdmVycmlkZVZhbHVlcyAmJiBlcXVpdmFsZW50LT5wcm9wZXJ0
eUV4aXN0c0luU3R5bGUoc3R5bGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gIWVsZW1lbnQtPmlubGluZVN0eWxlKCkgfHwgIWVxdWl2YWxlbnQtPnByb3BlcnR5RXhpc3Rz
SW5TdHlsZShFZGl0aW5nU3R5bGU6OmNyZWF0ZShlbGVtZW50LT5pbmxpbmVTdHlsZSgpKS5nZXQo
KSk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGV4dHJh
Y3RFZGl0aW5nUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0aW5n
U3R5bGU6OlByb3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5jbHVkZSkKQEAgLTEwMDUs
NyArMTE1NCw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZUlubGluZUFuZEltcGxpY2kKIAog
ICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTEVsZW1lbnRFcXVpdmFsZW50Pj4m
IGVsZW1lbnRFcXVpdmFsZW50cyA9IGh0bWxFbGVtZW50RXF1aXZhbGVudHMoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGVsZW1lbnRFcXVpdmFsZW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoZWxlbWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2wo
ZWxlbWVudEVxdWl2YWxlbnRzW2ldLmdldCgpLCBlbGVtZW50LCBtb2RlLCBtX211dGFibGVTdHls
ZS5nZXQoKSkpCisgICAgICAgIGlmIChlbGVtZW50TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklu
bGluZVN0eWxlRGVjbChlbGVtZW50RXF1aXZhbGVudHNbaV0uZ2V0KCksIGVsZW1lbnQsIG1vZGUs
ICp0aGlzKSkKICAgICAgICAgICAgIGVsZW1lbnRFcXVpdmFsZW50c1tpXS0+YWRkVG9TdHlsZShl
bGVtZW50LCB0aGlzKTsKICAgICB9CiAKQEAgLTEwMTMsNyArMTE2Miw3IEBAIHZvaWQgRWRpdGlu
Z1N0eWxlOjptZXJnZUlubGluZUFuZEltcGxpY2kKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGF0dHJpYnV0ZUVxdWl2YWxlbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChhdHRyaWJ1
dGVFcXVpdmFsZW50c1tpXS0+YXR0cmlidXRlTmFtZSgpID09IEhUTUxOYW1lczo6ZGlyQXR0cikK
ICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgZGlyZWN0
aW9uYWxpdHkKLSAgICAgICAgaWYgKGVsZW1lbnRNYXRjaGVzQW5kUHJvcGVydHlJc05vdEluSW5s
aW5lU3R5bGVEZWNsKGF0dHJpYnV0ZUVxdWl2YWxlbnRzW2ldLmdldCgpLCBlbGVtZW50LCBtb2Rl
LCBtX211dGFibGVTdHlsZS5nZXQoKSkpCisgICAgICAgIGlmIChlbGVtZW50TWF0Y2hlc0FuZFBy
b3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChhdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS5nZXQo
KSwgZWxlbWVudCwgbW9kZSwgKnRoaXMpKQogICAgICAgICAgICAgYXR0cmlidXRlRXF1aXZhbGVu
dHNbaV0tPmFkZFRvU3R5bGUoZWxlbWVudCwgdGhpcyk7CiAgICAgfQogfQpAQCAtMTA0OSwxNiAr
MTE5OCwxNiBAQCBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjp3CiB9CiAK
IAotc3RhdGljIHZvaWQgbWVyZ2VUZXh0RGVjb3JhdGlvblZhbHVlcyhDU1NWYWx1ZUxpc3QqIG1l
cmdlZFZhbHVlLCBjb25zdCBDU1NWYWx1ZUxpc3QqIHZhbHVlVG9NZXJnZSkKK3N0YXRpYyB2b2lk
IG1lcmdlVGV4dERlY29yYXRpb25WYWx1ZXMoQ1NTVmFsdWVMaXN0JiBtZXJnZWRWYWx1ZSwgY29u
c3QgQ1NTVmFsdWVMaXN0JiB2YWx1ZVRvTWVyZ2UpCiB7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiB1bmRlcmxpbmUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVVbmRlcmxpbmUpOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZVRo
cm91Z2ggPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5l
VGhyb3VnaCk7CiAKLSAgICBpZiAodmFsdWVUb01lcmdlLT5oYXNWYWx1ZSh1bmRlcmxpbmUuZ2V0
KCkpICYmICFtZXJnZWRWYWx1ZS0+aGFzVmFsdWUodW5kZXJsaW5lLmdldCgpKSkKLSAgICAgICAg
bWVyZ2VkVmFsdWUtPmFwcGVuZCh1bmRlcmxpbmUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYg
KHZhbHVlVG9NZXJnZS5oYXNWYWx1ZSh1bmRlcmxpbmUuZ2V0KCkpICYmICFtZXJnZWRWYWx1ZS5o
YXNWYWx1ZSh1bmRlcmxpbmUuZ2V0KCkpKQorICAgICAgICBtZXJnZWRWYWx1ZS5hcHBlbmQodW5k
ZXJsaW5lLnJlbGVhc2VOb25OdWxsKCkpOwogCi0gICAgaWYgKHZhbHVlVG9NZXJnZS0+aGFzVmFs
dWUobGluZVRocm91Z2guZ2V0KCkpICYmICFtZXJnZWRWYWx1ZS0+aGFzVmFsdWUobGluZVRocm91
Z2guZ2V0KCkpKQotICAgICAgICBtZXJnZWRWYWx1ZS0+YXBwZW5kKGxpbmVUaHJvdWdoLnJlbGVh
c2VOb25OdWxsKCkpOworICAgIGlmICh2YWx1ZVRvTWVyZ2UuaGFzVmFsdWUobGluZVRocm91Z2gu
Z2V0KCkpICYmICFtZXJnZWRWYWx1ZS5oYXNWYWx1ZShsaW5lVGhyb3VnaC5nZXQoKSkpCisgICAg
ICAgIG1lcmdlZFZhbHVlLmFwcGVuZChsaW5lVGhyb3VnaC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0K
IAogdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBz
dHlsZSwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSkKQEAgLTEwNzcsMTYgKzEyMjYsMTkg
QEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUoY29uc3QgU3R5bAogICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gbV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
cHJvcGVydHkuaWQoKSk7CiAKICAgICAgICAgLy8gdGV4dCBkZWNvcmF0aW9ucyBuZXZlciBvdmVy
cmlkZSB2YWx1ZXMuCi0gICAgICAgIGlmICgocHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eVRl
eHREZWNvcmF0aW9uIHx8IHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVj
b3JhdGlvbnNJbkVmZmVjdCkgJiYgcHJvcGVydHkudmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSAmJiB2
YWx1ZSkgeworICAgICAgICBpZiAoKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlUZXh0RGVj
b3JhdGlvbiB8fCBwcm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRp
b25zSW5FZmZlY3QpCisgICAgICAgICAgICAmJiBpczxDU1NWYWx1ZUxpc3Q+KCpwcm9wZXJ0eS52
YWx1ZSgpKSAmJiB2YWx1ZSkgewogICAgICAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZh
bHVlKSkgewotICAgICAgICAgICAgICAgIG1lcmdlVGV4dERlY29yYXRpb25WYWx1ZXMoZG93bmNh
c3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZS5nZXQoKSksIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4ocHJv
cGVydHkudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG5l
d1ZhbHVlID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpLmNvcHkoKTsKKyAgICAgICAg
ICAgICAgICBtZXJnZVRleHREZWNvcmF0aW9uVmFsdWVzKCpuZXdWYWx1ZSwgZG93bmNhc3Q8Q1NT
VmFsdWVMaXN0PigqcHJvcGVydHkudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIG1fbXV0YWJs
ZVN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpLCBuZXdWYWx1ZS5yZWxlYXNlKCksIHBy
b3BlcnR5LmlzSW1wb3J0YW50KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgdmFsdWUgPSBudWxscHRyOyAvLyB0ZXh0LWRlY29yYXRpb246
IG5vbmUgaXMgZXF1aXZhbGVudCB0byBub3QgaGF2aW5nIHRoZSBwcm9wZXJ0eS4KICAgICAgICAg
fQogCiAgICAgICAgIGlmIChtb2RlID09IE92ZXJyaWRlVmFsdWVzIHx8IChtb2RlID09IERvTm90
T3ZlcnJpZGVWYWx1ZXMgJiYgIXZhbHVlKSkKLSAgICAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5z
ZXRQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCksIHBy
b3BlcnR5LmlzSW1wb3J0YW50KCkpOworICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFBy
b3BlcnR5KHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCksIHByb3BlcnR5LmlzSW1wb3J0
YW50KCkpOwogICAgIH0KIAogICAgIGludCBvbGRGb250U2l6ZURlbHRhID0gbV9mb250U2l6ZURl
bHRhOwpAQCAtMTM5Nyw4ICsxNTQ5LDggQEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKEVkaXRp
bmdTdHlsZSogcwogICAgICwgbV9hcHBseVN1YnNjcmlwdChmYWxzZSkKICAgICAsIG1fYXBwbHlT
dXBlcnNjcmlwdChmYWxzZSkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBwb3NpdGlvbi5h
bmNob3JOb2RlKCkgPyAmcG9zaXRpb24uYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpIDogMDsKLSAg
ICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+c3R5bGUoKSB8fCAhZG9jdW1lbnQgfHwgIWRvY3VtZW50
LT5mcmFtZSgpKQorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCkgPyAmcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+ZG9jdW1lbnQoKSA6IDA7CisgICAg
aWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PmZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5j
b250YWluZXJOb2RlKCk7CkBAIC0xNDA4LDEyICsxNTYwLDQ0IEBAIFN0eWxlQ2hhbmdlOjpTdHls
ZUNoYW5nZShFZGl0aW5nU3R5bGUqIHMKICAgICBDb21wdXRlZFN0eWxlRXh0cmFjdG9yIGNvbXB1
dGVkU3R5bGUobm9kZSk7CiAKICAgICAvLyBGSVhNRTogdGFrZSBjYXJlIG9mIGJhY2tncm91bmQt
Y29sb3IgaW4gZWZmZWN0Ci0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG11dGFi
bGVTdHlsZSA9IGdldFByb3BlcnRpZXNOb3RJbigqc3R5bGUtPnN0eWxlKCksIGNvbXB1dGVkU3R5
bGUpOworICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBtdXRhYmxlU3R5bGUgPSBz
dHlsZS0+c3R5bGUoKSA/CisgICAgICAgIGdldFByb3BlcnRpZXNOb3RJbigqc3R5bGUtPnN0eWxl
KCksIGNvbXB1dGVkU3R5bGUpIDogTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAK
ICAgICByZWNvbmNpbGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMobXV0YWJsZVN0eWxlLmdldCgp
KTsKLSAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS5zaG91bGRTdHlsZVdpdGhD
U1MoKSkKKyAgICBib29sIHNob3VsZFN0eWxlV2l0aENTUyA9IGRvY3VtZW50LT5mcmFtZSgpLT5l
ZGl0b3IoKS5zaG91bGRTdHlsZVdpdGhDU1MoKTsKKyAgICBpZiAoIXNob3VsZFN0eWxlV2l0aENT
UykKICAgICAgICAgZXh0cmFjdFRleHRTdHlsZXMoZG9jdW1lbnQsICptdXRhYmxlU3R5bGUsIGNv
bXB1dGVkU3R5bGUudXNlRml4ZWRGb250RGVmYXVsdFNpemUoKSk7CiAKKyAgICBib29sIHNob3Vs
ZEFkZFVuZGVybGluZSA9IHN0eWxlLT51bmRlcmxpbmVDaGFuZ2UoKSA9PSBUZXh0RGVjb3JhdGlv
bkNoYW5nZTo6QWRkOworICAgIGJvb2wgc2hvdWxkQWRkU3RyaWtlVGhyb3VnaCA9IHN0eWxlLT5z
dHJpa2VUaHJvdWdoQ2hhbmdlKCkgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6OkFkZDsKKyAgICBp
ZiAoc2hvdWxkQWRkVW5kZXJsaW5lIHx8IHNob3VsZEFkZFN0cmlrZVRocm91Z2gpIHsKKyAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNvbXB1dGVkU3R5bGUucHJvcGVydHlWYWx1ZShD
U1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKKyAgICAgICAgaWYgKCF2
YWx1ZSB8fCAhaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQorICAgICAgICAgICAgdmFsdWUgPSBj
b21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisK
KyAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVMaXN0OworICAgICAgICBpZiAodmFs
dWUgJiYgaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQorICAgICAgICAgICAgdmFsdWVMaXN0ID0g
ZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZS5nZXQoKSk7CisKKyAgICAgICAgUmVmPENTU1Zh
bHVlPiB1bmRlcmxpbmUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVVbmRlcmxpbmUpOworICAgICAgICBib29sIGhhc1VuZGVybGluZSA9IHZhbHVlTGlzdCAm
JiB2YWx1ZUxpc3QtPmhhc1ZhbHVlKHVuZGVybGluZS5wdHIoKSk7CisKKyAgICAgICAgUmVmPENT
U1ZhbHVlPiBsaW5lVGhyb3VnaCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUxpbmVUaHJvdWdoKTsKKyAgICAgICAgYm9vbCBoYXNMaW5lVGhyb3VnaCA9IHZh
bHVlTGlzdCAmJiB2YWx1ZUxpc3QtPmhhc1ZhbHVlKGxpbmVUaHJvdWdoLnB0cigpKTsKKworICAg
ICAgICBpZiAoc2hvdWxkU3R5bGVXaXRoQ1NTKSB7CisgICAgICAgICAgICB2YWx1ZUxpc3QgPSB2
YWx1ZUxpc3QgPyB2YWx1ZUxpc3QtPmNvcHkoKSA6IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VT
ZXBhcmF0ZWQoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZGRVbmRlcmxpbmUgJiYgIWhhc1Vu
ZGVybGluZSkKKyAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChXVEY6Om1vdmUodW5k
ZXJsaW5lKSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkQWRkU3RyaWtlVGhyb3VnaCAmJiAhaGFz
TGluZVRocm91Z2gpCisgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoV1RGOjptb3Zl
KGxpbmVUaHJvdWdoKSk7CisgICAgICAgICAgICBtdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb24sIHZhbHVlTGlzdC5nZXQoKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2FwcGx5VW5kZXJsaW5lID0gc2hvdWxkQWRkVW5kZXJsaW5lICYm
ICFoYXNVbmRlcmxpbmU7CisgICAgICAgICAgICBtX2FwcGx5TGluZVRocm91Z2ggPSBzaG91bGRB
ZGRTdHJpa2VUaHJvdWdoICYmICFoYXNMaW5lVGhyb3VnaDsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIC8vIENoYW5naW5nIHRoZSB3aGl0ZXNwYWNlIHN0eWxlIGluIGEgdGFiIHNwYW4gd291bGQg
Y29sbGFwc2UgdGhlIHRhYiBpbnRvIGEgc3BhY2UuCiAgICAgaWYgKGlzVGFiU3BhblRleHROb2Rl
KHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpIHx8IGlzVGFiU3Bhbk5vZGUoKHBvc2l0aW9uLmRl
cHJlY2F0ZWROb2RlKCkpKSkKICAgICAgICAgbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdoaXRlU3BhY2UpOwpAQCAtMTQyMyw4ICsxNjA3LDI1IEBAIFN0eWxlQ2hhbmdl
OjpTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHMKICAgICBpZiAobXV0YWJsZVN0eWxlLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZUJpZGkpICYmICFzdHlsZS0+c3R5bGUo
KS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbikpCiAgICAgICAgIG11
dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIHN0eWxlLT5zdHls
ZSgpLT5nZXRQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKSk7CiAKLSAgICAvLyBT
YXZlIHRoZSByZXN1bHQgZm9yIGxhdGVyCi0gICAgbV9jc3NTdHlsZSA9IG11dGFibGVTdHlsZS0+
YXNUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgaWYgKCFtdXRhYmxlU3R5bGUtPmlzRW1w
dHkoKSkKKyAgICAgICAgbV9jc3NTdHlsZSA9IG11dGFibGVTdHlsZTsKK30KKworYm9vbCBTdHls
ZUNoYW5nZTo6b3BlcmF0b3I9PShjb25zdCBTdHlsZUNoYW5nZSYgb3RoZXIpCit7CisgICAgaWYg
KG1fYXBwbHlCb2xkICE9IG90aGVyLm1fYXBwbHlCb2xkCisgICAgICAgIHx8IG1fYXBwbHlJdGFs
aWMgIT0gb3RoZXIubV9hcHBseUl0YWxpYworICAgICAgICB8fCBtX2FwcGx5VW5kZXJsaW5lICE9
IG90aGVyLm1fYXBwbHlVbmRlcmxpbmUKKyAgICAgICAgfHwgbV9hcHBseUxpbmVUaHJvdWdoICE9
IG90aGVyLm1fYXBwbHlMaW5lVGhyb3VnaAorICAgICAgICB8fCBtX2FwcGx5U3Vic2NyaXB0ICE9
IG90aGVyLm1fYXBwbHlTdWJzY3JpcHQKKyAgICAgICAgfHwgbV9hcHBseVN1cGVyc2NyaXB0ICE9
IG90aGVyLm1fYXBwbHlTdXBlcnNjcmlwdAorICAgICAgICB8fCBtX2FwcGx5Rm9udENvbG9yICE9
IG90aGVyLm1fYXBwbHlGb250Q29sb3IKKyAgICAgICAgfHwgbV9hcHBseUZvbnRGYWNlICE9IG90
aGVyLm1fYXBwbHlGb250RmFjZQorICAgICAgICB8fCBtX2FwcGx5Rm9udFNpemUgIT0gb3RoZXIu
bV9hcHBseUZvbnRTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gKCFt
X2Nzc1N0eWxlICYmICFvdGhlci5tX2Nzc1N0eWxlKQorICAgICAgICB8fCAobV9jc3NTdHlsZSAm
JiBvdGhlci5tX2Nzc1N0eWxlICYmIG1fY3NzU3R5bGUtPmFzVGV4dCgpID09IG90aGVyLm1fY3Nz
U3R5bGUtPmFzVGV4dCgpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0VGV4dERlY29yYXRpb25Qcm9w
ZXJ0eShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgY29uc3QgQ1NTVmFsdWVMaXN0KiBu
ZXdUZXh0RGVjb3JhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiAxODM0OTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICsz
NCwxMCBAQAogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJX
cml0aW5nRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UcmlTdGF0ZS5oPgpAQCAtNjEsNiArNjMsOCBAQCBj
bGFzcyBTdHlsZVByb3BlcnRpZXM7CiBjbGFzcyBTdHlsZWRFbGVtZW50OwogY2xhc3MgVmlzaWJs
ZVNlbGVjdGlvbjsKIAorZW51bSBjbGFzcyBUZXh0RGVjb3JhdGlvbkNoYW5nZSB7IE5vbmUsIEFk
ZCwgUmVtb3ZlIH07CisKIGNsYXNzIEVkaXRpbmdTdHlsZSA6IHB1YmxpYyBSZWZDb3VudGVkPEVk
aXRpbmdTdHlsZT4gewogcHVibGljOgogCkBAIC05NSw2ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVkaXRpbmdTdHlsZShwcm9wZXJ0eUlELCB2YWx1ZSkp
OwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8RWRpdGluZ1N0eWxlPiBjcmVhdGUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBDU1NWYWx1ZUlEIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRWRpdGluZ1N0eWxlKHByb3BlcnR5SUQsIHZhbHVlKSk7CisgICAgfQor
CiAgICAgV0VCQ09SRV9FWFBPUlQgfkVkaXRpbmdTdHlsZSgpOwogCiAgICAgTXV0YWJsZVN0eWxl
UHJvcGVydGllcyogc3R5bGUoKSB7IHJldHVybiBtX211dGFibGVTdHlsZS5nZXQoKTsgfQpAQCAt
MTAyLDYgKzExMSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICB2
b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4pOwogICAgIHZv
aWQgb3ZlcnJpZGVXaXRoU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKik7CisgICAgdm9pZCBv
dmVycmlkZVR5cGluZ1N0eWxlQXQoY29uc3QgRWRpdGluZ1N0eWxlJiwgY29uc3QgUG9zaXRpb24m
KTsKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNvcHko
KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZXh0cmFjdEFuZFJlbW92ZUJs
b2NrUHJvcGVydGllcygpOwpAQCAtMTE1LDkgKzEyNSwxMCBAQCBwdWJsaWM6CiAgICAgVHJpU3Rh
dGUgdHJpU3RhdGVPZlN0eWxlKEVkaXRpbmdTdHlsZSopIGNvbnN0OwogICAgIFRyaVN0YXRlIHRy
aVN0YXRlT2ZTdHlsZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CiAgICAgYm9vbCBj
b25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkg
Y29uc3QgeyByZXR1cm4gY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50KGVsZW1lbnQs
IDAsIDApOyB9Ci0gICAgYm9vbCBjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5
bGVkRWxlbWVudCogZWxlbWVudCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSwgVmVjdG9y
PENTU1Byb3BlcnR5SUQ+JiBjb25mbGljdGluZ1Byb3BlcnRpZXMpIGNvbnN0CisgICAgYm9vbCBj
b25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCwg
UmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+JiBuZXdJbmxpbmVTdHlsZSwKKyAgICAgICAg
RWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoZWxlbWVudCwgZXh0cmFjdGVkU3R5
bGUsICZjb25mbGljdGluZ1Byb3BlcnRpZXMpOworICAgICAgICByZXR1cm4gY29uZmxpY3RzV2l0
aElubGluZVN0eWxlT2ZFbGVtZW50KGVsZW1lbnQsICZuZXdJbmxpbmVTdHlsZSwgZXh0cmFjdGVk
U3R5bGUpOwogICAgIH0KICAgICBib29sIGNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxlT2ZFbGVt
ZW50KEhUTUxFbGVtZW50KiwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSA9IDAsIFNob3Vs
ZEV4dHJhY3RNYXRjaGluZ1N0eWxlID0gRG9Ob3RFeHRyYWN0TWF0Y2hpbmdTdHlsZSkgY29uc3Q7
CiAgICAgYm9vbCBjb25mbGljdHNXaXRoSW1wbGljaXRTdHlsZU9mQXR0cmlidXRlcyhIVE1MRWxl
bWVudCopIGNvbnN0OwpAQCAtMTQ0LDYgKzE1NSwxMSBAQCBwdWJsaWM6CiAgICAgZmxvYXQgZm9u
dFNpemVEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNpemVEZWx0YTsgfQogICAgIGJvb2wg
aGFzRm9udFNpemVEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNpemVEZWx0YSAhPSBOb0Zv
bnREZWx0YTsgfQogICAgIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUoKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplOyB9CisgICAgCisgICAg
dm9pZCBzZXRVbmRlcmxpbmVDaGFuZ2UoVGV4dERlY29yYXRpb25DaGFuZ2UgY2hhbmdlKSB7IG1f
dW5kZXJsaW5lQ2hhbmdlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYW5nZSk7IH0KKyAgICBU
ZXh0RGVjb3JhdGlvbkNoYW5nZSB1bmRlcmxpbmVDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxUZXh0RGVjb3JhdGlvbkNoYW5nZT4obV91bmRlcmxpbmVDaGFuZ2UpOyB9CisgICAg
dm9pZCBzZXRTdHJpa2VUaHJvdWdoQ2hhbmdlKFRleHREZWNvcmF0aW9uQ2hhbmdlIGNoYW5nZSkg
eyBtX3N0cmlrZVRocm91Z2hDaGFuZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhbmdlKTsg
fQorICAgIFRleHREZWNvcmF0aW9uQ2hhbmdlIHN0cmlrZVRocm91Z2hDaGFuZ2UoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0RGVjb3JhdGlvbkNoYW5nZT4obV9zdHJpa2VUaHJvdWdo
Q2hhbmdlKTsgfQogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZUF0
U2VsZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJvb2wgc2hvdWxkVXNlQmFj
a2dyb3VuZENvbG9ySW5FZmZlY3QgPSBmYWxzZSk7CiAgICAgc3RhdGljIFdyaXRpbmdEaXJlY3Rp
b24gdGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgRWRp
dGluZ1N0eWxlKiB0eXBpbmdTdHlsZSwgYm9vbCYgaGFzTmVzdGVkT3JNdWx0aXBsZUVtYmVkZGlu
Z3MpOwpAQCAtMTUzLDIxICsxNjksMjUgQEAgcHJpdmF0ZToKICAgICBFZGl0aW5nU3R5bGUoY29u
c3QgUG9zaXRpb24mLCBQcm9wZXJ0aWVzVG9JbmNsdWRlKTsKICAgICBleHBsaWNpdCBFZGl0aW5n
U3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKik7CiAgICAgRWRpdGluZ1N0eWxlKENTU1Byb3Bl
cnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIEVkaXRpbmdTdHlsZShDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZUlEKTsKICAgICB2b2lkIGluaXQoTm9kZSosIFByb3BlcnRpZXNUb0luY2x1
ZGUpOwogICAgIHZvaWQgcmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChSZW5k
ZXJTdHlsZSopOwogICAgIHZvaWQgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAgICAgdm9pZCBleHRyYWN0Rm9u
dFNpemVEZWx0YSgpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFRyaVN0YXRlIHRyaVN0YXRl
T2ZTdHlsZShUJiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVz
KSBjb25zdDsKLSAgICBib29sIGNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChTdHls
ZWRFbGVtZW50KiwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSwgVmVjdG9yPENTU1Byb3Bl
cnR5SUQ+KiBjb25mbGljdGluZ1Byb3BlcnRpZXMpIGNvbnN0OworICAgIGJvb2wgY29uZmxpY3Rz
V2l0aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqLCBSZWZQdHI8TXV0YWJsZVN0
eWxlUHJvcGVydGllcz4qIG5ld0lubGluZVN0eWxlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0
eWxlKSBjb25zdDsKICAgICB2b2lkIG1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVu
dChTdHlsZWRFbGVtZW50KiwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUsIFByb3BlcnRpZXNUb0lu
Y2x1ZGUpOwogICAgIHZvaWQgbWVyZ2VTdHlsZShjb25zdCBTdHlsZVByb3BlcnRpZXMqLCBDU1NQ
cm9wZXJ0eU92ZXJyaWRlTW9kZSk7CiAKICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gbV9tdXRhYmxlU3R5bGU7Ci0gICAgYm9vbCBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRT
aXplOworICAgIHVuc2lnbmVkIG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUgOiAxOwor
ICAgIHVuc2lnbmVkIG1fdW5kZXJsaW5lQ2hhbmdlIDogMjsKKyAgICB1bnNpZ25lZCBtX3N0cmlr
ZVRocm91Z2hDaGFuZ2UgOiAyOwogICAgIGZsb2F0IG1fZm9udFNpemVEZWx0YTsKIAogICAgIGZy
aWVuZCBjbGFzcyBIVE1MRWxlbWVudEVxdWl2YWxlbnQ7CiAgICAgZnJpZW5kIGNsYXNzIEhUTUxB
dHRyaWJ1dGVFcXVpdmFsZW50OworICAgIGZyaWVuZCBjbGFzcyBIVE1MVGV4dERlY29yYXRpb25F
cXVpdmFsZW50OwogfTsKIAogY2xhc3MgU3R5bGVDaGFuZ2UgewpAQCAtMTgzLDcgKzIwMyw3IEBA
IHB1YmxpYzoKIAogICAgIFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSosIGNvbnN0IFBvc2l0aW9u
Jik7CiAKLSAgICBTdHJpbmcgY3NzU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2Nzc1N0eWxlOyB9
CisgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBjc3NTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3NzU3R5bGUuZ2V0KCk7IH0KICAgICBib29sIGFwcGx5Qm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1f
YXBwbHlCb2xkOyB9CiAgICAgYm9vbCBhcHBseUl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1fYXBw
bHlJdGFsaWM7IH0KICAgICBib29sIGFwcGx5VW5kZXJsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9h
cHBseVVuZGVybGluZTsgfQpAQCAtMTk4LDE5ICsyMTgsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5n
IGZvbnRGYWNlKCkgeyByZXR1cm4gbV9hcHBseUZvbnRGYWNlOyB9CiAgICAgU3RyaW5nIGZvbnRT
aXplKCkgeyByZXR1cm4gbV9hcHBseUZvbnRTaXplOyB9CiAKLSAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgU3R5bGVDaGFuZ2UmIG90aGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3NzU3R5
bGUgPT0gb3RoZXIubV9jc3NTdHlsZQotICAgICAgICAgICAgJiYgbV9hcHBseUJvbGQgPT0gb3Ro
ZXIubV9hcHBseUJvbGQKLSAgICAgICAgICAgICYmIG1fYXBwbHlJdGFsaWMgPT0gb3RoZXIubV9h
cHBseUl0YWxpYwotICAgICAgICAgICAgJiYgbV9hcHBseVVuZGVybGluZSA9PSBvdGhlci5tX2Fw
cGx5VW5kZXJsaW5lCi0gICAgICAgICAgICAmJiBtX2FwcGx5TGluZVRocm91Z2ggPT0gb3RoZXIu
bV9hcHBseUxpbmVUaHJvdWdoCi0gICAgICAgICAgICAmJiBtX2FwcGx5U3Vic2NyaXB0ID09IG90
aGVyLm1fYXBwbHlTdWJzY3JpcHQKLSAgICAgICAgICAgICYmIG1fYXBwbHlTdXBlcnNjcmlwdCA9
PSBvdGhlci5tX2FwcGx5U3VwZXJzY3JpcHQKLSAgICAgICAgICAgICYmIG1fYXBwbHlGb250Q29s
b3IgPT0gb3RoZXIubV9hcHBseUZvbnRDb2xvcgotICAgICAgICAgICAgJiYgbV9hcHBseUZvbnRG
YWNlID09IG90aGVyLm1fYXBwbHlGb250RmFjZQotICAgICAgICAgICAgJiYgbV9hcHBseUZvbnRT
aXplID09IG90aGVyLm1fYXBwbHlGb250U2l6ZTsKLSAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFN0eWxlQ2hhbmdlJik7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlQ2hh
bmdlJiBvdGhlcikKICAgICB7CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKQEAg
LTIxOCw3ICsyMjYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgZXh0cmFjdFRleHRT
dHlsZXMoRG9jdW1lbnQqLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgYm9vbCBzaG91bGRVc2VG
aXhlZEZvbnREZWZhdWx0U2l6ZSk7CiAKLSAgICBTdHJpbmcgbV9jc3NTdHlsZTsKKyAgICBSZWZQ
dHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbV9jc3NTdHlsZTsKICAgICBib29sIG1fYXBwbHlC
b2xkOwogICAgIGJvb2wgbV9hcHBseUl0YWxpYzsKICAgICBib29sIG1fYXBwbHlVbmRlcmxpbmU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxODM0OTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4Nyw3
ICs4ODcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqCiAgICAg
ICAgIC8vIGRvIG5vdGhpbmcKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0
aW9uOjpDYXJldFNlbGVjdGlvbjoKLSAgICAgICAgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKHN0
eWxlLCBlZGl0aW5nQWN0aW9uKTsKKyAgICAgICAgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVk
aXRpbmdTdHlsZTo6Y3JlYXRlKHN0eWxlKSwgZWRpdGluZ0FjdGlvbik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb246CiAgICAgICAgIGlm
IChzdHlsZSkKQEAgLTg5NSw2ICs4OTUsMjIgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoU3R5
bGVQcm9wZXJ0aWVzKgogICAgICAgICBicmVhazsKICAgICB9CiB9CisKK3ZvaWQgRWRpdG9yOjph
cHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGlu
Z0FjdGlvbikKK3sKKyAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uVHlwZSgpKSB7CisgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlv
bjoKKyAgICAgICAgLy8gZG8gbm90aGluZworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZpc2li
bGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uOgorICAgICAgICBjb21wdXRlQW5kU2V0VHlwaW5n
U3R5bGUoKnN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBW
aXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKKyAgICAgICAgaWYgKHN0eWxlKQorICAg
ICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQo
KSwgc3R5bGUuZ2V0KCksIGVkaXRpbmdBY3Rpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQogICAgIAogYm9vbCBFZGl0b3I6OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBz
dHlsZSwgUmFuZ2UqIHJhbmdlKQogeyAgIApAQCAtOTI0LDYgKzk0MCwxNiBAQCB2b2lkIEVkaXRv
cjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlCiAgICAgICAgIGFwcGx5U3R5bGUoc3R5bGUs
IGVkaXRpbmdBY3Rpb24pOwogfQogCit2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9u
KFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikK
K3sKKyAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgZm9yIHRl
eHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHkuCisgICAgaWYgKGNs
aWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZSgpLCBtX2Zy
YW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgICAgICBhcHBs
eVN0eWxlKFdURjo6bW92ZShzdHlsZSksIGVkaXRpbmdBY3Rpb24pOworfQorCiB2b2lkIEVkaXRv
cjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUs
IEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5p
c0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKQEAgLTI5NTIsMjIgKzI5NzgsMjAgQEAgYm9v
bCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdAogICAgIHJldHVybiBjbGllbnQo
KSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CiB9CiAKLXZvaWQgRWRpdG9yOjpjb21w
dXRlQW5kU2V0VHlwaW5nU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBl
ZGl0aW5nQWN0aW9uKQordm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0
aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgaWYgKCFz
dHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpKSB7CisgICAgaWYgKHN0eWxlLmlzRW1wdHkoKSkgewog
ICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLmNsZWFyVHlwaW5nU3R5bGUoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgY3VycmVudCB0eXBpbmcgc3R5
bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGU7Ci0gICAgaWYgKG1fZnJh
bWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkgewotICAgICAgICB0eXBpbmdTdHlsZSA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKS0+Y29weSgpOwotICAgICAgICB0eXBpbmdT
dHlsZS0+b3ZlcnJpZGVXaXRoU3R5bGUoc3R5bGUpOwotICAgIH0gZWxzZQotICAgICAgICB0eXBp
bmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHN0eWxlKTsKLQotICAgIHR5cGluZ1N0eWxl
LT5wcmVwYXJlVG9BcHBseUF0KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdE
aXJlY3Rpb24pOworICAgIGlmIChhdXRvIGV4aXN0aW5nVHlwaW5nU3R5bGUgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnR5cGluZ1N0eWxlKCkpCisgICAgICAgIHR5cGluZ1N0eWxlID0gZXhpc3RpbmdU
eXBpbmdTdHlsZS0+Y29weSgpOworICAgIGVsc2UKKyAgICAgICAgdHlwaW5nU3R5bGUgPSBFZGl0
aW5nU3R5bGU6OmNyZWF0ZSgpOworICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVR5cGluZ1N0eWxl
QXQoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCku
ZGVlcEVxdWl2YWxlbnQoKSk7CiAKICAgICAvLyBIYW5kbGUgYmxvY2sgc3R5bGVzLCBzdWJzdHJh
Y3RpbmcgdGhlc2UgZnJvbSB0aGUgdHlwaW5nIHN0eWxlLgogICAgIFJlZlB0cjxFZGl0aW5nU3R5
bGU+IGJsb2NrU3R5bGUgPSB0eXBpbmdTdHlsZS0+ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJvcGVy
dGllcygpOwpAQCAtMjk3OCw2ICszMDAyLDExIEBAIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGUoU3QKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFR5cGluZ1N0eWxlKHR5
cGluZ1N0eWxlKTsKIH0KIAordm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShT
dHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK3sK
KyAgICByZXR1cm4gY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZTo6Y3JlYXRl
KCZwcm9wZXJ0aWVzKSwgZWRpdGluZ0FjdGlvbik7Cit9CisKIHZvaWQgRWRpdG9yOjp0ZXh0Rmll
bGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZSkKIHsKICAgICBpZiAoY2xpZW50KCkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDE4MzQ5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw4ICsxODMsMTAgQEAg
cHVibGljOgogICAgIGJvb2wgZGlzcGF0Y2hDUFBFdmVudChjb25zdCBBdG9taWNTdHJpbmcmLCBE
YXRhVHJhbnNmZXJBY2Nlc3NQb2xpY3kpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHlTdHlsZShTdHlsZVByb3BlcnRpZXMqLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3Bl
Y2lmaWVkKTsKKyAgICB2b2lkIGFwcGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiwgRWRp
dEFjdGlvbik7CiAgICAgdm9pZCBhcHBseVBhcmFncmFwaFN0eWxlKFN0eWxlUHJvcGVydGllcyos
IEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyosIEVkaXRBY3Rpb24p
OworICAgIHZvaWQgYXBwbHlTdHlsZVRvU2VsZWN0aW9uKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYs
IEVkaXRBY3Rpb24pOwogICAgIHZvaWQgYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0
eWxlUHJvcGVydGllcyosIEVkaXRBY3Rpb24pOwogCiAgICAgdm9pZCBhcHBsaWVkRWRpdGluZyhQ
YXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPik7CkBAIC0zNjEsNyArMzYzLDggQEAgcHVi
bGljOgogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG1hcmsoKSBjb25zdDsgLy8gTWFyaywg
dG8gYmUgdXNlZCBhcyBlbWFjcyB1c2VzIGl0LgogICAgIHZvaWQgc2V0TWFyayhjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbXB1dGVBbmRTZXRU
eXBpbmdTdHlsZShTdHlsZVByb3BlcnRpZXMqICwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25VbnNw
ZWNpZmllZCk7CisgICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxl
JiAsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyYgLCBFZGl0
QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0OwogICAgIHZvaWQgYXBwbHlF
ZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCopIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE4MzQ5NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4
LDc3ICs5OCw0NiBAQCBzdGF0aWMgRnJhbWUqIHRhcmdldEZyYW1lKEZyYW1lJiBmcmFtZSwgCiAg
ICAgcmV0dXJuIG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKIH0KIAotc3RhdGljIGJvb2wgYXBw
bHlDb21tYW5kVG9GcmFtZShGcmFtZSYgZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNl
LCBFZGl0QWN0aW9uIGFjdGlvbiwgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSkKK3N0YXRpYyBib29s
IGFwcGx5Q29tbWFuZFRvRnJhbWUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNv
dXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUpCiB7
CiAgICAgLy8gRklYTUU6IFdlIGRvbid0IGNhbGwgc2hvdWxkQXBwbHlTdHlsZSB3aGVuIHRoZSBz
b3VyY2UgaXMgRE9NOyBpcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGF0PwogICAgIHN3aXRj
aCAoc291cmNlKSB7CiAgICAgY2FzZSBDb21tYW5kRnJvbU1lbnVPcktleUJpbmRpbmc6Ci0gICAg
ICAgIGZyYW1lLmVkaXRvcigpLmFwcGx5U3R5bGVUb1NlbGVjdGlvbihzdHlsZSwgYWN0aW9uKTsK
KyAgICAgICAgZnJhbWUuZWRpdG9yKCkuYXBwbHlTdHlsZVRvU2VsZWN0aW9uKFdURjo6bW92ZShz
dHlsZSksIGFjdGlvbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgQ29tbWFuZEZy
b21ET006CiAgICAgY2FzZSBDb21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJmYWNlOgotICAgICAg
ICBmcmFtZS5lZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlKTsKKyAgICAgICAgZnJhbWUuZWRpdG9y
KCkuYXBwbHlTdHlsZShXVEY6Om1vdmUoc3R5bGUpLCBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBleGVjdXRlQXBwbHlTdHlsZShGcmFt
ZSYgZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHByb3BlcnR5VmFsdWUpCitz
dGF0aWMgYm9vbCBpc1N0eWxlUHJlc2VudChFZGl0b3ImIGVkaXRvciwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBjb25zdCBjaGFyKiBvblZhbHVlKQogewotICAgIFJlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwot
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBwcm9wZXJ0eVZhbHVlKTsKLSAgICBy
ZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdl
dCgpKTsKKyAgICAvLyBTdHlsZSBpcyBjb25zaWRlcmVkIHByZXNlbnQgd2hlbgorICAgIC8vIE1h
YzogcHJlc2VudCBhdCB0aGUgYmVnaW5uaW5nIG9mIHNlbGVjdGlvbgorICAgIC8vIG90aGVyOiBw
cmVzZW50IHRocm91Z2hvdXQgdGhlIHNlbGVjdGlvbgorICAgIGlmIChlZGl0b3IuYmVoYXZpb3Io
KS5zaG91bGRUb2dnbGVTdHlsZUJhc2VkT25TdGFydE9mU2VsZWN0aW9uKCkpCisgICAgICAgIHJl
dHVybiBlZGl0b3Iuc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShwcm9wZXJ0eUlELCBvblZhbHVlKTsK
KyAgICByZXR1cm4gZWRpdG9yLnNlbGVjdGlvbkhhc1N0eWxlKHByb3BlcnR5SUQsIG9uVmFsdWUp
ID09IFRydWVUcmlTdGF0ZTsKIH0KIAotc3RhdGljIGJvb2wgZXhlY3V0ZUFwcGx5U3R5bGUoRnJh
bWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24s
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWVJRCBwcm9wZXJ0eVZhbHVlKQorc3Rh
dGljIGJvb2wgZXhlY3V0ZUFwcGx5U3R5bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291
cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eVZhbHVlKQogewotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwotICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBwcm9wZXJ0eVZhbHVlKTsKLSAgICByZXR1
cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLmdldCgp
KTsKKyAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24s
IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHByb3BlcnR5VmFsdWUpKTsKIH0KIAot
Ly8gRklYTUU6IGV4ZWN1dGVUb2dnbGVTdHlsZUluTGlzdCBkb2VzIG5vdCBoYW5kbGUgY29tcGxp
Y2F0ZWQgY2FzZXMgc3VjaCBhcyA8Yj48dT5oZWxsbzwvdT53b3JsZDwvYj4gcHJvcGVybHkuCi0v
LyAgICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IHVzZSBFZGl0b3I6OnNlbGVjdGlvbkhhc1N0eWxl
IHRvIGRldGVybWluZSB0aGUgY3VycmVudCBzdHlsZSBidXQgd2UgY2Fubm90IGZpeCB0aGlzCi0v
LyAgICAgICAgdW50aWwgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3
ODE4IGlzIHJlc29sdmVkLgotc3RhdGljIGJvb2wgZXhlY3V0ZVRvZ2dsZVN0eWxlSW5MaXN0KEZy
YW1lJiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9u
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBib29s
IGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lJiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3Vy
Y2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVl
SUQgcHJvcGVydHlWYWx1ZSkKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzZWxlY3Rpb25T
dHlsZSA9IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpKTsKLSAgICBpZiAoIXNlbGVjdGlvblN0eWxlIHx8ICFzZWxlY3Rpb25T
dHlsZS0+c3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPENTU1Zh
bHVlPiBzZWxlY3RlZENTU1ZhbHVlID0gc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCktPmdldFByb3Bl
cnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Ci0gICAgU3RyaW5nIG5ld1N0eWxlID0gQVNDSUlMaXRl
cmFsKCJub25lIik7Ci0gICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnNlbGVjdGVkQ1NTVmFsdWUp
KSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNlbGVjdGVkQ1NTVmFsdWVMaXN0ID0g
ZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PihzZWxlY3RlZENTU1ZhbHVlLmdldCgpKTsKLSAgICAgICAg
aWYgKCFzZWxlY3RlZENTU1ZhbHVlTGlzdC0+cmVtb3ZlQWxsKHZhbHVlKSkKLSAgICAgICAgICAg
IHNlbGVjdGVkQ1NTVmFsdWVMaXN0LT5hcHBlbmQoKnZhbHVlKTsKLSAgICAgICAgaWYgKHNlbGVj
dGVkQ1NTVmFsdWVMaXN0LT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG5ld1N0eWxlID0gc2VsZWN0
ZWRDU1NWYWx1ZUxpc3QtPmNzc1RleHQoKTsKLQotICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRDU1NW
YWx1ZS0+Y3NzVGV4dCgpID09ICJub25lIikKLSAgICAgICAgbmV3U3R5bGUgPSB2YWx1ZS0+Y3Nz
VGV4dCgpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBiZSBoYXZpbmcgdG8gY29udmVy
dCBuZXcgc3R5bGUgaW50byB0ZXh0LiAgV2Ugc2hvdWxkIGhhdmUgc2V0UHJvcGVydHlDU1NWYWx1
ZS4KLSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbmV3TXV0YWJsZVN0eWxlID0g
TXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7Ci0gICAgbmV3TXV0YWJsZVN0eWxlLT5z
ZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBuZXdTdHlsZSk7Ci0gICAgcmV0dXJuIGFwcGx5Q29tbWFu
ZFRvRnJhbWUoZnJhbWUsIHNvdXJjZSwgYWN0aW9uLCBuZXdNdXRhYmxlU3R5bGUuZ2V0KCkpOwor
ICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIGFjdGlvbiwgRWRp
dGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJRCwgcHJvcGVydHlWYWx1ZSkpOwogfQogCiBzdGF0
aWMgYm9vbCBleGVjdXRlVG9nZ2xlU3R5bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291
cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgY2hhciogb2ZmVmFsdWUsIGNvbnN0IGNoYXIqIG9uVmFsdWUpCiB7Ci0gICAgLy8gU3R5
bGUgaXMgY29uc2lkZXJlZCBwcmVzZW50IHdoZW4KLSAgICAvLyBNYWM6IHByZXNlbnQgYXQgdGhl
IGJlZ2lubmluZyBvZiBzZWxlY3Rpb24KLSAgICAvLyBvdGhlcjogcHJlc2VudCB0aHJvdWdob3V0
IHRoZSBzZWxlY3Rpb24KLQotICAgIGJvb2wgc3R5bGVJc1ByZXNlbnQ7Ci0gICAgaWYgKGZyYW1l
LmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkVG9nZ2xlU3R5bGVCYXNlZE9uU3RhcnRPZlNlbGVj
dGlvbigpKQotICAgICAgICBzdHlsZUlzUHJlc2VudCA9IGZyYW1lLmVkaXRvcigpLnNlbGVjdGlv
blN0YXJ0SGFzU3R5bGUocHJvcGVydHlJRCwgb25WYWx1ZSk7Ci0gICAgZWxzZQotICAgICAgICBz
dHlsZUlzUHJlc2VudCA9IGZyYW1lLmVkaXRvcigpLnNlbGVjdGlvbkhhc1N0eWxlKHByb3BlcnR5
SUQsIG9uVmFsdWUpID09IFRydWVUcmlTdGF0ZTsKLQotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+
IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJRCwgc3R5bGVJc1ByZXNlbnQg
PyBvZmZWYWx1ZSA6IG9uVmFsdWUpOwotICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZy
YW1lLCBzb3VyY2UsIGFjdGlvbiwgc3R5bGUtPnN0eWxlKCkpOworICAgIGJvb2wgc3R5bGVJc1By
ZXNlbnQgPSBpc1N0eWxlUHJlc2VudChmcmFtZS5lZGl0b3IoKSwgcHJvcGVydHlJRCwgb25WYWx1
ZSk7CisgICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJhbWUsIHNvdXJjZSwgYWN0aW9u
LCBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlELCBzdHlsZUlzUHJlc2VudCA/IG9mZlZh
bHVlIDogb25WYWx1ZSkpOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlQXBwbHlQYXJhZ3JhcGhT
dHlsZShGcmFtZSYgZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9u
IGFjdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHByb3BlcnR5
VmFsdWUpCkBAIC0xMDU4LDEwICsxMDI3LDE3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTZXRNYXJr
KEZyYW1lJiBmcmFtZSwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIFRleHREZWNvcmF0
aW9uQ2hhbmdlIHRleHREZWNvcmF0aW9uQ2hhbmdlRm9yVG9nZ2xpbmcoRWRpdG9yJiBlZGl0b3Is
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgY2hhciogb25WYWx1ZSkKK3sKKyAgICBy
ZXR1cm4gaXNTdHlsZVByZXNlbnQoZWRpdG9yLCBwcm9wZXJ0eUlELCBvblZhbHVlKSA/IFRleHRE
ZWNvcmF0aW9uQ2hhbmdlOjpSZW1vdmUgOiBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6QWRkOworfQor
CiBzdGF0aWMgYm9vbCBleGVjdXRlU3RyaWtldGhyb3VnaChGcmFtZSYgZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lVGhyb3VnaCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKENTU1ZhbHVlTGluZVRocm91Z2gpOwotICAgIHJldHVybiBleGVjdXRlVG9n
Z2xlU3R5bGVJbkxpc3QoZnJhbWUsIHNvdXJjZSwgRWRpdEFjdGlvblVuZGVybGluZSwgQ1NTUHJv
cGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgbGluZVRocm91Z2guZ2V0KCkpOwor
ICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsK
KyAgICBzdHlsZS0+c2V0U3RyaWtlVGhyb3VnaENoYW5nZSh0ZXh0RGVjb3JhdGlvbkNoYW5nZUZv
clRvZ2dsaW5nKGZyYW1lLmVkaXRvcigpLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9u
c0luRWZmZWN0LCAibGluZS10aHJvdWdoIikpOworICAgIC8vIEZJWE1FOiBOZWVkcyBhIG5ldyBF
ZGl0QWN0aW9uIQorICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2Us
IEVkaXRBY3Rpb25VbmRlcmxpbmUsIFdURjo6bW92ZShzdHlsZSkpOwogfQogCiBzdGF0aWMgYm9v
bCBleGVjdXRlU3R5bGVXaXRoQ1NTKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtMTEyNSw4ICsxMTAxLDEwIEBAIHN0YXRp
YyBib29sIGV4ZWN1dGVUcmFuc3Bvc2UoRnJhbWUmIGZyYW0KIAogc3RhdGljIGJvb2wgZXhlY3V0
ZVVuZGVybGluZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB1bmRl
cmxpbmUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZVVuZGVy
bGluZSk7Ci0gICAgcmV0dXJuIGV4ZWN1dGVUb2dnbGVTdHlsZUluTGlzdChmcmFtZSwgc291cmNl
LCBFZGl0QWN0aW9uVW5kZXJsaW5lLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0lu
RWZmZWN0LCB1bmRlcmxpbmUuZ2V0KCkpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxl
ID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKKyAgICBUZXh0RGVjb3JhdGlvbkNoYW5nZSBjaGFu
Z2UgPSB0ZXh0RGVjb3JhdGlvbkNoYW5nZUZvclRvZ2dsaW5nKGZyYW1lLmVkaXRvcigpLCBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCAidW5kZXJsaW5lIik7CisgICAg
c3R5bGUtPnNldFVuZGVybGluZUNoYW5nZShjaGFuZ2UpOworICAgIHJldHVybiBhcHBseUNvbW1h
bmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIEVkaXRBY3Rpb25VbmRlcmxpbmUsIFdURjo6bW92ZShz
dHlsZSkpOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlVW5kbyhGcmFtZSYgZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE4MzY5NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTA1LTAxICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFRvZ2dsaW5nIHVuZGVybGluZSBvciBzdHJpa2Ug
dGhyb3VnaCBhZmZlY3RzIGVhY2ggb3RoZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI3ODE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJG
cmFtZSBfc2V0VHlwaW5nU3R5bGU6d2l0aFVuZG9BY3Rpb246XSk6CisKIDIwMTUtMDUtMDEgIEJy
YWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBBUEkgdG8gZGlz
YWJsZSBtZXRhIHJlZnJlc2hlcy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQkocmV2aXNpb24gMTgzNDk3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTQxLDcgKzk0MSw3IEBAIC0gKHZvaWQpX3NldFR5
cGluZ1N0eWxlOihET01DU1NTdHlsZURlY2wKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBjcmVhdGUgYSBjb3B5IGhlcmUuCiAgICAgUmVmPE11dGFi
bGVTdHlsZVByb3BlcnRpZXM+IHByb3BlcnRpZXMoY29yZShzdHlsZSktPmNvcHlQcm9wZXJ0aWVz
KCkpOwotICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLmNvbXB1dGVBbmRTZXRUeXBp
bmdTdHlsZShwcm9wZXJ0aWVzLnB0cigpLCB1bmRvQWN0aW9uKTsKKyAgICBfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5lZGl0b3IoKS5jb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUocHJvcGVydGllcy5nZXQo
KSwgdW5kb0FjdGlvbik7CiB9CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTgzNjk1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjEgQEAKKzIwMTUtMDUtMDEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVG9nZ2xpbmcgdW5kZXJsaW5lIG9yIHN0cmlrZSB0aHJvdWdoIGFm
ZmVjdHMgZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mjc4MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRlZCBhIHJlZ3Jlc3Npb24gdGVzdCBhbmQgcmViYXNlbGluZWQgdmFyaW91cyB0
ZXN0cyBhcyBleHBsYWluZWQgYmVsb3cuCisKKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5k
L3NjcmlwdC10ZXN0cy90b2dnbGUtc3R5bGUtMi5qczogVGhlIG9yZGVyIGluIHdoaWNoIHUgYW5k
IHN0cmlrZSBlbGVtZW50cyBhcHBlYXIgaGF2ZSBzd2l0Y2hlZC4KKyAgICAgICAgKiBlZGl0aW5n
L2V4ZWNDb21tYW5kL3NjcmlwdC10ZXN0cy90b2dnbGUtdGV4dC1kZWNvcmF0aW9ucy5qczogRGl0
dG8gZm9yIGxpbmUtdGhyb3VnaCBhbmQgb3ZlcmxpbmUuCisgICAgICAgICogZWRpdGluZy9leGVj
Q29tbWFuZC90b2dnbGUtbWl4ZWQtdGV4dC1kZWNvcmF0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvdG9nZ2xlLW1peGVkLXRleHQtZGVjb3Jh
dGlvbnMuaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC90b2dnbGUt
c3R5bGUtMi1leHBlY3RlZC50eHQ6IFJlYmFzZWxpbmVkLgorICAgICAgICAqIGVkaXRpbmcvZXhl
Y0NvbW1hbmQvdG9nZ2xlLXRleHQtZGVjb3JhdGlvbnMtZXhwZWN0ZWQudHh0OiBSZWJhc2VsaW5l
ZC4KKyAgICAgICAgKiBlZGl0aW5nL3VuZG8vcmVtb3ZlLWNzcy1wcm9wZXJ0eS1hbmQtcmVtb3Zl
LXN0eWxlLWV4cGVjdGVkLnR4dDogVGhlIG9yZGVyIGluIHdoaWNoIGNvbG9yIGFuZCBmb250LXdl
aWdodCBwcm9wZXJ0aWVzCisgICAgICAgIGFwcGVhciBoYXZlIHN3aXRjaGVkLgorCiAyMDE1LTA1
LTAxICBKb3JkYW4gSGFyYmFuZCAgPGxqaGFyYkBnbWFpbC5jb20+CiAKICAgICAgICAgU3RyaW5n
I3N0YXJ0c1dpdGgvZW5kc1dpdGgvaW5jbHVkZXMgZG9uJ3QgaGFuZGxlIEluZmluaXR5IHBvc2l0
aW9uL2VuZFBvc2l0aW9uIGFyZ3MgY29ycmVjdGx5CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L2V4ZWNDb21tYW5kL3RvZ2dsZS1taXhlZC10ZXh0LWRlY29yYXRpb25zLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS1taXhl
ZC10ZXh0LWRlY29yYXRpb25zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdG9nZ2xlLW1peGVkLXRleHQtZGVjb3JhdGlvbnMtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKK1Rlc3QgdG8gbWFrZSBz
dXJlIHdlIGNhbiB0b2dnbGUgdW5kZXJsaW5lIGFuZCBzdHJpa2UgdGhyb3VnaCBzZXBhcmF0ZWx5
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworZG9jdW1lbnQuZXhlY0NvbW1hbmQo
InN0eWxlV2l0aENTUyIsIGZhbHNlLCBmYWxzZSk7CisKK1RvZ2dsaW5nIHN0cmlrZVRocm91Z2gK
K1BBU1MgY29udGVudCgiPHM+PHU+YTwvdT5iPC9zPiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgi
c3RyaWtlVGhyb3VnaCIpIGlzICI8dT5hPC91PmIiCitQQVNTIGNvbnRlbnQoIjxzPjx1PmE8L3U+
Yjx1PmM8L3U+PC9zPiIpOyBzZWxlY3QoMCwgMyk7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpIGlz
ICI8dT5hPC91PmI8dT5jPC91PiIKK1BBU1MgY29udGVudCgiPHM+YTx1PmI8L3U+Yzwvcz4iKTsg
c2VsZWN0KDAsIDMpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAiYTx1PmI8L3U+YyIKK1BB
U1MgY29udGVudCgiPHM+YTx1PmI8L3U+Yzwvcz4iKTsgc2VsZWN0KDEsIDMpOyB0b2dnbGUoInN0
cmlrZVRocm91Z2giKSBpcyAiPHN0cmlrZT5hPC9zdHJpa2U+PHU+YjwvdT5jIgorUEFTUyBjb250
ZW50KCI8cz5hPHU+YjwvdT5jPC9zPiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhy
b3VnaCIpIGlzICJhPHU+YjwvdT48c3RyaWtlPmM8L3N0cmlrZT4iCitQQVNTIGNvbnRlbnQoIjxz
Pjx1PmFiPC91Pjwvcz5jIik7IHNlbGVjdCgxLCAzKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIikg
aXMgIjx1PjxzdHJpa2U+YTwvc3RyaWtlPmI8L3U+YyIKK1BBU1MgY29udGVudCgiPHM+YTx1PmI8
L3U+PC9zPmMiKTsgc2VsZWN0KDEsIDMpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAiPHN0
cmlrZT5hPC9zdHJpa2U+PHU+YjwvdT5jIgorUEFTUyBjb250ZW50KCJhPHM+PHU+YjwvdT5jPC9z
PiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpIGlzICI8c3RyaWtlPmE8
L3N0cmlrZT48cz48dT5iPC91PmM8L3M+IgorUEFTUyBjb250ZW50KCJhPHN0cmlrZT48dT5iPC91
PmM8L3N0cmlrZT4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAi
PHN0cmlrZT5hPHU+YjwvdT5jPC9zdHJpa2U+IgorUEFTUyBjb250ZW50KCJhPHU+PHM+YmM8L3M+
PC91PiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpIGlzICI8c3RyaWtl
PmE8L3N0cmlrZT48dT48cz5iYzwvcz48L3U+IgorUEFTUyBjb250ZW50KCJhPHM+PGI+PHU+YmM8
L3U+PC9iPjwvcz4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAi
PHN0cmlrZT5hPC9zdHJpa2U+PHM+PGI+PHU+YmM8L3U+PC9iPjwvcz4iCitQQVNTIGNvbnRlbnQo
ImE8c3RyaWtlPjxiPjx1PmJjPC91PjwvYj48L3N0cmlrZT4iKTsgc2VsZWN0KDAsIDIpOyB0b2dn
bGUoInN0cmlrZVRocm91Z2giKSBpcyAiPHN0cmlrZT5hPGI+PHU+YmM8L3U+PC9iPjwvc3RyaWtl
PiIKKworVG9nZ2xpbmcgdW5kZXJsaW5lCitQQVNTIGNvbnRlbnQoIjx1PjxzPmE8L3M+YjwvdT4i
KTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUoInVuZGVybGluZSIpIGlzICI8cz5hPC9zPmIiCitQQVNT
IGNvbnRlbnQoIjx1PjxzPmE8L3M+YjxzPmM8L3M+PC91PiIpOyBzZWxlY3QoMCwgMyk7IHRvZ2ds
ZSgidW5kZXJsaW5lIikgaXMgIjxzPmE8L3M+YjxzPmM8L3M+IgorUEFTUyBjb250ZW50KCI8dT5h
PHM+Yjwvcz5jPC91PiIpOyBzZWxlY3QoMCwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMgImE8
cz5iPC9zPmMiCitQQVNTIGNvbnRlbnQoIjx1PmE8cz5iPC9zPmM8L3U+Iik7IHNlbGVjdCgxLCAz
KTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBpcyAiPHU+YTwvdT48cz5iPC9zPmMiCitQQVNTIGNvbnRl
bnQoIjx1PmE8cz5iPC9zPmM8L3U+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJ1bmRlcmxpbmUi
KSBpcyAiYTxzPmI8L3M+PHU+YzwvdT4iCitQQVNTIGNvbnRlbnQoIjx1PjxzPmFiPC9zPjwvdT5j
Iik7IHNlbGVjdCgxLCAzKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBpcyAiPHM+PHU+YTwvdT5iPC9z
PmMiCitQQVNTIGNvbnRlbnQoIjx1PmE8cz5iPC9zPjwvdT5jIik7IHNlbGVjdCgxLCAzKTsgdG9n
Z2xlKCJ1bmRlcmxpbmUiKSBpcyAiPHU+YTwvdT48cz5iPC9zPmMiCitQQVNTIGNvbnRlbnQoImE8
dT48cz5iPC9zPmM8L3U+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBpcyAi
PHU+YTxzPmI8L3M+YzwvdT4iCitQQVNTIGNvbnRlbnQoImE8cz48dT5iYzwvdT48L3M+Iik7IHNl
bGVjdCgwLCAyKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBpcyAiPHU+YTwvdT48cz48dT5iYzwvdT48
L3M+IgorUEFTUyBjb250ZW50KCJhPHU+PGI+PHM+YmM8L3M+PC9iPjwvdT4iKTsgc2VsZWN0KDAs
IDIpOyB0b2dnbGUoInVuZGVybGluZSIpIGlzICI8dT5hPGI+PHM+YmM8L3M+PC9iPjwvdT4iCitk
b2N1bWVudC5leGVjQ29tbWFuZCgic3R5bGVXaXRoQ1NTIiwgZmFsc2UsIHRydWUpOworCitUb2dn
bGluZyBzdHJpa2VUaHJvdWdoCitQQVNTIGNvbnRlbnQoJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IGxpbmUtdGhyb3VnaDsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVy
bGluZSI+YTwvc3Bhbj5iPC9zcGFuPicpOworc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRo
cm91Z2giKSBpcyAnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YTwv
c3Bhbj5iJworUEFTUyBjb250ZW50KCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5l
LXRocm91Z2g7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5hPC9z
cGFuPmI8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUiPmM8L3NwYW4+PC9z
cGFuPicpOworc2VsZWN0KDAsIDMpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAnPHNwYW4g
c3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YTwvc3Bhbj5iPHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+Yzwvc3Bhbj4nCitQQVNTIGNvbnRlbnQoJzxz
cGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmE8c3BhbiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5iPC9zcGFuPmM8L3NwYW4+Jyk7CitzZWxlY3Qo
MCwgMyk7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpIGlzICdhPHNwYW4gc3R5bGU9InRleHQtZGVj
b3JhdGlvbjogdW5kZXJsaW5lOyI+Yjwvc3Bhbj5jJworUEFTUyBjb250ZW50KCc8c3BhbiBzdHls
ZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hPHNwYW4gc3R5bGU9InRleHQtZGVj
b3JhdGlvbjogdW5kZXJsaW5lOyI+Yjwvc3Bhbj5jPC9zcGFuPicpOworc2VsZWN0KDEsIDMpOyB0
b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
bGluZS10aHJvdWdoOyI+YTwvc3Bhbj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmU7Ij5iPC9zcGFuPmMnCitQQVNTIGNvbnRlbnQoJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IGxpbmUtdGhyb3VnaDsiPmE8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmU7Ij5iPC9zcGFuPmM8L3NwYW4+Jyk7CitzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtl
VGhyb3VnaCIpIGlzICdhPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+
Yjwvc3Bhbj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5jPC9z
cGFuPicKK1BBU1MgY29udGVudCgnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10
aHJvdWdoOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YWI8L3Nw
YW4+PC9zcGFuPmMnKTsKK3NlbGVjdCgxLCAzKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIikgaXMg
JzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxzcGFuIHN0eWxlPSJ0
ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmE8L3NwYW4+Yjwvc3Bhbj5jJworUEFTUyBj
b250ZW50KCdhPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+PHNw
YW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+Yjwvc3Bhbj5jPC9zcGFuPicp
Oworc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAnPHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IHVuZGVybGluZSBsaW5lLXRocm91Z2g7Ij5iPC9zcGFuPmM8L3NwYW4+JworUEFTUyBj
b250ZW50KCdhPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PHNwYW4g
c3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YmM8L3NwYW4+PC9zcGFuPicp
Oworc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAnPHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTwvc3Bhbj48c3BhbiBzdHlsZT0idGV4
dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBs
aW5lLXRocm91Z2g7Ij5iYzwvc3Bhbj48L3NwYW4+JworUEFTUyBjb250ZW50KCdhPHNwYW4gc3R5
bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+PGI+PHNwYW4gc3R5bGU9InRleHQt
ZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YmM8L3NwYW4+PC9iPjwvc3Bhbj4nKTsKK3NlbGVjdCgw
LCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIikgaXMgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IGxpbmUtdGhyb3VnaDsiPmE8Yj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10
aHJvdWdoOyI+Yjwvc3Bhbj5jPC9zcGFuPjwvYj48L3NwYW4+JworCitUb2dnbGluZyB1bmRlcmxp
bmUKK1BBU1MgY29udGVudCgnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5l
OyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTwvc3Bhbj5i
PC9zcGFuPicpOworc2VsZWN0KDAsIDIpOyB0b2dnbGUoInVuZGVybGluZSIpIGlzICc8c3BhbiBz
dHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hPC9zcGFuPmInCitQQVNTIGNv
bnRlbnQoJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxzcGFuIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmE8L3NwYW4+YjxzcGFuIHN0eWxl
PSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmM8L3NwYW4+PC9zcGFuPicpOworc2Vs
ZWN0KDAsIDMpOyB0b2dnbGUoInVuZGVybGluZSIpIGlzICc8c3BhbiBzdHlsZT0idGV4dC1kZWNv
cmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hPC9zcGFuPmI8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0
aW9uOiBsaW5lLXRocm91Z2g7Ij5jPC9zcGFuPicKK1BBU1MgY29udGVudCgnPHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRp
b246IGxpbmUtdGhyb3VnaDsiPmI8L3NwYW4+Yzwvc3Bhbj4nKTsKK3NlbGVjdCgwLCAzKTsgdG9n
Z2xlKCJ1bmRlcmxpbmUiKSBpcyAnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUt
dGhyb3VnaDsiPmI8L3NwYW4+YycKK1BBU1MgY29udGVudCgnPHNwYW4gc3R5bGU9InRleHQtZGVj
b3JhdGlvbjogdW5kZXJsaW5lOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUt
dGhyb3VnaDsiPmI8L3NwYW4+Yzwvc3Bhbj4nKTsKK3NlbGVjdCgxLCAzKTsgdG9nZ2xlKCJ1bmRl
cmxpbmUiKSBpcyAnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YTwv
c3Bhbj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5iPC9zcGFu
PmMnCitQQVNTIGNvbnRlbnQoJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGlu
ZTsiPmE8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5iPC9zcGFu
PmM8L3NwYW4+Jyk7CitzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMgJ2E8c3Bh
biBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5iPC9zcGFuPjxzcGFuIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmM8L3NwYW4+JworUEFTUyBjb250ZW50
KCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48c3BhbiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hYjwvc3Bhbj48L3NwYW4+YycpOworc2Vs
ZWN0KDEsIDMpOyB0b2dnbGUoInVuZGVybGluZSIpIGlzICc8c3BhbiBzdHlsZT0idGV4dC1kZWNv
cmF0aW9uOiBsaW5lLXRocm91Z2g7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmU7Ij5hPC9zcGFuPmI8L3NwYW4+YycKK1BBU1MgY29udGVudCgnPHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246
IGxpbmUtdGhyb3VnaDsiPmI8L3NwYW4+PC9zcGFuPmMnKTsKK3NlbGVjdCgxLCAzKTsgdG9nZ2xl
KCJ1bmRlcmxpbmUiKSBpcyAnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5l
OyI+YTwvc3Bhbj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5i
PC9zcGFuPmMnCitQQVNTIGNvbnRlbnQoJ2E8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5i
PC9zcGFuPmM8L3NwYW4+Jyk7CitzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMg
JzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8c3BhbiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2ggdW5kZXJsaW5lOyI+Yjwvc3Bhbj5jPC9zcGFu
PicKK1BBU1MgY29udGVudCgnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhy
b3VnaDsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmJjPC9zcGFu
Pjwvc3Bhbj4nKTsKK3NlbGVjdCgwLCAyKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBpcyAnPHNwYW4g
c3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YTwvc3Bhbj48c3BhbiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0
aW9uOiB1bmRlcmxpbmU7Ij5iYzwvc3Bhbj48L3NwYW4+JworUEFTUyBjb250ZW50KCdhPHNwYW4g
c3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGI+PHNwYW4gc3R5bGU9InRleHQt
ZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YmM8L3NwYW4+PC9iPjwvc3Bhbj4nKTsKK3NlbGVj
dCgwLCAyKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBpcyAnPHNwYW4gc3R5bGU9InRleHQtZGVjb3Jh
dGlvbjogdW5kZXJsaW5lOyI+YTxiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUt
dGhyb3VnaDsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBsaW5lLXRo
cm91Z2g7Ij5iPC9zcGFuPmM8L3NwYW4+PC9iPjwvc3Bhbj4nCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGlu
Zy9leGVjQ29tbWFuZC90b2dnbGUtbWl4ZWQtdGV4dC1kZWNvcmF0aW9ucy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdG9nZ2xlLW1peGVkLXRleHQt
ZGVjb3JhdGlvbnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvdG9nZ2xlLW1peGVkLXRleHQtZGVjb3JhdGlvbnMuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE0OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
KworZGVzY3JpcHRpb24oIlRlc3QgdG8gbWFrZSBzdXJlIHdlIGNhbiB0b2dnbGUgdW5kZXJsaW5l
IGFuZCBzdHJpa2UgdGhyb3VnaCBzZXBhcmF0ZWx5LiIpCisKK3ZhciB0ZXN0Q29udGFpbmVyID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cit0ZXN0Q29udGFpbmVyLmNvbnRlbnRFZGl0
YWJsZSA9IHRydWU7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlc3RDb250YWluZXIpOwor
CitmdW5jdGlvbiB0ZXN0U2luZ2xlVG9nZ2xlKHRvZ2dsZUNvbW1hbmQsIGluaXRpYWxDb250ZW50
cywgZXhwZWN0ZWRDb250ZW50cykKK3sKKyAgICB0ZXN0Q29udGFpbmVyLmlubmVySFRNTCA9IGlu
aXRpYWxDb250ZW50czsKKyAgICBnZXRTZWxlY3Rpb24oKS5jb2xsYXBzZSh0ZXN0Q29udGFpbmVy
LCAwKTsKKyAgICBnZXRTZWxlY3Rpb24oKS5tb2RpZnkoJycpCisgICAgd2luZG93LmdldFNlbGVj
dGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKHRlc3RDb250YWluZXIpOworICAgIGRvY3VtZW50LmV4
ZWNDb21tYW5kKCJzdHlsZVdpdGhDU1MiLCBmYWxzZSwgZmFsc2UpOworICAgIGRvY3VtZW50LmV4
ZWNDb21tYW5kKHRvZ2dsZUNvbW1hbmQsIGZhbHNlLCBudWxsKTsKKyAgICBpZiAodGVzdENvbnRh
aW5lci5pbm5lckhUTUwgPT09IGV4cGVjdGVkQ29udGVudHMpIHsKKyAgICAgICAgdGVzdFBhc3Nl
ZCgib25lICIgKyB0b2dnbGVDb21tYW5kICsgIiBjb21tYW5kIGNvbnZlcnRlZCAiICsgaW5pdGlh
bENvbnRlbnRzICsgIiB0byAiICsgZXhwZWN0ZWRDb250ZW50cyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgdGVzdEZhaWxlZCgib25lICIgKyB0b2dnbGVDb21tYW5kICsgIiBjb21tYW5kIGNvbnZl
cnRlZCAiICsgaW5pdGlhbENvbnRlbnRzICsgIiB0byAiICsgdGVzdENvbnRhaW5lci5pbm5lckhU
TUwgKyAiLCBleHBlY3RlZCAiICsgZXhwZWN0ZWRDb250ZW50cyk7CisgICAgfQorfQorCitmdW5j
dGlvbiBjb250ZW50KG1hcmt1cCkgeworICAgIHRlc3RDb250YWluZXIuaW5uZXJIVE1MID0gbWFy
a3VwOworfQorCitmdW5jdGlvbiBzZWxlY3Qob2Zmc2V0LCBleHRlbnQpIHsKKyAgICBnZXRTZWxl
Y3Rpb24oKS5jb2xsYXBzZSh0ZXN0Q29udGFpbmVyLCAwKTsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG9mZnNldDsgaSsrKQorICAgICAgICBnZXRTZWxlY3Rpb24oKS5tb2RpZnkoJ21vdmUnLCAn
Zm9yd2FyZCcsICdjaGFyYWN0ZXInKTsKKyAgICBmb3IgKHZhciBpID0gb2Zmc2V0OyBpIDwgZXh0
ZW50OyBpKyspCisgICAgICAgIGdldFNlbGVjdGlvbigpLm1vZGlmeSgnZXh0ZW5kJywgJ2Zvcndh
cmQnLCAnY2hhcmFjdGVyJyk7Cit9CisKK2Z1bmN0aW9uIHRvZ2dsZShjb21tYW5kKSB7CisgICAg
ZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIG51bGwpOworICAgIHJldHVybiB0
ZXN0Q29udGFpbmVyLmlubmVySFRNTDsKK30KKworZXZhbEFuZExvZygnZG9jdW1lbnQuZXhlY0Nv
bW1hbmQoInN0eWxlV2l0aENTUyIsIGZhbHNlLCBmYWxzZSk7Jyk7CisKK2RlYnVnKCcnKTsKK2Rl
YnVnKCdUb2dnbGluZyBzdHJpa2VUaHJvdWdoJyk7CitzaG91bGRCZSgnY29udGVudCgiPHM+PHU+
YTwvdT5iPC9zPiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywgJyI8
dT5hPC91PmIiJyk7CitzaG91bGRCZSgnY29udGVudCgiPHM+PHU+YTwvdT5iPHU+YzwvdT48L3M+
Iik7IHNlbGVjdCgwLCAzKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLCAnIjx1PmE8L3U+Yjx1
PmM8L3U+IicpOworc2hvdWxkQmUoJ2NvbnRlbnQoIjxzPmE8dT5iPC91PmM8L3M+Iik7IHNlbGVj
dCgwLCAzKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLCAnImE8dT5iPC91PmMiJyk7CitzaG91
bGRCZSgnY29udGVudCgiPHM+YTx1PmI8L3U+Yzwvcz4iKTsgc2VsZWN0KDEsIDMpOyB0b2dnbGUo
InN0cmlrZVRocm91Z2giKScsICciPHN0cmlrZT5hPC9zdHJpa2U+PHU+YjwvdT5jIicpOworc2hv
dWxkQmUoJ2NvbnRlbnQoIjxzPmE8dT5iPC91PmM8L3M+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xl
KCJzdHJpa2VUaHJvdWdoIiknLCAnImE8dT5iPC91PjxzdHJpa2U+Yzwvc3RyaWtlPiInKTsKK3No
b3VsZEJlKCdjb250ZW50KCI8cz48dT5hYjwvdT48L3M+YyIpOyBzZWxlY3QoMSwgMyk7IHRvZ2ds
ZSgic3RyaWtlVGhyb3VnaCIpJywgJyI8dT48c3RyaWtlPmE8L3N0cmlrZT5iPC91PmMiJyk7Citz
aG91bGRCZSgnY29udGVudCgiPHM+YTx1PmI8L3U+PC9zPmMiKTsgc2VsZWN0KDEsIDMpOyB0b2dn
bGUoInN0cmlrZVRocm91Z2giKScsICciPHN0cmlrZT5hPC9zdHJpa2U+PHU+YjwvdT5jIicpOwor
c2hvdWxkQmUoJ2NvbnRlbnQoImE8cz48dT5iPC91PmM8L3M+Iik7IHNlbGVjdCgwLCAyKTsgdG9n
Z2xlKCJzdHJpa2VUaHJvdWdoIiknLCAnIjxzdHJpa2U+YTwvc3RyaWtlPjxzPjx1PmI8L3U+Yzwv
cz4iJyk7CitzaG91bGRCZSgnY29udGVudCgiYTxzdHJpa2U+PHU+YjwvdT5jPC9zdHJpa2U+Iik7
IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLCAnIjxzdHJpa2U+YTx1PmI8
L3U+Yzwvc3RyaWtlPiInKTsKK3Nob3VsZEJlKCdjb250ZW50KCJhPHU+PHM+YmM8L3M+PC91PiIp
OyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywgJyI8c3RyaWtlPmE8L3N0
cmlrZT48dT48cz5iYzwvcz48L3U+IicpOworc2hvdWxkQmUoJ2NvbnRlbnQoImE8cz48Yj48dT5i
YzwvdT48L2I+PC9zPiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywg
JyI8c3RyaWtlPmE8L3N0cmlrZT48cz48Yj48dT5iYzwvdT48L2I+PC9zPiInKTsKK3Nob3VsZEJl
KCdjb250ZW50KCJhPHN0cmlrZT48Yj48dT5iYzwvdT48L2I+PC9zdHJpa2U+Iik7IHNlbGVjdCgw
LCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLCAnIjxzdHJpa2U+YTxiPjx1PmJjPC91Pjwv
Yj48L3N0cmlrZT4iJyk7CisKK2RlYnVnKCcnKTsKK2RlYnVnKCdUb2dnbGluZyB1bmRlcmxpbmUn
KTsKK3Nob3VsZEJlKCdjb250ZW50KCI8dT48cz5hPC9zPmI8L3U+Iik7IHNlbGVjdCgwLCAyKTsg
dG9nZ2xlKCJ1bmRlcmxpbmUiKScsICciPHM+YTwvcz5iIicpOworc2hvdWxkQmUoJ2NvbnRlbnQo
Ijx1PjxzPmE8L3M+YjxzPmM8L3M+PC91PiIpOyBzZWxlY3QoMCwgMyk7IHRvZ2dsZSgidW5kZXJs
aW5lIiknLCAnIjxzPmE8L3M+YjxzPmM8L3M+IicpOworc2hvdWxkQmUoJ2NvbnRlbnQoIjx1PmE8
cz5iPC9zPmM8L3U+Iik7IHNlbGVjdCgwLCAzKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScsICciYTxz
PmI8L3M+YyInKTsKK3Nob3VsZEJlKCdjb250ZW50KCI8dT5hPHM+Yjwvcz5jPC91PiIpOyBzZWxl
Y3QoMSwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIiknLCAnIjx1PmE8L3U+PHM+Yjwvcz5jIicpOwor
c2hvdWxkQmUoJ2NvbnRlbnQoIjx1PmE8cz5iPC9zPmM8L3U+Iik7IHNlbGVjdCgwLCAyKTsgdG9n
Z2xlKCJ1bmRlcmxpbmUiKScsICciYTxzPmI8L3M+PHU+YzwvdT4iJyk7CitzaG91bGRCZSgnY29u
dGVudCgiPHU+PHM+YWI8L3M+PC91PmMiKTsgc2VsZWN0KDEsIDMpOyB0b2dnbGUoInVuZGVybGlu
ZSIpJywgJyI8cz48dT5hPC91PmI8L3M+YyInKTsKK3Nob3VsZEJlKCdjb250ZW50KCI8dT5hPHM+
Yjwvcz48L3U+YyIpOyBzZWxlY3QoMSwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIiknLCAnIjx1PmE8
L3U+PHM+Yjwvcz5jIicpOworc2hvdWxkQmUoJ2NvbnRlbnQoImE8dT48cz5iPC9zPmM8L3U+Iik7
IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScsICciPHU+YTxzPmI8L3M+YzwvdT4i
Jyk7CitzaG91bGRCZSgnY29udGVudCgiYTxzPjx1PmJjPC91Pjwvcz4iKTsgc2VsZWN0KDAsIDIp
OyB0b2dnbGUoInVuZGVybGluZSIpJywgJyI8dT5hPC91PjxzPjx1PmJjPC91Pjwvcz4iJyk7Citz
aG91bGRCZSgnY29udGVudCgiYTx1PjxiPjxzPmJjPC9zPjwvYj48L3U+Iik7IHNlbGVjdCgwLCAy
KTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScsICciPHU+YTxiPjxzPmJjPC9zPjwvYj48L3U+IicpOwor
CitldmFsQW5kTG9nKCdkb2N1bWVudC5leGVjQ29tbWFuZCgic3R5bGVXaXRoQ1NTIiwgZmFsc2Us
IHRydWUpOycpOworCitkZWJ1ZygnJyk7CitkZWJ1ZygnVG9nZ2xpbmcgc3RyaWtlVGhyb3VnaCcp
Oworc2hvdWxkQmUoJ2NvbnRlbnQoXCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5l
LXRocm91Z2g7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUiPmE8L3Nw
YW4+Yjwvc3Bhbj5cJyk7XG4nCisgICAgKyAnc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRo
cm91Z2giKScsCisgICAgJ1wnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5l
OyI+YTwvc3Bhbj5iXCcnKTsKK3Nob3VsZEJlKCdjb250ZW50KFwnPHNwYW4gc3R5bGU9InRleHQt
ZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lOyI+YTwvc3Bhbj5iPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJs
aW5lIj5jPC9zcGFuPjwvc3Bhbj5cJyk7XG4nCisgICAgKyAnc2VsZWN0KDAsIDMpOyB0b2dnbGUo
InN0cmlrZVRocm91Z2giKScsCisgICAgJ1wnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lOyI+YTwvc3Bhbj5iPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJs
aW5lOyI+Yzwvc3Bhbj5cJycpOworc2hvdWxkQmUoJ2NvbnRlbnQoXCc8c3BhbiBzdHlsZT0idGV4
dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogdW5kZXJsaW5lOyI+Yjwvc3Bhbj5jPC9zcGFuPlwnKTtcbicKKyAgICArICdzZWxlY3QoMCwg
Myk7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywKKyAgICAnXCdhPHNwYW4gc3R5bGU9InRleHQt
ZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+Yjwvc3Bhbj5jXCcnKTsKK3Nob3VsZEJlKCdjb250ZW50
KFwnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTxzcGFuIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmI8L3NwYW4+Yzwvc3Bhbj5cJyk7XG4n
CisgICAgKyAnc2VsZWN0KDEsIDMpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKScsCisgICAgJ1wn
PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTwvc3Bhbj48c3Bh
biBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5iPC9zcGFuPmNcJycpOworc2hv
dWxkQmUoJ2NvbnRlbnQoXCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91
Z2g7Ij5hPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+Yjwvc3Bhbj5j
PC9zcGFuPlwnKTtcbicKKyAgICArICdzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3Vn
aCIpJywKKyAgICAnXCdhPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+
Yjwvc3Bhbj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5jPC9z
cGFuPlwnJyk7CitzaG91bGRCZSgnY29udGVudChcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRp
b246IGxpbmUtdGhyb3VnaDsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGlu
ZTsiPmFiPC9zcGFuPjwvc3Bhbj5jXCcpO1xuJworICAgICsgJ3NlbGVjdCgxLCAzKTsgdG9nZ2xl
KCJzdHJpa2VUaHJvdWdoIiknLAorICAgICdcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246
IHVuZGVybGluZTsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsi
PmE8L3NwYW4+Yjwvc3Bhbj5jXCcnKTsKK3Nob3VsZEJlKCdjb250ZW50KFwnYTxzcGFuIHN0eWxl
PSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IHVuZGVybGluZTsiPmI8L3NwYW4+Yzwvc3Bhbj5cJyk7XG4nCisgICAgKyAnc2VsZWN0
KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKScsCisgICAgJ1wnPHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRp
b246IHVuZGVybGluZSBsaW5lLXRocm91Z2g7Ij5iPC9zcGFuPmM8L3NwYW4+XCcnKTsKK3Nob3Vs
ZEJlKCdjb250ZW50KFwnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsi
PjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmJjPC9zcGFuPjwv
c3Bhbj5cJyk7XG4nCisgICAgKyAnc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRocm91Z2gi
KScsCisgICAgJ1wnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+
YTwvc3Bhbj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48c3BhbiBz
dHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5iYzwvc3Bhbj48L3NwYW4+XCcn
KTsKK3Nob3VsZEJlKCdjb250ZW50KFwnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxp
bmUtdGhyb3VnaDsiPjxiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsi
PmJjPC9zcGFuPjwvYj48L3NwYW4+XCcpO1xuJworICAgICsgJ3NlbGVjdCgwLCAyKTsgdG9nZ2xl
KCJzdHJpa2VUaHJvdWdoIiknLAorICAgICdcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246
IGxpbmUtdGhyb3VnaDsiPmE8Yj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxp
bmU7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10aHJvdWdo
OyI+Yjwvc3Bhbj5jPC9zcGFuPjwvYj48L3NwYW4+XCcnKTsKKworZGVidWcoJycpOworZGVidWco
J1RvZ2dsaW5nIHVuZGVybGluZScpOworc2hvdWxkQmUoJ2NvbnRlbnQoXCc8c3BhbiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9u
OiBsaW5lLXRocm91Z2g7Ij5hPC9zcGFuPmI8L3NwYW4+XCcpO1xuJworICAgICsgJ3NlbGVjdCgw
LCAyKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScsCisgICAgJ1wnPHNwYW4gc3R5bGU9InRleHQtZGVj
b3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTwvc3Bhbj5iXCcnKTsKK3Nob3VsZEJlKCdjb250ZW50
KFwnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTwvc3Bhbj5iPHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+Yzwvc3Bhbj48L3NwYW4+XCcpO1xuJworICAg
ICsgJ3NlbGVjdCgwLCAzKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScsCisgICAgJ1wnPHNwYW4gc3R5
bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTwvc3Bhbj5iPHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+Yzwvc3Bhbj5cJycpOworc2hvdWxkQmUo
J2NvbnRlbnQoXCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5hPHNw
YW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+Yjwvc3Bhbj5jPC9zcGFu
PlwnKTtcbicKKyAgICArICdzZWxlY3QoMCwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIiknLAorICAg
ICdcJ2E8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5iPC9zcGFu
PmNcJycpOworc2hvdWxkQmUoJ2NvbnRlbnQoXCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9u
OiB1bmRlcmxpbmU7Ij5hPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdo
OyI+Yjwvc3Bhbj5jPC9zcGFuPlwnKTtcbicKKyAgICArICdzZWxlY3QoMSwgMyk7IHRvZ2dsZSgi
dW5kZXJsaW5lIiknLAorICAgICdcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVy
bGluZTsiPmE8L3NwYW4+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdo
OyI+Yjwvc3Bhbj5jXCcnKTsKK3Nob3VsZEJlKCdjb250ZW50KFwnPHNwYW4gc3R5bGU9InRleHQt
ZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxp
bmUtdGhyb3VnaDsiPmI8L3NwYW4+Yzwvc3Bhbj5cJyk7XG4nCisgICAgKyAnc2VsZWN0KDAsIDIp
OyB0b2dnbGUoInVuZGVybGluZSIpJywKKyAgICAnXCdhPHNwYW4gc3R5bGU9InRleHQtZGVjb3Jh
dGlvbjogbGluZS10aHJvdWdoOyI+Yjwvc3Bhbj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9u
OiB1bmRlcmxpbmU7Ij5jPC9zcGFuPlwnJyk7CitzaG91bGRCZSgnY29udGVudChcJzxzcGFuIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IGxpbmUtdGhyb3VnaDsiPmFiPC9zcGFuPjwvc3Bhbj5jXCcpO1xuJworICAgICsgJ3Nl
bGVjdCgxLCAzKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScsCisgICAgJ1wnPHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogdW5kZXJsaW5lOyI+YTwvc3Bhbj5iPC9zcGFuPmNcJycpOworc2hvdWxkQmUoJ2NvbnRlbnQo
XCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5hPHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+Yjwvc3Bhbj48L3NwYW4+Y1wnKTtcbicK
KyAgICArICdzZWxlY3QoMSwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIiknLAorICAgICdcJzxzcGFu
IHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8L3NwYW4+PHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+Yjwvc3Bhbj5jXCcnKTsKK3Nob3VsZEJl
KCdjb250ZW50KFwnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxz
cGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmI8L3NwYW4+Yzwvc3Bh
bj5cJyk7XG4nCisgICAgKyAnc2VsZWN0KDAsIDIpOyB0b2dnbGUoInVuZGVybGluZSIpJywKKyAg
ICAnXCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5hPHNwYW4gc3R5
bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoIHVuZGVybGluZTsiPmI8L3NwYW4+Yzwv
c3Bhbj5cJycpOworc2hvdWxkQmUoJ2NvbnRlbnQoXCdhPHNwYW4gc3R5bGU9InRleHQtZGVjb3Jh
dGlvbjogbGluZS10aHJvdWdoOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJs
aW5lOyI+YmM8L3NwYW4+PC9zcGFuPlwnKTtcbicKKyAgICArICdzZWxlY3QoMCwgMik7IHRvZ2ds
ZSgidW5kZXJsaW5lIiknLAorICAgICdcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVu
ZGVybGluZTsiPmE8L3NwYW4+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJv
dWdoOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YmM8L3NwYW4+
PC9zcGFuPlwnJyk7CitzaG91bGRCZSgnY29udGVudChcJ2E8c3BhbiBzdHlsZT0idGV4dC1kZWNv
cmF0aW9uOiB1bmRlcmxpbmU7Ij48Yj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5l
LXRocm91Z2g7Ij5iYzwvc3Bhbj48L2I+PC9zcGFuPlwnKTtcbicKKyAgICArICdzZWxlY3QoMCwg
Mik7IHRvZ2dsZSgidW5kZXJsaW5lIiknLAorICAgICdcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IHVuZGVybGluZTsiPmE8Yj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5l
LXRocm91Z2g7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10
aHJvdWdoOyI+Yjwvc3Bhbj5jPC9zcGFuPjwvYj48L3NwYW4+XCcnKTsKKworZG9jdW1lbnQuYm9k
eS5yZW1vdmVDaGlsZCh0ZXN0Q29udGFpbmVyKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZWRpdGluZy9leGVjQ29tbWFuZC90b2dnbGUtc3R5bGUtMi1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90b2dnbGUtc3R5bGUtMi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDE4MzQ5NykKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0Nv
bW1hbmQvdG9nZ2xlLXN0eWxlLTItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMCw3
ICsxMCw3IEBAIFBBU1Mgb25lIHN0cmlrZXRocm91Z2ggY29tbWFuZCBjb252ZXJ0ZWQKIFBBU1Mg
b25lIHN0cmlrZXRocm91Z2ggY29tbWFuZCBjb252ZXJ0ZWQgPHU+PGI+PHN0cmlrZT50ZXN0PC9z
dHJpa2U+PC9iPjwvdT4gdG8gPHU+PGI+dGVzdDwvYj48L3U+CiBQQVNTIHR3byBzdHJpa2V0aHJv
dWdoIGNvbW1hbmRzIGNvbnZlcnRlZCB0ZXN0IHRvIHRlc3QKIFBBU1Mgb25lIHN0cmlrZXRocm91
Z2ggY29tbWFuZCBjb252ZXJ0ZWQgPHU+dGVzdDwvdT4gdG8gPHU+PHN0cmlrZT50ZXN0PC9zdHJp
a2U+PC91PgotUEFTUyBvbmUgdW5kZXJsaW5lIGNvbW1hbmQgY29udmVydGVkIDxzdHJpa2U+dGVz
dDwvc3RyaWtlPiB0byA8dT48c3RyaWtlPnRlc3Q8L3N0cmlrZT48L3U+CitQQVNTIG9uZSB1bmRl
cmxpbmUgY29tbWFuZCBjb252ZXJ0ZWQgPHN0cmlrZT50ZXN0PC9zdHJpa2U+IHRvIDxzdHJpa2U+
PHU+dGVzdDwvdT48L3N0cmlrZT4KIFBBU1Mgb25lIHN0cmlrZXRocm91Z2ggY29tbWFuZCBjb252
ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmU7Ij50ZXN0PC9zcGFu
PiB0byA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTsiPjxzdHJpa2U+dGVz
dDwvc3RyaWtlPjwvc3Bhbj4KIFBBU1Mgb25lIHVuZGVybGluZSBjb21tYW5kIGNvbnZlcnRlZCA8
c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTsiPnRlc3Q8L3NwYW4+IHRvIDxz
cGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lOyI+PHU+dGVzdDwvdT48L3NwYW4+
CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS10ZXh0LWRlY29yYXRpb25zLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS10ZXh0LWRl
Y29yYXRpb25zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTgzNDk3KQorKysgTGF5b3V0VGVzdHMv
ZWRpdGluZy9leGVjQ29tbWFuZC90b2dnbGUtdGV4dC1kZWNvcmF0aW9ucy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTUsNyArNSw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEEKIAogUEFTUyBvbmUgdW5kZXJsaW5lIGNvbW1hbmQgY29udmVydGVkIHRl
c3QgdG8gPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+dGVzdDwvc3Bh
bj4KIFBBU1Mgb25lIHVuZGVybGluZSBjb21tYW5kIGNvbnZlcnRlZCA8c3BhbiBzdHlsZT0idGV4
dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij50ZXN0PC9zcGFuPiB0byB0ZXN0Ci1QQVNTIG9uZSB1
bmRlcmxpbmUgY29tbWFuZCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lIGxpbmUtdGhyb3VnaCBvdmVybGluZTsiPnRlc3Q8L3NwYW4+IHRvIDxzcGFuIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lIGxpbmUtdGhyb3VnaDsiPnRlc3Q8L3NwYW4+
CitQQVNTIG9uZSB1bmRlcmxpbmUgY29tbWFuZCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQt
ZGVjb3JhdGlvbjogdW5kZXJsaW5lIGxpbmUtdGhyb3VnaCBvdmVybGluZTsiPnRlc3Q8L3NwYW4+
IHRvIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCBvdmVybGluZTsi
PnRlc3Q8L3NwYW4+CiBQQVNTIG9uZSBzdHJpa2V0aHJvdWdoIGNvbW1hbmQgY29udmVydGVkIHRl
c3QgdG8gPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+dGVzdDwv
c3Bhbj4KIFBBU1Mgb25lIHN0cmlrZXRocm91Z2ggY29tbWFuZCBjb252ZXJ0ZWQgPHNwYW4gc3R5
bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+dGVzdDwvc3Bhbj4gdG8gdGVzdAog
UEFTUyBvbmUgc3RyaWtldGhyb3VnaCBjb21tYW5kIGNvbnZlcnRlZCA8c3BhbiBzdHlsZT0idGV4
dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10aHJvdWdoIG92ZXJsaW5lOyI+dGVzdDwvc3Bh
bj4gdG8gPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIG92ZXJsaW5lOyI+
dGVzdDwvc3Bhbj4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2NyaXB0
LXRlc3RzL3RvZ2dsZS1zdHlsZS0yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvZXhlY0NvbW1hbmQvc2NyaXB0LXRlc3RzL3RvZ2dsZS1zdHlsZS0yLmpzCShyZXZpc2lvbiAx
ODM0OTcpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3NjcmlwdC10ZXN0cy90
b2dnbGUtc3R5bGUtMi5qcwkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCB0ZXN0U2lu
Z2xlVG9nZ2xlKCJzdHJpa2V0aHJvdWdoIiwgIjx1PjxiCiB0ZXN0RG91YmxlVG9nZ2xlKCJzdHJp
a2V0aHJvdWdoIiwgInRlc3QiLCAidGVzdCIpOwogCiB0ZXN0U2luZ2xlVG9nZ2xlKCJzdHJpa2V0
aHJvdWdoIiwgIjx1PnRlc3Q8L3U+IiwgIjx1PjxzdHJpa2U+dGVzdDwvc3RyaWtlPjwvdT4iKTsK
LXRlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsICI8c3RyaWtlPnRlc3Q8L3N0cmlrZT4iLCAi
PHU+PHN0cmlrZT50ZXN0PC9zdHJpa2U+PC91PiIpOwordGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJs
aW5lIiwgIjxzdHJpa2U+dGVzdDwvc3RyaWtlPiIsICI8c3RyaWtlPjx1PnRlc3Q8L3U+PC9zdHJp
a2U+Iik7CiAKIHRlc3RTaW5nbGVUb2dnbGUoInN0cmlrZXRocm91Z2giLCAnPHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmU7Ij50ZXN0PC9zcGFuPicsICc8c3BhbiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTsiPjxzdHJpa2U+dGVzdDwvc3RyaWtlPjwvc3Bhbj4n
KTsKIHRlc3RTaW5nbGVUb2dnbGUoInVuZGVybGluZSIsICc8c3BhbiBzdHlsZT0idGV4dC1kZWNv
cmF0aW9uOiBvdmVybGluZTsiPnRlc3Q8L3NwYW4+JywgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IG92ZXJsaW5lOyI+PHU+dGVzdDwvdT48L3NwYW4+Jyk7CkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3NjcmlwdC10ZXN0cy90b2dnbGUtdGV4dC1kZWNvcmF0aW9u
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3Njcmlw
dC10ZXN0cy90b2dnbGUtdGV4dC1kZWNvcmF0aW9ucy5qcwkocmV2aXNpb24gMTgzNDk3KQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvdG9nZ2xlLXRleHQt
ZGVjb3JhdGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDggQEAgZnVuY3Rpb24g
dGVzdFNpbmdsZVRvZ2dsZSh0b2dnbGVDb21tYW5kLAogCiB0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRl
cmxpbmUiLCAidGVzdCIsICI8c3BhbiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5l
O1wiPnRlc3Q8L3NwYW4+Iik7CiB0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCAiPHNwYW4g
c3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcIj50ZXN0PC9zcGFuPiIsICJ0ZXN0
Iik7Ci10ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCAiPHNwYW4gc3R5bGU9XCJ0ZXh0LWRl
Y29yYXRpb246IHVuZGVybGluZSBsaW5lLXRocm91Z2ggb3ZlcmxpbmU7XCI+dGVzdDwvc3Bhbj4i
LCAiPHNwYW4gc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lIGxpbmUtdGhyb3VnaDtc
Ij50ZXN0PC9zcGFuPiIpOwordGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwgIjxzcGFuIHN0
eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10aHJvdWdoIG92ZXJsaW5lO1wi
PnRlc3Q8L3NwYW4+IiwKKyAgICAiPHNwYW4gc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IGxpbmUt
dGhyb3VnaCBvdmVybGluZTtcIj50ZXN0PC9zcGFuPiIpOwogdGVzdFNpbmdsZVRvZ2dsZSgic3Ry
aWtldGhyb3VnaCIsICJ0ZXN0IiwgIjxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiBsaW5l
LXRocm91Z2g7XCI+dGVzdDwvc3Bhbj4iKTsKIHRlc3RTaW5nbGVUb2dnbGUoInN0cmlrZXRocm91
Z2giLCAiPHNwYW4gc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcIj50ZXN0
PC9zcGFuPiIsICJ0ZXN0Iik7CiB0ZXN0U2luZ2xlVG9nZ2xlKCJzdHJpa2V0aHJvdWdoIiwgIjxz
cGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10aHJvdWdoIG92ZXJs
aW5lO1wiPnRlc3Q8L3NwYW4+IiwgIjxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmUgb3ZlcmxpbmU7XCI+dGVzdDwvc3Bhbj4iKTsKSW5kZXg6IExheW91dFRlc3RzL2VkaXRp
bmcvdW5kby9yZW1vdmUtY3NzLXByb3BlcnR5LWFuZC1yZW1vdmUtc3R5bGUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvdW5kby9yZW1vdmUtY3NzLXByb3Bl
cnR5LWFuZC1yZW1vdmUtc3R5bGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxODM0OTcpCisrKyBM
YXlvdXRUZXN0cy9lZGl0aW5nL3VuZG8vcmVtb3ZlLWNzcy1wcm9wZXJ0eS1hbmQtcmVtb3ZlLXN0
eWxlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBVbmJvbGRp
bmcgc2hvdWxkIHJlbW92ZSB0aGUgZm9udC13ZWlnaHQgCiAKIFVuZG8gc2hvdWxkIHJlc2V0IHRo
ZSBzdHlsZSBhdHRyaWJ1dGUgc28gdGhhdCAidGVzdCIgaXMgYm90aCBib2xkIGFuZCBibHVlOgog
fCA8c3Bhbj4KLXwgICBzdHlsZT0iY29sb3I6IGJsdWU7IGZvbnQtd2VpZ2h0OiA5MDA7IgorfCAg
IHN0eWxlPSJmb250LXdlaWdodDogOTAwOyBjb2xvcjogYmx1ZTsiCiB8ICAgIjwjc2VsZWN0aW9u
LWFuY2hvcj50ZXN0PCNzZWxlY3Rpb24tZm9jdXM+IgogCiBSZWRvIHNob3VsZCBvbmx5IHJlbW92
ZSBmb250LXdlaWdodCBhbmQgbGVhdmUgInRlc3QiIGJsdWU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252326</attachid>
            <date>2015-05-04 12:46:49 -0700</date>
            <delta_ts>2015-05-04 13:44:14 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-27818-20150504124537.patch</filename>
            <type>text/plain</type>
            <size>91028</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzY5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNS0wNS0wMSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBUb2dnbGluZyB1bmRlcmxpbmUg
b3Igc3RyaWtlIHRocm91Z2ggYWZmZWN0cyBlYWNoIG90aGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzgxOAorCisgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNo
YW5pc20gdG8gYXBwbHkgYW5kIHJlbW92ZSB0ZXh0IGRlY29yYXRpb25zLiBUaGlzIGlzIG5lY2Vz
c2FyeSBiZWNhdXNlIHRleHQKKyAgICAgICAgZGVjb3JhdGlvbnMgYXJlIGFsd2F5cyBhZGRpdGl2
ZSBhbmQgd2UgY2FuJ3QgZGlmZmVyZW50aWF0ZSB3aGV0aGVyIHdlJ3JlIGFkZGluZyBvciByZW1v
dmluZyBhIHRleHQgZGVjb3JhdGlvbi4KKyAgICAgICAgQ29uY2VwdHVhbGx5LCB3ZSBuZWVkIGZv
dXIgdmFsdWVzIGZvciB0ZXh0IGRlY29yYXRpb25zOiBhZGRpbmcgdW5kZXJsaW5lLCByZW1vdmlu
ZyB1bmRlcmxpbmUsIGFkZGluZworICAgICAgICBsaW5lLXRocm91Z2gsIGFuZCByZW1vdmluZyBs
aW5lLXRocm91Z2ggYnV0IHdlIGhhdmUgb25seSB0aHJlZTogdW5kZXJsaW5lLCBsaW5lLXRocm91
Z2gsIG5vbmUuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgdGhlcmUgYXJlIHRocmVlIG1l
Y2hhbmlzbSBieSB3aGljaCB0ZXh0IGRlY29yYXRpb25zIHN0YXRlcyBhcmUga2VwdCB0cmFja2Vk
LiBXaGlsZSBhcHBseWluZworICAgICAgICBvciByZW1vdmluZyB0ZXh0IGRlY29yYXRpb25zLCB3
ZSB1c2UgbmV3bHkgYWRkZWQgbV91bmRlcmxpbmVDaGFuZ2UgYW5kIG1fc3RyaWtlVGhyb3VnaENo
YW5nZSBpbiBFZGl0aW5nU3R5bGUuCisgICAgICAgIEZvciB0aGUgdHlwaW5nIHN0eWxlLCB3ZSB1
c2UgLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCB0byBzdG9yZSB0aGUgc3RhdGUg
c2luY2Ugd2UgbmVlZCB0byBwcmVzZXJ2ZQorICAgICAgICBldmVyeSB0eXBlIG9mIHRleHQgZGVj
b3JhdGlvbnMgc3VjaCBhcyBvdmVybGluZSBpbiBhZGRpdGlvbiB0byB1bmRlcmxpbmUgYW5kIGxp
bmUtdGhyb3VnaC4gT25jZSBhcHBsaWVkLCBhbGwKKyAgICAgICAgdGV4dCBkZWNvcmF0aW9ucyBz
aG91bGQgYmUgZXhwcmVzc2VkIGluIHRlcm1zIG9mIHRoZSBzdGFuZGFyZCB0ZXh0LWRlY29yYXRp
b24gcHJvcGVydHkuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9leGVjQ29tbWFuZC90b2dnbGUt
bWl4ZWQtdGV4dC1kZWNvcmF0aW9ucy5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eUJsb2NrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92
ZUNTU1N0eWxlKTogY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50IG5vdyBjcmVhdGVz
IGEgbmV3IGlubGluZSBzdHlsZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGlzdCBvZiBwcm9wZXJ0
aWVzIHRvIHJlbW92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphZGRC
bG9ja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlu
bGluZVN0eWxlQ2hhbmdlKTogTWVyZ2UgaW5saW5lIHN0eWxlcyBpbnN0ZWFkIG9mIGFkZGluZyBh
cyBzdHJpbmcuCisgICAgICAgIE90aGVyd2lzZSBpdCB3b3VsZCBnZW5lcmF0ZSBzdHlsZSBjb250
ZW50IGF0dHJpYnV0ZSB3aXRoIG11bHRpcGxlIHRleHQtZGVjb3JhdGlvbiBwcm9wZXJ0aWVzLgor
CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnRFcXVpdmFsZW50OjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50RXF1aXZhbGVudDo6cHJvcGVydHlFeGlzdHNJblN0eWxlKTogVGFrZXMgYW4gRWRpdGlu
Z1N0eWxlIGluc3RlYWQgb2YgU3R5bGVQcm9wZXJ0aWVzLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnRFcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6SFRNTFRleHREZWNvcmF0aW9uRXF1
aXZhbGVudCk6IAorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVu
dDo6cHJvcGVydHlFeGlzdHNJblN0eWxlKTogUmVzcGVjdCBuZXdseSBhZGRlZCBtX3N0cmlrZVRo
cm91Z2hDaGFuZ2UgYW5kCisgICAgICAgIG1fdW5kZXJsaW5lQ2hhbmdlIGluIEVkaXRpbmdTdHls
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6OnZhbHVl
SXNQcmVzZW50SW5TdHlsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHREZWNv
cmF0aW9uRXF1aXZhbGVudDo6Y2hhbmdlSW5TdHlsZSk6IEFkZGVkLiBSZXRyaWV2ZXMgdGhlIGNo
YW5nZSBlbnVtIGZvciB0aGUgYXNzb2NpYXRlZAorICAgICAgICB0eXBlIG9mIHRleHQtZGVjb3Jh
dGlvbiAodW5kZXJsaW5lIG9yIHN0cmlrZSB0aHJvdWdoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxBdHRyaWJ1dGVFcXVpdmFsZW50OjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxB
dHRyaWJ1dGVFcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUpOiBJbml0aWFsaXplIG1fdW5kZXJsaW5l
Q2hhbmdlIGFuZCBtX3N0cmlrZVRocm91Z2hDaGFuZ2UuIEFsc28gdXNlIHRoZQorICAgICAgICBk
ZWxlZ2F0aW5nIGNvbnN0cnVjdG9yIGVsc2V3aGVyZS4gQWxzbyBhZGRlZCB0aGUgbWlzc2luZyBj
YWxsIHRvIGV4dHJhY3RGb250U2l6ZURlbHRhKCkgaW4gdGhlIHZhcmlhbnQgdGhhdAorICAgICAg
ICB0YWtlcyBDU1NQcm9wZXJ0eUlEIGFuZCBTdHJpbmcsIGFuZCBhZGRlZCBhIHZhcmlhbnQgdGhh
dCB0YWtlcyBDU1NQcm9wZXJ0eUlEIGFuZCBDU1NWYWx1ZUlELgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ1N0eWxlOjppc0VtcHR5KTogUmV0dXJuIGZhbHNlIHdoZW4gbV91bmRlcmxpbmVDaGFu
Z2UgYW5kIG1fc3RyaWtlVGhyb3VnaENoYW5nZSBhcmUgbm90ICJub25lIi4KKyAgICAgICAgKFdl
YkNvcmU6OmFwcGx5VGV4dERlY29yYXRpb25DaGFuZ2VUb1ZhbHVlTGlzdCk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpvdmVycmlkZVR5cGluZ1N0eWxlQXQpOiBBZGRl
ZC4gVXNlZCBieSBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZSB0byBzZXQgYSBuZXcK
KyAgICAgICAgdHlwaW5nIHN0eWxlLiBSZXNvbHZlIG1fdW5kZXJsaW5lQ2hhbmdlIGFuZCBtX3N0
cmlrZVRocm91Z2hDaGFuZ2UgaW50byAtd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjbGVhcik6IENsZWFyIG1fdW5kZXJs
aW5lQ2hhbmdlIGFuZCBtX3N0cmlrZVRocm91Z2hDaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6OmNvcHkpOiBDb3B5IG1fdW5kZXJsaW5lQ2hhbmdlIGFuZCBtX3N0cmlrZVRo
cm91Z2hDaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjp0ZXh0RGVjb3JhdGlvblZhbHVlTGlzdCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjb25mbGljdHNXaXRoSW5s
aW5lU3R5bGVPZkVsZW1lbnQpOiBOb3cgdGFrZXMgYSBwb2ludGVyIHRvIE11dGFibGVTdHlsZVBy
b3BlcnRpZXMKKyAgICAgICAgaW5zdGVhZCBvZiBhIHZlY3Rvci4gVGhpcyB3YXMgbmVjZXNzYXJ5
IHdlIGNhbid0IHNpbXBseSByZW1vdmUgdGV4dC1kZWNvcmF0aW9uIHByb3BlcnR5IGluIEFwcGx5
U3R5bGVDb21tYW5kJ3MKKyAgICAgICAgcmVtb3ZlQ1NTU3R5bGUgYXMgdGhhdCB3b3VsZCByZXN1
bHQgaW4gdW5yZWxhdGVkIHRleHQgZGVjb3JhdGlvbnMgYWxzbyBnZXR0aW5nIHJlbW92ZWQuIEFs
c28gYWRkZWQgdGhlIGNvZGUKKyAgICAgICAgZm9yIG1fdW5kZXJsaW5lQ2hhbmdlIGFuZCBtX3N0
cmlrZVRocm91Z2hDaGFuZ2UuIE9ubHkgcmVtb3ZpbmcgdGV4dCBkZWNvcmF0aW9uIGNoYW5nZXMg
Y2FuIGNhdXNlIGEgY29uZmxpY3QKKyAgICAgICAgc2luY2UgdGV4dCBkZWNvcmF0aW9ucyBhcmUg
YWx3YXlzIGFkZGl0aXZlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjb25mbGlj
dHNXaXRoSW1wbGljaXRTdHlsZU9mRWxlbWVudCk6IENoZWNrIGlzRW1wdHkoKSBpbnN0ZWFkIG9m
IHRoZSBudWxsaXR5IG9mCisgICAgICAgIG1fbXV0YWJsZVN0eWxlIHRvIHJlc3BlY3QgbV91bmRl
cmxpbmVDaGFuZ2UgYW5kIG1fc3RyaWtlVGhyb3VnaENoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6Y29uZmxpY3RzV2l0aEltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpleHRyYWN0Q29uZmxpY3RpbmdJbXBsaWNp
dFN0eWxlT2ZBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6c3R5
bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5bGVPZk5vZGUpOiBSZXNwZWN0IHRoZSB2YWx1ZXMgb2Yg
bV91bmRlcmxpbmVDaGFuZ2UgYW5kCisgICAgICAgIG1fc3RyaWtlVGhyb3VnaENoYW5nZS4gSGVy
ZSwgdGhlIHN0eWxlIGlzIGNvbnNpZGVyZWQgcHJlc2VudCBpZiBpdCBoYXMgdGV4dCBkZWNvcmF0
aW9ucyB0aGF0IGFyZSBiZWluZyBhZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHls
ZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9ySFRNTEVxdWl2YWxlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6ZWxlbWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2wpOiBUYWtl
cyBFZGl0aW5nU3R5bGUgaW5zdGVhZCBvZiBTdHlsZVByb3BlcnRpZXMgdG8KKyAgICAgICAgcmVz
cGVjdCBtX3VuZGVybGluZUNoYW5nZSBhbmQgbV9zdHJpa2VUaHJvdWdoQ2hhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVPZkVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VUZXh0RGVjb3JhdGlvblZhbHVlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUpOiBNYWtlIGEgY29weSBv
ZiBDU1NWYWx1ZUxpc3QgYmVmb3JlIG1vZGlmeWluZyBpdCBzaW5jZSBDU1NWYWx1ZUxpc3QncyBh
cmUKKyAgICAgICAgc2hhcmVkIHdpdGggb3RoZXIgaW1tdXRhYmxlIFN0eWxlUHJvcGVydGllcy4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZSk6IFNldCBtX2FwcGx5
VW5kZXJsaW5lLCBtX2FwcGx5TGluZVRocm91Z2gsIGFuZCBtX2Nzc1N0eWxlIGlmIGVpdGhlcgor
ICAgICAgICBtX3VuZGVybGluZUNoYW5nZSBvciBtX3N0cmlrZVRocm91Z2hDaGFuZ2UgYXJlIFRl
eHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQgaW4gRWRpdGluZ1N0eWxlIGlmIHRoZSBjdXJyZW50IHBv
c2l0aW9uCisgICAgICAgIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIHRoZSBtYXRjaGluZyBzdHlsZS4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2hhbmdlOjpvcGVyYXRvcj09KTogTW92ZWQgZnJvbSB0
aGUgaGVhZGVyIGZpbGUuIEFsc28gYWRkZWQgdGhlIGxvZ2ljIHRvIGNvbXBhcmUgbV9jc3NTdHls
ZSBub3cKKyAgICAgICAgdGhhdCBpdCdzIGEgU3R5bGVQcm9wZXJ0aWVzIGluc3RlYWQgb2YgU3Ry
aW5nLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuaDogQWRkZWQgVGV4dERlY29y
YXRpb25DaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmNyZWF0ZSk6IEFk
ZGVkIGEgdmFyaWFudCB0aGF0IHRha2VzIENTU1Byb3BlcnR5SUQgYW5kIENTU1ZhbHVlSUQuCisg
ICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9m
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnNldFVuZGVybGluZUNo
YW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjp1bmRlcmxpbmVD
aGFuZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6c2V0U3RyaWtl
VGhyb3VnaENoYW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpz
dHJpa2VUaHJvdWdoQ2hhbmdlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5n
ZTo6Y3NzU3R5bGUpOiBOb3cgcmV0dXJucyBTdHlsZVByb3BlcnRpZXMqIGluc3RlYWQgb2YgU3Ry
aW5nIHNvIHRoYXQgQXBwbHlTdHlsZUNvbW1hbmQncworICAgICAgICBhcHBseUlubGluZVN0eWxl
Q2hhbmdlIGNvdWxkIG1lcmdlIGlubGluZSBzdHlsZXMgaW5zdGVhZCBvZiBqdXN0IGFwcGVuZGlu
ZyBpdCB0byB0aGUgZW5kLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6Om9wZXJhdG9y
PT0pOiBNb3ZlZCBpbnRvIHRoZSBjcHAgZmlsZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZSk6IEFkZGVkLiBUaGlz
IHZhcmlhbnQgdGFrZXMgRWRpdGluZ1N0eWxlIGluc3RlYWQgb2YgU3R5bGVQcm9wZXJ0aWVzLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24pOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKTogQWRk
ZWQgYSB2YXJpYW50IGZvciBFZGl0aW5nU3R5bGUuIEFsc28gdXNlIG92ZXJyaWRlVHlwaW5nU3R5
bGVBdAorICAgICAgICB0byBzZXQgLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCBi
YXNlZCBvbiBtX3VuZGVybGluZUNoYW5nZSBhbmQgbV9zdHJpa2VUaHJvdWdoQ2hhbmdlIAorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlDb21tYW5kVG9GcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjppc1N0eWxlUHJlc2VudCk6IEV4dHJhY3RlZCBmcm9tIGV4ZWN1dGVUb2dnbGVT
dHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVBcHBseVN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmV4ZWN1dGVUb2dnbGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlVG9n
Z2xlU3R5bGVJbkxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dGV4dERlY29yYXRp
b25DaGFuZ2VGb3JUb2dnbGluZyk6IEFkZGVkLiBVc2VkIGluIGV4ZWN1dGVTdHJpa2V0aHJvdWdo
IGFuZCBleGVjdXRlVW5kZXJsaW5lLgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVN0cmlrZXRo
cm91Z2gpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVVuZGVybGluZSk6CisKIDIwMTUtMDUt
MDEgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxODM2ODcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTgzNDk3KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2Myw3ICsyNjMsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUo
CiAgICAgVmlzaWJsZVBvc2l0aW9uIGJleW9uZEVuZChlbmRPZlBhcmFncmFwaCh2aXNpYmxlRW5k
KS5uZXh0KCkpOwogICAgIHdoaWxlIChwYXJhZ3JhcGhTdGFydC5pc05vdE51bGwoKSAmJiBwYXJh
Z3JhcGhTdGFydCAhPSBiZXlvbmRFbmQpIHsKICAgICAgICAgU3R5bGVDaGFuZ2Ugc3R5bGVDaGFu
Z2Uoc3R5bGUsIHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBpZiAo
c3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS5sZW5ndGgoKSB8fCBtX3JlbW92ZU9ubHkpIHsKKyAgICAg
ICAgaWYgKHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkgfHwgbV9yZW1vdmVPbmx5KSB7CiAgICAgICAg
ICAgICBSZWZQdHI8Tm9kZT4gYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhwYXJhZ3JhcGhTdGFydC5k
ZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAgICAgaWYgKCFtX3Jl
bW92ZU9ubHkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3QmxvY2sgPSBtb3Zl
UGFyYWdyYXBoQ29udGVudHNUb05ld0Jsb2NrSWZOZWNlc3NhcnkocGFyYWdyYXBoU3RhcnQuZGVl
cEVxdWl2YWxlbnQoKSk7CkBAIC05NDUsMTcgKzk0NSwxNCBAQCBib29sIEFwcGx5U3R5bGVDb21t
YW5kOjpyZW1vdmVDU1NTdHlsZShFCiAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9uZSkKICAgICAg
ICAgcmV0dXJuIHN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoZWxlbWVu
dCk7CiAKLSAgICBWZWN0b3I8Q1NTUHJvcGVydHlJRD4gcHJvcGVydGllczsKLSAgICBpZiAoIXN0
eWxlLT5jb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoZWxlbWVudCwgZXh0cmFjdGVk
U3R5bGUsIHByb3BlcnRpZXMpKQorICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBu
ZXdJbmxpbmVTdHlsZTsKKyAgICBpZiAoIXN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5lU3R5bGVP
ZkVsZW1lbnQoZWxlbWVudCwgbmV3SW5saW5lU3R5bGUsIGV4dHJhY3RlZFN0eWxlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgYSBtYXNzLXJl
bW92YWwgZnVuY3Rpb24gaGVyZSBidXQgd2UgZG9uJ3QgaGF2ZSBhbiB1bmRvYWJsZSBvbmUgeWV0
LgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7IGkrKykKLSAg
ICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydGllc1tpXSk7Ci0KLSAgICAv
LyBObyBuZWVkIHRvIHNlcmlhbGl6ZSA8Zm9vIHN0eWxlPSIiPiBpZiB3ZSBqdXN0IHJlbW92ZWQg
dGhlIGxhc3QgY3NzIHByb3BlcnR5Ci0gICAgaWYgKGVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlz
RW1wdHkoKSkKKyAgICBpZiAobmV3SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgcmVt
b3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIpOworICAgIGVsc2UKKyAgICAgICAg
c2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5hc1Rl
eHQoKSk7CiAKICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVT
cGFuKGVsZW1lbnQpKQogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1l
bnQpOwpAQCAtMTM3MCwxMiArMTM2NywxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzdXJy
b3VuZE5vZGVSYW5nCiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJsb2NrU3R5bGUoY29u
c3QgU3R5bGVDaGFuZ2UmIHN0eWxlQ2hhbmdlLCBIVE1MRWxlbWVudCogYmxvY2spCiB7CisgICAg
QVNTRVJUKHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkpOwogICAgIC8vIERvIG5vdCBjaGVjayBmb3Ig
bGVnYWN5IHN0eWxlcyBoZXJlLiBUaG9zZSBzdHlsZXMsIGxpa2UgPEI+IGFuZCA8ST4sIG9ubHkg
YXBwbHkgZm9yCiAgICAgLy8gaW5saW5lIGNvbnRlbnQuCiAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICBTdHJpbmcgY3NzU3R5bGUgPSBzdHlsZUNoYW5nZS5j
c3NTdHlsZSgpOworICAgIFN0cmluZyBjc3NTdHlsZSA9IHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkt
PmFzVGV4dCgpOwogICAgIFN0cmluZ0J1aWxkZXIgY3NzVGV4dDsKICAgICBjc3NUZXh0LmFwcGVu
ZChjc3NTdHlsZSk7CiAgICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydGllcyogZGVjbCA9IGJsb2Nr
LT5pbmxpbmVTdHlsZSgpKSB7CkBAIC0xNDU2LDIxICsxNDU0LDE3IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChz
dHlsZUNoYW5nZS5jc3NTdHlsZSgpLmxlbmd0aCgpKSB7CisgICAgaWYgKGF1dG8gc3R5bGVUb01l
cmdlID0gc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKSkgewogICAgICAgICBpZiAoc3R5bGVDb250YWlu
ZXIpIHsKLSAgICAgICAgICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnRpZXMqIGV4aXN0aW5nU3R5
bGUgPSBzdHlsZUNvbnRhaW5lci0+aW5saW5lU3R5bGUoKSkgewotICAgICAgICAgICAgICAgIFN0
cmluZyBleGlzdGluZ1RleHQgPSBleGlzdGluZ1N0eWxlLT5hc1RleHQoKTsKLSAgICAgICAgICAg
ICAgICBTdHJpbmdCdWlsZGVyIGNzc1RleHQ7Ci0gICAgICAgICAgICAgICAgY3NzVGV4dC5hcHBl
bmQoZXhpc3RpbmdUZXh0KTsKLSAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nVGV4dC5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGNzc1RleHQuYXBwZW5kKCcgJyk7Ci0gICAgICAg
ICAgICAgICAgY3NzVGV4dC5hcHBlbmQoc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKSk7Ci0gICAgICAg
ICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBjc3NU
ZXh0LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgaWYgKGF1dG8gZXhpc3RpbmdTdHlsZSA9IHN0
eWxlQ29udGFpbmVyLT5pbmxpbmVTdHlsZSgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmxp
bmVTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGV4aXN0aW5nU3R5bGUpOworICAgICAgICAg
ICAgICAgIGlubGluZVN0eWxlLT5vdmVycmlkZVdpdGhTdHlsZShzdHlsZVRvTWVyZ2UpOworICAg
ICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwg
aW5saW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwg
c3R5bGVDaGFuZ2UuY3NzU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0
ZShzdHlsZUNvbnRhaW5lciwgc3R5bGVBdHRyLCBzdHlsZVRvTWVyZ2UtPmFzVGV4dCgpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQg
PSBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KGRvY3VtZW50KCkpOwotICAgICAgICAgICAgc3R5bGVF
bGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBzdHlsZUNoYW5nZS5jc3NTdHlsZSgpKTsK
KyAgICAgICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgc3R5bGVU
b01lcmdlLT5hc1RleHQoKSk7CiAgICAgICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVt
ZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgc3R5bGVFbGVtZW50LnJlbGVhc2UoKSk7CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShy
ZXZpc2lvbiAxODM0OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCwxMCArMTYwLDEwIEBAIHB1YmxpYzoKICAgICBIVE1M
RWxlbWVudEVxdWl2YWxlbnQoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWVJRCBwcmltaXRpdmVWYWx1
ZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSk7CiAKICAgICB2aXJ0dWFsIH5IVE1MRWxl
bWVudEVxdWl2YWxlbnQoKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVt
ZW50KiBlbGVtZW50KSBjb25zdCB7IHJldHVybiAhbV90YWdOYW1lIHx8IGVsZW1lbnQtPmhhc1Rh
Z05hbWUoKm1fdGFnTmFtZSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVt
ZW50JiBlbGVtZW50KSBjb25zdCB7IHJldHVybiAhbV90YWdOYW1lIHx8IGVsZW1lbnQuaGFzVGFn
TmFtZSgqbV90YWdOYW1lKTsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXNBdHRyaWJ1dGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwcm9wZXJ0eUV4aXN0c0luU3R5
bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSkgY29uc3QgeyByZXR1cm4gc3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsgfQotICAgIHZpcnR1YWwgYm9vbCB2YWx1
ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCosIFN0eWxlUHJvcGVydGllcyopIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBwcm9wZXJ0eUV4aXN0c0luU3R5bGUoY29uc3QgRWRpdGluZ1N0eWxlJiBz
dHlsZSkgY29uc3QgeyByZXR1cm4gc3R5bGUubV9tdXRhYmxlU3R5bGUgJiYgc3R5bGUubV9tdXRh
YmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsgfQorICAgIHZpcnR1
YWwgYm9vbCB2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCYsIGNvbnN0IEVkaXRpbmdTdHls
ZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGRUb1N0eWxlKEVsZW1lbnQqLCBFZGl0aW5n
U3R5bGUqKSBjb25zdDsKIAogcHJvdGVjdGVkOgpAQCAtMTk0LDkgKzE5NCw5IEBAIEhUTUxFbGVt
ZW50RXF1aXZhbGVudDo6SFRNTEVsZW1lbnRFcXVpdmEKICAgICBBU1NFUlQocHJpbWl0aXZlVmFs
dWUgIT0gQ1NTVmFsdWVJbnZhbGlkKTsKIH0KIAotYm9vbCBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6
OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiBlbGVtZW50LCBTdHlsZVByb3BlcnRpZXMq
IHN0eWxlKSBjb25zdAorYm9vbCBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50
SW5TdHlsZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBFZGl0aW5nU3R5bGUmIHN0eWxlKSBjb25z
dAogewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShtX3Byb3BlcnR5SUQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZS5t
X211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOwogICAgIHJl
dHVybiBtYXRjaGVzKGVsZW1lbnQpICYmIGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZS5nZXQo
KSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpID09
IG1fcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKTsKIH0KIApAQCAtMjA3LDM5ICsyMDcsNTUg
QEAgdm9pZCBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OmFkZFRvU3R5bGUoRQogCiBjbGFzcyBIVE1M
VGV4dERlY29yYXRpb25FcXVpdmFsZW50IDogcHVibGljIEhUTUxFbGVtZW50RXF1aXZhbGVudCB7
CiBwdWJsaWM6Ci0gICAgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudChDU1NWYWx1ZUlEIHBy
aW1pdGl2ZVZhbHVlLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKTsKKyAgICBIVE1MVGV4
dERlY29yYXRpb25FcXVpdmFsZW50KENTU1ZhbHVlSUQgcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUpCisgICAgICAgIDogSFRNTEVsZW1lbnRFcXVpdmFsZW50KENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb24sIHByaW1pdGl2ZVZhbHVlLCB0YWdOYW1lKQorICAgICAg
ICAsIG1faXNVbmRlcmxpbmUocHJpbWl0aXZlVmFsdWUgPT0gQ1NTVmFsdWVVbmRlcmxpbmUpCisg
ICAgeworICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBwcm9wZXJ0eUV4aXN0c0luU3R5bGUoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVz
ZW50SW5TdHlsZShFbGVtZW50KiwgU3R5bGVQcm9wZXJ0aWVzKikgY29uc3Q7Ci19OworICAgIGJv
b2wgcHJvcGVydHlFeGlzdHNJblN0eWxlKGNvbnN0IEVkaXRpbmdTdHlsZSYgc3R5bGUpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoY2hhbmdlSW5TdHlsZShzdHlsZSkgIT0gVGV4
dERlY29yYXRpb25DaGFuZ2U6Ok5vbmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotSFRN
TFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudChD
U1NWYWx1ZUlEIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQot
ICAgIDogSFRNTEVsZW1lbnRFcXVpdmFsZW50KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIHBy
aW1pdGl2ZVZhbHVlLCB0YWdOYW1lKQotICAgIC8vIG1fcHJvcGVydHlJRCBpcyB1c2VkIGluIEhU
TUxFbGVtZW50RXF1aXZhbGVudDo6YWRkVG9TdHlsZQotewotfQorICAgICAgICBpZiAoIXN0eWxl
Lm1fbXV0YWJsZVN0eWxlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi1ib29sIEhUTUxU
ZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6OnByb3BlcnR5RXhpc3RzSW5TdHlsZShjb25zdCBTdHls
ZVByb3BlcnRpZXMqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBzdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSB8fCBz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKLX0K
KyAgICAgICAgYXV0byYgbXV0YWJsZVN0eWxlID0gKnN0eWxlLm1fbXV0YWJsZVN0eWxlOworICAg
ICAgICByZXR1cm4gbXV0YWJsZVN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkKKyAgICAgICAgICAgIHx8IG11dGFibGVTdHls
ZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworICAgIH0K
IAotYm9vbCBIVE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5
bGUoRWxlbWVudCogZWxlbWVudCwgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSkgY29uc3QKLXsKLSAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHN0eWxlVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKLSAgICBpZiAoIXN0
eWxlVmFsdWUpCi0gICAgICAgIHN0eWxlVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKLSAgICByZXR1cm4gbWF0Y2hlcyhlbGVtZW50
KSAmJiBpczxDU1NWYWx1ZUxpc3Q+KHN0eWxlVmFsdWUuZ2V0KCkpICYmIGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4oKnN0eWxlVmFsdWUpLmhhc1ZhbHVlKG1fcHJpbWl0aXZlVmFsdWUuZ2V0KCkpOwot
fQorICAgIGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IEVkaXRpbmdTdHlsZSYgc3R5bGUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
IW1hdGNoZXMoZWxlbWVudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1
dG8gY2hhbmdlID0gY2hhbmdlSW5TdHlsZShzdHlsZSk7CisgICAgICAgIGlmIChjaGFuZ2UgIT0g
VGV4dERlY29yYXRpb25DaGFuZ2U6Ok5vbmUpCisgICAgICAgICAgICByZXR1cm4gY2hhbmdlID09
IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQ7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3R5
bGVWYWx1ZSA9IHN0eWxlLm1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOworICAgICAgICBpZiAoIXN0eWxl
VmFsdWUpCisgICAgICAgICAgICBzdHlsZVZhbHVlID0gc3R5bGUubV9tdXRhYmxlU3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisgICAgICAgIHJl
dHVybiBpczxDU1NWYWx1ZUxpc3Q+KHN0eWxlVmFsdWUuZ2V0KCkpICYmIGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4oKnN0eWxlVmFsdWUpLmhhc1ZhbHVlKG1fcHJpbWl0aXZlVmFsdWUuZ2V0KCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBUZXh0RGVjb3JhdGlvbkNoYW5nZSBjaGFuZ2VJblN0eWxl
KGNvbnN0IEVkaXRpbmdTdHlsZSYgc3R5bGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9pc1VuZGVybGluZSA/IHN0eWxlLnVuZGVybGluZUNoYW5nZSgpIDogc3R5bGUuc3RyaWtlVGhy
b3VnaENoYW5nZSgpOworICAgIH0KKworICAgIGJvb2wgbV9pc1VuZGVybGluZTsKK307CiAKIGNs
YXNzIEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50IDogcHVibGljIEhUTUxFbGVtZW50RXF1aXZhbGVu
dCB7CiBwdWJsaWM6CiAgICAgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQoQ1NTUHJvcGVydHlJRCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpOwogICAgIEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50KENTU1Byb3BlcnR5SUQsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKTsKIAotICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBFbGVtZW50
KiBlbGVtKSBjb25zdCB7IHJldHVybiBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6Om1hdGNoZXMoZWxl
bSkgJiYgZWxlbS0+aGFzQXR0cmlidXRlKG1fYXR0ck5hbWUpOyB9CisgICAgYm9vbCBtYXRjaGVz
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIEhUTUxFbGVtZW50RXF1aXZh
bGVudDo6bWF0Y2hlcyhlbGVtZW50KSAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShtX2F0dHJOYW1l
KTsgfQogICAgIHZpcnR1YWwgYm9vbCBoYXNBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiwgU3R5
bGVQcm9wZXJ0aWVzKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHZhbHVlSXNQcmVzZW50SW5T
dHlsZShFbGVtZW50JiwgY29uc3QgRWRpdGluZ1N0eWxlJikgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIGFkZFRvU3R5bGUoRWxlbWVudCosIEVkaXRpbmdTdHlsZSopIGNvbnN0OwogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gYXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKEVsZW1lbnQq
KSBjb25zdDsKICAgICBpbmxpbmUgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXR0ck5hbWU7IH0KQEAgLTI2MCwxMCArMjc2LDEwIEBAIEhUTUxB
dHRyaWJ1dGVFcXVpdmFsZW50OjpIVE1MQXR0cmlidXRlRXEKIHsKIH0KIAotYm9vbCBIVE1MQXR0
cmlidXRlRXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqIGVsZW1lbnQs
IFN0eWxlUHJvcGVydGllcyogc3R5bGUpIGNvbnN0Citib29sIEhUTUxBdHRyaWJ1dGVFcXVpdmFs
ZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgRWRpdGlu
Z1N0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gYXR0
cmlidXRlVmFsdWVBc0NTU1ZhbHVlKGVsZW1lbnQpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3R5
bGVWYWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7CisgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGF0dHJpYnV0ZVZhbHVlQXNDU1NWYWx1ZSgmZWxlbWVu
dCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBzdHlsZVZhbHVlID0gc3R5bGUubV9tdXRhYmxlU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsKICAgICAKICAgICByZXR1cm4g
Y29tcGFyZUNTU1ZhbHVlUHRyKHZhbHVlLCBzdHlsZVZhbHVlKTsKIH0KQEAgLTMxNSwyNyArMzMx
LDI1IEBAIGZsb2F0IEVkaXRpbmdTdHlsZTo6Tm9Gb250RGVsdGEgPSAwLjBmOwogCiBFZGl0aW5n
U3R5bGU6OkVkaXRpbmdTdHlsZSgpCiAgICAgOiBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRT
aXplKGZhbHNlKQotICAgICwgbV9mb250U2l6ZURlbHRhKE5vRm9udERlbHRhKQorICAgICwgbV91
bmRlcmxpbmVDaGFuZ2Uoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFRleHREZWNvcmF0aW9uQ2hhbmdl
OjpOb25lKSkKKyAgICAsIG1fc3RyaWtlVGhyb3VnaENoYW5nZShzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oVGV4dERlY29yYXRpb25DaGFuZ2U6Ok5vbmUpKQogewogfQogCiBFZGl0aW5nU3R5bGU6OkVk
aXRpbmdTdHlsZShOb2RlKiBub2RlLCBQcm9wZXJ0aWVzVG9JbmNsdWRlIHByb3BlcnRpZXNUb0lu
Y2x1ZGUpCi0gICAgOiBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplKGZhbHNlKQotICAg
ICwgbV9mb250U2l6ZURlbHRhKE5vRm9udERlbHRhKQorICAgIDogRWRpdGluZ1N0eWxlKCkKIHsK
ICAgICBpbml0KG5vZGUsIHByb3BlcnRpZXNUb0luY2x1ZGUpOwogfQogCiBFZGl0aW5nU3R5bGU6
OkVkaXRpbmdTdHlsZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIFByb3BlcnRpZXNUb0luY2x1
ZGUgcHJvcGVydGllc1RvSW5jbHVkZSkKLSAgICA6IG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9u
dFNpemUoZmFsc2UpCi0gICAgLCBtX2ZvbnRTaXplRGVsdGEoTm9Gb250RGVsdGEpCisgICAgOiBF
ZGl0aW5nU3R5bGUoKQogewogICAgIGluaXQocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSwgcHJv
cGVydGllc1RvSW5jbHVkZSk7CiB9CiAKIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0
IFN0eWxlUHJvcGVydGllcyogc3R5bGUpCi0gICAgOiBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZv
bnRTaXplKGZhbHNlKQotICAgICwgbV9mb250U2l6ZURlbHRhKE5vRm9udERlbHRhKQorICAgIDog
RWRpdGluZ1N0eWxlKCkKIHsKICAgICBpZiAoc3R5bGUpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxl
ID0gc3R5bGUtPm11dGFibGVDb3B5KCk7CkBAIC0zNDMsMTEgKzM1NywxOCBAQCBFZGl0aW5nU3R5
bGU6OkVkaXRpbmdTdHlsZShjb25zdCBTdHlsZVByCiB9CiAKIEVkaXRpbmdTdHlsZTo6RWRpdGlu
Z1N0eWxlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICA6IG1fbXV0YWJsZVN0eWxlKDApCi0gICAgLCBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRT
aXplKGZhbHNlKQotICAgICwgbV9mb250U2l6ZURlbHRhKE5vRm9udERlbHRhKQorICAgIDogRWRp
dGluZ1N0eWxlKCkKIHsKICAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSk7CisgICAg
ZXh0cmFjdEZvbnRTaXplRGVsdGEoKTsKK30KKworRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBDU1NWYWx1ZUlEIHZhbHVlKQorICAgIDogRWRpdGlu
Z1N0eWxlKCkKK3sKKyAgICBtX211dGFibGVTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6
OmNyZWF0ZSgpOworICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2
YWx1ZSk7CisgICAgZXh0cmFjdEZvbnRTaXplRGVsdGEoKTsKIH0KIAogRWRpdGluZ1N0eWxlOjp+
RWRpdGluZ1N0eWxlKCkKQEAgLTQ5Miw3ICs1MTMsOCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6ZXh0
cmFjdEZvbnRTaXplRGVsdGEoCiAKIGJvb2wgRWRpdGluZ1N0eWxlOjppc0VtcHR5KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gKCFtX211dGFibGVTdHlsZSB8fCBtX211dGFibGVTdHlsZS0+aXNFbXB0
eSgpKSAmJiBtX2ZvbnRTaXplRGVsdGEgPT0gTm9Gb250RGVsdGE7CisgICAgcmV0dXJuICghbV9t
dXRhYmxlU3R5bGUgfHwgbV9tdXRhYmxlU3R5bGUtPmlzRW1wdHkoKSkgJiYgbV9mb250U2l6ZURl
bHRhID09IE5vRm9udERlbHRhCisgICAgICAgICYmIHVuZGVybGluZUNoYW5nZSgpID09IFRleHRE
ZWNvcmF0aW9uQ2hhbmdlOjpOb25lICYmIHN0cmlrZVRocm91Z2hDaGFuZ2UoKSA9PSBUZXh0RGVj
b3JhdGlvbkNoYW5nZTo6Tm9uZTsKIH0KIAogYm9vbCBFZGl0aW5nU3R5bGU6OnRleHREaXJlY3Rp
b24oV3JpdGluZ0RpcmVjdGlvbiYgd3JpdGluZ0RpcmVjdGlvbikgY29uc3QKQEAgLTUzNywxMSAr
NTU5LDYxIEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpvdmVycmlkZVdpdGhTdHlsZShjb24KICAgICBy
ZXR1cm4gbWVyZ2VTdHlsZShzdHlsZSwgT3ZlcnJpZGVWYWx1ZXMpOwogfQogCitzdGF0aWMgdm9p
ZCBhcHBseVRleHREZWNvcmF0aW9uQ2hhbmdlVG9WYWx1ZUxpc3QoQ1NTVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsIFRleHREZWNvcmF0aW9uQ2hhbmdlIGNoYW5nZSwgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiYmIHZhbHVlKQoreworICAgIHN3aXRjaCAoY2hhbmdlKSB7CisgICAgY2FzZSBUZXh0RGVjb3Jh
dGlvbkNoYW5nZTo6Tm9uZToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0RGVjb3JhdGlv
bkNoYW5nZTo6QWRkOgorICAgICAgICB2YWx1ZUxpc3QuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHREZWNvcmF0aW9uQ2hhbmdlOjpSZW1vdmU6
CisgICAgICAgIHZhbHVlTGlzdC5yZW1vdmVBbGwoJnZhbHVlLmdldCgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCit2b2lkIEVkaXRpbmdTdHlsZTo6b3ZlcnJpZGVUeXBpbmdTdHlsZUF0
KGNvbnN0IEVkaXRpbmdTdHlsZSYgc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK3sK
KyAgICBtZXJnZVN0eWxlKHN0eWxlLm1fbXV0YWJsZVN0eWxlLmdldCgpLCBPdmVycmlkZVZhbHVl
cyk7CisKKyAgICBtX2ZvbnRTaXplRGVsdGEgKz0gc3R5bGUubV9mb250U2l6ZURlbHRhOworCisg
ICAgcHJlcGFyZVRvQXBwbHlBdChwb3NpdGlvbiwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRp
bmdEaXJlY3Rpb24pOworCisgICAgYXV0byB1bmRlcmxpbmVDaGFuZ2UgPSBzdHlsZS51bmRlcmxp
bmVDaGFuZ2UoKTsKKyAgICBhdXRvIHN0cmlrZVRocm91Z2hDaGFuZ2UgPSBzdHlsZS5zdHJpa2VU
aHJvdWdoQ2hhbmdlKCk7CisgICAgaWYgKHVuZGVybGluZUNoYW5nZSA9PSBUZXh0RGVjb3JhdGlv
bkNoYW5nZTo6Tm9uZSAmJiBzdHJpa2VUaHJvdWdoQ2hhbmdlID09IFRleHREZWNvcmF0aW9uQ2hh
bmdlOjpOb25lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbXV0YWJsZVN0eWxlKQor
ICAgICAgICBtX211dGFibGVTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgp
OworCisgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB1bmRlcmxpbmUgPSBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpOworICAgIFJlZjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbGluZVRocm91Z2ggPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVl
TGlzdDsKKyAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAg
dmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpLmNvcHkoKTsKKyAgICAg
ICAgYXBwbHlUZXh0RGVjb3JhdGlvbkNoYW5nZVRvVmFsdWVMaXN0KCp2YWx1ZUxpc3QsIHVuZGVy
bGluZUNoYW5nZSwgV1RGOjptb3ZlKHVuZGVybGluZSkpOworICAgICAgICBhcHBseVRleHREZWNv
cmF0aW9uQ2hhbmdlVG9WYWx1ZUxpc3QoKnZhbHVlTGlzdCwgc3RyaWtlVGhyb3VnaENoYW5nZSwg
V1RGOjptb3ZlKGxpbmVUaHJvdWdoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVMaXN0
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgICAgICBpZiAodW5k
ZXJsaW5lQ2hhbmdlID09IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQpCisgICAgICAgICAgICB2
YWx1ZUxpc3QtPmFwcGVuZChXVEY6Om1vdmUodW5kZXJsaW5lKSk7CisgICAgICAgIGlmIChzdHJp
a2VUaHJvdWdoQ2hhbmdlID09IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQpCisgICAgICAgICAg
ICB2YWx1ZUxpc3QtPmFwcGVuZChXVEY6Om1vdmUobGluZVRocm91Z2gpKTsKKyAgICB9CisgICAg
bV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRp
b25zSW5FZmZlY3QsIHZhbHVlTGlzdC5nZXQoKSk7Cit9CisKIHZvaWQgRWRpdGluZ1N0eWxlOjpj
bGVhcigpCiB7CiAgICAgbV9tdXRhYmxlU3R5bGUuY2xlYXIoKTsKICAgICBtX3Nob3VsZFVzZUZp
eGVkRGVmYXVsdEZvbnRTaXplID0gZmFsc2U7CiAgICAgbV9mb250U2l6ZURlbHRhID0gTm9Gb250
RGVsdGE7CisgICAgc2V0VW5kZXJsaW5lQ2hhbmdlKFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25l
KTsKKyAgICBzZXRTdHJpa2VUaHJvdWdoQ2hhbmdlKFRleHREZWNvcmF0aW9uQ2hhbmdlOjpOb25l
KTsKIH0KIAogUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6Y29weSgpIGNv
bnN0CkBAIC01NTAsNiArNjIyLDggQEAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdT
dHlsZTo6YwogICAgIGlmIChtX211dGFibGVTdHlsZSkKICAgICAgICAgY29weS0+bV9tdXRhYmxl
U3R5bGUgPSBtX211dGFibGVTdHlsZS0+bXV0YWJsZUNvcHkoKTsKICAgICBjb3B5LT5tX3Nob3Vs
ZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplID0gbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6
ZTsKKyAgICBjb3B5LT5tX3VuZGVybGluZUNoYW5nZSA9IG1fdW5kZXJsaW5lQ2hhbmdlOworICAg
IGNvcHktPm1fc3RyaWtlVGhyb3VnaENoYW5nZSA9IG1fc3RyaWtlVGhyb3VnaENoYW5nZTsKICAg
ICBjb3B5LT5tX2ZvbnRTaXplRGVsdGEgPSBtX2ZvbnRTaXplRGVsdGE7CiAgICAgcmV0dXJuIGNv
cHk7CiB9CkBAIC02OTQsMTYgKzc2OCw2NyBAQCBUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0
YXRlT2ZTdHlsZShjCiAgICAgcmV0dXJuIHN0YXRlOwogfQogCi1ib29sIEVkaXRpbmdTdHlsZTo6
Y29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQs
IEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiogY29u
ZmxpY3RpbmdQcm9wZXJ0aWVzKSBjb25zdAorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHRl
eHREZWNvcmF0aW9uVmFsdWVMaXN0KGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcykK
K3sKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworICAgIGlmICghaXM8Q1NTVmFsdWVM
aXN0Pih2YWx1ZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBk
b3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlLmdldCgpKTsKK30KKworYm9vbCBFZGl0aW5nU3R5
bGU6OmNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVt
ZW50LCBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4qIG5ld0lubGluZVN0eWxlUHRyLCBF
ZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlKSBjb25zdAogewogICAgIEFTU0VSVChlbGVtZW50
KTsKLSAgICBBU1NFUlQoIWNvbmZsaWN0aW5nUHJvcGVydGllcyB8fCBjb25mbGljdGluZ1Byb3Bl
cnRpZXMtPmlzRW1wdHkoKSk7CiAKICAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMqIGlubGluZVN0
eWxlID0gZWxlbWVudC0+aW5saW5lU3R5bGUoKTsKLSAgICBpZiAoIW1fbXV0YWJsZVN0eWxlIHx8
ICFpbmxpbmVTdHlsZSkKKyAgICBpZiAoIWlubGluZVN0eWxlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgYm9vbCBjb25mbGljdHMgPSBmYWxzZTsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gbmV3SW5saW5lU3R5bGU7CisgICAgaWYgKG5ld0lubGluZVN0eWxlUHRyKSB7
CisgICAgICAgIG5ld0lubGluZVN0eWxlID0gaW5saW5lU3R5bGUtPm11dGFibGVDb3B5KCk7Cisg
ICAgICAgICpuZXdJbmxpbmVTdHlsZVB0ciA9IG5ld0lubGluZVN0eWxlOworICAgIH0KKworICAg
IGJvb2wgc2hvdWxkUmVtb3ZlVW5kZXJsaW5lID0gdW5kZXJsaW5lQ2hhbmdlKCkgPT0gVGV4dERl
Y29yYXRpb25DaGFuZ2U6OlJlbW92ZTsKKyAgICBib29sIHNob3VsZFJlbW92ZVN0cmlrZVRocm91
Z2ggPSBzdHJpa2VUaHJvdWdoQ2hhbmdlKCkgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6OlJlbW92
ZTsKKyAgICBpZiAoc2hvdWxkUmVtb3ZlVW5kZXJsaW5lIHx8IHNob3VsZFJlbW92ZVN0cmlrZVRo
cm91Z2gpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlTGlzdCA9IHRl
eHREZWNvcmF0aW9uVmFsdWVMaXN0KCppbmxpbmVTdHlsZSkpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IG5ld1ZhbHVlTGlzdCA9IHZhbHVlTGlzdC0+Y29weSgpOworICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZXh0cmFjdGVkVmFsdWVMaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworCisgICAgICAgICAgICBSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IHVuZGVybGluZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZVVuZGVybGluZSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlVW5kZXJs
aW5lICYmIHZhbHVlTGlzdC0+aGFzVmFsdWUodW5kZXJsaW5lLnB0cigpKSkgeworICAgICAgICAg
ICAgICAgIGlmICghbmV3SW5saW5lU3R5bGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIG5ld1ZhbHVlTGlzdC0+cmVtb3ZlQWxsKHVuZGVybGluZS5w
dHIoKSk7CisgICAgICAgICAgICAgICAgZXh0cmFjdGVkVmFsdWVMaXN0LT5hcHBlbmQoV1RGOjpt
b3ZlKHVuZGVybGluZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpOworICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92
ZVN0cmlrZVRocm91Z2ggJiYgdmFsdWVMaXN0LT5oYXNWYWx1ZShsaW5lVGhyb3VnaC5wdHIoKSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld0lubGluZVN0eWxlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBuZXdWYWx1ZUxpc3QtPnJlbW92ZUFs
bChsaW5lVGhyb3VnaC5wdHIoKSk7CisgICAgICAgICAgICAgICAgZXh0cmFjdGVkVmFsdWVMaXN0
LT5hcHBlbmQoV1RGOjptb3ZlKGxpbmVUaHJvdWdoKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChleHRyYWN0ZWRWYWx1ZUxpc3QtPmxlbmd0aCgpKSB7CisgICAgICAgICAgICAg
ICAgY29uZmxpY3RzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWVMaXN0LT5s
ZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIG5ld1ZhbHVlTGlzdCk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVy
dHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7CisKKyAgICAgICAgICAgICAgICBpZiAoZXh0
cmFjdGVkU3R5bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0ltcG9ydGFudCA9IGlu
bGluZVN0eWxlLT5wcm9wZXJ0eUlzSW1wb3J0YW50KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24p
OworICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWRTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlUZXh0RGVjb3JhdGlvbiwgZXh0cmFjdGVkVmFsdWVMaXN0LT5jc3NUZXh0KCksIGlzSW1w
b3J0YW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CiAKLSAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gbV9tdXRhYmxlU3R5bGUtPnByb3Bl
cnR5Q291bnQoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gbV9tdXRhYmxlU3R5bGUg
PyBtX211dGFibGVTdHlsZS0+cHJvcGVydHlDb3VudCgpIDogMDsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCA9IG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0eUF0KGkpLmlkKCk7CiAKQEAgLTcx
MiwzNSArODM3LDM2IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjpjb25mbGljdHNXaXRoSW5saW5lU3QK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1By
b3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QgJiYgaW5saW5lU3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbikpIHsKLSAgICAgICAgICAg
IGlmICghY29uZmxpY3RpbmdQcm9wZXJ0aWVzKQorICAgICAgICAgICAgaWYgKCFuZXdJbmxpbmVT
dHlsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGNvbmZsaWN0
aW5nUHJvcGVydGllcy0+YXBwZW5kKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworICAgICAg
ICAgICAgY29uZmxpY3RzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1v
dmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKICAgICAgICAgICAgIGlmIChl
eHRyYWN0ZWRTdHlsZSkKICAgICAgICAgICAgICAgICBleHRyYWN0ZWRTdHlsZS0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgaW5saW5lU3R5bGUtPmdldFByb3BlcnR5VmFs
dWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiksIGlubGluZVN0eWxlLT5wcm9wZXJ0eUlzSW1w
b3J0YW50KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbmxpbmVTdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShwcm9wZXJ0eUlEKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChw
cm9wZXJ0eUlEID09IENTU1Byb3BlcnR5VW5pY29kZUJpZGkgJiYgaW5saW5lU3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rpb24pKSB7Ci0gICAgICAgICAgICBpZiAo
IWNvbmZsaWN0aW5nUHJvcGVydGllcykKKyAgICAgICAgICAgIGlmICghbmV3SW5saW5lU3R5bGUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBjb25mbGljdGluZ1By
b3BlcnRpZXMtPmFwcGVuZChDU1NQcm9wZXJ0eURpcmVjdGlvbik7CisgICAgICAgICAgICBjb25m
bGljdHMgPSB0cnVlOworICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKICAgICAgICAgICAgIGlmIChleHRyYWN0ZWRTdHlsZSkK
ICAgICAgICAgICAgICAgICBleHRyYWN0ZWRTdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwg
aW5saW5lU3R5bGUtPmdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCksIGlubGluZVN0eWxlLT5w
cm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5SUQpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
ICghY29uZmxpY3RpbmdQcm9wZXJ0aWVzKQorICAgICAgICBpZiAoIW5ld0lubGluZVN0eWxlKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgY29uZmxpY3RpbmdQcm9wZXJ0aWVz
LT5hcHBlbmQocHJvcGVydHlJRCk7Ci0KKyAgICAgICAgY29uZmxpY3RzID0gdHJ1ZTsKKyAgICAg
ICAgbmV3SW5saW5lU3R5bGUtPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOwogICAgICAgICBp
ZiAoZXh0cmFjdGVkU3R5bGUpCiAgICAgICAgICAgICBleHRyYWN0ZWRTdHlsZS0+c2V0UHJvcGVy
dHkocHJvcGVydHlJRCwgaW5saW5lU3R5bGUtPmdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCks
IGlubGluZVN0eWxlLT5wcm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5SUQpKTsKICAgICB9CiAK
LSAgICByZXR1cm4gY29uZmxpY3RpbmdQcm9wZXJ0aWVzICYmICFjb25mbGljdGluZ1Byb3BlcnRp
ZXMtPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gY29uZmxpY3RzOwogfQogCiBzdGF0aWMgY29uc3Qg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxIVE1MRWxlbWVudEVxdWl2YWxlbnQ+PiYgaHRtbEVsZW1l
bnRFcXVpdmFsZW50cygpCkBAIC03NjYsMTQgKzg5MiwxMyBAQCBzdGF0aWMgY29uc3QgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxIVE1MCiAKIGJvb2wgRWRpdGluZ1N0eWxlOjpjb25mbGljdHNXaXRo
SW1wbGljaXRTdHlsZU9mRWxlbWVudChIVE1MRWxlbWVudCogZWxlbWVudCwgRWRpdGluZ1N0eWxl
KiBleHRyYWN0ZWRTdHlsZSwgU2hvdWxkRXh0cmFjdE1hdGNoaW5nU3R5bGUgc2hvdWxkRXh0cmFj
dE1hdGNoaW5nU3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX211dGFibGVTdHlsZSkKKyAgICBp
ZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPEhUTUxFbGVtZW50RXF1aXZhbGVudD4+JiBIVE1MRWxlbWVudEVxdWl2
YWxlbnRzID0gaHRtbEVsZW1lbnRFcXVpdmFsZW50cygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgSFRNTEVsZW1lbnRFcXVpdmFsZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25z
dCBIVE1MRWxlbWVudEVxdWl2YWxlbnQqIGVxdWl2YWxlbnQgPSBIVE1MRWxlbWVudEVxdWl2YWxl
bnRzW2ldLmdldCgpOwotICAgICAgICBpZiAoZXF1aXZhbGVudC0+bWF0Y2hlcyhlbGVtZW50KSAm
JiBlcXVpdmFsZW50LT5wcm9wZXJ0eUV4aXN0c0luU3R5bGUobV9tdXRhYmxlU3R5bGUuZ2V0KCkp
Ci0gICAgICAgICAgICAmJiAoc2hvdWxkRXh0cmFjdE1hdGNoaW5nU3R5bGUgPT0gRXh0cmFjdE1h
dGNoaW5nU3R5bGUgfHwgIWVxdWl2YWxlbnQtPnZhbHVlSXNQcmVzZW50SW5TdHlsZShlbGVtZW50
LCBtX211dGFibGVTdHlsZS5nZXQoKSkpKSB7CisgICAgZm9yIChhdXRvJiBlcXVpdmFsZW50IDog
SFRNTEVsZW1lbnRFcXVpdmFsZW50cykgeworICAgICAgICBpZiAoZXF1aXZhbGVudC0+bWF0Y2hl
cygqZWxlbWVudCkgJiYgZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxlKCp0aGlzKQor
ICAgICAgICAgICAgJiYgKHNob3VsZEV4dHJhY3RNYXRjaGluZ1N0eWxlID09IEV4dHJhY3RNYXRj
aGluZ1N0eWxlIHx8ICFlcXVpdmFsZW50LT52YWx1ZUlzUHJlc2VudEluU3R5bGUoKmVsZW1lbnQs
ICp0aGlzKSkpIHsKICAgICAgICAgICAgIGlmIChleHRyYWN0ZWRTdHlsZSkKICAgICAgICAgICAg
ICAgICBlcXVpdmFsZW50LT5hZGRUb1N0eWxlKGVsZW1lbnQsIGV4dHJhY3RlZFN0eWxlKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODAzLDEzICs5MjgsMTIgQEAgc3RhdGljIGNvbnN0
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTAogYm9vbCBFZGl0aW5nU3R5bGU6OmNvbmZsaWN0
c1dpdGhJbXBsaWNpdFN0eWxlT2ZBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogewogICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBpZiAoIW1fbXV0YWJsZVN0eWxlKQorICAg
IGlmIChpc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8SFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ+PiYgSFRNTEF0dHJpYnV0
ZUVxdWl2YWxlbnRzID0gaHRtbEF0dHJpYnV0ZUVxdWl2YWxlbnRzKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBIVE1MQXR0cmlidXRlRXF1aXZhbGVudHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaWYgKEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS0+bWF0Y2hlcyhlbGVtZW50KSAm
JiBIVE1MQXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPnByb3BlcnR5RXhpc3RzSW5TdHlsZShtX211
dGFibGVTdHlsZS5nZXQoKSkKLSAgICAgICAgICAgICYmICFIVE1MQXR0cmlidXRlRXF1aXZhbGVu
dHNbaV0tPnZhbHVlSXNQcmVzZW50SW5TdHlsZShlbGVtZW50LCBtX211dGFibGVTdHlsZS5nZXQo
KSkpCisgICAgZm9yIChhdXRvJiBlcXVpdmFsZW50IDogSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnRz
KSB7CisgICAgICAgIGlmIChlcXVpdmFsZW50LT5tYXRjaGVzKCplbGVtZW50KSAmJiBlcXVpdmFs
ZW50LT5wcm9wZXJ0eUV4aXN0c0luU3R5bGUoKnRoaXMpICYmICFlcXVpdmFsZW50LT52YWx1ZUlz
UHJlc2VudEluU3R5bGUoKmVsZW1lbnQsICp0aGlzKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApAQCAtODM0LDggKzk1OCw4IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjpleHRyYWN0
Q29uZmxpY3RpbmdJbXAKICAgICAgICAgaWYgKHNob3VsZFByZXNlcnZlV3JpdGluZ0RpcmVjdGlv
biA9PSBQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24gJiYgZXF1aXZhbGVudC0+YXR0cmlidXRlTmFt
ZSgpID09IEhUTUxOYW1lczo6ZGlyQXR0cikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGlmICghZXF1aXZhbGVudC0+bWF0Y2hlcyhlbGVtZW50KSB8fCAhZXF1aXZhbGVudC0+cHJv
cGVydHlFeGlzdHNJblN0eWxlKG1fbXV0YWJsZVN0eWxlLmdldCgpKQotICAgICAgICAgICAgfHwg
KHNob3VsZEV4dHJhY3RNYXRjaGluZ1N0eWxlID09IERvTm90RXh0cmFjdE1hdGNoaW5nU3R5bGUg
JiYgZXF1aXZhbGVudC0+dmFsdWVJc1ByZXNlbnRJblN0eWxlKGVsZW1lbnQsIG1fbXV0YWJsZVN0
eWxlLmdldCgpKSkpCisgICAgICAgIGlmICghZXF1aXZhbGVudC0+bWF0Y2hlcygqZWxlbWVudCkg
fHwgIWVxdWl2YWxlbnQtPnByb3BlcnR5RXhpc3RzSW5TdHlsZSgqdGhpcykKKyAgICAgICAgICAg
IHx8IChzaG91bGRFeHRyYWN0TWF0Y2hpbmdTdHlsZSA9PSBEb05vdEV4dHJhY3RNYXRjaGluZ1N0
eWxlICYmIGVxdWl2YWxlbnQtPnZhbHVlSXNQcmVzZW50SW5TdHlsZSgqZWxlbWVudCwgKnRoaXMp
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmIChleHRyYWN0ZWRTdHlsZSkK
QEAgLTg0OSwxMCArOTczLDI3IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjpleHRyYWN0Q29uZmxpY3Rp
bmdJbXAKIAogYm9vbCBFZGl0aW5nU3R5bGU6OnN0eWxlSXNQcmVzZW50SW5Db21wdXRlZFN0eWxl
T2ZOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX211dGFibGVTdHlsZSkKKyAg
ICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBDb21wdXRlZFN0eWxl
RXh0cmFjdG9yIGNvbXB1dGVkU3R5bGUobm9kZSk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnRpZXNO
b3RJbigqbV9tdXRhYmxlU3R5bGUsIGNvbXB1dGVkU3R5bGUpLT5pc0VtcHR5KCk7CisKKyAgICBi
b29sIHNob3VsZEFkZFVuZGVybGluZSA9IHVuZGVybGluZUNoYW5nZSgpID09IFRleHREZWNvcmF0
aW9uQ2hhbmdlOjpBZGQ7CisgICAgYm9vbCBzaG91bGRBZGRMaW5lVGhyb3VnaCA9IHN0cmlrZVRo
cm91Z2hDaGFuZ2UoKSA9PSBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6QWRkOworICAgIGlmIChzaG91
bGRBZGRVbmRlcmxpbmUgfHwgc2hvdWxkQWRkTGluZVRocm91Z2gpIHsKKyAgICAgICAgYm9vbCBo
YXNVbmRlcmxpbmUgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBoYXNMaW5lVGhyb3VnaCA9IGZhbHNl
OworICAgICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNvbXB1dGVkU3R5bGUucHJv
cGVydHlWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKSkgeworICAgICAgICAgICAgaWYg
KHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgQ1NTVmFsdWVM
aXN0JiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgaGFzVW5kZXJsaW5lID0gdmFsdWVMaXN0Lmhhc1ZhbHVlKCZjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBoYXNMaW5lVGhyb3VnaCA9IHZhbHVlTGlzdC5oYXNWYWx1ZSgmY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpLmdldCgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoKHNob3VsZEFkZFVuZGVybGlu
ZSAmJiAhaGFzVW5kZXJsaW5lKSB8fCAoc2hvdWxkQWRkTGluZVRocm91Z2ggJiYgIWhhc0xpbmVU
aHJvdWdoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
IW1fbXV0YWJsZVN0eWxlIHx8IGdldFByb3BlcnRpZXNOb3RJbigqbV9tdXRhYmxlU3R5bGUsIGNv
bXB1dGVkU3R5bGUpLT5pc0VtcHR5KCk7CiB9CiAKIGJvb2wgRWRpdGluZ1N0eWxlOjplbGVtZW50
SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZhbGVudChjb25zdCBIVE1MRWxlbWVudCogZWxlbWVudCkK
QEAgLTg2NCw3ICsxMDA1LDcgQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmVsZW1lbnRJc1N0eWxlZFNw
YW5PcgogICAgICAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhUTUxFbGVtZW50RXF1
aXZhbGVudD4+JiBIVE1MRWxlbWVudEVxdWl2YWxlbnRzID0gaHRtbEVsZW1lbnRFcXVpdmFsZW50
cygpOwogICAgICAgICBzaXplX3QgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IEhUTUxFbGVt
ZW50RXF1aXZhbGVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChIVE1MRWxlbWVu
dEVxdWl2YWxlbnRzW2ldLT5tYXRjaGVzKGVsZW1lbnQpKSB7CisgICAgICAgICAgICBpZiAoSFRN
TEVsZW1lbnRFcXVpdmFsZW50c1tpXS0+bWF0Y2hlcygqZWxlbWVudCkpIHsKICAgICAgICAgICAg
ICAgICBlbGVtZW50SXNTcGFuT3JFbGVtZW50RXF1aXZhbGVudCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC04NzcsNyArMTAxOCw3IEBAIGJvb2wgRWRp
dGluZ1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3IKICAgICB1bnNpZ25lZCBtYXRjaGVkQXR0
cmlidXRlcyA9IDA7CiAgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxIVE1MQXR0cmli
dXRlRXF1aXZhbGVudD4+JiBIVE1MQXR0cmlidXRlRXF1aXZhbGVudHMgPSBodG1sQXR0cmlidXRl
RXF1aXZhbGVudHMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhUTUxBdHRyaWJ1dGVF
cXVpdmFsZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoSFRNTEF0dHJpYnV0ZUVxdWl2
YWxlbnRzW2ldLT5tYXRjaGVzKGVsZW1lbnQpICYmIEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50c1tp
XS0+YXR0cmlidXRlTmFtZSgpICE9IEhUTUxOYW1lczo6ZGlyQXR0cikKKyAgICAgICAgaWYgKEhU
TUxBdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS0+bWF0Y2hlcygqZWxlbWVudCkgJiYgSFRNTEF0dHJp
YnV0ZUVxdWl2YWxlbnRzW2ldLT5hdHRyaWJ1dGVOYW1lKCkgIT0gSFRNTE5hbWVzOjpkaXJBdHRy
KQogICAgICAgICAgICAgbWF0Y2hlZEF0dHJpYnV0ZXMrKzsKICAgICB9CiAKQEAgLTk2OSwxMCAr
MTExMCwxNCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VJbmxpbmVTdHlsZU9mRWxlCiB9CiAK
IHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGlu
ZVN0eWxlRGVjbChjb25zdCBIVE1MRWxlbWVudEVxdWl2YWxlbnQqIGVxdWl2YWxlbnQsIGNvbnN0
IFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsCi0gICAgRWRpdGluZ1N0eWxlOjpDU1NQcm9wZXJ0eU92
ZXJyaWRlTW9kZSBtb2RlLCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlKQorICAgIEVkaXRpbmdTdHls
ZTo6Q1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSwgRWRpdGluZ1N0eWxlJiBzdHlsZSkKIHsK
LSAgICByZXR1cm4gZXF1aXZhbGVudC0+bWF0Y2hlcyhlbGVtZW50KSAmJiAoIWVsZW1lbnQtPmlu
bGluZVN0eWxlKCkgfHwgIWVxdWl2YWxlbnQtPnByb3BlcnR5RXhpc3RzSW5TdHlsZShlbGVtZW50
LT5pbmxpbmVTdHlsZSgpKSkKLSAgICAgICAgJiYgKG1vZGUgPT0gRWRpdGluZ1N0eWxlOjpPdmVy
cmlkZVZhbHVlcyB8fCAhZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxlKHN0eWxlKSk7
CisgICAgaWYgKCFlcXVpdmFsZW50LT5tYXRjaGVzKCplbGVtZW50KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtb2RlICE9IEVkaXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMgJiYg
ZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxlKHN0eWxlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuICFlbGVtZW50LT5pbmxpbmVTdHlsZSgpIHx8ICFlcXVpdmFs
ZW50LT5wcm9wZXJ0eUV4aXN0c0luU3R5bGUoRWRpdGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVudC0+
aW5saW5lU3R5bGUoKSkuZ2V0KCkpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBleHRyYWN0RWRpdGluZ1Byb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0
aWVzKiBzdHlsZSwgRWRpdGluZ1N0eWxlOjpQcm9wZXJ0aWVzVG9JbmNsdWRlIHByb3BlcnRpZXNU
b0luY2x1ZGUpCkBAIC0xMDA1LDcgKzExNTAsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VJ
bmxpbmVBbmRJbXBsaWNpCiAKICAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhUTUxF
bGVtZW50RXF1aXZhbGVudD4+JiBlbGVtZW50RXF1aXZhbGVudHMgPSBodG1sRWxlbWVudEVxdWl2
YWxlbnRzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbGVtZW50RXF1aXZhbGVudHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGVsZW1lbnRNYXRjaGVzQW5kUHJvcGVydHlJc05v
dEluSW5saW5lU3R5bGVEZWNsKGVsZW1lbnRFcXVpdmFsZW50c1tpXS5nZXQoKSwgZWxlbWVudCwg
bW9kZSwgbV9tdXRhYmxlU3R5bGUuZ2V0KCkpKQorICAgICAgICBpZiAoZWxlbWVudE1hdGNoZXNB
bmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2woZWxlbWVudEVxdWl2YWxlbnRzW2ldLmdl
dCgpLCBlbGVtZW50LCBtb2RlLCAqdGhpcykpCiAgICAgICAgICAgICBlbGVtZW50RXF1aXZhbGVu
dHNbaV0tPmFkZFRvU3R5bGUoZWxlbWVudCwgdGhpcyk7CiAgICAgfQogCkBAIC0xMDEzLDcgKzEx
NTgsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VJbmxpbmVBbmRJbXBsaWNpCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVFcXVpdmFsZW50cy5zaXplKCk7ICsraSkgewog
ICAgICAgICBpZiAoYXR0cmlidXRlRXF1aXZhbGVudHNbaV0tPmF0dHJpYnV0ZU5hbWUoKSA9PSBI
VE1MTmFtZXM6OmRpckF0dHIpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBpbmNsdWRlIGRpcmVjdGlvbmFsaXR5Ci0gICAgICAgIGlmIChlbGVtZW50TWF0Y2hlc0Fu
ZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChhdHRyaWJ1dGVFcXVpdmFsZW50c1tpXS5n
ZXQoKSwgZWxlbWVudCwgbW9kZSwgbV9tdXRhYmxlU3R5bGUuZ2V0KCkpKQorICAgICAgICBpZiAo
ZWxlbWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2woYXR0cmlidXRl
RXF1aXZhbGVudHNbaV0uZ2V0KCksIGVsZW1lbnQsIG1vZGUsICp0aGlzKSkKICAgICAgICAgICAg
IGF0dHJpYnV0ZUVxdWl2YWxlbnRzW2ldLT5hZGRUb1N0eWxlKGVsZW1lbnQsIHRoaXMpOwogICAg
IH0KIH0KQEAgLTEwNDksMTYgKzExOTQsMTYgQEAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVk
aXRpbmdTdHlsZTo6dwogfQogCiAKLXN0YXRpYyB2b2lkIG1lcmdlVGV4dERlY29yYXRpb25WYWx1
ZXMoQ1NTVmFsdWVMaXN0KiBtZXJnZWRWYWx1ZSwgY29uc3QgQ1NTVmFsdWVMaXN0KiB2YWx1ZVRv
TWVyZ2UpCitzdGF0aWMgdm9pZCBtZXJnZVRleHREZWNvcmF0aW9uVmFsdWVzKENTU1ZhbHVlTGlz
dCYgbWVyZ2VkVmFsdWUsIGNvbnN0IENTU1ZhbHVlTGlzdCYgdmFsdWVUb01lcmdlKQogewotICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdW5kZXJsaW5lID0gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5kZXJsaW5lKTsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpOworICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4g
dW5kZXJsaW5lID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
VW5kZXJsaW5lKTsKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpOwog
Ci0gICAgaWYgKHZhbHVlVG9NZXJnZS0+aGFzVmFsdWUodW5kZXJsaW5lLmdldCgpKSAmJiAhbWVy
Z2VkVmFsdWUtPmhhc1ZhbHVlKHVuZGVybGluZS5nZXQoKSkpCi0gICAgICAgIG1lcmdlZFZhbHVl
LT5hcHBlbmQodW5kZXJsaW5lLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICh2YWx1ZVRvTWVy
Z2UuaGFzVmFsdWUodW5kZXJsaW5lLnB0cigpKSAmJiAhbWVyZ2VkVmFsdWUuaGFzVmFsdWUodW5k
ZXJsaW5lLnB0cigpKSkKKyAgICAgICAgbWVyZ2VkVmFsdWUuYXBwZW5kKFdURjo6bW92ZSh1bmRl
cmxpbmUpKTsKIAotICAgIGlmICh2YWx1ZVRvTWVyZ2UtPmhhc1ZhbHVlKGxpbmVUaHJvdWdoLmdl
dCgpKSAmJiAhbWVyZ2VkVmFsdWUtPmhhc1ZhbHVlKGxpbmVUaHJvdWdoLmdldCgpKSkKLSAgICAg
ICAgbWVyZ2VkVmFsdWUtPmFwcGVuZChsaW5lVGhyb3VnaC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICBpZiAodmFsdWVUb01lcmdlLmhhc1ZhbHVlKGxpbmVUaHJvdWdoLnB0cigpKSAmJiAhbWVyZ2Vk
VmFsdWUuaGFzVmFsdWUobGluZVRocm91Z2gucHRyKCkpKQorICAgICAgICBtZXJnZWRWYWx1ZS5h
cHBlbmQoV1RGOjptb3ZlKGxpbmVUaHJvdWdoKSk7CiB9CiAKIHZvaWQgRWRpdGluZ1N0eWxlOjpt
ZXJnZVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUsIENTU1Byb3BlcnR5T3ZlcnJp
ZGVNb2RlIG1vZGUpCkBAIC0xMDc3LDE2ICsxMjIyLDE5IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpt
ZXJnZVN0eWxlKGNvbnN0IFN0eWwKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IG1f
bXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LmlkKCkpOwogCiAgICAg
ICAgIC8vIHRleHQgZGVjb3JhdGlvbnMgbmV2ZXIgb3ZlcnJpZGUgdmFsdWVzLgotICAgICAgICBp
ZiAoKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiB8fCBwcm9wZXJ0
eS5pZCgpID09IENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpICYmIHBy
b3BlcnR5LnZhbHVlKCktPmlzVmFsdWVMaXN0KCkgJiYgdmFsdWUpIHsKKyAgICAgICAgaWYgKChw
cm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24gfHwgcHJvcGVydHkuaWQo
KSA9PSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KQorICAgICAgICAg
ICAgJiYgaXM8Q1NTVmFsdWVMaXN0PigqcHJvcGVydHkudmFsdWUoKSkgJiYgdmFsdWUpIHsKICAg
ICAgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKLSAgICAgICAgICAgICAg
ICBtZXJnZVRleHREZWNvcmF0aW9uVmFsdWVzKGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUu
Z2V0KCkpLCBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHByb3BlcnR5LnZhbHVlKCkpKTsKKyAgICAg
ICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBuZXdWYWx1ZSA9IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4oKnZhbHVlKS5jb3B5KCk7CisgICAgICAgICAgICAgICAgbWVyZ2VUZXh0RGVjb3Jh
dGlvblZhbHVlcygqbmV3VmFsdWUsIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnByb3BlcnR5LnZh
bHVlKCkpKTsKKyAgICAgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkocHJv
cGVydHkuaWQoKSwgbmV3VmFsdWUucmVsZWFzZSgpLCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKTsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZh
bHVlID0gbnVsbHB0cjsgLy8gdGV4dC1kZWNvcmF0aW9uOiBub25lIGlzIGVxdWl2YWxlbnQgdG8g
bm90IGhhdmluZyB0aGUgcHJvcGVydHkuCiAgICAgICAgIH0KIAogICAgICAgICBpZiAobW9kZSA9
PSBPdmVycmlkZVZhbHVlcyB8fCAobW9kZSA9PSBEb05vdE92ZXJyaWRlVmFsdWVzICYmICF2YWx1
ZSkpCi0gICAgICAgICAgICBtX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHkuaWQo
KSwgcHJvcGVydHkudmFsdWUoKS0+Y3NzVGV4dCgpLCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKTsK
KyAgICAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpLCBw
cm9wZXJ0eS52YWx1ZSgpLCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKTsKICAgICB9CiAKICAgICBp
bnQgb2xkRm9udFNpemVEZWx0YSA9IG1fZm9udFNpemVEZWx0YTsKQEAgLTEzOTcsOCArMTU0NSw4
IEBAIFN0eWxlQ2hhbmdlOjpTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHMKICAgICAsIG1fYXBw
bHlTdWJzY3JpcHQoZmFsc2UpCiAgICAgLCBtX2FwcGx5U3VwZXJzY3JpcHQoZmFsc2UpCiB7Ci0g
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcG9zaXRpb24uYW5jaG9yTm9kZSgpID8gJnBvc2l0aW9u
LmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSA6IDA7Ci0gICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUt
PnN0eWxlKCkgfHwgIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKKyAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpID8gJnBvc2l0aW9uLmRlcHJl
Y2F0ZWROb2RlKCktPmRvY3VtZW50KCkgOiAwOworICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlz
RW1wdHkoKSB8fCAhZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwpAQCAtMTQw
OCwxMiArMTU1Niw0NCBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBz
CiAgICAgQ29tcHV0ZWRTdHlsZUV4dHJhY3RvciBjb21wdXRlZFN0eWxlKG5vZGUpOwogCiAgICAg
Ly8gRklYTUU6IHRha2UgY2FyZSBvZiBiYWNrZ3JvdW5kLWNvbG9yIGluIGVmZmVjdAotICAgIFJl
ZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBtdXRhYmxlU3R5bGUgPSBnZXRQcm9wZXJ0aWVz
Tm90SW4oKnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKTsKKyAgICBSZWZQdHI8TXV0YWJs
ZVN0eWxlUHJvcGVydGllcz4gbXV0YWJsZVN0eWxlID0gc3R5bGUtPnN0eWxlKCkgPworICAgICAg
ICBnZXRQcm9wZXJ0aWVzTm90SW4oKnN0eWxlLT5zdHlsZSgpLCBjb21wdXRlZFN0eWxlKSA6IE11
dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogCiAgICAgcmVjb25jaWxlVGV4dERlY29y
YXRpb25Qcm9wZXJ0aWVzKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0gICAgaWYgKCFkb2N1bWVudC0+
ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRoQ1NTKCkpCisgICAgYm9vbCBzaG91bGRT
dHlsZVdpdGhDU1MgPSBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkuc2hvdWxkU3R5bGVXaXRo
Q1NTKCk7CisgICAgaWYgKCFzaG91bGRTdHlsZVdpdGhDU1MpCiAgICAgICAgIGV4dHJhY3RUZXh0
U3R5bGVzKGRvY3VtZW50LCAqbXV0YWJsZVN0eWxlLCBjb21wdXRlZFN0eWxlLnVzZUZpeGVkRm9u
dERlZmF1bHRTaXplKCkpOwogCisgICAgYm9vbCBzaG91bGRBZGRVbmRlcmxpbmUgPSBzdHlsZS0+
dW5kZXJsaW5lQ2hhbmdlKCkgPT0gVGV4dERlY29yYXRpb25DaGFuZ2U6OkFkZDsKKyAgICBib29s
IHNob3VsZEFkZFN0cmlrZVRocm91Z2ggPSBzdHlsZS0+c3RyaWtlVGhyb3VnaENoYW5nZSgpID09
IFRleHREZWNvcmF0aW9uQ2hhbmdlOjpBZGQ7CisgICAgaWYgKHNob3VsZEFkZFVuZGVybGluZSB8
fCBzaG91bGRBZGRTdHJpa2VUaHJvdWdoKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWUgPSBjb21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVj
b3JhdGlvbnNJbkVmZmVjdCk7CisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZS5n
ZXQoKSkpCisgICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkU3R5bGUucHJvcGVydHlWYWx1ZShD
U1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKKworICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiB2YWx1ZUxpc3Q7CisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlLmdldCgpKSkK
KyAgICAgICAgICAgIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUuZ2V0
KCkpOworCisgICAgICAgIFJlZjxDU1NWYWx1ZT4gdW5kZXJsaW5lID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5kZXJsaW5lKTsKKyAgICAgICAgYm9vbCBo
YXNVbmRlcmxpbmUgPSB2YWx1ZUxpc3QgJiYgdmFsdWVMaXN0LT5oYXNWYWx1ZSh1bmRlcmxpbmUu
cHRyKCkpOworCisgICAgICAgIFJlZjxDU1NWYWx1ZT4gbGluZVRocm91Z2ggPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCk7CisgICAgICAg
IGJvb2wgaGFzTGluZVRocm91Z2ggPSB2YWx1ZUxpc3QgJiYgdmFsdWVMaXN0LT5oYXNWYWx1ZShs
aW5lVGhyb3VnaC5wdHIoKSk7CisKKyAgICAgICAgaWYgKHNob3VsZFN0eWxlV2l0aENTUykgewor
ICAgICAgICAgICAgdmFsdWVMaXN0ID0gdmFsdWVMaXN0ID8gdmFsdWVMaXN0LT5jb3B5KCkgOiBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgICAgICAgICBpZiAoc2hv
dWxkQWRkVW5kZXJsaW5lICYmICFoYXNVbmRlcmxpbmUpCisgICAgICAgICAgICAgICAgdmFsdWVM
aXN0LT5hcHBlbmQoV1RGOjptb3ZlKHVuZGVybGluZSkpOworICAgICAgICAgICAgaWYgKHNob3Vs
ZEFkZFN0cmlrZVRocm91Z2ggJiYgIWhhc0xpbmVUaHJvdWdoKQorICAgICAgICAgICAgICAgIHZh
bHVlTGlzdC0+YXBwZW5kKFdURjo6bW92ZShsaW5lVGhyb3VnaCkpOworICAgICAgICAgICAgbXV0
YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCB2YWx1ZUxp
c3QuZ2V0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9hcHBseVVuZGVybGlu
ZSA9IHNob3VsZEFkZFVuZGVybGluZSAmJiAhaGFzVW5kZXJsaW5lOworICAgICAgICAgICAgbV9h
cHBseUxpbmVUaHJvdWdoID0gc2hvdWxkQWRkU3RyaWtlVGhyb3VnaCAmJiAhaGFzTGluZVRocm91
Z2g7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBDaGFuZ2luZyB0aGUgd2hpdGVzcGFjZSBz
dHlsZSBpbiBhIHRhYiBzcGFuIHdvdWxkIGNvbGxhcHNlIHRoZSB0YWIgaW50byBhIHNwYWNlLgog
ICAgIGlmIChpc1RhYlNwYW5UZXh0Tm9kZShwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSB8fCBp
c1RhYlNwYW5Ob2RlKChwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkpCiAgICAgICAgIG11dGFi
bGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXaGl0ZVNwYWNlKTsKQEAgLTE0MjMs
OCArMTYwMywyNSBAQCBTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzCiAg
ICAgaWYgKG11dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNv
ZGVCaWRpKSAmJiAhc3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlEaXJlY3Rpb24pKQogICAgICAgICBtdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5RGlyZWN0aW9uLCBzdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eURpcmVjdGlvbikpOwogCi0gICAgLy8gU2F2ZSB0aGUgcmVzdWx0IGZvciBsYXRlcgotICAgIG1f
Y3NzU3R5bGUgPSBtdXRhYmxlU3R5bGUtPmFzVGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOworICAg
IGlmICghbXV0YWJsZVN0eWxlLT5pc0VtcHR5KCkpCisgICAgICAgIG1fY3NzU3R5bGUgPSBtdXRh
YmxlU3R5bGU7Cit9CisKK2Jvb2wgU3R5bGVDaGFuZ2U6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVD
aGFuZ2UmIG90aGVyKQoreworICAgIGlmIChtX2FwcGx5Qm9sZCAhPSBvdGhlci5tX2FwcGx5Qm9s
ZAorICAgICAgICB8fCBtX2FwcGx5SXRhbGljICE9IG90aGVyLm1fYXBwbHlJdGFsaWMKKyAgICAg
ICAgfHwgbV9hcHBseVVuZGVybGluZSAhPSBvdGhlci5tX2FwcGx5VW5kZXJsaW5lCisgICAgICAg
IHx8IG1fYXBwbHlMaW5lVGhyb3VnaCAhPSBvdGhlci5tX2FwcGx5TGluZVRocm91Z2gKKyAgICAg
ICAgfHwgbV9hcHBseVN1YnNjcmlwdCAhPSBvdGhlci5tX2FwcGx5U3Vic2NyaXB0CisgICAgICAg
IHx8IG1fYXBwbHlTdXBlcnNjcmlwdCAhPSBvdGhlci5tX2FwcGx5U3VwZXJzY3JpcHQKKyAgICAg
ICAgfHwgbV9hcHBseUZvbnRDb2xvciAhPSBvdGhlci5tX2FwcGx5Rm9udENvbG9yCisgICAgICAg
IHx8IG1fYXBwbHlGb250RmFjZSAhPSBvdGhlci5tX2FwcGx5Rm9udEZhY2UKKyAgICAgICAgfHwg
bV9hcHBseUZvbnRTaXplICE9IG90aGVyLm1fYXBwbHlGb250U2l6ZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuICghbV9jc3NTdHlsZSAmJiAhb3RoZXIubV9jc3NTdHlsZSkK
KyAgICAgICAgfHwgKG1fY3NzU3R5bGUgJiYgb3RoZXIubV9jc3NTdHlsZSAmJiBtX2Nzc1N0eWxl
LT5hc1RleHQoKSA9PSBvdGhlci5tX2Nzc1N0eWxlLT5hc1RleHQoKSk7CiB9CiAKIHN0YXRpYyB2
b2lkIHNldFRleHREZWNvcmF0aW9uUHJvcGVydHkoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5
bGUsIGNvbnN0IENTU1ZhbHVlTGlzdCogbmV3VGV4dERlY29yYXRpb24sIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2
aXNpb24gMTgzNDk3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsMTAgQEAKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5
TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiV3JpdGluZ0RpcmVjdGlvbi5oIgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVHJpU3Rh
dGUuaD4KQEAgLTYxLDYgKzYzLDggQEAgY2xhc3MgU3R5bGVQcm9wZXJ0aWVzOwogY2xhc3MgU3R5
bGVkRWxlbWVudDsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKK2VudW0gY2xhc3MgVGV4dERl
Y29yYXRpb25DaGFuZ2UgeyBOb25lLCBBZGQsIFJlbW92ZSB9OworCiBjbGFzcyBFZGl0aW5nU3R5
bGUgOiBwdWJsaWMgUmVmQ291bnRlZDxFZGl0aW5nU3R5bGU+IHsKIHB1YmxpYzoKIApAQCAtOTUs
NiArOTksMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFZGl0aW5n
U3R5bGUocHJvcGVydHlJRCwgdmFsdWUpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVmPEVkaXRp
bmdTdHlsZT4gY3JlYXRlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWVJRCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVkaXRpbmdTdHlsZShwcm9w
ZXJ0eUlELCB2YWx1ZSkpOworICAgIH0KKwogICAgIFdFQkNPUkVfRVhQT1JUIH5FZGl0aW5nU3R5
bGUoKTsKIAogICAgIE11dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlKCkgeyByZXR1cm4gbV9t
dXRhYmxlU3R5bGUuZ2V0KCk7IH0KQEAgLTEwMiw2ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPE11dGFibGVT
dHlsZVByb3BlcnRpZXM+KTsKICAgICB2b2lkIG92ZXJyaWRlV2l0aFN0eWxlKGNvbnN0IFN0eWxl
UHJvcGVydGllcyopOworICAgIHZvaWQgb3ZlcnJpZGVUeXBpbmdTdHlsZUF0KGNvbnN0IEVkaXRp
bmdTdHlsZSYsIGNvbnN0IFBvc2l0aW9uJik7CiAgICAgdm9pZCBjbGVhcigpOwogICAgIFBhc3NS
ZWZQdHI8RWRpdGluZ1N0eWxlPiBjb3B5KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxFZGl0aW5n
U3R5bGU+IGV4dHJhY3RBbmRSZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKQEAgLTExNSw5ICsxMjUs
MTAgQEAgcHVibGljOgogICAgIFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHlsZShFZGl0aW5nU3R5bGUq
KSBjb25zdDsKICAgICBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpIGNvbnN0OwogICAgIGJvb2wgY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0IHsgcmV0dXJuIGNvbmZsaWN0c1dpdGhJbmxp
bmVTdHlsZU9mRWxlbWVudChlbGVtZW50LCAwLCAwKTsgfQotICAgIGJvb2wgY29uZmxpY3RzV2l0
aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIEVkaXRpbmdTdHls
ZSogZXh0cmFjdGVkU3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiYgY29uZmxpY3RpbmdQcm9w
ZXJ0aWVzKSBjb25zdAorICAgIGJvb2wgY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiYg
bmV3SW5saW5lU3R5bGUsCisgICAgICAgIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVt
ZW50KGVsZW1lbnQsIGV4dHJhY3RlZFN0eWxlLCAmY29uZmxpY3RpbmdQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgcmV0dXJuIGNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChlbGVtZW50LCAm
bmV3SW5saW5lU3R5bGUsIGV4dHJhY3RlZFN0eWxlKTsKICAgICB9CiAgICAgYm9vbCBjb25mbGlj
dHNXaXRoSW1wbGljaXRTdHlsZU9mRWxlbWVudChIVE1MRWxlbWVudCosIEVkaXRpbmdTdHlsZSog
ZXh0cmFjdGVkU3R5bGUgPSAwLCBTaG91bGRFeHRyYWN0TWF0Y2hpbmdTdHlsZSA9IERvTm90RXh0
cmFjdE1hdGNoaW5nU3R5bGUpIGNvbnN0OwogICAgIGJvb2wgY29uZmxpY3RzV2l0aEltcGxpY2l0
U3R5bGVPZkF0dHJpYnV0ZXMoSFRNTEVsZW1lbnQqKSBjb25zdDsKQEAgLTE0NCw2ICsxNTUsMTEg
QEAgcHVibGljOgogICAgIGZsb2F0IGZvbnRTaXplRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX2Zv
bnRTaXplRGVsdGE7IH0KICAgICBib29sIGhhc0ZvbnRTaXplRGVsdGEoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnRTaXplRGVsdGEgIT0gTm9Gb250RGVsdGE7IH0KICAgICBib29sIHNob3VsZFVzZUZp
eGVkRGVmYXVsdEZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRVc2VGaXhlZERlZmF1
bHRGb250U2l6ZTsgfQorICAgIAorICAgIHZvaWQgc2V0VW5kZXJsaW5lQ2hhbmdlKFRleHREZWNv
cmF0aW9uQ2hhbmdlIGNoYW5nZSkgeyBtX3VuZGVybGluZUNoYW5nZSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjaGFuZ2UpOyB9CisgICAgVGV4dERlY29yYXRpb25DaGFuZ2UgdW5kZXJsaW5lQ2hh
bmdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dERlY29yYXRpb25DaGFuZ2U+KG1f
dW5kZXJsaW5lQ2hhbmdlKTsgfQorICAgIHZvaWQgc2V0U3RyaWtlVGhyb3VnaENoYW5nZShUZXh0
RGVjb3JhdGlvbkNoYW5nZSBjaGFuZ2UpIHsgbV9zdHJpa2VUaHJvdWdoQ2hhbmdlID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNoYW5nZSk7IH0KKyAgICBUZXh0RGVjb3JhdGlvbkNoYW5nZSBzdHJp
a2VUaHJvdWdoQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dERlY29yYXRp
b25DaGFuZ2U+KG1fc3RyaWtlVGhyb3VnaENoYW5nZSk7IH0KIAogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEVkaXRpbmdTdHlsZT4gc3R5bGVBdFNlbGVjdGlvblN0YXJ0KGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mLCBib29sIHNob3VsZFVzZUJhY2tncm91bmRDb2xvckluRWZmZWN0ID0gZmFsc2UpOwog
ICAgIHN0YXRpYyBXcml0aW5nRGlyZWN0aW9uIHRleHREaXJlY3Rpb25Gb3JTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYsIEVkaXRpbmdTdHlsZSogdHlwaW5nU3R5bGUsIGJvb2wmIGhh
c05lc3RlZE9yTXVsdGlwbGVFbWJlZGRpbmdzKTsKQEAgLTE1MywzNyArMTY5LDMzIEBAIHByaXZh
dGU6CiAgICAgRWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJiwgUHJvcGVydGllc1RvSW5jbHVk
ZSk7CiAgICAgZXhwbGljaXQgRWRpdGluZ1N0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyopOwog
ICAgIEVkaXRpbmdTdHlsZShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAg
ICBFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWVJRCk7CiAgICAgdm9pZCBpbml0
KE5vZGUqLCBQcm9wZXJ0aWVzVG9JbmNsdWRlKTsKICAgICB2b2lkIHJlbW92ZVRleHRGaWxsQW5k
U3Ryb2tlQ29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHNldFByb3BlcnR5
KENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFs
c2UpOwogICAgIHZvaWQgZXh0cmFjdEZvbnRTaXplRGVsdGEoKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoVCYgc3R5bGVUb0NvbXBhcmUsIFNob3Vs
ZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3Q7Ci0gICAgYm9vbCBjb25mbGljdHNXaXRo
SW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCosIEVkaXRpbmdTdHlsZSogZXh0cmFj
dGVkU3R5bGUsIFZlY3RvcjxDU1NQcm9wZXJ0eUlEPiogY29uZmxpY3RpbmdQcm9wZXJ0aWVzKSBj
b25zdDsKKyAgICBib29sIGNvbmZsaWN0c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChTdHlsZWRF
bGVtZW50KiwgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+KiBuZXdJbmxpbmVTdHlsZSwg
RWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSkgY29uc3Q7CiAgICAgdm9pZCBtZXJnZUlubGlu
ZUFuZEltcGxpY2l0U3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCosIENTU1Byb3BlcnR5T3Zl
cnJpZGVNb2RlLCBQcm9wZXJ0aWVzVG9JbmNsdWRlKTsKICAgICB2b2lkIG1lcmdlU3R5bGUoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzKiwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUpOwogCiAgICAgUmVm
UHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IG1fbXV0YWJsZVN0eWxlOwotICAgIGJvb2wgbV9z
aG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZTsKLSAgICBmbG9hdCBtX2ZvbnRTaXplRGVsdGE7
CisgICAgdW5zaWduZWQgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSA6IDE7CisgICAg
dW5zaWduZWQgbV91bmRlcmxpbmVDaGFuZ2UgOiAyOworICAgIHVuc2lnbmVkIG1fc3RyaWtlVGhy
b3VnaENoYW5nZSA6IDI7CisgICAgZmxvYXQgbV9mb250U2l6ZURlbHRhID0gTm9Gb250RGVsdGE7
CiAKICAgICBmcmllbmQgY2xhc3MgSFRNTEVsZW1lbnRFcXVpdmFsZW50OwogICAgIGZyaWVuZCBj
bGFzcyBIVE1MQXR0cmlidXRlRXF1aXZhbGVudDsKKyAgICBmcmllbmQgY2xhc3MgSFRNTFRleHRE
ZWNvcmF0aW9uRXF1aXZhbGVudDsKIH07CiAKIGNsYXNzIFN0eWxlQ2hhbmdlIHsKIHB1YmxpYzoK
LSAgICBTdHlsZUNoYW5nZSgpCi0gICAgICAgIDogbV9hcHBseUJvbGQoZmFsc2UpCi0gICAgICAg
ICwgbV9hcHBseUl0YWxpYyhmYWxzZSkKLSAgICAgICAgLCBtX2FwcGx5VW5kZXJsaW5lKGZhbHNl
KQotICAgICAgICAsIG1fYXBwbHlMaW5lVGhyb3VnaChmYWxzZSkKLSAgICAgICAgLCBtX2FwcGx5
U3Vic2NyaXB0KGZhbHNlKQotICAgICAgICAsIG1fYXBwbHlTdXBlcnNjcmlwdChmYWxzZSkKLSAg
ICB7IH0KLQorICAgIFN0eWxlQ2hhbmdlKCkgeyB9CiAgICAgU3R5bGVDaGFuZ2UoRWRpdGluZ1N0
eWxlKiwgY29uc3QgUG9zaXRpb24mKTsKIAotICAgIFN0cmluZyBjc3NTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3NzU3R5bGU7IH0KKyAgICBjb25zdCBTdHlsZVByb3BlcnRpZXMqIGNzc1N0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9jc3NTdHlsZS5nZXQoKTsgfQogICAgIGJvb2wgYXBwbHlCb2xk
KCkgY29uc3QgeyByZXR1cm4gbV9hcHBseUJvbGQ7IH0KICAgICBib29sIGFwcGx5SXRhbGljKCkg
Y29uc3QgeyByZXR1cm4gbV9hcHBseUl0YWxpYzsgfQogICAgIGJvb2wgYXBwbHlVbmRlcmxpbmUo
KSBjb25zdCB7IHJldHVybiBtX2FwcGx5VW5kZXJsaW5lOyB9CkBAIC0xOTgsMTkgKzIxMCw3IEBA
IHB1YmxpYzoKICAgICBTdHJpbmcgZm9udEZhY2UoKSB7IHJldHVybiBtX2FwcGx5Rm9udEZhY2U7
IH0KICAgICBTdHJpbmcgZm9udFNpemUoKSB7IHJldHVybiBtX2FwcGx5Rm9udFNpemU7IH0KIAot
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUNoYW5nZSYgb3RoZXIpCi0gICAgewotICAg
ICAgICByZXR1cm4gbV9jc3NTdHlsZSA9PSBvdGhlci5tX2Nzc1N0eWxlCi0gICAgICAgICAgICAm
JiBtX2FwcGx5Qm9sZCA9PSBvdGhlci5tX2FwcGx5Qm9sZAotICAgICAgICAgICAgJiYgbV9hcHBs
eUl0YWxpYyA9PSBvdGhlci5tX2FwcGx5SXRhbGljCi0gICAgICAgICAgICAmJiBtX2FwcGx5VW5k
ZXJsaW5lID09IG90aGVyLm1fYXBwbHlVbmRlcmxpbmUKLSAgICAgICAgICAgICYmIG1fYXBwbHlM
aW5lVGhyb3VnaCA9PSBvdGhlci5tX2FwcGx5TGluZVRocm91Z2gKLSAgICAgICAgICAgICYmIG1f
YXBwbHlTdWJzY3JpcHQgPT0gb3RoZXIubV9hcHBseVN1YnNjcmlwdAotICAgICAgICAgICAgJiYg
bV9hcHBseVN1cGVyc2NyaXB0ID09IG90aGVyLm1fYXBwbHlTdXBlcnNjcmlwdAotICAgICAgICAg
ICAgJiYgbV9hcHBseUZvbnRDb2xvciA9PSBvdGhlci5tX2FwcGx5Rm9udENvbG9yCi0gICAgICAg
ICAgICAmJiBtX2FwcGx5Rm9udEZhY2UgPT0gb3RoZXIubV9hcHBseUZvbnRGYWNlCi0gICAgICAg
ICAgICAmJiBtX2FwcGx5Rm9udFNpemUgPT0gb3RoZXIubV9hcHBseUZvbnRTaXplOwotICAgIH0K
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVDaGFuZ2UmKTsKICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgU3R5bGVDaGFuZ2UmIG90aGVyKQogICAgIHsKICAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOwpAQCAtMjE4LDEzICsyMTgsMTMgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICB2b2lkIGV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiwgTXV0YWJsZVN0eWxlUHJvcGVy
dGllcyYsIGJvb2wgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpOwogCi0gICAgU3RyaW5n
IG1fY3NzU3R5bGU7Ci0gICAgYm9vbCBtX2FwcGx5Qm9sZDsKLSAgICBib29sIG1fYXBwbHlJdGFs
aWM7Ci0gICAgYm9vbCBtX2FwcGx5VW5kZXJsaW5lOwotICAgIGJvb2wgbV9hcHBseUxpbmVUaHJv
dWdoOwotICAgIGJvb2wgbV9hcHBseVN1YnNjcmlwdDsKLSAgICBib29sIG1fYXBwbHlTdXBlcnNj
cmlwdDsKKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gbV9jc3NTdHlsZTsKKyAg
ICBib29sIG1fYXBwbHlCb2xkID0gZmFsc2U7CisgICAgYm9vbCBtX2FwcGx5SXRhbGljID0gZmFs
c2U7CisgICAgYm9vbCBtX2FwcGx5VW5kZXJsaW5lID0gZmFsc2U7CisgICAgYm9vbCBtX2FwcGx5
TGluZVRocm91Z2ggPSBmYWxzZTsKKyAgICBib29sIG1fYXBwbHlTdWJzY3JpcHQgPSBmYWxzZTsK
KyAgICBib29sIG1fYXBwbHlTdXBlcnNjcmlwdCA9IGZhbHNlOwogICAgIFN0cmluZyBtX2FwcGx5
Rm9udENvbG9yOwogICAgIFN0cmluZyBtX2FwcGx5Rm9udEZhY2U7CiAgICAgU3RyaW5nIG1fYXBw
bHlGb250U2l6ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDE4
MzQ5NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODg3LDcgKzg4Nyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlKFN0eWxlUHJvcGVy
dGllcyoKICAgICAgICAgLy8gZG8gbm90aGluZwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZp
c2libGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uOgotICAgICAgICBjb21wdXRlQW5kU2V0VHlw
aW5nU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOworICAgICAgICBjb21wdXRlQW5kU2V0VHlw
aW5nU3R5bGUoRWRpdGluZ1N0eWxlOjpjcmVhdGUoc3R5bGUpLCBlZGl0aW5nQWN0aW9uKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoK
ICAgICAgICAgaWYgKHN0eWxlKQpAQCAtODk1LDYgKzg5NSwyMiBAQCB2b2lkIEVkaXRvcjo6YXBw
bHlTdHlsZShTdHlsZVByb3BlcnRpZXMqCiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KKwordm9p
ZCBFZGl0b3I6OmFwcGx5U3R5bGUoUmVmUHRyPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKQoreworICAgIHN3aXRjaCAobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkpIHsKKyAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246
Ok5vU2VsZWN0aW9uOgorICAgICAgICAvLyBkbyBub3RoaW5nCisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246CisgICAgICAgIGNvbXB1dGVB
bmRTZXRUeXBpbmdTdHlsZSgqc3R5bGUsIGVkaXRpbmdBY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgorICAgICAgICBpZiAo
c3R5bGUpCisgICAgICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCgpLCBzdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbikpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CiAgICAgCiBib29sIEVkaXRvcjo6c2hvdWxkQXBwbHlTdHlsZShTdHlsZVBy
b3BlcnRpZXMqIHN0eWxlLCBSYW5nZSogcmFuZ2UpCiB7ICAgCkBAIC05MjAsOCArOTM2LDIxIEBA
IHZvaWQgRWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oU3R5bGUKICAgICBpZiAoIXN0eWxl
IHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQotICAgICAg
ICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKKyAgICBpZiAoIWNsaWVudCgpIHx8
ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFwcGx5U3R5
bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOworfQorCit2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRv
U2VsZWN0aW9uKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGlu
Z0FjdGlvbikKK3sKKyAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVk
aXRSaWNobHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jv
bmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHkuCisg
ICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0
eWxlKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGFwcGx5U3R5bGUoV1RGOjptb3ZlKHN0eWxlKSwgZWRpdGlu
Z0FjdGlvbik7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rp
b24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAt
Mjk1MiwyMiArMjk4MSwyMCBAQCBib29sIEVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNv
bnN0CiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBuZXdTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsK
IH0KIAotdm9pZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdHlsZVByb3BlcnRp
ZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCit2b2lkIEVkaXRvcjo6Y29tcHV0
ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGlu
Z0FjdGlvbikKIHsKLSAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkpIHsKKyAgICBp
ZiAoc3R5bGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuY2xlYXJU
eXBpbmdTdHlsZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ2FsY3VsYXRl
IHRoZSBjdXJyZW50IHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBp
bmdTdHlsZTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpKSB7Ci0g
ICAgICAgIHR5cGluZ1N0eWxlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50eXBpbmdTdHlsZSgpLT5j
b3B5KCk7Ci0gICAgICAgIHR5cGluZ1N0eWxlLT5vdmVycmlkZVdpdGhTdHlsZShzdHlsZSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHR5cGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoc3R5
bGUpOwotCi0gICAgdHlwaW5nU3R5bGUtPnByZXBhcmVUb0FwcGx5QXQobV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLCBFZGl0aW5n
U3R5bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbik7CisgICAgaWYgKGF1dG8gZXhpc3RpbmdU
eXBpbmdTdHlsZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKSkKKyAgICAgICAg
dHlwaW5nU3R5bGUgPSBleGlzdGluZ1R5cGluZ1N0eWxlLT5jb3B5KCk7CisgICAgZWxzZQorICAg
ICAgICB0eXBpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CisgICAgdHlwaW5nU3R5
bGUtPm92ZXJyaWRlVHlwaW5nU3R5bGVBdChzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKIAogICAgIC8vIEhhbmRs
ZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0aGVzZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUu
CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gYmxvY2tTdHlsZSA9IHR5cGluZ1N0eWxlLT5leHRy
YWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CkBAIC0yOTc4LDYgKzMwMDUsMTEgQEAgdm9p
ZCBFZGl0b3I6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShTdAogICAgIG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2V0VHlwaW5nU3R5bGUodHlwaW5nU3R5bGUpOwogfQogCit2b2lkIEVkaXRvcjo6Y29t
cHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcywgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKQoreworICAgIHJldHVybiBjb21wdXRlQW5kU2V0VHlwaW5nU3R5
bGUoRWRpdGluZ1N0eWxlOjpjcmVhdGUoJnByb3BlcnRpZXMpLCBlZGl0aW5nQWN0aW9uKTsKK30K
Kwogdm9pZCBFZGl0b3I6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlKQogewog
ICAgIGlmIChjbGllbnQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24g
MTgzNDk3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMTgzLDggKzE4MywxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaXNwYXRjaENQUEV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYsIERhdGFUcmFuc2ZlckFjY2Vzc1BvbGljeSk7CiAgICAgCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0eWxlKFN0eWxlUHJvcGVydGllcyosIEVkaXRB
Y3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOworICAgIHZvaWQgYXBwbHlTdHlsZShSZWZQ
dHI8RWRpdGluZ1N0eWxlPiYmLCBFZGl0QWN0aW9uKTsKICAgICB2b2lkIGFwcGx5UGFyYWdyYXBo
U3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25VbnNwZWNpZmll
ZCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQ
cm9wZXJ0aWVzKiwgRWRpdEFjdGlvbik7CisgICAgdm9pZCBhcHBseVN0eWxlVG9TZWxlY3Rpb24o
UmVmUHRyPEVkaXRpbmdTdHlsZT4mJiwgRWRpdEFjdGlvbik7CiAgICAgdm9pZCBhcHBseVBhcmFn
cmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiwgRWRpdEFjdGlvbik7CiAKICAg
ICB2b2lkIGFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+KTsK
QEAgLTM2MSw3ICszNjMsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bWFyaygpIGNvbnN0OyAvLyBNYXJrLCB0byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCiAgICAg
dm9pZCBzZXRNYXJrKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKFN0eWxlUHJvcGVydGllcyogLCBFZGl0
QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKKyAgICB2b2lkIGNvbXB1dGVBbmRTZXRU
eXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmICwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25VbnNwZWNp
ZmllZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUo
U3R5bGVQcm9wZXJ0aWVzJiAsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkg
Y29uc3Q7CiAgICAgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVtZW50KikgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2
aXNpb24gMTgzNDk3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTgsNzcgKzk4LDQ2IEBAIHN0YXRpYyBGcmFtZSogdGFyZ2V0
RnJhbWUoRnJhbWUmIGZyYW1lLCAKICAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgp
OwogfQogCi1zdGF0aWMgYm9vbCBhcHBseUNvbW1hbmRUb0ZyYW1lKEZyYW1lJiBmcmFtZSwgRWRp
dG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBTdHlsZVByb3BlcnRp
ZXMqIHN0eWxlKQorc3RhdGljIGJvb2wgYXBwbHlDb21tYW5kVG9GcmFtZShGcmFtZSYgZnJhbWUs
IEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgUmVmUHRyPEVk
aXRpbmdTdHlsZT4mJiBzdHlsZSkKIHsKICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY2FsbCBzaG91
bGRBcHBseVN0eWxlIHdoZW4gdGhlIHNvdXJjZSBpcyBET007IGlzIHRoZXJlIGEgZ29vZCByZWFz
b24gZm9yIHRoYXQ/CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKICAgICBjYXNlIENvbW1hbmRGcm9t
TWVudU9yS2V5QmluZGluZzoKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYXBwbHlTdHlsZVRvU2Vs
ZWN0aW9uKHN0eWxlLCBhY3Rpb24pOworICAgICAgICBmcmFtZS5lZGl0b3IoKS5hcHBseVN0eWxl
VG9TZWxlY3Rpb24oV1RGOjptb3ZlKHN0eWxlKSwgYWN0aW9uKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgY2FzZSBDb21tYW5kRnJvbURPTToKICAgICBjYXNlIENvbW1hbmRGcm9tRE9NV2l0
aFVzZXJJbnRlcmZhY2U6Ci0gICAgICAgIGZyYW1lLmVkaXRvcigpLmFwcGx5U3R5bGUoc3R5bGUp
OworICAgICAgICBmcmFtZS5lZGl0b3IoKS5hcHBseVN0eWxlKFdURjo6bW92ZShzdHlsZSksIEVk
aXRBY3Rpb25VbnNwZWNpZmllZCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29s
IGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lJiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3Vy
Y2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgcHJvcGVydHlWYWx1ZSkKK3N0YXRpYyBib29sIGlzU3R5bGVQcmVzZW50KEVkaXRvciYg
ZWRpdG9yLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IGNoYXIqIG9uVmFsdWUpCiB7
Ci0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlID0gTXV0YWJsZVN0eWxl
UHJvcGVydGllczo6Y3JlYXRlKCk7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQs
IHByb3BlcnR5VmFsdWUpOwotICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBz
b3VyY2UsIGFjdGlvbiwgc3R5bGUuZ2V0KCkpOworICAgIC8vIFN0eWxlIGlzIGNvbnNpZGVyZWQg
cHJlc2VudCB3aGVuCisgICAgLy8gTWFjOiBwcmVzZW50IGF0IHRoZSBiZWdpbm5pbmcgb2Ygc2Vs
ZWN0aW9uCisgICAgLy8gV2luZG93czogcHJlc2VudCB0aHJvdWdob3V0IHRoZSBzZWxlY3Rpb24K
KyAgICBpZiAoZWRpdG9yLmJlaGF2aW9yKCkuc2hvdWxkVG9nZ2xlU3R5bGVCYXNlZE9uU3RhcnRP
ZlNlbGVjdGlvbigpKQorICAgICAgICByZXR1cm4gZWRpdG9yLnNlbGVjdGlvblN0YXJ0SGFzU3R5
bGUocHJvcGVydHlJRCwgb25WYWx1ZSk7CisgICAgcmV0dXJuIGVkaXRvci5zZWxlY3Rpb25IYXNT
dHlsZShwcm9wZXJ0eUlELCBvblZhbHVlKSA9PSBUcnVlVHJpU3RhdGU7CiB9CiAKLXN0YXRpYyBi
b29sIGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lJiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBz
b3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1Zh
bHVlSUQgcHJvcGVydHlWYWx1ZSkKK3N0YXRpYyBib29sIGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1l
JiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlWYWx1ZSkKIHsK
LSAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGUgPSBNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzOjpjcmVhdGUoKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwg
cHJvcGVydHlWYWx1ZSk7Ci0gICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJhbWUoZnJhbWUsIHNv
dXJjZSwgYWN0aW9uLCBzdHlsZS5nZXQoKSk7CisgICAgcmV0dXJuIGFwcGx5Q29tbWFuZFRvRnJh
bWUoZnJhbWUsIHNvdXJjZSwgYWN0aW9uLCBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwcm9wZXJ0eUlE
LCBwcm9wZXJ0eVZhbHVlKSk7CiB9CiAKLS8vIEZJWE1FOiBleGVjdXRlVG9nZ2xlU3R5bGVJbkxp
c3QgZG9lcyBub3QgaGFuZGxlIGNvbXBsaWNhdGVkIGNhc2VzIHN1Y2ggYXMgPGI+PHU+aGVsbG88
L3U+d29ybGQ8L2I+IHByb3Blcmx5LgotLy8gICAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCB1c2Ug
RWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZSB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3R5bGUg
YnV0IHdlIGNhbm5vdCBmaXggdGhpcwotLy8gICAgICAgIHVudGlsIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzgxOCBpcyByZXNvbHZlZC4KLXN0YXRpYyBib29sIGV4
ZWN1dGVUb2dnbGVTdHlsZUluTGlzdChGcmFtZSYgZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ug
c291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBDU1NW
YWx1ZSogdmFsdWUpCitzdGF0aWMgYm9vbCBleGVjdXRlQXBwbHlTdHlsZShGcmFtZSYgZnJhbWUs
IEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBDU1NWYWx1ZUlEIHByb3BlcnR5VmFsdWUpCiB7Ci0gICAgUmVmUHRy
PEVkaXRpbmdTdHlsZT4gc2VsZWN0aW9uU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxl
Y3Rpb25TdGFydChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAgaWYgKCFzZWxl
Y3Rpb25TdHlsZSB8fCAhc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gc2VsZWN0ZWRDU1NWYWx1ZSA9IHNlbGVjdGlv
blN0eWxlLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwotICAgIFN0
cmluZyBuZXdTdHlsZSA9IEFTQ0lJTGl0ZXJhbCgibm9uZSIpOwotICAgIGlmIChpczxDU1NWYWx1
ZUxpc3Q+KCpzZWxlY3RlZENTU1ZhbHVlKSkgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBzZWxlY3RlZENTU1ZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oc2VsZWN0ZWRD
U1NWYWx1ZS5nZXQoKSk7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPnJlbW92
ZUFsbCh2YWx1ZSkpCi0gICAgICAgICAgICBzZWxlY3RlZENTU1ZhbHVlTGlzdC0+YXBwZW5kKCp2
YWx1ZSk7Ci0gICAgICAgIGlmIChzZWxlY3RlZENTU1ZhbHVlTGlzdC0+bGVuZ3RoKCkpCi0gICAg
ICAgICAgICBuZXdTdHlsZSA9IHNlbGVjdGVkQ1NTVmFsdWVMaXN0LT5jc3NUZXh0KCk7Ci0KLSAg
ICB9IGVsc2UgaWYgKHNlbGVjdGVkQ1NTVmFsdWUtPmNzc1RleHQoKSA9PSAibm9uZSIpCi0gICAg
ICAgIG5ld1N0eWxlID0gdmFsdWUtPmNzc1RleHQoKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgYmUgaGF2aW5nIHRvIGNvbnZlcnQgbmV3IHN0eWxlIGludG8gdGV4dC4gIFdlIHNob3Vs
ZCBoYXZlIHNldFByb3BlcnR5Q1NTVmFsdWUuCi0gICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3Bl
cnRpZXM+IG5ld011dGFibGVTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgp
OwotICAgIG5ld011dGFibGVTdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgbmV3U3R5bGUp
OwotICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0ZyYW1lKGZyYW1lLCBzb3VyY2UsIGFjdGlvbiwg
bmV3TXV0YWJsZVN0eWxlLmdldCgpKTsKKyAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShm
cmFtZSwgc291cmNlLCBhY3Rpb24sIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHByb3BlcnR5SUQsIHBy
b3BlcnR5VmFsdWUpKTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZVRvZ2dsZVN0eWxlKEZyYW1l
JiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IGNoYXIqIG9mZlZhbHVlLCBjb25zdCBjaGFy
KiBvblZhbHVlKQogewotICAgIC8vIFN0eWxlIGlzIGNvbnNpZGVyZWQgcHJlc2VudCB3aGVuCi0g
ICAgLy8gTWFjOiBwcmVzZW50IGF0IHRoZSBiZWdpbm5pbmcgb2Ygc2VsZWN0aW9uCi0gICAgLy8g
b3RoZXI6IHByZXNlbnQgdGhyb3VnaG91dCB0aGUgc2VsZWN0aW9uCi0KLSAgICBib29sIHN0eWxl
SXNQcmVzZW50OwotICAgIGlmIChmcmFtZS5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZFRvZ2ds
ZVN0eWxlQmFzZWRPblN0YXJ0T2ZTZWxlY3Rpb24oKSkKLSAgICAgICAgc3R5bGVJc1ByZXNlbnQg
PSBmcmFtZS5lZGl0b3IoKS5zZWxlY3Rpb25TdGFydEhhc1N0eWxlKHByb3BlcnR5SUQsIG9uVmFs
dWUpOwotICAgIGVsc2UKLSAgICAgICAgc3R5bGVJc1ByZXNlbnQgPSBmcmFtZS5lZGl0b3IoKS5z
ZWxlY3Rpb25IYXNTdHlsZShwcm9wZXJ0eUlELCBvblZhbHVlKSA9PSBUcnVlVHJpU3RhdGU7Ci0K
LSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHBy
b3BlcnR5SUQsIHN0eWxlSXNQcmVzZW50ID8gb2ZmVmFsdWUgOiBvblZhbHVlKTsKLSAgICByZXR1
cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBhY3Rpb24sIHN0eWxlLT5zdHls
ZSgpKTsKKyAgICBib29sIHN0eWxlSXNQcmVzZW50ID0gaXNTdHlsZVByZXNlbnQoZnJhbWUuZWRp
dG9yKCksIHByb3BlcnR5SUQsIG9uVmFsdWUpOworICAgIHJldHVybiBhcHBseUNvbW1hbmRUb0Zy
YW1lKGZyYW1lLCBzb3VyY2UsIGFjdGlvbiwgRWRpdGluZ1N0eWxlOjpjcmVhdGUocHJvcGVydHlJ
RCwgc3R5bGVJc1ByZXNlbnQgPyBvZmZWYWx1ZSA6IG9uVmFsdWUpKTsKIH0KIAogc3RhdGljIGJv
b2wgZXhlY3V0ZUFwcGx5UGFyYWdyYXBoU3R5bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5k
U291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVZhbHVlKQpAQCAtMTA1OCwxMCArMTAyNywxNyBAQCBz
dGF0aWMgYm9vbCBleGVjdXRlU2V0TWFyayhGcmFtZSYgZnJhbWUsCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK3N0YXRpYyBUZXh0RGVjb3JhdGlvbkNoYW5nZSB0ZXh0RGVjb3JhdGlvbkNoYW5nZUZv
clRvZ2dsaW5nKEVkaXRvciYgZWRpdG9yLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0
IGNoYXIqIG9uVmFsdWUpCit7CisgICAgcmV0dXJuIGlzU3R5bGVQcmVzZW50KGVkaXRvciwgcHJv
cGVydHlJRCwgb25WYWx1ZSkgPyBUZXh0RGVjb3JhdGlvbkNoYW5nZTo6UmVtb3ZlIDogVGV4dERl
Y29yYXRpb25DaGFuZ2U6OkFkZDsKK30KKwogc3RhdGljIGJvb2wgZXhlY3V0ZVN0cmlrZXRocm91
Z2goRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25z
dCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZVRocm91Z2gg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUxpbmVUaHJvdWdo
KTsKLSAgICByZXR1cm4gZXhlY3V0ZVRvZ2dsZVN0eWxlSW5MaXN0KGZyYW1lLCBzb3VyY2UsIEVk
aXRBY3Rpb25VbmRlcmxpbmUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZl
Y3QsIGxpbmVUaHJvdWdoLmdldCgpKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9
IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CisgICAgc3R5bGUtPnNldFN0cmlrZVRocm91Z2hDaGFu
Z2UodGV4dERlY29yYXRpb25DaGFuZ2VGb3JUb2dnbGluZyhmcmFtZS5lZGl0b3IoKSwgQ1NTUHJv
cGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgImxpbmUtdGhyb3VnaCIpKTsKKyAg
ICAvLyBGSVhNRTogTmVlZHMgYSBuZXcgRWRpdEFjdGlvbiEKKyAgICByZXR1cm4gYXBwbHlDb21t
YW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBFZGl0QWN0aW9uVW5kZXJsaW5lLCBXVEY6Om1vdmUo
c3R5bGUpKTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZVN0eWxlV2l0aENTUyhGcmFtZSYgZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAg
LTExMjUsOCArMTEwMSwxMCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlVHJhbnNwb3NlKEZyYW1lJiBm
cmFtCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVVbmRlcmxpbmUoRnJhbWUmIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gdW5kZXJsaW5lID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZUlkZW50aWZpZXIoQ1NTVmFsdWVVbmRlcmxpbmUpOwotICAgIHJldHVybiBleGVjdXRlVG9nZ2xl
U3R5bGVJbkxpc3QoZnJhbWUsIHNvdXJjZSwgRWRpdEFjdGlvblVuZGVybGluZSwgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgdW5kZXJsaW5lLmdldCgpKTsKKyAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CisgICAg
VGV4dERlY29yYXRpb25DaGFuZ2UgY2hhbmdlID0gdGV4dERlY29yYXRpb25DaGFuZ2VGb3JUb2dn
bGluZyhmcmFtZS5lZGl0b3IoKSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdCwgInVuZGVybGluZSIpOworICAgIHN0eWxlLT5zZXRVbmRlcmxpbmVDaGFuZ2UoY2hhbmdl
KTsKKyAgICByZXR1cm4gYXBwbHlDb21tYW5kVG9GcmFtZShmcmFtZSwgc291cmNlLCBFZGl0QWN0
aW9uVW5kZXJsaW5lLCBXVEY6Om1vdmUoc3R5bGUpKTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0
ZVVuZG8oRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODM2OTUpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAx
NS0wNS0wMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBUb2dn
bGluZyB1bmRlcmxpbmUgb3Igc3RyaWtlIHRocm91Z2ggYWZmZWN0cyBlYWNoIG90aGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzgxOAorCisgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFt
ZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3NldFR5cGluZ1N0eWxlOndpdGhVbmRvQWN0aW9u
Ol0pOgorCiAyMDE1LTA1LTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgQVBJIHRvIGRpc2FibGUgbWV0YSByZWZyZXNoZXMuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDE4MzQ5NykKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTk0MSw3ICs5
NDEsNyBAQCAtICh2b2lkKV9zZXRUeXBpbmdTdHlsZTooRE9NQ1NTU3R5bGVEZWNsCiAgICAgICAg
IHJldHVybjsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gY3JlYXRlIGEgY29w
eSBoZXJlLgogICAgIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKGNvcmUo
c3R5bGUpLT5jb3B5UHJvcGVydGllcygpKTsKLSAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0
b3IoKS5jb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUocHJvcGVydGllcy5wdHIoKSwgdW5kb0FjdGlv
bik7CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuY29tcHV0ZUFuZFNldFR5cGlu
Z1N0eWxlKHByb3BlcnRpZXMuZ2V0KCksIHVuZG9BY3Rpb24pOwogfQogCiAjaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzY5NSkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA1LTAxICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFRvZ2dsaW5nIHVuZGVybGlu
ZSBvciBzdHJpa2UgdGhyb3VnaCBhZmZlY3RzIGVhY2ggb3RoZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3ODE4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgYSByZWdyZXNzaW9uIHRlc3QgYW5kIHJl
YmFzZWxpbmVkIHZhcmlvdXMgdGVzdHMgYXMgZXhwbGFpbmVkIGJlbG93LgorCisgICAgICAgICog
ZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvdG9nZ2xlLXN0eWxlLTIuanM6IFRoZSBv
cmRlciBpbiB3aGljaCB1IGFuZCBzdHJpa2UgZWxlbWVudHMgYXBwZWFyIGhhdmUgc3dpdGNoZWQu
CisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvdG9nZ2xlLXRleHQt
ZGVjb3JhdGlvbnMuanM6IERpdHRvIGZvciBsaW5lLXRocm91Z2ggYW5kIG92ZXJsaW5lLgorICAg
ICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvdG9nZ2xlLW1peGVkLXRleHQtZGVjb3JhdGlvbnMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2ds
ZS1taXhlZC10ZXh0LWRlY29yYXRpb25zLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcv
ZXhlY0NvbW1hbmQvdG9nZ2xlLXN0eWxlLTItZXhwZWN0ZWQudHh0OiBSZWJhc2VsaW5lZC4KKyAg
ICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS10ZXh0LWRlY29yYXRpb25zLWV4cGVj
dGVkLnR4dDogUmViYXNlbGluZWQuCisgICAgICAgICogZWRpdGluZy91bmRvL3JlbW92ZS1jc3Mt
cHJvcGVydHktYW5kLXJlbW92ZS1zdHlsZS1leHBlY3RlZC50eHQ6IFRoZSBvcmRlciBpbiB3aGlj
aCBjb2xvciBhbmQgZm9udC13ZWlnaHQgcHJvcGVydGllcworICAgICAgICBhcHBlYXIgaGF2ZSBz
d2l0Y2hlZC4KKwogMjAxNS0wNS0wMSAgSm9yZGFuIEhhcmJhbmQgIDxsamhhcmJAZ21haWwuY29t
PgogCiAgICAgICAgIFN0cmluZyNzdGFydHNXaXRoL2VuZHNXaXRoL2luY2x1ZGVzIGRvbid0IGhh
bmRsZSBJbmZpbml0eSBwb3NpdGlvbi9lbmRQb3NpdGlvbiBhcmdzIGNvcnJlY3RseQpJbmRleDog
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90b2dnbGUtbWl4ZWQtdGV4dC1kZWNvcmF0
aW9ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC90b2dnbGUtbWl4ZWQtdGV4dC1kZWNvcmF0aW9ucy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS1taXhlZC10
ZXh0LWRlY29yYXRpb25zLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5
IEBACitUZXN0IHRvIG1ha2Ugc3VyZSB3ZSBjYW4gdG9nZ2xlIHVuZGVybGluZSBhbmQgc3RyaWtl
IHRocm91Z2ggc2VwYXJhdGVseS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2Rv
Y3VtZW50LmV4ZWNDb21tYW5kKCJzdHlsZVdpdGhDU1MiLCBmYWxzZSwgZmFsc2UpOworCitUb2dn
bGluZyBzdHJpa2VUaHJvdWdoCitQQVNTIGNvbnRlbnQoIjxzPjx1PmE8L3U+Yjwvcz4iKTsgc2Vs
ZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAiPHU+YTwvdT5iIgorUEFTUyBj
b250ZW50KCI8cz48dT5hPC91PmI8dT5jPC91Pjwvcz4iKTsgc2VsZWN0KDAsIDMpOyB0b2dnbGUo
InN0cmlrZVRocm91Z2giKSBpcyAiPHU+YTwvdT5iPHU+YzwvdT4iCitQQVNTIGNvbnRlbnQoIjxz
PmE8dT5iPC91PmM8L3M+Iik7IHNlbGVjdCgwLCAzKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIikg
aXMgImE8dT5iPC91PmMiCitQQVNTIGNvbnRlbnQoIjxzPmE8dT5iPC91PmM8L3M+Iik7IHNlbGVj
dCgxLCAzKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIikgaXMgIjxzdHJpa2U+YTwvc3RyaWtlPjx1
PmI8L3U+YyIKK1BBU1MgY29udGVudCgiPHM+YTx1PmI8L3U+Yzwvcz4iKTsgc2VsZWN0KDAsIDIp
OyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAiYTx1PmI8L3U+PHN0cmlrZT5jPC9zdHJpa2U+
IgorUEFTUyBjb250ZW50KCI8cz48dT5hYjwvdT48L3M+YyIpOyBzZWxlY3QoMSwgMyk7IHRvZ2ds
ZSgic3RyaWtlVGhyb3VnaCIpIGlzICI8dT48c3RyaWtlPmE8L3N0cmlrZT5iPC91PmMiCitQQVNT
IGNvbnRlbnQoIjxzPmE8dT5iPC91Pjwvcz5jIik7IHNlbGVjdCgxLCAzKTsgdG9nZ2xlKCJzdHJp
a2VUaHJvdWdoIikgaXMgIjxzdHJpa2U+YTwvc3RyaWtlPjx1PmI8L3U+YyIKK1BBU1MgY29udGVu
dCgiYTxzPjx1PmI8L3U+Yzwvcz4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRocm91
Z2giKSBpcyAiPHN0cmlrZT5hPC9zdHJpa2U+PHM+PHU+YjwvdT5jPC9zPiIKK1BBU1MgY29udGVu
dCgiYTxzdHJpa2U+PHU+YjwvdT5jPC9zdHJpa2U+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJz
dHJpa2VUaHJvdWdoIikgaXMgIjxzdHJpa2U+YTx1PmI8L3U+Yzwvc3RyaWtlPiIKK1BBU1MgY29u
dGVudCgiYTx1PjxzPmJjPC9zPjwvdT4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRo
cm91Z2giKSBpcyAiPHN0cmlrZT5hPC9zdHJpa2U+PHU+PHM+YmM8L3M+PC91PiIKK1BBU1MgY29u
dGVudCgiYTxzPjxiPjx1PmJjPC91PjwvYj48L3M+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJz
dHJpa2VUaHJvdWdoIikgaXMgIjxzdHJpa2U+YTwvc3RyaWtlPjxzPjxiPjx1PmJjPC91PjwvYj48
L3M+IgorUEFTUyBjb250ZW50KCJhPHN0cmlrZT48Yj48dT5iYzwvdT48L2I+PC9zdHJpa2U+Iik7
IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIikgaXMgIjxzdHJpa2U+YTxiPjx1
PmJjPC91PjwvYj48L3N0cmlrZT4iCisKK1RvZ2dsaW5nIHVuZGVybGluZQorUEFTUyBjb250ZW50
KCI8dT48cz5hPC9zPmI8L3U+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBp
cyAiPHM+YTwvcz5iIgorUEFTUyBjb250ZW50KCI8dT48cz5hPC9zPmI8cz5jPC9zPjwvdT4iKTsg
c2VsZWN0KDAsIDMpOyB0b2dnbGUoInVuZGVybGluZSIpIGlzICI8cz5hPC9zPmI8cz5jPC9zPiIK
K1BBU1MgY29udGVudCgiPHU+YTxzPmI8L3M+YzwvdT4iKTsgc2VsZWN0KDAsIDMpOyB0b2dnbGUo
InVuZGVybGluZSIpIGlzICJhPHM+Yjwvcz5jIgorUEFTUyBjb250ZW50KCI8dT5hPHM+Yjwvcz5j
PC91PiIpOyBzZWxlY3QoMSwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMgIjx1PmE8L3U+PHM+
Yjwvcz5jIgorUEFTUyBjb250ZW50KCI8dT5hPHM+Yjwvcz5jPC91PiIpOyBzZWxlY3QoMCwgMik7
IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMgImE8cz5iPC9zPjx1PmM8L3U+IgorUEFTUyBjb250ZW50
KCI8dT48cz5hYjwvcz48L3U+YyIpOyBzZWxlY3QoMSwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIikg
aXMgIjxzPjx1PmE8L3U+Yjwvcz5jIgorUEFTUyBjb250ZW50KCI8dT5hPHM+Yjwvcz48L3U+YyIp
OyBzZWxlY3QoMSwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMgIjx1PmE8L3U+PHM+Yjwvcz5j
IgorUEFTUyBjb250ZW50KCJhPHU+PHM+Yjwvcz5jPC91PiIpOyBzZWxlY3QoMCwgMik7IHRvZ2ds
ZSgidW5kZXJsaW5lIikgaXMgIjx1PmE8cz5iPC9zPmM8L3U+IgorUEFTUyBjb250ZW50KCJhPHM+
PHU+YmM8L3U+PC9zPiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMgIjx1
PmE8L3U+PHM+PHU+YmM8L3U+PC9zPiIKK1BBU1MgY29udGVudCgiYTx1PjxiPjxzPmJjPC9zPjwv
Yj48L3U+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBpcyAiPHU+YTxiPjxz
PmJjPC9zPjwvYj48L3U+IgorZG9jdW1lbnQuZXhlY0NvbW1hbmQoInN0eWxlV2l0aENTUyIsIGZh
bHNlLCB0cnVlKTsKKworVG9nZ2xpbmcgc3RyaWtlVGhyb3VnaAorUEFTUyBjb250ZW50KCc8c3Bh
biBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij48c3BhbiBzdHlsZT0idGV4
dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUiPmE8L3NwYW4+Yjwvc3Bhbj4nKTsKK3NlbGVjdCgwLCAy
KTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIikgaXMgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRp
b246IHVuZGVybGluZTsiPmE8L3NwYW4+YicKK1BBU1MgY29udGVudCgnPHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogdW5kZXJsaW5lOyI+YTwvc3Bhbj5iPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5k
ZXJsaW5lIj5jPC9zcGFuPjwvc3Bhbj4nKTsKK3NlbGVjdCgwLCAzKTsgdG9nZ2xlKCJzdHJpa2VU
aHJvdWdoIikgaXMgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8
L3NwYW4+YjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmM8L3NwYW4+
JworUEFTUyBjb250ZW50KCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91
Z2g7Ij5hPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+Yjwvc3Bhbj5j
PC9zcGFuPicpOworc2VsZWN0KDAsIDMpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAnYTxz
cGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmI8L3NwYW4+YycKK1BBU1Mg
Y29udGVudCgnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTxz
cGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmI8L3NwYW4+Yzwvc3Bhbj4n
KTsKK3NlbGVjdCgxLCAzKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIikgaXMgJzxzcGFuIHN0eWxl
PSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmE8L3NwYW4+PHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+Yjwvc3Bhbj5jJworUEFTUyBjb250ZW50KCc8c3Bh
biBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hPHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+Yjwvc3Bhbj5jPC9zcGFuPicpOworc2VsZWN0KDAs
IDIpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKSBpcyAnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IHVuZGVybGluZTsiPmI8L3NwYW4+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
bGluZS10aHJvdWdoOyI+Yzwvc3Bhbj4nCitQQVNTIGNvbnRlbnQoJzxzcGFuIHN0eWxlPSJ0ZXh0
LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246
IHVuZGVybGluZTsiPmFiPC9zcGFuPjwvc3Bhbj5jJyk7CitzZWxlY3QoMSwgMyk7IHRvZ2dsZSgi
c3RyaWtlVGhyb3VnaCIpIGlzICc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxp
bmU7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hPC9zcGFu
PmI8L3NwYW4+YycKK1BBU1MgY29udGVudCgnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246
IGxpbmUtdGhyb3VnaDsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsi
PmI8L3NwYW4+Yzwvc3Bhbj4nKTsKK3NlbGVjdCgwLCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdo
IikgaXMgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmE8c3Bh
biBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10aHJvdWdoOyI+Yjwvc3Bh
bj5jPC9zcGFuPicKK1BBU1MgY29udGVudCgnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246
IHVuZGVybGluZTsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsi
PmJjPC9zcGFuPjwvc3Bhbj4nKTsKK3NlbGVjdCgwLCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdo
IikgaXMgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmE8L3Nw
YW4+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YmM8L3NwYW4+PC9zcGFuPicKK1BBU1Mg
Y29udGVudCgnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPjxi
PjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmJjPC9zcGFuPjwvYj48
L3NwYW4+Jyk7CitzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpIGlzICc8c3Bh
biBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hPGI+PHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogdW5kZXJsaW5lIGxpbmUtdGhyb3VnaDsiPmI8L3NwYW4+Yzwvc3Bhbj48L2I+PC9zcGFuPicK
KworVG9nZ2xpbmcgdW5kZXJsaW5lCitQQVNTIGNvbnRlbnQoJzxzcGFuIHN0eWxlPSJ0ZXh0LWRl
Y29yYXRpb246IHVuZGVybGluZTsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUt
dGhyb3VnaDsiPmE8L3NwYW4+Yjwvc3Bhbj4nKTsKK3NlbGVjdCgwLCAyKTsgdG9nZ2xlKCJ1bmRl
cmxpbmUiKSBpcyAnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+
YTwvc3Bhbj5iJworUEFTUyBjb250ZW50KCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5h
PC9zcGFuPmI8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5jPC9z
cGFuPjwvc3Bhbj4nKTsKK3NlbGVjdCgwLCAzKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBpcyAnPHNw
YW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTwvc3Bhbj5iPHNwYW4g
c3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+Yzwvc3Bhbj4nCitQQVNTIGNv
bnRlbnQoJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8c3BhbiBz
dHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5iPC9zcGFuPmM8L3NwYW4+Jyk7
CitzZWxlY3QoMCwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMgJ2E8c3BhbiBzdHlsZT0idGV4
dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5iPC9zcGFuPmMnCitQQVNTIGNvbnRlbnQoJzxz
cGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8c3BhbiBzdHlsZT0idGV4
dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5iPC9zcGFuPmM8L3NwYW4+Jyk7CitzZWxlY3Qo
MSwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRp
b246IHVuZGVybGluZTsiPmE8L3NwYW4+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGlu
ZS10aHJvdWdoOyI+Yjwvc3Bhbj5jJworUEFTUyBjb250ZW50KCc8c3BhbiBzdHlsZT0idGV4dC1k
ZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5hPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGlu
ZS10aHJvdWdoOyI+Yjwvc3Bhbj5jPC9zcGFuPicpOworc2VsZWN0KDAsIDIpOyB0b2dnbGUoInVu
ZGVybGluZSIpIGlzICdhPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdo
OyI+Yjwvc3Bhbj48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5jPC9z
cGFuPicKK1BBU1MgY29udGVudCgnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJs
aW5lOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YWI8L3Nw
YW4+PC9zcGFuPmMnKTsKK3NlbGVjdCgxLCAzKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKSBpcyAnPHNw
YW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+PHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YTwvc3Bhbj5iPC9zcGFuPmMnCitQQVNTIGNvbnRl
bnQoJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8c3BhbiBzdHls
ZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5iPC9zcGFuPjwvc3Bhbj5jJyk7Citz
ZWxlY3QoMSwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRl
Y29yYXRpb246IHVuZGVybGluZTsiPmE8L3NwYW4+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogbGluZS10aHJvdWdoOyI+Yjwvc3Bhbj5jJworUEFTUyBjb250ZW50KCdhPHNwYW4gc3R5bGU9
InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogbGluZS10aHJvdWdoOyI+Yjwvc3Bhbj5jPC9zcGFuPicpOworc2VsZWN0KDAsIDIpOyB0b2dn
bGUoInVuZGVybGluZSIpIGlzICc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxp
bmU7Ij5hPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoIHVuZGVybGlu
ZTsiPmI8L3NwYW4+Yzwvc3Bhbj4nCitQQVNTIGNvbnRlbnQoJ2E8c3BhbiBzdHlsZT0idGV4dC1k
ZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7Ij5iYzwvc3Bhbj48L3NwYW4+Jyk7CitzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5k
ZXJsaW5lIikgaXMgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8
L3NwYW4+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+PHNwYW4g
c3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YmM8L3NwYW4+PC9zcGFuPicKK1BB
U1MgY29udGVudCgnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPjxi
PjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmJjPC9zcGFuPjwv
Yj48L3NwYW4+Jyk7CitzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5kZXJsaW5lIikgaXMgJzxzcGFu
IHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8Yj48c3BhbiBzdHlsZT0idGV4
dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9u
OiB1bmRlcmxpbmUgbGluZS10aHJvdWdoOyI+Yjwvc3Bhbj5jPC9zcGFuPjwvYj48L3NwYW4+Jwor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdG9nZ2xlLW1peGVkLXRleHQtZGVjb3Jh
dGlvbnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L3RvZ2dsZS1taXhlZC10ZXh0LWRlY29yYXRpb25zLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS1taXhlZC10ZXh0LWRlY29yYXRpb25z
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRvIG1ha2Ugc3VyZSB3ZSBj
YW4gdG9nZ2xlIHVuZGVybGluZSBhbmQgc3RyaWtlIHRocm91Z2ggc2VwYXJhdGVseS4iKQorCit2
YXIgdGVzdENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwordGVzdENv
bnRhaW5lci5jb250ZW50RWRpdGFibGUgPSB0cnVlOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZCh0ZXN0Q29udGFpbmVyKTsKKworZnVuY3Rpb24gdGVzdFNpbmdsZVRvZ2dsZSh0b2dnbGVDb21t
YW5kLCBpbml0aWFsQ29udGVudHMsIGV4cGVjdGVkQ29udGVudHMpCit7CisgICAgdGVzdENvbnRh
aW5lci5pbm5lckhUTUwgPSBpbml0aWFsQ29udGVudHM7CisgICAgZ2V0U2VsZWN0aW9uKCkuY29s
bGFwc2UodGVzdENvbnRhaW5lciwgMCk7CisgICAgZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCcnKQor
ICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbih0ZXN0Q29udGFpbmVy
KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgic3R5bGVXaXRoQ1NTIiwgZmFsc2UsIGZhbHNl
KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCh0b2dnbGVDb21tYW5kLCBmYWxzZSwgbnVsbCk7
CisgICAgaWYgKHRlc3RDb250YWluZXIuaW5uZXJIVE1MID09PSBleHBlY3RlZENvbnRlbnRzKSB7
CisgICAgICAgIHRlc3RQYXNzZWQoIm9uZSAiICsgdG9nZ2xlQ29tbWFuZCArICIgY29tbWFuZCBj
b252ZXJ0ZWQgIiArIGluaXRpYWxDb250ZW50cyArICIgdG8gIiArIGV4cGVjdGVkQ29udGVudHMp
OworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIm9uZSAiICsgdG9nZ2xlQ29tbWFu
ZCArICIgY29tbWFuZCBjb252ZXJ0ZWQgIiArIGluaXRpYWxDb250ZW50cyArICIgdG8gIiArIHRl
c3RDb250YWluZXIuaW5uZXJIVE1MICsgIiwgZXhwZWN0ZWQgIiArIGV4cGVjdGVkQ29udGVudHMp
OworICAgIH0KK30KKworZnVuY3Rpb24gY29udGVudChtYXJrdXApIHsKKyAgICB0ZXN0Q29udGFp
bmVyLmlubmVySFRNTCA9IG1hcmt1cDsKK30KKworZnVuY3Rpb24gc2VsZWN0KG9mZnNldCwgZXh0
ZW50KSB7CisgICAgZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2UodGVzdENvbnRhaW5lciwgMCk7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykKKyAgICAgICAgZ2V0U2VsZWN0aW9u
KCkubW9kaWZ5KCdtb3ZlJywgJ2ZvcndhcmQnLCAnY2hhcmFjdGVyJyk7CisgICAgZm9yICh2YXIg
aSA9IG9mZnNldDsgaSA8IGV4dGVudDsgaSsrKQorICAgICAgICBnZXRTZWxlY3Rpb24oKS5tb2Rp
ZnkoJ2V4dGVuZCcsICdmb3J3YXJkJywgJ2NoYXJhY3RlcicpOworfQorCitmdW5jdGlvbiB0b2dn
bGUoY29tbWFuZCkgeworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCBu
dWxsKTsKKyAgICByZXR1cm4gdGVzdENvbnRhaW5lci5pbm5lckhUTUw7Cit9CisKK2V2YWxBbmRM
b2coJ2RvY3VtZW50LmV4ZWNDb21tYW5kKCJzdHlsZVdpdGhDU1MiLCBmYWxzZSwgZmFsc2UpOycp
OworCitkZWJ1ZygnJyk7CitkZWJ1ZygnVG9nZ2xpbmcgc3RyaWtlVGhyb3VnaCcpOworc2hvdWxk
QmUoJ2NvbnRlbnQoIjxzPjx1PmE8L3U+Yjwvcz4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0
cmlrZVRocm91Z2giKScsICciPHU+YTwvdT5iIicpOworc2hvdWxkQmUoJ2NvbnRlbnQoIjxzPjx1
PmE8L3U+Yjx1PmM8L3U+PC9zPiIpOyBzZWxlY3QoMCwgMyk7IHRvZ2dsZSgic3RyaWtlVGhyb3Vn
aCIpJywgJyI8dT5hPC91PmI8dT5jPC91PiInKTsKK3Nob3VsZEJlKCdjb250ZW50KCI8cz5hPHU+
YjwvdT5jPC9zPiIpOyBzZWxlY3QoMCwgMyk7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywgJyJh
PHU+YjwvdT5jIicpOworc2hvdWxkQmUoJ2NvbnRlbnQoIjxzPmE8dT5iPC91PmM8L3M+Iik7IHNl
bGVjdCgxLCAzKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLCAnIjxzdHJpa2U+YTwvc3RyaWtl
Pjx1PmI8L3U+YyInKTsKK3Nob3VsZEJlKCdjb250ZW50KCI8cz5hPHU+YjwvdT5jPC9zPiIpOyBz
ZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywgJyJhPHU+YjwvdT48c3RyaWtl
PmM8L3N0cmlrZT4iJyk7CitzaG91bGRCZSgnY29udGVudCgiPHM+PHU+YWI8L3U+PC9zPmMiKTsg
c2VsZWN0KDEsIDMpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKScsICciPHU+PHN0cmlrZT5hPC9z
dHJpa2U+YjwvdT5jIicpOworc2hvdWxkQmUoJ2NvbnRlbnQoIjxzPmE8dT5iPC91Pjwvcz5jIik7
IHNlbGVjdCgxLCAzKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLCAnIjxzdHJpa2U+YTwvc3Ry
aWtlPjx1PmI8L3U+YyInKTsKK3Nob3VsZEJlKCdjb250ZW50KCJhPHM+PHU+YjwvdT5jPC9zPiIp
OyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywgJyI8c3RyaWtlPmE8L3N0
cmlrZT48cz48dT5iPC91PmM8L3M+IicpOworc2hvdWxkQmUoJ2NvbnRlbnQoImE8c3RyaWtlPjx1
PmI8L3U+Yzwvc3RyaWtlPiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIp
JywgJyI8c3RyaWtlPmE8dT5iPC91PmM8L3N0cmlrZT4iJyk7CitzaG91bGRCZSgnY29udGVudCgi
YTx1PjxzPmJjPC9zPjwvdT4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUoInN0cmlrZVRocm91Z2gi
KScsICciPHN0cmlrZT5hPC9zdHJpa2U+PHU+PHM+YmM8L3M+PC91PiInKTsKK3Nob3VsZEJlKCdj
b250ZW50KCJhPHM+PGI+PHU+YmM8L3U+PC9iPjwvcz4iKTsgc2VsZWN0KDAsIDIpOyB0b2dnbGUo
InN0cmlrZVRocm91Z2giKScsICciPHN0cmlrZT5hPC9zdHJpa2U+PHM+PGI+PHU+YmM8L3U+PC9i
Pjwvcz4iJyk7CitzaG91bGRCZSgnY29udGVudCgiYTxzdHJpa2U+PGI+PHU+YmM8L3U+PC9iPjwv
c3RyaWtlPiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywgJyI8c3Ry
aWtlPmE8Yj48dT5iYzwvdT48L2I+PC9zdHJpa2U+IicpOworCitkZWJ1ZygnJyk7CitkZWJ1Zygn
VG9nZ2xpbmcgdW5kZXJsaW5lJyk7CitzaG91bGRCZSgnY29udGVudCgiPHU+PHM+YTwvcz5iPC91
PiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5kZXJsaW5lIiknLCAnIjxzPmE8L3M+YiInKTsK
K3Nob3VsZEJlKCdjb250ZW50KCI8dT48cz5hPC9zPmI8cz5jPC9zPjwvdT4iKTsgc2VsZWN0KDAs
IDMpOyB0b2dnbGUoInVuZGVybGluZSIpJywgJyI8cz5hPC9zPmI8cz5jPC9zPiInKTsKK3Nob3Vs
ZEJlKCdjb250ZW50KCI8dT5hPHM+Yjwvcz5jPC91PiIpOyBzZWxlY3QoMCwgMyk7IHRvZ2dsZSgi
dW5kZXJsaW5lIiknLCAnImE8cz5iPC9zPmMiJyk7CitzaG91bGRCZSgnY29udGVudCgiPHU+YTxz
PmI8L3M+YzwvdT4iKTsgc2VsZWN0KDEsIDMpOyB0b2dnbGUoInVuZGVybGluZSIpJywgJyI8dT5h
PC91PjxzPmI8L3M+YyInKTsKK3Nob3VsZEJlKCdjb250ZW50KCI8dT5hPHM+Yjwvcz5jPC91PiIp
OyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5kZXJsaW5lIiknLCAnImE8cz5iPC9zPjx1PmM8L3U+
IicpOworc2hvdWxkQmUoJ2NvbnRlbnQoIjx1PjxzPmFiPC9zPjwvdT5jIik7IHNlbGVjdCgxLCAz
KTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScsICciPHM+PHU+YTwvdT5iPC9zPmMiJyk7CitzaG91bGRC
ZSgnY29udGVudCgiPHU+YTxzPmI8L3M+PC91PmMiKTsgc2VsZWN0KDEsIDMpOyB0b2dnbGUoInVu
ZGVybGluZSIpJywgJyI8dT5hPC91PjxzPmI8L3M+YyInKTsKK3Nob3VsZEJlKCdjb250ZW50KCJh
PHU+PHM+Yjwvcz5jPC91PiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5kZXJsaW5lIiknLCAn
Ijx1PmE8cz5iPC9zPmM8L3U+IicpOworc2hvdWxkQmUoJ2NvbnRlbnQoImE8cz48dT5iYzwvdT48
L3M+Iik7IHNlbGVjdCgwLCAyKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScsICciPHU+YTwvdT48cz48
dT5iYzwvdT48L3M+IicpOworc2hvdWxkQmUoJ2NvbnRlbnQoImE8dT48Yj48cz5iYzwvcz48L2I+
PC91PiIpOyBzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5kZXJsaW5lIiknLCAnIjx1PmE8Yj48cz5i
Yzwvcz48L2I+PC91PiInKTsKKworZXZhbEFuZExvZygnZG9jdW1lbnQuZXhlY0NvbW1hbmQoInN0
eWxlV2l0aENTUyIsIGZhbHNlLCB0cnVlKTsnKTsKKworZGVidWcoJycpOworZGVidWcoJ1RvZ2ds
aW5nIHN0cmlrZVRocm91Z2gnKTsKK3Nob3VsZEJlKCdjb250ZW50KFwnPHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogdW5kZXJsaW5lIj5hPC9zcGFuPmI8L3NwYW4+XCcpO1xuJworICAgICsgJ3NlbGVjdCgwLCAy
KTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLAorICAgICdcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRl
Y29yYXRpb246IHVuZGVybGluZTsiPmE8L3NwYW4+YlwnJyk7CitzaG91bGRCZSgnY29udGVudChc
JzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPjxzcGFuIHN0eWxl
PSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8L3NwYW4+YjxzcGFuIHN0eWxlPSJ0ZXh0
LWRlY29yYXRpb246IHVuZGVybGluZSI+Yzwvc3Bhbj48L3NwYW4+XCcpO1xuJworICAgICsgJ3Nl
bGVjdCgwLCAzKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLAorICAgICdcJzxzcGFuIHN0eWxl
PSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8L3NwYW4+YjxzcGFuIHN0eWxlPSJ0ZXh0
LWRlY29yYXRpb246IHVuZGVybGluZTsiPmM8L3NwYW4+XCcnKTsKK3Nob3VsZEJlKCdjb250ZW50
KFwnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTxzcGFuIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmI8L3NwYW4+Yzwvc3Bhbj5cJyk7XG4n
CisgICAgKyAnc2VsZWN0KDAsIDMpOyB0b2dnbGUoInN0cmlrZVRocm91Z2giKScsCisgICAgJ1wn
YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmI8L3NwYW4+Y1wnJyk7
CitzaG91bGRCZSgnY29udGVudChcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUt
dGhyb3VnaDsiPmE8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5iPC9z
cGFuPmM8L3NwYW4+XCcpO1xuJworICAgICsgJ3NlbGVjdCgxLCAzKTsgdG9nZ2xlKCJzdHJpa2VU
aHJvdWdoIiknLAorICAgICdcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhy
b3VnaDsiPmE8L3NwYW4+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+
Yjwvc3Bhbj5jXCcnKTsKK3Nob3VsZEJlKCdjb250ZW50KFwnPHNwYW4gc3R5bGU9InRleHQtZGVj
b3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVu
ZGVybGluZTsiPmI8L3NwYW4+Yzwvc3Bhbj5cJyk7XG4nCisgICAgKyAnc2VsZWN0KDAsIDIpOyB0
b2dnbGUoInN0cmlrZVRocm91Z2giKScsCisgICAgJ1wnYTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IHVuZGVybGluZTsiPmI8L3NwYW4+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
bGluZS10aHJvdWdoOyI+Yzwvc3Bhbj5cJycpOworc2hvdWxkQmUoJ2NvbnRlbnQoXCc8c3BhbiBz
dHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij48c3BhbiBzdHlsZT0idGV4dC1k
ZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5hYjwvc3Bhbj48L3NwYW4+Y1wnKTtcbicKKyAgICArICdz
ZWxlY3QoMSwgMyk7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywKKyAgICAnXCc8c3BhbiBzdHls
ZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0
aW9uOiBsaW5lLXRocm91Z2g7Ij5hPC9zcGFuPmI8L3NwYW4+Y1wnJyk7CitzaG91bGRCZSgnY29u
dGVudChcJ2E8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij48c3Bh
biBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5iPC9zcGFuPmM8L3NwYW4+XCcp
O1xuJworICAgICsgJ3NlbGVjdCgwLCAyKTsgdG9nZ2xlKCJzdHJpa2VUaHJvdWdoIiknLAorICAg
ICdcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmE8c3BhbiBz
dHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10aHJvdWdoOyI+Yjwvc3Bhbj5j
PC9zcGFuPlwnJyk7CitzaG91bGRCZSgnY29udGVudChcJ2E8c3BhbiBzdHlsZT0idGV4dC1kZWNv
cmF0aW9uOiB1bmRlcmxpbmU7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRo
cm91Z2g7Ij5iYzwvc3Bhbj48L3NwYW4+XCcpO1xuJworICAgICsgJ3NlbGVjdCgwLCAyKTsgdG9n
Z2xlKCJzdHJpa2VUaHJvdWdoIiknLAorICAgICdcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRp
b246IGxpbmUtdGhyb3VnaDsiPmE8L3NwYW4+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+
YmM8L3NwYW4+PC9zcGFuPlwnJyk7CitzaG91bGRCZSgnY29udGVudChcJ2E8c3BhbiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij48Yj48c3BhbiBzdHlsZT0idGV4dC1kZWNv
cmF0aW9uOiB1bmRlcmxpbmU7Ij5iYzwvc3Bhbj48L2I+PC9zcGFuPlwnKTtcbicKKyAgICArICdz
ZWxlY3QoMCwgMik7IHRvZ2dsZSgic3RyaWtlVGhyb3VnaCIpJywKKyAgICAnXCc8c3BhbiBzdHls
ZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hPGI+PHNwYW4gc3R5bGU9InRleHQt
ZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5k
ZXJsaW5lIGxpbmUtdGhyb3VnaDsiPmI8L3NwYW4+Yzwvc3Bhbj48L2I+PC9zcGFuPlwnJyk7CisK
K2RlYnVnKCcnKTsKK2RlYnVnKCdUb2dnbGluZyB1bmRlcmxpbmUnKTsKK3Nob3VsZEJlKCdjb250
ZW50KFwnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PHNwYW4gc3R5
bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YTwvc3Bhbj5iPC9zcGFuPlwnKTtc
bicKKyAgICArICdzZWxlY3QoMCwgMik7IHRvZ2dsZSgidW5kZXJsaW5lIiknLAorICAgICdcJzxz
cGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmE8L3NwYW4+YlwnJyk7
CitzaG91bGRCZSgnY29udGVudChcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVy
bGluZTsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmE8L3Nw
YW4+YjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmM8L3NwYW4+
PC9zcGFuPlwnKTtcbicKKyAgICArICdzZWxlY3QoMCwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIikn
LAorICAgICdcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmE8
L3NwYW4+YjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmM8L3Nw
YW4+XCcnKTsKK3Nob3VsZEJlKCdjb250ZW50KFwnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogdW5kZXJsaW5lOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3Vn
aDsiPmI8L3NwYW4+Yzwvc3Bhbj5cJyk7XG4nCisgICAgKyAnc2VsZWN0KDAsIDMpOyB0b2dnbGUo
InVuZGVybGluZSIpJywKKyAgICAnXCdhPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGlu
ZS10aHJvdWdoOyI+Yjwvc3Bhbj5jXCcnKTsKK3Nob3VsZEJlKCdjb250ZW50KFwnPHNwYW4gc3R5
bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IGxpbmUtdGhyb3VnaDsiPmI8L3NwYW4+Yzwvc3Bhbj5cJyk7XG4nCisgICAgKyAnc2Vs
ZWN0KDEsIDMpOyB0b2dnbGUoInVuZGVybGluZSIpJywKKyAgICAnXCc8c3BhbiBzdHlsZT0idGV4
dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5hPC9zcGFuPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29y
YXRpb246IGxpbmUtdGhyb3VnaDsiPmI8L3NwYW4+Y1wnJyk7CitzaG91bGRCZSgnY29udGVudChc
JzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8c3BhbiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5iPC9zcGFuPmM8L3NwYW4+XCcpO1xuJwor
ICAgICsgJ3NlbGVjdCgwLCAyKTsgdG9nZ2xlKCJ1bmRlcmxpbmUiKScsCisgICAgJ1wnYTxzcGFu
IHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmI8L3NwYW4+PHNwYW4gc3R5
bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+Yzwvc3Bhbj5cJycpOworc2hvdWxkQmUo
J2NvbnRlbnQoXCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij48c3Bh
biBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ij5hYjwvc3Bhbj48L3NwYW4+
Y1wnKTtcbicKKyAgICArICdzZWxlY3QoMSwgMyk7IHRvZ2dsZSgidW5kZXJsaW5lIiknLAorICAg
ICdcJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPjxzcGFuIHN0
eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiPmE8L3NwYW4+Yjwvc3Bhbj5jXCcnKTsK
K3Nob3VsZEJlKCdjb250ZW50KFwnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJs
aW5lOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmI8L3Nw
YW4+PC9zcGFuPmNcJyk7XG4nCisgICAgKyAnc2VsZWN0KDEsIDMpOyB0b2dnbGUoInVuZGVybGlu
ZSIpJywKKyAgICAnXCc8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5h
PC9zcGFuPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPmI8L3Nw
YW4+Y1wnJyk7CitzaG91bGRCZSgnY29udGVudChcJ2E8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0
aW9uOiB1bmRlcmxpbmU7Ij48c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91
Z2g7Ij5iPC9zcGFuPmM8L3NwYW4+XCcpO1xuJworICAgICsgJ3NlbGVjdCgwLCAyKTsgdG9nZ2xl
KCJ1bmRlcmxpbmUiKScsCisgICAgJ1wnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5k
ZXJsaW5lOyI+YTxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCB1bmRl
cmxpbmU7Ij5iPC9zcGFuPmM8L3NwYW4+XCcnKTsKK3Nob3VsZEJlKCdjb250ZW50KFwnYTxzcGFu
IHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPjxzcGFuIHN0eWxlPSJ0ZXh0
LWRlY29yYXRpb246IHVuZGVybGluZTsiPmJjPC9zcGFuPjwvc3Bhbj5cJyk7XG4nCisgICAgKyAn
c2VsZWN0KDAsIDIpOyB0b2dnbGUoInVuZGVybGluZSIpJywKKyAgICAnXCc8c3BhbiBzdHlsZT0i
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5hPC9zcGFuPjxzcGFuIHN0eWxlPSJ0ZXh0LWRl
Y29yYXRpb246IGxpbmUtdGhyb3VnaDsiPjxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVu
ZGVybGluZTsiPmJjPC9zcGFuPjwvc3Bhbj5cJycpOworc2hvdWxkQmUoJ2NvbnRlbnQoXCdhPHNw
YW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+PGI+PHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+YmM8L3NwYW4+PC9iPjwvc3Bhbj5cJyk7XG4n
CisgICAgKyAnc2VsZWN0KDAsIDIpOyB0b2dnbGUoInVuZGVybGluZSIpJywKKyAgICAnXCc8c3Bh
biBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5hPGI+PHNwYW4gc3R5bGU9InRl
eHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlv
bjogdW5kZXJsaW5lIGxpbmUtdGhyb3VnaDsiPmI8L3NwYW4+Yzwvc3Bhbj48L2I+PC9zcGFuPlwn
Jyk7CisKK2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVzdENvbnRhaW5lcik7CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdG9nZ2xlLXN0eWxlLTItZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
dG9nZ2xlLXN0eWxlLTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxODM0OTcpCisrKyBMYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RvZ2dsZS1zdHlsZS0yLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTAsNyArMTAsNyBAQCBQQVNTIG9uZSBzdHJpa2V0aHJvdWdoIGNvbW1h
bmQgY29udmVydGVkCiBQQVNTIG9uZSBzdHJpa2V0aHJvdWdoIGNvbW1hbmQgY29udmVydGVkIDx1
PjxiPjxzdHJpa2U+dGVzdDwvc3RyaWtlPjwvYj48L3U+IHRvIDx1PjxiPnRlc3Q8L2I+PC91Pgog
UEFTUyB0d28gc3RyaWtldGhyb3VnaCBjb21tYW5kcyBjb252ZXJ0ZWQgdGVzdCB0byB0ZXN0CiBQ
QVNTIG9uZSBzdHJpa2V0aHJvdWdoIGNvbW1hbmQgY29udmVydGVkIDx1PnRlc3Q8L3U+IHRvIDx1
PjxzdHJpa2U+dGVzdDwvc3RyaWtlPjwvdT4KLVBBU1Mgb25lIHVuZGVybGluZSBjb21tYW5kIGNv
bnZlcnRlZCA8c3RyaWtlPnRlc3Q8L3N0cmlrZT4gdG8gPHU+PHN0cmlrZT50ZXN0PC9zdHJpa2U+
PC91PgorUEFTUyBvbmUgdW5kZXJsaW5lIGNvbW1hbmQgY29udmVydGVkIDxzdHJpa2U+dGVzdDwv
c3RyaWtlPiB0byA8c3RyaWtlPjx1PnRlc3Q8L3U+PC9zdHJpa2U+CiBQQVNTIG9uZSBzdHJpa2V0
aHJvdWdoIGNvbW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG92
ZXJsaW5lOyI+dGVzdDwvc3Bhbj4gdG8gPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogb3Zl
cmxpbmU7Ij48c3RyaWtlPnRlc3Q8L3N0cmlrZT48L3NwYW4+CiBQQVNTIG9uZSB1bmRlcmxpbmUg
Y29tbWFuZCBjb252ZXJ0ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmU7
Ij50ZXN0PC9zcGFuPiB0byA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTsi
Pjx1PnRlc3Q8L3U+PC9zcGFuPgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQpJbmRl
eDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90b2dnbGUtdGV4dC1kZWNvcmF0aW9u
cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29t
bWFuZC90b2dnbGUtdGV4dC1kZWNvcmF0aW9ucy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE4MzQ5
NykKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdG9nZ2xlLXRleHQtZGVjb3Jh
dGlvbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01LDcgKzUsNyBAQCBPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIFBBU1Mgb25lIHVuZGVybGluZSBj
b21tYW5kIGNvbnZlcnRlZCB0ZXN0IHRvIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVu
ZGVybGluZTsiPnRlc3Q8L3NwYW4+CiBQQVNTIG9uZSB1bmRlcmxpbmUgY29tbWFuZCBjb252ZXJ0
ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+dGVzdDwvc3Bhbj4g
dG8gdGVzdAotUEFTUyBvbmUgdW5kZXJsaW5lIGNvbW1hbmQgY29udmVydGVkIDxzcGFuIHN0eWxl
PSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBsaW5lLXRocm91Z2ggb3ZlcmxpbmU7Ij50ZXN0
PC9zcGFuPiB0byA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZSBsaW5lLXRo
cm91Z2g7Ij50ZXN0PC9zcGFuPgorUEFTUyBvbmUgdW5kZXJsaW5lIGNvbW1hbmQgY29udmVydGVk
IDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBsaW5lLXRocm91Z2ggb3Zl
cmxpbmU7Ij50ZXN0PC9zcGFuPiB0byA8c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBsaW5l
LXRocm91Z2ggb3ZlcmxpbmU7Ij50ZXN0PC9zcGFuPgogUEFTUyBvbmUgc3RyaWtldGhyb3VnaCBj
b21tYW5kIGNvbnZlcnRlZCB0ZXN0IHRvIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxp
bmUtdGhyb3VnaDsiPnRlc3Q8L3NwYW4+CiBQQVNTIG9uZSBzdHJpa2V0aHJvdWdoIGNvbW1hbmQg
Y29udmVydGVkIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsiPnRl
c3Q8L3NwYW4+IHRvIHRlc3QKIFBBU1Mgb25lIHN0cmlrZXRocm91Z2ggY29tbWFuZCBjb252ZXJ0
ZWQgPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGxpbmUtdGhyb3VnaCBv
dmVybGluZTsiPnRlc3Q8L3NwYW4+IHRvIDxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IHVu
ZGVybGluZSBvdmVybGluZTsiPnRlc3Q8L3NwYW4+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L2V4ZWNDb21tYW5kL3NjcmlwdC10ZXN0cy90b2dnbGUtc3R5bGUtMi5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3NjcmlwdC10ZXN0cy90b2dnbGUtc3R5
bGUtMi5qcwkocmV2aXNpb24gMTgzNDk3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29t
bWFuZC9zY3JpcHQtdGVzdHMvdG9nZ2xlLXN0eWxlLTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDcgQEAgdGVzdFNpbmdsZVRvZ2dsZSgic3RyaWtldGhyb3VnaCIsICI8dT48YgogdGVz
dERvdWJsZVRvZ2dsZSgic3RyaWtldGhyb3VnaCIsICJ0ZXN0IiwgInRlc3QiKTsKIAogdGVzdFNp
bmdsZVRvZ2dsZSgic3RyaWtldGhyb3VnaCIsICI8dT50ZXN0PC91PiIsICI8dT48c3RyaWtlPnRl
c3Q8L3N0cmlrZT48L3U+Iik7Ci10ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCAiPHN0cmlr
ZT50ZXN0PC9zdHJpa2U+IiwgIjx1PjxzdHJpa2U+dGVzdDwvc3RyaWtlPjwvdT4iKTsKK3Rlc3RT
aW5nbGVUb2dnbGUoInVuZGVybGluZSIsICI8c3RyaWtlPnRlc3Q8L3N0cmlrZT4iLCAiPHN0cmlr
ZT48dT50ZXN0PC91Pjwvc3RyaWtlPiIpOwogCiB0ZXN0U2luZ2xlVG9nZ2xlKCJzdHJpa2V0aHJv
dWdoIiwgJzxzcGFuIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG92ZXJsaW5lOyI+dGVzdDwvc3Bh
bj4nLCAnPHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmU7Ij48c3RyaWtlPnRl
c3Q8L3N0cmlrZT48L3NwYW4+Jyk7CiB0ZXN0U2luZ2xlVG9nZ2xlKCJ1bmRlcmxpbmUiLCAnPHNw
YW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmU7Ij50ZXN0PC9zcGFuPicsICc8c3Bh
biBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBvdmVybGluZTsiPjx1PnRlc3Q8L3U+PC9zcGFuPicp
OwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvdG9n
Z2xlLXRleHQtZGVjb3JhdGlvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGlu
Zy9leGVjQ29tbWFuZC9zY3JpcHQtdGVzdHMvdG9nZ2xlLXRleHQtZGVjb3JhdGlvbnMuanMJKHJl
dmlzaW9uIDE4MzQ5NykKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc2NyaXB0
LXRlc3RzL3RvZ2dsZS10ZXh0LWRlY29yYXRpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw3
ICsxOSw4IEBAIGZ1bmN0aW9uIHRlc3RTaW5nbGVUb2dnbGUodG9nZ2xlQ29tbWFuZCwKIAogdGVz
dFNpbmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwgInRlc3QiLCAiPHNwYW4gc3R5bGU9XCJ0ZXh0LWRl
Y29yYXRpb246IHVuZGVybGluZTtcIj50ZXN0PC9zcGFuPiIpOwogdGVzdFNpbmdsZVRvZ2dsZSgi
dW5kZXJsaW5lIiwgIjxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XCI+
dGVzdDwvc3Bhbj4iLCAidGVzdCIpOwotdGVzdFNpbmdsZVRvZ2dsZSgidW5kZXJsaW5lIiwgIjxz
cGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgbGluZS10aHJvdWdoIG92ZXJs
aW5lO1wiPnRlc3Q8L3NwYW4+IiwgIjxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiBvdmVy
bGluZSBsaW5lLXRocm91Z2g7XCI+dGVzdDwvc3Bhbj4iKTsKK3Rlc3RTaW5nbGVUb2dnbGUoInVu
ZGVybGluZSIsICI8c3BhbiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGxpbmUt
dGhyb3VnaCBvdmVybGluZTtcIj50ZXN0PC9zcGFuPiIsCisgICAgIjxzcGFuIHN0eWxlPVwidGV4
dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2ggb3ZlcmxpbmU7XCI+dGVzdDwvc3Bhbj4iKTsKIHRl
c3RTaW5nbGVUb2dnbGUoInN0cmlrZXRocm91Z2giLCAidGVzdCIsICI8c3BhbiBzdHlsZT1cInRl
eHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1wiPnRlc3Q8L3NwYW4+Iik7CiB0ZXN0U2luZ2xl
VG9nZ2xlKCJzdHJpa2V0aHJvdWdoIiwgIjxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiBs
aW5lLXRocm91Z2g7XCI+dGVzdDwvc3Bhbj4iLCAidGVzdCIpOwogdGVzdFNpbmdsZVRvZ2dsZSgi
c3RyaWtldGhyb3VnaCIsICI8c3BhbiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5l
IGxpbmUtdGhyb3VnaCBvdmVybGluZTtcIj50ZXN0PC9zcGFuPiIsICI8c3BhbiBzdHlsZT1cInRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIG92ZXJsaW5lO1wiPnRlc3Q8L3NwYW4+Iik7CkluZGV4
OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3VuZG8vcmVtb3ZlLWNzcy1wcm9wZXJ0eS1hbmQtcmVtb3Zl
LXN0eWxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Vu
ZG8vcmVtb3ZlLWNzcy1wcm9wZXJ0eS1hbmQtcmVtb3ZlLXN0eWxlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMTgzNDk3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy91bmRvL3JlbW92ZS1jc3MtcHJv
cGVydHktYW5kLXJlbW92ZS1zdHlsZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDcgKzU5LDcgQEAgVW5ib2xkaW5nIHNob3VsZCByZW1vdmUgdGhlIGZvbnQtd2VpZ2h0IAogCiBV
bmRvIHNob3VsZCByZXNldCB0aGUgc3R5bGUgYXR0cmlidXRlIHNvIHRoYXQgInRlc3QiIGlzIGJv
dGggYm9sZCBhbmQgYmx1ZToKIHwgPHNwYW4+Ci18ICAgc3R5bGU9ImNvbG9yOiBibHVlOyBmb250
LXdlaWdodDogOTAwOyIKK3wgICBzdHlsZT0iZm9udC13ZWlnaHQ6IDkwMDsgY29sb3I6IGJsdWU7
IgogfCAgICI8I3NlbGVjdGlvbi1hbmNob3I+dGVzdDwjc2VsZWN0aW9uLWZvY3VzPiIKIAogUmVk
byBzaG91bGQgb25seSByZW1vdmUgZm9udC13ZWlnaHQgYW5kIGxlYXZlICJ0ZXN0IiBibHVlOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>