<?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>46335</bug_id>
          
          <creation_ts>2010-09-22 20:48:01 -0700</creation_ts>
          <short_desc>Add EditingStyle</short_desc>
          <delta_ts>2010-11-07 20:22:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>49155</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>283490</commentid>
    <comment_count>0</comment_count>
      <attachid>68496</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-22 20:48:01 -0700</bug_when>
    <thetext>Created attachment 68496
work in progress

Currently, ApplyStyleCommand.cpp contains a few functions to extract CSSMutableStyleDeclaration and prepares it to apply for style preservation purposes: removeNonEditingProperties, editingStyleAtPosition, prepareEditingStyleToApplyAt, and removeStylesAddedByNode.  But the fact they are global functions and reside in &quot;Apply&quot;StyleCommand.cpp is rather misleading, and so I propose to isolate all of these functions into a new EditingStyle class.

A big motivation behind this is the bug 27818.  Resolving the bug 27818 requires adding new argument to one of the constructors of ApplyStyleCommand and to many functions between executeUnderline and ApplyStyleCommand.  This is not an ideal solution since it introduces new dependency between many parts of editing.  Adding EditingStyle solves this problem because EditingStyle can encapsulate this new argument, decoupling the implementation details of adding and removing text decorations from the rest of editing code.

In the long run, I also want to merge StyleChange and much of logic in removeImplicitlyStyledElement to this new class so that ApplyStyleCommand can ask EditingStyle which element needs to be removed or added instead of ApplyStyleCommand figuring out what element needs to be added or removed.  This nicely separates the logic to manipulate the DOM and the logic to query against styles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283493</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-22 20:53:10 -0700</bug_when>
    <thetext>The attachment is my work in progress.  I still need to do more cleanup in EditingStyle.  Namely I&apos;d like to make constructors of EditingStyle explicit about whether or not it includes non-inheritable styles.

The current implementation of EditingStyle has style() member function that lets caller manipulate the style directly but this is intended to be removed in the future once we deployed this class in all parts of editing and removed the direct dependency on CSSMutableStyleDeclaration and CSSComputedStyleDeclaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287057</commentid>
    <comment_count>2</comment_count>
      <attachid>68496</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-29 12:22:05 -0700</bug_when>
    <thetext>Comment on attachment 68496
work in progress

The idea seems sound to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287066</commentid>
    <comment_count>3</comment_count>
      <attachid>68496</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-29 12:43:00 -0700</bug_when>
    <thetext>Comment on attachment 68496
work in progress

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

&gt; WebCore/editing/CompositeEditCommand.cpp:935
&gt; +        styleInEmptyParagraph = editingStyleWithTypingStyle(startOfParagraphToMove.deepEquivalent());

Maybe editingStyleIncludingTypingStyle?  I&apos;m not sure what exactly this method means.

&gt; WebCore/editing/ReplaceSelectionCommand.cpp:641
&gt; +    sourceDocumentStyle-&gt;prepareAppliedAt(Position(context, 0));

prepareToApplyAt?

&gt; WebCore/editing/ReplaceSelectionCommand.cpp:689
&gt; +    setNodeAttribute(static_cast&lt;Element*&gt;(copiedRangeStyleSpan), styleAttr, copiedRangeStyle-&gt;style()-&gt;cssText());

Are we eventually going to hide the existance of the style() member?  And expose only the functions callers need?  Or will EditingStyle always expose to the world that it &quot;has&quot; a CSSMutableStyleDeclaration?

&gt; WebCore/editing/Editor.cpp:3262
&gt; +    mutableStyle-&gt;mergeAndOverrideWith(typingStyle.get());

This might be cleaner as a merge( fucntion with an OverrideWithNew enum (or some similarly named enum to explain the differnet modes).  Do we have a non-overriding merge?

&gt; WebCore/editing/SelectionController.h:249
&gt;  inline void SelectionController::clearTypingStyle()
&gt;  {
&gt; -    m_typingStyle.clear();
&gt; +    m_typingStyle-&gt;clear();
&gt;  }
&gt;  
&gt;  inline void SelectionController::setTypingStyle(PassRefPtr&lt;CSSMutableStyleDeclaration&gt; style)
&gt;  {
&gt; -    m_typingStyle = style;
&gt; +    m_typingStyle-&gt;setStyle(style);
&gt;  }

I guess not in this patch, but do we need to be clearing the whole typing style?  It seems strange to only clear its style member.  I understand you&apos;re not trying to change behavior here, but it&apos;s unclear to me why this part of code would only want to clear &quot;part&quot; of an EditingStyle

&gt; WebCore/editing/EditingStyle.cpp:80
&gt; +    : m_mutableStyle(0)

No need to explictly 0 RefPtr.

&gt; WebCore/editing/EditingStyle.cpp:112
&gt; +    RefPtr&lt;CSSComputedStyleDeclaration&gt; computedStyleAtPosition = computedStyle(node);
&gt; +    RefPtr&lt;CSSMutableStyleDeclaration&gt; style;
&gt; +    if (!computedStyleAtPosition)
&gt; +        style = CSSMutableStyleDeclaration::create();
&gt; +    else
&gt; +        style = removeNonEditingProperties(computedStyleAtPosition.get());

This feels like a helper function.

&gt; WebCore/editing/EditingStyle.cpp:127
&gt; +    if (node &amp;&amp; node-&gt;computedStyle()) {
&gt; +        RenderStyle* renderStyle = node-&gt;computedStyle();
&gt; +        // If a node&apos;s text fill color is invalid, then its children use 
&gt; +        // their font-color as their text fill color (they don&apos;t
&gt; +        // inherit it).  Likewise for stroke color.
&gt; +        ExceptionCode ec = 0;
&gt; +        if (!renderStyle-&gt;textFillColor().isValid())
&gt; +            style-&gt;removeProperty(CSSPropertyWebkitTextFillColor, ec);
&gt; +        if (!renderStyle-&gt;textStrokeColor().isValid())
&gt; +            style-&gt;removeProperty(CSSPropertyWebkitTextStrokeColor, ec);
&gt; +        ASSERT(ec == 0);
&gt; +        if (renderStyle-&gt;fontDescription().keywordSize())
&gt; +            style-&gt;setProperty(CSSPropertyFontSize, computedStyleAtPosition-&gt;getFontSizeCSSValuePreferringKeyword()-&gt;cssText());
&gt; +    }

This also feels like a separate function.  Once you break it out into a seprate function, maybe we can move it to somewhere else more fitting?

&gt; WebCore/editing/EditingStyle.cpp:137
&gt; +    /*    if (shouldIncludeTypingStyle == IncludeTypingStyle) {
&gt; +     CSSMutableStyleDeclaration* typingStyle = pos.node()-&gt;document()-&gt;frame()-&gt;selection()-&gt;typingStyle();
&gt; +     if (typingStyle)
&gt; +     style-&gt;merge(typingStyle);
&gt; +     }*/
&gt; +}

Commented out code?

&gt; WebCore/editing/EditingStyle.cpp:141
&gt; +    return !m_mutableStyle || m_mutableStyle-&gt;length() == 0;

no isEmpty() here too?

&gt; WebCore/editing/EditingStyle.cpp:147
&gt; +    m_shouldUseFixedDefaultFontSize = false; // FIXME: we should take care of this

What does your FIXME mean?

&gt; WebCore/editing/EditingStyle.cpp:175
&gt; +    RefPtr&lt;CSSComputedStyleDeclaration&gt; parentStyle = computedStyle(node-&gt;parentNode());
&gt; +    RefPtr&lt;CSSMutableStyleDeclaration&gt; styleAddedByNode = computedStyle(node)-&gt;copy();
&gt; +
&gt; +    parentStyle-&gt;diff(styleAddedByNode.get());
&gt; +    removeNonEditingProperties(styleAddedByNode.get());
&gt; +
&gt; +    styleAddedByNode-&gt;diff(m_mutableStyle.get());

This feels wrong.  Why are we copying here?  If this is wrong, please add a FIXME, otherwise maybe a comment to explain why this is here?

&gt; WebCore/editing/EditingStyle.cpp:186
&gt; +void EditingStyle::removePropertiesPresentIn(CSSMutableStyleDeclaration* style)

Python calls this operation:
difference_update(other, ...)
set -= other | ...

But I&apos;m not sure differenceUpdate makes any more sense.  But this does feel like a set operation.  removePropertiesSharedWith?  removeProperitesAlsoIn?  removePropertiesPresentIn is actually a fine name.

&gt; WebCore/editing/EditingStyle.cpp:195
&gt; +    for (CSSMutableStyleDeclaration::const_iterator it = style-&gt;begin(); it != end; ++it) {
&gt; +        const CSSProperty&amp; property = *it;
&gt; +        m_mutableStyle-&gt;removeProperty(property.id());
&gt; +    }

Can remove local and {}

&gt; WebCore/editing/EditingStyle.cpp:212
&gt; +        if (color.alpha() == 0)

Isn&apos;t there a !transparent()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287307</commentid>
    <comment_count>4</comment_count>
      <attachid>68496</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-29 18:49:53 -0700</bug_when>
    <thetext>Comment on attachment 68496
work in progress

Thanks for the feedback!  I&apos;ll update a new smaller patch soon.

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

&gt;&gt; WebCore/editing/CompositeEditCommand.cpp:935
&gt;&gt; +        styleInEmptyParagraph = editingStyleWithTypingStyle(startOfParagraphToMove.deepEquivalent());
&gt; 
&gt; Maybe editingStyleIncludingTypingStyle?  I&apos;m not sure what exactly this method means.

Fixed.

&gt;&gt; WebCore/editing/ReplaceSelectionCommand.cpp:641
&gt;&gt; +    sourceDocumentStyle-&gt;prepareAppliedAt(Position(context, 0));
&gt; 
&gt; prepareToApplyAt?

Fixed.

&gt;&gt; WebCore/editing/ReplaceSelectionCommand.cpp:689
&gt;&gt; +    setNodeAttribute(static_cast&lt;Element*&gt;(copiedRangeStyleSpan), styleAttr, copiedRangeStyle-&gt;style()-&gt;cssText());
&gt; 
&gt; Are we eventually going to hide the existance of the style() member?  And expose only the functions callers need?  Or will EditingStyle always expose to the world that it &quot;has&quot; a CSSMutableStyleDeclaration?

Yes, that&apos;s the plan.  I want to centralize all style manipulations in editing at one place so that we have a better control of it.

&gt;&gt; WebCore/editing/Editor.cpp:3262
&gt;&gt; +    mutableStyle-&gt;mergeAndOverrideWith(typingStyle.get());
&gt; 
&gt; This might be cleaner as a merge( fucntion with an OverrideWithNew enum (or some similarly named enum to explain the differnet modes).  Do we have a non-overriding merge?

I&apos;m removing mergeAndOverrideWith from my initial patch.

&gt;&gt; WebCore/editing/SelectionController.h:249
&gt;&gt;  }
&gt; 
&gt; I guess not in this patch, but do we need to be clearing the whole typing style?  It seems strange to only clear its style member.  I understand you&apos;re not trying to change behavior here, but it&apos;s unclear to me why this part of code would only want to clear &quot;part&quot; of an EditingStyle

I set m_shouldUseFixedDefaultFontSize = false in setStyle / clear so I think we&apos;re clearing the whole editing style.  I&apos;m not sure what you&apos;re referring to by &quot;part&quot;.

&gt;&gt; WebCore/editing/EditingStyle.cpp:80
&gt;&gt; +    : m_mutableStyle(0)
&gt; 
&gt; No need to explictly 0 RefPtr.

Good point.  Removed.

&gt;&gt; WebCore/editing/EditingStyle.cpp:112
&gt;&gt; +        style = removeNonEditingProperties(computedStyleAtPosition.get());
&gt; 
&gt; This feels like a helper function.

Added editingStyleFromCompuedStyle.

&gt;&gt; WebCore/editing/EditingStyle.cpp:127
&gt;&gt; +    }
&gt; 
&gt; This also feels like a separate function.  Once you break it out into a seprate function, maybe we can move it to somewhere else more fitting?

Added removeTextFillAndStroleColorsIfNeeded and replaceFontSizeByKeywordIfPossible.

&gt;&gt; WebCore/editing/EditingStyle.cpp:137
&gt;&gt; +}
&gt; 
&gt; Commented out code?

Oops, removed.

&gt;&gt; WebCore/editing/EditingStyle.cpp:147
&gt;&gt; +    m_shouldUseFixedDefaultFontSize = false; // FIXME: we should take care of this
&gt; 
&gt; What does your FIXME mean?

Fixed.

&gt;&gt; WebCore/editing/EditingStyle.cpp:175
&gt;&gt; +    styleAddedByNode-&gt;diff(m_mutableStyle.get());
&gt; 
&gt; This feels wrong.  Why are we copying here?  If this is wrong, please add a FIXME, otherwise maybe a comment to explain why this is here?

I&apos;m removing this function from my initial patch.

&gt;&gt; WebCore/editing/EditingStyle.cpp:186
&gt;&gt; +void EditingStyle::removePropertiesPresentIn(CSSMutableStyleDeclaration* style)
&gt; 
&gt; Python calls this operation:
&gt; difference_update(other, ...)
&gt; set -= other | ...
&gt; 
&gt; But I&apos;m not sure differenceUpdate makes any more sense.  But this does feel like a set operation.  removePropertiesSharedWith?  removeProperitesAlsoIn?  removePropertiesPresentIn is actually a fine name.

I&apos;m removing this one as well.

&gt;&gt; WebCore/editing/EditingStyle.cpp:212
&gt;&gt; +        if (color.alpha() == 0)
&gt; 
&gt; Isn&apos;t there a !transparent()?

No.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287739</commentid>
    <comment_count>5</comment_count>
      <attachid>69363</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-30 12:36:42 -0700</bug_when>
    <thetext>Created attachment 69363
Fixed per Eric&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287745</commentid>
    <comment_count>6</comment_count>
      <attachid>69363</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-30 12:45:20 -0700</bug_when>
    <thetext>Comment on attachment 69363
Fixed per Eric&apos;s comment

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

&gt; WebCore/editing/CompositeEditCommand.cpp:935
&gt; +        styleInEmptyParagraph = editingStyleIncludingTypingStyle(startOfParagraphToMove.deepEquivalent());

Is there an editing style which does not include typing style?

&gt; WebCore/editing/CompositeEditCommand.cpp:1052
&gt; +        applyStyle(style-&gt;style());

Does applyStyle ASSERT ! empty?  Or should this check just go into applyStyle?

&gt; WebCore/editing/DeleteSelectionCommand.cpp:297
&gt; +    m_typingStyle = EditingStyle::create(positionBeforeTabSpan(m_selectionToDelete.start()));

I take it this is an editing style which does not include the typing style?

&gt; WebCore/editing/EditingStyle.cpp:51
&gt; +: m_shouldUseFixedDefaultFontSize(false)

indent.

&gt; WebCore/editing/EditingStyle.cpp:56
&gt; +: m_shouldUseFixedDefaultFontSize(false)

again.

&gt; WebCore/editing/EditingStyle.cpp:131
&gt; +    if (!m_mutableStyle)
&gt; +        return;
&gt; +
&gt; +    m_mutableStyle-&gt;removeBlockProperties();

I would have probably just reversed this if since it&apos;s one line.

&gt; WebCore/editing/EditingStyle.cpp:146
&gt; +        CSSPrimitiveValue* primitiveValue = static_cast&lt;CSSPrimitiveValue*&gt;(backgroundColor.get());
&gt; +        Color color = Color(primitiveValue-&gt;getRGBA32Value());

This is the way we build colors from CSSPrimativeValues?  I would have expected there to be a function or constructor which did this.

&gt; WebCore/editing/EditingStyle.h:78
&gt; +    void init(Node*);

What is the purpose of a separate init() call?  Generally we don&apos;t have separate init() in webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287756</commentid>
    <comment_count>7</comment_count>
      <attachid>69363</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-30 13:00:55 -0700</bug_when>
    <thetext>Comment on attachment 69363
Fixed per Eric&apos;s comment

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

&gt;&gt; WebCore/editing/CompositeEditCommand.cpp:935
&gt;&gt; +        styleInEmptyParagraph = editingStyleIncludingTypingStyle(startOfParagraphToMove.deepEquivalent());
&gt; 
&gt; Is there an editing style which does not include typing style?

Yes.  See where we call EditingStyle::create.  As I mentioned yesterday, it might make sense to make editingStyle() for those places as supposed to be calling EditingStyle::create.

&gt;&gt; WebCore/editing/CompositeEditCommand.cpp:1052
&gt;&gt; +        applyStyle(style-&gt;style());
&gt; 
&gt; Does applyStyle ASSERT ! empty?  Or should this check just go into applyStyle?

I think this check is an optimization because we do check this condition in ApplyStyleCommand::doApply.  See http://trac.webkit.org/browser/trunk/WebCore/editing/ApplyStyleCommand.cpp#L599.  i.e. applyStyle shouldn&apos;t be doing anything when style-&gt;isEmpty() is true.

&gt;&gt; WebCore/editing/DeleteSelectionCommand.cpp:297
&gt;&gt; +    m_typingStyle = EditingStyle::create(positionBeforeTabSpan(m_selectionToDelete.start()));
&gt; 
&gt; I take it this is an editing style which does not include the typing style?

Yes.

&gt;&gt; WebCore/editing/EditingStyle.cpp:51
&gt;&gt; +: m_shouldUseFixedDefaultFontSize(false)
&gt; 
&gt; indent.

Will fix.

&gt;&gt; WebCore/editing/EditingStyle.cpp:56
&gt;&gt; +: m_shouldUseFixedDefaultFontSize(false)
&gt; 
&gt; again.

Will fix.

&gt;&gt; WebCore/editing/EditingStyle.cpp:131
&gt;&gt; +    m_mutableStyle-&gt;removeBlockProperties();
&gt; 
&gt; I would have probably just reversed this if since it&apos;s one line.

Will fix.

&gt;&gt; WebCore/editing/EditingStyle.cpp:146
&gt;&gt; +        Color color = Color(primitiveValue-&gt;getRGBA32Value());
&gt; 
&gt; This is the way we build colors from CSSPrimativeValues?  I would have expected there to be a function or constructor which did this.

I should have done:
if (!alphaChannel(primitiveValue-&gt;getRGBA32Value()))
  m_mutableStyle-&gt;removeProperty(CSSPropertyBackgroundColor, ec);

Will fix.

&gt;&gt; WebCore/editing/EditingStyle.h:78
&gt;&gt; +    void init(Node*);
&gt; 
&gt; What is the purpose of a separate init() call?  Generally we don&apos;t have separate init() in webkit.

Constructors that take Node and Position need to do the same initialization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288585</commentid>
    <comment_count>8</comment_count>
      <attachid>69541</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-01 17:03:01 -0700</bug_when>
    <thetext>Created attachment 69541
fixed more per Eric&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288586</commentid>
    <comment_count>9</comment_count>
      <attachid>69542</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-01 17:04:15 -0700</bug_when>
    <thetext>Created attachment 69542
fixed changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298170</commentid>
    <comment_count>10</comment_count>
      <attachid>69542</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-22 14:21:15 -0700</bug_when>
    <thetext>Comment on attachment 69542
fixed changelog

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

Generally looks OK, but curiosu to teh answers to above.

&gt; WebCore/editing/DeleteSelectionCommand.cpp:720
&gt; +    document()-&gt;frame()-&gt;selection()-&gt;setTypingStyle(m_typingStyle ? m_typingStyle-&gt;style() : 0);

Any time we&apos;re reaching into the style like this I&quot;m suspicious.
Since we&apos;re changing selection too, shouldn&apos;t we add a setTypingStyle method which takes an editing styel and deprecate the other one?

&gt; WebCore/editing/SelectionController.h:243
&gt; -    m_typingStyle.clear();
&gt; +    m_typingStyle-&gt;clear();

Why not m_typingstyle = 0?

&gt; WebCore/editing/SelectionController.h:248
&gt; -    m_typingStyle = style;
&gt; +    m_typingStyle-&gt;setStyle(style);

Seems odd to be reaching into the typeingstyle like this.  Will this go away?  Should this hav ea FIXME?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298183</commentid>
    <comment_count>11</comment_count>
      <attachid>69542</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-22 14:37:23 -0700</bug_when>
    <thetext>Comment on attachment 69542
fixed changelog

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

&gt; WebCore/editing/DeleteSelectionCommand.cpp:697
&gt; +    prepareEditingStyleToApplyAt(m_typingStyle-&gt;style(), m_endingPosition);
&gt; +    if (m_typingStyle-&gt;isEmpty())

oops, I should be calling prepareToApplyAt here.

&gt;&gt; WebCore/editing/DeleteSelectionCommand.cpp:720
&gt;&gt; +    document()-&gt;frame()-&gt;selection()-&gt;setTypingStyle(m_typingStyle ? m_typingStyle-&gt;style() : 0);
&gt; 
&gt; Any time we&apos;re reaching into the style like this I&quot;m suspicious.
&gt; Since we&apos;re changing selection too, shouldn&apos;t we add a setTypingStyle method which takes an editing styel and deprecate the other one?

Yeah, I&apos;ll add a version that takes EditingStyle.  I probably can&apos;t remove the old version because they&apos;re called in a bunch of other places.

&gt;&gt; WebCore/editing/SelectionController.h:243
&gt;&gt; +    m_typingStyle-&gt;clear();
&gt; 
&gt; Why not m_typingstyle = 0?

Because there are places we access m_typingStyle without a null check.

&gt;&gt; WebCore/editing/SelectionController.h:248
&gt;&gt; +    m_typingStyle-&gt;setStyle(style);
&gt; 
&gt; Seems odd to be reaching into the typeingstyle like this.  Will this go away?  Should this hav ea FIXME?

Yes, we should get rid of this version of setTypingStyle.  We should only have a version that takes EditingStyle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298245</commentid>
    <comment_count>12</comment_count>
      <attachid>71607</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-22 16:24:12 -0700</bug_when>
    <thetext>Created attachment 71607
fixed &amp; made it compile on TOT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302392</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-31 08:02:51 -0700</bug_when>
    <thetext>Attachment 71607 did not build on win:
Build output: http://queues.webkit.org/results/4847102</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304903</commentid>
    <comment_count>14</comment_count>
      <attachid>71607</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-04 15:07:47 -0700</bug_when>
    <thetext>Comment on attachment 71607
fixed &amp; made it compile on TOT

This looks to move us in a positive direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304906</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-04 15:11:13 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 71607 [details])
&gt; This looks to move us in a positive direction.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305039</commentid>
    <comment_count>16</comment_count>
      <attachid>73014</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-04 17:37:15 -0700</bug_when>
    <thetext>Created attachment 73014
fixed the crash on fast/events/keydown-function-keys.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305044</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-04 17:40:35 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=73014) [details]
&gt; fixed the crash on fast/events/keydown-function-keys.html

I&apos;m pretty sure this test didn&apos;t crash when I uploaded the original patch but the problem was with instantiating EditingStyle in the constructor of EditingStyle.  m_typingStyle somehow reset the ref counter of the mutable style to 0 after returning from EditingStyle::create.  Avoiding to instantiate EditingStyle inside SelectionController::SelectionController fixed this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305706</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-05 19:20:21 -0700</bug_when>
    <thetext>Eric, could you review new patch?  The change is very small I stopped instantiating EditingStyle in SelectionController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305795</commentid>
    <comment_count>19</comment_count>
      <attachid>73014</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-06 09:38:23 -0700</bug_when>
    <thetext>Comment on attachment 73014
fixed the crash on fast/events/keydown-function-keys.html

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

&gt; WebCore/editing/EditingStyle.cpp:118
&gt; +    m_mutableStyle = 0;

Should be nullptr rather than 0.

&gt; WebCore/editing/EditingStyle.cpp:149
&gt; +    RefPtr&lt;EditingStyle&gt; edtingStyle = EditingStyle::create(position);

Typo: &quot;edting style&quot;.

&gt; WebCore/editing/EditingStyle.h:43
&gt; +class EditingStyle : public RefCounted&lt;EditingStyle&gt; {

To me it seems unhelpful to have EditingStyle be a reference counted object. Since an editing style contains just one pointer to a reference counted object and one boolean, it seems it could instead be a normal copyable object with constructors instead of create functions. This would make it easier to program with.

&gt; WebCore/editing/EditingStyle.h:79
&gt; +    void removeTextFillAndStroleColorsIfNeeded(RenderStyle*);

Typo: &quot;strole colors&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305808</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-06 13:30:50 -0700</bug_when>
    <thetext>Thanks for the review as always!

(In reply to comment #19)
&gt; &gt; WebCore/editing/EditingStyle.cpp:118
&gt; &gt; +    m_mutableStyle = 0;
&gt; 
&gt; Should be nullptr rather than 0.

Used clear() instead.

&gt; Typo: &quot;edting style&quot;.

Fixed.

&gt; To me it seems unhelpful to have EditingStyle be a reference counted object. Since an editing style contains just one pointer to a reference counted object and one boolean, it seems it could instead be a normal copyable object with constructors instead of create functions. This would make it easier to program with.

I wrote in comment #1 as well but I have a plan to merge StyleChange and conversion table between CSS &amp; html elements in ApplyStyleCommand.cpp to this class.  So I suspect that it&apos;ll have more member variables and definitely more member functions.  I also wanted to make the transition from CSSMutableStyleDeclaration to EditingStyle easy, and since CSSMutableStyleDeclaration is a reference counted object, I made EditingStyle a reference counted object as well to make reviewing process easier.  However, I&apos;m happy to change it to a normal object once I migrated the other parts of editing code to use EditingStyle, and we concluded that reference counting is unnecessary.

&gt; Typo: &quot;strole colors&quot;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305812</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-06 14:20:13 -0700</bug_when>
    <thetext>Committed r71469: &lt;http://trac.webkit.org/changeset/71469&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68496</attachid>
            <date>2010-09-22 20:48:01 -0700</date>
            <delta_ts>2010-09-30 12:36:38 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>attempt-editing-style</filename>
            <type>text/plain</type>
            <size>53552</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24g
NjgwNTkpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MzAsMTMgKzkzMCwxMyBAQAogICAgIC8vIEEgbm9uLWVtcHR5IHBhcmFn
cmFwaCdzIHN0eWxlIGlzIG1vdmVkIHdoZW4gd2UgY29weSBhbmQgbW92ZSBpdC4gIFdlIGRvbid0
IG1vdmUgCiAgICAgLy8gYW55dGhpbmcgaWYgd2UncmUgZ2l2ZW4gYW4gZW1wdHkgcGFyYWdyYXBo
LCBidXQgYW4gZW1wdHkgcGFyYWdyYXBoIGNhbiBoYXZlIHN0eWxlCiAgICAgLy8gdG9vLCA8ZGl2
PjxiPjxicj48L2I+PC9kaXY+IGZvciBleGFtcGxlLiAgU2F2ZSBpdCBzbyB0aGF0IHdlIGNhbiBw
cmVzZXJ2ZSBpdCBsYXRlci4KLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IHN0eWxlSW5FbXB0eVBhcmFncmFwaDsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZUlu
RW1wdHlQYXJhZ3JhcGg7CiAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUgPT0gZW5kT2ZQ
YXJhZ3JhcGhUb01vdmUgJiYgcHJlc2VydmVTdHlsZSkgewotICAgICAgICBzdHlsZUluRW1wdHlQ
YXJhZ3JhcGggPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCksIEluY2x1ZGVUeXBpbmdTdHlsZSk7
CisgICAgICAgIHN0eWxlSW5FbXB0eVBhcmFncmFwaCA9IGVkaXRpbmdTdHlsZVdpdGhUeXBpbmdT
dHlsZShzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkpOwogICAgICAgICAv
LyBUaGUgbW92ZWQgcGFyYWdyYXBoIHNob3VsZCBhc3N1bWUgdGhlIGJsb2NrIHN0eWxlIG9mIHRo
ZSBkZXN0aW5hdGlvbi4KICAgICAgICAgc3R5bGVJbkVtcHR5UGFyYWdyYXBoLT5yZW1vdmVCbG9j
a1Byb3BlcnRpZXMoKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBGSVhNRSAoNTA5ODkzMSk6IFdl
IHNob3VsZCBhZGQgYSBuZXcgaW5zZXJ0IGFjdGlvbiAiV2ViVmlld0luc2VydEFjdGlvbk1vdmVk
IiBhbmQgY2FsbCBzaG91bGRJbnNlcnRGcmFnbWVudCBoZXJlLgogICAgIAogICAgIHNldEVuZGlu
Z1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0LCBlbmQsIERPV05TVFJFQU0pKTsKQEAg
LTk3Niw3ICs5NzYsNyBAQAogICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1wdHkg
cGFyYWdyYXBoLCByZXN0b3JlIHN0eWxlcyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBoIHRv
IHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBoLgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBhcmFn
cmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3JhcGgo
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgoZW5k
aW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogICAgIGlmIChzdHlsZUluRW1wdHlQYXJh
Z3JhcGggJiYgc2VsZWN0aW9uSXNFbXB0eVBhcmFncmFwaCkKLSAgICAgICAgYXBwbHlTdHlsZShz
dHlsZUluRW1wdHlQYXJhZ3JhcGguZ2V0KCkpOworICAgICAgICBhcHBseVN0eWxlKHN0eWxlSW5F
bXB0eVBhcmFncmFwaC0+c3R5bGUoKSk7CiAgICAgCiAgICAgaWYgKHByZXNlcnZlU2VsZWN0aW9u
ICYmIHN0YXJ0SW5kZXggIT0gLTEpIHsKICAgICAgICAgLy8gRnJhZ21lbnQgY3JlYXRpb24gKHVz
aW5nIGNyZWF0ZU1hcmt1cCkgaW5jb3JyZWN0bHkgdXNlcyByZWd1bGFyCkBAIC05OTgsNyArOTk4
LDcgQEAKICAgICBpZiAoIWVtcHR5TGlzdEl0ZW0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBBcHBseVN0eWxl
Q29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgp
LCBJbmNsdWRlVHlwaW5nU3R5bGUpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0g
ZWRpdGluZ1N0eWxlV2l0aFR5cGluZ1N0eWxlKGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkpOwog
CiAgICAgTm9kZSogbGlzdE5vZGUgPSBlbXB0eUxpc3RJdGVtLT5wYXJlbnROb2RlKCk7CiAgICAg
Ly8gRklYTUU6IENhbid0IHdlIGRvIHNvbWV0aGluZyBiZXR0ZXIgd2hlbiB0aGUgaW1tZWRpYXRl
IHBhcmVudCB3YXNuJ3QgYSBsaXN0IG5vZGU/CkBAIC0xMDQ3LDkgKzEwNDcsOSBAQAogICAgIGFw
cGVuZEJsb2NrUGxhY2Vob2xkZXIobmV3QmxvY2spOwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9uKG5ld0Jsb2NrLmdldCgpLCAwKSwgRE9XTlNUUkVBTSkp
OwogCi0gICAgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChzdHlsZS5nZXQoKSwgZW5kaW5n
U2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgaWYgKHN0eWxlLT5sZW5ndGgoKSkKLSAgICAgICAg
YXBwbHlTdHlsZShzdHlsZS5nZXQoKSk7CisgICAgc3R5bGUtPnByZXBhcmVBcHBsaWVkQXQoZW5k
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgaWYgKCFzdHlsZS0+aXNFbXB0eSgpKQorICAg
ICAgICBhcHBseVN0eWxlKHN0eWxlLT5zdHlsZSgpKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQuaAkocmV2aXNpb24gNjgwNTkpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRWRpdGluZ1N0eWxlOworCiBjbGFzcyBJ
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21t
YW5kIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JDb21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHVzZURlZmF1bHRQ
YXJhZ3JhcGhFbGVtZW50ID0gZmFsc2UpCkBAIC01MSw3ICs1Myw3IEBACiAKICAgICB2aXJ0dWFs
IGJvb2wgcHJlc2VydmVzVHlwaW5nU3R5bGUoKSBjb25zdDsKIAotICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBt
X3N0eWxlOwogICAgIAogICAgIGJvb2wgbV9tdXN0VXNlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQ7
CiB9OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAkocmV2aXNp
b24gNjgwNTkpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDI3ICs1OSwyNyBAQAogICAgIC8vIEdldCB0aGUgZGVmYXVsdCBz
dHlsZSBmb3IgdGhpcyBlZGl0YWJsZSByb290LCBpdCdzIHRoZSBzdHlsZSB0aGF0IHdlJ2xsIGdp
dmUgdGhlCiAgICAgLy8gY29udGVudCB0aGF0IHdlJ3JlIG9wZXJhdGluZyBvbi4KICAgICBOb2Rl
KiByb290ID0gZnJhbWUtPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkZWZhdWx0U3R5bGUgPSBBcHBseVN0
eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihyb290LCAwKSk7Cisg
ICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gZGVmYXVsdFN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVh
dGUocm9vdCk7CiAKICAgICAvLyBEZWxldGUgdGhlIHNlbGVjdGVkIGNvbnRlbnQuCiAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGxlYXZlIHRoaXMgdG8gaW5zZXJ0VGV4dCwgYnV0
IGl0cyBkZWxldGUgb3BlcmF0aW9uCiAgICAgLy8gZG9lc24ndCBwcmVzZXJ2ZSB0aGUgc3R5bGUg
d2UncmUgYWJvdXQgdG8gc2V0LgogICAgIGRlbGV0ZVNlbGVjdGlvbigpOwotICAgIAorCiAgICAg
Ly8gRGVsZXRlIGRvZXNuJ3QgcmVtb3ZlIGZ1bGx5IHNlbGVjdGVkIGxpc3RzLgogICAgIHdoaWxl
IChicmVha091dE9mRW1wdHlMaXN0SXRlbSgpKQogICAgICAgICA7Ci0gICAgCisKICAgICAvLyBJ
ZiB0aGUgc2VsZWN0aW9uIHdhcyBhbGwgZm9ybWF0dGluZyAobGlrZSBhbiBlbXB0eSBsaXN0KSB0
aGUgZm9ybWF0LWxlc3MgdGV4dCB3aWxsIAogICAgIC8vIGJlIGVtcHR5LiBFYXJseSByZXR1cm4g
c2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgb2YgdGhlIHdvcmsgdGhhdCBmb2xsb3dzIGFu
ZAogICAgIC8vIHRvIGF2b2lkIHRoZSBBU1NFUlQgdGhhdCBmaXJlcyBpZiBpbnB1dCguLi4pIGlz
IGNhbGxlZCB3aXRoIGFuIGVtcHR5IFN0cmluZy4KICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gSW5zZXJ0IHRoZSBjb250ZW50IHdpdGgg
dGhlIGRlZmF1bHQgc3R5bGUuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81Nzk0MzgyPiBS
ZW1vdmVGb3JtYXQgZG9lc24ndCBhbHdheXMgcmVzZXQgdGV4dCBhbGlnbm1lbnQKLSAgICBmcmFt
ZS0+c2VsZWN0aW9uKCktPnNldFR5cGluZ1N0eWxlKGRlZmF1bHRTdHlsZS5yZWxlYXNlKCkpOwot
ICAgIAorICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0VHlwaW5nU3R5bGUoZGVmYXVsdFN0eWxl
LT5zdHlsZSgpKTsKKwogICAgIGlucHV0VGV4dChzdHJpbmcsIHRydWUpOwogfQogCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDY4MDU5KQor
KysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEVkaXRp
bmdTdHlsZTsKKwogY2xhc3MgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBDb21wb3Np
dGVFZGl0Q29tbWFuZCB7IAogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgc21hcnREZWxl
dGUgPSBmYWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBs
YWNlID0gZmFsc2UsIGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzID0gZmFsc2UpCkBAIC04
Niw4ICs4OCw4IEBACiAgICAgUG9zaXRpb24gbV90cmFpbGluZ1doaXRlc3BhY2U7CiAgICAgUmVm
UHRyPE5vZGU+IG1fc3RhcnRCbG9jazsKICAgICBSZWZQdHI8Tm9kZT4gbV9lbmRCbG9jazsKLSAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fdHlwaW5nU3R5bGU7Ci0gICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX2RlbGV0ZUludG9CbG9ja3F1b3Rl
U3R5bGU7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbV90eXBpbmdTdHlsZTsKKyAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGU7CiAgICAgUmVmUHRy
PE5vZGU+IG1fc3RhcnRSb290OwogICAgIFJlZlB0cjxOb2RlPiBtX2VuZFJvb3Q7CiAgICAgUmVm
UHRyPE5vZGU+IG1fc3RhcnRUYWJsZVJvdzsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNjgwNTkpCisrKyBXZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzcsMTYg
KzU3NywxNSBAQAogICAgIE5vZGUqIHNvdXJjZURvY3VtZW50U3R5bGVTcGFuID0gdG9wTm9kZTsK
ICAgICBSZWZQdHI8Tm9kZT4gY29waWVkUmFuZ2VTdHlsZVNwYW4gPSBzb3VyY2VEb2N1bWVudFN0
eWxlU3Bhbi0+Zmlyc3RDaGlsZCgpOwogCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZUF0SW5zZXJ0aW9uUG9zID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdT
dHlsZUF0UG9zaXRpb24ocmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KGluc2VydGlvblBvcykpOwor
ICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlQXRJbnNlcnRpb25Qb3MgPSBFZGl0aW5nU3R5
bGU6OmNyZWF0ZShyYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoaW5zZXJ0aW9uUG9zKSk7CisgICAg
U3RyaW5nIHN0eWxlVGV4dCA9IHN0eWxlQXRJbnNlcnRpb25Qb3MtPnN0eWxlKCktPmNzc1RleHQo
KTsKIAotICAgIFN0cmluZyBzdHlsZVRleHQgPSBzdHlsZUF0SW5zZXJ0aW9uUG9zLT5jc3NUZXh0
KCk7Ci0gICAgCiAgICAgaWYgKHN0eWxlVGV4dCA9PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oc291
cmNlRG9jdW1lbnRTdHlsZVNwYW4pLT5nZXRBdHRyaWJ1dGUoc3R5bGVBdHRyKSkgewogICAgICAg
ICBmcmFnbWVudC5yZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHNvdXJjZURvY3VtZW50U3R5
bGVTcGFuKTsKICAgICAgICAgaWYgKCFpc1N0eWxlU3Bhbihjb3BpZWRSYW5nZVN0eWxlU3Bhbi5n
ZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAg
aWYgKGlzU3R5bGVTcGFuKGNvcGllZFJhbmdlU3R5bGVTcGFuLmdldCgpKSAmJiBzdHlsZVRleHQg
PT0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGNvcGllZFJhbmdlU3R5bGVTcGFuLmdldCgpKS0+Z2V0
QXR0cmlidXRlKHN0eWxlQXR0cikpIHsKICAgICAgICAgZnJhZ21lbnQucmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbihjb3BpZWRSYW5nZVN0eWxlU3Bhbi5nZXQoKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtNjI3LDI4ICs2MjYsMTkgQEAKICAgICBpZiAoIXNvdXJjZURvY3VtZW50U3R5
bGVTcGFuKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gc291cmNlRG9jdW1lbnRTdHlsZSA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4oc291cmNlRG9jdW1lbnRTdHlsZVNwYW4pLT5nZXRJbmxpbmVTdHlsZURlY2woKS0+
Y29weSgpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHNvdXJjZURvY3VtZW50U3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KHNvdXJjZURvY3Vt
ZW50U3R5bGVTcGFuKS0+Z2V0SW5saW5lU3R5bGVEZWNsKCkpOwogICAgIE5vZGUqIGNvbnRleHQg
PSBzb3VyY2VEb2N1bWVudFN0eWxlU3Bhbi0+cGFyZW50Tm9kZSgpOwogICAgIAogICAgIC8vIElm
IE1haWwgd3JhcHMgdGhlIGZyYWdtZW50IHdpdGggYSBQYXN0ZSBhcyBRdW90YXRpb24gYmxvY2tx
dW90ZSwgb3IgaWYgeW91J3JlIHBhc3RpbmcgaW50byBhIHF1b3RlZCByZWdpb24sCiAgICAgLy8g
c3R5bGVzIGZyb20gYmxvY2txdW90ZU5vZGUgYXJlIGFsbG93ZWQgdG8gb3ZlcnJpZGUgdGhvc2Ug
ZnJvbSB0aGUgc291cmNlIGRvY3VtZW50LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5MzA5ODY+IGFu
ZCA8cmRhcjovL3Byb2JsZW0vNTA4OTMyNz4uCiAgICAgTm9kZSogYmxvY2txdW90ZU5vZGUgPSBp
c01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb250ZXh0KSA/IGNvbnRleHQgOiBuZWFyZXN0TWFp
bEJsb2NrcXVvdGUoY29udGV4dCk7CiAgICAgaWYgKGJsb2NrcXVvdGVOb2RlKSB7Ci0gICAgICAg
IFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gYmxvY2txdW90ZVN0eWxlID0gQXBw
bHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24oYmxvY2txdW90
ZU5vZGUsIDApKTsKLSAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBw
YXJlbnRTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBv
c2l0aW9uKGJsb2NrcXVvdGVOb2RlLT5wYXJlbnROb2RlKCksIDApKTsKLSAgICAgICAgcGFyZW50
U3R5bGUtPmRpZmYoYmxvY2txdW90ZVN0eWxlLmdldCgpKTsKLQotICAgICAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYmxvY2txdW90ZVN0eWxlLT5l
bmQoKTsKLSAgICAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBibG9ja3F1b3RlU3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gKml0OwotICAgICAgICAg
ICAgc291cmNlRG9jdW1lbnRTdHlsZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHkuaWQoKSk7Ci0g
ICAgICAgIH0gICAgICAgIAotCisgICAgICAgIHNvdXJjZURvY3VtZW50U3R5bGUtPnJlbW92ZVBy
b3BlcnRpZXNQcmVzZW50SW4oZWRpdGluZ1N0eWxlQWRkZWRCeU5vZGUoYmxvY2txdW90ZU5vZGUp
LT5zdHlsZSgpKTsKICAgICAgICAgY29udGV4dCA9IGJsb2NrcXVvdGVOb2RlLT5wYXJlbnROb2Rl
KCk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBvcGVyYXRpb24gcmVxdWlyZXMgdGhhdCBvbmx5IGVk
aXRpbmcgc3R5bGVzIHRvIGJlIHJlbW92ZWQgZnJvbSBzb3VyY2VEb2N1bWVudFN0eWxlLgotICAg
IHByZXBhcmVFZGl0aW5nU3R5bGVUb0FwcGx5QXQoc291cmNlRG9jdW1lbnRTdHlsZS5nZXQoKSwg
UG9zaXRpb24oY29udGV4dCwgMCkpOworICAgIHNvdXJjZURvY3VtZW50U3R5bGUtPnByZXBhcmVB
cHBsaWVkQXQoUG9zaXRpb24oY29udGV4dCwgMCkpOwogCiAgICAgLy8gUmVtb3ZlIGJsb2NrIHBy
b3BlcnRpZXMgaW4gdGhlIHNwYW4ncyBzdHlsZS4gVGhpcyBwcmV2ZW50cyBwcm9wZXJ0aWVzIHRo
YXQgcHJvYmFibHkgaGF2ZSBubyBlZmZlY3QgCiAgICAgLy8gY3VycmVudGx5IGZyb20gYWZmZWN0
aW5nIGJsb2NrcyBsYXRlciBpZiB0aGUgc3R5bGUgaXMgY2xvbmVkIGZvciBhIG5ldyBibG9jayBl
bGVtZW50IGR1cmluZyBhIGZ1dHVyZSAKQEAgLTY1OSw3ICs2NDksNyBAQAogICAgIAogICAgIC8v
IFRoZSBzdHlsZXMgb24gc291cmNlRG9jdW1lbnRTdHlsZVNwYW4gYXJlIGFsbCByZWR1bmRhbnQs
IGFuZCB0aGVyZSBpcyBubyBjb3BpZWRSYW5nZVN0eWxlU3BhbgogICAgIC8vIHRvIGNvbnNpZGVy
LiAgV2UncmUgZmluaXNoZWQuCi0gICAgaWYgKHNvdXJjZURvY3VtZW50U3R5bGUtPmxlbmd0aCgp
ID09IDAgJiYgIWNvcGllZFJhbmdlU3R5bGVTcGFuKSB7CisgICAgaWYgKHNvdXJjZURvY3VtZW50
U3R5bGUtPmlzRW1wdHkoKSAmJiAhY29waWVkUmFuZ2VTdHlsZVNwYW4pIHsKICAgICAgICAgcmVt
b3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihzb3VyY2VEb2N1bWVudFN0eWxlU3Bhbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC02NjcsMzggKzY1NywzNiBAQAogICAgIC8vIFRoZXJlIGFy
ZSBub24tcmVkdW5kYW50IHN0eWxlcyBvbiBzb3VyY2VEb2N1bWVudFN0eWxlU3BhbiwgYnV0IHRo
ZXJlIGlzIG5vCiAgICAgLy8gY29waWVkUmFuZ2VTdHlsZVNwYW4uICBSZW1vdmUgdGhlIHNwYW4s
IGJlY2F1c2UgaXQgY291bGQgYmUgc3Vycm91bmRpbmcgYmxvY2sgZWxlbWVudHMsCiAgICAgLy8g
YW5kIGFwcGx5IHRoZSBzdHlsZXMgdG8gaXRzIGNoaWxkcmVuLgotICAgIGlmIChzb3VyY2VEb2N1
bWVudFN0eWxlLT5sZW5ndGgoKSA+IDAgJiYgIWNvcGllZFJhbmdlU3R5bGVTcGFuKSB7Ci0gICAg
ICAgIGNvcHlTdHlsZVRvQ2hpbGRyZW4oc291cmNlRG9jdW1lbnRTdHlsZVNwYW4sIHNvdXJjZURv
Y3VtZW50U3R5bGUuZ2V0KCkpOyAKKyAgICBpZiAoIXNvdXJjZURvY3VtZW50U3R5bGUtPmlzRW1w
dHkoKSAmJiAhY29waWVkUmFuZ2VTdHlsZVNwYW4pIHsKKyAgICAgICAgY29weVN0eWxlVG9DaGls
ZHJlbihzb3VyY2VEb2N1bWVudFN0eWxlU3Bhbiwgc291cmNlRG9jdW1lbnRTdHlsZS0+c3R5bGUo
KSk7IAogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHNvdXJjZURvY3VtZW50
U3R5bGVTcGFuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcGllZFJhbmdlU3R5bGUgPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KGNvcGllZFJhbmdlU3R5bGVTcGFuKS0+Z2V0SW5saW5lU3R5bGVEZWNsKCkt
PmNvcHkoKTsKLSAgICAKKworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGNvcGllZFJhbmdlU3R5
bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGNvcGll
ZFJhbmdlU3R5bGVTcGFuKS0+Z2V0SW5saW5lU3R5bGVEZWNsKCkpOworCiAgICAgLy8gV2UncmUg
Z29pbmcgdG8gcHV0IHNvdXJjZURvY3VtZW50U3R5bGVTcGFuJ3Mgbm9uLXJlZHVuZGFudCBzdHls
ZXMgb250byBjb3BpZWRSYW5nZVN0eWxlU3BhbiwKICAgICAvLyBhcyBsb25nIGFzIHRoZXkgYXJl
bid0IG92ZXJyaWRkZW4gYnkgb25lcyBvbiBjb3BpZWRSYW5nZVN0eWxlU3Bhbi4KLSAgICBzb3Vy
Y2VEb2N1bWVudFN0eWxlLT5tZXJnZShjb3BpZWRSYW5nZVN0eWxlLmdldCgpLCB0cnVlKTsKKyAg
ICBzb3VyY2VEb2N1bWVudFN0eWxlLT5tZXJnZUFuZE92ZXJyaWRlV2l0aChjb3BpZWRSYW5nZVN0
eWxlLmdldCgpKTsKICAgICBjb3BpZWRSYW5nZVN0eWxlID0gc291cmNlRG9jdW1lbnRTdHlsZTsK
LSAgICAKKwogICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oc291cmNlRG9jdW1lbnRT
dHlsZVNwYW4pOwotICAgIAorCiAgICAgLy8gUmVtb3ZlIHJlZHVuZGFudCBzdHlsZXMuCiAgICAg
Y29udGV4dCA9IGNvcGllZFJhbmdlU3R5bGVTcGFuLT5wYXJlbnROb2RlKCk7Ci0gICAgcHJlcGFy
ZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChjb3BpZWRSYW5nZVN0eWxlLmdldCgpLCBQb3NpdGlvbihj
b250ZXh0LCAwKSk7Ci0KLSAgICAvLyBTZWUgdGhlIGNvbW1lbnRzIGFib3ZlIGFib3V0IHJlbW92
aW5nIGJsb2NrIHByb3BlcnRpZXMuCisgICAgY29waWVkUmFuZ2VTdHlsZS0+cHJlcGFyZUFwcGxp
ZWRBdChQb3NpdGlvbihjb250ZXh0LCAwKSk7CiAgICAgY29waWVkUmFuZ2VTdHlsZS0+cmVtb3Zl
QmxvY2tQcm9wZXJ0aWVzKCk7CiAKICAgICAvLyBBbGwgdGhlIHN0eWxlcyBvbiBjb3BpZWRSYW5n
ZVN0eWxlU3BhbiBhcmUgcmVkdW5kYW50LCByZW1vdmUgaXQuCi0gICAgaWYgKGNvcGllZFJhbmdl
U3R5bGUtPmxlbmd0aCgpID09IDApIHsKKyAgICBpZiAoY29waWVkUmFuZ2VTdHlsZS0+aXNFbXB0
eSgpKSB7CiAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oY29waWVkUmFuZ2VT
dHlsZVNwYW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgLy8gQ2xlYXIg
dGhlIHJlZHVuZGFudCBzdHlsZXMgZnJvbSB0aGUgc3BhbidzIHN0eWxlIGF0dHJpYnV0ZS4KICAg
ICAvLyBGSVhNRTogSWYgZm9udC1mYW1pbHk6LXdlYmtpdC1tb25vc3BhY2UgaXMgbm9uLXJlZHVu
ZGFudCwgdGhlbiB0aGUgZm9udC1zaXplIHNob3VsZCBzdGF5LCBldmVuIGlmIGl0CiAgICAgLy8g
YXBwZWFycyByZWR1bmRhbnQuCi0gICAgc2V0Tm9kZUF0dHJpYnV0ZShzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4oY29waWVkUmFuZ2VTdHlsZVNwYW4pLCBzdHlsZUF0dHIsIGNvcGllZFJhbmdlU3R5bGUt
PmNzc1RleHQoKSk7CisgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
Y29waWVkUmFuZ2VTdHlsZVNwYW4pLCBzdHlsZUF0dHIsIGNvcGllZFJhbmdlU3R5bGUtPnN0eWxl
KCktPmNzc1RleHQoKSk7CiB9CiAKIC8vIFRha2UgdGhlIHN0eWxlIGF0dHJpYnV0ZSBvZiBhIHNw
YW4gYW5kIGFwcGx5IGl0IHRvIGl0J3MgY2hpbGRyZW4gaW5zdGVhZC4gIFRoaXMgYWxsb3dzIHVz
IHRvCkBAIC03OTIsMTAgKzc4MCwxMCBAQAogICAgIAogICAgIGlmIChwZXJmb3JtVHJpdmlhbFJl
cGxhY2UoZnJhZ21lbnQpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBpZiAobV9tYXRj
aFN0eWxlKQotICAgICAgICBtX2luc2VydGlvblN0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVk
aXRpbmdTdHlsZUF0UG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCksIEluY2x1ZGVUeXBpbmdTdHls
ZSk7Ci0gICAgCisgICAgICAgIG1faW5zZXJ0aW9uU3R5bGUgPSBlZGl0aW5nU3R5bGVXaXRoVHlw
aW5nU3R5bGUoc2VsZWN0aW9uLnN0YXJ0KCkpOworCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVTdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZUVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CiAgICAgCkBAIC0xMTQ2LDcgKzEx
MzQsNyBAQAogCiAgICAgICAgIGlmIChtX21hdGNoU3R5bGUpIHsKICAgICAgICAgICAgIEFTU0VS
VChtX2luc2VydGlvblN0eWxlKTsKLSAgICAgICAgICAgIGFwcGx5U3R5bGUobV9pbnNlcnRpb25T
dHlsZS5nZXQoKSwgc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBhcHBseVN0eWxlKG1faW5zZXJ0
aW9uU3R5bGUtPnN0eWxlKCksIHN0YXJ0LCBlbmQpOwogICAgICAgICB9ICAgIAogICAgICAgICAK
ICAgICAgICAgaWYgKGxhc3RQb3NpdGlvblRvU2VsZWN0LmlzTm90TnVsbCgpKQpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAJKHJldmlzaW9uIDY4MDU5KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyNTEsMTggKzMyNTEsMTcgQEAKIAogICAgIFJlZlB0cjxFbGVt
ZW50PiBzdHlsZUVsZW1lbnQgPSBlbGVtZW50OwogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24+IHN0eWxlID0gY29tcHV0ZWRTdHlsZShzdHlsZUVsZW1lbnQucmVsZWFzZSgp
KTsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG11dGFibGVTdHlsZSA9
IHN0eWxlLT5jb3B5KCk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbXV0YWJsZVN0eWxlID0g
RWRpdGluZ1N0eWxlOjpjcmVhdGUoc3R5bGUuZ2V0KCkpOwogICAgIHNob3VsZFVzZUZpeGVkRm9u
dERlZmF1bHRTaXplID0gc3R5bGUtPnVzZUZpeGVkRm9udERlZmF1bHRTaXplKCk7CiAKICAgICBp
ZiAoIW1fZnJhbWUtPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpKQotICAgICAgICByZXR1cm4g
bXV0YWJsZVN0eWxlOworICAgICAgICByZXR1cm4gbXV0YWJsZVN0eWxlLT5zdHlsZSgpOwogCi0g
ICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiB0eXBpbmdTdHlsZSA9IG1fZnJh
bWUtPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpLT5jb3B5KCk7Ci0gICAgQXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzKHR5cGluZ1N0eWxlLmdldCgpKTsKLSAg
ICBwcmVwYXJlRWRpdGluZ1N0eWxlVG9BcHBseUF0KHR5cGluZ1N0eWxlLmdldCgpLCBwb3NpdGlv
bik7Ci0gICAgbXV0YWJsZVN0eWxlLT5tZXJnZSh0eXBpbmdTdHlsZS5nZXQoKSk7CisgICAgUmVm
UHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX2Zy
YW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKSk7CisgICAgdHlwaW5nU3R5bGUtPnByZXBh
cmVBcHBsaWVkQXQocG9zaXRpb24sIEVkaXRpbmdTdHlsZTo6T25seUluaGVyaXRhYmxlUHJvcGVy
dGllcyk7CisgICAgbXV0YWJsZVN0eWxlLT5tZXJnZUFuZE92ZXJyaWRlV2l0aCh0eXBpbmdTdHls
ZS5nZXQoKSk7CiAKLSAgICByZXR1cm4gbXV0YWJsZVN0eWxlOworICAgIHJldHVybiBtdXRhYmxl
U3R5bGUtPnN0eWxlKCk7CiB9CiAKIHZvaWQgRWRpdG9yOjp0ZXh0RmllbGREaWRCZWdpbkVkaXRp
bmcoRWxlbWVudCogZSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAko
cmV2aXNpb24gNjgwNTkpCisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFNlbGVjdGlvbkNvbnRy
b2xsZXJfaAogI2RlZmluZSBTZWxlY3Rpb25Db250cm9sbGVyX2gKIAotI2luY2x1ZGUgIkNTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVo
YXZpb3IuaCIKQEAgLTM3LDYgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RnJhbWU7CitjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKIGNsYXNzIFJlbmRlck9iamVjdDsKQEAg
LTIxNCw3ICsyMTUsNyBAQAogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb247CiAgICAg
VGV4dEdyYW51bGFyaXR5IG1fZ3JhbnVsYXJpdHk7CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IG1fdHlwaW5nU3R5bGU7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4g
bV90eXBpbmdTdHlsZTsKIAogICAgIFRpbWVyPFNlbGVjdGlvbkNvbnRyb2xsZXI+IG1fY2FyZXRC
bGlua1RpbWVyOwogCkBAIC0yMzQsMTcgKzIzNSwxNyBAQAogCiBpbmxpbmUgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnR5cGluZ1N0eWxlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV90eXBpbmdTdHlsZS5nZXQoKTsKKyAgICByZXR1cm4gbV90eXBpbmdT
dHlsZS0+c3R5bGUoKTsKIH0KIAogaW5saW5lIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xl
YXJUeXBpbmdTdHlsZSgpCiB7Ci0gICAgbV90eXBpbmdTdHlsZS5jbGVhcigpOworICAgIG1fdHlw
aW5nU3R5bGUtPmNsZWFyKCk7CiB9CiAKIGlubGluZSB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OnNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0
eWxlKQogewotICAgIG1fdHlwaW5nU3R5bGUgPSBzdHlsZTsKKyAgICBtX3R5cGluZ1N0eWxlLT5z
ZXRTdHlsZShzdHlsZSk7CiB9CiAKICNpZiAhKFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RL
KSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiA2ODA1OSkKKysrIFdlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODMsMjMgKzk4Myw2IEBACiAgICAgcmV0
dXJuIHNwZWNpYWxDb21tb25BbmNlc3RvcjsKIH0KIAotc3RhdGljIHZvaWQgcmVtb3ZlRW5jbG9z
aW5nTWFpbEJsb2NrcXVvdGVTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUs
IE5vZGUqIG5vZGUpCi17Ci0gICAgTm9kZSogYmxvY2txdW90ZSA9IG5lYXJlc3RNYWlsQmxvY2tx
dW90ZShub2RlKTsKLSAgICBpZiAoIWJsb2NrcXVvdGUgfHwgIWJsb2NrcXVvdGUtPnBhcmVudE5v
ZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVtb3ZlU3R5bGVzQWRkZWRCeU5vZGUoc3R5
bGUsIGJsb2NrcXVvdGUpOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVEZWZhdWx0U3R5bGVzKENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50KQotewot
ICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChzdHlsZSwgUG9z
aXRpb24oZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAwKSk7Ci19Ci0KIC8vIEZJWE1FOiBT
aG91bGRuJ3Qgd2Ugb21pdCBzdHlsZSBpbmZvIHdoZW4gYW5ub3RhdGUgPT0gRG9Ob3RBbm5vdGF0
ZUZvckludGVyY2hhbmdlPyAKIC8vIEZJWE1FOiBBdCBsZWFzdCwgYW5ub3RhdGlvbiBhbmQgc3R5
bGUgaW5mbyBzaG91bGQgcHJvYmFibHkgbm90IGJlIGluY2x1ZGVkIGluIHJhbmdlLm1hcmt1cFN0
cmluZygpCiBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgVmVjdG9yPE5v
ZGUqPiogbm9kZXMsIEVBbm5vdGF0ZUZvckludGVyY2hhbmdlIHNob3VsZEFubm90YXRlLCBib29s
IGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIEVBYnNvbHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMp
CkBAIC0xMTA4LDM0ICsxMDkxLDM0IEBACiAgICAgLy8gQWRkIGEgd3JhcHBlciBzcGFuIHdpdGgg
dGhlIHN0eWxlcyB0aGF0IGFsbCBvZiB0aGUgbm9kZXMgaW4gdGhlIG1hcmt1cCBpbmhlcml0Lgog
ICAgIE5vZGUqIHBhcmVudE9mTGFzdENsb3NlZCA9IGxhc3RDbG9zZWQgPyBsYXN0Q2xvc2VkLT5w
YXJlbnROb2RlKCkgOiAwOwogICAgIGlmIChwYXJlbnRPZkxhc3RDbG9zZWQgJiYgcGFyZW50T2ZM
YXN0Q2xvc2VkLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gc3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3Np
dGlvbihQb3NpdGlvbihwYXJlbnRPZkxhc3RDbG9zZWQsIDApKTsKKyAgICAgICAgUmVmUHRyPEVk
aXRpbmdTdHlsZT4gc3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwYXJlbnRPZkxhc3RDbG9z
ZWQpOwogCiAgICAgICAgIC8vIFN0eWxlcyB0aGF0IE1haWwgYmxvY2txdW90ZXMgY29udHJpYnV0
ZSBzaG91bGQgb25seSBiZSBwbGFjZWQgb24gdGhlIE1haWwgYmxvY2txdW90ZSwgdG8gaGVscAog
ICAgICAgICAvLyB1cyBkaWZmZXJlbnRpYXRlIHRob3NlIHN0eWxlcyBmcm9tIG9uZXMgdGhhdCB0
aGUgdXNlciBoYXMgYXBwbGllZC4gIFRoaXMgaGVscHMgdXMKICAgICAgICAgLy8gZ2V0IHRoZSBj
b2xvciBvZiBjb250ZW50IHBhc3RlZCBpbnRvIGJsb2NrcXVvdGVzIHJpZ2h0LgotICAgICAgICBy
ZW1vdmVFbmNsb3NpbmdNYWlsQmxvY2txdW90ZVN0eWxlKHN0eWxlLmdldCgpLCBwYXJlbnRPZkxh
c3RDbG9zZWQpOwotICAgICAgICAKKyAgICAgICAgc3R5bGUtPnJlbW92ZVN0eWxlQWRkZWRCeU5v
ZGUobmVhcmVzdE1haWxCbG9ja3F1b3RlKHBhcmVudE9mTGFzdENsb3NlZCkpOworCiAgICAgICAg
IC8vIERvY3VtZW50IGRlZmF1bHQgc3R5bGVzIHdpbGwgYmUgYWRkZWQgb24gYW5vdGhlciB3cmFw
cGVyIHNwYW4uCi0gICAgICAgIHJlbW92ZURlZmF1bHRTdHlsZXMoc3R5bGUuZ2V0KCksIGRvY3Vt
ZW50KTsKLSAgICAgICAgCisgICAgICAgIHN0eWxlLT5wcmVwYXJlQXBwbGllZEF0KFBvc2l0aW9u
KGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgMCkpOworCiAgICAgICAgIC8vIFNpbmNlIHdl
IGFyZSBjb252ZXJ0aW5nIGJsb2NrcyB0byBpbmxpbmVzLCByZW1vdmUgYW55IGluaGVyaXRlZCBi
bG9jayBwcm9wZXJ0aWVzIHRoYXQgYXJlIGluIHRoZSBzdHlsZS4KICAgICAgICAgLy8gVGhpcyBj
dXRzIG91dCBtZWFuaW5nbGVzcyBwcm9wZXJ0aWVzIGFuZCBwcmV2ZW50cyBwcm9wZXJ0aWVzIGZy
b20gbWFnaWNhbGx5IGFmZmVjdGluZyBibG9ja3MgbGF0ZXIKICAgICAgICAgLy8gaWYgdGhlIHN0
eWxlIGlzIGNsb25lZCBmb3IgYSBuZXcgYmxvY2sgZWxlbWVudCBkdXJpbmcgYSBmdXR1cmUgZWRp
dGluZyBvcGVyYXRpb24uCiAgICAgICAgIGlmIChjb252ZXJ0QmxvY2tzVG9JbmxpbmVzKQogICAg
ICAgICAgICAgc3R5bGUtPnJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogCi0gICAgICAgIGlmIChz
dHlsZS0+bGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgYWNjdW11bGF0b3Iud3JhcFdpdGhTdHls
ZU5vZGUoc3R5bGUuZ2V0KCksIGRvY3VtZW50KTsKKyAgICAgICAgaWYgKCFzdHlsZS0+aXNFbXB0
eSgpKQorICAgICAgICAgICAgYWNjdW11bGF0b3Iud3JhcFdpdGhTdHlsZU5vZGUoc3R5bGUtPnN0
eWxlKCksIGRvY3VtZW50KTsKICAgICB9CiAgICAgCiAgICAgaWYgKGxhc3RDbG9zZWQgJiYgbGFz
dENsb3NlZCAhPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKICAgICAgICAgLy8gQWRk
IGEgc3R5bGUgc3BhbiB3aXRoIHRoZSBkb2N1bWVudCdzIGRlZmF1bHQgc3R5bGVzLiAgV2UgYWRk
IHRoZXNlIGluIGEgc2VwYXJhdGUKICAgICAgICAgLy8gc3BhbiBzbyB0aGF0IGF0IHBhc3RlIHRp
bWUgd2UgY2FuIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBkb2N1bWVudCBkZWZhdWx0cyBhbmQgdXNl
cgogICAgICAgICAvLyBhcHBsaWVkIHN0eWxlcy4KLSAgICAgICAgUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBkZWZhdWx0U3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGlu
Z1N0eWxlQXRQb3NpdGlvbihQb3NpdGlvbihkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAp
KTsKKyAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gZGVmYXVsdFN0eWxlID0gRWRpdGluZ1N0
eWxlOjpjcmVhdGUoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKTsKIAotICAgICAgICBpZiAo
ZGVmYXVsdFN0eWxlLT5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICBhY2N1bXVsYXRvci53cmFw
V2l0aFN0eWxlTm9kZShkZWZhdWx0U3R5bGUuZ2V0KCksIGRvY3VtZW50KTsKKyAgICAgICAgaWYg
KCFkZWZhdWx0U3R5bGUtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLndyYXBX
aXRoU3R5bGVOb2RlKGRlZmF1bHRTdHlsZS0+c3R5bGUoKSwgZG9jdW1lbnQpOwogICAgIH0KIAog
ICAgIC8vIEZJWE1FOiBUaGUgaW50ZXJjaGFuZ2UgbmV3bGluZSBzaG91bGQgYmUgcGxhY2VkIGlu
IHRoZSBibG9jayB0aGF0IGl0J3MgaW4sIG5vdCBhZnRlciBhbGwgb2YgdGhlIGNvbnRlbnQsIHVu
Y29uZGl0aW9uYWxseS4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5o
IgorCisjaW5jbHVkZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKKyNpbmNsdWRlICJDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAK
Ky8vIEVkaXRpbmcgc3R5bGUgcHJvcGVydGllcyBtdXN0IGJlIHByZXNlcnZlZCBkdXJpbmcgZWRp
dGluZyBvcGVyYXRpb24uCisvLyBlLmcuIHdoZW4gYSB1c2VyIGluc2VydHMgYSBuZXcgcGFyYWdy
YXBoLCBhbGwgcHJvcGVydGllcyBsaXN0ZWQgaGVyZSBtdXN0IGJlIGNvcGllZCB0byB0aGUgbmV3
IHBhcmFncmFwaC4KKy8vIEZJWE1FOiBUaGUgY3VycmVudCBlZGl0aW5nU3R5bGVQcm9wZXJ0aWVz
IGNvbnRhaW5zIGFsbCBpbmhlcml0YWJsZVByb3BlcnRpZXMgYnV0IHdlIG1heSBub3QgbmVlZCB0
byBwcmVzZXJ2ZSBhbGwgaW5oZXJpdGFibGUgcHJvcGVydGllcworc3RhdGljIGNvbnN0IGludCBl
ZGl0aW5nU3R5bGVQcm9wZXJ0aWVzW10gPSB7CisgICAgLy8gQ1NTIGluaGVyaXRhYmxlIHByb3Bl
cnRpZXMKKyAgICBDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNlLAorICAgIENTU1Byb3BlcnR5Q29s
b3IsCisgICAgQ1NTUHJvcGVydHlGb250RmFtaWx5LAorICAgIENTU1Byb3BlcnR5Rm9udFNpemUs
CisgICAgQ1NTUHJvcGVydHlGb250U3R5bGUsCisgICAgQ1NTUHJvcGVydHlGb250VmFyaWFudCwK
KyAgICBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsCisgICAgQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5n
LAorICAgIENTU1Byb3BlcnR5TGluZUhlaWdodCwKKyAgICBDU1NQcm9wZXJ0eU9ycGhhbnMsCisg
ICAgQ1NTUHJvcGVydHlUZXh0QWxpZ24sCisgICAgQ1NTUHJvcGVydHlUZXh0SW5kZW50LAorICAg
IENTU1Byb3BlcnR5VGV4dFRyYW5zZm9ybSwKKyAgICBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsCisg
ICAgQ1NTUHJvcGVydHlXaWRvd3MsCisgICAgQ1NTUHJvcGVydHlXb3JkU3BhY2luZywKKyAgICBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLAorICAgIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nLAorICAgIENTU1Byb3BlcnR5V2Via2l0VGV4dERl
Y29yYXRpb25zSW5FZmZlY3QsCisgICAgQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLAor
ICAgIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3QsCisgICAgQ1NTUHJvcGVydHlXZWJr
aXRUZXh0U3Ryb2tlQ29sb3IsCisgICAgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlV2lkdGgs
Cit9Oworc2l6ZV90IG51bUVkaXRpbmdTdHlsZVByb3BlcnRpZXMgPSBzaXplb2YoZWRpdGluZ1N0
eWxlUHJvcGVydGllcykvc2l6ZW9mKGVkaXRpbmdTdHlsZVByb3BlcnRpZXNbMF0pOworCitzdGF0
aWMgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiByZW1vdmVOb25FZGl0aW5nUHJv
cGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICByZXR1cm4gc3R5bGUt
PmNvcHlQcm9wZXJ0aWVzSW5TZXQoZWRpdGluZ1N0eWxlUHJvcGVydGllcywgbnVtRWRpdGluZ1N0
eWxlUHJvcGVydGllcyk7Cit9CisgICAgCitFZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZSgpCisg
ICAgOiBtX211dGFibGVTdHlsZSgwKQorICAgICwgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250
U2l6ZShmYWxzZSkKK3sKK30KKworRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUoTm9kZSogbm9k
ZSkKKyAgICA6IG1fbXV0YWJsZVN0eWxlKDApCisgICAgLCBtX3Nob3VsZFVzZUZpeGVkRGVmYXVs
dEZvbnRTaXplKGZhbHNlKQoreworICAgIGluaXQobm9kZSk7Cit9CisKK0VkaXRpbmdTdHlsZTo6
RWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKKyAgICA6IG1fbXV0YWJsZVN0
eWxlKDApCisgICAgLCBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplKGZhbHNlKQorewor
ICAgIGluaXQocG9zaXRpb24ubm9kZSgpKTsKK30KKworRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5
bGUoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCisgICAgOiBtX211dGFibGVTdHls
ZShzdHlsZS0+Y29weSgpKQorICAgICwgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShm
YWxzZSkKK3sKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OmluaXQoTm9kZSogbm9kZSkKK3sKKyAg
ICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlQXRQb3Np
dGlvbiA9IGNvbXB1dGVkU3R5bGUobm9kZSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBzdHlsZTsKKyAgICBpZiAoIWNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uKQorICAg
ICAgICBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICBl
bHNlCisgICAgICAgIHN0eWxlID0gcmVtb3ZlTm9uRWRpdGluZ1Byb3BlcnRpZXMoY29tcHV0ZWRT
dHlsZUF0UG9zaXRpb24uZ2V0KCkpOworCisgICAgaWYgKG5vZGUgJiYgbm9kZS0+Y29tcHV0ZWRT
dHlsZSgpKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IG5vZGUtPmNvbXB1
dGVkU3R5bGUoKTsKKyAgICAgICAgLy8gSWYgYSBub2RlJ3MgdGV4dCBmaWxsIGNvbG9yIGlzIGlu
dmFsaWQsIHRoZW4gaXRzIGNoaWxkcmVuIHVzZSAKKyAgICAgICAgLy8gdGhlaXIgZm9udC1jb2xv
ciBhcyB0aGVpciB0ZXh0IGZpbGwgY29sb3IgKHRoZXkgZG9uJ3QKKyAgICAgICAgLy8gaW5oZXJp
dCBpdCkuICBMaWtld2lzZSBmb3Igc3Ryb2tlIGNvbG9yLgorICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICAgICAgaWYgKCFyZW5kZXJTdHlsZS0+dGV4dEZpbGxDb2xvcigpLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtp
dFRleHRGaWxsQ29sb3IsIGVjKTsKKyAgICAgICAgaWYgKCFyZW5kZXJTdHlsZS0+dGV4dFN0cm9r
ZUNvbG9yKCkuaXNWYWxpZCgpKQorICAgICAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBlYyk7CisgICAgICAgIEFTU0VSVChlYyA9
PSAwKTsKKyAgICAgICAgaWYgKHJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5rZXl3b3Jk
U2l6ZSgpKQorICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNp
emUsIGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uLT5nZXRGb250U2l6ZUNTU1ZhbHVlUHJlZmVycmlu
Z0tleXdvcmQoKS0+Y3NzVGV4dCgpKTsKKyAgICB9CisKKyAgICBtX211dGFibGVTdHlsZSA9IHN0
eWxlOworICAgIG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUgPSBjb21wdXRlZFN0eWxl
QXRQb3NpdGlvbi0+dXNlRml4ZWRGb250RGVmYXVsdFNpemUoKTsKKworICAgIC8qICAgIGlmIChz
aG91bGRJbmNsdWRlVHlwaW5nU3R5bGUgPT0gSW5jbHVkZVR5cGluZ1N0eWxlKSB7CisgICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSA9IHBvcy5ub2RlKCktPmRvY3Vt
ZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOworICAgICBpZiAodHlw
aW5nU3R5bGUpCisgICAgIHN0eWxlLT5tZXJnZSh0eXBpbmdTdHlsZSk7CisgICAgIH0qLworfQor
Citib29sIEVkaXRpbmdTdHlsZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX211
dGFibGVTdHlsZSB8fCBtX211dGFibGVTdHlsZS0+bGVuZ3RoKCkgPT0gMDsKK30KKwordm9pZCBF
ZGl0aW5nU3R5bGU6OnNldFN0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IHN0eWxlKQoreworICAgIG1fbXV0YWJsZVN0eWxlID0gc3R5bGU7CisgICAgbV9zaG91bGRV
c2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IGZhbHNlOyAvLyBGSVhNRTogd2Ugc2hvdWxkIHRha2Ug
Y2FyZSBvZiB0aGlzCit9CisKK3ZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZUFuZE92ZXJyaWRlV2l0
aChFZGl0aW5nU3R5bGUqIHN0eWxlVG9NZXJnZSkKK3sKKyAgICBpZiAoIXN0eWxlVG9NZXJnZSB8
fCAhc3R5bGVUb01lcmdlLT5tX211dGFibGVTdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9tdXRhYmxlU3R5bGUtPm1lcmdlKHN0eWxlVG9NZXJnZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCks
IHRydWUpOworfQorCit2b2lkIEVkaXRpbmdTdHlsZTo6Y2xlYXIoKQoreworICAgIG1fbXV0YWJs
ZVN0eWxlLmNsZWFyKCk7CisgICAgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IGZh
bHNlOworfQorCit2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVBZGRlZEJ5Tm9kZShOb2Rl
KiBub2RlKQoreworICAgIGlmICghbV9tdXRhYmxlU3R5bGUgfHwgIW5vZGUgfHwgIW5vZGUtPnBh
cmVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUgPSBjb21wdXRlZFN0eWxlKG5vZGUtPnBhcmVudE5v
ZGUoKSk7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUFkZGVk
QnlOb2RlID0gY29tcHV0ZWRTdHlsZShub2RlKS0+Y29weSgpOworCisgICAgcGFyZW50U3R5bGUt
PmRpZmYoc3R5bGVBZGRlZEJ5Tm9kZS5nZXQoKSk7CisgICAgcmVtb3ZlTm9uRWRpdGluZ1Byb3Bl
cnRpZXMoc3R5bGVBZGRlZEJ5Tm9kZS5nZXQoKSk7CisKKyAgICBzdHlsZUFkZGVkQnlOb2RlLT5k
aWZmKG1fbXV0YWJsZVN0eWxlLmdldCgpKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92
ZUJsb2NrUHJvcGVydGllcygpCit7CisgICAgaWYgKCFtX211dGFibGVTdHlsZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZUJsb2NrUHJvcGVydGllcygpOwor
fQorCit2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGllc1ByZXNlbnRJbihDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHN0eWxlLT5lbmQoKTsKKyAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gKml0OworICAgICAgICBtX211
dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHkuaWQoKSk7CisgICAgfQorfQorCit2
b2lkIEVkaXRpbmdTdHlsZTo6cHJlcGFyZUFwcGxpZWRBdChjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24sIEVkaXRpbmdTdHlsZUFwcGxpY2F0aW9uTW9kZSBtb2RlKQoreworICAgIC8vIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKCkgcmVxdWlyZXMgdGhhdCB0aGlzIGZ1
bmN0aW9uIG9ubHkgcmVtb3ZlcyB0aGUgZWRpdGluZyBzdHlsZS4KKyAgICAvLyBJZiB0aGlzIGZ1
bmN0aW9uIHdhcyBtb2RpZmllZCBpbiB0aGUgZnV0dXJlIHRvIGRlbGV0ZSBhbGwgcmVkdW5kYW50
IHByb3BlcnRpZXMsIHRoZW4gYWRkIGEgYm9vbGVhbiB2YWx1ZSB0byBpbmRpY2F0ZQorICAgIC8v
IHdoaWNoIG9uZSBvZiBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uIG9yIGNvbXB1dGVkU3R5bGUgaXMg
Y2FsbGVkLgorICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpj
cmVhdGUocG9zaXRpb24pOworICAgIHN0eWxlLT5tX211dGFibGVTdHlsZS0+ZGlmZihtX211dGFi
bGVTdHlsZS5nZXQoKSk7CisgICAgCisgICAgLy8gaWYgYWxwaGEgdmFsdWUgaXMgemVybywgd2Ug
ZG9uJ3QgYWRkIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLgorICAgIFJlZlB0cjxDU1NWYWx1ZT4gYmFj
a2dyb3VuZENvbG9yID0gbV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpOworICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IgJiYgYmFja2dy
b3VuZENvbG9yLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihiYWNr
Z3JvdW5kQ29sb3IuZ2V0KCkpOworICAgICAgICBDb2xvciBjb2xvciA9IENvbG9yKHByaW1pdGl2
ZVZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAg
ICAgICAgaWYgKGNvbG9yLmFscGhhKCkgPT0gMCkKKyAgICAgICAgICAgIG1fbXV0YWJsZVN0eWxl
LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgZWMpOworICAgIH0K
KworICAgIGlmIChtb2RlID09IE9ubHlJbmhlcml0YWJsZVByb3BlcnRpZXMpCisgICAgICAgIHJl
bW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzKG1fbXV0YWJsZVN0eWxlLmdldCgpKTsKK30KKworUGFz
c1JlZlB0cjxFZGl0aW5nU3R5bGU+IGVkaXRpbmdTdHlsZVdpdGhUeXBpbmdTdHlsZShjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gZWR0aW5nU3R5
bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwb3NpdGlvbik7CisgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qIHR5cGluZ1N0eWxlID0gcG9zaXRpb24ubm9kZSgpLT5kb2N1bWVudCgpLT5m
cmFtZSgpLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKKyAgICBpZiAodHlwaW5nU3R5bGUp
IHsKKyAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBpbmhlcml0YWJs
ZVR5cGluZ1N0eWxlID0gdHlwaW5nU3R5bGUtPmNvcHkoKTsKKyAgICAgICAgcmVtb3ZlTm9uRWRp
dGluZ1Byb3BlcnRpZXMoaW5oZXJpdGFibGVUeXBpbmdTdHlsZS5nZXQoKSk7CisgICAgICAgIGVk
dGluZ1N0eWxlLT5zdHlsZSgpLT5tZXJnZShpbmhlcml0YWJsZVR5cGluZ1N0eWxlLmdldCgpLCB0
cnVlKTsKKyAgICB9CisgICAgcmV0dXJuIGVkdGluZ1N0eWxlOworfQorCitQYXNzUmVmUHRyPEVk
aXRpbmdTdHlsZT4gZWRpdGluZ1N0eWxlQWRkZWRCeU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiBlZGl0aW5nU3R5bGVPZk5vZGUgPSBFZGl0aW5nU3R5bGU6OmNy
ZWF0ZShub2RlKTsKKyAgICBpZiAobm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIFJlZlB0
cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHBhcmVudFN0eWxlID0gY29tcHV0ZWRTdHls
ZShub2RlLT5wYXJlbnROb2RlKCkpOworICAgICAgICBwYXJlbnRTdHlsZS0+ZGlmZihlZGl0aW5n
U3R5bGVPZk5vZGUtPnN0eWxlKCkpOworICAgIH0KKyAgICByZXR1cm4gZWRpdGluZ1N0eWxlT2ZO
b2RlLnJlbGVhc2UoKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNjgwNTkpCisrKyBXZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MiwxNSArMjcyLDYg
QEAKICAgICBtX2VuZEJsb2NrID0gZW5jbG9zaW5nTm9kZU9mVHlwZShyYW5nZUNvbXBsaWFudEVx
dWl2YWxlbnQobV91cHN0cmVhbUVuZCksICZpc0Jsb2NrLCBmYWxzZSk7CiB9CiAKLXN0YXRpYyB2
b2lkIHJlbW92ZUVuY2xvc2luZ0FuY2hvclN0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIE5vZGUqIGVuY2xvc2lu
Z0FuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQocG9zaXRpb24pOwotICAgIGlmICghZW5j
bG9zaW5nQW5jaG9yIHx8ICFlbmNsb3NpbmdBbmNob3ItPnBhcmVudE5vZGUoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIHJlbW92ZVN0eWxlc0FkZGVkQnlOb2RlKHN0eWxlLCBlbmNsb3Np
bmdBbmNob3IpOwotfQotCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVUeXBpbmdT
dHlsZVN0YXRlKCkKIHsKICAgICAvLyBBIGNvbW1vbiBjYXNlIGlzIGRlbGV0aW5nIGNoYXJhY3Rl
cnMgdGhhdCBhcmUgYWxsIGZyb20gdGhlIHNhbWUgdGV4dCBub2RlLiBJbiAKQEAgLTI5NCwxNCAr
Mjg1LDEzIEBACiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHR5cGlu
ZyBzdHlsZSBpbiBlZmZlY3QgYmVmb3JlIHRoZSBkZWxldGUgaXMgZG9uZS4KLSAgICBtX3R5cGlu
Z1N0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24ocG9zaXRp
b25CZWZvcmVUYWJTcGFuKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSkpOworICAgIG1fdHlw
aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwb3NpdGlvbkJlZm9yZVRhYlNwYW4obV9z
ZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKSk7CisgICAgbV90eXBpbmdTdHlsZS0+cmVtb3ZlU3R5
bGVBZGRlZEJ5Tm9kZShlbmNsb3NpbmdBbmNob3JFbGVtZW50KG1fc2VsZWN0aW9uVG9EZWxldGUu
c3RhcnQoKSkpOwogCi0gICAgcmVtb3ZlRW5jbG9zaW5nQW5jaG9yU3R5bGUobV90eXBpbmdTdHls
ZS5nZXQoKSwgbV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKTsKLQogICAgIC8vIElmIHdlJ3Jl
IGRlbGV0aW5nIGludG8gYSBNYWlsIGJsb2NrcXVvdGUsIHNhdmUgdGhlIHN0eWxlIGF0IGVuZCgp
IGluc3RlYWQgb2Ygc3RhcnQoKQogICAgIC8vIFdlJ2xsIHVzZSB0aGlzIGxhdGVyIGluIGNvbXB1
dGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlIGlmIHdlIGVuZCB1cCBvdXRzaWRlIG9mIGEgTWFpbCBi
bG9ja3F1b3RlCiAgICAgaWYgKG5lYXJlc3RNYWlsQmxvY2txdW90ZShtX3NlbGVjdGlvblRvRGVs
ZXRlLnN0YXJ0KCkubm9kZSgpKSkKLSAgICAgICAgbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxl
ID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24obV9zZWxlY3Rpb25U
b0RlbGV0ZS5lbmQoKSk7CisgICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IEVk
aXRpbmdTdHlsZTo6Y3JlYXRlKG1fc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkpOwogICAgIGVsc2UK
ICAgICAgICAgbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlID0gMDsKIH0KQEAgLTY3OCw3ICs2
NjgsNyBAQAogewogICAgIGlmICghbV90eXBpbmdTdHlsZSkKICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKKwogICAgIC8vIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc3R5bGUg
YmVmb3JlIHRoZSBkZWxldGUgYW5kIHRoZSBzdHlsZSBub3cKICAgICAvLyBhZnRlciB0aGUgZGVs
ZXRlIGhhcyBiZWVuIGRvbmUuIFNldCB0aGlzIHN0eWxlIG9uIHRoZSBmcmFtZSwgc28gb3RoZXIg
ZWRpdGluZwogICAgIC8vIGNvbW1hbmRzIGJlaW5nIGNvbXBvc2VkIHdpdGggdGhpcyBvbmUgd2ls
bCB3b3JrLCBhbmQgYWxzbyBjYWNoZSBpdCBvbiB0aGUgY29tbWFuZCwKQEAgLTY5MCw5ICs2ODAs
MTAgQEAKICAgICAgICAgbV90eXBpbmdTdHlsZSA9IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHls
ZTsKICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUgPSAwOwogCi0gICAgcHJlcGFyZUVk
aXRpbmdTdHlsZVRvQXBwbHlBdChtX3R5cGluZ1N0eWxlLmdldCgpLCBtX2VuZGluZ1Bvc2l0aW9u
KTsKLSAgICBpZiAoIW1fdHlwaW5nU3R5bGUtPmxlbmd0aCgpKQorICAgIG1fdHlwaW5nU3R5bGUt
PnByZXBhcmVBcHBsaWVkQXQobV9lbmRpbmdQb3NpdGlvbik7CisgICAgaWYgKG1fdHlwaW5nU3R5
bGUtPmlzRW1wdHkoKSkKICAgICAgICAgbV90eXBpbmdTdHlsZSA9IDA7CisKICAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZUVuZChtX2VuZGluZ1Bvc2l0aW9uKTsKICAgICBpZiAobV90eXBpbmdT
dHlsZSAmJiAKICAgICAgICAgaXNTdGFydE9mUGFyYWdyYXBoKHZpc2libGVFbmQpICYmCkBAIC03
MDQsNyArNjk1LDcgQEAKICAgICAgICAgLy8gdGhlbiBtb3ZlIGl0IGJhY2sgKHdoaWNoIHdpbGwg
Y2xlYXIgdHlwaW5nIHN0eWxlKS4KIAogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24odmlzaWJs
ZUVuZCk7Ci0gICAgICAgIGFwcGx5U3R5bGUobV90eXBpbmdTdHlsZS5nZXQoKSwgRWRpdEFjdGlv
blVuc3BlY2lmaWVkKTsKKyAgICAgICAgYXBwbHlTdHlsZShtX3R5cGluZ1N0eWxlLT5zdHlsZSgp
LCBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOwogICAgICAgICAvLyBhcHBseVN0eWxlIGNhbiBkZXN0
cm95IHRoZSBwbGFjZWhvbGRlciB0aGF0IHdhcyBhdCBtX2VuZGluZ1Bvc2l0aW9uIGlmIGl0IG5l
ZWRzIHRvIAogICAgICAgICAvLyBtb3ZlIGl0LCBidXQgaXQgd2lsbCBzZXQgYW4gZW5kaW5nU2Vs
ZWN0aW9uKCkgYXQgW21vdmVkUGxhY2Vob2xkZXIsIDBdIGlmIGl0IGRvZXMgc28uCiAgICAgICAg
IG1fZW5kaW5nUG9zaXRpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpOwpAQCAtNzE0LDcg
KzcwNSw3IEBACiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5l
dyBjaGFyYWN0ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0
ZWQgb25lcywKICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJh
Y2sgYW5kIHN0YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUg
CiAgICAgLy8gcHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGRvY3VtZW50KCktPmZy
YW1lKCktPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxlKTsKKyAgICBk
b2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0VHlwaW5nU3R5bGUobV90eXBpbmdT
dHlsZSA/IG1fdHlwaW5nU3R5bGUtPnN0eWxlKCkgOiAwKTsKIH0KIAogdm9pZCBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0YXRlKCkKSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5oCShyZXZpc2lvbiA2ODA1OSkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiBjbGFzcyBI
VE1MRWxlbWVudDsKIGNsYXNzIFN0eWxlQ2hhbmdlOwogCisKIGVudW0gU2hvdWxkSW5jbHVkZVR5
cGluZ1N0eWxlIHsKICAgICBJbmNsdWRlVHlwaW5nU3R5bGUsCiAgICAgSWdub3JlVHlwaW5nU3R5
bGUKQEAgLTU3LDEwICs1OCw2IEBACiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEFwcGx5U3R5bGVDb21tYW5kKGVsZW1lbnQsIHJlbW92ZU9ubHksIGFjdGlvbikpOwogICAgIH0K
LQotICAgIHN0YXRpYyBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHJlbW92ZU5v
bkVkaXRpbmdQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKTsKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0eWxlQXRQ
b3NpdGlvbihQb3NpdGlvbiBwb3MsIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSBzaG91bGRJbmNs
dWRlVHlwaW5nU3R5bGUgPSBJZ25vcmVUeXBpbmdTdHlsZSk7Ci0KIHByaXZhdGU6CiAgICAgQXBw
bHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgRWRpdEFjdGlv
biwgRVByb3BlcnR5TGV2ZWwpOwogICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCwgRWRpdEFjdGlvbiwgRVByb3BlcnR5TGV2ZWwpOwpAQCAtMTI4LDkgKzEyNSw2IEBACiBQ
YXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50Kik7
CiBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGdldFByb3BlcnRpZXNOb3RJbihD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBDU1NTdHls
ZURlY2xhcmF0aW9uKiBiYXNlU3R5bGUpOwogCi12b2lkIHByZXBhcmVFZGl0aW5nU3R5bGVUb0Fw
cGx5QXQoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBQb3NpdGlvbik7Ci12b2lkIHJlbW92
ZVN0eWxlc0FkZGVkQnlOb2RlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgTm9kZSopOwot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDY4MDU5KQorKysgV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBFZGl0aW5nU3R5bGU7CiBj
bGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgUmVwbGFjZW1lbnRGcmFnbWVudDsKIApAQCAt
ODIsNyArODMsNyBAQAogCiAgICAgUmVmUHRyPE5vZGU+IG1fZmlyc3ROb2RlSW5zZXJ0ZWQ7CiAg
ICAgUmVmUHRyPE5vZGU+IG1fbGFzdExlYWZJbnNlcnRlZDsKLSAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IG1faW5zZXJ0aW9uU3R5bGU7CisgICAgUmVmUHRyPEVkaXRpbmdT
dHlsZT4gbV9pbnNlcnRpb25TdHlsZTsKICAgICBib29sIG1fc2VsZWN0UmVwbGFjZW1lbnQ7CiAg
ICAgYm9vbCBtX3NtYXJ0UmVwbGFjZTsKICAgICBib29sIG1fbWF0Y2hTdHlsZTsKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDY4MDU5KQorKysg
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw2ICs3Myw3IEBACiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV94UG9zRm9yVmVy
dGljYWxBcnJvd05hdmlnYXRpb24oTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pCiAg
ICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQorICAgICwgbV90eXBpbmdT
dHlsZShFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpKQogICAgICwgbV9jYXJldEJsaW5rVGltZXIodGhp
cywgJlNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhcmV0QmxpbmtUaW1lckZpcmVkKQogICAgICwgbV9j
YXJldFJlY3ROZWVkc1VwZGF0ZSh0cnVlKQogICAgICwgbV9hYnNDYXJldEJvdW5kc0RpcnR5KHRy
dWUpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY4
MDU5KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDA4LDEwNCArNDA4LDYgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0vLyBF
ZGl0aW5nIHN0eWxlIHByb3BlcnRpZXMgbXVzdCBiZSBwcmVzZXJ2ZWQgZHVyaW5nIGVkaXRpbmcg
b3BlcmF0aW9uLgotLy8gZS5nLiB3aGVuIGEgdXNlciBpbnNlcnRzIGEgbmV3IHBhcmFncmFwaCwg
YWxsIHByb3BlcnRpZXMgbGlzdGVkIGhlcmUgbXVzdCBiZSBjb3BpZWQgdG8gdGhlIG5ldyBwYXJh
Z3JhcGguCi0vLyBGSVhNRTogVGhlIGN1cnJlbnQgZWRpdGluZ1N0eWxlUHJvcGVydGllcyBjb250
YWlucyBhbGwgaW5oZXJpdGFibGVQcm9wZXJ0aWVzIGJ1dCB3ZSBtYXkgbm90IG5lZWQgdG8gcHJl
c2VydmUgYWxsIGluaGVyaXRhYmxlIHByb3BlcnRpZXMKLXN0YXRpYyBjb25zdCBpbnQgZWRpdGlu
Z1N0eWxlUHJvcGVydGllc1tdID0gewotICAgIC8vIENTUyBpbmhlcml0YWJsZSBwcm9wZXJ0aWVz
Ci0gICAgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZSwKLSAgICBDU1NQcm9wZXJ0eUNvbG9yLAot
ICAgIENTU1Byb3BlcnR5Rm9udEZhbWlseSwKLSAgICBDU1NQcm9wZXJ0eUZvbnRTaXplLAotICAg
IENTU1Byb3BlcnR5Rm9udFN0eWxlLAotICAgIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsCi0gICAg
Q1NTUHJvcGVydHlGb250V2VpZ2h0LAotICAgIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZywKLSAg
ICBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsCi0gICAgQ1NTUHJvcGVydHlPcnBoYW5zLAotICAgIENT
U1Byb3BlcnR5VGV4dEFsaWduLAotICAgIENTU1Byb3BlcnR5VGV4dEluZGVudCwKLSAgICBDU1NQ
cm9wZXJ0eVRleHRUcmFuc2Zvcm0sCi0gICAgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlLAotICAgIENT
U1Byb3BlcnR5V2lkb3dzLAotICAgIENTU1Byb3BlcnR5V29yZFNwYWNpbmcsCi0gICAgQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywKLSAgICBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlclZlcnRpY2FsU3BhY2luZywKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0
aW9uc0luRWZmZWN0LAotICAgIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvciwKLSAgICBD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTaXplQWRqdXN0LAotICAgIENTU1Byb3BlcnR5V2Via2l0VGV4
dFN0cm9rZUNvbG9yLAotICAgIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZVdpZHRoLAotfTsK
LXNpemVfdCBudW1FZGl0aW5nU3R5bGVQcm9wZXJ0aWVzID0gc2l6ZW9mKGVkaXRpbmdTdHlsZVBy
b3BlcnRpZXMpL3NpemVvZihlZGl0aW5nU3R5bGVQcm9wZXJ0aWVzWzBdKTsKLQotUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlTm9uRWRp
dGluZ1Byb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCi17Ci0gICAgcmV0dXJu
IHN0eWxlLT5jb3B5UHJvcGVydGllc0luU2V0KGVkaXRpbmdTdHlsZVByb3BlcnRpZXMsIG51bUVk
aXRpbmdTdHlsZVByb3BlcnRpZXMpOwotfQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihQb3Np
dGlvbiBwb3MsIFNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSBzaG91bGRJbmNsdWRlVHlwaW5nU3R5
bGUpCi17Ci0gICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRT
dHlsZUF0UG9zaXRpb24gPSBwb3MuY29tcHV0ZWRTdHlsZSgpOwotICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGU7Ci0gICAgaWYgKCFjb21wdXRlZFN0eWxlQXRQb3Np
dGlvbikKLSAgICAgICAgc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRl
KCk7Ci0gICAgZWxzZQotICAgICAgICBzdHlsZSA9IHJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVz
KGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uLmdldCgpKTsKLQotICAgIGlmIChzdHlsZSAmJiBwb3Mu
bm9kZSgpICYmIHBvcy5ub2RlKCktPmNvbXB1dGVkU3R5bGUoKSkgewotICAgICAgICBSZW5kZXJT
dHlsZSogcmVuZGVyU3R5bGUgPSBwb3Mubm9kZSgpLT5jb21wdXRlZFN0eWxlKCk7Ci0gICAgICAg
IC8vIElmIGEgbm9kZSdzIHRleHQgZmlsbCBjb2xvciBpcyBpbnZhbGlkLCB0aGVuIGl0cyBjaGls
ZHJlbiB1c2UgCi0gICAgICAgIC8vIHRoZWlyIGZvbnQtY29sb3IgYXMgdGhlaXIgdGV4dCBmaWxs
IGNvbG9yICh0aGV5IGRvbid0Ci0gICAgICAgIC8vIGluaGVyaXQgaXQpLiAgTGlrZXdpc2UgZm9y
IHN0cm9rZSBjb2xvci4KLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGlm
ICghcmVuZGVyU3R5bGUtPnRleHRGaWxsQ29sb3IoKS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBz
dHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLCBlYyk7
Ci0gICAgICAgIGlmICghcmVuZGVyU3R5bGUtPnRleHRTdHJva2VDb2xvcigpLmlzVmFsaWQoKSkK
LSAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHRT
dHJva2VDb2xvciwgZWMpOwotICAgICAgICBBU1NFUlQoZWMgPT0gMCk7Ci0gICAgICAgIGlmIChy
ZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSkKLSAgICAgICAgICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBjb21wdXRlZFN0eWxlQXRQ
b3NpdGlvbi0+Z2V0Rm9udFNpemVDU1NWYWx1ZVByZWZlcnJpbmdLZXl3b3JkKCktPmNzc1RleHQo
KSk7Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZEluY2x1ZGVUeXBpbmdTdHlsZSA9PSBJbmNsdWRl
VHlwaW5nU3R5bGUpIHsKLSAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHR5cGlu
Z1N0eWxlID0gcG9zLm5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnR5
cGluZ1N0eWxlKCk7Ci0gICAgICAgIGlmICh0eXBpbmdTdHlsZSkKLSAgICAgICAgICAgIHN0eWxl
LT5tZXJnZSh0eXBpbmdTdHlsZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0eWxlLnJlbGVhc2Uo
KTsKLX0KLQotdm9pZCBwcmVwYXJlRWRpdGluZ1N0eWxlVG9BcHBseUF0KENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiBlZGl0aW5nU3R5bGUsIFBvc2l0aW9uIHBvcykKLXsKLSAgICAvLyBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bGVTcGFucygpIHJlcXVpcmVzIHRoYXQgdGhp
cyBmdW5jdGlvbiBvbmx5IHJlbW92ZXMgdGhlIGVkaXRpbmcgc3R5bGUuCi0gICAgLy8gSWYgdGhp
cyBmdW5jdGlvbiB3YXMgbW9kaWZpZWQgaW4gdGhlIGZ1dHVyZSB0byBkZWxldGUgYWxsIHJlZHVu
ZGFudCBwcm9wZXJ0aWVzLCB0aGVuIGFkZCBhIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUKLSAg
ICAvLyB3aGljaCBvbmUgb2YgZWRpdGluZ1N0eWxlQXRQb3NpdGlvbiBvciBjb21wdXRlZFN0eWxl
IGlzIGNhbGxlZC4KLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
ID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24ocG9zKTsKLSAgICBz
dHlsZS0+ZGlmZihlZGl0aW5nU3R5bGUpOwotCi0gICAgLy8gaWYgYWxwaGEgdmFsdWUgaXMgemVy
bywgd2UgZG9uJ3QgYWRkIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLgotICAgIFJlZlB0cjxDU1NWYWx1
ZT4gYmFja2dyb3VuZENvbG9yID0gZWRpdGluZ1N0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKLSAgICBpZiAoYmFja2dyb3VuZENvbG9yICYmIGJh
Y2tncm91bmRDb2xvci0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
YmFja2dyb3VuZENvbG9yLmdldCgpKTsKLSAgICAgICAgQ29sb3IgY29sb3IgPSBDb2xvcihwcmlt
aXRpdmVWYWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7
Ci0gICAgICAgIGlmIChjb2xvci5hbHBoYSgpID09IDApCi0gICAgICAgICAgICBlZGl0aW5nU3R5
bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBlYyk7Ci0gICAg
fQotfQotCi12b2lkIHJlbW92ZVN0eWxlc0FkZGVkQnlOb2RlKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBlZGl0aW5nU3R5bGUsIE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUKG5vZGUpOwot
ICAgIEFTU0VSVChub2RlLT5wYXJlbnROb2RlKCkpOwotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gcGFyZW50U3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0
eWxlQXRQb3NpdGlvbihQb3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIDApKTsKLSAgICBSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6
OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24obm9kZSwgMCkpOwotICAgIHBhcmVudFN0
eWxlLT5kaWZmKHN0eWxlLmdldCgpKTsKLSAgICBzdHlsZS0+ZGlmZihlZGl0aW5nU3R5bGUpOwot
fQotCiBBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
LCBFUHJvcGVydHlMZXZlbCBwcm9wZXJ0eUxldmVsKQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1h
bmQoZG9jdW1lbnQpCiAgICAgLCBtX3N0eWxlKHN0eWxlLT5tYWtlTXV0YWJsZSgpKQpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0
aW5nU3R5bGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRWRpdGluZ1N0
eWxlX2gKKyNkZWZpbmUgRWRpdGluZ1N0eWxlX2gKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiUG9zaXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3Mg
Q1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjsK
K2NsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOworCitjbGFzcyBFZGl0aW5nU3R5bGUg
OiBwdWJsaWMgUmVmQ291bnRlZDxFZGl0aW5nU3R5bGU+IHsKK3B1YmxpYzoKKyAgICAKKyAgICBl
bnVtIEVkaXRpbmdTdHlsZUFwcGxpY2F0aW9uTW9kZSB7IEFsbFByb3BlcnRpZXMsIE9ubHlJbmhl
cml0YWJsZVByb3BlcnRpZXMgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHls
ZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRWRpdGluZ1N0
eWxlKCkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gY3Jl
YXRlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRp
bmdTdHlsZShub2RlKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0
eWxlPiBjcmVhdGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBFZGl0aW5nU3R5bGUocG9zaXRpb24pKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNyZWF0ZShjb25zdCBDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRWRpdGlu
Z1N0eWxlKHN0eWxlKSk7CisgICAgfQorCisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKCkgeyByZXR1cm4gbV9tdXRhYmxlU3R5bGUuZ2V0KCk7IH0KKyAgICBib29sIGlzRW1w
dHkoKSBjb25zdDsKKyAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+KTsKKyAgICB2b2lkIG1lcmdlQW5kT3ZlcnJpZGVXaXRoKEVkaXRpbmdTdHls
ZSopOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHJlbW92ZVN0eWxlQWRkZWRCeU5vZGUo
Tm9kZSopOworICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CisgICAgdm9pZCByZW1v
dmVQcm9wZXJ0aWVzUHJlc2VudEluKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CisgICAg
dm9pZCBwcmVwYXJlQXBwbGllZEF0KGNvbnN0IFBvc2l0aW9uJiwgRWRpdGluZ1N0eWxlQXBwbGlj
YXRpb25Nb2RlID0gQWxsUHJvcGVydGllcyApOworCitwcml2YXRlOgorICAgIEVkaXRpbmdTdHls
ZSgpOworICAgIEVkaXRpbmdTdHlsZShOb2RlKik7CisgICAgRWRpdGluZ1N0eWxlKGNvbnN0IFBv
c2l0aW9uJik7CisgICAgRWRpdGluZ1N0eWxlKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qKTsK
KyAgICB2b2lkIGluaXQoTm9kZSopOworCisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBtX211dGFibGVTdHlsZTsKKyAgICBib29sIG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0
Rm9udFNpemU7Cit9OworCitQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZWRpdGluZ1N0eWxlV2l0
aFR5cGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJik7CitQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4g
ZWRpdGluZ1N0eWxlQWRkZWRCeU5vZGUoTm9kZSogbm9kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVkaXRpbmdTdHlsZV9oCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiA2
ODA1OSkKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbnNlcnRM
aW5lQnJlYWtDb21tYW5kLmgiCkBAIC04MSw4ICs4Miw4IEBACiAgICAgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVQb3MocG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICBpZiAoIWlzU3RhcnRP
ZlBhcmFncmFwaCh2aXNpYmxlUG9zKSAmJiAhaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fc3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6
ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihwb3MsIEluY2x1ZGVUeXBpbmdTdHlsZSk7CisKKyAgICBt
X3N0eWxlID0gZWRpdGluZ1N0eWxlV2l0aFR5cGluZ1N0eWxlKHBvcyk7CiB9CiAKIHZvaWQgSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6YXBwbHlTdHlsZUFmdGVySW5zZXJ0aW9uKE5v
ZGUqIG9yaWdpbmFsRW5jbG9zaW5nQmxvY2spCkBAIC05OCwxMSArOTksMTAgQEAKICAgICAgICAg
CiAgICAgaWYgKCFtX3N0eWxlKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgcHJlcGFyZUVk
aXRpbmdTdHlsZVRvQXBwbHlBdChtX3N0eWxlLmdldCgpLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFy
dCgpKTsKIAotICAgIGlmIChtX3N0eWxlLT5sZW5ndGgoKSA+IDApCi0gICAgICAgIGFwcGx5U3R5
bGUobV9zdHlsZS5nZXQoKSk7CisgICAgbV9zdHlsZS0+cHJlcGFyZUFwcGxpZWRBdChlbmRpbmdT
ZWxlY3Rpb24oKS5zdGFydCgpKTsKKyAgICBpZiAoIW1fc3R5bGUtPmlzRW1wdHkoKSkKKyAgICAg
ICAgYXBwbHlTdHlsZShtX3N0eWxlLT5zdHlsZSgpKTsKIH0KIAogYm9vbCBJbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JDb21tYW5kOjpzaG91bGRVc2VEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChOb2Rl
KiBlbmNsb3NpbmdCbG9jaykgY29uc3QKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjgwNTkpCisrKyBXZWJDb3Jl
L1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC03ODEsNiArNzgxLDcgQEAKICAgICBlZGl0
aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcCBcCisgICAg
ZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIFwKICAgICBlZGl0aW5nL0VkaXRvci5jcHAgXAogICAg
IGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21t
YW5kLmNwcCBcCkBAIC0xNjQ2LDYgKzE2NDcsNyBAQAogICAgIGVkaXRpbmcvRGVsZXRlRnJvbVRl
eHROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCBc
CiAgICAgZWRpdGluZy9FZGl0Q29tbWFuZC5oIFwKKyAgICBlZGl0aW5nL0VkaXRpbmdTdHlsZS5o
IFwKICAgICBlZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oIFwKICAgICBlZGl0aW5nL0VkaXRvci5o
IFwKICAgICBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oIFwKSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNp
b24gNjgwNTkpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcyLDYgKzEyNzIsOCBAQAogCVdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oIFwKIAlXZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmggXAogCVdlYkNvcmUvZWRpdGluZy9FZGl0aW5n
QmVoYXZpb3JUeXBlcy5oIFwKKwlXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBcCisJ
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvRWRpdG9y
Q29tbWFuZC5jcHAgXAogCVdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIFwKIAlXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yRGVsZXRlQWN0aW9uLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY4MDU5KQorKysg
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTEzNjAsNiArMTM2MCw4IEBA
CiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0
aW5nL0VkaXRpbmdCZWhhdmlvci5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRpbmdCZWhh
dmlvclR5cGVzLmgnLAorICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCcsCisg
ICAgICAgICAgICAnZWRpdGluZy9FZGl0aW5nU3R5bGUuaCcsCiAgICAgICAgICAgICAnZWRpdGlu
Zy9FZGl0b3IuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRvci5oJywKICAgICAgICAg
ICAgICdlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5v
cmRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUub3JkZXIJKHJldmlzaW9uIDY4MDU5
KQorKysgV2ViQ29yZS9XZWJDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC0xNzI2OCw3ICsx
NzI2OCw2IEBACiBfX1pON1dlYkNvcmVMMjZpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZUVQS05T
XzROb2RlRQogX19aTjdXZWJDb3JlMTFpc1N0eWxlU3BhbkVQS05TXzROb2RlRQogX19aTks3V2Vi
Q29yZTE5UmVwbGFjZW1lbnRGcmFnbWVudDdpc0VtcHR5RXYKLV9fWk43V2ViQ29yZTI4cHJlcGFy
ZUVkaXRpbmdTdHlsZVRvQXBwbHlBdEVQTlNfMjZDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkVO
U184UG9zaXRpb25FCiBfX1pOSzdXZWJDb3JlMTlDU1NTdHlsZURlY2xhcmF0aW9uMThjc3NQcm9w
ZXJ0eU1hdGNoZXNFUEtOU18xMUNTU1Byb3BlcnR5RQogX19aTjdXZWJDb3JlNkVkaXRvcjEzZGlk
RW5kRWRpdGluZ0V2CiBfX1pON1dlYkNvcmUyM1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kRDBFdgpJ
bmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiA2ODA1OSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTg4Nyw2ICs4ODcsNyBAQAogICAgIGVkaXRpbmcvRGVsZXRlRnJvbVRl
eHROb2RlQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CiAgICAgZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKKyAgICBlZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKICAgICBlZGl0aW5nL0VkaXRvci5jcHAKICAgICBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
CiAgICAgZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDY4MDU5KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3IEBA
CiBjbGFzcyBSZW5kZXJTdHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsKICAg
ICBmcmllbmQgY2xhc3MgQW5pbWF0aW9uQmFzZTsgLy8gVXNlZCBieSBDU1MgYW5pbWF0aW9ucy4g
V2UgY2FuJ3QgYWxsb3cgdGhlbSB0byBhbmltYXRlIGJhc2VkIG9mZiB2aXNpdGVkIGNvbG9ycy4K
ICAgICBmcmllbmQgY2xhc3MgQXBwbHlTdHlsZUNvbW1hbmQ7IC8vIEVkaXRpbmcgaGFzIHRvIG9u
bHkgcmV2ZWFsIHVudmlzaXRlZCBpbmZvLgorICAgIGZyaWVuZCBjbGFzcyBFZGl0aW5nU3R5bGU7
IC8vIEVkaXRpbmcgaGFzIHRvIG9ubHkgcmV2ZWFsIHVudmlzaXRlZCBpbmZvLgogICAgIGZyaWVu
ZCBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yOyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0bHkuCiAgICAg
ZnJpZW5kIGNsYXNzIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjsgLy8gSWdub3JlcyB2aXNp
dGVkIHN0eWxlcywgc28gbmVlZHMgdG8gYmUgYWJsZSB0byBzZWUgdW52aXNpdGVkIGluZm8uCiAg
ICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yOyAvLyBVc2Vk
IGJ5IENTUyBhbmltYXRpb25zLiBXZSBjYW4ndCBhbGxvdyB0aGVtIHRvIGFuaW1hdGUgYmFzZWQg
b2ZmIHZpc2l0ZWQgY29sb3JzLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDY4MDU5KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4NDMsNiArMjg0Myw4IEBACiAJ
CTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3REQ0RDg0MEZERjRENkQwMEVDRjlB
NCAvKiBYU1NBdWRpdG9yLmNwcCAqLzsgfTsKIAkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8q
IFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3REQ0RDg1MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggKi87IH07CiAJCTk3
RUY3REZFMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0VGN0RGRDEwN0U1NUI3
MDBEN0M0OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwICovOyB9OworCQk5Qjk3MTREMjEy
NEE4NjQ1MDBGRDI4MjYgLyogRWRpdGluZ1N0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Qjk3MTREMDEyNEE4NjQ1MDBGRDI4MjYgLyogRWRpdGlu
Z1N0eWxlLmggKi87IH07CisJCTlCOTcxNEQzMTI0QTg2NDUwMEZEMjgyNiAvKiBFZGl0aW5nU3R5
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI5
NzE0RDExMjRBODY0NTAwRkQyODI2IC8qIEVkaXRpbmdTdHlsZS5jcHAgKi87IH07CiAJCTlGMEQ2
QjJFMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJDMTIxQkZFQkEw
MDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAqLzsgfTsKIAkJOUYwRDZCMkYx
MjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4
OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi87IH07CiAJCTlGM0I5NDdFMTIyNDE3NTgw
MDUzMDRFNyAvKiBTY3JpcHRIZWFwU25hcHNob3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGM0I5NDdEMTIyNDE3NTgwMDUzMDRFNyAvKiBTY3JpcHRI
ZWFwU25hcHNob3QuaCAqLzsgfTsKQEAgLTg3NDUsNiArODc0Nyw4IEBACiAJCTk3REQ0RDg0MEZE
RjRENkQwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFhTU0F1ZGl0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5N0RENEQ4NTBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBYU1NBdWRpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk3RUY3REZEMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRDb250cm9sbGVy
QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCOTcxNEQwMTI0QTg2NDUw
MEZEMjgyNiAvKiBFZGl0aW5nU3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRWRpdGluZ1N0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCOTcxNEQx
MTI0QTg2NDUwMEZEMjgyNiAvKiBFZGl0aW5nU3R5bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRWRpdGluZ1N0eWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGMEQ2QjJEMTIx
QkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOUYzQjk0N0QxMjI0MTc1ODAwNTMwNEU3IC8qIFNjcmlwdEhlYXBT
bmFwc2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRIZWFwU25h
cHNob3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MDAxLDYgKzE0MDA1LDgg
QEAKIAkJCQk5MzMwOUQ5NTA5OUU2NDkxMDA1NkU1ODEgLyogRWRpdENvbW1hbmQuaCAqLywKIAkJ
CQk0RjE1MzRERDExQjUzMkVDMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmggKi8sCiAJCQkJ
NEYxNTM0REYxMUI1MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvclR5cGVzLmggKi8sCisJ
CQkJOUI5NzE0RDAxMjRBODY0NTAwRkQyODI2IC8qIEVkaXRpbmdTdHlsZS5oICovLAorCQkJCTlC
OTcxNEQxMTI0QTg2NDUwMEZEMjgyNiAvKiBFZGl0aW5nU3R5bGUuY3BwICovLAogCQkJCTRCMzA0
M0NBMEFFMDM3M0IwMEE4MjY0NyAvKiBFZGl0b3IuY3BwICovLAogCQkJCTRCMzA0M0NCMEFFMDM3
M0IwMEE4MjY0NyAvKiBFZGl0b3IuaCAqLywKIAkJCQk5M0EzOEI0QTBEMEU1ODA4MDA2ODcyQzIg
LyogRWRpdG9yQ29tbWFuZC5jcHAgKi8sCkBAIC0yMDU4Miw2ICsyMDU4OCw3IEBACiAJCQkJODQ3
MzBEOTExMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NDczMEQ5MjEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJOUI5NzE0RDIxMjRBODY0NTAwRkQyODI2IC8qIEVkaXRpbmdT
dHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMzA2MSw2ICsyMzA2OCw3IEBACiAJCQkJODQ3MzBE
OEExMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVGlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NDcz
MEQ4QzEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg0NzMwRDkwMTI0OEYwQjMwMEQzQTlDOSAvKiBMaWdodFNvdXJjZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5Qjk3MTREMzEyNEE4NjQ1MDBGRDI4MjYgLyogRWRpdGluZ1N0eWxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNjgwNTkpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJ
KHdvcmtpbmcgY29weSkKQEAgLTIwOCw2ICsyMDgsNyBAQAogCWVkaXRpbmcvRGVsZXRlRnJvbVRl
eHROb2RlQ29tbWFuZC5jcHAgXAogCWVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAg
XAogCWVkaXRpbmcvRWRpdENvbW1hbmQuY3BwIFwKKwllZGl0aW5nL0VkaXRpbmdTdHlsZSBcCiAJ
ZWRpdGluZy9FZGl0b3IuY3BwIFwKIAllZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIFwKIAllZGl0
aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69363</attachid>
            <date>2010-09-30 12:36:42 -0700</date>
            <delta_ts>2010-10-01 17:02:57 -0700</delta_ts>
            <desc>Fixed per Eric&apos;s comment</desc>
            <filename>bug-46335-20100930123641.patch</filename>
            <type>text/plain</type>
            <size>30597</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODczNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDktMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVn
IDQ2MzM1IC0gQWRkIEVkaXRpbmdTdHlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDYzMzUKKworICAgICAgICBBZGRlZCBFZGl0aW5nU3R5bGUgdG8g
V2ViQ29yZS9lZGl0aW5nLiAgVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBn
ZXRQcm9wZXJ0aWVzTm90SW4sIHJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzLAorICAgICAgICBl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uLCBhbmQgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdCBp
biBBcHBseVN0eWxlQ29tbWFuZC5jcHAgb25jZSBkZXBsb3llZCBldmVyeXdoZXJlLgorICAgICAg
ICBEZXBsb3llZCBpdCBpbiB0eXBpbmcgc3R5bGVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBh
cmUgYWRkZWQgc2luY2UgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
Ojptb3ZlUGFyYWdyYXBocyk6IENhbGxzIGVkaXRpbmdTdHlsZUluY2x1ZGluZ1R5cGluZ1N0eWxl
LgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0
eUxpc3RJdGVtKTogVXNlcyBFZGl0aW5nU3R5bGUuCisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OnNhdmVUeXBpbmdTdHlsZVN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKTog
RGl0dG8uCisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmg6CisgICAg
ICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmVkaXRpbmdTdHlsZUZyb21Db21wdWVkU3R5bGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6OmluaXQpOiBBZGRlZDsgYSBjbG9uZSBvZiBBcHBseVN0eWxlQ29tbWFuZDo6
ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6
cmVtb3ZlVGV4dEZpbGxBbmRTdHJvbGVDb2xvcnNJZk5lZWRlZCk6IEV4dHJhY3RlZCBmcm9tIGlu
aXQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlcGxhY2VGb250U2l6ZUJ5S2V5
d29yZElmUG9zc2libGUpOiBFeHRyYWN0ZWQgZnJvbSBpbml0LgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ1N0eWxlOjppc0VtcHR5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnNldFN0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6
OmNsZWFyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92ZUJs
b2NrUHJvcGVydGllcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpw
cmVwYXJlVG9BcHBseUF0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjplZGl0aW5nU3R5bGVJ
bmNsdWRpbmdUeXBpbmdTdHlsZSk6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjcmVhdGUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6c3R5bGUpOiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVtb3ZlRm9ybWF0Q29tbWFuZDo6ZG9BcHBseSk6IFVzZXMgRWRpdGluZ1N0eWxlLgorICAg
ICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKTogSW5zdGFudGlhdGVz
IG1fdHlwaW5nU3R5bGUsIHdoaWNoIGlzIG5vdyBFZGl0aW5nU3R5bGUuCisgICAgICAgICogZWRp
dGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyOjp0eXBpbmdTdHlsZSk6IFVzZXMgRWRpdGluZ1N0eWxlLgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXJUeXBpbmdTdHlsZSk6IFVzZXMgRWRpdGlu
Z1N0eWxlLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0VHlwaW5n
U3R5bGUpOiBVc2VzIEVkaXRpbmdTdHlsZS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaDoKKwogMjAxMC0wOS0yOSAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KSW5kZXg6IFdlYkNv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gNjg3MzApCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC04OTIsNiArODkyLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRpbmcvRGVs
ZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCiAgICAgZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKKyAgICBlZGl0aW5nL0VkaXRp
bmdTdHlsZS5jcHAKICAgICBlZGl0aW5nL0VkaXRvci5jcHAKICAgICBlZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCiAgICAgZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkluZGV4OiBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0J
KHJldmlzaW9uIDY4NzMwKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5
KQpAQCAtMTI3Niw2ICsxMjc2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2Vk
aXRpbmcvRWRpdENvbW1hbmQuaCBcCiAJV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5o
IFwKIAlXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCBcCisJV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgXAorCVdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
aCBcCiAJV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIFwKIAlXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcCBcCiAJV2ViQ29yZS9lZGl0aW5nL0VkaXRvckRlbGV0ZUFjdGlvbi5oIFwK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5neXBpCShyZXZpc2lvbiA2ODczMCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzYzLDYgKzEzNjMsOCBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdENv
bW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaCcsCiAgICAg
ICAgICAgICAnZWRpdGluZy9FZGl0aW5nQmVoYXZpb3JUeXBlcy5oJywKKyAgICAgICAgICAgICdl
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdG9yLmNwcCcsCiAgICAgICAgICAgICAn
ZWRpdGluZy9FZGl0b3IuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS5wcm8JKHJldmlzaW9uIDY4NzMwKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtNzgyLDYgKzc4Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGVkaXRpbmcvRGVs
ZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvRWRpdENvbW1hbmQuY3BwIFwKKyAgICBlZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHAgXAogICAgIGVkaXRpbmcvRWRpdG9yLmNwcCBcCiAgICAgZWRpdGlu
Zy9FZGl0b3JDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
IFwKQEAgLTE2NzYsNiArMTY3Nyw3IEBAIEhFQURFUlMgKz0gXAogICAgIGVkaXRpbmcvRGVsZXRl
RnJvbVRleHROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQuaCBcCiAgICAgZWRpdGluZy9FZGl0Q29tbWFuZC5oIFwKKyAgICBlZGl0aW5nL0VkaXRpbmdT
dHlsZS5oIFwKICAgICBlZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oIFwKICAgICBlZGl0aW5nL0Vk
aXRvci5oIFwKICAgICBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2ODczMCkKKysr
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0yODU1LDYgKzI4NTUsOCBAQAogCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNT
QXVkaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5N0RENEQ4NDBGREY0RDZEMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgKi87IH07CiAJCTk3
REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0RENEQ4NTBGREY0RDZFMDBFQ0Y5QTQgLyog
WFNTQXVkaXRvci5oICovOyB9OwogCQk5N0VGN0RGRTEwN0U1NUI3MDBEN0M0OUMgLyogU2NyaXB0
Q29udHJvbGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTdFRjdERkQxMDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNl
LmNwcCAqLzsgfTsKKwkJOUJBQjZDNkMxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJBQjZDNkEx
MjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTlCQUI2QzZEMTI1NTA2MzEwMDE2MjZENCAvKiBF
ZGl0aW5nU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOUJBQjZDNkIxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5jcHAgKi87IH07
CiAJCTlGMEQ2QjJFMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJD
MTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAqLzsgfTsKIAkJ
OUYwRDZCMkYxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJEMTIxQkZF
QkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi87IH07CiAJCTlGM0I5NDdF
MTIyNDE3NTgwMDUzMDRFNyAvKiBTY3JpcHRIZWFwU25hcHNob3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGM0I5NDdEMTIyNDE3NTgwMDUzMDRFNyAv
KiBTY3JpcHRIZWFwU25hcHNob3QuaCAqLzsgfTsKQEAgLTg4MTgsNiArODgyMCw4IEBACiAJCTk3
REQ0RDg0MEZERjRENkQwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhTU0F1ZGl0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5N0RENEQ4NTBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU1NBdWRpdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk3RUY3REZEMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250cm9s
bGVyQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRD
b250cm9sbGVyQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCQUI2QzZB
MTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRWRpdGluZ1N0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTlCQUI2QzZCMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWRpdGluZ1N0eWxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOUYwRDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlG
MEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUYzQjk0N0QxMjI0MTc1ODAwNTMwNEU3IC8qIFNj
cmlwdEhlYXBTbmFwc2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jp
cHRIZWFwU25hcHNob3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MTI4LDYg
KzE0MTMyLDggQEAKIAkJCQk5MzMwOUQ5NTA5OUU2NDkxMDA1NkU1ODEgLyogRWRpdENvbW1hbmQu
aCAqLywKIAkJCQk0RjE1MzRERDExQjUzMkVDMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmgg
Ki8sCiAJCQkJNEYxNTM0REYxMUI1MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvclR5cGVz
LmggKi8sCisJCQkJOUJBQjZDNkExMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5oICov
LAorCQkJCTlCQUI2QzZCMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuY3BwICovLAog
CQkJCTRCMzA0M0NBMEFFMDM3M0IwMEE4MjY0NyAvKiBFZGl0b3IuY3BwICovLAogCQkJCTRCMzA0
M0NCMEFFMDM3M0IwMEE4MjY0NyAvKiBFZGl0b3IuaCAqLywKIAkJCQk5M0EzOEI0QTBEMEU1ODA4
MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgKi8sCkBAIC0xOTA3NCw2ICsxOTA4MCw3IEBA
CiAJCQkJOTMzMDlERTQwOTlFNjQ5MjAwNTZFNTgxIC8qIEVkaXRDb21tYW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0RjE1MzRERTExQjUzMkVDMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0RjE1MzRFMDExQjUzMzAyMDAyMUZEODYgLyogRWRpdGluZ0Jl
aGF2aW9yVHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTlCQUI2QzZDMTI1NTA2MzEwMDE2MjZE
NCAvKiBFZGl0aW5nU3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTBCNkE0MDk5REYwMjcw
MDkwRDc4MSAvKiBFZGl0aW5nVGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzMDQzQ0QwQUUw
MzczQjAwQTgyNjQ3IC8qIEVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGMzI2NzkwRDc4
Qjk0NDAwNjhGMEM0IC8qIEVkaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzMxMSw2
ICsyMzMxOCw3IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNz
b3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1
OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRG
NEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUJBQjZD
NkQxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gNjg3
MzApCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MzAsMTMgKzkzMCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBoCiAgICAgLy8gQSBub24tZW1wdHkgcGFyYWdyYXBoJ3Mgc3R5bGUgaXMgbW92
ZWQgd2hlbiB3ZSBjb3B5IGFuZCBtb3ZlIGl0LiAgV2UgZG9uJ3QgbW92ZSAKICAgICAvLyBhbnl0
aGluZyBpZiB3ZSdyZSBnaXZlbiBhbiBlbXB0eSBwYXJhZ3JhcGgsIGJ1dCBhbiBlbXB0eSBwYXJh
Z3JhcGggY2FuIGhhdmUgc3R5bGUKICAgICAvLyB0b28sIDxkaXY+PGI+PGJyPjwvYj48L2Rpdj4g
Zm9yIGV4YW1wbGUuICBTYXZlIGl0IHNvIHRoYXQgd2UgY2FuIHByZXNlcnZlIGl0IGxhdGVyLgot
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVJbkVtcHR5UGFyYWdy
YXBoOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlSW5FbXB0eVBhcmFncmFwaDsKICAg
ICBpZiAoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSA9PSBlbmRPZlBhcmFncmFwaFRvTW92ZSAmJiBw
cmVzZXJ2ZVN0eWxlKSB7Ci0gICAgICAgIHN0eWxlSW5FbXB0eVBhcmFncmFwaCA9IEFwcGx5U3R5
bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUu
ZGVlcEVxdWl2YWxlbnQoKSwgSW5jbHVkZVR5cGluZ1N0eWxlKTsKKyAgICAgICAgc3R5bGVJbkVt
cHR5UGFyYWdyYXBoID0gZWRpdGluZ1N0eWxlSW5jbHVkaW5nVHlwaW5nU3R5bGUoc3RhcnRPZlBh
cmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgLy8gVGhlIG1vdmVkIHBh
cmFncmFwaCBzaG91bGQgYXNzdW1lIHRoZSBibG9jayBzdHlsZSBvZiB0aGUgZGVzdGluYXRpb24u
CiAgICAgICAgIHN0eWxlSW5FbXB0eVBhcmFncmFwaC0+cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7
CiAgICAgfQotICAgIAorCiAgICAgLy8gRklYTUUgKDUwOTg5MzEpOiBXZSBzaG91bGQgYWRkIGEg
bmV3IGluc2VydCBhY3Rpb24gIldlYlZpZXdJbnNlcnRBY3Rpb25Nb3ZlZCIgYW5kIGNhbGwgc2hv
dWxkSW5zZXJ0RnJhZ21lbnQgaGVyZS4KICAgICAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihzdGFydCwgZW5kLCBET1dOU1RSRUFNKSk7CkBAIC05NzYsNyArOTc2LDcg
QEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIC8vIElmIHRo
ZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1wdHkgcGFyYWdyYXBoLCByZXN0b3JlIHN0eWxlcyBmcm9t
IHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBoIHRvIHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBoLgogICAg
IGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBhcmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzQ2Fy
ZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0
KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkp
OwogICAgIGlmIChzdHlsZUluRW1wdHlQYXJhZ3JhcGggJiYgc2VsZWN0aW9uSXNFbXB0eVBhcmFn
cmFwaCkKLSAgICAgICAgYXBwbHlTdHlsZShzdHlsZUluRW1wdHlQYXJhZ3JhcGguZ2V0KCkpOwor
ICAgICAgICBhcHBseVN0eWxlKHN0eWxlSW5FbXB0eVBhcmFncmFwaC0+c3R5bGUoKSk7CiAgICAg
CiAgICAgaWYgKHByZXNlcnZlU2VsZWN0aW9uICYmIHN0YXJ0SW5kZXggIT0gLTEpIHsKICAgICAg
ICAgLy8gRnJhZ21lbnQgY3JlYXRpb24gKHVzaW5nIGNyZWF0ZU1hcmt1cCkgaW5jb3JyZWN0bHkg
dXNlcyByZWd1bGFyCkBAIC05OTgsNyArOTk4LDcgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6YnJlYWtPdXRPZkVtcAogICAgIGlmICghZW1wdHlMaXN0SXRlbSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9
IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKGVuZGluZ1NlbGVjdGlv
bigpLnN0YXJ0KCksIEluY2x1ZGVUeXBpbmdTdHlsZSk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHls
ZT4gc3R5bGUgPSBlZGl0aW5nU3R5bGVJbmNsdWRpbmdUeXBpbmdTdHlsZShlbmRpbmdTZWxlY3Rp
b24oKS5zdGFydCgpKTsKIAogICAgIE5vZGUqIGxpc3ROb2RlID0gZW1wdHlMaXN0SXRlbS0+cGFy
ZW50Tm9kZSgpOwogICAgIC8vIEZJWE1FOiBDYW4ndCB3ZSBkbyBzb21ldGhpbmcgYmV0dGVyIHdo
ZW4gdGhlIGltbWVkaWF0ZSBwYXJlbnQgd2Fzbid0IGEgbGlzdCBub2RlPwpAQCAtMTA0Nyw5ICsx
MDQ3LDkgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcAogICAgIGFw
cGVuZEJsb2NrUGxhY2Vob2xkZXIobmV3QmxvY2spOwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9uKG5ld0Jsb2NrLmdldCgpLCAwKSwgRE9XTlNUUkVBTSkp
OwogCi0gICAgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChzdHlsZS5nZXQoKSwgZW5kaW5n
U2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgaWYgKHN0eWxlLT5sZW5ndGgoKSkKLSAgICAgICAg
YXBwbHlTdHlsZShzdHlsZS5nZXQoKSk7CisgICAgc3R5bGUtPnByZXBhcmVUb0FwcGx5QXQoZW5k
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgaWYgKCFzdHlsZS0+aXNFbXB0eSgpKQorICAg
ICAgICBhcHBseVN0eWxlKHN0eWxlLT5zdHlsZSgpKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJl
dmlzaW9uIDY4NzMwKQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsMTQgKzI5NCwxNCBAQCB2b2lkIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OnNhdmVUeXBpbmdTCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZpZ3Vy
ZSBvdXQgdGhlIHR5cGluZyBzdHlsZSBpbiBlZmZlY3QgYmVmb3JlIHRoZSBkZWxldGUgaXMgZG9u
ZS4KLSAgICBtX3R5cGluZ1N0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0
UG9zaXRpb24ocG9zaXRpb25CZWZvcmVUYWJTcGFuKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQo
KSkpOworICAgIG1fdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwb3NpdGlvbkJl
Zm9yZVRhYlNwYW4obV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKSk7CiAKLSAgICByZW1vdmVF
bmNsb3NpbmdBbmNob3JTdHlsZShtX3R5cGluZ1N0eWxlLmdldCgpLCBtX3NlbGVjdGlvblRvRGVs
ZXRlLnN0YXJ0KCkpOworICAgIHJlbW92ZUVuY2xvc2luZ0FuY2hvclN0eWxlKG1fdHlwaW5nU3R5
bGUtPnN0eWxlKCksIG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSk7CiAKICAgICAvLyBJZiB3
ZSdyZSBkZWxldGluZyBpbnRvIGEgTWFpbCBibG9ja3F1b3RlLCBzYXZlIHRoZSBzdHlsZSBhdCBl
bmQoKSBpbnN0ZWFkIG9mIHN0YXJ0KCkKICAgICAvLyBXZSdsbCB1c2UgdGhpcyBsYXRlciBpbiBj
b21wdXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSBpZiB3ZSBlbmQgdXAgb3V0c2lkZSBvZiBhIE1h
aWwgYmxvY2txdW90ZQogICAgIGlmIChuZWFyZXN0TWFpbEJsb2NrcXVvdGUobV9zZWxlY3Rpb25U
b0RlbGV0ZS5zdGFydCgpLm5vZGUoKSkpCi0gICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVT
dHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKG1fc2VsZWN0
aW9uVG9EZWxldGUuZW5kKCkpOworICAgICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUg
PSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX3NlbGVjdGlvblRvRGVsZXRlLmVuZCgpKTsKICAgICBl
bHNlCiAgICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IDA7CiB9CkBAIC02OTMs
OCArNjkzLDggQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxhdGVUeQogICAg
ICAgICBtX3R5cGluZ1N0eWxlID0gbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlOwogICAgIG1f
ZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IDA7CiAKLSAgICBwcmVwYXJlRWRpdGluZ1N0eWxl
VG9BcHBseUF0KG1fdHlwaW5nU3R5bGUuZ2V0KCksIG1fZW5kaW5nUG9zaXRpb24pOwotICAgIGlm
ICghbV90eXBpbmdTdHlsZS0+bGVuZ3RoKCkpCisgICAgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBw
bHlBdChtX3R5cGluZ1N0eWxlLT5zdHlsZSgpLCBtX2VuZGluZ1Bvc2l0aW9uKTsKKyAgICBpZiAo
bV90eXBpbmdTdHlsZS0+aXNFbXB0eSgpKQogICAgICAgICBtX3R5cGluZ1N0eWxlID0gMDsKICAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChtX2VuZGluZ1Bvc2l0aW9uKTsKICAgICBpZiAo
bV90eXBpbmdTdHlsZSAmJiAKQEAgLTcwNyw3ICs3MDcsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OmNhbGN1bGF0ZVR5CiAgICAgICAgIC8vIHRoZW4gbW92ZSBpdCBiYWNrICh3aGlj
aCB3aWxsIGNsZWFyIHR5cGluZyBzdHlsZSkuCiAKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KHZpc2libGVFbmQpOwotICAgICAgICBhcHBseVN0eWxlKG1fdHlwaW5nU3R5bGUuZ2V0KCksIEVk
aXRBY3Rpb25VbnNwZWNpZmllZCk7CisgICAgICAgIGFwcGx5U3R5bGUobV90eXBpbmdTdHlsZS0+
c3R5bGUoKSwgRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKICAgICAgICAgLy8gYXBwbHlTdHlsZSBj
YW4gZGVzdHJveSB0aGUgcGxhY2Vob2xkZXIgdGhhdCB3YXMgYXQgbV9lbmRpbmdQb3NpdGlvbiBp
ZiBpdCBuZWVkcyB0byAKICAgICAgICAgLy8gbW92ZSBpdCwgYnV0IGl0IHdpbGwgc2V0IGFuIGVu
ZGluZ1NlbGVjdGlvbigpIGF0IFttb3ZlZFBsYWNlaG9sZGVyLCAwXSBpZiBpdCBkb2VzIHNvLgog
ICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKTsKQEAg
LTcxNyw3ICs3MTcsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5
CiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBjaGFyYWN0
ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQgb25lcywK
ICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sgYW5kIHN0
YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAgICAgLy8g
cHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnNl
bGVjdGlvbigpLT5zZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxlKTsKKyAgICBkb2N1bWVudCgp
LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHlsZSA/IG1f
dHlwaW5nU3R5bGUtPnN0eWxlKCkgOiAwKTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpjbGVhclRyYW5zaWVudFN0YXRlKCkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuaAkocmV2aXNpb24gNjg3MzApCisrKyBXZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRWRpdGluZ1N0eWxlOworCiBjbGFzcyBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsgCiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVsZXRlU2VsZWN0aW9uQ29tbWFuZD4gY3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBzbWFydERlbGV0ZSA9IGZhbHNlLCBib29sIG1lcmdl
QmxvY2tzQWZ0ZXJEZWxldGUgPSB0cnVlLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBleHBh
bmRGb3JTcGVjaWFsRWxlbWVudHMgPSBmYWxzZSkKQEAgLTg2LDggKzg4LDggQEAgcHJpdmF0ZToK
ICAgICBQb3NpdGlvbiBtX3RyYWlsaW5nV2hpdGVzcGFjZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9z
dGFydEJsb2NrOwogICAgIFJlZlB0cjxOb2RlPiBtX2VuZEJsb2NrOwotICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV90eXBpbmdTdHlsZTsKLSAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsKKyAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiBtX3R5cGluZ1N0eWxlOworICAgIFJlZlB0cjxFZGl0aW5nU3R5
bGU+IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9zdGFy
dFJvb3Q7CiAgICAgUmVmUHRyPE5vZGU+IG1fZW5kUm9vdDsKICAgICBSZWZQdHI8Tm9kZT4gbV9z
dGFydFRhYmxlUm93OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgi
CisKKyNpbmNsdWRlICJBcHBseVN0eWxlQ29tbWFuZC5oIgorI2luY2x1ZGUgIkNTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1
ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZWRpdGluZ1N0eWxlRnJv
bUNvbXB1ZWRTdHlsZShDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAg
IGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3JlYXRlKCk7CisgICAgcmV0dXJuIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVOb25FZGl0aW5n
UHJvcGVydGllcyhzdHlsZSk7Cit9CisKK0VkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKCkKKzog
bV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShmYWxzZSkKK3sKK30KKworRWRpdGluZ1N0
eWxlOjpFZGl0aW5nU3R5bGUoTm9kZSogbm9kZSkKKzogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRG
b250U2l6ZShmYWxzZSkKK3sKKyAgICBpbml0KG5vZGUpOworfQorCitFZGl0aW5nU3R5bGU6OkVk
aXRpbmdTdHlsZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCis6IG1fc2hvdWxkVXNlRml4ZWRE
ZWZhdWx0Rm9udFNpemUoZmFsc2UpCit7CisgICAgaW5pdChwb3NpdGlvbi5ub2RlKCkpOworfQor
CitFZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZShjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSkKKzogbV9tdXRhYmxlU3R5bGUoc3R5bGUtPmNvcHkoKSkKKywgbV9zaG91bGRVc2VGaXhl
ZERlZmF1bHRGb250U2l6ZShmYWxzZSkKK3sKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OmluaXQo
Tm9kZSogbm9kZSkKK3sKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBj
b21wdXRlZFN0eWxlQXRQb3NpdGlvbiA9IGNvbXB1dGVkU3R5bGUobm9kZSk7CisgICAgbV9tdXRh
YmxlU3R5bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHVlZFN0eWxlKGNvbXB1dGVkU3R5bGVBdFBv
c2l0aW9uLmdldCgpKTsKKworICAgIGlmIChub2RlICYmIG5vZGUtPmNvbXB1dGVkU3R5bGUoKSkg
eworICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxl
KCk7CisgICAgICAgIHJlbW92ZVRleHRGaWxsQW5kU3Ryb2xlQ29sb3JzSWZOZWVkZWQocmVuZGVy
U3R5bGUpOworICAgICAgICByZXBsYWNlRm9udFNpemVCeUtleXdvcmRJZlBvc3NpYmxlKHJlbmRl
clN0eWxlLCBjb21wdXRlZFN0eWxlQXRQb3NpdGlvbi5nZXQoKSk7CisgICAgfQorCisgICAgbV9z
aG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uLT51
c2VGaXhlZEZvbnREZWZhdWx0U2l6ZSgpOworfQorCit2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3Zl
VGV4dEZpbGxBbmRTdHJvbGVDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUp
Cit7CisgICAgLy8gSWYgYSBub2RlJ3MgdGV4dCBmaWxsIGNvbG9yIGlzIGludmFsaWQsIHRoZW4g
aXRzIGNoaWxkcmVuIHVzZSAKKyAgICAvLyB0aGVpciBmb250LWNvbG9yIGFzIHRoZWlyIHRleHQg
ZmlsbCBjb2xvciAodGhleSBkb24ndAorICAgIC8vIGluaGVyaXQgaXQpLiAgTGlrZXdpc2UgZm9y
IHN0cm9rZSBjb2xvci4KKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAoIXJlbmRl
clN0eWxlLT50ZXh0RmlsbENvbG9yKCkuaXNWYWxpZCgpKQorICAgICAgICBtX211dGFibGVTdHls
ZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLCBlYyk7Cisg
ICAgaWYgKCFyZW5kZXJTdHlsZS0+dGV4dFN0cm9rZUNvbG9yKCkuaXNWYWxpZCgpKQorICAgICAg
ICBtX211dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ry
b2tlQ29sb3IsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6
OnJlcGxhY2VGb250U2l6ZUJ5S2V5d29yZElmUG9zc2libGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0
eWxlLCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24qIGNvbXB1dGVkU3R5bGUpCit7CisgICAg
QVNTRVJUKHJlbmRlclN0eWxlKTsKKyAgICBpZiAocmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpLmtleXdvcmRTaXplKCkpCisgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRTaXplLCBjb21wdXRlZFN0eWxlLT5nZXRGb250U2l6ZUNTU1ZhbHVlUHJl
ZmVycmluZ0tleXdvcmQoKS0+Y3NzVGV4dCgpKTsKK30KKworYm9vbCBFZGl0aW5nU3R5bGU6Omlz
RW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9tdXRhYmxlU3R5bGUgfHwgbV9tdXRhYmxl
U3R5bGUtPmlzRW1wdHkoKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnNldFN0eWxlKFBhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlKQoreworICAgIG1fbXV0YWJs
ZVN0eWxlID0gc3R5bGU7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZpZ3Vy
ZSBvdXQgd2hldGhlciBvciBub3QgZm9udCBpcyBmaXhlZCB3aWR0aCBmb3IgbXV0YWJsZSBzdHls
ZS4KKyAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvbnQtZmFtaWx5IGlzIG1vbm9zcGFjZSBhcyBp
biBGb250RGVzY3JpcHRpb24gYnV0IHdlIGRvbid0IHdhbnQgdG8gZHVwbGljYXRlIGNvZGUgaGVy
ZS4KKyAgICBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplID0gZmFsc2U7Cit9CisKK3Zv
aWQgRWRpdGluZ1N0eWxlOjpjbGVhcigpCit7CisgICAgbV9tdXRhYmxlU3R5bGUuY2xlYXIoKTsK
KyAgICBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplID0gZmFsc2U7Cit9CisKK3ZvaWQg
RWRpdGluZ1N0eWxlOjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQoreworICAgIGlmICghbV9tdXRh
YmxlU3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVC
bG9ja1Byb3BlcnRpZXMoKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5
QXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIC8vIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKCkgcmVxdWlyZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG9u
bHkgcmVtb3ZlcyB0aGUgZWRpdGluZyBzdHlsZS4KKyAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIHdh
cyBtb2RpZmllZCBpbiB0aGUgZnV0dXJlIHRvIGRlbGV0ZSBhbGwgcmVkdW5kYW50IHByb3BlcnRp
ZXMsIHRoZW4gYWRkIGEgYm9vbGVhbiB2YWx1ZSB0byBpbmRpY2F0ZQorICAgIC8vIHdoaWNoIG9u
ZSBvZiBlZGl0aW5nU3R5bGVBdFBvc2l0aW9uIG9yIGNvbXB1dGVkU3R5bGUgaXMgY2FsbGVkLgor
ICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocG9z
aXRpb24pOworICAgIHN0eWxlLT5tX211dGFibGVTdHlsZS0+ZGlmZihtX211dGFibGVTdHlsZS5n
ZXQoKSk7CisKKyAgICAvLyBpZiBhbHBoYSB2YWx1ZSBpcyB6ZXJvLCB3ZSBkb24ndCBhZGQgdGhl
IGJhY2tncm91bmQgY29sb3IuCisgICAgUmVmUHRyPENTU1ZhbHVlPiBiYWNrZ3JvdW5kQ29sb3Ig
PSBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcik7CisgICAgaWYgKGJhY2tncm91bmRDb2xvciAmJiBiYWNrZ3JvdW5kQ29sb3ItPmlz
UHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGJhY2tncm91bmRDb2xvci5n
ZXQoKSk7CisgICAgICAgIENvbG9yIGNvbG9yID0gQ29sb3IocHJpbWl0aXZlVmFsdWUtPmdldFJH
QkEzMlZhbHVlKCkpOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICBpZiAoIWNv
bG9yLmFscGhhKCkpCisgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHko
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIGVjKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8
RWRpdGluZ1N0eWxlPiBlZGl0aW5nU3R5bGVJbmNsdWRpbmdUeXBpbmdTdHlsZShjb25zdCBQb3Np
dGlvbiYgcG9zaXRpb24pCit7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gZWR0aW5nU3R5bGUg
PSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwb3NpdGlvbik7CisgICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHR5cGluZ1N0eWxlID0gcG9zaXRpb24ubm9kZSgpLT5kb2N1bWVudCgpLT5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKKyAgICBpZiAodHlwaW5nU3R5bGUpIHsK
KyAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBpbmhlcml0YWJsZVR5
cGluZ1N0eWxlID0gdHlwaW5nU3R5bGUtPmNvcHkoKTsKKyAgICAgICAgQXBwbHlTdHlsZUNvbW1h
bmQ6OnJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzKGluaGVyaXRhYmxlVHlwaW5nU3R5bGUuZ2V0
KCkpOworICAgICAgICBlZHRpbmdTdHlsZS0+c3R5bGUoKS0+bWVyZ2UoaW5oZXJpdGFibGVUeXBp
bmdTdHlsZS5nZXQoKSwgdHJ1ZSk7CisgICAgfQorICAgIHJldHVybiBlZHRpbmdTdHlsZTsKK30K
KyAgICAKK30KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEVkaXRpbmdTdHlsZV9oCisjZGVmaW5lIEVkaXRpbmdTdHlsZV9oCisKKyNpbmNsdWRl
ICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiUG9zaXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NT
dHlsZURlY2xhcmF0aW9uOworY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOworCitj
bGFzcyBFZGl0aW5nU3R5bGUgOiBwdWJsaWMgUmVmQ291bnRlZDxFZGl0aW5nU3R5bGU+IHsKK3B1
YmxpYzoKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gY3JlYXRlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRWRpdGluZ1N0eWxlKCkpOworICAgIH0K
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gY3JlYXRlKE5vZGUqIG5vZGUp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHlsZShub2RlKSk7
CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBjcmVhdGUoY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBFZGl0aW5nU3R5bGUocG9zaXRpb24pKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxFZGl0aW5nU3R5bGU+IGNyZWF0ZShjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRWRpdGluZ1N0eWxlKHN0eWxlKSk7
CisgICAgfQorCisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgeyByZXR1
cm4gbV9tdXRhYmxlU3R5bGUuZ2V0KCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+KTsK
KyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCByZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKKyAg
ICB2b2lkIHByZXBhcmVUb0FwcGx5QXQoY29uc3QgUG9zaXRpb24mKTsKKworcHJpdmF0ZToKKyAg
ICBFZGl0aW5nU3R5bGUoKTsKKyAgICBFZGl0aW5nU3R5bGUoTm9kZSopOworICAgIEVkaXRpbmdT
dHlsZShjb25zdCBQb3NpdGlvbiYpOworICAgIEVkaXRpbmdTdHlsZShjb25zdCBDU1NTdHlsZURl
Y2xhcmF0aW9uKik7CisgICAgdm9pZCBpbml0KE5vZGUqKTsKKyAgICB2b2lkIHJlbW92ZVRleHRG
aWxsQW5kU3Ryb2xlQ29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqKTsKKyAgICB2b2lkIHJlcGxh
Y2VGb250U2l6ZUJ5S2V5d29yZElmUG9zc2libGUoUmVuZGVyU3R5bGUqLCBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24qKTsKKworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gbV9tdXRhYmxlU3R5bGU7CisgICAgYm9vbCBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRT
aXplOworfTsKKworUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGVkaXRpbmdTdHlsZUluY2x1ZGlu
Z1R5cGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJik7CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFZGl0aW5nU3R5bGVfaApJbmRleDogV2ViQ29yZS9lZGl0aW5nL1Jl
bW92ZUZvcm1hdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1v
dmVGb3JtYXRDb21tYW5kLmNwcAkocmV2aXNpb24gNjg3MzApCisrKyBXZWJDb3JlL2VkaXRpbmcv
UmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
dm9pZCBSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBHZXQgdGhlIGRlZmF1
bHQgc3R5bGUgZm9yIHRoaXMgZWRpdGFibGUgcm9vdCwgaXQncyB0aGUgc3R5bGUgdGhhdCB3ZSds
bCBnaXZlIHRoZQogICAgIC8vIGNvbnRlbnQgdGhhdCB3ZSdyZSBvcGVyYXRpbmcgb24uCiAgICAg
Tm9kZSogcm9vdCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwot
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZGVmYXVsdFN0eWxlID0gQXBw
bHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24oUG9zaXRpb24ocm9vdCwgMCkp
OworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGRlZmF1bHRTdHlsZSA9IEVkaXRpbmdTdHlsZTo6
Y3JlYXRlKHJvb3QpOwogCiAgICAgLy8gRGVsZXRlIHRoZSBzZWxlY3RlZCBjb250ZW50LgogICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBsZWF2ZSB0aGlzIHRvIGluc2VydFRleHQs
IGJ1dCBpdHMgZGVsZXRlIG9wZXJhdGlvbgpAQCAtNzgsOCArNzgsOCBAQCB2b2lkIFJlbW92ZUZv
cm1hdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIAogICAgIC8vIEluc2VydCB0aGUgY29udGVudCB3
aXRoIHRoZSBkZWZhdWx0IHN0eWxlLgogICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTc5NDM4
Mj4gUmVtb3ZlRm9ybWF0IGRvZXNuJ3QgYWx3YXlzIHJlc2V0IHRleHQgYWxpZ25tZW50Ci0gICAg
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHlsZShkZWZhdWx0U3R5bGUucmVsZWFzZSgp
KTsKLSAgICAKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFR5cGluZ1N0eWxlKGRlZmF1bHRT
dHlsZS0+c3R5bGUoKSk7CisKICAgICBpbnB1dFRleHQoc3RyaW5nLCB0cnVlKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNjg3MzAp
CisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDYgKzczLDcgQEAgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJv
bGxlcgogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1feFBvc0ZvclZlcnRpY2FsQXJyb3dO
YXZpZ2F0aW9uKE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKQogICAgICwgbV9ncmFu
dWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKKyAgICAsIG1fdHlwaW5nU3R5bGUoRWRpdGlu
Z1N0eWxlOjpjcmVhdGUoKSkKICAgICAsIG1fY2FyZXRCbGlua1RpbWVyKHRoaXMsICZTZWxlY3Rp
b25Db250cm9sbGVyOjpjYXJldEJsaW5rVGltZXJGaXJlZCkKICAgICAsIG1fY2FyZXRSZWN0TmVl
ZHNVcGRhdGUodHJ1ZSkKICAgICAsIG1fYWJzQ2FyZXRCb3VuZHNEaXJ0eSh0cnVlKQpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiA2ODczMCkKKysrIFdl
YkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKICNpZm5kZWYgU2VsZWN0aW9uQ29udHJvbGxlcl9oCiAjZGVmaW5lIFNlbGVj
dGlvbkNvbnRyb2xsZXJfaAogCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aCIKKyNpbmNsdWRlICJFZGl0aW5nU3R5bGUuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTY3JvbGxCZWhhdmlvci5oIgpAQCAtMzcsNiArMzcs
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGcmFtZTsKK2NsYXNzIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSFRNTEZv
cm1FbGVtZW50OwogY2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtMjE0LDcgKzIxNSw3IEBAIHByaXZh
dGU6CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBtX3NlbGVjdGlvbjsKICAgICBUZXh0R3JhbnVsYXJp
dHkgbV9ncmFudWxhcml0eTsKIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gbV90eXBpbmdTdHlsZTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBtX3R5cGluZ1N0eWxl
OwogCiAgICAgVGltZXI8U2VsZWN0aW9uQ29udHJvbGxlcj4gbV9jYXJldEJsaW5rVGltZXI7CiAK
QEAgLTIzNCwxNyArMjM1LDE3IEBAIHByaXZhdGU6CiAKIGlubGluZSBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogU2VsZWN0aW9uQ29udHJvbGxlcjo6dHlwaW5nU3R5bGUoKSBjb25zdAogewot
ICAgIHJldHVybiBtX3R5cGluZ1N0eWxlLmdldCgpOworICAgIHJldHVybiBtX3R5cGluZ1N0eWxl
LT5zdHlsZSgpOwogfQogCiBpbmxpbmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjbGVhclR5
cGluZ1N0eWxlKCkKIHsKLSAgICBtX3R5cGluZ1N0eWxlLmNsZWFyKCk7CisgICAgbV90eXBpbmdT
dHlsZS0+Y2xlYXIoKTsKIH0KIAogaW5saW5lIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0
VHlwaW5nU3R5bGUoUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUp
CiB7Ci0gICAgbV90eXBpbmdTdHlsZSA9IHN0eWxlOworICAgIG1fdHlwaW5nU3R5bGUtPnNldFN0
eWxlKHN0eWxlKTsKIH0KIAogI2lmICEoUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKENIUk9NSVVNKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAkocmV2aXNpb24gNjg3MzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgdHlwZWRlZiBWZWN0b3I8
UmVmUHRyPFJlbmRlclN0eWxlPiwgND4gUAogY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZD
b3VudGVkPFJlbmRlclN0eWxlPiB7CiAgICAgZnJpZW5kIGNsYXNzIEFuaW1hdGlvbkJhc2U7IC8v
IFVzZWQgYnkgQ1NTIGFuaW1hdGlvbnMuIFdlIGNhbid0IGFsbG93IHRoZW0gdG8gYW5pbWF0ZSBi
YXNlZCBvZmYgdmlzaXRlZCBjb2xvcnMuCiAgICAgZnJpZW5kIGNsYXNzIEFwcGx5U3R5bGVDb21t
YW5kOyAvLyBFZGl0aW5nIGhhcyB0byBvbmx5IHJldmVhbCB1bnZpc2l0ZWQgaW5mby4KKyAgICBm
cmllbmQgY2xhc3MgRWRpdGluZ1N0eWxlOyAvLyBFZGl0aW5nIGhhcyB0byBvbmx5IHJldmVhbCB1
bnZpc2l0ZWQgaW5mby4KICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsgLy8gU2V0
cyBtZW1iZXJzIGRpcmVjdGx5LgogICAgIGZyaWVuZCBjbGFzcyBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb247IC8vIElnbm9yZXMgdmlzaXRlZCBzdHlsZXMsIHNvIG5lZWRzIHRvIGJlIGFibGUg
dG8gc2VlIHVudmlzaXRlZCBpbmZvLgogICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0eVdyYXBwZXJN
YXliZUludmFsaWRDb2xvcjsgLy8gVXNlZCBieSBDU1MgYW5pbWF0aW9ucy4gV2UgY2FuJ3QgYWxs
b3cgdGhlbSB0byBhbmltYXRlIGJhc2VkIG9mZiB2aXNpdGVkIGNvbG9ycy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69541</attachid>
            <date>2010-10-01 17:03:01 -0700</date>
            <delta_ts>2010-10-01 17:04:12 -0700</delta_ts>
            <desc>fixed more per Eric&apos;s comment</desc>
            <filename>bug-46335-20101001170259.patch</filename>
            <type>text/plain</type>
            <size>33172</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODkzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAzIEBACisyMDEwLTEwLTAxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1
ZyA0NjMzNSAtIEFkZCBFZGl0aW5nU3R5bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ2MzM1CisKKyAgICAgICAgQWRkZWQgRWRpdGluZ1N0eWxlIHRv
IFdlYkNvcmUvZWRpdGluZy4gIFRoaXMgY2xhc3MgaXMgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUg
Z2V0UHJvcGVydGllc05vdEluLCByZW1vdmVOb25FZGl0aW5nUHJvcGVydGllcywKKyAgICAgICAg
ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbiwgYW5kIHByZXBhcmVFZGl0aW5nU3R5bGVUb0FwcGx5QXQg
aW4gQXBwbHlTdHlsZUNvbW1hbmQuY3BwIG9uY2UgZGVwbG95ZWQgZXZlcnl3aGVyZS4KKyAgICAg
ICAgRGVwbG95ZWQgaXQgaW4gdHlwaW5nIHN0eWxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMg
YXJlIGFkZGVkIHNpbmNlIHRoaXMgaXMgYSByZWZhY3RvcmluZyBpbiBwcm9ncmVzcy4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6bW92ZVBhcmFncmFwaHMpOiBDYWxscyBlZGl0aW5nU3R5bGVJbmNsdWRpbmdUeXBpbmdTdHls
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1w
dHlMaXN0SXRlbSk6IFVzZXMgRWRpdGluZ1N0eWxlLgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSk6
IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oOgorICAg
ICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjplZGl0aW5nU3R5bGVGcm9tQ29tcHVlZFN0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ1N0eWxlOjppbml0KTogQWRkZWQ7IGEgY2xvbmUgb2YgQXBwbHlTdHlsZUNvbW1hbmQ6
OmVkaXRpbmdTdHlsZUF0UG9zaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6
OnJlbW92ZVRleHRGaWxsQW5kU3Ryb2xlQ29sb3JzSWZOZWVkZWQpOiBFeHRyYWN0ZWQgZnJvbSBp
bml0LgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZXBsYWNlRm9udFNpemVCeUtl
eXdvcmRJZlBvc3NpYmxlKTogRXh0cmFjdGVkIGZyb20gaW5pdC4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6aXNFbXB0eSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGlu
Z1N0eWxlOjpzZXRTdHlsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxl
OjpjbGVhcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVC
bG9ja1Byb3BlcnRpZXMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6
cHJlcGFyZVRvQXBwbHlBdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZWRpdGluZ1N0eWxl
SW5jbHVkaW5nVHlwaW5nU3R5bGUpOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdT
dHlsZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6Y3JlYXRlKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnN0eWxlKTogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbW92ZUZvcm1hdENvbW1hbmQ6OmRvQXBwbHkpOiBVc2VzIEVkaXRpbmdTdHlsZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcik6IEluc3RhbnRpYXRl
cyBtX3R5cGluZ1N0eWxlLCB3aGljaCBpcyBub3cgRWRpdGluZ1N0eWxlLgorICAgICAgICAqIGVk
aXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6dHlwaW5nU3R5bGUpOiBVc2VzIEVkaXRpbmdTdHlsZS4KKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmNsZWFyVHlwaW5nU3R5bGUpOiBVc2VzIEVkaXRp
bmdTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFR5cGlu
Z1N0eWxlKTogVXNlcyBFZGl0aW5nU3R5bGUuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmg6CisKKzIwMTAtMTAtMDEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVn
IDQ2MzM1IC0gQWRkIEVkaXRpbmdTdHlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDYzMzUKKworICAgICAgICBBZGRlZCBFZGl0aW5nU3R5bGUgdG8g
V2ViQ29yZS9lZGl0aW5nLiAgVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBn
ZXRQcm9wZXJ0aWVzTm90SW4sIHJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzLAorICAgICAgICBl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uLCBhbmQgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdCBp
biBBcHBseVN0eWxlQ29tbWFuZC5jcHAgb25jZSBkZXBsb3llZCBldmVyeXdoZXJlLgorICAgICAg
ICBEZXBsb3llZCBpdCBpbiB0eXBpbmcgc3R5bGVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBh
cmUgYWRkZWQgc2luY2UgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
Ojptb3ZlUGFyYWdyYXBocyk6IENhbGxzIGVkaXRpbmdTdHlsZUluY2x1ZGluZ1R5cGluZ1N0eWxl
LgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0
eUxpc3RJdGVtKTogVXNlcyBFZGl0aW5nU3R5bGUuCisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OnNhdmVUeXBpbmdTdHlsZVN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKTog
RGl0dG8uCisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmg6CisgICAg
ICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmVkaXRpbmdTdHlsZUZyb21Db21wdWVkU3R5bGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6OmluaXQpOiBBZGRlZDsgYSBjbG9uZSBvZiBBcHBseVN0eWxlQ29tbWFuZDo6
ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6
cmVtb3ZlVGV4dEZpbGxBbmRTdHJvbGVDb2xvcnNJZk5lZWRlZCk6IEV4dHJhY3RlZCBmcm9tIGlu
aXQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlcGxhY2VGb250U2l6ZUJ5S2V5
d29yZElmUG9zc2libGUpOiBFeHRyYWN0ZWQgZnJvbSBpbml0LgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ1N0eWxlOjppc0VtcHR5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnNldFN0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6
OmNsZWFyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92ZUJs
b2NrUHJvcGVydGllcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpw
cmVwYXJlVG9BcHBseUF0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjplZGl0aW5nU3R5bGVJ
bmNsdWRpbmdUeXBpbmdTdHlsZSk6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjcmVhdGUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6c3R5bGUpOiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVtb3ZlRm9ybWF0Q29tbWFuZDo6ZG9BcHBseSk6IFVzZXMgRWRpdGluZ1N0eWxlLgorICAg
ICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKTogSW5zdGFudGlhdGVz
IG1fdHlwaW5nU3R5bGUsIHdoaWNoIGlzIG5vdyBFZGl0aW5nU3R5bGUuCisgICAgICAgICogZWRp
dGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyOjp0eXBpbmdTdHlsZSk6IFVzZXMgRWRpdGluZ1N0eWxlLgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXJUeXBpbmdTdHlsZSk6IFVzZXMgRWRpdGlu
Z1N0eWxlLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0VHlwaW5n
U3R5bGUpOiBVc2VzIEVkaXRpbmdTdHlsZS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaDoKKwogMjAxMC0xMC0wMSAgRXJpYyBVaHJoYW5lICA8ZXJpY3VAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgpJbmRleDogV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiA2ODkzMSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTg5MSw2ICs4OTEsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9EZWxldGVG
cm9tVGV4dE5vZGVDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcAorICAgIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcAogICAgIGVkaXRpbmcvRWRpdG9yLmNwcAogICAgIGVkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKICAgICBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKSW5kZXg6IFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gNjg5MzEpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjc3LDYgKzEyNzcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmggXAog
CVdlYkNvcmUvZWRpdGluZy9FZGl0aW5nQmVoYXZpb3JUeXBlcy5oIFwKKwlXZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcCBcCisJV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oIFwK
IAlXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgXAogCVdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwIFwKIAlXZWJDb3JlL2VkaXRpbmcvRWRpdG9yRGVsZXRlQWN0aW9uLmggXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDY4OTMxKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNjIsNiArMTM2Miw4IEBACiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0Q29tbWFu
ZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oJywKICAgICAgICAg
ICAgICdlZGl0aW5nL0VkaXRpbmdCZWhhdmlvclR5cGVzLmgnLAorICAgICAgICAgICAgJ2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcCcsCisgICAgICAgICAgICAnZWRpdGluZy9FZGl0aW5nU3R5bGUu
aCcsCiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0b3IuY3BwJywKICAgICAgICAgICAgICdlZGl0
aW5nL0VkaXRvci5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwJywK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNjg5MzEpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC03ODEsNiArNzgxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGluZy9EZWxldGVG
cm9tVGV4dE5vZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcCBcCiAgICAgZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAgXAorICAgIGVkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcCBcCiAgICAgZWRpdGluZy9FZGl0b3IuY3BwIFwKICAgICBlZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAgXApA
QCAtMTY3Niw2ICsxNjc3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgZWRpdGluZy9EZWxldGVGcm9t
VGV4dE5vZGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5o
IFwKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmggXAorICAgIGVkaXRpbmcvRWRpdGluZ1N0eWxl
LmggXAogICAgIGVkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmggXAogICAgIGVkaXRpbmcvRWRpdG9y
LmggXAogICAgIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmggXApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY4OTMxKQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI4OTgsNiArMjg5OCw4IEBACiAJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRp
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
REQ0RDg0MEZERjRENkQwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCAqLzsgfTsKIAkJOTdERDRE
ODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3REQ0RDg1MEZERjRENkUwMEVDRjlBNCAvKiBYU1NB
dWRpdG9yLmggKi87IH07CiAJCTk3RUY3REZFMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250
cm9sbGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5N0VGN0RGRDEwN0U1NUI3MDBEN0M0OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuY3Bw
ICovOyB9OworCQk5QkFCNkM2QzEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkFCNkM2QTEyNTUw
NjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUJBQjZDNkQxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRp
bmdTdHlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QkFCNkM2QjEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmNwcCAqLzsgfTsKIAkJ
OUYwRDZCMkUxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUYwRDZCMkMxMjFC
RkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICovOyB9OwogCQk5RjBE
NkIyRjEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUYwRDZCMkQxMjFCRkVCQTAw
NkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCAqLzsgfTsKIAkJOUYzQjk0N0UxMjI0
MTc1ODAwNTMwNEU3IC8qIFNjcmlwdEhlYXBTbmFwc2hvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUYzQjk0N0QxMjI0MTc1ODAwNTMwNEU3IC8qIFNj
cmlwdEhlYXBTbmFwc2hvdC5oICovOyB9OwpAQCAtODg5OSw2ICs4OTAxLDggQEAKIAkJOTdERDRE
ODQwRkRGNEQ2RDAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gWFNTQXVkaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk3REQ0RDg1MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTU0F1ZGl0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTdFRjdERkQxMDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJC
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENvbnRy
b2xsZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUJBQjZDNkExMjU1
MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFZGl0aW5nU3R5bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUJB
QjZDNkIxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFZGl0aW5nU3R5bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5RjBENkIyQzEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUYwRDZC
MkQxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5RjNCOTQ3RDEyMjQxNzU4MDA1MzA0RTcgLyogU2NyaXB0
SGVhcFNuYXBzaG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEhl
YXBTbmFwc2hvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQyNzcsNiArMTQy
ODEsOCBAQAogCQkJCTkzMzA5RDk1MDk5RTY0OTEwMDU2RTU4MSAvKiBFZGl0Q29tbWFuZC5oICov
LAogCQkJCTRGMTUzNEREMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3IuaCAqLywK
IAkJCQk0RjE1MzRERjExQjUzMzAyMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCAq
LywKKwkJCQk5QkFCNkM2QTEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggKi8sCisJ
CQkJOUJBQjZDNkIxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5jcHAgKi8sCiAJCQkJ
NEIzMDQzQ0EwQUUwMzczQjAwQTgyNjQ3IC8qIEVkaXRvci5jcHAgKi8sCiAJCQkJNEIzMDQzQ0Iw
QUUwMzczQjAwQTgyNjQ3IC8qIEVkaXRvci5oICovLAogCQkJCTkzQTM4QjRBMEQwRTU4MDgwMDY4
NzJDMiAvKiBFZGl0b3JDb21tYW5kLmNwcCAqLywKQEAgLTE5MjA1LDYgKzE5MjExLDcgQEAKIAkJ
CQk5MzMwOURFNDA5OUU2NDkyMDA1NkU1ODEgLyogRWRpdENvbW1hbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTRGMTUzNERFMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTRGMTUzNEUwMTFCNTMzMDIwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZp
b3JUeXBlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUJBQjZDNkMxMjU1MDYzMTAwMTYyNkQ0IC8q
IEVkaXRpbmdTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2QTQwOTlERjAyNzAwOTBE
NzgxIC8qIEVkaXRpbmdUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QjMwNDNDRDBBRTAzNzNC
MDBBODI2NDcgLyogRWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUYzMjY3OTBENzhCOTQ0
MDA2OEYwQzQgLyogRWRpdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIxNzk4LDYgKzIx
ODA1LDcgQEAKIAkJCQlBN0NGQjNENTBCN0VEMTE4MDA3MEMzMkQgLyogRHJhZ0ltYWdlTWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3RkE2MjAwRDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNO
b2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURFMzA5OUU2NDkyMDA1NkU1ODEg
LyogRWRpdENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUJBQjZDNkQxMjU1MDYzMTAw
MTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTUwQjZBMzA5
OURGMDI3MDA5MEQ3ODEgLyogRWRpdGluZ1RleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEIz
MDQzQ0MwQUUwMzczQjAwQTgyNjQ3IC8qIEVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
M0EzOEI0QjBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNp
b24gNjg5MzEpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MzAsMTMgKzkzMCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgLy8gQSBub24tZW1wdHkgcGFyYWdyYXBoJ3Mgc3R5bGUg
aXMgbW92ZWQgd2hlbiB3ZSBjb3B5IGFuZCBtb3ZlIGl0LiAgV2UgZG9uJ3QgbW92ZSAKICAgICAv
LyBhbnl0aGluZyBpZiB3ZSdyZSBnaXZlbiBhbiBlbXB0eSBwYXJhZ3JhcGgsIGJ1dCBhbiBlbXB0
eSBwYXJhZ3JhcGggY2FuIGhhdmUgc3R5bGUKICAgICAvLyB0b28sIDxkaXY+PGI+PGJyPjwvYj48
L2Rpdj4gZm9yIGV4YW1wbGUuICBTYXZlIGl0IHNvIHRoYXQgd2UgY2FuIHByZXNlcnZlIGl0IGxh
dGVyLgotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVJbkVtcHR5
UGFyYWdyYXBoOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlSW5FbXB0eVBhcmFncmFw
aDsKICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSA9PSBlbmRPZlBhcmFncmFwaFRvTW92
ZSAmJiBwcmVzZXJ2ZVN0eWxlKSB7Ci0gICAgICAgIHN0eWxlSW5FbXB0eVBhcmFncmFwaCA9IEFw
cGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHN0YXJ0T2ZQYXJhZ3JhcGhU
b01vdmUuZGVlcEVxdWl2YWxlbnQoKSwgSW5jbHVkZVR5cGluZ1N0eWxlKTsKKyAgICAgICAgc3R5
bGVJbkVtcHR5UGFyYWdyYXBoID0gZWRpdGluZ1N0eWxlSW5jbHVkaW5nVHlwaW5nU3R5bGUoc3Rh
cnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgLy8gVGhlIG1v
dmVkIHBhcmFncmFwaCBzaG91bGQgYXNzdW1lIHRoZSBibG9jayBzdHlsZSBvZiB0aGUgZGVzdGlu
YXRpb24uCiAgICAgICAgIHN0eWxlSW5FbXB0eVBhcmFncmFwaC0+cmVtb3ZlQmxvY2tQcm9wZXJ0
aWVzKCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gRklYTUUgKDUwOTg5MzEpOiBXZSBzaG91bGQg
YWRkIGEgbmV3IGluc2VydCBhY3Rpb24gIldlYlZpZXdJbnNlcnRBY3Rpb25Nb3ZlZCIgYW5kIGNh
bGwgc2hvdWxkSW5zZXJ0RnJhZ21lbnQgaGVyZS4KICAgICAKICAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5kLCBET1dOU1RSRUFNKSk7CkBAIC05NzYsNyAr
OTc2LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIC8v
IElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1wdHkgcGFyYWdyYXBoLCByZXN0b3JlIHN0eWxl
cyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBoIHRvIHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBo
LgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBhcmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigp
LmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkpOwogICAgIGlmIChzdHlsZUluRW1wdHlQYXJhZ3JhcGggJiYgc2VsZWN0aW9uSXNFbXB0
eVBhcmFncmFwaCkKLSAgICAgICAgYXBwbHlTdHlsZShzdHlsZUluRW1wdHlQYXJhZ3JhcGguZ2V0
KCkpOworICAgICAgICBhcHBseVN0eWxlKHN0eWxlSW5FbXB0eVBhcmFncmFwaC0+c3R5bGUoKSk7
CiAgICAgCiAgICAgaWYgKHByZXNlcnZlU2VsZWN0aW9uICYmIHN0YXJ0SW5kZXggIT0gLTEpIHsK
ICAgICAgICAgLy8gRnJhZ21lbnQgY3JlYXRpb24gKHVzaW5nIGNyZWF0ZU1hcmt1cCkgaW5jb3Jy
ZWN0bHkgdXNlcyByZWd1bGFyCkBAIC05OTgsNyArOTk4LDcgQEAgYm9vbCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6YnJlYWtPdXRPZkVtcAogICAgIGlmICghZW1wdHlMaXN0SXRlbSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBz
dHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKGVuZGluZ1Nl
bGVjdGlvbigpLnN0YXJ0KCksIEluY2x1ZGVUeXBpbmdTdHlsZSk7CisgICAgUmVmUHRyPEVkaXRp
bmdTdHlsZT4gc3R5bGUgPSBlZGl0aW5nU3R5bGVJbmNsdWRpbmdUeXBpbmdTdHlsZShlbmRpbmdT
ZWxlY3Rpb24oKS5zdGFydCgpKTsKIAogICAgIE5vZGUqIGxpc3ROb2RlID0gZW1wdHlMaXN0SXRl
bS0+cGFyZW50Tm9kZSgpOwogICAgIC8vIEZJWE1FOiBDYW4ndCB3ZSBkbyBzb21ldGhpbmcgYmV0
dGVyIHdoZW4gdGhlIGltbWVkaWF0ZSBwYXJlbnQgd2Fzbid0IGEgbGlzdCBub2RlPwpAQCAtMTA0
Nyw5ICsxMDQ3LDkgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcAog
ICAgIGFwcGVuZEJsb2NrUGxhY2Vob2xkZXIobmV3QmxvY2spOwogICAgIHNldEVuZGluZ1NlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9uKG5ld0Jsb2NrLmdldCgpLCAwKSwgRE9XTlNU
UkVBTSkpOwogCi0gICAgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChzdHlsZS5nZXQoKSwg
ZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgaWYgKHN0eWxlLT5sZW5ndGgoKSkKLSAg
ICAgICAgYXBwbHlTdHlsZShzdHlsZS5nZXQoKSk7CisgICAgc3R5bGUtPnByZXBhcmVUb0FwcGx5
QXQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgaWYgKCFzdHlsZS0+aXNFbXB0eSgp
KQorICAgICAgICBhcHBseVN0eWxlKHN0eWxlLT5zdHlsZSgpKTsKICAgICAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDY4OTMxKQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsMTQgKzI5NCwxNCBAQCB2b2lkIERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVUeXBpbmdTCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IEZpZ3VyZSBvdXQgdGhlIHR5cGluZyBzdHlsZSBpbiBlZmZlY3QgYmVmb3JlIHRoZSBkZWxldGUg
aXMgZG9uZS4KLSAgICBtX3R5cGluZ1N0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdT
dHlsZUF0UG9zaXRpb24ocG9zaXRpb25CZWZvcmVUYWJTcGFuKG1fc2VsZWN0aW9uVG9EZWxldGUu
c3RhcnQoKSkpOworICAgIG1fdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwb3Np
dGlvbkJlZm9yZVRhYlNwYW4obV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKSk7CiAKLSAgICBy
ZW1vdmVFbmNsb3NpbmdBbmNob3JTdHlsZShtX3R5cGluZ1N0eWxlLmdldCgpLCBtX3NlbGVjdGlv
blRvRGVsZXRlLnN0YXJ0KCkpOworICAgIHJlbW92ZUVuY2xvc2luZ0FuY2hvclN0eWxlKG1fdHlw
aW5nU3R5bGUtPnN0eWxlKCksIG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSk7CiAKICAgICAv
LyBJZiB3ZSdyZSBkZWxldGluZyBpbnRvIGEgTWFpbCBibG9ja3F1b3RlLCBzYXZlIHRoZSBzdHls
ZSBhdCBlbmQoKSBpbnN0ZWFkIG9mIHN0YXJ0KCkKICAgICAvLyBXZSdsbCB1c2UgdGhpcyBsYXRl
ciBpbiBjb21wdXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSBpZiB3ZSBlbmQgdXAgb3V0c2lkZSBv
ZiBhIE1haWwgYmxvY2txdW90ZQogICAgIGlmIChuZWFyZXN0TWFpbEJsb2NrcXVvdGUobV9zZWxl
Y3Rpb25Ub0RlbGV0ZS5zdGFydCgpLm5vZGUoKSkpCi0gICAgICAgIG1fZGVsZXRlSW50b0Jsb2Nr
cXVvdGVTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKG1f
c2VsZWN0aW9uVG9EZWxldGUuZW5kKCkpOworICAgICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3Rl
U3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX3NlbGVjdGlvblRvRGVsZXRlLmVuZCgpKTsK
ICAgICBlbHNlCiAgICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IDA7CiB9CkBA
IC02OTMsOCArNjkzLDggQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxhdGVU
eQogICAgICAgICBtX3R5cGluZ1N0eWxlID0gbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlOwog
ICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IDA7CiAKLSAgICBwcmVwYXJlRWRpdGlu
Z1N0eWxlVG9BcHBseUF0KG1fdHlwaW5nU3R5bGUuZ2V0KCksIG1fZW5kaW5nUG9zaXRpb24pOwot
ICAgIGlmICghbV90eXBpbmdTdHlsZS0+bGVuZ3RoKCkpCisgICAgcHJlcGFyZUVkaXRpbmdTdHls
ZVRvQXBwbHlBdChtX3R5cGluZ1N0eWxlLT5zdHlsZSgpLCBtX2VuZGluZ1Bvc2l0aW9uKTsKKyAg
ICBpZiAobV90eXBpbmdTdHlsZS0+aXNFbXB0eSgpKQogICAgICAgICBtX3R5cGluZ1N0eWxlID0g
MDsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChtX2VuZGluZ1Bvc2l0aW9uKTsKICAg
ICBpZiAobV90eXBpbmdTdHlsZSAmJiAKQEAgLTcwNyw3ICs3MDcsNyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5CiAgICAgICAgIC8vIHRoZW4gbW92ZSBpdCBiYWNr
ICh3aGljaCB3aWxsIGNsZWFyIHR5cGluZyBzdHlsZSkuCiAKICAgICAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKHZpc2libGVFbmQpOwotICAgICAgICBhcHBseVN0eWxlKG1fdHlwaW5nU3R5bGUuZ2V0
KCksIEVkaXRBY3Rpb25VbnNwZWNpZmllZCk7CisgICAgICAgIGFwcGx5U3R5bGUobV90eXBpbmdT
dHlsZS0+c3R5bGUoKSwgRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKICAgICAgICAgLy8gYXBwbHlT
dHlsZSBjYW4gZGVzdHJveSB0aGUgcGxhY2Vob2xkZXIgdGhhdCB3YXMgYXQgbV9lbmRpbmdQb3Np
dGlvbiBpZiBpdCBuZWVkcyB0byAKICAgICAgICAgLy8gbW92ZSBpdCwgYnV0IGl0IHdpbGwgc2V0
IGFuIGVuZGluZ1NlbGVjdGlvbigpIGF0IFttb3ZlZFBsYWNlaG9sZGVyLCAwXSBpZiBpdCBkb2Vz
IHNvLgogICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQo
KTsKQEAgLTcxNyw3ICs3MTcsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1
bGF0ZVR5CiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBj
aGFyYWN0ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQg
b25lcywKICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sg
YW5kIHN0YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAg
ICAgLy8gcHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGRvY3VtZW50KCktPmZyYW1l
KCktPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxlKTsKKyAgICBkb2N1
bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHls
ZSA/IG1fdHlwaW5nU3R5bGUtPnN0eWxlKCkgOiAwKTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0YXRlKCkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuaAkocmV2aXNpb24gNjg5MzEpCisrKyBXZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRWRpdGluZ1N0eWxlOworCiBjbGFz
cyBEZWxldGVTZWxlY3Rpb25Db21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsg
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVsZXRlU2VsZWN0aW9uQ29tbWFuZD4g
Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBzbWFydERlbGV0ZSA9IGZhbHNlLCBib29s
IG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUgPSB0cnVlLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9v
bCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMgPSBmYWxzZSkKQEAgLTg2LDggKzg4LDggQEAgcHJp
dmF0ZToKICAgICBQb3NpdGlvbiBtX3RyYWlsaW5nV2hpdGVzcGFjZTsKICAgICBSZWZQdHI8Tm9k
ZT4gbV9zdGFydEJsb2NrOwogICAgIFJlZlB0cjxOb2RlPiBtX2VuZEJsb2NrOwotICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV90eXBpbmdTdHlsZTsKLSAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsK
KyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBtX3R5cGluZ1N0eWxlOworICAgIFJlZlB0cjxFZGl0
aW5nU3R5bGU+IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsKICAgICBSZWZQdHI8Tm9kZT4g
bV9zdGFydFJvb3Q7CiAgICAgUmVmUHRyPE5vZGU+IG1fZW5kUm9vdDsKICAgICBSZWZQdHI8Tm9k
ZT4gbV9zdGFydFRhYmxlUm93OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgorCisjaW5jbHVkZSAiQXBwbHlTdHlsZUNv
bW1hbmQuaCIKKyNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNs
dWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGVkaXRpbmdTdHlsZUZyb21Db21wdWVkU3R5bGUoQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1
cm4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIHJldHVybiBBcHBs
eVN0eWxlQ29tbWFuZDo6cmVtb3ZlTm9uRWRpdGluZ1Byb3BlcnRpZXMoc3R5bGUpOworfQorCitF
ZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZSgpCisgICAgOiBtX3Nob3VsZFVzZUZpeGVkRGVmYXVs
dEZvbnRTaXplKGZhbHNlKQoreworfQorCitFZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZShOb2Rl
KiBub2RlKQorICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShmYWxzZSkKK3sK
KyAgICBpbml0KG5vZGUpOworfQorCitFZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZShjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24pCisgICAgOiBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXpl
KGZhbHNlKQoreworICAgIGluaXQocG9zaXRpb24ubm9kZSgpKTsKK30KKworRWRpdGluZ1N0eWxl
OjpFZGl0aW5nU3R5bGUoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCisgICAgOiBt
X211dGFibGVTdHlsZShzdHlsZS0+Y29weSgpKQorICAgICwgbV9zaG91bGRVc2VGaXhlZERlZmF1
bHRGb250U2l6ZShmYWxzZSkKK3sKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OmluaXQoTm9kZSog
bm9kZSkKK3sKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRl
ZFN0eWxlQXRQb3NpdGlvbiA9IGNvbXB1dGVkU3R5bGUobm9kZSk7CisgICAgbV9tdXRhYmxlU3R5
bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHVlZFN0eWxlKGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9u
LmdldCgpKTsKKworICAgIGlmIChub2RlICYmIG5vZGUtPmNvbXB1dGVkU3R5bGUoKSkgeworICAg
ICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKCk7Cisg
ICAgICAgIHJlbW92ZVRleHRGaWxsQW5kU3Ryb2xlQ29sb3JzSWZOZWVkZWQocmVuZGVyU3R5bGUp
OworICAgICAgICByZXBsYWNlRm9udFNpemVCeUtleXdvcmRJZlBvc3NpYmxlKHJlbmRlclN0eWxl
LCBjb21wdXRlZFN0eWxlQXRQb3NpdGlvbi5nZXQoKSk7CisgICAgfQorCisgICAgbV9zaG91bGRV
c2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uLT51c2VGaXhl
ZEZvbnREZWZhdWx0U2l6ZSgpOworfQorCit2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZp
bGxBbmRTdHJvbGVDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpCit7Cisg
ICAgLy8gSWYgYSBub2RlJ3MgdGV4dCBmaWxsIGNvbG9yIGlzIGludmFsaWQsIHRoZW4gaXRzIGNo
aWxkcmVuIHVzZSAKKyAgICAvLyB0aGVpciBmb250LWNvbG9yIGFzIHRoZWlyIHRleHQgZmlsbCBj
b2xvciAodGhleSBkb24ndAorICAgIC8vIGluaGVyaXQgaXQpLiAgTGlrZXdpc2UgZm9yIHN0cm9r
ZSBjb2xvci4KKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAoIXJlbmRlclN0eWxl
LT50ZXh0RmlsbENvbG9yKCkuaXNWYWxpZCgpKQorICAgICAgICBtX211dGFibGVTdHlsZS0+cmVt
b3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLCBlYyk7CisgICAgaWYg
KCFyZW5kZXJTdHlsZS0+dGV4dFN0cm9rZUNvbG9yKCkuaXNWYWxpZCgpKQorICAgICAgICBtX211
dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29s
b3IsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnJlcGxh
Y2VGb250U2l6ZUJ5S2V5d29yZElmUG9zc2libGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24qIGNvbXB1dGVkU3R5bGUpCit7CisgICAgQVNTRVJU
KHJlbmRlclN0eWxlKTsKKyAgICBpZiAocmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmtl
eXdvcmRTaXplKCkpCisgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBjb21wdXRlZFN0eWxlLT5nZXRGb250U2l6ZUNTU1ZhbHVlUHJlZmVycmlu
Z0tleXdvcmQoKS0+Y3NzVGV4dCgpKTsKK30KKworYm9vbCBFZGl0aW5nU3R5bGU6OmlzRW1wdHko
KSBjb25zdAoreworICAgIHJldHVybiAhbV9tdXRhYmxlU3R5bGUgfHwgbV9tdXRhYmxlU3R5bGUt
PmlzRW1wdHkoKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnNldFN0eWxlKFBhc3NSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlKQoreworICAgIG1fbXV0YWJsZVN0eWxl
ID0gc3R5bGU7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQg
d2hldGhlciBvciBub3QgZm9udCBpcyBmaXhlZCB3aWR0aCBmb3IgbXV0YWJsZSBzdHlsZS4KKyAg
ICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvbnQtZmFtaWx5IGlzIG1vbm9zcGFjZSBhcyBpbiBGb250
RGVzY3JpcHRpb24gYnV0IHdlIGRvbid0IHdhbnQgdG8gZHVwbGljYXRlIGNvZGUgaGVyZS4KKyAg
ICBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplID0gZmFsc2U7Cit9CisKK3ZvaWQgRWRp
dGluZ1N0eWxlOjpjbGVhcigpCit7CisgICAgbV9tdXRhYmxlU3R5bGUuY2xlYXIoKTsKKyAgICBt
X3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplID0gZmFsc2U7Cit9CisKK3ZvaWQgRWRpdGlu
Z1N0eWxlOjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQoreworICAgIGlmICghbV9tdXRhYmxlU3R5
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVCbG9ja1By
b3BlcnRpZXMoKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIC8vIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVTdHlsZVNwYW5zKCkgcmVxdWlyZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgcmVt
b3ZlcyB0aGUgZWRpdGluZyBzdHlsZS4KKyAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIHdhcyBtb2Rp
ZmllZCBpbiB0aGUgZnV0dXJlIHRvIGRlbGV0ZSBhbGwgcmVkdW5kYW50IHByb3BlcnRpZXMsIHRo
ZW4gYWRkIGEgYm9vbGVhbiB2YWx1ZSB0byBpbmRpY2F0ZQorICAgIC8vIHdoaWNoIG9uZSBvZiBl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uIG9yIGNvbXB1dGVkU3R5bGUgaXMgY2FsbGVkLgorICAgIFJl
ZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocG9zaXRpb24p
OworICAgIHN0eWxlLT5tX211dGFibGVTdHlsZS0+ZGlmZihtX211dGFibGVTdHlsZS5nZXQoKSk7
CisKKyAgICAvLyBpZiBhbHBoYSB2YWx1ZSBpcyB6ZXJvLCB3ZSBkb24ndCBhZGQgdGhlIGJhY2tn
cm91bmQgY29sb3IuCisgICAgUmVmUHRyPENTU1ZhbHVlPiBiYWNrZ3JvdW5kQ29sb3IgPSBtX211
dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cik7CisgICAgaWYgKGJhY2tncm91bmRDb2xvciAmJiBiYWNrZ3JvdW5kQ29sb3ItPmlzUHJpbWl0
aXZlVmFsdWUoKQorICAgICAgICAmJiAhYWxwaGFDaGFubmVsKHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oYmFja2dyb3VuZENvbG9yLmdldCgpKS0+Z2V0UkdCQTMyVmFsdWUoKSkpIHsK
KyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92
ZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBlYyk7CisgICAgfQorfQorCitQ
YXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZWRpdGluZ1N0eWxlSW5jbHVkaW5nVHlwaW5nU3R5bGUo
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGVk
dGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocG9zaXRpb24pOworICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSA9IHBvc2l0aW9uLm5vZGUoKS0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCk7CisgICAgaWYgKHR5cGlu
Z1N0eWxlKSB7CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gaW5o
ZXJpdGFibGVUeXBpbmdTdHlsZSA9IHR5cGluZ1N0eWxlLT5jb3B5KCk7CisgICAgICAgIEFwcGx5
U3R5bGVDb21tYW5kOjpyZW1vdmVOb25FZGl0aW5nUHJvcGVydGllcyhpbmhlcml0YWJsZVR5cGlu
Z1N0eWxlLmdldCgpKTsKKyAgICAgICAgZWR0aW5nU3R5bGUtPnN0eWxlKCktPm1lcmdlKGluaGVy
aXRhYmxlVHlwaW5nU3R5bGUuZ2V0KCksIHRydWUpOworICAgIH0KKyAgICByZXR1cm4gZWR0aW5n
U3R5bGU7Cit9CisgICAgCit9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBFZGl0aW5nU3R5bGVfaAorI2RlZmluZSBFZGl0aW5nU3R5bGVfaAor
CisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIlBvc2l0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbjsKKworY2xhc3MgRWRpdGluZ1N0eWxlIDogcHVibGljIFJlZkNvdW50ZWQ8RWRpdGluZ1N0
eWxlPiB7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNy
ZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHlsZSgp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNyZWF0ZShO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0aW5nU3R5
bGUobm9kZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4g
Y3JlYXRlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRWRpdGluZ1N0eWxlKHBvc2l0aW9uKSk7CisgICAgfQorCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBjcmVhdGUoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHls
ZShzdHlsZSkpOworICAgIH0KKworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSgpIHsgcmV0dXJuIG1fbXV0YWJsZVN0eWxlLmdldCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPik7CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0
aWVzKCk7CisgICAgdm9pZCBwcmVwYXJlVG9BcHBseUF0KGNvbnN0IFBvc2l0aW9uJik7CisKK3By
aXZhdGU6CisgICAgRWRpdGluZ1N0eWxlKCk7CisgICAgRWRpdGluZ1N0eWxlKE5vZGUqKTsKKyAg
ICBFZGl0aW5nU3R5bGUoY29uc3QgUG9zaXRpb24mKTsKKyAgICBFZGl0aW5nU3R5bGUoY29uc3Qg
Q1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAgIHZvaWQgaW5pdChOb2RlKik7CisgICAgdm9pZCBy
ZW1vdmVUZXh0RmlsbEFuZFN0cm9sZUNvbG9yc0lmTmVlZGVkKFJlbmRlclN0eWxlKik7CisgICAg
dm9pZCByZXBsYWNlRm9udFNpemVCeUtleXdvcmRJZlBvc3NpYmxlKFJlbmRlclN0eWxlKiwgQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKik7CisKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IG1fbXV0YWJsZVN0eWxlOworICAgIGJvb2wgbV9zaG91bGRVc2VGaXhlZERl
ZmF1bHRGb250U2l6ZTsKK307CisKK1Bhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBlZGl0aW5nU3R5
bGVJbmNsdWRpbmdUeXBpbmdTdHlsZShjb25zdCBQb3NpdGlvbiYpOworICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRWRpdGluZ1N0eWxlX2gKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDY4OTMxKQorKysgV2ViQ29y
ZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3
ICs1OSw3IEBAIHZvaWQgUmVtb3ZlRm9ybWF0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgLy8gR2V0
IHRoZSBkZWZhdWx0IHN0eWxlIGZvciB0aGlzIGVkaXRhYmxlIHJvb3QsIGl0J3MgdGhlIHN0eWxl
IHRoYXQgd2UnbGwgZ2l2ZSB0aGUKICAgICAvLyBjb250ZW50IHRoYXQgd2UncmUgb3BlcmF0aW5n
IG9uLgogICAgIE5vZGUqIHJvb3QgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKTsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGRlZmF1bHRT
dHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBvc2l0aW9u
KHJvb3QsIDApKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBkZWZhdWx0U3R5bGUgPSBFZGl0
aW5nU3R5bGU6OmNyZWF0ZShyb290KTsKIAogICAgIC8vIERlbGV0ZSB0aGUgc2VsZWN0ZWQgY29u
dGVudC4KICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gbGVhdmUgdGhpcyB0byBp
bnNlcnRUZXh0LCBidXQgaXRzIGRlbGV0ZSBvcGVyYXRpb24KQEAgLTc4LDggKzc4LDggQEAgdm9p
ZCBSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAgICAvLyBJbnNlcnQgdGhl
IGNvbnRlbnQgd2l0aCB0aGUgZGVmYXVsdCBzdHlsZS4KICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9i
bGVtLzU3OTQzODI+IFJlbW92ZUZvcm1hdCBkb2Vzbid0IGFsd2F5cyByZXNldCB0ZXh0IGFsaWdu
bWVudAotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0VHlwaW5nU3R5bGUoZGVmYXVsdFN0eWxl
LnJlbGVhc2UoKSk7Ci0gICAgCisgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHls
ZShkZWZhdWx0U3R5bGUtPnN0eWxlKCkpOworCiAgICAgaW5wdXRUZXh0KHN0cmluZywgdHJ1ZSk7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDY4OTMxKQorKysgV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVj
dGlvbkNvbnRyb2xsZXIKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikKICAg
ICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCisgICAgLCBtX3R5cGluZ1N0
eWxlKEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCkpCiAgICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlz
LCAmU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQpCiAgICAgLCBtX2Nh
cmV0UmVjdE5lZWRzVXBkYXRlKHRydWUpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1
ZSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gNjg5
MzEpCisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFNlbGVjdGlvbkNvbnRyb2xsZXJfaAogI2Rl
ZmluZSBTZWxlY3Rpb25Db250cm9sbGVyX2gKIAotI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKQEAg
LTM3LDYgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CitjbGFz
cyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNs
YXNzIEhUTUxGb3JtRWxlbWVudDsKIGNsYXNzIFJlbmRlck9iamVjdDsKQEAgLTIxNCw3ICsyMTUs
NyBAQCBwcml2YXRlOgogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb247CiAgICAgVGV4
dEdyYW51bGFyaXR5IG1fZ3JhbnVsYXJpdHk7CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IG1fdHlwaW5nU3R5bGU7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbV90
eXBpbmdTdHlsZTsKIAogICAgIFRpbWVyPFNlbGVjdGlvbkNvbnRyb2xsZXI+IG1fY2FyZXRCbGlu
a1RpbWVyOwogCkBAIC0yMzQsMTcgKzIzNSwxNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnR5cGluZ1N0eWxlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV90eXBpbmdTdHlsZS5nZXQoKTsKKyAgICByZXR1cm4gbV90
eXBpbmdTdHlsZS0+c3R5bGUoKTsKIH0KIAogaW5saW5lIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6Y2xlYXJUeXBpbmdTdHlsZSgpCiB7Ci0gICAgbV90eXBpbmdTdHlsZS5jbGVhcigpOworICAg
IG1fdHlwaW5nU3R5bGUtPmNsZWFyKCk7CiB9CiAKIGlubGluZSB2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OnNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IHN0eWxlKQogewotICAgIG1fdHlwaW5nU3R5bGUgPSBzdHlsZTsKKyAgICBtX3R5cGluZ1N0
eWxlLT5zZXRTdHlsZShzdHlsZSk7CiB9CiAKICNpZiAhKFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oR1RLKSB8fCBQTEFURk9STShDSFJPTUlVTSkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDY4OTMxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxSZW5kZXJTdHlsZT4sIDQ+IFAKIGNsYXNzIFJlbmRlclN0eWxlOiBw
dWJsaWMgUmVmQ291bnRlZDxSZW5kZXJTdHlsZT4gewogICAgIGZyaWVuZCBjbGFzcyBBbmltYXRp
b25CYXNlOyAvLyBVc2VkIGJ5IENTUyBhbmltYXRpb25zLiBXZSBjYW4ndCBhbGxvdyB0aGVtIHRv
IGFuaW1hdGUgYmFzZWQgb2ZmIHZpc2l0ZWQgY29sb3JzLgogICAgIGZyaWVuZCBjbGFzcyBBcHBs
eVN0eWxlQ29tbWFuZDsgLy8gRWRpdGluZyBoYXMgdG8gb25seSByZXZlYWwgdW52aXNpdGVkIGlu
Zm8uCisgICAgZnJpZW5kIGNsYXNzIEVkaXRpbmdTdHlsZTsgLy8gRWRpdGluZyBoYXMgdG8gb25s
eSByZXZlYWwgdW52aXNpdGVkIGluZm8uCiAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2VsZWN0
b3I7IC8vIFNldHMgbWVtYmVycyBkaXJlY3RseS4KICAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOyAvLyBJZ25vcmVzIHZpc2l0ZWQgc3R5bGVzLCBzbyBuZWVkcyB0
byBiZSBhYmxlIHRvIHNlZSB1bnZpc2l0ZWQgaW5mby4KICAgICBmcmllbmQgY2xhc3MgUHJvcGVy
dHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I7IC8vIFVzZWQgYnkgQ1NTIGFuaW1hdGlvbnMuIFdl
IGNhbid0IGFsbG93IHRoZW0gdG8gYW5pbWF0ZSBiYXNlZCBvZmYgdmlzaXRlZCBjb2xvcnMuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69542</attachid>
            <date>2010-10-01 17:04:15 -0700</date>
            <delta_ts>2010-10-22 16:24:08 -0700</delta_ts>
            <desc>fixed changelog</desc>
            <filename>bug-46335-20101001170414.patch</filename>
            <type>text/plain</type>
            <size>30493</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODkzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMTAtMDEgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVn
IDQ2MzM1IC0gQWRkIEVkaXRpbmdTdHlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDYzMzUKKworICAgICAgICBBZGRlZCBFZGl0aW5nU3R5bGUgdG8g
V2ViQ29yZS9lZGl0aW5nLiAgVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBn
ZXRQcm9wZXJ0aWVzTm90SW4sIHJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzLAorICAgICAgICBl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uLCBhbmQgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdCBp
biBBcHBseVN0eWxlQ29tbWFuZC5jcHAgb25jZSBkZXBsb3llZCBldmVyeXdoZXJlLgorICAgICAg
ICBEZXBsb3llZCBpdCBpbiB0eXBpbmcgc3R5bGVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBh
cmUgYWRkZWQgc2luY2UgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
Ojptb3ZlUGFyYWdyYXBocyk6IENhbGxzIGVkaXRpbmdTdHlsZUluY2x1ZGluZ1R5cGluZ1N0eWxl
LgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0
eUxpc3RJdGVtKTogVXNlcyBFZGl0aW5nU3R5bGUuCisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OnNhdmVUeXBpbmdTdHlsZVN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKTog
RGl0dG8uCisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmg6CisgICAg
ICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmVkaXRpbmdTdHlsZUZyb21Db21wdWVkU3R5bGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6OmluaXQpOiBBZGRlZDsgYSBjbG9uZSBvZiBBcHBseVN0eWxlQ29tbWFuZDo6
ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6
cmVtb3ZlVGV4dEZpbGxBbmRTdHJvbGVDb2xvcnNJZk5lZWRlZCk6IEV4dHJhY3RlZCBmcm9tIGlu
aXQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlcGxhY2VGb250U2l6ZUJ5S2V5
d29yZElmUG9zc2libGUpOiBFeHRyYWN0ZWQgZnJvbSBpbml0LgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ1N0eWxlOjppc0VtcHR5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnNldFN0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6
OmNsZWFyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92ZUJs
b2NrUHJvcGVydGllcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpw
cmVwYXJlVG9BcHBseUF0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjplZGl0aW5nU3R5bGVJ
bmNsdWRpbmdUeXBpbmdTdHlsZSk6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjcmVhdGUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6c3R5bGUpOiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVtb3ZlRm9ybWF0Q29tbWFuZDo6ZG9BcHBseSk6IFVzZXMgRWRpdGluZ1N0eWxlLgorICAg
ICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKTogSW5zdGFudGlhdGVz
IG1fdHlwaW5nU3R5bGUsIHdoaWNoIGlzIG5vdyBFZGl0aW5nU3R5bGUuCisgICAgICAgICogZWRp
dGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyOjp0eXBpbmdTdHlsZSk6IFVzZXMgRWRpdGluZ1N0eWxlLgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXJUeXBpbmdTdHlsZSk6IFVzZXMgRWRpdGlu
Z1N0eWxlLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0VHlwaW5n
U3R5bGUpOiBVc2VzIEVkaXRpbmdTdHlsZS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaDoKKwogMjAxMC0xMC0wMSAgRXJpYyBVaHJoYW5lICA8ZXJpY3VAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgpJbmRleDogV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiA2ODkzMSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTg5MSw2ICs4OTEsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGluZy9EZWxldGVG
cm9tVGV4dE5vZGVDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcAorICAgIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcAogICAgIGVkaXRpbmcvRWRpdG9yLmNwcAogICAgIGVkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKICAgICBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKSW5kZXg6IFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2
aXNpb24gNjg5MzEpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjc3LDYgKzEyNzcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZWRpdGlu
Zy9FZGl0Q29tbWFuZC5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmggXAog
CVdlYkNvcmUvZWRpdGluZy9FZGl0aW5nQmVoYXZpb3JUeXBlcy5oIFwKKwlXZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcCBcCisJV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oIFwK
IAlXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgXAogCVdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwIFwKIAlXZWJDb3JlL2VkaXRpbmcvRWRpdG9yRGVsZXRlQWN0aW9uLmggXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDY4OTMxKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNjIsNiArMTM2Miw4IEBACiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0Q29tbWFu
ZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oJywKICAgICAgICAg
ICAgICdlZGl0aW5nL0VkaXRpbmdCZWhhdmlvclR5cGVzLmgnLAorICAgICAgICAgICAgJ2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcCcsCisgICAgICAgICAgICAnZWRpdGluZy9FZGl0aW5nU3R5bGUu
aCcsCiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0b3IuY3BwJywKICAgICAgICAgICAgICdlZGl0
aW5nL0VkaXRvci5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwJywK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gNjg5MzEpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC03ODEsNiArNzgxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGluZy9EZWxldGVG
cm9tVGV4dE5vZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcCBcCiAgICAgZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAgXAorICAgIGVkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcCBcCiAgICAgZWRpdGluZy9FZGl0b3IuY3BwIFwKICAgICBlZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAgXApA
QCAtMTY3Niw2ICsxNjc3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgZWRpdGluZy9EZWxldGVGcm9t
VGV4dE5vZGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5o
IFwKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmggXAorICAgIGVkaXRpbmcvRWRpdGluZ1N0eWxl
LmggXAogICAgIGVkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmggXAogICAgIGVkaXRpbmcvRWRpdG9y
LmggXAogICAgIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmggXApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY4OTMxKQorKysgV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI4OTgsNiArMjg5OCw4IEBACiAJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRp
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
REQ0RDg0MEZERjRENkQwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCAqLzsgfTsKIAkJOTdERDRE
ODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3REQ0RDg1MEZERjRENkUwMEVDRjlBNCAvKiBYU1NB
dWRpdG9yLmggKi87IH07CiAJCTk3RUY3REZFMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250
cm9sbGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5N0VGN0RGRDEwN0U1NUI3MDBEN0M0OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuY3Bw
ICovOyB9OworCQk5QkFCNkM2QzEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkFCNkM2QTEyNTUw
NjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUJBQjZDNkQxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRp
bmdTdHlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QkFCNkM2QjEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmNwcCAqLzsgfTsKIAkJ
OUYwRDZCMkUxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUYwRDZCMkMxMjFC
RkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICovOyB9OwogCQk5RjBE
NkIyRjEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUYwRDZCMkQxMjFCRkVCQTAw
NkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCAqLzsgfTsKIAkJOUYzQjk0N0UxMjI0
MTc1ODAwNTMwNEU3IC8qIFNjcmlwdEhlYXBTbmFwc2hvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUYzQjk0N0QxMjI0MTc1ODAwNTMwNEU3IC8qIFNj
cmlwdEhlYXBTbmFwc2hvdC5oICovOyB9OwpAQCAtODg5OSw2ICs4OTAxLDggQEAKIAkJOTdERDRE
ODQwRkRGNEQ2RDAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gWFNTQXVkaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk3REQ0RDg1MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTU0F1ZGl0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTdFRjdERkQxMDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJC
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENvbnRy
b2xsZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUJBQjZDNkExMjU1
MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFZGl0aW5nU3R5bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUJB
QjZDNkIxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFZGl0aW5nU3R5bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5RjBENkIyQzEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUYwRDZC
MkQxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5RjNCOTQ3RDEyMjQxNzU4MDA1MzA0RTcgLyogU2NyaXB0
SGVhcFNuYXBzaG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEhl
YXBTbmFwc2hvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQyNzcsNiArMTQy
ODEsOCBAQAogCQkJCTkzMzA5RDk1MDk5RTY0OTEwMDU2RTU4MSAvKiBFZGl0Q29tbWFuZC5oICov
LAogCQkJCTRGMTUzNEREMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3IuaCAqLywK
IAkJCQk0RjE1MzRERjExQjUzMzAyMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCAq
LywKKwkJCQk5QkFCNkM2QTEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggKi8sCisJ
CQkJOUJBQjZDNkIxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5jcHAgKi8sCiAJCQkJ
NEIzMDQzQ0EwQUUwMzczQjAwQTgyNjQ3IC8qIEVkaXRvci5jcHAgKi8sCiAJCQkJNEIzMDQzQ0Iw
QUUwMzczQjAwQTgyNjQ3IC8qIEVkaXRvci5oICovLAogCQkJCTkzQTM4QjRBMEQwRTU4MDgwMDY4
NzJDMiAvKiBFZGl0b3JDb21tYW5kLmNwcCAqLywKQEAgLTE5MjA1LDYgKzE5MjExLDcgQEAKIAkJ
CQk5MzMwOURFNDA5OUU2NDkyMDA1NkU1ODEgLyogRWRpdENvbW1hbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTRGMTUzNERFMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTRGMTUzNEUwMTFCNTMzMDIwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZp
b3JUeXBlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUJBQjZDNkMxMjU1MDYzMTAwMTYyNkQ0IC8q
IEVkaXRpbmdTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2QTQwOTlERjAyNzAwOTBE
NzgxIC8qIEVkaXRpbmdUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0QjMwNDNDRDBBRTAzNzNC
MDBBODI2NDcgLyogRWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUYzMjY3OTBENzhCOTQ0
MDA2OEYwQzQgLyogRWRpdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIxNzk4LDYgKzIx
ODA1LDcgQEAKIAkJCQlBN0NGQjNENTBCN0VEMTE4MDA3MEMzMkQgLyogRHJhZ0ltYWdlTWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3RkE2MjAwRDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNO
b2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURFMzA5OUU2NDkyMDA1NkU1ODEg
LyogRWRpdENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUJBQjZDNkQxMjU1MDYzMTAw
MTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTUwQjZBMzA5
OURGMDI3MDA5MEQ3ODEgLyogRWRpdGluZ1RleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEIz
MDQzQ0MwQUUwMzczQjAwQTgyNjQ3IC8qIEVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
M0EzOEI0QjBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNp
b24gNjg5MzEpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MzAsMTMgKzkzMCwxMyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgLy8gQSBub24tZW1wdHkgcGFyYWdyYXBoJ3Mgc3R5bGUg
aXMgbW92ZWQgd2hlbiB3ZSBjb3B5IGFuZCBtb3ZlIGl0LiAgV2UgZG9uJ3QgbW92ZSAKICAgICAv
LyBhbnl0aGluZyBpZiB3ZSdyZSBnaXZlbiBhbiBlbXB0eSBwYXJhZ3JhcGgsIGJ1dCBhbiBlbXB0
eSBwYXJhZ3JhcGggY2FuIGhhdmUgc3R5bGUKICAgICAvLyB0b28sIDxkaXY+PGI+PGJyPjwvYj48
L2Rpdj4gZm9yIGV4YW1wbGUuICBTYXZlIGl0IHNvIHRoYXQgd2UgY2FuIHByZXNlcnZlIGl0IGxh
dGVyLgotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVJbkVtcHR5
UGFyYWdyYXBoOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlSW5FbXB0eVBhcmFncmFw
aDsKICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSA9PSBlbmRPZlBhcmFncmFwaFRvTW92
ZSAmJiBwcmVzZXJ2ZVN0eWxlKSB7Ci0gICAgICAgIHN0eWxlSW5FbXB0eVBhcmFncmFwaCA9IEFw
cGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHN0YXJ0T2ZQYXJhZ3JhcGhU
b01vdmUuZGVlcEVxdWl2YWxlbnQoKSwgSW5jbHVkZVR5cGluZ1N0eWxlKTsKKyAgICAgICAgc3R5
bGVJbkVtcHR5UGFyYWdyYXBoID0gZWRpdGluZ1N0eWxlSW5jbHVkaW5nVHlwaW5nU3R5bGUoc3Rh
cnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgLy8gVGhlIG1v
dmVkIHBhcmFncmFwaCBzaG91bGQgYXNzdW1lIHRoZSBibG9jayBzdHlsZSBvZiB0aGUgZGVzdGlu
YXRpb24uCiAgICAgICAgIHN0eWxlSW5FbXB0eVBhcmFncmFwaC0+cmVtb3ZlQmxvY2tQcm9wZXJ0
aWVzKCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gRklYTUUgKDUwOTg5MzEpOiBXZSBzaG91bGQg
YWRkIGEgbmV3IGluc2VydCBhY3Rpb24gIldlYlZpZXdJbnNlcnRBY3Rpb25Nb3ZlZCIgYW5kIGNh
bGwgc2hvdWxkSW5zZXJ0RnJhZ21lbnQgaGVyZS4KICAgICAKICAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5kLCBET1dOU1RSRUFNKSk7CkBAIC05NzYsNyAr
OTc2LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIC8v
IElmIHRoZSBzZWxlY3Rpb24gaXMgaW4gYW4gZW1wdHkgcGFyYWdyYXBoLCByZXN0b3JlIHN0eWxl
cyBmcm9tIHRoZSBvbGQgZW1wdHkgcGFyYWdyYXBoIHRvIHRoZSBuZXcgZW1wdHkgcGFyYWdyYXBo
LgogICAgIGJvb2wgc2VsZWN0aW9uSXNFbXB0eVBhcmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigp
LmlzQ2FyZXQoKSAmJiBpc1N0YXJ0T2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkpICYmIGlzRW5kT2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkpOwogICAgIGlmIChzdHlsZUluRW1wdHlQYXJhZ3JhcGggJiYgc2VsZWN0aW9uSXNFbXB0
eVBhcmFncmFwaCkKLSAgICAgICAgYXBwbHlTdHlsZShzdHlsZUluRW1wdHlQYXJhZ3JhcGguZ2V0
KCkpOworICAgICAgICBhcHBseVN0eWxlKHN0eWxlSW5FbXB0eVBhcmFncmFwaC0+c3R5bGUoKSk7
CiAgICAgCiAgICAgaWYgKHByZXNlcnZlU2VsZWN0aW9uICYmIHN0YXJ0SW5kZXggIT0gLTEpIHsK
ICAgICAgICAgLy8gRnJhZ21lbnQgY3JlYXRpb24gKHVzaW5nIGNyZWF0ZU1hcmt1cCkgaW5jb3Jy
ZWN0bHkgdXNlcyByZWd1bGFyCkBAIC05OTgsNyArOTk4LDcgQEAgYm9vbCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6YnJlYWtPdXRPZkVtcAogICAgIGlmICghZW1wdHlMaXN0SXRlbSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBz
dHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKGVuZGluZ1Nl
bGVjdGlvbigpLnN0YXJ0KCksIEluY2x1ZGVUeXBpbmdTdHlsZSk7CisgICAgUmVmUHRyPEVkaXRp
bmdTdHlsZT4gc3R5bGUgPSBlZGl0aW5nU3R5bGVJbmNsdWRpbmdUeXBpbmdTdHlsZShlbmRpbmdT
ZWxlY3Rpb24oKS5zdGFydCgpKTsKIAogICAgIE5vZGUqIGxpc3ROb2RlID0gZW1wdHlMaXN0SXRl
bS0+cGFyZW50Tm9kZSgpOwogICAgIC8vIEZJWE1FOiBDYW4ndCB3ZSBkbyBzb21ldGhpbmcgYmV0
dGVyIHdoZW4gdGhlIGltbWVkaWF0ZSBwYXJlbnQgd2Fzbid0IGEgbGlzdCBub2RlPwpAQCAtMTA0
Nyw5ICsxMDQ3LDkgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcAog
ICAgIGFwcGVuZEJsb2NrUGxhY2Vob2xkZXIobmV3QmxvY2spOwogICAgIHNldEVuZGluZ1NlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9uKG5ld0Jsb2NrLmdldCgpLCAwKSwgRE9XTlNU
UkVBTSkpOwogCi0gICAgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChzdHlsZS5nZXQoKSwg
ZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgaWYgKHN0eWxlLT5sZW5ndGgoKSkKLSAg
ICAgICAgYXBwbHlTdHlsZShzdHlsZS5nZXQoKSk7CisgICAgc3R5bGUtPnByZXBhcmVUb0FwcGx5
QXQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgaWYgKCFzdHlsZS0+aXNFbXB0eSgp
KQorICAgICAgICBhcHBseVN0eWxlKHN0eWxlLT5zdHlsZSgpKTsKICAgICAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDY4OTMxKQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsMTQgKzI5NCwxNCBAQCB2b2lkIERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVUeXBpbmdTCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IEZpZ3VyZSBvdXQgdGhlIHR5cGluZyBzdHlsZSBpbiBlZmZlY3QgYmVmb3JlIHRoZSBkZWxldGUg
aXMgZG9uZS4KLSAgICBtX3R5cGluZ1N0eWxlID0gQXBwbHlTdHlsZUNvbW1hbmQ6OmVkaXRpbmdT
dHlsZUF0UG9zaXRpb24ocG9zaXRpb25CZWZvcmVUYWJTcGFuKG1fc2VsZWN0aW9uVG9EZWxldGUu
c3RhcnQoKSkpOworICAgIG1fdHlwaW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwb3Np
dGlvbkJlZm9yZVRhYlNwYW4obV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpKSk7CiAKLSAgICBy
ZW1vdmVFbmNsb3NpbmdBbmNob3JTdHlsZShtX3R5cGluZ1N0eWxlLmdldCgpLCBtX3NlbGVjdGlv
blRvRGVsZXRlLnN0YXJ0KCkpOworICAgIHJlbW92ZUVuY2xvc2luZ0FuY2hvclN0eWxlKG1fdHlw
aW5nU3R5bGUtPnN0eWxlKCksIG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSk7CiAKICAgICAv
LyBJZiB3ZSdyZSBkZWxldGluZyBpbnRvIGEgTWFpbCBibG9ja3F1b3RlLCBzYXZlIHRoZSBzdHls
ZSBhdCBlbmQoKSBpbnN0ZWFkIG9mIHN0YXJ0KCkKICAgICAvLyBXZSdsbCB1c2UgdGhpcyBsYXRl
ciBpbiBjb21wdXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSBpZiB3ZSBlbmQgdXAgb3V0c2lkZSBv
ZiBhIE1haWwgYmxvY2txdW90ZQogICAgIGlmIChuZWFyZXN0TWFpbEJsb2NrcXVvdGUobV9zZWxl
Y3Rpb25Ub0RlbGV0ZS5zdGFydCgpLm5vZGUoKSkpCi0gICAgICAgIG1fZGVsZXRlSW50b0Jsb2Nr
cXVvdGVTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKG1f
c2VsZWN0aW9uVG9EZWxldGUuZW5kKCkpOworICAgICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3Rl
U3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX3NlbGVjdGlvblRvRGVsZXRlLmVuZCgpKTsK
ICAgICBlbHNlCiAgICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IDA7CiB9CkBA
IC02OTMsOCArNjkzLDggQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxhdGVU
eQogICAgICAgICBtX3R5cGluZ1N0eWxlID0gbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlOwog
ICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IDA7CiAKLSAgICBwcmVwYXJlRWRpdGlu
Z1N0eWxlVG9BcHBseUF0KG1fdHlwaW5nU3R5bGUuZ2V0KCksIG1fZW5kaW5nUG9zaXRpb24pOwot
ICAgIGlmICghbV90eXBpbmdTdHlsZS0+bGVuZ3RoKCkpCisgICAgcHJlcGFyZUVkaXRpbmdTdHls
ZVRvQXBwbHlBdChtX3R5cGluZ1N0eWxlLT5zdHlsZSgpLCBtX2VuZGluZ1Bvc2l0aW9uKTsKKyAg
ICBpZiAobV90eXBpbmdTdHlsZS0+aXNFbXB0eSgpKQogICAgICAgICBtX3R5cGluZ1N0eWxlID0g
MDsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChtX2VuZGluZ1Bvc2l0aW9uKTsKICAg
ICBpZiAobV90eXBpbmdTdHlsZSAmJiAKQEAgLTcwNyw3ICs3MDcsNyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5CiAgICAgICAgIC8vIHRoZW4gbW92ZSBpdCBiYWNr
ICh3aGljaCB3aWxsIGNsZWFyIHR5cGluZyBzdHlsZSkuCiAKICAgICAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKHZpc2libGVFbmQpOwotICAgICAgICBhcHBseVN0eWxlKG1fdHlwaW5nU3R5bGUuZ2V0
KCksIEVkaXRBY3Rpb25VbnNwZWNpZmllZCk7CisgICAgICAgIGFwcGx5U3R5bGUobV90eXBpbmdT
dHlsZS0+c3R5bGUoKSwgRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKICAgICAgICAgLy8gYXBwbHlT
dHlsZSBjYW4gZGVzdHJveSB0aGUgcGxhY2Vob2xkZXIgdGhhdCB3YXMgYXQgbV9lbmRpbmdQb3Np
dGlvbiBpZiBpdCBuZWVkcyB0byAKICAgICAgICAgLy8gbW92ZSBpdCwgYnV0IGl0IHdpbGwgc2V0
IGFuIGVuZGluZ1NlbGVjdGlvbigpIGF0IFttb3ZlZFBsYWNlaG9sZGVyLCAwXSBpZiBpdCBkb2Vz
IHNvLgogICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQo
KTsKQEAgLTcxNyw3ICs3MTcsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1
bGF0ZVR5CiAgICAgLy8gSW4gdGhpcyBjYXNlIGlmIHdlIHN0YXJ0IHR5cGluZywgdGhlIG5ldyBj
aGFyYWN0ZXJzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0eWxlIGFzIHRoZSBqdXN0IGRlbGV0ZWQg
b25lcywKICAgICAvLyBidXQsIGlmIHdlIGNoYW5nZSB0aGUgc2VsZWN0aW9uLCBjb21lIGJhY2sg
YW5kIHN0YXJ0IHR5cGluZyB0aGF0IHN0eWxlIHNob3VsZCBiZSBsb3N0LiAgQWxzbyBzZWUgCiAg
ICAgLy8gcHJlc2VydmVUeXBpbmdTdHlsZSgpIGJlbG93LgotICAgIGRvY3VtZW50KCktPmZyYW1l
KCktPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHlsZShtX3R5cGluZ1N0eWxlKTsKKyAgICBkb2N1
bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0VHlwaW5nU3R5bGUobV90eXBpbmdTdHls
ZSA/IG1fdHlwaW5nU3R5bGUtPnN0eWxlKCkgOiAwKTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0YXRlKCkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuaAkocmV2aXNpb24gNjg5MzEpCisrKyBXZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRWRpdGluZ1N0eWxlOworCiBjbGFz
cyBEZWxldGVTZWxlY3Rpb25Db21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsg
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVsZXRlU2VsZWN0aW9uQ29tbWFuZD4g
Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBzbWFydERlbGV0ZSA9IGZhbHNlLCBib29s
IG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUgPSB0cnVlLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9v
bCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMgPSBmYWxzZSkKQEAgLTg2LDggKzg4LDggQEAgcHJp
dmF0ZToKICAgICBQb3NpdGlvbiBtX3RyYWlsaW5nV2hpdGVzcGFjZTsKICAgICBSZWZQdHI8Tm9k
ZT4gbV9zdGFydEJsb2NrOwogICAgIFJlZlB0cjxOb2RlPiBtX2VuZEJsb2NrOwotICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV90eXBpbmdTdHlsZTsKLSAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsK
KyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBtX3R5cGluZ1N0eWxlOworICAgIFJlZlB0cjxFZGl0
aW5nU3R5bGU+IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsKICAgICBSZWZQdHI8Tm9kZT4g
bV9zdGFydFJvb3Q7CiAgICAgUmVmUHRyPE5vZGU+IG1fZW5kUm9vdDsKICAgICBSZWZQdHI8Tm9k
ZT4gbV9zdGFydFRhYmxlUm93OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5oIgorCisjaW5jbHVkZSAiQXBwbHlTdHlsZUNv
bW1hbmQuaCIKKyNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNs
dWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGVkaXRpbmdTdHlsZUZyb21Db21wdWVkU3R5bGUoQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1
cm4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIHJldHVybiBBcHBs
eVN0eWxlQ29tbWFuZDo6cmVtb3ZlTm9uRWRpdGluZ1Byb3BlcnRpZXMoc3R5bGUpOworfQorCitF
ZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZSgpCisgICAgOiBtX3Nob3VsZFVzZUZpeGVkRGVmYXVs
dEZvbnRTaXplKGZhbHNlKQoreworfQorCitFZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZShOb2Rl
KiBub2RlKQorICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShmYWxzZSkKK3sK
KyAgICBpbml0KG5vZGUpOworfQorCitFZGl0aW5nU3R5bGU6OkVkaXRpbmdTdHlsZShjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24pCisgICAgOiBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXpl
KGZhbHNlKQoreworICAgIGluaXQocG9zaXRpb24ubm9kZSgpKTsKK30KKworRWRpdGluZ1N0eWxl
OjpFZGl0aW5nU3R5bGUoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCisgICAgOiBt
X211dGFibGVTdHlsZShzdHlsZS0+Y29weSgpKQorICAgICwgbV9zaG91bGRVc2VGaXhlZERlZmF1
bHRGb250U2l6ZShmYWxzZSkKK3sKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OmluaXQoTm9kZSog
bm9kZSkKK3sKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRl
ZFN0eWxlQXRQb3NpdGlvbiA9IGNvbXB1dGVkU3R5bGUobm9kZSk7CisgICAgbV9tdXRhYmxlU3R5
bGUgPSBlZGl0aW5nU3R5bGVGcm9tQ29tcHVlZFN0eWxlKGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9u
LmdldCgpKTsKKworICAgIGlmIChub2RlICYmIG5vZGUtPmNvbXB1dGVkU3R5bGUoKSkgeworICAg
ICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKCk7Cisg
ICAgICAgIHJlbW92ZVRleHRGaWxsQW5kU3Ryb2xlQ29sb3JzSWZOZWVkZWQocmVuZGVyU3R5bGUp
OworICAgICAgICByZXBsYWNlRm9udFNpemVCeUtleXdvcmRJZlBvc3NpYmxlKHJlbmRlclN0eWxl
LCBjb21wdXRlZFN0eWxlQXRQb3NpdGlvbi5nZXQoKSk7CisgICAgfQorCisgICAgbV9zaG91bGRV
c2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uLT51c2VGaXhl
ZEZvbnREZWZhdWx0U2l6ZSgpOworfQorCit2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZp
bGxBbmRTdHJvbGVDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpCit7Cisg
ICAgLy8gSWYgYSBub2RlJ3MgdGV4dCBmaWxsIGNvbG9yIGlzIGludmFsaWQsIHRoZW4gaXRzIGNo
aWxkcmVuIHVzZSAKKyAgICAvLyB0aGVpciBmb250LWNvbG9yIGFzIHRoZWlyIHRleHQgZmlsbCBj
b2xvciAodGhleSBkb24ndAorICAgIC8vIGluaGVyaXQgaXQpLiAgTGlrZXdpc2UgZm9yIHN0cm9r
ZSBjb2xvci4KKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAoIXJlbmRlclN0eWxl
LT50ZXh0RmlsbENvbG9yKCkuaXNWYWxpZCgpKQorICAgICAgICBtX211dGFibGVTdHlsZS0+cmVt
b3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLCBlYyk7CisgICAgaWYg
KCFyZW5kZXJTdHlsZS0+dGV4dFN0cm9rZUNvbG9yKCkuaXNWYWxpZCgpKQorICAgICAgICBtX211
dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29s
b3IsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnJlcGxh
Y2VGb250U2l6ZUJ5S2V5d29yZElmUG9zc2libGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24qIGNvbXB1dGVkU3R5bGUpCit7CisgICAgQVNTRVJU
KHJlbmRlclN0eWxlKTsKKyAgICBpZiAocmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmtl
eXdvcmRTaXplKCkpCisgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBjb21wdXRlZFN0eWxlLT5nZXRGb250U2l6ZUNTU1ZhbHVlUHJlZmVycmlu
Z0tleXdvcmQoKS0+Y3NzVGV4dCgpKTsKK30KKworYm9vbCBFZGl0aW5nU3R5bGU6OmlzRW1wdHko
KSBjb25zdAoreworICAgIHJldHVybiAhbV9tdXRhYmxlU3R5bGUgfHwgbV9tdXRhYmxlU3R5bGUt
PmlzRW1wdHkoKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnNldFN0eWxlKFBhc3NSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlKQoreworICAgIG1fbXV0YWJsZVN0eWxl
ID0gc3R5bGU7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQg
d2hldGhlciBvciBub3QgZm9udCBpcyBmaXhlZCB3aWR0aCBmb3IgbXV0YWJsZSBzdHlsZS4KKyAg
ICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvbnQtZmFtaWx5IGlzIG1vbm9zcGFjZSBhcyBpbiBGb250
RGVzY3JpcHRpb24gYnV0IHdlIGRvbid0IHdhbnQgdG8gZHVwbGljYXRlIGNvZGUgaGVyZS4KKyAg
ICBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplID0gZmFsc2U7Cit9CisKK3ZvaWQgRWRp
dGluZ1N0eWxlOjpjbGVhcigpCit7CisgICAgbV9tdXRhYmxlU3R5bGUuY2xlYXIoKTsKKyAgICBt
X3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplID0gZmFsc2U7Cit9CisKK3ZvaWQgRWRpdGlu
Z1N0eWxlOjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQoreworICAgIGlmICghbV9tdXRhYmxlU3R5
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVCbG9ja1By
b3BlcnRpZXMoKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIC8vIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVTdHlsZVNwYW5zKCkgcmVxdWlyZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgcmVt
b3ZlcyB0aGUgZWRpdGluZyBzdHlsZS4KKyAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIHdhcyBtb2Rp
ZmllZCBpbiB0aGUgZnV0dXJlIHRvIGRlbGV0ZSBhbGwgcmVkdW5kYW50IHByb3BlcnRpZXMsIHRo
ZW4gYWRkIGEgYm9vbGVhbiB2YWx1ZSB0byBpbmRpY2F0ZQorICAgIC8vIHdoaWNoIG9uZSBvZiBl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uIG9yIGNvbXB1dGVkU3R5bGUgaXMgY2FsbGVkLgorICAgIFJl
ZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocG9zaXRpb24p
OworICAgIHN0eWxlLT5tX211dGFibGVTdHlsZS0+ZGlmZihtX211dGFibGVTdHlsZS5nZXQoKSk7
CisKKyAgICAvLyBpZiBhbHBoYSB2YWx1ZSBpcyB6ZXJvLCB3ZSBkb24ndCBhZGQgdGhlIGJhY2tn
cm91bmQgY29sb3IuCisgICAgUmVmUHRyPENTU1ZhbHVlPiBiYWNrZ3JvdW5kQ29sb3IgPSBtX211
dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cik7CisgICAgaWYgKGJhY2tncm91bmRDb2xvciAmJiBiYWNrZ3JvdW5kQ29sb3ItPmlzUHJpbWl0
aXZlVmFsdWUoKQorICAgICAgICAmJiAhYWxwaGFDaGFubmVsKHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oYmFja2dyb3VuZENvbG9yLmdldCgpKS0+Z2V0UkdCQTMyVmFsdWUoKSkpIHsK
KyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92
ZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBlYyk7CisgICAgfQorfQorCitQ
YXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZWRpdGluZ1N0eWxlSW5jbHVkaW5nVHlwaW5nU3R5bGUo
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGVk
dGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocG9zaXRpb24pOworICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSA9IHBvc2l0aW9uLm5vZGUoKS0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCk7CisgICAgaWYgKHR5cGlu
Z1N0eWxlKSB7CisgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gaW5o
ZXJpdGFibGVUeXBpbmdTdHlsZSA9IHR5cGluZ1N0eWxlLT5jb3B5KCk7CisgICAgICAgIEFwcGx5
U3R5bGVDb21tYW5kOjpyZW1vdmVOb25FZGl0aW5nUHJvcGVydGllcyhpbmhlcml0YWJsZVR5cGlu
Z1N0eWxlLmdldCgpKTsKKyAgICAgICAgZWR0aW5nU3R5bGUtPnN0eWxlKCktPm1lcmdlKGluaGVy
aXRhYmxlVHlwaW5nU3R5bGUuZ2V0KCksIHRydWUpOworICAgIH0KKyAgICByZXR1cm4gZWR0aW5n
U3R5bGU7Cit9CisgICAgCit9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBFZGl0aW5nU3R5bGVfaAorI2RlZmluZSBFZGl0aW5nU3R5bGVfaAor
CisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIlBvc2l0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbjsKKworY2xhc3MgRWRpdGluZ1N0eWxlIDogcHVibGljIFJlZkNvdW50ZWQ8RWRpdGluZ1N0
eWxlPiB7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNy
ZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHlsZSgp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNyZWF0ZShO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0aW5nU3R5
bGUobm9kZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4g
Y3JlYXRlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRWRpdGluZ1N0eWxlKHBvc2l0aW9uKSk7CisgICAgfQorCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBjcmVhdGUoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHls
ZShzdHlsZSkpOworICAgIH0KKworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSgpIHsgcmV0dXJuIG1fbXV0YWJsZVN0eWxlLmdldCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPik7CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0
aWVzKCk7CisgICAgdm9pZCBwcmVwYXJlVG9BcHBseUF0KGNvbnN0IFBvc2l0aW9uJik7CisKK3By
aXZhdGU6CisgICAgRWRpdGluZ1N0eWxlKCk7CisgICAgRWRpdGluZ1N0eWxlKE5vZGUqKTsKKyAg
ICBFZGl0aW5nU3R5bGUoY29uc3QgUG9zaXRpb24mKTsKKyAgICBFZGl0aW5nU3R5bGUoY29uc3Qg
Q1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAgIHZvaWQgaW5pdChOb2RlKik7CisgICAgdm9pZCBy
ZW1vdmVUZXh0RmlsbEFuZFN0cm9sZUNvbG9yc0lmTmVlZGVkKFJlbmRlclN0eWxlKik7CisgICAg
dm9pZCByZXBsYWNlRm9udFNpemVCeUtleXdvcmRJZlBvc3NpYmxlKFJlbmRlclN0eWxlKiwgQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKik7CisKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IG1fbXV0YWJsZVN0eWxlOworICAgIGJvb2wgbV9zaG91bGRVc2VGaXhlZERl
ZmF1bHRGb250U2l6ZTsKK307CisKK1Bhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBlZGl0aW5nU3R5
bGVJbmNsdWRpbmdUeXBpbmdTdHlsZShjb25zdCBQb3NpdGlvbiYpOworICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRWRpdGluZ1N0eWxlX2gKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDY4OTMxKQorKysgV2ViQ29y
ZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3
ICs1OSw3IEBAIHZvaWQgUmVtb3ZlRm9ybWF0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgLy8gR2V0
IHRoZSBkZWZhdWx0IHN0eWxlIGZvciB0aGlzIGVkaXRhYmxlIHJvb3QsIGl0J3MgdGhlIHN0eWxl
IHRoYXQgd2UnbGwgZ2l2ZSB0aGUKICAgICAvLyBjb250ZW50IHRoYXQgd2UncmUgb3BlcmF0aW5n
IG9uLgogICAgIE5vZGUqIHJvb3QgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKTsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGRlZmF1bHRT
dHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKFBvc2l0aW9u
KHJvb3QsIDApKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBkZWZhdWx0U3R5bGUgPSBFZGl0
aW5nU3R5bGU6OmNyZWF0ZShyb290KTsKIAogICAgIC8vIERlbGV0ZSB0aGUgc2VsZWN0ZWQgY29u
dGVudC4KICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gbGVhdmUgdGhpcyB0byBp
bnNlcnRUZXh0LCBidXQgaXRzIGRlbGV0ZSBvcGVyYXRpb24KQEAgLTc4LDggKzc4LDggQEAgdm9p
ZCBSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAgICAvLyBJbnNlcnQgdGhl
IGNvbnRlbnQgd2l0aCB0aGUgZGVmYXVsdCBzdHlsZS4KICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9i
bGVtLzU3OTQzODI+IFJlbW92ZUZvcm1hdCBkb2Vzbid0IGFsd2F5cyByZXNldCB0ZXh0IGFsaWdu
bWVudAotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0VHlwaW5nU3R5bGUoZGVmYXVsdFN0eWxl
LnJlbGVhc2UoKSk7Ci0gICAgCisgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHls
ZShkZWZhdWx0U3R5bGUtPnN0eWxlKCkpOworCiAgICAgaW5wdXRUZXh0KHN0cmluZywgdHJ1ZSk7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDY4OTMxKQorKysgV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVj
dGlvbkNvbnRyb2xsZXIKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikKICAg
ICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCisgICAgLCBtX3R5cGluZ1N0
eWxlKEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCkpCiAgICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlz
LCAmU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQpCiAgICAgLCBtX2Nh
cmV0UmVjdE5lZWRzVXBkYXRlKHRydWUpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1
ZSkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gNjg5
MzEpCisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFNlbGVjdGlvbkNvbnRyb2xsZXJfaAogI2Rl
ZmluZSBTZWxlY3Rpb25Db250cm9sbGVyX2gKIAotI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKQEAg
LTM3LDYgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CitjbGFz
cyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNs
YXNzIEhUTUxGb3JtRWxlbWVudDsKIGNsYXNzIFJlbmRlck9iamVjdDsKQEAgLTIxNCw3ICsyMTUs
NyBAQCBwcml2YXRlOgogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb247CiAgICAgVGV4
dEdyYW51bGFyaXR5IG1fZ3JhbnVsYXJpdHk7CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IG1fdHlwaW5nU3R5bGU7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbV90
eXBpbmdTdHlsZTsKIAogICAgIFRpbWVyPFNlbGVjdGlvbkNvbnRyb2xsZXI+IG1fY2FyZXRCbGlu
a1RpbWVyOwogCkBAIC0yMzQsMTcgKzIzNSwxNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnR5cGluZ1N0eWxlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV90eXBpbmdTdHlsZS5nZXQoKTsKKyAgICByZXR1cm4gbV90
eXBpbmdTdHlsZS0+c3R5bGUoKTsKIH0KIAogaW5saW5lIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6Y2xlYXJUeXBpbmdTdHlsZSgpCiB7Ci0gICAgbV90eXBpbmdTdHlsZS5jbGVhcigpOworICAg
IG1fdHlwaW5nU3R5bGUtPmNsZWFyKCk7CiB9CiAKIGlubGluZSB2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OnNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IHN0eWxlKQogewotICAgIG1fdHlwaW5nU3R5bGUgPSBzdHlsZTsKKyAgICBtX3R5cGluZ1N0
eWxlLT5zZXRTdHlsZShzdHlsZSk7CiB9CiAKICNpZiAhKFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oR1RLKSB8fCBQTEFURk9STShDSFJPTUlVTSkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDY4OTMxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxSZW5kZXJTdHlsZT4sIDQ+IFAKIGNsYXNzIFJlbmRlclN0eWxlOiBw
dWJsaWMgUmVmQ291bnRlZDxSZW5kZXJTdHlsZT4gewogICAgIGZyaWVuZCBjbGFzcyBBbmltYXRp
b25CYXNlOyAvLyBVc2VkIGJ5IENTUyBhbmltYXRpb25zLiBXZSBjYW4ndCBhbGxvdyB0aGVtIHRv
IGFuaW1hdGUgYmFzZWQgb2ZmIHZpc2l0ZWQgY29sb3JzLgogICAgIGZyaWVuZCBjbGFzcyBBcHBs
eVN0eWxlQ29tbWFuZDsgLy8gRWRpdGluZyBoYXMgdG8gb25seSByZXZlYWwgdW52aXNpdGVkIGlu
Zm8uCisgICAgZnJpZW5kIGNsYXNzIEVkaXRpbmdTdHlsZTsgLy8gRWRpdGluZyBoYXMgdG8gb25s
eSByZXZlYWwgdW52aXNpdGVkIGluZm8uCiAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2VsZWN0
b3I7IC8vIFNldHMgbWVtYmVycyBkaXJlY3RseS4KICAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOyAvLyBJZ25vcmVzIHZpc2l0ZWQgc3R5bGVzLCBzbyBuZWVkcyB0
byBiZSBhYmxlIHRvIHNlZSB1bnZpc2l0ZWQgaW5mby4KICAgICBmcmllbmQgY2xhc3MgUHJvcGVy
dHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I7IC8vIFVzZWQgYnkgQ1NTIGFuaW1hdGlvbnMuIFdl
IGNhbid0IGFsbG93IHRoZW0gdG8gYW5pbWF0ZSBiYXNlZCBvZmYgdmlzaXRlZCBjb2xvcnMuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71607</attachid>
            <date>2010-10-22 16:24:12 -0700</date>
            <delta_ts>2010-11-04 17:37:11 -0700</delta_ts>
            <desc>fixed &amp; made it compile on TOT</desc>
            <filename>bug-46335-20101022162411.patch</filename>
            <type>text/plain</type>
            <size>30038</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDM1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMTAtMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVn
IDQ2MzM1IC0gQWRkIEVkaXRpbmdTdHlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDYzMzUKKworICAgICAgICBBZGRlZCBFZGl0aW5nU3R5bGUgdG8g
V2ViQ29yZS9lZGl0aW5nLiAgVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBn
ZXRQcm9wZXJ0aWVzTm90SW4sIHJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzLAorICAgICAgICBl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uLCBhbmQgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdCBp
biBBcHBseVN0eWxlQ29tbWFuZC5jcHAgb25jZSBkZXBsb3llZCBldmVyeXdoZXJlLgorICAgICAg
ICBEZXBsb3llZCBpdCBpbiB0eXBpbmcgc3R5bGVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBh
cmUgYWRkZWQgc2luY2UgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
Ojptb3ZlUGFyYWdyYXBocyk6IENhbGxzIGVkaXRpbmdTdHlsZUluY2x1ZGluZ1R5cGluZ1N0eWxl
LgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0
eUxpc3RJdGVtKTogVXNlcyBFZGl0aW5nU3R5bGUuCisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OnNhdmVUeXBpbmdTdHlsZVN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKTog
RGl0dG8uCisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmg6CisgICAg
ICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmVkaXRpbmdTdHlsZUZyb21Db21wdWVkU3R5bGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6OmluaXQpOiBBZGRlZDsgYSBjbG9uZSBvZiBBcHBseVN0eWxlQ29tbWFuZDo6
ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6
cmVtb3ZlVGV4dEZpbGxBbmRTdHJvbGVDb2xvcnNJZk5lZWRlZCk6IEV4dHJhY3RlZCBmcm9tIGlu
aXQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlcGxhY2VGb250U2l6ZUJ5S2V5
d29yZElmUG9zc2libGUpOiBFeHRyYWN0ZWQgZnJvbSBpbml0LgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ1N0eWxlOjppc0VtcHR5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnNldFN0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6
OmNsZWFyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92ZUJs
b2NrUHJvcGVydGllcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpw
cmVwYXJlVG9BcHBseUF0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjplZGl0aW5nU3R5bGVJ
bmNsdWRpbmdUeXBpbmdTdHlsZSk6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjcmVhdGUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6c3R5bGUpOiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVtb3ZlRm9ybWF0Q29tbWFuZDo6ZG9BcHBseSk6IFVzZXMgRWRpdGluZ1N0eWxlLgorICAg
ICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKTogSW5zdGFudGlhdGVz
IG1fdHlwaW5nU3R5bGUsIHdoaWNoIGlzIG5vdyBFZGl0aW5nU3R5bGUuCisgICAgICAgICogZWRp
dGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyOjp0eXBpbmdTdHlsZSk6IFVzZXMgRWRpdGluZ1N0eWxlLgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXJUeXBpbmdTdHlsZSk6IFVzZXMgRWRpdGlu
Z1N0eWxlLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0VHlwaW5n
U3R5bGUpOiBVc2VzIEVkaXRpbmdTdHlsZS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaDoKKwogMjAxMC0xMC0yMiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYkNvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gNzAzNTQpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC04OTYsNiArODk2LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRpbmcvRGVsZXRl
RnJvbVRleHROb2RlQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCiAgICAgZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKKyAgICBlZGl0aW5nL0VkaXRpbmdT
dHlsZS5jcHAKICAgICBlZGl0aW5nL0VkaXRvci5jcHAKICAgICBlZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCiAgICAgZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkluZGV4OiBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJl
dmlzaW9uIDcwMzU0KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpA
QCAtMTI4OCw2ICsxMjg4LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2VkaXRp
bmcvRWRpdENvbW1hbmQuaCBcCiAJV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oIFwK
IAlXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCBcCisJV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAgXAorCVdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaCBc
CiAJV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIFwKIAlXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcCBcCiAJV2ViQ29yZS9lZGl0aW5nL0VkaXRvckRlbGV0ZUFjdGlvbi5oIFwKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiA3MDM1NCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzc0LDYgKzEzNzQsOCBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdENvbW1h
bmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaCcsCiAgICAgICAg
ICAgICAnZWRpdGluZy9FZGl0aW5nQmVoYXZpb3JUeXBlcy5oJywKKyAgICAgICAgICAgICdlZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvRWRpdG9yLmNwcCcsCiAgICAgICAgICAgICAnZWRp
dGluZy9FZGl0b3IuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCcs
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5wcm8JKHJldmlzaW9uIDcwMzU0KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBj
b3B5KQpAQCAtNzg0LDYgKzc4NCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGVkaXRpbmcvRGVsZXRl
RnJvbVRleHROb2RlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAgXAogICAgIGVkaXRpbmcvRWRpdENvbW1hbmQuY3BwIFwKKyAgICBlZGl0aW5nL0Vk
aXRpbmdTdHlsZS5jcHAgXAogICAgIGVkaXRpbmcvRWRpdG9yLmNwcCBcCiAgICAgZWRpdGluZy9F
ZGl0b3JDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwIFwK
QEAgLTE2ODYsNiArMTY4Nyw3IEBAIEhFQURFUlMgKz0gXAogICAgIGVkaXRpbmcvRGVsZXRlRnJv
bVRleHROb2RlQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
aCBcCiAgICAgZWRpdGluZy9FZGl0Q29tbWFuZC5oIFwKKyAgICBlZGl0aW5nL0VkaXRpbmdTdHls
ZS5oIFwKICAgICBlZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oIFwKICAgICBlZGl0aW5nL0VkaXRv
ci5oIFwKICAgICBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oIFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3MDM1NCkKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTUwLDYgKzI5NTAsOCBAQAogCQk5N0VGN0RGRTEwN0U1NUI3MDBEN0M0OUMgLyogU2NyaXB0
Q29udHJvbGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTdFRjdERkQxMDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNl
LmNwcCAqLzsgfTsKIAkJOUI0MTcwNjQxMjU2NjJCMzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tFbGVt
ZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOUI0MTcwNjIxMjU2NjJCMzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCNDE3
MDY1MTI1NjYyQjMwMDZCMjhGQyAvKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI0MTcwNjMxMjU2NjJC
MzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgKi87IH07CisJCTlCQUI2
QzZDMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQUI2QzZBMTI1NTA2MzEwMDE2MjZENCAvKiBF
ZGl0aW5nU3R5bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk5QkFCNkM2RDEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQUI2QzZCMTI1NTA2
MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuY3BwICovOyB9OwogCQk5RjBENkIyRTEyMUJGRUJB
MDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjBENkIyQzEyMUJGRUJBMDA2QzAyODggLyog
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgKi87IH07CiAJCTlGMEQ2QjJGMTIxQkZFQkEwMDZD
MDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjBENkIyRDEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5oICovOyB9OwogCQk5RjNCOTQ3RTEyMjQxNzU4MDA1MzA0RTcgLyog
U2NyaXB0SGVhcFNuYXBzaG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5RjNCOTQ3RDEyMjQxNzU4MDA1MzA0RTcgLyogU2NyaXB0SGVhcFNuYXBzaG90
LmggKi87IH07CkBAIC05MDAzLDYgKzkwMDUsOCBAQAogCQk5N0VGN0RGRDEwN0U1NUI3MDBEN0M0
OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5QjQxNzA2MjEyNTY2MkIzMDA2QjI4RkMgLyogQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcGx5QmxvY2tFbGVt
ZW50Q29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjQxNzA2MzEyNTY2
MkIzMDA2QjI4RkMgLyogQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCQUI2QzZBMTI1NTA2MzEwMDE2MjZENCAvKiBF
ZGl0aW5nU3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ1N0
eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCQUI2QzZCMTI1NTA2MzEwMDE2
MjZENCAvKiBFZGl0aW5nU3R5bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRWRpdGluZ1N0eWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUYw
RDZCMkMxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4
OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOUYzQjk0N0QxMjI0MTc1ODAwNTMwNEU3IC8qIFNjcmlwdEhlYXBTbmFwc2hvdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRIZWFwU25hcHNob3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NDI2LDYgKzE0NDMwLDggQEAKIAkJCQk5MzMw
OUQ5NTA5OUU2NDkxMDA1NkU1ODEgLyogRWRpdENvbW1hbmQuaCAqLywKIAkJCQk0RjE1MzRERDEx
QjUzMkVDMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmggKi8sCiAJCQkJNEYxNTM0REYxMUI1
MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvclR5cGVzLmggKi8sCisJCQkJOUJBQjZDNkEx
MjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5oICovLAorCQkJCTlCQUI2QzZCMTI1NTA2
MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuY3BwICovLAogCQkJCTRCMzA0M0NBMEFFMDM3M0Iw
MEE4MjY0NyAvKiBFZGl0b3IuY3BwICovLAogCQkJCTRCMzA0M0NCMEFFMDM3M0IwMEE4MjY0NyAv
KiBFZGl0b3IuaCAqLywKIAkJCQk5M0EzOEI0QTBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29t
bWFuZC5jcHAgKi8sCkBAIC0xOTM3Nyw2ICsxOTM4Myw3IEBACiAJCQkJOTMzMDlERTQwOTlFNjQ5
MjAwNTZFNTgxIC8qIEVkaXRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjE1MzRERTEx
QjUzMkVDMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
RjE1MzRFMDExQjUzMzAyMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTlCQUI2QzZDMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1NTBCNkE0MDk5REYwMjcwMDkwRDc4MSAvKiBFZGl0aW5nVGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzMDQzQ0QwQUUwMzczQjAwQTgyNjQ3IC8qIEVkaXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGMzI2NzkwRDc4Qjk0NDAwNjhGMEM0IC8qIEVkaXRv
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjAwMSw2ICsyMjAwOCw3IEBACiAJCQkJNDk4
NzcxNTMxMjQzRjlGQTAwMjIyNkJBIC8qIERyYXdpbmdCdWZmZXJNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCQzdGQTYyMDBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkzMzA5REUzMDk5RTY0OTIwMDU2RTU4MSAvKiBFZGl0Q29tbWFu
ZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QkFCNkM2RDEyNTUwNjMxMDAxNjI2RDQgLyogRWRp
dGluZ1N0eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTBCNkEzMDk5REYwMjcwMDkwRDc4
MSAvKiBFZGl0aW5nVGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QjMwNDNDQzBBRTAzNzNC
MDBBODI2NDcgLyogRWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQTM4QjRCMEQwRTU4
MDgwMDY4NzJDMiAvKiBFZGl0b3JDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA3MDM1NCkKKysr
IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzNSw5ICs5MzUsOSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdy
YXBoCiAgICAgLy8gQSBub24tZW1wdHkgcGFyYWdyYXBoJ3Mgc3R5bGUgaXMgbW92ZWQgd2hlbiB3
ZSBjb3B5IGFuZCBtb3ZlIGl0LiAgV2UgZG9uJ3QgbW92ZSAKICAgICAvLyBhbnl0aGluZyBpZiB3
ZSdyZSBnaXZlbiBhbiBlbXB0eSBwYXJhZ3JhcGgsIGJ1dCBhbiBlbXB0eSBwYXJhZ3JhcGggY2Fu
IGhhdmUgc3R5bGUKICAgICAvLyB0b28sIDxkaXY+PGI+PGJyPjwvYj48L2Rpdj4gZm9yIGV4YW1w
bGUuICBTYXZlIGl0IHNvIHRoYXQgd2UgY2FuIHByZXNlcnZlIGl0IGxhdGVyLgotICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVJbkVtcHR5UGFyYWdyYXBoOworICAg
IFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlSW5FbXB0eVBhcmFncmFwaDsKICAgICBpZiAoc3Rh
cnRPZlBhcmFncmFwaFRvTW92ZSA9PSBlbmRPZlBhcmFncmFwaFRvTW92ZSAmJiBwcmVzZXJ2ZVN0
eWxlKSB7Ci0gICAgICAgIHN0eWxlSW5FbXB0eVBhcmFncmFwaCA9IEFwcGx5U3R5bGVDb21tYW5k
OjplZGl0aW5nU3R5bGVBdFBvc2l0aW9uKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2
YWxlbnQoKSwgSW5jbHVkZVR5cGluZ1N0eWxlKTsKKyAgICAgICAgc3R5bGVJbkVtcHR5UGFyYWdy
YXBoID0gZWRpdGluZ1N0eWxlSW5jbHVkaW5nVHlwaW5nU3R5bGUoc3RhcnRPZlBhcmFncmFwaFRv
TW92ZS5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgLy8gVGhlIG1vdmVkIHBhcmFncmFwaCBz
aG91bGQgYXNzdW1lIHRoZSBibG9jayBzdHlsZSBvZiB0aGUgZGVzdGluYXRpb24uCiAgICAgICAg
IHN0eWxlSW5FbXB0eVBhcmFncmFwaC0+cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CiAgICAgfQpA
QCAtOTgxLDggKzk4MSw4IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3Jh
cGgKICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGluIGFuIGVtcHR5IHBhcmFncmFwaCwgcmVz
dG9yZSBzdHlsZXMgZnJvbSB0aGUgb2xkIGVtcHR5IHBhcmFncmFwaCB0byB0aGUgbmV3IGVtcHR5
IHBhcmFncmFwaC4KICAgICBib29sIHNlbGVjdGlvbklzRW1wdHlQYXJhZ3JhcGggPSBlbmRpbmdT
ZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgaXNTdGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpKSAmJiBpc0VuZE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpKTsKICAgICBpZiAoc3R5bGVJbkVtcHR5UGFyYWdyYXBoICYmIHNlbGVj
dGlvbklzRW1wdHlQYXJhZ3JhcGgpCi0gICAgICAgIGFwcGx5U3R5bGUoc3R5bGVJbkVtcHR5UGFy
YWdyYXBoLmdldCgpKTsKLSAgICAKKyAgICAgICAgYXBwbHlTdHlsZShzdHlsZUluRW1wdHlQYXJh
Z3JhcGgtPnN0eWxlKCkpOworCiAgICAgaWYgKHByZXNlcnZlU2VsZWN0aW9uICYmIHN0YXJ0SW5k
ZXggIT0gLTEpIHsKICAgICAgICAgLy8gRnJhZ21lbnQgY3JlYXRpb24gKHVzaW5nIGNyZWF0ZU1h
cmt1cCkgaW5jb3JyZWN0bHkgdXNlcyByZWd1bGFyCiAgICAgICAgIC8vIHNwYWNlcyBpbnN0ZWFk
IG9mIG5ic3BzIGZvciBzb21lIHNwYWNlcyB0aGF0IHdlcmUgcmVuZGVyZWQgKDExNDc1KSwgd2hp
Y2gKQEAgLTEwMDMsNyArMTAwMyw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFr
T3V0T2ZFbXAKICAgICBpZiAoIWVtcHR5TGlzdEl0ZW0pCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBBcHBseVN0
eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5zdGFy
dCgpLCBJbmNsdWRlVHlwaW5nU3R5bGUpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxl
ID0gZWRpdGluZ1N0eWxlSW5jbHVkaW5nVHlwaW5nU3R5bGUoZW5kaW5nU2VsZWN0aW9uKCkuc3Rh
cnQoKSk7CiAKICAgICBDb250YWluZXJOb2RlKiBsaXN0Tm9kZSA9IGVtcHR5TGlzdEl0ZW0tPnBh
cmVudE5vZGUoKTsKICAgICAvLyBGSVhNRTogQ2FuJ3Qgd2UgZG8gc29tZXRoaW5nIGJldHRlciB3
aGVuIHRoZSBpbW1lZGlhdGUgcGFyZW50IHdhc24ndCBhIGxpc3Qgbm9kZT8KQEAgLTEwNTIsMTAg
KzEwNTIsMTAgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcAogICAg
IGFwcGVuZEJsb2NrUGxhY2Vob2xkZXIobmV3QmxvY2spOwogICAgIHNldEVuZGluZ1NlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9uKG5ld0Jsb2NrLmdldCgpLCAwKSwgRE9XTlNUUkVB
TSkpOwogCi0gICAgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChzdHlsZS5nZXQoKSwgZW5k
aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgaWYgKHN0eWxlLT5sZW5ndGgoKSkKLSAgICAg
ICAgYXBwbHlTdHlsZShzdHlsZS5nZXQoKSk7Ci0gICAgCisgICAgc3R5bGUtPnByZXBhcmVUb0Fw
cGx5QXQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgaWYgKCFzdHlsZS0+aXNFbXB0
eSgpKQorICAgICAgICBhcHBseVN0eWxlKHN0eWxlLT5zdHlsZSgpKTsKKwogICAgIHJldHVybiB0
cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCShyZXZpc2lvbiA3MDM1NCkKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25D
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDE0ICsyOTQsMTQgQEAgdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nUwogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBGaWd1cmUgb3V0IHRoZSB0eXBpbmcgc3R5bGUgaW4gZWZmZWN0IGJlZm9yZSB0aGUgZGVsZXRl
IGlzIGRvbmUuCi0gICAgbV90eXBpbmdTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5n
U3R5bGVBdFBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlVGFiU3BhbihtX3NlbGVjdGlvblRvRGVsZXRl
LnN0YXJ0KCkpKTsKKyAgICBtX3R5cGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocG9z
aXRpb25CZWZvcmVUYWJTcGFuKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSkpOwogCi0gICAg
cmVtb3ZlRW5jbG9zaW5nQW5jaG9yU3R5bGUobV90eXBpbmdTdHlsZS5nZXQoKSwgbV9zZWxlY3Rp
b25Ub0RlbGV0ZS5zdGFydCgpKTsKKyAgICByZW1vdmVFbmNsb3NpbmdBbmNob3JTdHlsZShtX3R5
cGluZ1N0eWxlLT5zdHlsZSgpLCBtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkpOwogCiAgICAg
Ly8gSWYgd2UncmUgZGVsZXRpbmcgaW50byBhIE1haWwgYmxvY2txdW90ZSwgc2F2ZSB0aGUgc3R5
bGUgYXQgZW5kKCkgaW5zdGVhZCBvZiBzdGFydCgpCiAgICAgLy8gV2UnbGwgdXNlIHRoaXMgbGF0
ZXIgaW4gY29tcHV0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUgaWYgd2UgZW5kIHVwIG91dHNpZGUg
b2YgYSBNYWlsIGJsb2NrcXVvdGUKICAgICBpZiAobmVhcmVzdE1haWxCbG9ja3F1b3RlKG1fc2Vs
ZWN0aW9uVG9EZWxldGUuc3RhcnQoKS5ub2RlKCkpKQotICAgICAgICBtX2RlbGV0ZUludG9CbG9j
a3F1b3RlU3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbiht
X3NlbGVjdGlvblRvRGVsZXRlLmVuZCgpKTsKKyAgICAgICAgbV9kZWxldGVJbnRvQmxvY2txdW90
ZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUobV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKSk7
CiAgICAgZWxzZQogICAgICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUgPSAwOwogfQpA
QCAtNjkzLDggKzY5Myw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRl
VHkKICAgICAgICAgbV90eXBpbmdTdHlsZSA9IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsK
ICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUgPSAwOwogCi0gICAgcHJlcGFyZUVkaXRp
bmdTdHlsZVRvQXBwbHlBdChtX3R5cGluZ1N0eWxlLmdldCgpLCBtX2VuZGluZ1Bvc2l0aW9uKTsK
LSAgICBpZiAoIW1fdHlwaW5nU3R5bGUtPmxlbmd0aCgpKQorICAgIG1fdHlwaW5nU3R5bGUtPnBy
ZXBhcmVUb0FwcGx5QXQobV9lbmRpbmdQb3NpdGlvbik7CisgICAgaWYgKG1fdHlwaW5nU3R5bGUt
PmlzRW1wdHkoKSkKICAgICAgICAgbV90eXBpbmdTdHlsZSA9IDA7CiAgICAgVmlzaWJsZVBvc2l0
aW9uIHZpc2libGVFbmQobV9lbmRpbmdQb3NpdGlvbik7CiAgICAgaWYgKG1fdHlwaW5nU3R5bGUg
JiYgCkBAIC03MDcsNyArNzA3LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxj
dWxhdGVUeQogICAgICAgICAvLyB0aGVuIG1vdmUgaXQgYmFjayAod2hpY2ggd2lsbCBjbGVhciB0
eXBpbmcgc3R5bGUpLgogCiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbih2aXNpYmxlRW5kKTsK
LSAgICAgICAgYXBwbHlTdHlsZShtX3R5cGluZ1N0eWxlLmdldCgpLCBFZGl0QWN0aW9uVW5zcGVj
aWZpZWQpOworICAgICAgICBhcHBseVN0eWxlKG1fdHlwaW5nU3R5bGUtPnN0eWxlKCksIEVkaXRB
Y3Rpb25VbnNwZWNpZmllZCk7CiAgICAgICAgIC8vIGFwcGx5U3R5bGUgY2FuIGRlc3Ryb3kgdGhl
IHBsYWNlaG9sZGVyIHRoYXQgd2FzIGF0IG1fZW5kaW5nUG9zaXRpb24gaWYgaXQgbmVlZHMgdG8g
CiAgICAgICAgIC8vIG1vdmUgaXQsIGJ1dCBpdCB3aWxsIHNldCBhbiBlbmRpbmdTZWxlY3Rpb24o
KSBhdCBbbW92ZWRQbGFjZWhvbGRlciwgMF0gaWYgaXQgZG9lcyBzby4KICAgICAgICAgbV9lbmRp
bmdQb3NpdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCk7CkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDcwMzU0KQorKysgV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEVkaXRpbmdTdHlsZTsK
KwogY2xhc3MgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29t
bWFuZCB7IAogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgc21hcnREZWxldGUgPSBmYWxz
ZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFs
c2UsIGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzID0gZmFsc2UpCkBAIC04Niw4ICs4OCw4
IEBAIHByaXZhdGU6CiAgICAgUG9zaXRpb24gbV90cmFpbGluZ1doaXRlc3BhY2U7CiAgICAgUmVm
UHRyPE5vZGU+IG1fc3RhcnRCbG9jazsKICAgICBSZWZQdHI8Tm9kZT4gbV9lbmRCbG9jazsKLSAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fdHlwaW5nU3R5bGU7Ci0gICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX2RlbGV0ZUludG9CbG9ja3F1b3Rl
U3R5bGU7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbV90eXBpbmdTdHlsZTsKKyAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGU7CiAgICAgUmVmUHRy
PE5vZGU+IG1fc3RhcnRSb290OwogICAgIFJlZlB0cjxOb2RlPiBtX2VuZFJvb3Q7CiAgICAgUmVm
UHRyPE5vZGU+IG1fc3RhcnRUYWJsZVJvdzsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJFZGl0aW5nU3R5bGUuaCIKKworI2luY2x1ZGUgIkFwcGx5
U3R5bGVDb21tYW5kLmgiCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgi
CisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJv
bGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBQYXNzUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBlZGl0aW5nU3R5bGVGcm9tQ29tcHVlZFN0eWxlKENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFzdHlsZSkKKyAgICAg
ICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICByZXR1
cm4gQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzKHN0eWxlKTsK
K30KKworRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUoKQorICAgIDogbV9zaG91bGRVc2VGaXhl
ZERlZmF1bHRGb250U2l6ZShmYWxzZSkKK3sKK30KKworRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5
bGUoTm9kZSogbm9kZSkKKyAgICA6IG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUoZmFs
c2UpCit7CisgICAgaW5pdChub2RlKTsKK30KKworRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUo
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQorICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRG
b250U2l6ZShmYWxzZSkKK3sKKyAgICBpbml0KHBvc2l0aW9uLm5vZGUoKSk7Cit9CisKK0VkaXRp
bmdTdHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQor
ICAgIDogbV9tdXRhYmxlU3R5bGUoc3R5bGUtPmNvcHkoKSkKKyAgICAsIG1fc2hvdWxkVXNlRml4
ZWREZWZhdWx0Rm9udFNpemUoZmFsc2UpCit7Cit9CisKK3ZvaWQgRWRpdGluZ1N0eWxlOjppbml0
KE5vZGUqIG5vZGUpCit7CisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4g
Y29tcHV0ZWRTdHlsZUF0UG9zaXRpb24gPSBjb21wdXRlZFN0eWxlKG5vZGUpOworICAgIG1fbXV0
YWJsZVN0eWxlID0gZWRpdGluZ1N0eWxlRnJvbUNvbXB1ZWRTdHlsZShjb21wdXRlZFN0eWxlQXRQ
b3NpdGlvbi5nZXQoKSk7CisKKyAgICBpZiAobm9kZSAmJiBub2RlLT5jb21wdXRlZFN0eWxlKCkp
IHsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHls
ZSgpOworICAgICAgICByZW1vdmVUZXh0RmlsbEFuZFN0cm9sZUNvbG9yc0lmTmVlZGVkKHJlbmRl
clN0eWxlKTsKKyAgICAgICAgcmVwbGFjZUZvbnRTaXplQnlLZXl3b3JkSWZQb3NzaWJsZShyZW5k
ZXJTdHlsZSwgY29tcHV0ZWRTdHlsZUF0UG9zaXRpb24uZ2V0KCkpOworICAgIH0KKworICAgIG1f
c2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUgPSBjb21wdXRlZFN0eWxlQXRQb3NpdGlvbi0+
dXNlRml4ZWRGb250RGVmYXVsdFNpemUoKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92
ZVRleHRGaWxsQW5kU3Ryb2xlQ29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxl
KQoreworICAgIC8vIElmIGEgbm9kZSdzIHRleHQgZmlsbCBjb2xvciBpcyBpbnZhbGlkLCB0aGVu
IGl0cyBjaGlsZHJlbiB1c2UgCisgICAgLy8gdGhlaXIgZm9udC1jb2xvciBhcyB0aGVpciB0ZXh0
IGZpbGwgY29sb3IgKHRoZXkgZG9uJ3QKKyAgICAvLyBpbmhlcml0IGl0KS4gIExpa2V3aXNlIGZv
ciBzdHJva2UgY29sb3IuCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKCFyZW5k
ZXJTdHlsZS0+dGV4dEZpbGxDb2xvcigpLmlzVmFsaWQoKSkKKyAgICAgICAgbV9tdXRhYmxlU3R5
bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvciwgZWMpOwor
ICAgIGlmICghcmVuZGVyU3R5bGUtPnRleHRTdHJva2VDb2xvcigpLmlzVmFsaWQoKSkKKyAgICAg
ICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dFN0
cm9rZUNvbG9yLCBlYyk7CisgICAgQVNTRVJUKCFlYyk7Cit9CisKK3ZvaWQgRWRpdGluZ1N0eWxl
OjpyZXBsYWNlRm9udFNpemVCeUtleXdvcmRJZlBvc3NpYmxlKFJlbmRlclN0eWxlKiByZW5kZXJT
dHlsZSwgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxlKQoreworICAg
IEFTU0VSVChyZW5kZXJTdHlsZSk7CisgICAgaWYgKHJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5rZXl3b3JkU2l6ZSgpKQorICAgICAgICBtX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlGb250U2l6ZSwgY29tcHV0ZWRTdHlsZS0+Z2V0Rm9udFNpemVDU1NWYWx1ZVBy
ZWZlcnJpbmdLZXl3b3JkKCktPmNzc1RleHQoKSk7Cit9CisKK2Jvb2wgRWRpdGluZ1N0eWxlOjpp
c0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fbXV0YWJsZVN0eWxlIHx8IG1fbXV0YWJs
ZVN0eWxlLT5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgRWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQYXNz
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSkKK3sKKyAgICBtX211dGFi
bGVTdHlsZSA9IHN0eWxlOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWd1
cmUgb3V0IHdoZXRoZXIgb3Igbm90IGZvbnQgaXMgZml4ZWQgd2lkdGggZm9yIG11dGFibGUgc3R5
bGUuCisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBmb250LWZhbWlseSBpcyBtb25vc3BhY2UgYXMg
aW4gRm9udERlc2NyaXB0aW9uIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGR1cGxpY2F0ZSBjb2RlIGhl
cmUuCisgICAgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IGZhbHNlOworfQorCit2
b2lkIEVkaXRpbmdTdHlsZTo6Y2xlYXIoKQoreworICAgIG1fbXV0YWJsZVN0eWxlLmNsZWFyKCk7
CisgICAgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IGZhbHNlOworfQorCit2b2lk
IEVkaXRpbmdTdHlsZTo6cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCkKK3sKKyAgICBpZiAoIW1fbXV0
YWJsZVN0eWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX211dGFibGVTdHlsZS0+cmVtb3Zl
QmxvY2tQcm9wZXJ0aWVzKCk7Cit9CisKK3ZvaWQgRWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBs
eUF0KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICAvLyBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6aGFuZGxlU3R5bGVTcGFucygpIHJlcXVpcmVzIHRoYXQgdGhpcyBmdW5jdGlvbiBv
bmx5IHJlbW92ZXMgdGhlIGVkaXRpbmcgc3R5bGUuCisgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiB3
YXMgbW9kaWZpZWQgaW4gdGhlIGZ1dHVyZSB0byBkZWxldGUgYWxsIHJlZHVuZGFudCBwcm9wZXJ0
aWVzLCB0aGVuIGFkZCBhIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUKKyAgICAvLyB3aGljaCBv
bmUgb2YgZWRpdGluZ1N0eWxlQXRQb3NpdGlvbiBvciBjb21wdXRlZFN0eWxlIGlzIGNhbGxlZC4K
KyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHBv
c2l0aW9uKTsKKyAgICBzdHlsZS0+bV9tdXRhYmxlU3R5bGUtPmRpZmYobV9tdXRhYmxlU3R5bGUu
Z2V0KCkpOworCisgICAgLy8gaWYgYWxwaGEgdmFsdWUgaXMgemVybywgd2UgZG9uJ3QgYWRkIHRo
ZSBiYWNrZ3JvdW5kIGNvbG9yLgorICAgIFJlZlB0cjxDU1NWYWx1ZT4gYmFja2dyb3VuZENvbG9y
ID0gbV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpOworICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IgJiYgYmFja2dyb3VuZENvbG9yLT5p
c1ByaW1pdGl2ZVZhbHVlKCkKKyAgICAgICAgJiYgIWFscGhhQ2hhbm5lbChzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KGJhY2tncm91bmRDb2xvci5nZXQoKSktPmdldFJHQkEzMlZhbHVl
KCkpKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIG1fbXV0YWJsZVN0eWxl
LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgZWMpOworICAgIH0K
K30KKworUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGVkaXRpbmdTdHlsZUluY2x1ZGluZ1R5cGlu
Z1N0eWxlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBlZHRpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHBvc2l0aW9uKTsKKyAgICBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogdHlwaW5nU3R5bGUgPSBwb3NpdGlvbi5ub2RlKCkt
PmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOworICAgIGlm
ICh0eXBpbmdTdHlsZSkgeworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IGluaGVyaXRhYmxlVHlwaW5nU3R5bGUgPSB0eXBpbmdTdHlsZS0+Y29weSgpOworICAgICAg
ICBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlTm9uRWRpdGluZ1Byb3BlcnRpZXMoaW5oZXJpdGFi
bGVUeXBpbmdTdHlsZS5nZXQoKSk7CisgICAgICAgIGVkdGluZ1N0eWxlLT5zdHlsZSgpLT5tZXJn
ZShpbmhlcml0YWJsZVR5cGluZ1N0eWxlLmdldCgpLCB0cnVlKTsKKyAgICB9CisgICAgcmV0dXJu
IGVkdGluZ1N0eWxlOworfQorICAgIAorfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdT
dHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgRWRpdGluZ1N0eWxlX2gKKyNkZWZpbmUgRWRpdGluZ1N0
eWxlX2gKKworI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQb3NpdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb247CisKK2NsYXNzIEVkaXRpbmdTdHlsZSA6IHB1YmxpYyBSZWZDb3VudGVkPEVk
aXRpbmdTdHlsZT4geworcHVibGljOgorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0
eWxlPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0aW5n
U3R5bGUoKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBj
cmVhdGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRWRp
dGluZ1N0eWxlKG5vZGUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5n
U3R5bGU+IGNyZWF0ZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHlsZShwb3NpdGlvbikpOworICAgIH0KKworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gY3JlYXRlKGNvbnN0IENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0
aW5nU3R5bGUoc3R5bGUpKTsKKyAgICB9CisKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUoKSB7IHJldHVybiBtX211dGFibGVTdHlsZS5nZXQoKTsgfQorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4pOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHJlbW92ZUJsb2Nr
UHJvcGVydGllcygpOworICAgIHZvaWQgcHJlcGFyZVRvQXBwbHlBdChjb25zdCBQb3NpdGlvbiYp
OworCitwcml2YXRlOgorICAgIEVkaXRpbmdTdHlsZSgpOworICAgIEVkaXRpbmdTdHlsZShOb2Rl
Kik7CisgICAgRWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJik7CisgICAgRWRpdGluZ1N0eWxl
KGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lkIGluaXQoTm9kZSopOworICAg
IHZvaWQgcmVtb3ZlVGV4dEZpbGxBbmRTdHJvbGVDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSop
OworICAgIHZvaWQgcmVwbGFjZUZvbnRTaXplQnlLZXl3b3JkSWZQb3NzaWJsZShSZW5kZXJTdHls
ZSosIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbiopOworCisgICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBtX211dGFibGVTdHlsZTsKKyAgICBib29sIG1fc2hvdWxkVXNl
Rml4ZWREZWZhdWx0Rm9udFNpemU7Cit9OworCitQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZWRp
dGluZ1N0eWxlSW5jbHVkaW5nVHlwaW5nU3R5bGUoY29uc3QgUG9zaXRpb24mKTsKKyAgICAKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVkaXRpbmdTdHlsZV9oCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAkocmV2aXNpb24gNzAzNTQpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzI5MSw3ICszMjkxLDcgQEAgdm9pZCBFZGl0b3I6OmNvbXB1
dGVBbmRTZXRUeXBpbmdTdHlsZShDUwogICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNv
bW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBibG9ja1N0eWxlLmdldCgpLCBlZGl0
aW5nQWN0aW9uKSk7CiAKICAgICAvLyBTZXQgdGhlIHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlw
aW5nIHN0eWxlLgotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRUeXBpbmdTdHlsZShtdXRh
YmxlU3R5bGUucmVsZWFzZSgpKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0VHlwaW5n
U3R5bGUoRWRpdGluZ1N0eWxlOjpjcmVhdGUobXV0YWJsZVN0eWxlLmdldCgpKSk7CiB9CiAKIFBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEVkaXRvcjo6c2VsZWN0aW9uQ29t
cHV0ZWRTdHlsZShib29sJiBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSkgY29uc3QKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDcwMzU0
KQorKysgV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Myw2ICs3Myw3IEBAIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRy
b2xsZXIKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93
TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikKICAgICAsIG1fZ3Jh
bnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCisgICAgLCBtX3R5cGluZ1N0eWxlKEVkaXRp
bmdTdHlsZTo6Y3JlYXRlKCkpCiAgICAgLCBtX2NhcmV0QmxpbmtUaW1lcih0aGlzLCAmU2VsZWN0
aW9uQ29udHJvbGxlcjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQpCiAgICAgLCBtX2NhcmV0UmVjdE5l
ZWRzVXBkYXRlKHRydWUpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gNzAzNTQpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw3IEBACiAjaWZuZGVmIFNlbGVjdGlvbkNvbnRyb2xsZXJfaAogI2RlZmluZSBTZWxl
Y3Rpb25Db250cm9sbGVyX2gKIAotI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKQEAgLTM3LDYgKzM3
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CitjbGFzcyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEhUTUxG
b3JtRWxlbWVudDsKIGNsYXNzIFJlbmRlck9iamVjdDsKQEAgLTE2MCw3ICsxNjEsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwYWludERyYWdDYXJldChHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGlu
dCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OwogCiAgICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIHR5cGluZ1N0eWxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBpbmdT
dHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPik7CisgICAgdm9pZCBz
ZXRUeXBpbmdTdHlsZShQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4pOwogICAgIHZvaWQgY2xlYXJU
eXBpbmdTdHlsZSgpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVD
b250ZW50ID0gdHJ1ZSkgY29uc3Q7CkBAIC0yMTQsNyArMjE1LDcgQEAgcHJpdmF0ZToKICAgICBW
aXNpYmxlU2VsZWN0aW9uIG1fc2VsZWN0aW9uOwogICAgIFRleHRHcmFudWxhcml0eSBtX2dyYW51
bGFyaXR5OwogCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3R5cGlu
Z1N0eWxlOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG1fdHlwaW5nU3R5bGU7CiAKICAgICBU
aW1lcjxTZWxlY3Rpb25Db250cm9sbGVyPiBtX2NhcmV0QmxpbmtUaW1lcjsKIApAQCAtMjM0LDE3
ICsyMzUsMjAgQEAgcHJpdmF0ZToKIAogaW5saW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiBTZWxlY3Rpb25Db250cm9sbGVyOjp0eXBpbmdTdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fdHlwaW5nU3R5bGUuZ2V0KCk7CisgICAgcmV0dXJuIG1fdHlwaW5nU3R5bGUtPnN0eWxlKCk7
CiB9CiAKIGlubGluZSB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNsZWFyVHlwaW5nU3R5bGUo
KQogewotICAgIG1fdHlwaW5nU3R5bGUuY2xlYXIoKTsKKyAgICBtX3R5cGluZ1N0eWxlLT5jbGVh
cigpOwogfQogCi1pbmxpbmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRUeXBpbmdTdHls
ZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSkKK2lubGluZSB2
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8RWRpdGlu
Z1N0eWxlPiBzdHlsZSkKIHsKLSAgICBtX3R5cGluZ1N0eWxlID0gc3R5bGU7CisgICAgaWYgKHN0
eWxlKQorICAgICAgICBtX3R5cGluZ1N0eWxlID0gc3R5bGU7CisgICAgZWxzZQorICAgICAgICBt
X3R5cGluZ1N0eWxlLT5jbGVhcigpOwogfQogCiAjaWYgIShQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oQ0hST01JVU0pKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiA3MDM1NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksNyBAQCB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8UmVuZGVyU3R5bGU+LCA0PiBQCiBjbGFzcyBSZW5kZXJTdHlsZTog
cHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsKICAgICBmcmllbmQgY2xhc3MgQW5pbWF0
aW9uQmFzZTsgLy8gVXNlZCBieSBDU1MgYW5pbWF0aW9ucy4gV2UgY2FuJ3QgYWxsb3cgdGhlbSB0
byBhbmltYXRlIGJhc2VkIG9mZiB2aXNpdGVkIGNvbG9ycy4KICAgICBmcmllbmQgY2xhc3MgQXBw
bHlTdHlsZUNvbW1hbmQ7IC8vIEVkaXRpbmcgaGFzIHRvIG9ubHkgcmV2ZWFsIHVudmlzaXRlZCBp
bmZvLgorICAgIGZyaWVuZCBjbGFzcyBFZGl0aW5nU3R5bGU7IC8vIEVkaXRpbmcgaGFzIHRvIG9u
bHkgcmV2ZWFsIHVudmlzaXRlZCBpbmZvLgogICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZVNlbGVj
dG9yOyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0bHkuCiAgICAgZnJpZW5kIGNsYXNzIENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbjsgLy8gSWdub3JlcyB2aXNpdGVkIHN0eWxlcywgc28gbmVlZHMg
dG8gYmUgYWJsZSB0byBzZWUgdW52aXNpdGVkIGluZm8uCiAgICAgZnJpZW5kIGNsYXNzIFByb3Bl
cnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yOyAvLyBVc2VkIGJ5IENTUyBhbmltYXRpb25zLiBX
ZSBjYW4ndCBhbGxvdyB0aGVtIHRvIGFuaW1hdGUgYmFzZWQgb2ZmIHZpc2l0ZWQgY29sb3JzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73014</attachid>
            <date>2010-11-04 17:37:15 -0700</date>
            <delta_ts>2010-11-06 09:38:23 -0700</delta_ts>
            <desc>fixed the crash on fast/events/keydown-function-keys.html</desc>
            <filename>bug-46335-20101104173714.patch</filename>
            <type>text/plain</type>
            <size>35614</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTM2MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMTAtMTEtMDQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVn
IDQ2MzM1IC0gQWRkIEVkaXRpbmdTdHlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDYzMzUKKworICAgICAgICBBZGRlZCBFZGl0aW5nU3R5bGUgdG8g
V2ViQ29yZS9lZGl0aW5nLiAgVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBn
ZXRQcm9wZXJ0aWVzTm90SW4sIHJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzLAorICAgICAgICBl
ZGl0aW5nU3R5bGVBdFBvc2l0aW9uLCBhbmQgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdCBp
biBBcHBseVN0eWxlQ29tbWFuZC5jcHAgb25jZSBkZXBsb3llZCBldmVyeXdoZXJlLgorICAgICAg
ICBEZXBsb3llZCBpdCBpbiB0eXBpbmcgc3R5bGVzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBh
cmUgYWRkZWQgc2luY2UgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
Ojptb3ZlUGFyYWdyYXBocyk6IENhbGxzIGVkaXRpbmdTdHlsZUluY2x1ZGluZ1R5cGluZ1N0eWxl
LgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0
eUxpc3RJdGVtKTogVXNlcyBFZGl0aW5nU3R5bGUuCisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OnNhdmVUeXBpbmdTdHlsZVN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKTog
RGl0dG8uCisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmg6CisgICAg
ICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmVkaXRpbmdTdHlsZUZyb21Db21wdWVkU3R5bGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6OmluaXQpOiBBZGRlZDsgYSBjbG9uZSBvZiBBcHBseVN0eWxlQ29tbWFuZDo6
ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6
cmVtb3ZlVGV4dEZpbGxBbmRTdHJvbGVDb2xvcnNJZk5lZWRlZCk6IEV4dHJhY3RlZCBmcm9tIGlu
aXQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlcGxhY2VGb250U2l6ZUJ5S2V5
d29yZElmUG9zc2libGUpOiBFeHRyYWN0ZWQgZnJvbSBpbml0LgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ1N0eWxlOjppc0VtcHR5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6OnNldFN0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6
OmNsZWFyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnJlbW92ZUJs
b2NrUHJvcGVydGllcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpw
cmVwYXJlVG9BcHBseUF0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjplZGl0aW5nU3R5bGVJ
bmNsdWRpbmdUeXBpbmdTdHlsZSk6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjcmVhdGUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6c3R5bGUpOiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVtb3ZlRm9ybWF0Q29tbWFuZDo6ZG9BcHBseSk6IFVzZXMgRWRpdGluZ1N0eWxlLgorICAg
ICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0aW9uQ29udHJvbGxlcjo6dHlwaW5nU3R5bGUpOiBVc2VzIEVkaXRpbmdTdHlsZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmNsZWFyVHlwaW5nU3R5bGUpOiBV
c2VzIEVkaXRpbmdTdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6
OnNldFR5cGluZ1N0eWxlKTogVXNlcyBFZGl0aW5nU3R5bGUuCisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmg6CisKIDIwMTAtMTEtMDQgIFJvYmVydCBIb2dhbiAgPHJvYmVy
dEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDog
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiA3MTM2MikKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTg5OCw2ICs4OTgsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZWRpdGlu
Zy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmNwcAorICAgIGVkaXRpbmcv
RWRpdGluZ1N0eWxlLmNwcAogICAgIGVkaXRpbmcvRWRpdG9yLmNwcAogICAgIGVkaXRpbmcvRWRp
dG9yQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKSW5kZXg6
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gNzEzNjIpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjkyLDYgKzEyOTIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2
aW9yLmggXAogCVdlYkNvcmUvZWRpdGluZy9FZGl0aW5nQmVoYXZpb3JUeXBlcy5oIFwKKwlXZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBcCisJV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdT
dHlsZS5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgXAogCVdlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwIFwKIAlXZWJDb3JlL2VkaXRpbmcvRWRpdG9yRGVsZXRlQWN0aW9u
LmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHJldmlzaW9uIDcxMzYyKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdv
cmtpbmcgY29weSkKQEAgLTEzNzksNiArMTM3OSw4IEBACiAgICAgICAgICAgICAnZWRpdGluZy9F
ZGl0Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oJywK
ICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRpbmdCZWhhdmlvclR5cGVzLmgnLAorICAgICAgICAg
ICAgJ2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCcsCisgICAgICAgICAgICAnZWRpdGluZy9FZGl0
aW5nU3R5bGUuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9FZGl0b3IuY3BwJywKICAgICAgICAg
ICAgICdlZGl0aW5nL0VkaXRvci5oJywKICAgICAgICAgICAgICdlZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNzEzNjIpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3
b3JraW5nIGNvcHkpCkBAIC03ODcsNiArNzg3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGlu
Zy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAgXAorICAgIGVk
aXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBcCiAgICAgZWRpdGluZy9FZGl0b3IuY3BwIFwKICAgICBl
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFu
ZC5jcHAgXApAQCAtMTY5Niw2ICsxNjk3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgZWRpdGluZy9E
ZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5oIFwKICAgICBlZGl0aW5nL0VkaXRDb21tYW5kLmggXAorICAgIGVkaXRpbmcvRWRp
dGluZ1N0eWxlLmggXAogICAgIGVkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmggXAogICAgIGVkaXRp
bmcvRWRpdG9yLmggXAogICAgIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmggXApJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MTM2MikKKysrIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ2
MjA4LDYgKzQ2MjA4LDYyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcRWRpdGluZ1N0eWxlLmgiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXEVkaXRpbmdTdHls
ZS5jcHAiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1
Z3xXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJ
PFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJS
ZWxlYXNlfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQor
CQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5h
bWU9IkRlYnVnX0ludGVybmFsfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
DQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQor
CQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24NCisJCQkJCU5hbWU9IkRlYnVnX0NhaXJvfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2luMzIiDQorCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQor
CQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIg0KKwkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRp
bmdcRWRpdG9yLmNwcCINCiAJCQkJPg0KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzEzNjIp
CisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjk4Myw2ICsyOTgzLDggQEAKIAkJOTdFRjdERkUxMDdFNTVCNzAwRDdDNDlDIC8q
IFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3RUY3REZEMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250cm9s
bGVyQmFzZS5jcHAgKi87IH07CiAJCTlCNDE3MDY0MTI1NjYyQjMwMDZCMjhGQyAvKiBBcHBseUJs
b2NrRWxlbWVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDlCNDE3MDYyMTI1NjYyQjMwMDZCMjhGQyAvKiBBcHBseUJsb2NrRWxlbWVudENv
bW1hbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5QjQxNzA2NTEyNTY2MkIzMDA2QjI4RkMgLyogQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNDE3MDYz
MTI1NjYyQjMwMDZCMjhGQyAvKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwICovOyB9Owor
CQk5QkFCNkM2QzEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkFCNkM2QTEyNTUwNjMxMDAxNjI2
RDQgLyogRWRpdGluZ1N0eWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJOUJBQjZDNkQxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkFCNkM2
QjEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmNwcCAqLzsgfTsKIAkJOUYwRDZCMkUx
MjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUYwRDZCMkMxMjFCRkVCQTAwNkMw
Mjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwICovOyB9OwogCQk5RjBENkIyRjEyMUJG
RUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUYwRDZCMkQxMjFCRkVCQTAwNkMwMjg4IC8q
IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCAqLzsgfTsKIAkJOUYzQjk0N0UxMjI0MTc1ODAwNTMw
NEU3IC8qIFNjcmlwdEhlYXBTbmFwc2hvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOUYzQjk0N0QxMjI0MTc1ODAwNTMwNEU3IC8qIFNjcmlwdEhlYXBT
bmFwc2hvdC5oICovOyB9OwpAQCAtOTA3Nyw2ICs5MDc5LDggQEAKIAkJOTdFRjdERkQxMDdFNTVC
NzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOUI0MTcwNjIxMjU2NjJCMzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tF
bGVtZW50Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBseUJs
b2NrRWxlbWVudENvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI0MTcw
NjMxMjU2NjJCMzAwNkIyOEZDIC8qIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkFCNkM2QTEyNTUwNjMxMDAxNjI2
RDQgLyogRWRpdGluZ1N0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVk
aXRpbmdTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkFCNkM2QjEyNTUw
NjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVkaXRpbmdTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTlGMEQ2QjJDMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclByb2ZpbGVy
QWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RjBENkIyRDEyMUJGRUJB
MDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JQcm9maWxlckFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlGM0I5NDdEMTIyNDE3NTgwMDUzMDRFNyAvKiBTY3JpcHRIZWFwU25hcHNo
b3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0SGVhcFNuYXBzaG90
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDUxMiw2ICsxNDUxNiw4IEBACiAJ
CQkJOTMzMDlEOTUwOTlFNjQ5MTAwNTZFNTgxIC8qIEVkaXRDb21tYW5kLmggKi8sCiAJCQkJNEYx
NTM0REQxMUI1MzJFQzAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvci5oICovLAogCQkJCTRGMTUz
NERGMTFCNTMzMDIwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3JUeXBlcy5oICovLAorCQkJCTlC
QUI2QzZBMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCAqLywKKwkJCQk5QkFCNkM2
QjEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmNwcCAqLywKIAkJCQk0QjMwNDNDQTBB
RTAzNzNCMDBBODI2NDcgLyogRWRpdG9yLmNwcCAqLywKIAkJCQk0QjMwNDNDQjBBRTAzNzNCMDBB
ODI2NDcgLyogRWRpdG9yLmggKi8sCiAJCQkJOTNBMzhCNEEwRDBFNTgwODAwNjg3MkMyIC8qIEVk
aXRvckNvbW1hbmQuY3BwICovLApAQCAtMTk1MDQsNiArMTk1MTAsNyBAQAogCQkJCTkzMzA5REU0
MDk5RTY0OTIwMDU2RTU4MSAvKiBFZGl0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEYx
NTM0REUxMUI1MzJFQzAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNEYxNTM0RTAxMUI1MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvclR5cGVzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk5QkFCNkM2QzEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0
eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBNDA5OURGMDI3MDA5MEQ3ODEgLyogRWRp
dGluZ1RleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzA0M0NEMEFFMDM3M0IwMEE4MjY0NyAv
KiBFZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjMyNjc5MEQ3OEI5NDQwMDY4RjBDNCAv
KiBFZGl0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjIxNTIsNiArMjIxNTksNyBAQAog
CQkJCTQ5ODc3MTUzMTI0M0Y5RkEwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM3RkE2MjAwRDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURFMzA5OUU2NDkyMDA1NkU1ODEgLyogRWRp
dENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUJBQjZDNkQxMjU1MDYzMTAwMTYyNkQ0
IC8qIEVkaXRpbmdTdHlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTUwQjZBMzA5OURGMDI3
MDA5MEQ3ODEgLyogRWRpdGluZ1RleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEIzMDQzQ0Mw
QUUwMzczQjAwQTgyNjQ3IC8qIEVkaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0EzOEI0
QjBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNzEzNjIpCisr
KyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFZGl0b3Iu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEZvbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEludGVyY2hhbmdlLmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00OTEsOSArNDkwLDkgQEAgUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gQQogICAgIH0KIAogICAgIGlmIChzaG91bGRJbmNsdWRlVHlw
aW5nU3R5bGUgPT0gSW5jbHVkZVR5cGluZ1N0eWxlKSB7Ci0gICAgICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiB0eXBpbmdTdHlsZSA9IHBvcy5ub2RlKCktPmRvY3VtZW50KCktPmZyYW1l
KCktPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IHR5cGluZ1N0eWxlID0gcG9zLm5vZGUoKS0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCk7CiAgICAgICAgIGlmICh0eXBpbmdT
dHlsZSkKLSAgICAgICAgICAgIHN0eWxlLT5tZXJnZSh0eXBpbmdTdHlsZSk7CisgICAgICAgICAg
ICBzdHlsZS0+bWVyZ2UodHlwaW5nU3R5bGUuZ2V0KCkpOwogICAgIH0KIAogICAgIHJldHVybiBz
dHlsZS5yZWxlYXNlKCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2
aXNpb24gNzEzNjIpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBBcHBseVN0eWxlQ29tbWFuZF9o
CiAKICNpbmNsdWRlICJDb21wb3NpdGVFZGl0Q29tbWFuZC5oIgorI2luY2x1ZGUgIkhUTUxFbGVt
ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA3MTM2MikKKysrIFdlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzNyw5ICs5Mzcs
OSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgLy8gQSBu
b24tZW1wdHkgcGFyYWdyYXBoJ3Mgc3R5bGUgaXMgbW92ZWQgd2hlbiB3ZSBjb3B5IGFuZCBtb3Zl
IGl0LiAgV2UgZG9uJ3QgbW92ZSAKICAgICAvLyBhbnl0aGluZyBpZiB3ZSdyZSBnaXZlbiBhbiBl
bXB0eSBwYXJhZ3JhcGgsIGJ1dCBhbiBlbXB0eSBwYXJhZ3JhcGggY2FuIGhhdmUgc3R5bGUKICAg
ICAvLyB0b28sIDxkaXY+PGI+PGJyPjwvYj48L2Rpdj4gZm9yIGV4YW1wbGUuICBTYXZlIGl0IHNv
IHRoYXQgd2UgY2FuIHByZXNlcnZlIGl0IGxhdGVyLgotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gc3R5bGVJbkVtcHR5UGFyYWdyYXBoOworICAgIFJlZlB0cjxFZGl0aW5n
U3R5bGU+IHN0eWxlSW5FbXB0eVBhcmFncmFwaDsKICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaFRv
TW92ZSA9PSBlbmRPZlBhcmFncmFwaFRvTW92ZSAmJiBwcmVzZXJ2ZVN0eWxlKSB7Ci0gICAgICAg
IHN0eWxlSW5FbXB0eVBhcmFncmFwaCA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVB
dFBvc2l0aW9uKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKSwgSW5jbHVk
ZVR5cGluZ1N0eWxlKTsKKyAgICAgICAgc3R5bGVJbkVtcHR5UGFyYWdyYXBoID0gZWRpdGluZ1N0
eWxlSW5jbHVkaW5nVHlwaW5nU3R5bGUoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZh
bGVudCgpKTsKICAgICAgICAgLy8gVGhlIG1vdmVkIHBhcmFncmFwaCBzaG91bGQgYXNzdW1lIHRo
ZSBibG9jayBzdHlsZSBvZiB0aGUgZGVzdGluYXRpb24uCiAgICAgICAgIHN0eWxlSW5FbXB0eVBh
cmFncmFwaC0+cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CiAgICAgfQpAQCAtOTgzLDggKzk4Myw4
IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAgICAvLyBJZiB0
aGUgc2VsZWN0aW9uIGlzIGluIGFuIGVtcHR5IHBhcmFncmFwaCwgcmVzdG9yZSBzdHlsZXMgZnJv
bSB0aGUgb2xkIGVtcHR5IHBhcmFncmFwaCB0byB0aGUgbmV3IGVtcHR5IHBhcmFncmFwaC4KICAg
ICBib29sIHNlbGVjdGlvbklzRW1wdHlQYXJhZ3JhcGggPSBlbmRpbmdTZWxlY3Rpb24oKS5pc0Nh
cmV0KCkgJiYgaXNTdGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFy
dCgpKSAmJiBpc0VuZE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
KTsKICAgICBpZiAoc3R5bGVJbkVtcHR5UGFyYWdyYXBoICYmIHNlbGVjdGlvbklzRW1wdHlQYXJh
Z3JhcGgpCi0gICAgICAgIGFwcGx5U3R5bGUoc3R5bGVJbkVtcHR5UGFyYWdyYXBoLmdldCgpKTsK
LSAgICAKKyAgICAgICAgYXBwbHlTdHlsZShzdHlsZUluRW1wdHlQYXJhZ3JhcGgtPnN0eWxlKCkp
OworCiAgICAgaWYgKHByZXNlcnZlU2VsZWN0aW9uICYmIHN0YXJ0SW5kZXggIT0gLTEpIHsKICAg
ICAgICAgLy8gRnJhZ21lbnQgY3JlYXRpb24gKHVzaW5nIGNyZWF0ZU1hcmt1cCkgaW5jb3JyZWN0
bHkgdXNlcyByZWd1bGFyCiAgICAgICAgIC8vIHNwYWNlcyBpbnN0ZWFkIG9mIG5ic3BzIGZvciBz
b21lIHNwYWNlcyB0aGF0IHdlcmUgcmVuZGVyZWQgKDExNDc1KSwgd2hpY2gKQEAgLTEwMDUsNyAr
MTAwNSw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXAKICAgICBp
ZiAoIWVtcHR5TGlzdEl0ZW0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBBcHBseVN0eWxlQ29tbWFuZDo6ZWRp
dGluZ1N0eWxlQXRQb3NpdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBJbmNsdWRlVHlw
aW5nU3R5bGUpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gZWRpdGluZ1N0eWxl
SW5jbHVkaW5nVHlwaW5nU3R5bGUoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CiAKICAgICBD
b250YWluZXJOb2RlKiBsaXN0Tm9kZSA9IGVtcHR5TGlzdEl0ZW0tPnBhcmVudE5vZGUoKTsKICAg
ICAvLyBGSVhNRTogQ2FuJ3Qgd2UgZG8gc29tZXRoaW5nIGJldHRlciB3aGVuIHRoZSBpbW1lZGlh
dGUgcGFyZW50IHdhc24ndCBhIGxpc3Qgbm9kZT8KQEAgLTEwNTQsMTAgKzEwNTQsMTAgQEAgYm9v
bCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcAogICAgIGFwcGVuZEJsb2NrUGxh
Y2Vob2xkZXIobmV3QmxvY2spOwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKFBvc2l0aW9uKG5ld0Jsb2NrLmdldCgpLCAwKSwgRE9XTlNUUkVBTSkpOwogCi0gICAgcHJl
cGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChzdHlsZS5nZXQoKSwgZW5kaW5nU2VsZWN0aW9uKCku
c3RhcnQoKSk7Ci0gICAgaWYgKHN0eWxlLT5sZW5ndGgoKSkKLSAgICAgICAgYXBwbHlTdHlsZShz
dHlsZS5nZXQoKSk7Ci0gICAgCisgICAgc3R5bGUtPnByZXBhcmVUb0FwcGx5QXQoZW5kaW5nU2Vs
ZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgaWYgKCFzdHlsZS0+aXNFbXB0eSgpKQorICAgICAgICBh
cHBseVN0eWxlKHN0eWxlLT5zdHlsZSgpKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3
MTM2MikKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjk0LDE0ICsyOTQsMTQgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpzYXZlVHlwaW5nUwogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGaWd1cmUgb3V0IHRo
ZSB0eXBpbmcgc3R5bGUgaW4gZWZmZWN0IGJlZm9yZSB0aGUgZGVsZXRlIGlzIGRvbmUuCi0gICAg
bV90eXBpbmdTdHlsZSA9IEFwcGx5U3R5bGVDb21tYW5kOjplZGl0aW5nU3R5bGVBdFBvc2l0aW9u
KHBvc2l0aW9uQmVmb3JlVGFiU3BhbihtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkpKTsKKyAg
ICBtX3R5cGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocG9zaXRpb25CZWZvcmVUYWJT
cGFuKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSkpOwogCi0gICAgcmVtb3ZlRW5jbG9zaW5n
QW5jaG9yU3R5bGUobV90eXBpbmdTdHlsZS5nZXQoKSwgbV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFy
dCgpKTsKKyAgICByZW1vdmVFbmNsb3NpbmdBbmNob3JTdHlsZShtX3R5cGluZ1N0eWxlLT5zdHls
ZSgpLCBtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkpOwogCiAgICAgLy8gSWYgd2UncmUgZGVs
ZXRpbmcgaW50byBhIE1haWwgYmxvY2txdW90ZSwgc2F2ZSB0aGUgc3R5bGUgYXQgZW5kKCkgaW5z
dGVhZCBvZiBzdGFydCgpCiAgICAgLy8gV2UnbGwgdXNlIHRoaXMgbGF0ZXIgaW4gY29tcHV0ZVR5
cGluZ1N0eWxlQWZ0ZXJEZWxldGUgaWYgd2UgZW5kIHVwIG91dHNpZGUgb2YgYSBNYWlsIGJsb2Nr
cXVvdGUKICAgICBpZiAobmVhcmVzdE1haWxCbG9ja3F1b3RlKG1fc2VsZWN0aW9uVG9EZWxldGUu
c3RhcnQoKS5ub2RlKCkpKQotICAgICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUgPSBB
cHBseVN0eWxlQ29tbWFuZDo6ZWRpdGluZ1N0eWxlQXRQb3NpdGlvbihtX3NlbGVjdGlvblRvRGVs
ZXRlLmVuZCgpKTsKKyAgICAgICAgbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlID0gRWRpdGlu
Z1N0eWxlOjpjcmVhdGUobV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKSk7CiAgICAgZWxzZQogICAg
ICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUgPSAwOwogfQpAQCAtNjkzLDggKzY5Myw4
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHkKICAgICAgICAgbV90
eXBpbmdTdHlsZSA9IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsKICAgICBtX2RlbGV0ZUlu
dG9CbG9ja3F1b3RlU3R5bGUgPSAwOwogCi0gICAgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlB
dChtX3R5cGluZ1N0eWxlLmdldCgpLCBtX2VuZGluZ1Bvc2l0aW9uKTsKLSAgICBpZiAoIW1fdHlw
aW5nU3R5bGUtPmxlbmd0aCgpKQorICAgIG1fdHlwaW5nU3R5bGUtPnByZXBhcmVUb0FwcGx5QXQo
bV9lbmRpbmdQb3NpdGlvbik7CisgICAgaWYgKG1fdHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkKICAg
ICAgICAgbV90eXBpbmdTdHlsZSA9IDA7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQo
bV9lbmRpbmdQb3NpdGlvbik7CiAgICAgaWYgKG1fdHlwaW5nU3R5bGUgJiYgCkBAIC03MDcsNyAr
NzA3LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxhdGVUeQogICAgICAg
ICAvLyB0aGVuIG1vdmUgaXQgYmFjayAod2hpY2ggd2lsbCBjbGVhciB0eXBpbmcgc3R5bGUpLgog
CiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbih2aXNpYmxlRW5kKTsKLSAgICAgICAgYXBwbHlT
dHlsZShtX3R5cGluZ1N0eWxlLmdldCgpLCBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOworICAgICAg
ICBhcHBseVN0eWxlKG1fdHlwaW5nU3R5bGUtPnN0eWxlKCksIEVkaXRBY3Rpb25VbnNwZWNpZmll
ZCk7CiAgICAgICAgIC8vIGFwcGx5U3R5bGUgY2FuIGRlc3Ryb3kgdGhlIHBsYWNlaG9sZGVyIHRo
YXQgd2FzIGF0IG1fZW5kaW5nUG9zaXRpb24gaWYgaXQgbmVlZHMgdG8gCiAgICAgICAgIC8vIG1v
dmUgaXQsIGJ1dCBpdCB3aWxsIHNldCBhbiBlbmRpbmdTZWxlY3Rpb24oKSBhdCBbbW92ZWRQbGFj
ZWhvbGRlciwgMF0gaWYgaXQgZG9lcyBzby4KICAgICAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IGVu
ZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDcxMzYyKQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEVkaXRpbmdTdHlsZTsKKwogY2xhc3MgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7IAogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ+IGNyZWF0ZShE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwgYm9vbCBtZXJnZUJs
b2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFsc2UsIGJvb2wgZXhwYW5k
Rm9yU3BlY2lhbEVsZW1lbnRzID0gZmFsc2UpCkBAIC04Niw4ICs4OCw4IEBAIHByaXZhdGU6CiAg
ICAgUG9zaXRpb24gbV90cmFpbGluZ1doaXRlc3BhY2U7CiAgICAgUmVmUHRyPE5vZGU+IG1fc3Rh
cnRCbG9jazsKICAgICBSZWZQdHI8Tm9kZT4gbV9lbmRCbG9jazsKLSAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fdHlwaW5nU3R5bGU7Ci0gICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGU7CisgICAgUmVm
UHRyPEVkaXRpbmdTdHlsZT4gbV90eXBpbmdTdHlsZTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxl
PiBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGU7CiAgICAgUmVmUHRyPE5vZGU+IG1fc3RhcnRS
b290OwogICAgIFJlZlB0cjxOb2RlPiBtX2VuZFJvb3Q7CiAgICAgUmVmUHRyPE5vZGU+IG1fc3Rh
cnRUYWJsZVJvdzsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJFZGl0aW5nU3R5bGUuaCIKKworI2luY2x1ZGUgIkFwcGx5U3R5bGVDb21tYW5kLmgi
CisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBlZGl0aW5nU3R5bGVGcm9tQ29tcHVlZFN0eWxlKENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gQXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZU5vbkVkaXRpbmdQcm9wZXJ0aWVzKHN0eWxlKTsKK30KKworRWRpdGluZ1N0
eWxlOjpFZGl0aW5nU3R5bGUoKQorICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6
ZShmYWxzZSkKK3sKK30KKworRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUoTm9kZSogbm9kZSkK
KyAgICA6IG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUoZmFsc2UpCit7CisgICAgaW5p
dChub2RlKTsKK30KKworRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUoY29uc3QgUG9zaXRpb24m
IHBvc2l0aW9uKQorICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShmYWxzZSkK
K3sKKyAgICBpbml0KHBvc2l0aW9uLm5vZGUoKSk7Cit9CisKK0VkaXRpbmdTdHlsZTo6RWRpdGlu
Z1N0eWxlKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorICAgIDogbV9tdXRhYmxl
U3R5bGUoc3R5bGUtPmNvcHkoKSkKKyAgICAsIG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNp
emUoZmFsc2UpCit7Cit9CisKK3ZvaWQgRWRpdGluZ1N0eWxlOjppbml0KE5vZGUqIG5vZGUpCit7
CisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZUF0
UG9zaXRpb24gPSBjb21wdXRlZFN0eWxlKG5vZGUpOworICAgIG1fbXV0YWJsZVN0eWxlID0gZWRp
dGluZ1N0eWxlRnJvbUNvbXB1ZWRTdHlsZShjb21wdXRlZFN0eWxlQXRQb3NpdGlvbi5nZXQoKSk7
CisKKyAgICBpZiAobm9kZSAmJiBub2RlLT5jb21wdXRlZFN0eWxlKCkpIHsKKyAgICAgICAgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZSgpOworICAgICAgICBy
ZW1vdmVUZXh0RmlsbEFuZFN0cm9sZUNvbG9yc0lmTmVlZGVkKHJlbmRlclN0eWxlKTsKKyAgICAg
ICAgcmVwbGFjZUZvbnRTaXplQnlLZXl3b3JkSWZQb3NzaWJsZShyZW5kZXJTdHlsZSwgY29tcHV0
ZWRTdHlsZUF0UG9zaXRpb24uZ2V0KCkpOworICAgIH0KKworICAgIG1fc2hvdWxkVXNlRml4ZWRE
ZWZhdWx0Rm9udFNpemUgPSBjb21wdXRlZFN0eWxlQXRQb3NpdGlvbi0+dXNlRml4ZWRGb250RGVm
YXVsdFNpemUoKTsKK30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVRleHRGaWxsQW5kU3Ry
b2xlQ29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKQoreworICAgIC8vIElm
IGEgbm9kZSdzIHRleHQgZmlsbCBjb2xvciBpcyBpbnZhbGlkLCB0aGVuIGl0cyBjaGlsZHJlbiB1
c2UgCisgICAgLy8gdGhlaXIgZm9udC1jb2xvciBhcyB0aGVpciB0ZXh0IGZpbGwgY29sb3IgKHRo
ZXkgZG9uJ3QKKyAgICAvLyBpbmhlcml0IGl0KS4gIExpa2V3aXNlIGZvciBzdHJva2UgY29sb3Iu
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKCFyZW5kZXJTdHlsZS0+dGV4dEZp
bGxDb2xvcigpLmlzVmFsaWQoKSkKKyAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3Bl
cnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvciwgZWMpOworICAgIGlmICghcmVuZGVy
U3R5bGUtPnRleHRTdHJva2VDb2xvcigpLmlzVmFsaWQoKSkKKyAgICAgICAgbV9tdXRhYmxlU3R5
bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBlYyk7
CisgICAgQVNTRVJUKCFlYyk7Cit9CisKK3ZvaWQgRWRpdGluZ1N0eWxlOjpyZXBsYWNlRm9udFNp
emVCeUtleXdvcmRJZlBvc3NpYmxlKFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSwgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uKiBjb21wdXRlZFN0eWxlKQoreworICAgIEFTU0VSVChyZW5kZXJT
dHlsZSk7CisgICAgaWYgKHJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6
ZSgpKQorICAgICAgICBtX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250
U2l6ZSwgY29tcHV0ZWRTdHlsZS0+Z2V0Rm9udFNpemVDU1NWYWx1ZVByZWZlcnJpbmdLZXl3b3Jk
KCktPmNzc1RleHQoKSk7Cit9CisKK2Jvb2wgRWRpdGluZ1N0eWxlOjppc0VtcHR5KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gIW1fbXV0YWJsZVN0eWxlIHx8IG1fbXV0YWJsZVN0eWxlLT5pc0VtcHR5
KCk7Cit9CisKK3ZvaWQgRWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQYXNzUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSkKK3sKKyAgICBtX211dGFibGVTdHlsZSA9IHN0eWxl
OworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWd1cmUgb3V0IHdoZXRoZXIg
b3Igbm90IGZvbnQgaXMgZml4ZWQgd2lkdGggZm9yIG11dGFibGUgc3R5bGUuCisgICAgLy8gV2Ug
bmVlZCB0byBjaGVjayBmb250LWZhbWlseSBpcyBtb25vc3BhY2UgYXMgaW4gRm9udERlc2NyaXB0
aW9uIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGR1cGxpY2F0ZSBjb2RlIGhlcmUuCisgICAgbV9zaG91
bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IGZhbHNlOworfQorCit2b2lkIEVkaXRpbmdTdHls
ZTo6Y2xlYXIoKQoreworICAgIG1fbXV0YWJsZVN0eWxlID0gMDsKKyAgICBtX3Nob3VsZFVzZUZp
eGVkRGVmYXVsdEZvbnRTaXplID0gZmFsc2U7Cit9CisKK3ZvaWQgRWRpdGluZ1N0eWxlOjpyZW1v
dmVCbG9ja1Byb3BlcnRpZXMoKQoreworICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsK
K30KKwordm9pZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29uc3QgUG9zaXRpb24m
IHBvc2l0aW9uKQoreworICAgIC8vIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHls
ZVNwYW5zKCkgcmVxdWlyZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgcmVtb3ZlcyB0aGUgZWRp
dGluZyBzdHlsZS4KKyAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIHdhcyBtb2RpZmllZCBpbiB0aGUg
ZnV0dXJlIHRvIGRlbGV0ZSBhbGwgcmVkdW5kYW50IHByb3BlcnRpZXMsIHRoZW4gYWRkIGEgYm9v
bGVhbiB2YWx1ZSB0byBpbmRpY2F0ZQorICAgIC8vIHdoaWNoIG9uZSBvZiBlZGl0aW5nU3R5bGVB
dFBvc2l0aW9uIG9yIGNvbXB1dGVkU3R5bGUgaXMgY2FsbGVkLgorICAgIFJlZlB0cjxFZGl0aW5n
U3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocG9zaXRpb24pOworICAgIHN0eWxl
LT5tX211dGFibGVTdHlsZS0+ZGlmZihtX211dGFibGVTdHlsZS5nZXQoKSk7CisKKyAgICAvLyBp
ZiBhbHBoYSB2YWx1ZSBpcyB6ZXJvLCB3ZSBkb24ndCBhZGQgdGhlIGJhY2tncm91bmQgY29sb3Iu
CisgICAgUmVmUHRyPENTU1ZhbHVlPiBiYWNrZ3JvdW5kQ29sb3IgPSBtX211dGFibGVTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CisgICAgaWYg
KGJhY2tncm91bmRDb2xvciAmJiBiYWNrZ3JvdW5kQ29sb3ItPmlzUHJpbWl0aXZlVmFsdWUoKQor
ICAgICAgICAmJiAhYWxwaGFDaGFubmVsKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
YmFja2dyb3VuZENvbG9yLmdldCgpKS0+Z2V0UkdCQTMyVmFsdWUoKSkpIHsKKyAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBlYyk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPEVk
aXRpbmdTdHlsZT4gZWRpdGluZ1N0eWxlSW5jbHVkaW5nVHlwaW5nU3R5bGUoY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uKQoreworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGVkdGluZ1N0eWxlID0g
RWRpdGluZ1N0eWxlOjpjcmVhdGUocG9zaXRpb24pOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gdHlwaW5nU3R5bGUgPSBwb3NpdGlvbi5ub2RlKCktPmRvY3VtZW50KCkt
PmZyYW1lKCktPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOworICAgIGlmICh0eXBpbmdTdHls
ZSkgeworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGluaGVyaXRh
YmxlVHlwaW5nU3R5bGUgPSB0eXBpbmdTdHlsZS0+Y29weSgpOworICAgICAgICBBcHBseVN0eWxl
Q29tbWFuZDo6cmVtb3ZlTm9uRWRpdGluZ1Byb3BlcnRpZXMoaW5oZXJpdGFibGVUeXBpbmdTdHls
ZS5nZXQoKSk7CisgICAgICAgIGVkdGluZ1N0eWxlLT5zdHlsZSgpLT5tZXJnZShpbmhlcml0YWJs
ZVR5cGluZ1N0eWxlLmdldCgpLCB0cnVlKTsKKyAgICB9CisgICAgcmV0dXJuIGVkdGluZ1N0eWxl
OworfQorICAgIAorfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgRWRpdGluZ1N0eWxlX2gKKyNkZWZpbmUgRWRpdGluZ1N0eWxlX2gKKworI2lu
Y2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJQb3NpdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb247
CisKK2NsYXNzIEVkaXRpbmdTdHlsZSA6IHB1YmxpYyBSZWZDb3VudGVkPEVkaXRpbmdTdHlsZT4g
eworcHVibGljOgorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0aW5nU3R5bGUoKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBjcmVhdGUoTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRWRpdGluZ1N0eWxlKG5v
ZGUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNyZWF0
ZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEVkaXRpbmdTdHlsZShwb3NpdGlvbikpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEVkaXRpbmdTdHlsZT4gY3JlYXRlKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0aW5nU3R5bGUoc3R5
bGUpKTsKKyAgICB9CisKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSB7
IHJldHVybiBtX211dGFibGVTdHlsZS5nZXQoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
OworICAgIHZvaWQgc2V0U3R5bGUoUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4pOworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygp
OworICAgIHZvaWQgcHJlcGFyZVRvQXBwbHlBdChjb25zdCBQb3NpdGlvbiYpOworCitwcml2YXRl
OgorICAgIEVkaXRpbmdTdHlsZSgpOworICAgIEVkaXRpbmdTdHlsZShOb2RlKik7CisgICAgRWRp
dGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJik7CisgICAgRWRpdGluZ1N0eWxlKGNvbnN0IENTU1N0
eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lkIGluaXQoTm9kZSopOworICAgIHZvaWQgcmVtb3Zl
VGV4dEZpbGxBbmRTdHJvbGVDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSopOworICAgIHZvaWQg
cmVwbGFjZUZvbnRTaXplQnlLZXl3b3JkSWZQb3NzaWJsZShSZW5kZXJTdHlsZSosIENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbiopOworCisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBtX211dGFibGVTdHlsZTsKKyAgICBib29sIG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0
Rm9udFNpemU7Cit9OworCitQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZWRpdGluZ1N0eWxlSW5j
bHVkaW5nVHlwaW5nU3R5bGUoY29uc3QgUG9zaXRpb24mKTsKKyAgICAKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVkaXRpbmdTdHlsZV9oCkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
cmV2aXNpb24gNzEzNjIpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTY0LDcgKzU2NCw4IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjp0ZXh0RGly
ZWN0aW9uRm8KICAgICB9CiAKICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzQ2FyZXQo
KSkgewotICAgICAgICBpZiAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHR5cGluZ1N0eWxl
ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCkpIHsKKyAgICAgICAgUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiB0eXBpbmdTdHlsZSA9IG1fZnJhbWUtPnNlbGVj
dGlvbigpLT50eXBpbmdTdHlsZSgpOworICAgICAgICBpZiAodHlwaW5nU3R5bGUpIHsKICAgICAg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGkgPSB0eXBpbmdTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsKICAgICAgICAgICAgIGlmICh1
bmljb2RlQmlkaSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCh1bmljb2RlQmlkaS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKTsKQEAgLTI5NTcsNyArMjk1OCw3IEBAIHZvaWQgRWRpdG9yOjpjb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUoQ1MKICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21t
YW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYmxvY2tTdHlsZS5nZXQoKSwgZWRpdGlu
Z0FjdGlvbikpOwogCiAgICAgLy8gU2V0IHRoZSByZW1haW5pbmcgc3R5bGUgYXMgdGhlIHR5cGlu
ZyBzdHlsZS4KLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0VHlwaW5nU3R5bGUobXV0YWJs
ZVN0eWxlLnJlbGVhc2UoKSk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldFR5cGluZ1N0
eWxlKEVkaXRpbmdTdHlsZTo6Y3JlYXRlKG11dGFibGVTdHlsZS5nZXQoKSkpOwogfQogCiBQYXNz
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBFZGl0b3I6OnNlbGVjdGlvbkNvbXB1
dGVkU3R5bGUoYm9vbCYgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCShyZXZpc2lvbiA3
MTM2MikKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY1LDE0ICsxNjUsMTQgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21t
YW5kOjpkb0FwcGx5KCkKIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBh
IHR5cGluZyBzdHlsZS4KICAgICAKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogdHlw
aW5nU3R5bGUgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUo
KTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHR5cGluZ1N0eWxlID0g
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCk7CiAgICAgCiAg
ICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGluZ1N0eWxlLT5sZW5ndGgoKSA+IDApIHsKICAgICAg
ICAgLy8gQXBwbHkgdGhlIHR5cGluZyBzdHlsZSB0byB0aGUgaW5zZXJ0ZWQgbGluZSBicmVhaywg
c28gdGhhdCBpZiB0aGUgc2VsZWN0aW9uCiAgICAgICAgIC8vIGxlYXZlcyBhbmQgdGhlbiBjb21l
cyBiYWNrLCBuZXcgaW5wdXQgd2lsbCBoYXZlIHRoZSByaWdodCBzdHlsZS4KICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBhbHdheXMgYXBwbHkgdGhlIHR5cGluZyBzdHlsZSB0byB0aGUg
bGluZSBicmVhayBoZXJlLAogICAgICAgICAvLyBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU3OTQ0NjI+
LgotICAgICAgICBhcHBseVN0eWxlKHR5cGluZ1N0eWxlLCBmaXJzdERlZXBFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKG5vZGVUb0luc2VydC5nZXQoKSksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpKTsKKyAgICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHls
ZS5nZXQoKSwgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlVG9JbnNlcnQuZ2V0
KCkpLCBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSk7
CiAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHRoaXMgYXBwbHlTdHlsZSBvcGVyYXRlcyBvbiBhIFJh
bmdlLCBpdCBzdGlsbCBzZXRzIGFuIGVuZGluZ1NlbGVjdGlvbigpLgogICAgICAgICAvLyBJdCB0
cmllcyB0byBzZXQgYSBWaXNpYmxlU2VsZWN0aW9uIGFyb3VuZCB0aGUgY29udGVudCBpdCBvcGVy
YXRlZCBvbi4gU28sIHRoYXQgVmlzaWJsZVNlbGVjdGlvbgogICAgICAgICAvLyB3aWxsIGVpdGhl
ciAoYSkgc2VsZWN0IHRoZSBsaW5lIGJyZWFrIHdlIGluc2VydGVkLCBvciBpdCB3aWxsIChiKSBi
ZSBhIGNhcmV0IGp1c3QgCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAJ
KHJldmlzaW9uIDcxMzYyKQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1h
bmQ6OmlucHV0KGNvbnN0IFN0cmkKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZm9yY2VkRW5kaW5n
U2VsZWN0aW9uKTsKIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHR5
cGluZyBzdHlsZS4KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogdHlwaW5nU3R5bGUg
PSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKKyAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHR5cGluZ1N0eWxlID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCk7CiAgICAgUmVmUHRyPENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gZW5kaW5nU3R5bGUgPSBlbmRQb3NpdGlvbi5jb21wdXRl
ZFN0eWxlKCk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlQmlkaTsKICAgICBSZWZQdHI8
Q1NTVmFsdWU+IGRpcmVjdGlvbjsKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIEluc2VydFRleHRD
b21tYW5kOjppbnB1dChjb25zdCBTdHJpCiAgICAgICAgIHVuaWNvZGVCaWRpID0gdHlwaW5nU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7CiAgICAgICAg
IGRpcmVjdGlvbiA9IHR5cGluZ1N0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
RGlyZWN0aW9uKTsKICAgICB9Ci0gICAgZW5kaW5nU3R5bGUtPmRpZmYodHlwaW5nU3R5bGUpOwor
ICAgIGVuZGluZ1N0eWxlLT5kaWZmKHR5cGluZ1N0eWxlLmdldCgpKTsKICAgICBpZiAodHlwaW5n
U3R5bGUgJiYgdW5pY29kZUJpZGkpIHsKICAgICAgICAgQVNTRVJUKHVuaWNvZGVCaWRpLT5pc1By
aW1pdGl2ZVZhbHVlKCkpOwogICAgICAgICB0eXBpbmdTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlVbmljb2RlQmlkaSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih1bmljb2Rl
QmlkaS5nZXQoKSktPmdldElkZW50KCkpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgSW5zZXJ0
VGV4dENvbW1hbmQ6OmlucHV0KGNvbnN0IFN0cmkKICAgICB9CiAKICAgICBpZiAodHlwaW5nU3R5
bGUgJiYgdHlwaW5nU3R5bGUtPmxlbmd0aCgpKQotICAgICAgICBhcHBseVN0eWxlKHR5cGluZ1N0
eWxlKTsKKyAgICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHlsZS5nZXQoKSk7CiAKICAgICBpZiAo
IXNlbGVjdEluc2VydGVkVGV4dCkKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIGVuZGluZ1NlbGVjdGlvbigpLmFmZmlu
aXR5KCkpKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNp
b24gNzEzNjIpCisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFNlbGVjdGlvbkNvbnRyb2xsZXJf
aAogI2RlZmluZSBTZWxlY3Rpb25Db250cm9sbGVyX2gKIAotI2luY2x1ZGUgIkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3Iu
aCIKQEAgLTM3LDYgKzM3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7
CitjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKIGNsYXNzIFJlbmRlck9iamVjdDsKQEAgLTE2MCw3
ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludERyYWdDYXJldChHcmFwaGljc0NvbnRl
eHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpIGNvbnN0OwogCiAg
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHR5cGluZ1N0eWxlKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRUeXBpbmdTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Pik7CisgICAgdm9pZCBzZXRUeXBpbmdTdHlsZShQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4pOwog
ICAgIHZvaWQgY2xlYXJUeXBpbmdTdHlsZSgpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyhib29s
IGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CkBAIC0yMTQsNyArMjE1LDcgQEAg
cHJpdmF0ZToKICAgICBWaXNpYmxlU2VsZWN0aW9uIG1fc2VsZWN0aW9uOwogICAgIFRleHRHcmFu
dWxhcml0eSBtX2dyYW51bGFyaXR5OwogCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBtX3R5cGluZ1N0eWxlOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG1fdHlwaW5n
U3R5bGU7CiAKICAgICBUaW1lcjxTZWxlY3Rpb25Db250cm9sbGVyPiBtX2NhcmV0QmxpbmtUaW1l
cjsKIApAQCAtMjM0LDE1ICsyMzUsMTUgQEAgcHJpdmF0ZToKIAogaW5saW5lIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBTZWxlY3Rpb25Db250cm9sbGVyOjp0eXBpbmdTdHlsZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fdHlwaW5nU3R5bGUuZ2V0KCk7CisgICAgcmV0dXJuIG1fdHlwaW5n
U3R5bGUgPyBtX3R5cGluZ1N0eWxlLT5zdHlsZSgpIDogMDsKIH0KIAogaW5saW5lIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXJUeXBpbmdTdHlsZSgpCiB7Ci0gICAgbV90eXBpbmdTdHls
ZS5jbGVhcigpOworICAgIG1fdHlwaW5nU3R5bGUgPSAwOwogfQogCi1pbmxpbmUgdm9pZCBTZWxl
Y3Rpb25Db250cm9sbGVyOjpzZXRUeXBpbmdTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSkKK2lubGluZSB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNl
dFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSkKIHsKICAgICBtX3R5
cGluZ1N0eWxlID0gc3R5bGU7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmgJKHJldmlzaW9uIDcxMzYyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxSZW5kZXJTdHlsZT4sIDQ+IFAKIGNsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVm
Q291bnRlZDxSZW5kZXJTdHlsZT4gewogICAgIGZyaWVuZCBjbGFzcyBBbmltYXRpb25CYXNlOyAv
LyBVc2VkIGJ5IENTUyBhbmltYXRpb25zLiBXZSBjYW4ndCBhbGxvdyB0aGVtIHRvIGFuaW1hdGUg
YmFzZWQgb2ZmIHZpc2l0ZWQgY29sb3JzLgogICAgIGZyaWVuZCBjbGFzcyBBcHBseVN0eWxlQ29t
bWFuZDsgLy8gRWRpdGluZyBoYXMgdG8gb25seSByZXZlYWwgdW52aXNpdGVkIGluZm8uCisgICAg
ZnJpZW5kIGNsYXNzIEVkaXRpbmdTdHlsZTsgLy8gRWRpdGluZyBoYXMgdG8gb25seSByZXZlYWwg
dW52aXNpdGVkIGluZm8uCiAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2VsZWN0b3I7IC8vIFNl
dHMgbWVtYmVycyBkaXJlY3RseS4KICAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOyAvLyBJZ25vcmVzIHZpc2l0ZWQgc3R5bGVzLCBzbyBuZWVkcyB0byBiZSBhYmxl
IHRvIHNlZSB1bnZpc2l0ZWQgaW5mby4KICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlXcmFwcGVy
TWF5YmVJbnZhbGlkQ29sb3I7IC8vIFVzZWQgYnkgQ1NTIGFuaW1hdGlvbnMuIFdlIGNhbid0IGFs
bG93IHRoZW0gdG8gYW5pbWF0ZSBiYXNlZCBvZmYgdmlzaXRlZCBjb2xvcnMuCg==
</data>
<flag name="review"
          id="63376"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>