<?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>23522</bug_id>
          
          <creation_ts>2009-01-24 14:07:57 -0800</creation_ts>
          <short_desc>Use checked casts for render tree</short_desc>
          <delta_ts>2009-08-05 16:23:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>emacemac7</cc>
    
    <cc>hyatt</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106880</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-24 14:07:57 -0800</bug_when>
    <thetext>We have a checked cast for RenderBox now, but we want to do that for other render tree types too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106881</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-24 14:08:55 -0800</bug_when>
    <thetext>Here are stats on how much static_cast is used:

  73 RenderText
  44 RenderBlock
  28 RenderImage
  27 RenderView
  26 RenderTextControl
  24 RenderTableSection
  24 RenderTableCell
  21 RenderWidget
  17 RenderFlow
  11 RenderScrollbar
  10 RenderListItem
   9 RenderTable
   8 RenderSlider
   8 RenderListBox
   7 RenderTextControlSingleLine
   5 RenderTableRow
   5 RenderMenuList
   5 RenderListMarker
   4 RenderTableCol
   4 RenderFrameSet
   4 RenderFileUploadControl
   3 RenderSVGContainer
   3 RenderPartObject
   3 RenderInline
   3 RenderBox
   2 RenderPart
   2 RenderObject
   2 RenderMedia
   2 RenderArenaDebugHeader
   1 RenderVideo
   1 RenderTextControlMultiLine
   1 RenderSVGViewportContainer
   1 RenderSVGTextPath
   1 RenderSVGText
   1 RenderSVGRoot
   1 RenderSVGImage
   1 RenderMediaControlShadowRoot
   1 RenderHTMLCanvas
   1 RenderFrame
   1 RenderFieldset
   1 RenderCounter
   1 RenderContainer
   1 RenderButton
   1 RenderApplet

I used this line to compute that:

    grep-r &apos;static_cast *&lt; *Render\w* *\* *&gt;&apos; .h .cpp .mm | perl -pe &apos;s/^.*static_cast *&lt; *(Render\w+).*$/\1/&apos; | sort | uniq -c | sort -r

Where grep-r is a script I use to search source tree that uses perl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106905</commentid>
    <comment_count>2</comment_count>
      <attachid>27007</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-24 22:50:35 -0800</bug_when>
    <thetext>Created attachment 27007
step 1 -- RenderText</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106959</commentid>
    <comment_count>3</comment_count>
      <attachid>27007</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-25 12:24:37 -0800</bug_when>
    <thetext>Comment on attachment 27007
step 1 -- RenderText

Landed as trac.webkit.org/changeset/40229 so clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107036</commentid>
    <comment_count>4</comment_count>
      <attachid>27036</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-26 09:30:06 -0800</bug_when>
    <thetext>Created attachment 27036
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107759</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-30 13:36:02 -0800</bug_when>
    <thetext>Hyatt and Sam are both working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134699</commentid>
    <comment_count>6</comment_count>
      <attachid>33481</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-24 18:02:46 -0700</bug_when>
    <thetext>Created attachment 33481
Some other work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135639</commentid>
    <comment_count>7</comment_count>
      <attachid>33729</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-29 12:06:56 -0700</bug_when>
    <thetext>Created attachment 33729
Next step: Includes toRenderWidget</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135789</commentid>
    <comment_count>8</comment_count>
      <attachid>33729</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-29 23:56:01 -0700</bug_when>
    <thetext>Comment on attachment 33729
Next step: Includes toRenderWidget

Verified that it is equivalent (with the added bonus of error checking).

I wish there was a way to give compile errors for instances of &quot;static_cast&lt;RenderWidget*&gt;()&quot; to prevent it from being added again (automatically), but I couldn&apos;t think of any way to do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135790</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-30 00:03:47 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I wish there was a way to give compile errors for instances of
&gt; &quot;static_cast&lt;RenderWidget*&gt;()&quot; to prevent it from being added again
&gt; (automatically), but I couldn&apos;t think of any way to do this.

I wonder if we can provide a specialized template for that with a COMPILE_ASSERT(false) in it.  Not sure if that works with static_cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135972</commentid>
    <comment_count>10</comment_count>
      <attachid>33729</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-30 13:19:18 -0700</bug_when>
    <thetext>Comment on attachment 33729
Next step: Includes toRenderWidget

Landed, clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135973</commentid>
    <comment_count>11</comment_count>
      <attachid>33821</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-30 13:20:25 -0700</bug_when>
    <thetext>Created attachment 33821
Next step: Includes toRenderTable*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136072</commentid>
    <comment_count>12</comment_count>
      <attachid>33821</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-30 17:41:41 -0700</bug_when>
    <thetext>Comment on attachment 33821
Next step: Includes toRenderTable*


&gt; Index: WebCore/page/Frame.cpp
&gt; ===================================================================
&gt;      if (cellRenderer &amp;&amp; cellRenderer-&gt;isTableCell()) {
&gt; -        RenderTableCell* cellAboveRenderer = cellRenderer-&gt;table()-&gt;cellAbove(cellRenderer);
&gt; +        RenderTableCell* cellAboveRenderer = toRenderTableCell(cellRenderer)-&gt;table()-&gt;cellAbove(toRenderTableCell(cellRenderer));

Although it is no runtime expense, it is harder to read with two &quot;toRenderTableCell(cellRenderer)&quot; in the same line.

Consider a local variable to avoid this.  For example,
        RenderTableCell* tableCell = toRenderTableCell(cellRenderer);
        RenderTableCell* cellAboveRenderer = tableCell-&gt;table()-&gt;cellAbove(tableCell);


&gt; Index: WebCore/page/mac/FrameMac.mm
&gt; ===================================================================
&gt;      if (cellRenderer &amp;&amp; cellRenderer-&gt;isTableCell()) {
&gt; -        RenderTableCell* cellAboveRenderer = cellRenderer-&gt;table()-&gt;cellAbove(cellRenderer);
&gt; +        RenderTableCell* cellAboveRenderer = toRenderTableCell(cellRenderer)-&gt;table()-&gt;cellAbove(toRenderTableCell(cellRenderer));

Same comment as before &quot;It is harder to read with two &quot;toRenderTableCell(cellRenderer)&quot; in the same line....&quot;


&gt; Index: WebCore/rendering/RenderTable.cpp
&gt; ===================================================================

47	RenderTable::RenderTable(Node* node)
...
53	    , m_tableLayout(0)

This initialization may be deleted now.


&gt; Index: WebCore/rendering/RenderTable.h
&gt; ===================================================================
&gt; +    virtual void paintMask(PaintInfo&amp; paintInfo, int tx, int ty);

&quot;paintInfo&quot; param name is redundant.  (It existed before due to the move it looks like a new line so it is a good time to remove this.)

&gt; +inline RenderTable* toRenderTable(RenderObject* o)
&gt; +inline const RenderTable* toRenderTable(const RenderObject* o)

Consider using renderObject instead of o (so that we have full words for the variable names).


&gt; Index: WebCore/rendering/RenderTableCell.h
&gt; ===================================================================
&gt; +inline RenderTableCell* toRenderTableCell(RenderObject* o)
&gt; +inline const RenderTableCell* toRenderTableCell(const RenderObject* o)

Consider using renderObject instead of o.


&gt; Index: WebCore/rendering/RenderTableCol.h
&gt; ===================================================================
&gt; +    void setSpan(int s) { m_span = s; }

Consider using span instead of s.


&gt; +inline RenderTableCol* toRenderTableCol(RenderObject* o)
&gt; +inline const RenderTableCol* toRenderTableCol(const RenderObject* o)

Consider using renderObject instead of o.



&gt; Index: WebCore/rendering/RenderTableRow.h
&gt; ===================================================================

&gt; +inline RenderTableRow* toRenderTableRow(RenderObject* o)
&gt; +inline const RenderTableRow* toRenderTableRow(const RenderObject* o)

Consider using renderObject instead of o.



&gt; Index: WebCore/rendering/RenderTableSection.h
&gt; ===================================================================
&gt; +inline RenderTableSection* toRenderTableSection(RenderObject* o)
&gt; +inline const RenderTableSection* toRenderTableSection(const RenderObject* o)

Consider using renderObject instead of o.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136089</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-30 18:54:14 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; +inline RenderTableSection* toRenderTableSection(RenderObject* o)
&gt; &gt; +inline const RenderTableSection* toRenderTableSection(const RenderObject* o)
&gt; 
&gt; Consider using renderObject instead of o.

I think I&apos;ll just use &quot;object&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136321</commentid>
    <comment_count>14</comment_count>
      <attachid>33821</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-31 17:52:35 -0700</bug_when>
    <thetext>Comment on attachment 33821
Next step: Includes toRenderTable*

Clearing review flag since this was landed in http://trac.webkit.org/changeset/46647</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137164</commentid>
    <comment_count>15</comment_count>
      <attachid>34094</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-04 15:54:11 -0700</bug_when>
    <thetext>Created attachment 34094
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137282</commentid>
    <comment_count>16</comment_count>
      <attachid>34094</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-05 02:55:48 -0700</bug_when>
    <thetext>Comment on attachment 34094
patch

Some things to consider changing on landing.  The biggest concern is the changes in writeSVGText and writeSVGImage where the code doesn&apos;t appear to do the same thing as before (missing &quot;\n&quot;).


&gt; Index: WebCore/rendering/RenderFrameSet.h
&gt; +    virtual void paint(PaintInfo&amp; paintInfo, int tx, int ty);

Please remove &quot;paintInfo&quot;.



&gt; Index: WebCore/rendering/RenderInline.h
&gt;  class RenderInline : public RenderBoxModelObject {
&gt;  public:
...
&gt; +    void paintOutline(GraphicsContext*, int tx, int ty);
&gt; +
&gt; +public:

Is this suppose to be protected: instead of public: ?

&gt; +    int verticalPositionFromCache(bool firstLine) const;
&gt; +    void invalidateVerticalPosition() { m_verticalPosition = PositionUndefined; }


&gt; Index: WebCore/rendering/RenderMenuList.h
&gt;  class RenderMenuList : public RenderFlexibleBox, private PopupMenuClient {
&gt;  public:
&gt;      RenderMenuList(Element*);
&gt; -    ~RenderMenuList();
&gt; +    virtual~RenderMenuList();

Missing space after virtual.


&gt; Index: WebCore/rendering/RenderPartObject.h
&gt; +inline RenderPartObject* toRenderPartObject(RenderObject* object)
&gt; +{
&gt; +    ASSERT(!object || (object-&gt;isRenderPart() &amp;&amp; !object-&gt;isFrame()));

Why not use !strmp(object-&gt;renderName,&quot;RenderPartObject&quot;) as that doesn&apos;t rely on the current object hierarchy?

I guess if RenderPartObject isn&apos;t a leaf in the hierarchy, that would make sense but I didn&apos;t see any derived classes (in my cursory search).



&gt; Index: WebCore/rendering/RenderScrollbar.cpp

&gt; +        case NoPart:
&gt; +        case ScrollbarBGPart:
&gt; +        case AllParts:
&gt; +            break;

If this break was &quot;return SCROLLBAR;&quot;, there could be an ASSERT_NOT_REACHED below to check against bad values being passed in at runtime.

&gt;      }
&gt; +    return SCROLLBAR;


&gt; Index: WebCore/rendering/SVGRenderTreeAsText.cpp

Add 2009 to Apple copyright?

&gt; @@ -36,7 +36,7 @@
&gt;  #include &quot;NodeRenderStyle.h&quot;
&gt;  #include &quot;RenderPath.h&quot;
&gt;  #include &quot;RenderSVGContainer.h&quot;
&gt; -#include &quot;RenderSVGImage.h&quot;
&gt; +#include &quot;RenderImage.h&quot;

This include is out of place now (sort it).

&gt; +void writeSVGText(TextStream&amp; ts, const RenderBlock&amp; text, int indent)
&gt;  {
&gt;      writeStandardPrefix(ts, text, indent);
&gt; -    ts &lt;&lt; text &lt;&lt; &quot;\n&quot;;
&gt; +    writeRenderSVGTextBox(ts, text);

It looks like this line should be added here:
    ts &lt;&lt; &quot;\n&quot;;
to be equivalent to the previous code.

&gt;      writeChildren(ts, text, indent);
&gt;  }

&gt; +void writeSVGImage(TextStream&amp; ts, const RenderImage&amp; image, int indent)
&gt;  {
&gt;      writeStandardPrefix(ts, image, indent);
&gt; -    ts &lt;&lt; image &lt;&lt; &quot;\n&quot;;
&gt; +    writePositionAndStyle(ts, image);

It looks like this line should be added here:
    ts &lt;&lt; &quot;\n&quot;;
to be equivalent to the previous code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137313</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-05 09:07:39 -0700</bug_when>
    <thetext>I&apos;ll make sure to run the regression tests before landing. Those &quot;\n&quot; omissions make it pretty clear I didn&apos;t before posting the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137336</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-05 10:35:07 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; +    virtual void paint(PaintInfo&amp; paintInfo, int tx, int ty);
&gt; 
&gt; Please remove &quot;paintInfo&quot;.

Done.

&gt; &gt;  class RenderInline : public RenderBoxModelObject {
&gt; &gt;  public:
&gt; ...
&gt; &gt; +    void paintOutline(GraphicsContext*, int tx, int ty);
&gt; &gt; +
&gt; &gt; +public:
&gt; 
&gt; Is this suppose to be protected: instead of public: ?

No, apparently those need to be public. I removed the extra public: I left in by accident.

&gt; &gt;  class RenderMenuList : public RenderFlexibleBox, private PopupMenuClient {
&gt; &gt;  public:
&gt; &gt;      RenderMenuList(Element*);
&gt; &gt; -    ~RenderMenuList();
&gt; &gt; +    virtual~RenderMenuList();
&gt; 
&gt; Missing space after virtual.

&gt; &gt; Index: WebCore/rendering/RenderPartObject.h
&gt; &gt; +inline RenderPartObject* toRenderPartObject(RenderObject* object)
&gt; &gt; +{
&gt; &gt; +    ASSERT(!object || (object-&gt;isRenderPart() &amp;&amp; !object-&gt;isFrame()));
&gt; 
&gt; Why not use !strmp(object-&gt;renderName,&quot;RenderPartObject&quot;) as that doesn&apos;t rely
&gt; on the current object hierarchy?
&gt; 
&gt; I guess if RenderPartObject isn&apos;t a leaf in the hierarchy, that would make
&gt; sense but I didn&apos;t see any derived classes (in my cursory search).

I thought it wasn&apos;t a leaf. But I guess that was wrong. Changed to use strcmp as you suggest.

&gt; &gt; +        case NoPart:
&gt; &gt; +        case ScrollbarBGPart:
&gt; &gt; +        case AllParts:
&gt; &gt; +            break;
&gt; 
&gt; If this break was &quot;return SCROLLBAR;&quot;, there could be an ASSERT_NOT_REACHED
&gt; below to check against bad values being passed in at runtime.

I did that. But NoPart and AllParts also need ASSERT_NOT_REACHED, so I left those as break. I&apos;m not even really sure about ScrollbarBGPart, but for now I had it return SCROLLBAR without an assertion.

&gt; &gt; Index: WebCore/rendering/SVGRenderTreeAsText.cpp
&gt; 
&gt; Add 2009 to Apple copyright?

Done.

&gt; &gt; @@ -36,7 +36,7 @@
&gt; &gt;  #include &quot;NodeRenderStyle.h&quot;
&gt; &gt;  #include &quot;RenderPath.h&quot;
&gt; &gt;  #include &quot;RenderSVGContainer.h&quot;
&gt; &gt; -#include &quot;RenderSVGImage.h&quot;
&gt; &gt; +#include &quot;RenderImage.h&quot;
&gt; 
&gt; This include is out of place now (sort it).

Done.

&gt; &gt;      writeStandardPrefix(ts, text, indent);
&gt; &gt; -    ts &lt;&lt; text &lt;&lt; &quot;\n&quot;;
&gt; &gt; +    writeRenderSVGTextBox(ts, text);
&gt; 
&gt; It looks like this line should be added here:
&gt;     ts &lt;&lt; &quot;\n&quot;;
&gt; to be equivalent to the previous code.

Yes. Done.

&gt; &gt; +void writeSVGImage(TextStream&amp; ts, const RenderImage&amp; image, int indent)
&gt; &gt;  {
&gt; &gt;      writeStandardPrefix(ts, image, indent);
&gt; &gt; -    ts &lt;&lt; image &lt;&lt; &quot;\n&quot;;
&gt; &gt; +    writePositionAndStyle(ts, image);
&gt; 
&gt; It looks like this line should be added here:
&gt;     ts &lt;&lt; &quot;\n&quot;;
&gt; to be equivalent to the previous code.

Done.

Running regression tests now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137476</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-05 16:23:20 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/46815</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27007</attachid>
            <date>2009-01-24 22:50:35 -0800</date>
            <delta_ts>2009-01-25 12:26:13 -0800</delta_ts>
            <desc>step 1 -- RenderText</desc>
            <filename>RenderTextCastPatch.txt</filename>
            <type>text/plain</type>
            <size>84578</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDIyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTU3IEBACisyMDA5LTAxLTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcg
MjM1MjI6IHVzZSBjaGVja2VkIGNhc3RzIGZvciByZW5kZXIgdHJlZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjIKKworICAgICAgICBTdGVwIG9u
ZTogUmVuZGVyVGV4dC4KKworICAgICAgICBBbHNvIGNoYW5nZSBzZXQgb2YgUmVuZGVyRmxvdyog
dG8gYmUgYSBMaXN0SGFzaFNldCBhcyB0aGUgY29tbWVudCBpbiB0aGUKKyAgICAgICAgaGVhZGVy
IGluZGljYXRlZC4KKworICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGEpOiBVc2UgdG9SZW5kZXJUZXh0LgorICAg
ICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Q2hhcmFjdGVyRGF0YTo6cmVwbGFjZURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpnZXRV
cHBlckxlZnRDb3JuZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6
OmdldExvd2VyUmlnaHRDb3JuZXIpOiBEaXR0by4KKyAgICAgICAgKiBkb20vUG9zaXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bmV4dFJlbmRlcmVkRWRpdGFibGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OnByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OnJlbmRlcmVkT2Zmc2V0KTogRGl0dG8uIEFsc28gdXNlIGZ1bmN0
aW9uIG1lbWJlcnMKKyAgICAgICAgaW5zdGVhZCBvZiBkYXRhIG1lbWJlcnMgb2YgSW5saW5lVGV4
dEJveC4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjp1cHN0cmVhbSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmRvd25zdHJlYW0pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhl
aWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmluUmVuZGVyZWRUZXh0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6aXNSZW5kZXJlZENoYXJhY3Rl
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2VhcmNoQWhlYWRGb3JCZXR0ZXJNYXRjaCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNl
dCk6IERpdHRvLgorCisgICAgICAgICogZG9tL1JhbmdlLmNwcDogQWRkZWQgaW5jbHVkZSBvZiBW
aXNpYmxlUG9zaXRpb24uaCBub3cgdGhhdCBpdCdzIG5vIGxvbmdlcgorICAgICAgICBpbmNsdWRl
ZCBpbiBSZW5kZXJPYmplY3QuaC4KKworICAgICAgICAqIGRvbS9UZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHQ6OnNwbGl0VGV4dCk6IFVzZSB0b1JlbmRlclRleHQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0OjpyZWNhbGNTdHlsZSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENv
bW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KTogRGl0dG8uCisgICAgICAgICogZWRpdGlu
Zy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNv
bnRyb2xsZXI6OmRlYnVnUmVuZGVyZXIpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRO
b2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRC
b3gpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6ZW1pdFRleHQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6
OmhhbmRsZVRleHROb2RlKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5jcHA6IEFkZGVkIGluY2x1ZGUgb2YgRmxvYXRRdWFkLmggbm93IHRoYXQgaXQncworICAg
ICAgICBubyBsb25nZXIgaW5jbHVkZWQgaW4gUmVuZGVyT2JqZWN0LmguCisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL0Zy
YW1lLmNwcDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6IERpdHRv
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOiBEaXR0by4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHA6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTVkdDb250YWluZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHSW1hZ2UuY3BwOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHA6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5jcHA6
IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcDogRGl0dG8uCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmNwcDogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6IERpdHRvLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcDogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVf
dW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRQb3NpdGlvbkZvckxpbmUpOiBVc2Ug
ZnVuY3Rpb24gbWVtYmVycyBpbnN0ZWFkIG9mIGRhdGEKKyAgICAgICAgbWVtYmVycyBvZiBJbmxp
bmVUZXh0Qm94LgorICAgICAgICAoV2ViQ29yZTo6ZW5kUG9zaXRpb25Gb3JMaW5lKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpzdGFydE9mUGFyYWdyYXBoKTogVXNlIHRvUmVuZGVyVGV4dC4K
KyAgICAgICAgKFdlYkNvcmU6OmVuZE9mUGFyYWdyYXBoKTogRGl0dG8uCisKKyAgICAgICAgKiBw
YWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6IFVzZSB0b1Jl
bmRlclRleHQuCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0hvcml6b250YWxseSk6IERpdHRv
LgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OmRlbGV0ZUxpbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6OmV4dHJhY3RMaW5lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVUZXh0Qm94OjphdHRhY2hMaW5lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpwbGFjZUVsbGlwc2lzQm94KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCk6IERpdHRv
LgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDogTWFkZSBtb3N0IG1lbWJl
cnMgcHJpdmF0ZS4gVXNlIHRvUmVuZGVyVGV4dC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJBcmVuYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJBcmVuYTo6YWxsb2NhdGUpOiBV
c2Ugc3RhdGljX2Nhc3QgaW5zdGVhZCBvZiBDLXN0eWxlIGNhc3QuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJBcmVuYTo6ZnJlZSk6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDb250aW51YXRp
b25XaXRoT3V0bGluZSk6IFVzZSBMaXN0SGFzaFNldDxSZW5kZXJGbG93Kj4KKyAgICAgICAgaW5z
dGVhZCBvZiBSZW5kZXJGbG93U2VxdWVuY2VkU2V0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnBhaW50Q29udGludWF0aW9uT3V0bGluZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OnN0cmlwVHJhaWxpbmdTcGFjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIpOiBEaXR0by4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFp
bmVyOjphZGRDaGlsZCk6IFVzZSB0b1JlbmRlclRleHQuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93OjpkaXJ0eUxpbmVz
RnJvbUNoYW5nZWRDaGlsZCk6IFVzZSBMaXN0SGFzaFNldDxSZW5kZXJGbG93Kj4KKyAgICAgICAg
aW5zdGVhZCBvZiBSZW5kZXJGbG93U2VxdWVuY2VkU2V0LgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvdzo6cGFpbnRMaW5lcyk6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcDogUmVtb3ZlZCBzb21lIHVubmVlZGVkIGluY2x1ZGVzLgorCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0Lmg6IEFkZGVkIG5vdy1uZWVkZWQgZm9yd2FyZCBk
ZWNsYXJhdGlvbiBvZiBSZW5kZXJUZXh0LgorICAgICAgICBNYWRlIG1vcmUgbWVtYmVycyBwcml2
YXRlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6IFVwZGF0ZWQgaW5j
bHVkZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzRWRpdGFibGUpOiBVc2Ug
dG9SZW5kZXJUZXh0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpwb3NpdGlvbkZv
clBvaW50KTogTWFkZSBub24taW5saW5lIHNvIHdlIHdvdWxkbid0IGhhdmUgdG8KKyAgICAgICAg
aW5jbHVkZSBWaXNpYmxlUG9zaXRpb24uaCBpbiB0aGUgaGVhZGVyIGp1c3QgZm9yIHRoaXMuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6IFJlbW92ZWQgdW5uZWVkZWQgaW5j
bHVkZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25zLgorICAgICAgICBDaGFuZ2VkIHNwZWNpYWwg
dmVydGljYWwgcG9zaXRpb24gdmFsdWVzIHRvIGJlIGNvbnN0YW50cyByYXRoZXIgdGhhbiBhbiBl
bnVtLgorICAgICAgICBFbGltaW5hdGVkIFJlbmRlckZsb3dTZXF1ZW5jZWRTZXQsIGFuZCBjaGFu
Z2VkIGNsaWVudHMgdG8gdXNlIExpc3RIYXNoU2V0PFJlbmRlckZsb3cqPi4KKworICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6
OmZpbmROZXh0SW5saW5lVGV4dEJveCk6IFVzZSBmdW5jdGlvbiBtZW1iZXJzIGluc3RlYWQgb2YK
KyAgICAgICAgZGF0YSBtZW1iZXJzIG9mIElubGluZVRleHRCb3guCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjppc0lubGluZUZsb3dPckVtcHR5VGV4dCk6IFVzZSB0b1JlbmRlclRleHQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpwcmV2aW91c0NoYXJhY3Rlcik6IFVzZSBmdW5jdGlv
biBtZW1iZXJzIGluc3RlYWQgb2YKKyAgICAgICAgZGF0YSBtZW1iZXJzIG9mIElubGluZVRleHRC
b3guCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpwb3NpdGlvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y2FyZXRNaW5PZmZzZXQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNhcmV0TWF4T2Zmc2V0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0OjpjYXJldE1heFJlbmRlcmVkT2Zmc2V0KTogRGl0dG8uCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOiBBZGRlZCBkZWZpbml0aW9uIG9mIHRv
UmVuZGVyVGV4dC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6dGV4dFdpdGhIYXJkTGluZUJy
ZWFrcyk6IFVzZSB0b1JlbmRlclRleHQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IFVzZSB0b1JlbmRlclRl
eHQgYW5kIHRvUmVuZGVyQm94LgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUZXh0UnVuKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6IERpdHRvLgorCisgICAgICAgICogcmVuZGVy
aW5nL2JpZGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OmluY3JlbWVu
dCk6IFVzZSB0b1JlbmRlclRleHQuCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVyYXRvcjo6
Y3VycmVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tNaWRwb2ludHMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlSG9yaXpvbnRhbFBvc2l0
aW9uc0ZvckxpbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlv
dXRJbmxpbmVDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKTogRGl0dG8uCisKIDIwMDktMDEtMjQg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRyeSB0byBmaXggUXQg
YnVpbGQuCkluZGV4OiBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkocmV2aXNpb24gNDAyMTcpCisrKyBXZWJD
b3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBA
QAogI2luY2x1ZGUgIkNoYXJhY3RlckRhdGEuaCIKIAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgpAQCAtNjEsNyArNjAs
NyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nCiAgICAgICAgIGRl
dGFjaCgpOwogICAgICAgICBhdHRhY2goKTsKICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyKCkpCi0g
ICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihyZW5kZXJlcigpKS0+c2V0VGV4dChtX2Rh
dGEpOworICAgICAgICB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPnNldFRleHQobV9kYXRhKTsK
ICAgICAKICAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgpKTsKICAgICAKQEAg
LTg5LDcgKzg4LDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjphcHBlbmREYXRhKGNvbnN0IFN0cgog
ICAgICAgICBkZXRhY2goKTsKICAgICAgICAgYXR0YWNoKCk7CiAgICAgfSBlbHNlIGlmIChyZW5k
ZXJlcigpKQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIoKSktPnNl
dFRleHRXaXRoT2Zmc2V0KG1fZGF0YSwgb2xkU3RyLT5sZW5ndGgoKSwgMCk7CisgICAgICAgIHRv
UmVuZGVyVGV4dChyZW5kZXJlcigpKS0+c2V0VGV4dFdpdGhPZmZzZXQobV9kYXRhLCBvbGRTdHIt
Pmxlbmd0aCgpLCAwKTsKICAgICAKICAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdl
dCgpKTsKIH0KQEAgLTExMCw3ICsxMDksNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6Omluc2VydERh
dGEodW5zaWduZWQgCiAgICAgICAgIGRldGFjaCgpOwogICAgICAgICBhdHRhY2goKTsKICAgICB9
IGVsc2UgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihy
ZW5kZXJlcigpKS0+c2V0VGV4dFdpdGhPZmZzZXQobV9kYXRhLCBvZmZzZXQsIDApOworICAgICAg
ICB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KG1fZGF0YSwgb2Zm
c2V0LCAwKTsKIAogICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIuZ2V0KCkpOwogICAg
IApAQCAtMTM5LDcgKzEzOCw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNp
Z25lZCAKICAgICAgICAgZGV0YWNoKCk7CiAgICAgICAgIGF0dGFjaCgpOwogICAgIH0gZWxzZSBp
ZiAocmVuZGVyZXIoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVy
KCkpLT5zZXRUZXh0V2l0aE9mZnNldChtX2RhdGEsIG9mZnNldCwgY291bnQpOworICAgICAgICB0
b1JlbmRlclRleHQocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KG1fZGF0YSwgb2Zmc2V0
LCBjb3VudCk7CiAKICAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyLmdldCgpKTsKIApA
QCAtMTY5LDcgKzE2OCw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZURhdGEodW5zaWdu
ZWQKICAgICAgICAgZGV0YWNoKCk7CiAgICAgICAgIGF0dGFjaCgpOwogICAgIH0gZWxzZSBpZiAo
cmVuZGVyZXIoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKCkp
LT5zZXRUZXh0V2l0aE9mZnNldChtX2RhdGEsIG9mZnNldCwgY291bnQpOworICAgICAgICB0b1Jl
bmRlclRleHQocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KG1fZGF0YSwgb2Zmc2V0LCBj
b3VudCk7CiAgICAgCiAgICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0ci5nZXQoKSk7CiAg
ICAgCkluZGV4OiBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gNDAyMTcpCisrKyBXZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNiBAQAog
CiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaCIKICNpbmNsdWRlICJEZWxldGVC
dXR0b25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFZGl0
b3IuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMzQsMTEgKzMyLDkgQEAKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTXV0YXRp
b25FdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC02ODcsMTMgKzY4MywxMyBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENvcm5l
cihGCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChw
LT5lbGVtZW50KCkgJiYgcC0+ZWxlbWVudCgpID09IHRoaXMgJiYgby0+aXNUZXh0KCkgJiYgIW8t
PmlzQlIoKSAmJiAhc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG8pLT5maXJzdFRleHRCb3goKSkg
eworICAgICAgICBpZiAocC0+ZWxlbWVudCgpICYmIHAtPmVsZW1lbnQoKSA9PSB0aGlzICYmIG8t
PmlzVGV4dCgpICYmICFvLT5pc0JSKCkgJiYgIXRvUmVuZGVyVGV4dChvKS0+Zmlyc3RUZXh0Qm94
KCkpIHsKICAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nIC0gc2tpcCB1bnJlbmRlcmVkIHdo
aXRlc3BhY2UgdGhhdCBpcyBhIGNoaWxkIG9yIG5leHQgc2libGluZyBvZiB0aGUgYW5jaG9yCiAg
ICAgICAgIH0gZWxzZSBpZiAoKG8tPmlzVGV4dCgpICYmICFvLT5pc0JSKCkpIHx8IG8tPmlzUmVw
bGFjZWQoKSkgewogICAgICAgICAgICAgcG9pbnQgPSBvLT5jb250YWluZXIoKS0+bG9jYWxUb0Fi
c29sdXRlKCk7Ci0gICAgICAgICAgICBpZiAoby0+aXNUZXh0KCkgJiYgc3RhdGljX2Nhc3Q8UmVu
ZGVyVGV4dCAqPihvKS0+Zmlyc3RUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBwb2ludC5t
b3ZlKHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4obyktPmxpbmVzQm91bmRpbmdCb3goKS54KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8p
LT5maXJzdFRleHRCb3goKS0+cm9vdCgpLT50b3BPdmVyZmxvdygpKTsKKyAgICAgICAgICAgIGlm
IChvLT5pc1RleHQoKSAmJiB0b1JlbmRlclRleHQobyktPmZpcnN0VGV4dEJveCgpKSB7CisgICAg
ICAgICAgICAgICAgcG9pbnQubW92ZSh0b1JlbmRlclRleHQobyktPmxpbmVzQm91bmRpbmdCb3go
KS54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclRleHQobyktPmZpcnN0
VGV4dEJveCgpLT5yb290KCktPnRvcE92ZXJmbG93KCkpOwogICAgICAgICAgICAgfSBlbHNlIGlm
IChvLT5pc0JveCgpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRl
ckJveChvKTsKICAgICAgICAgICAgICAgICBwb2ludC5tb3ZlKGJveC0+eCgpLCBib3gtPnkoKSk7
CkBAIC03NDUsNyArNzQxLDcgQEAgYm9vbCBDb250YWluZXJOb2RlOjpnZXRMb3dlclJpZ2h0Q29y
bmVyKAogICAgICAgICBpZiAoby0+aXNUZXh0KCkgfHwgby0+aXNSZXBsYWNlZCgpKSB7CiAgICAg
ICAgICAgICBwb2ludCA9IG8tPmNvbnRhaW5lcigpLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICAg
ICAgICAgIGlmIChvLT5pc1RleHQoKSkgewotICAgICAgICAgICAgICAgIFJlbmRlclRleHQqIHRl
eHQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obyk7CisgICAgICAgICAgICAgICAgUmVuZGVy
VGV4dCogdGV4dCA9IHRvUmVuZGVyVGV4dChvKTsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGxp
bmVzQm94ID0gdGV4dC0+bGluZXNCb3VuZGluZ0JveCgpOwogICAgICAgICAgICAgICAgIHBvaW50
Lm1vdmUobGluZXNCb3gueCgpICsgbGluZXNCb3gud2lkdGgoKSwgbGluZXNCb3guaGVpZ2h0KCkp
OwogICAgICAgICAgICAgfSBlbHNlIHsKSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDQwMjE3KQor
KysgV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDE0ICsyOSwxMiBAQAogI2luY2x1ZGUgIkNTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJD
aGFyYWN0ZXJOYW1lcy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJQb3NpdGlvbkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNs
dWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJs
ZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxl
X3VuaXRzLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTU0LDcgKzUyLDcgQEAgc3RhdGljIE5v
ZGUgKm5leHRSZW5kZXJlZEVkaXRhYmxlKE5vZGUgKgogICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocmVuZGVyZXItPmlubGluZUJveFdyYXBwZXIo
KSB8fCByZW5kZXJlci0+aXNUZXh0KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRl
cmVyKS0+Zmlyc3RUZXh0Qm94KCkpCisgICAgICAgIGlmIChyZW5kZXJlci0+aW5saW5lQm94V3Jh
cHBlcigpIHx8IHJlbmRlcmVyLT5pc1RleHQoKSAmJiB0b1JlbmRlclRleHQocmVuZGVyZXIpLT5m
aXJzdFRleHRCb3goKSkKICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICByZXR1
cm4gMDsKQEAgLTY5LDcgKzY3LDcgQEAgc3RhdGljIE5vZGUgKnByZXZpb3VzUmVuZGVyZWRFZGl0
YWJsZShObwogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIo
KTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAocmVuZGVyZXItPmlubGluZUJveFdyYXBwZXIoKSB8fCByZW5kZXJlci0+aXNUZXh0KCkg
JiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKS0+Zmlyc3RUZXh0Qm94KCkpCisg
ICAgICAgIGlmIChyZW5kZXJlci0+aW5saW5lQm94V3JhcHBlcigpIHx8IHJlbmRlcmVyLT5pc1Rl
eHQoKSAmJiB0b1JlbmRlclRleHQocmVuZGVyZXIpLT5maXJzdFRleHRCb3goKSkKICAgICAgICAg
ICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTE5NiwxNyArMTk0LDE3
IEBAIGludCBQb3NpdGlvbjo6cmVuZGVyZWRPZmZzZXQoKSBjb25zdAogICAgICAgICByZXR1cm4g
b2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgIGludCByZXN1bHQgPSAwOwotICAg
IFJlbmRlclRleHQgKnRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4obm9k
ZSgpLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJUZXh0ICp0ZXh0UmVuZGVyZXIgPSB0b1JlbmRl
clRleHQobm9kZSgpLT5yZW5kZXJlcigpKTsKICAgICBmb3IgKElubGluZVRleHRCb3ggKmJveCA9
IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJv
eCgpKSB7Ci0gICAgICAgIGludCBzdGFydCA9IGJveC0+bV9zdGFydDsKLSAgICAgICAgaW50IGVu
ZCA9IGJveC0+bV9zdGFydCArIGJveC0+bV9sZW47CisgICAgICAgIGludCBzdGFydCA9IGJveC0+
c3RhcnQoKTsKKyAgICAgICAgaW50IGVuZCA9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCk7CiAg
ICAgICAgIGlmIChvZmZzZXQoKSA8IHN0YXJ0KQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgaWYgKG9mZnNldCgpIDw9IGVuZCkgewogICAgICAgICAgICAgcmVzdWx0ICs9IG9m
ZnNldCgpIC0gc3RhcnQ7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0g
ICAgICAgIHJlc3VsdCArPSBib3gtPm1fbGVuOworICAgICAgICByZXN1bHQgKz0gYm94LT5sZW4o
KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTM2Niw3ICszNjQsNyBAQCBQb3Np
dGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oKSBjb25zdAogICAgICAgICB9CiAKICAgICAgICAgLy8g
cmV0dXJuIGN1cnJlbnQgcG9zaXRpb24gaWYgaXQgaXMgaW4gcmVuZGVyZWQgdGV4dAotICAgICAg
ICBpZiAocmVuZGVyZXItPmlzVGV4dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihyZW5k
ZXJlciktPmZpcnN0VGV4dEJveCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJlci0+aXNUZXh0KCkg
JiYgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKS0+Zmlyc3RUZXh0Qm94KCkpIHsKICAgICAgICAgICAg
IGlmIChjdXJyZW50Tm9kZSAhPSBzdGFydE5vZGUpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlz
IGFzc2VydGlvbiBmaXJlcyBpbiBsYXlvdXQgdGVzdHMgaW4gdGhlIGNhc2UtdHJhbnNmb3JtLmh0
bWwgdGVzdCBiZWNhdXNlCiAgICAgICAgICAgICAgICAgLy8gb2YgYSBtaXgtdXAgYmV0d2VlbiBv
ZmZzZXRzIGluIHRoZSB0ZXh0IGluIHRoZSBET00gdHJlZSB3aXRoIHRleHQgaW4gdGhlCkBAIC0z
NzcsNyArMzc1LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgdW5zaWduZWQgdGV4dE9mZnNldCA9IGN1cnJlbnRQb3Mu
b2Zmc2V0SW5MZWFmTm9kZSgpOwotICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVy
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgIFJlbmRl
clRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcik7CiAgICAgICAgICAg
ICBJbmxpbmVUZXh0Qm94KiBsYXN0VGV4dEJveCA9IHRleHRSZW5kZXJlci0+bGFzdFRleHRCb3go
KTsKICAgICAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLT5m
aXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAodGV4dE9mZnNldCA8PSBib3gtPnN0YXJ0KCkgKyBib3gtPmxlbigpKSB7CkBA
IC00ODIsMTQgKzQ4MCwxNCBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbSgpIGNvbnN0
CiAgICAgICAgIH0KIAogICAgICAgICAvLyByZXR1cm4gY3VycmVudCBwb3NpdGlvbiBpZiBpdCBp
cyBpbiByZW5kZXJlZCB0ZXh0Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aXNUZXh0KCkgJiYgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKS0+Zmlyc3RUZXh0Qm94KCkpIHsKKyAgICAg
ICAgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSAmJiB0b1JlbmRlclRleHQocmVuZGVyZXIpLT5maXJz
dFRleHRCb3goKSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IHN0YXJ0Tm9kZSkg
ewogICAgICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UG9zLmF0U3RhcnRPZk5vZGUoKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKGN1cnJlbnROb2RlLCByZW5kZXJlci0+Y2Fy
ZXRNaW5PZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHVuc2lnbmVkIHRl
eHRPZmZzZXQgPSBjdXJyZW50UG9zLm9mZnNldEluTGVhZk5vZGUoKTsKLSAgICAgICAgICAgIFJl
bmRlclRleHQqIHRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihyZW5kZXJl
cik7CisgICAgICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRleHQo
cmVuZGVyZXIpOwogICAgICAgICAgICAgSW5saW5lVGV4dEJveCogbGFzdFRleHRCb3ggPSB0ZXh0
UmVuZGVyZXItPmxhc3RUZXh0Qm94KCk7CiAgICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3gq
IGJveCA9IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0
VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRleHRPZmZzZXQgPD0gYm94LT5lbmQo
KSkgewpAQCAtNTM3LDcgKzUzNSw3IEBAIGJvb2wgUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5v
bnltb3VzRGUKICAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSByZW5kZXJlci0+bmV4dEluUHJlT3Jk
ZXJBZnRlckNoaWxkcmVuKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3QgKm8gPSByZW5kZXJlci0+
Zmlyc3RDaGlsZCgpOyBvICYmIG8gIT0gc3RvcDsgbyA9IG8tPm5leHRJblByZU9yZGVyKCkpCiAg
ICAgICAgIGlmIChvLT5lbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmICgoby0+aXNUZXh0KCkg
JiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG8pLT5saW5lc0JvdW5kaW5nQm94KCkuaGVpZ2h0
KCkpIHx8CisgICAgICAgICAgICBpZiAoKG8tPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChvKS0+
bGluZXNCb3VuZGluZ0JveCgpLmhlaWdodCgpKSB8fAogICAgICAgICAgICAgICAgIChvLT5pc0Jv
eCgpICYmIHRvUmVuZGVyQm94KG8pLT5ib3JkZXJCb3VuZGluZ0JveCgpLmhlaWdodCgpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNTg2LDkgKzU4NCw5IEBA
IGJvb2wgUG9zaXRpb246OmluUmVuZGVyZWRUZXh0KCkgY29uc3QKICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgUmVuZGVyVGV4dCAqdGV4dFJlbmRl
cmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyZW5kZXJlcik7CisgICAgUmVuZGVyVGV4
dCAqdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKTsKICAgICBmb3IgKElubGlu
ZVRleHRCb3ggKmJveCA9IHRleHRSZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0g
Ym94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIGlmIChvZmZzZXQoKSA8IGJveC0+bV9zdGFy
dCAmJiAhdGV4dFJlbmRlcmVyLT5jb250YWluc1JldmVyc2VkVGV4dCgpKSB7CisgICAgICAgIGlm
IChvZmZzZXQoKSA8IHN0YXRpY19jYXN0PGludD4oYm94LT5zdGFydCgpKSAmJiAhdGV4dFJlbmRl
cmVyLT5jb250YWluc1JldmVyc2VkVGV4dCgpKSB7CiAgICAgICAgICAgICAvLyBUaGUgb2Zmc2V0
IHdlJ3JlIGxvb2tpbmcgZm9yIGlzIGJlZm9yZSB0aGlzIG5vZGUKICAgICAgICAgICAgIC8vIHRo
aXMgbWVhbnMgdGhlIG9mZnNldCBtdXN0IGJlIGluIGNvbnRlbnQgdGhhdCBpcwogICAgICAgICAg
ICAgLy8gbm90IHJlbmRlcmVkLiBSZXR1cm4gZmFsc2UuCkBAIC02MTgsMTkgKzYxNiwxOSBAQCBi
b29sIFBvc2l0aW9uOjppc1JlbmRlcmVkQ2hhcmFjdGVyKCkgY29uCiAgICAgaWYgKGlzTnVsbCgp
IHx8ICFub2RlKCktPmlzVGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9kZSgpLT5yZW5kZXJlcigpOworICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFy
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFJlbmRlclRleHQgKnRl
eHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocmVuZGVyZXIpOwotICAgIGZv
ciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94
OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgaWYgKG9mZnNldCgpIDwgYm94
LT5tX3N0YXJ0ICYmICF0ZXh0UmVuZGVyZXItPmNvbnRhaW5zUmV2ZXJzZWRUZXh0KCkpIHsKKyAg
ICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRleHQocmVuZGVyZXIpOworICAg
IGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsg
Ym94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKKyAgICAgICAgaWYgKG9mZnNldCgpIDwg
c3RhdGljX2Nhc3Q8aW50Pihib3gtPnN0YXJ0KCkpICYmICF0ZXh0UmVuZGVyZXItPmNvbnRhaW5z
UmV2ZXJzZWRUZXh0KCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBvZmZzZXQgd2UncmUgbG9va2lu
ZyBmb3IgaXMgYmVmb3JlIHRoaXMgbm9kZQogICAgICAgICAgICAgLy8gdGhpcyBtZWFucyB0aGUg
b2Zmc2V0IG11c3QgYmUgaW4gY29udGVudCB0aGF0IGlzCiAgICAgICAgICAgICAvLyBub3QgcmVu
ZGVyZWQuIFJldHVybiBmYWxzZS4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQotICAgICAgICBpZiAob2Zmc2V0KCkgPj0gYm94LT5tX3N0YXJ0ICYmIG9mZnNldCgpIDwgYm94
LT5tX3N0YXJ0ICsgYm94LT5tX2xlbikKKyAgICAgICAgaWYgKG9mZnNldCgpID49IHN0YXRpY19j
YXN0PGludD4oYm94LT5zdGFydCgpKSAmJiBvZmZzZXQoKSA8IHN0YXRpY19jYXN0PGludD4oYm94
LT5zdGFydCgpICsgYm94LT5sZW4oKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgCkBAIC03OTcsNyArNzk1LDcgQEAgc3RhdGljIElubGluZVRleHRCb3gqIHNlYXJjaEFo
ZWFkRm9yQmV0dAogICAgICAgICBpZiAoaXNOb25UZXh0TGVhZkNoaWxkKG5leHQpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChuZXh0LT5pc1RleHQoKSkgewotICAgICAgICAgICAg
Zm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obmV4dCkt
PmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAg
ICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSB0b1JlbmRlclRleHQobmV4dCktPmZpcnN0
VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICAgICAg
ICAgIGludCBjYXJldE1pbk9mZnNldCA9IGJveC0+Y2FyZXRNaW5PZmZzZXQoKTsKICAgICAgICAg
ICAgICAgICBpZiAoY2FyZXRNaW5PZmZzZXQgPCBtaW5PZmZzZXQpIHsKICAgICAgICAgICAgICAg
ICAgICAgbWF0Y2ggPSBib3g7CkBAIC04MTgsNyArODE2LDcgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0
SW5saW5lQm94QW5kT2Zmc2V0KEVBZgogICAgICAgICBpZiAoIWlubGluZUJveCB8fCBjYXJldE9m
ZnNldCA+IGlubGluZUJveC0+Y2FyZXRNaW5PZmZzZXQoKSAmJiBjYXJldE9mZnNldCA8IGlubGlu
ZUJveC0+Y2FyZXRNYXhPZmZzZXQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2Ug
ewotICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJU
ZXh0Kj4ocmVuZGVyZXIpOworICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1Jl
bmRlclRleHQocmVuZGVyZXIpOwogCiAgICAgICAgIElubGluZVRleHRCb3gqIGJveDsKICAgICAg
ICAgSW5saW5lVGV4dEJveCogY2FuZGlkYXRlID0gMDsKSW5kZXg6IFdlYkNvcmUvZG9tL1Jhbmdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDQwMjE3
KQorKysgV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYs
MTIgQEAKICNpbmNsdWRlICJSYW5nZUV4Y2VwdGlvbi5oIgogCiAjaW5jbHVkZSAiQ1N0cmluZy5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgot
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVXaXRoSW5kZXguaCIKICNpbmNsdWRl
ICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKLSNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2lu
Y2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNp
YmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3Vu
aXRzLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQ0LDcgKzQwLDYgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIg
cmFuZ2VDb3VudGVyKCJSYW5nZSIpOwpJbmRleDogV2ViQ29yZS9kb20vVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vVGV4dC5jcHAJKHJldmlzaW9uIDQwMjE3KQorKysgV2ViQ29y
ZS9kb20vVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRl
ICJUZXh0LmgiCiAKICNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2lu
Y2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCkBAIC04MSw3ICs4MCw3IEBAIFBhc3NSZWZQdHI8
VGV4dD4gVGV4dDo6c3BsaXRUZXh0KHVuc2lnbmUKICAgICAgICAgZG9jdW1lbnQoKS0+dGV4dE5v
ZGVTcGxpdCh0aGlzKTsKIAogICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIoKSktPnNldFRleHQobV9kYXRhKTsKKyAgICAgICAgdG9S
ZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRUZXh0KG1fZGF0YSk7CiAKICAgICByZXR1cm4gbmV3
VGV4dC5yZWxlYXNlKCk7CiB9CkBAIC0yNTYsNyArMjU1LDcgQEAgdm9pZCBUZXh0OjpyZWNhbGNT
dHlsZShTdHlsZUNoYW5nZSBjaGFuZwogICAgIGlmIChjaGFuZ2VkKCkpIHsKICAgICAgICAgaWYg
KHJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLT5pc1RleHQoKSkKLSAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIoKSktPnNldFRl
eHQobV9kYXRhKTsKKyAgICAgICAgICAgICAgICB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPnNl
dFRleHQobV9kYXRhKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChhdHRhY2hl
ZCgpKQogICAgICAgICAgICAgICAgIGRldGFjaCgpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA0MDIxNykKKysrIFdlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcg
QEAKICNpbmNsdWRlICJSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5oIgogI2lu
Y2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2su
aCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiU2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQuaCIKICNpbmNsdWRlICJTcGxpdEVsZW1lbnRDb21tYW5kLmgiCiAjaW5jbHVkZSAiU3Bs
aXRUZXh0Tm9kZUNvbW1hbmQuaCIKQEAgLTQ2NSw3ICs0NjYsNyBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpkZWxldGVJbnNpZ25pCiAgICAgaWYgKCF0ZXh0Tm9kZSB8fCBzdGFydCA+PSBl
bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHN0
YXRpY19jYXN0PFJlbmRlclRleHQqPih0ZXh0Tm9kZS0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVy
VGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KHRleHROb2RlLT5yZW5kZXJlcigpKTsK
ICAgICBpZiAoIXRleHRSZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC00ODcsMTIgKzQ4
OCwxMiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pCiAgICAgLy8g
VGhpcyBsb29wIHN0cnVjdHVyZSB3b3JrcyB0byBwcm9jZXNzIGFsbCBnYXBzIHByZWNlZGluZyBh
IGJveCwKICAgICAvLyBhbmQgYWxzbyB3aWxsIGxvb2sgYXQgdGhlIGdhcCBhZnRlciB0aGUgbGFz
dCBib3guCiAgICAgd2hpbGUgKHByZXZCb3ggfHwgYm94KSB7Ci0gICAgICAgIHVuc2lnbmVkIGdh
cFN0YXJ0ID0gcHJldkJveCA/IHByZXZCb3gtPm1fc3RhcnQgKyBwcmV2Qm94LT5tX2xlbiA6IDA7
CisgICAgICAgIHVuc2lnbmVkIGdhcFN0YXJ0ID0gcHJldkJveCA/IHByZXZCb3gtPnN0YXJ0KCkg
KyBwcmV2Qm94LT5sZW4oKSA6IDA7CiAgICAgICAgIGlmIChlbmQgPCBnYXBTdGFydCkKICAgICAg
ICAgICAgIC8vIE5vIG1vcmUgY2hhbmNlIGZvciBhbnkgaW50ZXJzZWN0aW9ucwogICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICAgICAgdW5zaWduZWQgZ2FwRW5kID0gYm94ID8gYm94LT5tX3N0YXJ0
IDogbGVuZ3RoOworICAgICAgICB1bnNpZ25lZCBnYXBFbmQgPSBib3ggPyBib3gtPnN0YXJ0KCkg
OiBsZW5ndGg7CiAgICAgICAgIGJvb2wgaW5kaWNlc0ludGVyc2VjdCA9IHN0YXJ0IDw9IGdhcEVu
ZCAmJiBlbmQgPj0gZ2FwU3RhcnQ7CiAgICAgICAgIGludCBnYXBMZW4gPSBnYXBFbmQgLSBnYXBT
dGFydDsKICAgICAgICAgaWYgKGluZGljZXNJbnRlcnNlY3QgJiYgZ2FwTGVuID4gMCkgewpJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNDAyMTcp
CisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC05MTgsNyArOTE5LDcgQEAgdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpkZWJ1Z1JlbmRlcmVyKAogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVz
JXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDogIiAgICAiLCBlbGVtZW50LT5sb2NhbE5hbWUoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAgICAgZWxzZSBpZiAoci0+aXNUZXh0KCkp
IHsKLSAgICAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dCo+KHIpOworICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRl
eHQocik7CiAgICAgICAgIGlmICh0ZXh0UmVuZGVyZXItPnRleHRMZW5ndGgoKSA9PSAwIHx8ICF0
ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIiVzI3RleHQgKGVtcHR5KVxuIiwgc2VsZWN0ZWQgPyAiPT0+ICIgOiAiICAgICIpOwogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtOTM2LDcgKzkzNyw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6ZGVidWdSZW5kZXJlcigKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGludCBw
b3M7CiAgICAgICAgICAgICBJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVuZGVyZXItPmZpbmRO
ZXh0SW5saW5lVGV4dEJveChvZmZzZXQsIHBvcyk7Ci0gICAgICAgICAgICB0ZXh0ID0gdGV4dC5z
dWJzdHJpbmcoYm94LT5tX3N0YXJ0LCBib3gtPm1fbGVuKTsKKyAgICAgICAgICAgIHRleHQgPSB0
ZXh0LnN1YnN0cmluZyhib3gtPnN0YXJ0KCksIGJveC0+bGVuKCkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBTdHJpbmcgc2hvdzsKICAgICAgICAgICAgIGludCBtaWQgPSBtYXggLyAyOwpJ
bmRleDogV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDQwMjE3KQorKysgV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJv
dy5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBv
c2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogCiAjaWYgVVNFKElDVV9VTklD
T0RFKSAmJiAhVUNPTkZJR19OT19DT0xMQVRJT04KQEAgLTI4NSw3ICsyODYsNyBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgY29tcGFyZUJveFN0YXJ0KGNvbnN0CiAKIGJvb2wgVGV4dEl0ZXJhdG9yOjpo
YW5kbGVUZXh0Tm9kZSgpCiB7Ci0gICAgUmVuZGVyVGV4dCogcmVuZGVyZXIgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJUZXh0Kj4obV9ub2RlLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJUZXh0KiByZW5k
ZXJlciA9IHRvUmVuZGVyVGV4dChtX25vZGUtPnJlbmRlcmVyKCkpOwogICAgIGlmIChyZW5kZXJl
ci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCkBAIC0zMzIsMTIgKzMzMywxMiBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFu
ZGxlVGV4dE5vZGUoKQogCiB2b2lkIFRleHRJdGVyYXRvcjo6aGFuZGxlVGV4dEJveCgpCiB7ICAg
IAotICAgIFJlbmRlclRleHQgKnJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPiht
X25vZGUtPnJlbmRlcmVyKCkpOworICAgIFJlbmRlclRleHQgKnJlbmRlcmVyID0gdG9SZW5kZXJU
ZXh0KG1fbm9kZS0+cmVuZGVyZXIoKSk7CiAgICAgU3RyaW5nIHN0ciA9IHJlbmRlcmVyLT50ZXh0
KCk7CiAgICAgaW50IHN0YXJ0ID0gbV9vZmZzZXQ7CiAgICAgaW50IGVuZCA9IChtX25vZGUgPT0g
bV9lbmRDb250YWluZXIpID8gbV9lbmRPZmZzZXQgOiBJTlRfTUFYOwogICAgIHdoaWxlIChtX3Rl
eHRCb3gpIHsKLSAgICAgICAgaW50IHRleHRCb3hTdGFydCA9IG1fdGV4dEJveC0+bV9zdGFydDsK
KyAgICAgICAgaW50IHRleHRCb3hTdGFydCA9IG1fdGV4dEJveC0+c3RhcnQoKTsKICAgICAgICAg
aW50IHJ1blN0YXJ0ID0gbWF4KHRleHRCb3hTdGFydCwgc3RhcnQpOwogCiAgICAgICAgIC8vIENo
ZWNrIGZvciBjb2xsYXBzZWQgc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgcnVuLgpAQCAtMzU0
LDcgKzM1NSw3IEBAIHZvaWQgVGV4dEl0ZXJhdG9yOjpoYW5kbGVUZXh0Qm94KCkKICAgICAgICAg
ICAgICAgICBlbWl0Q2hhcmFjdGVyKCcgJywgbV9ub2RlLCAwLCBydW5TdGFydCwgcnVuU3RhcnQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGludCB0ZXh0Qm94RW5k
ID0gdGV4dEJveFN0YXJ0ICsgbV90ZXh0Qm94LT5tX2xlbjsKKyAgICAgICAgaW50IHRleHRCb3hF
bmQgPSB0ZXh0Qm94U3RhcnQgKyBtX3RleHRCb3gtPmxlbigpOwogICAgICAgICBpbnQgcnVuRW5k
ID0gbWluKHRleHRCb3hFbmQsIGVuZCk7CiAgICAgICAgIAogICAgICAgICAvLyBEZXRlcm1pbmUg
d2hhdCB0aGUgbmV4dCB0ZXh0IGJveCB3aWxsIGJlLCBidXQgZG9uJ3QgYWR2YW5jZSB5ZXQKQEAg
LTM4Nyw3ICszODgsNyBAQCB2b2lkIFRleHRJdGVyYXRvcjo6aGFuZGxlVGV4dEJveCgpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAvLyBBZHZhbmNlIGFuZCByZXR1cm4K
LSAgICAgICAgICAgIGludCBuZXh0UnVuU3RhcnQgPSBuZXh0VGV4dEJveCA/IG5leHRUZXh0Qm94
LT5tX3N0YXJ0IDogc3RyLmxlbmd0aCgpOworICAgICAgICAgICAgaW50IG5leHRSdW5TdGFydCA9
IG5leHRUZXh0Qm94ID8gbmV4dFRleHRCb3gtPnN0YXJ0KCkgOiBzdHIubGVuZ3RoKCk7CiAgICAg
ICAgICAgICBpZiAobmV4dFJ1blN0YXJ0ID4gcnVuRW5kKQogICAgICAgICAgICAgICAgIG1fbGFz
dFRleHROb2RlRW5kZWRXaXRoQ29sbGFwc2VkU3BhY2UgPSB0cnVlOyAvLyBjb2xsYXBzZWQgc3Bh
Y2UgYmV0d2VlbiBydW5zIG9yIGF0IHRoZSBlbmQKICAgICAgICAgICAgIG1fdGV4dEJveCA9IG5l
eHRUZXh0Qm94OwpAQCAtNzEyLDcgKzcxMyw3IEBAIHZvaWQgVGV4dEl0ZXJhdG9yOjplbWl0Q2hh
cmFjdGVyKFVDaGFyIGMKIAogdm9pZCBUZXh0SXRlcmF0b3I6OmVtaXRUZXh0KE5vZGUqIHRleHRO
b2RlLCBpbnQgdGV4dFN0YXJ0T2Zmc2V0LCBpbnQgdGV4dEVuZE9mZnNldCkKIHsKLSAgICBSZW5k
ZXJUZXh0KiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihtX25vZGUtPnJlbmRl
cmVyKCkpOworICAgIFJlbmRlclRleHQqIHJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KG1fbm9kZS0+
cmVuZGVyZXIoKSk7CiAgICAgU3RyaW5nIHN0ciA9IHJlbmRlcmVyLT50ZXh0KCk7CiAgICAgQVNT
RVJUKHN0ci5jaGFyYWN0ZXJzKCkpOwogCkBAIC04OTUsNyArODk2LDcgQEAgYm9vbCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpoYQogewogICAgIG1fbGFzdFRleHROb2RlID0gbV9u
b2RlOwogCi0gICAgUmVuZGVyVGV4dCAqcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0
ICo+KG1fbm9kZS0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVyVGV4dCAqcmVuZGVyZXIgPSB0b1Jl
bmRlclRleHQobV9ub2RlLT5yZW5kZXJlcigpKTsKICAgICBTdHJpbmcgc3RyID0gcmVuZGVyZXIt
PnRleHQoKTsKIAogICAgIGlmICghcmVuZGVyZXItPmZpcnN0VGV4dEJveCgpICYmIHN0ci5sZW5n
dGgoKSA+IDApCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24g
NDAyMTcpCisrKyBXZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICsyOSw3IEBACiAj
aW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxl
bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lv
biA0MDIxNykKKysrIFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5o
IgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5o
IgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMx
NCw3ICszMTUsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb25Gb3JMCiAg
ICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsKICAgICBpZiAoc3RhcnRCb3gtPmlzSW5saW5lVGV4dEJv
eCgpKSB7CiAgICAgICAgIElubGluZVRleHRCb3ggKnN0YXJ0VGV4dEJveCA9IHN0YXRpY19jYXN0
PElubGluZVRleHRCb3ggKj4oc3RhcnRCb3gpOwotICAgICAgICBzdGFydE9mZnNldCA9IHN0YXJ0
VGV4dEJveC0+bV9zdGFydDsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydFRleHRCb3gtPnN0
YXJ0KCk7CiAgICAgfQogICAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzUG9zID0gVmlzaWJsZVBv
c2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIERPV05TVFJFQU0pOwpAQCAtMzgzLDkgKzM4
NCw5IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25Gb3JMaW4KICAgICAgICAg
ZW5kT2Zmc2V0ID0gMDsKICAgICB9IGVsc2UgaWYgKGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkp
IHsKICAgICAgICAgSW5saW5lVGV4dEJveCAqZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGlu
ZVRleHRCb3ggKj4oZW5kQm94KTsKLSAgICAgICAgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC0+bV9z
dGFydDsKKyAgICAgICAgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC0+c3RhcnQoKTsKICAgICAgICAg
aWYgKCFlbmRUZXh0Qm94LT5pc0xpbmVCcmVhaygpKQotICAgICAgICAgICAgZW5kT2Zmc2V0ICs9
IGVuZFRleHRCb3gtPm1fbGVuOworICAgICAgICAgICAgZW5kT2Zmc2V0ICs9IGVuZFRleHRCb3gt
PmxlbigpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVuZE5vZGUs
IGVuZE9mZnNldCwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOwpAQCAtNzA2LDggKzcwNyw4IEBA
IFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYKICAgICAgICAgICAgIAog
ICAgICAgICBpZiAoci0+aXNUZXh0KCkpIHsKICAgICAgICAgICAgIGlmIChzdHlsZS0+cHJlc2Vy
dmVOZXdsaW5lKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhcnMgPSBzdGF0
aWNfY2FzdDxSZW5kZXJUZXh0Kj4ociktPmNoYXJhY3RlcnMoKTsKLSAgICAgICAgICAgICAgICBp
bnQgaSA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihyKS0+dGV4dExlbmd0aCgpOworICAgICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFycyA9IHRvUmVuZGVyVGV4dChyKS0+Y2hhcmFjdGVy
cygpOworICAgICAgICAgICAgICAgIGludCBpID0gdG9SZW5kZXJUZXh0KHIpLT50ZXh0TGVuZ3Ro
KCk7CiAgICAgICAgICAgICAgICAgaW50IG8gPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICAgaWYg
KG4gPT0gc3RhcnROb2RlICYmIG8gPCBpKQogICAgICAgICAgICAgICAgICAgICBpID0gbWF4KDAs
IG8pOwpAQCAtNzcxLDkgKzc3Miw5IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChj
b25zdCBWaXMKICAgICAgICAgLy8gRklYTUU6IFdlIGF2b2lkIHJldHVybmluZyBhIHBvc2l0aW9u
IHdoZXJlIHRoZSByZW5kZXJlciBjYW4ndCBhY2NlcHQgdGhlIGNhcmV0LgogICAgICAgICAvLyBX
ZSBzaG91bGQgcHJvYmFibHkgZG8gdGhpcyBpbiBvdGhlciBjYXNlcyBzdWNoIGFzIHN0YXJ0T2ZQ
YXJhZ3JhcGguCiAgICAgICAgIGlmIChyLT5pc1RleHQoKSAmJiByLT5jYXJldE1heFJlbmRlcmVk
T2Zmc2V0KCkgPiAwKSB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGV4dCo+KHIpLT50ZXh0TGVuZ3RoKCk7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gdG9S
ZW5kZXJUZXh0KHIpLT50ZXh0TGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAoc3R5bGUtPnByZXNl
cnZlTmV3bGluZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJzID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHIpLT5jaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICAgICAg
Y29uc3QgVUNoYXIqIGNoYXJzID0gdG9SZW5kZXJUZXh0KHIpLT5jaGFyYWN0ZXJzKCk7CiAgICAg
ICAgICAgICAgICAgaW50IG8gPSBuID09IHN0YXJ0Tm9kZSA/IG9mZnNldCA6IDA7CiAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IG87IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoYXJzW2ldID09ICdcbicpCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNDAyMTcpCisrKyBXZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKSW5kZXg6IFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJ
KHJldmlzaW9uIDQwMjE3KQorKysgV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
TGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJNZW51TGlzdC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJU
ZXh0Q29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgpAQCAtMTE0Miw3ICsxMTQzLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphY2Nlc3NpYgogICAgICAgICBpZiAocGFyZW50T2JqZWN0VW5pZ25vcmVkKCktPmFyaWFS
b2xlQXR0cmlidXRlKCkgPT0gTWVudUl0ZW1Sb2xlIHx8CiAgICAgICAgICAgICBwYXJlbnRPYmpl
Y3RVbmlnbm9yZWQoKS0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBNZW51QnV0dG9uUm9sZSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgcmV0dXJuIG1fcmVuZGVyZXItPmlzQlIo
KSB8fCAhc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG1fcmVuZGVyZXIpLT5maXJzdFRleHRCb3go
KTsKKyAgICAgICAgIHJldHVybiBtX3JlbmRlcmVyLT5pc0JSKCkgfHwgIXRvUmVuZGVyVGV4dCht
X3JlbmRlcmVyKS0+Zmlyc3RUZXh0Qm94KCk7CiAgICAgfQogICAgIAogICAgIGlmIChpc0hlYWRp
bmcoKSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gNDAyMTcpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiRWRpdG9yQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gNDAyMTcpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDcg
KzI4OSw3IEBAIGludCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGwKICAgICBm
b3IgKElubGluZUJveCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHRPbkxpbmUoKSkgewogICAgICAgICBpZiAoY3Vyci0+b2JqZWN0KCktPmlzVGV4dCgpKSB7CiAg
ICAgICAgICAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJv
eCo+KGN1cnIpOwotICAgICAgICAgICAgUmVuZGVyVGV4dCogcnQgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0Kj4odGV4dC0+b2JqZWN0KCkpOworICAgICAgICAgICAgUmVuZGVyVGV4dCogcnQgPSB0
b1JlbmRlclRleHQodGV4dC0+b2JqZWN0KCkpOwogICAgICAgICAgICAgaWYgKHJ0LT50ZXh0TGVu
Z3RoKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobmVlZHNXb3JkU3BhY2luZyAmJiBpc1NwYWNl
T3JOZXdsaW5lKHJ0LT5jaGFyYWN0ZXJzKClbdGV4dC0+c3RhcnQoKV0pKQogICAgICAgICAgICAg
ICAgICAgICB4ICs9IHJ0LT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnQoKS53b3JkU3BhY2luZygp
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDQwMjE3KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwOCw3ICsxMDgsNyBAQCBJbnRSZWN0IElubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3QoaW50
CiAKIHZvaWQgSW5saW5lVGV4dEJveDo6ZGVsZXRlTGluZShSZW5kZXJBcmVuYSogYXJlbmEpCiB7
Ci0gICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG1fb2JqZWN0KS0+cmVtb3ZlVGV4dEJveCh0
aGlzKTsKKyAgICB0b1JlbmRlclRleHQobV9vYmplY3QpLT5yZW1vdmVUZXh0Qm94KHRoaXMpOwog
ICAgIGRlc3Ryb3koYXJlbmEpOwogfQogCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpleHRyYWN0TGluZSgpCiAgICAgaWYgKG1fZXh0cmFjdGVkKQogICAgICAgICByZXR1
cm47CiAKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obV9vYmplY3QpLT5leHRyYWN0VGV4
dEJveCh0aGlzKTsKKyAgICB0b1JlbmRlclRleHQobV9vYmplY3QpLT5leHRyYWN0VGV4dEJveCh0
aGlzKTsKIH0KIAogdm9pZCBJbmxpbmVUZXh0Qm94OjphdHRhY2hMaW5lKCkKQEAgLTEyNSw3ICsx
MjUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OmF0dGFjaExpbmUoKQogICAgIGlmICghbV9leHRy
YWN0ZWQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0
Kj4obV9vYmplY3QpLT5hdHRhY2hUZXh0Qm94KHRoaXMpOworICAgIHRvUmVuZGVyVGV4dChtX29i
amVjdCktPmF0dGFjaFRleHRCb3godGhpcyk7CiB9CiAKIGludCBJbmxpbmVUZXh0Qm94OjpwbGFj
ZUVsbGlwc2lzQm94KGJvb2wgbHRyLCBpbnQgYmxvY2tFZGdlLCBpbnQgZWxsaXBzaXNXaWR0aCwg
Ym9vbCYgZm91bmRCb3gpCkBAIC0xNjIsNyArMTYyLDcgQEAgaW50IElubGluZVRleHRCb3g6OnBs
YWNlRWxsaXBzaXNCb3goYm9vbAogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBTZXQgdGhl
IHRydW5jYXRpb24gaW5kZXggb24gdGhlIHRleHQgcnVuLiAgVGhlIGVsbGlwc2lzIG5lZWRzIHRv
IGJlIHBsYWNlZCBqdXN0IGFmdGVyIHRoZSBsYXN0IHZpc2libGUgY2hhcmFjdGVyLgogICAgICAg
ICAgICAgbV90cnVuY2F0aW9uID0gb2Zmc2V0OwotICAgICAgICAgICAgcmV0dXJuIG1feCArIHN0
YXRpY19jYXN0PFJlbmRlclRleHQqPihtX29iamVjdCktPndpZHRoKG1fc3RhcnQsIG9mZnNldCwg
dGV4dFBvcygpLCBtX2ZpcnN0TGluZSk7CisgICAgICAgICAgICByZXR1cm4gbV94ICsgdG9SZW5k
ZXJUZXh0KG1fb2JqZWN0KS0+d2lkdGgobV9zdGFydCwgb2Zmc2V0LCB0ZXh0UG9zKCksIG1fZmly
c3RMaW5lKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKQEAgLTU3Miw3ICs1NzIsNyBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBpbnQgd2lkdGggPSAobV90cnVuY2F0aW9uID09IGNOb1RydW5jYXRpb24p
ID8gbV93aWR0aAotICAgICAgICA6IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihtX29iamVjdCkt
PndpZHRoKG1fc3RhcnQsIG1fdHJ1bmNhdGlvbiwgdGV4dFBvcygpLCBtX2ZpcnN0TGluZSk7Cisg
ICAgICAgIDogdG9SZW5kZXJUZXh0KG1fb2JqZWN0KS0+d2lkdGgobV9zdGFydCwgbV90cnVuY2F0
aW9uLCB0ZXh0UG9zKCksIG1fZmlyc3RMaW5lKTsKICAgICAKICAgICAvLyBHZXQgdGhlIHRleHQg
ZGVjb3JhdGlvbiBjb2xvcnMuCiAgICAgQ29sb3IgdW5kZXJsaW5lLCBvdmVybGluZSwgbGluZXRo
cm91Z2g7CkBAIC03OTcsNyArNzk3LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBv
c2l0aW9uVW5kZQogICAgIGlmIChwYWludFN0YXJ0IDw9IHVuZGVybGluZS5zdGFydE9mZnNldCkg
ewogICAgICAgICBwYWludFN0YXJ0ID0gdW5kZXJsaW5lLnN0YXJ0T2Zmc2V0OwogICAgICAgICB1
c2VXaG9sZVdpZHRoID0gZmFsc2U7Ci0gICAgICAgIHN0YXJ0ID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dCo+KG1fb2JqZWN0KS0+d2lkdGgobV9zdGFydCwgcGFpbnRTdGFydCAtIG1fc3RhcnQsIHRl
eHRQb3MoKSwgbV9maXJzdExpbmUpOworICAgICAgICBzdGFydCA9IHRvUmVuZGVyVGV4dChtX29i
amVjdCktPndpZHRoKG1fc3RhcnQsIHBhaW50U3RhcnQgLSBtX3N0YXJ0LCB0ZXh0UG9zKCksIG1f
Zmlyc3RMaW5lKTsKICAgICB9CiAgICAgaWYgKHBhaW50RW5kICE9IHVuZGVybGluZS5lbmRPZmZz
ZXQpIHsgICAgICAvLyBlbmQgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBwYXN0IGl0CiAg
ICAgICAgIHBhaW50RW5kID0gbWluKHBhaW50RW5kLCAodW5zaWduZWQpdW5kZXJsaW5lLmVuZE9m
ZnNldCk7CkBAIC04MDgsNyArODA4LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBv
c2l0aW9uVW5kZQogICAgICAgICB1c2VXaG9sZVdpZHRoID0gZmFsc2U7CiAgICAgfQogICAgIGlm
ICghdXNlV2hvbGVXaWR0aCkgewotICAgICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PFJlbmRlclRl
eHQqPihtX29iamVjdCktPndpZHRoKHBhaW50U3RhcnQsIHBhaW50RW5kIC0gcGFpbnRTdGFydCwg
dGV4dFBvcygpICsgc3RhcnQsIG1fZmlyc3RMaW5lKTsKKyAgICAgICAgd2lkdGggPSB0b1JlbmRl
clRleHQobV9vYmplY3QpLT53aWR0aChwYWludFN0YXJ0LCBwYWludEVuZCAtIHBhaW50U3RhcnQs
IHRleHRQb3MoKSArIHN0YXJ0LCBtX2ZpcnN0TGluZSk7CiAgICAgfQogCiAgICAgLy8gVGhpY2sg
bWFya2VkIHRleHQgdW5kZXJsaW5lcyBhcmUgMnB4IHRoaWNrIGFzIGxvbmcgYXMgdGhlcmUgaXMg
cm9vbSBmb3IgdGhlIDJweCBsaW5lIHVuZGVyIHRoZSBiYXNlbGluZS4KQEAgLTg1OCw3ICs4NTgs
NyBAQCBpbnQgSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oaW50CiAgICAgaWYgKGlz
TGluZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVuZGVyVGV4dCogdGV4dCA9
IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihtX29iamVjdCk7CisgICAgUmVuZGVyVGV4dCogdGV4
dCA9IHRvUmVuZGVyVGV4dChtX29iamVjdCk7CiAgICAgUmVuZGVyU3R5bGUgKnN0eWxlID0gdGV4
dC0+c3R5bGUobV9maXJzdExpbmUpOwogICAgIGNvbnN0IEZvbnQqIGYgPSAmc3R5bGUtPmZvbnQo
KTsKICAgICByZXR1cm4gZi0+b2Zmc2V0Rm9yUG9zaXRpb24oVGV4dFJ1bih0ZXh0T2JqZWN0KCkt
PnRleHQoKS0+Y2hhcmFjdGVycygpICsgbV9zdGFydCwgbV9sZW4sIHRleHRPYmplY3QoKS0+YWxs
b3dUYWJzKCksIHRleHRQb3MoKSwgbV90b0FkZCwgZGlyZWN0aW9uKCkgPT0gUlRMLCBtX2Rpck92
ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSksCkBAIC04NzMsNyArODczLDcgQEAg
aW50IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludAogICAgIGlmIChpc0xpbmVC
cmVhaygpKQogICAgICAgICByZXR1cm4gbV94OwogCi0gICAgUmVuZGVyVGV4dCogdGV4dCA9IHN0
YXRpY19jYXN0PFJlbmRlclRleHQqPihtX29iamVjdCk7CisgICAgUmVuZGVyVGV4dCogdGV4dCA9
IHRvUmVuZGVyVGV4dChtX29iamVjdCk7CiAgICAgY29uc3QgRm9udCYgZiA9IHRleHQtPnN0eWxl
KG1fZmlyc3RMaW5lKS0+Zm9udCgpOwogICAgIGludCBmcm9tID0gZGlyZWN0aW9uKCkgPT0gUlRM
ID8gb2Zmc2V0IC0gbV9zdGFydCA6IDA7CiAgICAgaW50IHRvID0gZGlyZWN0aW9uKCkgPT0gUlRM
ID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaAkocmV2aXNpb24gNDAyMTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw3IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjIg
KzIzLDE2IEBACiAjaWZuZGVmIElubGluZVRleHRCb3hfaAogI2RlZmluZSBJbmxpbmVUZXh0Qm94
X2gKIAotI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyLmgiCiAjaW5jbHVkZSAiSW5saW5lUnVuQm94
LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIgLy8g
c28gdGV4dE9iamVjdCgpIGNhbiBiZSBpbmxpbmUKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitz
dHJ1Y3QgQ29tcG9zaXRpb25VbmRlcmxpbmU7CisKIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNOb1Ry
dW5jYXRpb24gPSBVU0hSVF9NQVg7CiBjb25zdCB1bnNpZ25lZCBzaG9ydCBjRnVsbFRydW5jYXRp
b24gPSBVU0hSVF9NQVggLSAxOwogCi1jbGFzcyBTdHJpbmc7Ci1jbGFzcyBTdHJpbmdJbXBsOwot
Y2xhc3MgSGl0VGVzdFJlc3VsdDsKLWNsYXNzIFBvc2l0aW9uOwotCi1zdHJ1Y3QgQ29tcG9zaXRp
b25VbmRlcmxpbmU7Ci0KIC8vIEhlbHBlciBmdW5jdGlvbnMgc2hhcmVkIGJ5IElubGluZVRleHRC
b3ggLyBTVkdSb290SW5saW5lQm94CiB2b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENvbG9yJiBz
dHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKTsKIENvbG9yIGNvcnJlY3RlZFRleHRD
b2xvcihDb2xvciB0ZXh0Q29sb3IsIENvbG9yIGJhY2tncm91bmRDb2xvcik7CkBAIC02Nyw0NiAr
NTksNjEgQEAgcHVibGljOgogCiAgICAgdm9pZCBvZmZzZXRSdW4oaW50IGQpIHsgbV9zdGFydCAr
PSBkOyB9CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgc2VsZWN0aW9uVG9wKCk7CiAgICAg
dmlydHVhbCBpbnQgc2VsZWN0aW9uSGVpZ2h0KCk7CiAKK3B1YmxpYzoKICAgICB2aXJ0dWFsIElu
dFJlY3Qgc2VsZWN0aW9uUmVjdChpbnQgYWJzeCwgaW50IGFic3ksIGludCBzdGFydFBvcywgaW50
IGVuZFBvcyk7CiAgICAgYm9vbCBpc1NlbGVjdGVkKGludCBzdGFydFBvcywgaW50IGVuZFBvcykg
Y29uc3Q7CiAgICAgdm9pZCBzZWxlY3Rpb25TdGFydEVuZChpbnQmIHNQb3MsIGludCYgZVBvcyk7
CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwg
aW50IHR5KTsKIAorcHVibGljOgogICAgIFJlbmRlclRleHQqIHRleHRPYmplY3QoKSBjb25zdDsK
IAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlTGluZShSZW5kZXJBcmVuYSopOwog
ICAgIHZpcnR1YWwgdm9pZCBleHRyYWN0TGluZSgpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hM
aW5lKCk7CiAKK3B1YmxpYzoKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3Rh
dGUgc2VsZWN0aW9uU3RhdGUoKTsKIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJU
cnVuY2F0aW9uKCkgeyBtX3RydW5jYXRpb24gPSBjTm9UcnVuY2F0aW9uOyB9CiAgICAgdmlydHVh
bCBpbnQgcGxhY2VFbGxpcHNpc0JveChib29sIGx0ciwgaW50IGJsb2NrRWRnZSwgaW50IGVsbGlw
c2lzV2lkdGgsIGJvb2wmIGZvdW5kQm94KTsKIAorcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBp
c0xpbmVCcmVhaygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRTcGFjZUFkZChpbnQgYWRkKSB7IG1f
d2lkdGggLT0gbV90b0FkZDsgbV90b0FkZCA9IGFkZDsgbV93aWR0aCArPSBtX3RvQWRkOyB9Ci0g
ICAgaW50IHNwYWNlQWRkKCkgeyByZXR1cm4gbV90b0FkZDsgfQogCitwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBpc0lubGluZVRleHRCb3goKSB7IHJldHVybiB0cnVlOyB9ICAgIAorCitwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJlYXRBc1Rl
eHQ7IH0KICAgICB2b2lkIHNldElzVGV4dChib29sIGIpIHsgbV90cmVhdEFzVGV4dCA9IGI7IH0K
IAogICAgIHZpcnR1YWwgaW50IGNhcmV0TWluT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBp
bnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdDsKKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKIAogICAgIGludCB0ZXh0UG9zKCkg
Y29uc3Q7CisKK3B1YmxpYzoKICAgICB2aXJ0dWFsIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQg
eCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyA9IHRydWUpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IHBvc2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0OwogCiAgICAgYm9vbCBjb250
YWluc0NhcmV0T2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0OyAvLyBmYWxzZSBmb3Igb2Zmc2V0IGFm
dGVyIGxpbmUgYnJlYWsKIAorcHJpdmF0ZToKICAgICBpbnQgbV9zdGFydDsKICAgICB1bnNpZ25l
ZCBzaG9ydCBtX2xlbjsKIApAQCAtMTIyLDE2ICsxMjksMTUgQEAgcHJvdGVjdGVkOgogI2VuZGlm
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0Kiwg
aW50IHR4LCBpbnQgdHksIGludCBkZWNvcmF0aW9uLCBTaGFkb3dEYXRhKiBzaGFkb3cpOworICAg
IHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBp
bnQgZGVjb3JhdGlvbiwgU2hhZG93RGF0YSopOwogICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3Jh
cGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYp
OwogICAgIHZvaWQgcGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQq
LCBpbnQgdHgsIGludCB0eSwgRG9jdW1lbnRNYXJrZXIsIFJlbmRlclN0eWxlKiwgY29uc3QgRm9u
dCYsIGJvb2wgZ3JhbW1hcik7CiAgICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGlj
c0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgRG9jdW1lbnRNYXJrZXIsIFJlbmRlclN0eWxlKiwg
Y29uc3QgRm9udCYpOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJUZXh0OwogfTsKIAogaW5saW5l
IFJlbmRlclRleHQqIElubGluZVRleHRCb3g6OnRleHRPYmplY3QoKSBjb25zdAogewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obV9vYmplY3QpOworICAgIHJldHVybiB0b1Jl
bmRlclRleHQobV9vYmplY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcmVuYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQXJlbmEuY3BwCShyZXZpc2lvbiA0MDIxNykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckFyZW5hLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCB2
b2lkKiBSZW5kZXJBcmVuYTo6YWxsb2NhdGUoc2l6ZV90IHNpemUpCiAgICAgLy8gVXNlIHN0YW5k
YXJkIG1hbGxvYyBzbyB0aGF0IG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgd29yay4KICAgICBBU1NF
UlQodGhpcyk7CiAgICAgdm9pZCogYmxvY2sgPSA6Om1hbGxvYyhzaXplb2YoUmVuZGVyQXJlbmFE
ZWJ1Z0hlYWRlcikgKyBzaXplKTsKLSAgICBSZW5kZXJBcmVuYURlYnVnSGVhZGVyKiBoZWFkZXIg
PSAoUmVuZGVyQXJlbmFEZWJ1Z0hlYWRlciopYmxvY2s7CisgICAgUmVuZGVyQXJlbmFEZWJ1Z0hl
YWRlciogaGVhZGVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyQXJlbmFEZWJ1Z0hlYWRlcio+KGJsb2Nr
KTsKICAgICBoZWFkZXItPmFyZW5hID0gdGhpczsKICAgICBoZWFkZXItPnNpemUgPSBzaXplOwog
ICAgIGhlYWRlci0+c2lnbmF0dXJlID0gc2lnbmF0dXJlOwpAQCAtMTEyLDcgKzExMiw3IEBAIHZv
aWQgUmVuZGVyQXJlbmE6OmZyZWUoc2l6ZV90IHNpemUsIHZvaWQKIHsKICNpZm5kZWYgTkRFQlVH
CiAgICAgLy8gVXNlIHN0YW5kYXJkIGZyZWUgc28gdGhhdCBtZW1vcnkgZGVidWdnaW5nIHRvb2xz
IHdvcmsuCi0gICAgUmVuZGVyQXJlbmFEZWJ1Z0hlYWRlciogaGVhZGVyID0gKFJlbmRlckFyZW5h
RGVidWdIZWFkZXIqKXB0ciAtIDE7CisgICAgUmVuZGVyQXJlbmFEZWJ1Z0hlYWRlciogaGVhZGVy
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQXJlbmFEZWJ1Z0hlYWRlcio+KHB0cikgLSAxOwogICAgIEFT
U0VSVChoZWFkZXItPnNpZ25hdHVyZSA9PSBzaWduYXR1cmUpOwogICAgIEFTU0VSVChoZWFkZXIt
PnNpemUgPT0gc2l6ZSk7CiAgICAgQVNTRVJUKGhlYWRlci0+YXJlbmEgPT0gdGhpcyk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA0MDIxNykKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBA
QCBzdGF0aWMgUGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwKiBnUGVyCiB0eXBlZGVmIFdURjo6
SGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBIYXNoU2V0PFJlbmRlckJsb2NrKj4qPiBQZXJjZW50
SGVpZ2h0Q29udGFpbmVyTWFwOwogc3RhdGljIFBlcmNlbnRIZWlnaHRDb250YWluZXJNYXAqIGdQ
ZXJjZW50SGVpZ2h0Q29udGFpbmVyTWFwID0gMDsKICAgICAKLXR5cGVkZWYgV1RGOjpIYXNoTWFw
PFJlbmRlckJsb2NrKiwgUmVuZGVyRmxvd1NlcXVlbmNlZFNldCo+IENvbnRpbnVhdGlvbk91dGxp
bmVUYWJsZU1hcDsKK3R5cGVkZWYgV1RGOjpIYXNoTWFwPFJlbmRlckJsb2NrKiwgTGlzdEhhc2hT
ZXQ8UmVuZGVyRmxvdyo+Kj4gQ29udGludWF0aW9uT3V0bGluZVRhYmxlTWFwOwogCiAvLyBPdXIg
TWFyZ2luSW5mbyBzdGF0ZSB1c2VkIHdoZW4gbGF5aW5nIG91dCBibG9jayBjaGlsZHJlbi4KIFJl
bmRlckJsb2NrOjpNYXJnaW5JbmZvOjpNYXJnaW5JbmZvKFJlbmRlckJsb2NrKiBibG9jaywgaW50
IHRvcCwgaW50IGJvdHRvbSkKQEAgLTE4MjQsOSArMTgyNCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmFkZENvbnRpbnVhdGlvbldpdGhPdXQKICAgICBBU1NFUlQoIWZsb3ctPmxheWVyKCkpOwogICAg
IAogICAgIENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcCogdGFibGUgPSBjb250aW51YXRpb25P
dXRsaW5lVGFibGUoKTsKLSAgICBSZW5kZXJGbG93U2VxdWVuY2VkU2V0KiBjb250aW51YXRpb25z
ID0gdGFibGUtPmdldCh0aGlzKTsKKyAgICBMaXN0SGFzaFNldDxSZW5kZXJGbG93Kj4qIGNvbnRp
bnVhdGlvbnMgPSB0YWJsZS0+Z2V0KHRoaXMpOwogICAgIGlmICghY29udGludWF0aW9ucykgewot
ICAgICAgICBjb250aW51YXRpb25zID0gbmV3IFJlbmRlckZsb3dTZXF1ZW5jZWRTZXQ7CisgICAg
ICAgIGNvbnRpbnVhdGlvbnMgPSBuZXcgTGlzdEhhc2hTZXQ8UmVuZGVyRmxvdyo+OwogICAgICAg
ICB0YWJsZS0+c2V0KHRoaXMsIGNvbnRpbnVhdGlvbnMpOwogICAgIH0KICAgICAKQEAgLTE4Mzks
MTMgKzE4MzksMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250aW51YXRpb25PdXRsaQog
ICAgIGlmICh0YWJsZS0+aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAg
IFJlbmRlckZsb3dTZXF1ZW5jZWRTZXQqIGNvbnRpbnVhdGlvbnMgPSB0YWJsZS0+Z2V0KHRoaXMp
OworICAgIExpc3RIYXNoU2V0PFJlbmRlckZsb3cqPiogY29udGludWF0aW9ucyA9IHRhYmxlLT5n
ZXQodGhpcyk7CiAgICAgaWYgKCFjb250aW51YXRpb25zKQogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIC8vIFBhaW50IGVhY2ggY29udGludWF0aW9uIG91dGxpbmUuCi0gICAgUmVuZGVy
Rmxvd1NlcXVlbmNlZFNldDo6aXRlcmF0b3IgZW5kID0gY29udGludWF0aW9ucy0+ZW5kKCk7Ci0g
ICAgZm9yIChSZW5kZXJGbG93U2VxdWVuY2VkU2V0OjppdGVyYXRvciBpdCA9IGNvbnRpbnVhdGlv
bnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIExpc3RIYXNoU2V0PFJlbmRlckZs
b3cqPjo6aXRlcmF0b3IgZW5kID0gY29udGludWF0aW9ucy0+ZW5kKCk7CisgICAgZm9yIChMaXN0
SGFzaFNldDxSZW5kZXJGbG93Kj46Oml0ZXJhdG9yIGl0ID0gY29udGludWF0aW9ucy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIC8vIE5lZWQgdG8gYWRkIGluIHRoZSBjb29y
ZGluYXRlcyBvZiB0aGUgaW50ZXJ2ZW5pbmcgYmxvY2tzLgogICAgICAgICBSZW5kZXJGbG93KiBm
bG93ID0gKml0OwogICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBmbG93LT5jb250YWluaW5n
QmxvY2soKTsKQEAgLTM4NDMsNyArMzg0Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdHJpcFRy
YWlsaW5nU3BhY2UoaW4KIHsKICAgICBpZiAodHJhaWxpbmdTcGFjZUNoaWxkICYmIHRyYWlsaW5n
U3BhY2VDaGlsZC0+aXNUZXh0KCkpIHsKICAgICAgICAgLy8gQ29sbGFwc2UgYXdheSB0aGUgdHJh
aWxpbmcgc3BhY2UgYXQgdGhlIGVuZCBvZiBhIGJsb2NrLgotICAgICAgICBSZW5kZXJUZXh0KiB0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHRyYWlsaW5nU3BhY2VDaGlsZCk7CisgICAgICAg
IFJlbmRlclRleHQqIHQgPSB0b1JlbmRlclRleHQodHJhaWxpbmdTcGFjZUNoaWxkKTsKICAgICAg
ICAgY29uc3QgVUNoYXIgc3BhY2UgPSAnICc7CiAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSB0
LT5zdHlsZSgpLT5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAg
ICAgICAgaW50IHNwYWNlV2lkdGggPSBmb250LndpZHRoKFRleHRSdW4oJnNwYWNlLCAxKSk7CkBA
IC00MDA5LDcgKzQwMDksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5lUHJlZldpZHRo
cygpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aXNU
ZXh0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBDYXNlICgzKS4gVGV4dC4KLSAgICAgICAgICAg
ICAgICBSZW5kZXJUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihjaGlsZCk7Cisg
ICAgICAgICAgICAgICAgUmVuZGVyVGV4dCogdCA9IHRvUmVuZGVyVGV4dChjaGlsZCk7CiAKICAg
ICAgICAgICAgICAgICBpZiAodC0+aXNXb3JkQnJlYWsoKSkgewogICAgICAgICAgICAgICAgICAg
ICBtX21pblByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKQEAgLTQ0
MTIsNyArNDQxMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVyKCkKICAg
ICAgICAgLy8gYWRkaW5nIGFuZCByZW1vdmluZyBjaGlsZHJlbiBvZiBmaXJzdExldHRlckNvbnRh
aW5lci4KICAgICAgICAgdmlldygpLT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKIAotICAgICAgICBS
ZW5kZXJUZXh0KiB0ZXh0T2JqID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KGN1cnJDaGlsZCk7
CisgICAgICAgIFJlbmRlclRleHQqIHRleHRPYmogPSB0b1JlbmRlclRleHQoY3VyckNoaWxkKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIENyZWF0ZSBvdXIgcHNldWRvIHN0eWxlIG5vdyB0aGF0IHdl
IGhhdmUgb3VyIGZpcnN0TGV0dGVyQ29udGFpbmVyIGRldGVybWluZWQuCiAgICAgICAgIFJlbmRl
clN0eWxlKiBwc2V1ZG9TdHlsZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldENhY2hlZFBzZXVkb1N0
eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MRVRURVIsCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAJKHJldmlzaW9uIDQwMjE3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250
YWluZXIuY3BwCShyZXZpc2lvbiA0MDIxNykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNv
bnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw5ICsxMjcsOSBAQCB2b2lkIFJlbmRl
ckNvbnRhaW5lcjo6YWRkQ2hpbGQoUmVuZGVyT2JqCiAgICAgfQogICAgIAogICAgIGlmIChuZXdD
aGlsZC0+aXNUZXh0KCkgJiYgbmV3Q2hpbGQtPnN0eWxlKCktPnRleHRUcmFuc2Zvcm0oKSA9PSBD
QVBJVEFMSVpFKSB7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0VG9UcmFuc2Zvcm0g
PSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obmV3Q2hpbGQpLT5vcmlnaW5hbFRleHQoKTsKKyAg
ICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHRleHRUb1RyYW5zZm9ybSA9IHRvUmVuZGVyVGV4dChu
ZXdDaGlsZCktPm9yaWdpbmFsVGV4dCgpOwogICAgICAgICBpZiAodGV4dFRvVHJhbnNmb3JtKQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG5ld0NoaWxkKS0+c2V0VGV4dCh0
ZXh0VG9UcmFuc2Zvcm0ucmVsZWFzZSgpLCB0cnVlKTsKKyAgICAgICAgICAgIHRvUmVuZGVyVGV4
dChuZXdDaGlsZCktPnNldFRleHQodGV4dFRvVHJhbnNmb3JtLnJlbGVhc2UoKSwgdHJ1ZSk7CiAg
ICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkocmV2aXNpb24gNDAyMTcp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcyLDcgKzI3Miw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2gK
ICAgICAgICAgICAgIGlmICh3cmFwcGVyKQogICAgICAgICAgICAgICAgIGJveCA9IHdyYXBwZXIt
PnJvb3QoKTsKICAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1RleHQoKSkgewotICAgICAgICAg
ICAgSW5saW5lVGV4dEJveCogdGV4dEJveCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihjdXJy
KS0+bGFzdFRleHRCb3goKTsKKyAgICAgICAgICAgIElubGluZVRleHRCb3gqIHRleHRCb3ggPSB0
b1JlbmRlclRleHQoY3VyciktPmxhc3RUZXh0Qm94KCk7CiAgICAgICAgICAgICBpZiAodGV4dEJv
eCkKICAgICAgICAgICAgICAgICBib3ggPSB0ZXh0Qm94LT5yb290KCk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoY3Vyci0+aXNJbmxpbmVGbG93KCkpIHsKQEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lkIFJl
bmRlckZsb3c6OnBhaW50TGluZXMoUGFpbnRJbmZvJiBwCiAgICAgICAgIHJldHVybjsKIAogICAg
IFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7Ci0gICAgUmVuZGVyRmxvd1NlcXVlbmNlZFNldCBv
dXRsaW5lT2JqZWN0czsKKyAgICBMaXN0SGFzaFNldDxSZW5kZXJGbG93Kj4gb3V0bGluZU9iamVj
dHM7CiAgICAgaW5mby5vdXRsaW5lT2JqZWN0cyA9ICZvdXRsaW5lT2JqZWN0czsKIAogICAgIC8v
IFNlZSBpZiBvdXIgcm9vdCBsaW5lcyBpbnRlcnNlY3Qgd2l0aCB0aGUgZGlydHkgcmVjdC4gIElm
IHNvLCB0aGVuIHdlIHBhaW50CkBAIC00MzUsOCArNDM1LDggQEAgdm9pZCBSZW5kZXJGbG93Ojpw
YWludExpbmVzKFBhaW50SW5mbyYgcAogICAgIH0KIAogICAgIGlmIChpbmZvLnBoYXNlID09IFBh
aW50UGhhc2VPdXRsaW5lIHx8IGluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lIHx8
IGluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpIHsKLSAgICAgICAgUmVuZGVy
Rmxvd1NlcXVlbmNlZFNldDo6aXRlcmF0b3IgZW5kID0gaW5mby5vdXRsaW5lT2JqZWN0cy0+ZW5k
KCk7Ci0gICAgICAgIGZvciAoUmVuZGVyRmxvd1NlcXVlbmNlZFNldDo6aXRlcmF0b3IgaXQgPSBp
bmZvLm91dGxpbmVPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
TGlzdEhhc2hTZXQ8UmVuZGVyRmxvdyo+OjppdGVyYXRvciBlbmQgPSBpbmZvLm91dGxpbmVPYmpl
Y3RzLT5lbmQoKTsKKyAgICAgICAgZm9yIChMaXN0SGFzaFNldDxSZW5kZXJGbG93Kj46Oml0ZXJh
dG9yIGl0ID0gaW5mby5vdXRsaW5lT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgICAgICBSZW5kZXJGbG93KiBmbG93ID0gKml0OwogICAgICAgICAgICAgZmxvdy0+
cGFpbnRPdXRsaW5lKGluZm8uY29udGV4dCwgdHgsIHR5KTsKICAgICAgICAgfQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA0MDIxNykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKIAotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVy
QXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlZpc2libGVQb3Np
dGlvbi5oIgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24g
NDAyMTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNCArMSw0IEBACi0vKioKKy8qCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgc2VsZWN0IGVsZW1lbnQgcmVuZGVyZXIgaW4gV2ViQ29yZS4KICAqCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMjUsMTAg
KzI1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogCiAjaW5jbHVkZSAiQ1NTU3R5
bGVTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udFNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQu
aCIKICNpbmNsdWRlICJPcHRpb25FbGVtZW50LmgiCkBAIC0zNiw5ICszMyw3IEBACiAjaW5jbHVk
ZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiUmVuZGVyQlIuaCIKICNpbmNsdWRlICJSZW5kZXJT
Y3JvbGxiYXIuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKLSNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJ
KHJldmlzaW9uIDQwMjE3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogI2lmbmRlZiBSZW5kZXJNZW51TGlzdF9o
CiAjZGVmaW5lIFJlbmRlck1lbnVMaXN0X2gKIAotI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94
LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyRmxleGli
bGVCb3guaCIKIAogI2lmIFBMQVRGT1JNKE1BQykKICNkZWZpbmUgUE9QVVBfTUVOVV9QVUxMU19E
T1dOIDAKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1M
U2VsZWN0RWxlbWVudDsKIGNsYXNzIFBvcHVwTWVudTsKK2NsYXNzIFJlbmRlclRleHQ7CiAKIGNs
YXNzIFJlbmRlck1lbnVMaXN0IDogcHVibGljIFJlbmRlckZsZXhpYmxlQm94LCBwcml2YXRlIFBv
cHVwTWVudUNsaWVudCB7CiBwdWJsaWM6CkBAIC00NCw2ICs0NSw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0RWxlbWVudCgpOwogCitwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBpc01lbnVMaXN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAg
dmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQgPSAwKTsKQEAgLTYwLDYgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAKK3B1YmxpYzoKICAgICBib29sIHBvcHVwSXNW
aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9wb3B1cElzVmlzaWJsZTsgfQogICAgIHZvaWQgc2hv
d1BvcHVwKCk7CiAgICAgdm9pZCBoaWRlUG9wdXAoKTsKQEAgLTY4LDEwICs3MSw5IEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7CiAKLXByb3RlY3RlZDoKK3ByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFJlbmRlclN0eWxlOjpEaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi1wcml2YXRlOgogICAgIC8vIFBvcHVwTWVudUNsaWVu
dCBtZXRob2RzCiAgICAgdmlydHVhbCBTdHJpbmcgaXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5k
ZXgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA0
MDIxNykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDI2ICsyNiwxMyBAQAogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCiAjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
Ci0jaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2Vs
ZWN0b3IuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkV2
ZW50SGFuZGxlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAi
SFRNTE9MaXN0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYWdlLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbmNsdWRlICJQb3NpdGlvbi5oIgogI2lu
Y2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ291bnRlci5oIgogI2luY2x1
ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCkBAIC01NSwxMSArNDIsOCBAQAogI2luY2x1ZGUgIlJl
bmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGFibGVSb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9u
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRl
IDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZExlYWtDb3VudGVyLmg+CkBAIC0zNTIsNyArMzM2LDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Omlz
RWRpdGFibGUoKSBjb25zdAogewogICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IDA7CiAg
ICAgaWYgKGlzVGV4dCgpKQotICAgICAgICB0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0Kj4oY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPih0aGlzKSk7CisgICAgICAgIHRleHRS
ZW5kZXJlciA9IHRvUmVuZGVyVGV4dChjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KHRoaXMpKTsK
IAogICAgIHJldHVybiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJgogICAgICAg
ICBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmCkBAIC0yMzU4
LDYgKzIzNDIsMTEgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6cG9zaXRpb25Gbwog
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCBjYXJldE1pbk9mZnNldCgpLCBE
T1dOU1RSRUFNKTsKIH0KIAorVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6cG9zaXRpb25G
b3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIHBvc2l0aW9uRm9y
Q29vcmRpbmF0ZXMocG9pbnQueCgpLCBwb2ludC55KCkpOworfQorCiB2b2lkIFJlbmRlck9iamVj
dDo6dXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKQogewogICAgIGJvb2wgdmFsdWVDaGFuZ2Vk
ID0gKGRyYWdPbiAhPSBtX2lzRHJhZ2dpbmcpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgJKHJldmlzaW9uIDQwMjE3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDAgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDQgQWxsYW4g
U2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI3LDM4ICsyNywxOCBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCi0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDsKIGNsYXNzIEFuaW1hdGlvbkNvbnRyb2xsZXI7Ci1jbGFzcyBDb2xvcjsK
LWNsYXNzIERvY3VtZW50OwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEV2ZW50OwotY2xhc3MgRmxv
YXRSZWN0OwotY2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgSFRNTEFyZWFFbGVtZW50OwogY2xhc3Mg
SGl0VGVzdFJlc3VsdDsKIGNsYXNzIElubGluZUJveDsKIGNsYXNzIElubGluZUZsb3dCb3g7Ci1j
bGFzcyBQb3NpdGlvbjsKLWNsYXNzIFJlbmRlckFyZW5hOwogY2xhc3MgUmVuZGVyQmxvY2s7Ci1j
bGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJGbG93OwotY2xhc3MgUmVuZGVyRnJhbWVTZXQ7
CiBjbGFzcyBSZW5kZXJMYXllcjsKLWNsYXNzIFJlbmRlclRhYmxlOwotY2xhc3MgUmVuZGVyVGV4
dDsKLWNsYXNzIFJlbmRlclZpZXc7Ci1jbGFzcyBTdHJpbmc7Ci0KLXN0cnVjdCBIaXRUZXN0UmVx
dWVzdDsKK2NsYXNzIFZpc2libGVQb3NpdGlvbjsKIAogLyoKICAqICBUaGUgcGFpbnRpbmcgb2Yg
YSBsYXllciBvY2N1cnMgaW4gdGhyZWUgZGlzdGluY3QgcGhhc2VzLiAgRWFjaCBwaGFzZSBpbnZv
bHZlcwpAQCAtMTA0LDExICs4NCwxMCBAQCBlbnVtIEhpdFRlc3RBY3Rpb24gewogICAgIEhpdFRl
c3RGb3JlZ3JvdW5kCiB9OwogCi1lbnVtIFZlcnRpY2FsUG9zaXRpb25IaW50IHsKLSAgICBQb3Np
dGlvblRvcCA9IC0weDdmZmZmZmZmLAotICAgIFBvc2l0aW9uQm90dG9tID0gMHg3ZmZmZmZmZiwK
LSAgICBQb3NpdGlvblVuZGVmaW5lZCA9IHN0YXRpY19jYXN0PGludD4oMHg4MDAwMDAwMCkKLX07
CisvLyBWYWx1ZXMgZm9yIHZlcnRpY2FsUG9zaXRpb24uCitjb25zdCBpbnQgUG9zaXRpb25Ub3Ag
PSAtMHg3ZmZmZmZmZjsKK2NvbnN0IGludCBQb3NpdGlvbkJvdHRvbSA9IDB4N2ZmZmZmZmY7Citj
b25zdCBpbnQgUG9zaXRpb25VbmRlZmluZWQgPSAweDgwMDAwMDAwOwogCiAjaWYgRU5BQkxFKERB
U0hCT0FSRF9TVVBQT1JUKQogc3RydWN0IERhc2hib2FyZFJlZ2lvblZhbHVlIHsKQEAgLTEyOCwx
MCArMTA3LDYgQEAgc3RydWN0IERhc2hib2FyZFJlZ2lvblZhbHVlIHsKIH07CiAjZW5kaWYKIAot
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgSGFzaFNlcXVlbmNlZFNldCwgYnV0IHdlIGRvbid0
IGhhdmUgdGhhdCBkYXRhIHN0cnVjdHVyZSB5ZXQuCi0vLyBUaGlzIG1lYW5zIHRoZSBwYWludCBv
cmRlciBvZiBvdXRsaW5lcyB3aWxsIGJlIHdyb25nLCBhbHRob3VnaCB0aGlzIGlzIGEgbWlub3Ig
aXNzdWUuCi10eXBlZGVmIEhhc2hTZXQ8UmVuZGVyRmxvdyo+IFJlbmRlckZsb3dTZXF1ZW5jZWRT
ZXQ7Ci0KIC8vIEJhc2UgY2xhc3MgZm9yIGFsbCByZW5kZXJpbmcgdHJlZSBvYmplY3RzLgogY2xh
c3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKICAgICBmcmll
bmQgY2xhc3MgUmVuZGVyQ29udGFpbmVyOwpAQCAtMjkxLDcgKzI2Niw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc1dpZGdldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLQogICAg
IGJvb2wgaXNSb290KCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkgPT0gbm9kZSgpOyB9CiAgICAgYm9vbCBpc0JvZHkoKSBjb25zdDsKICAgICBib29sIGlzSFIo
KSBjb25zdDsKQEAgLTQ0Miw3ICs0MTYsNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgc3RydWN0
IFBhaW50SW5mbyB7CiAgICAgICAgIFBhaW50SW5mbyhHcmFwaGljc0NvbnRleHQqIG5ld0NvbnRl
eHQsIGNvbnN0IEludFJlY3QmIG5ld1JlY3QsIFBhaW50UGhhc2UgbmV3UGhhc2UsIGJvb2wgbmV3
Rm9yY2VCbGFja1RleHQsCi0gICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5ld1BhaW50
aW5nUm9vdCwgUmVuZGVyRmxvd1NlcXVlbmNlZFNldCogbmV3T3V0bGluZU9iamVjdHMpCisgICAg
ICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5ld1BhaW50aW5nUm9vdCwgTGlzdEhhc2hTZXQ8
UmVuZGVyRmxvdyo+KiBuZXdPdXRsaW5lT2JqZWN0cykKICAgICAgICAgICAgIDogY29udGV4dChu
ZXdDb250ZXh0KQogICAgICAgICAgICAgLCByZWN0KG5ld1JlY3QpCiAgICAgICAgICAgICAsIHBo
YXNlKG5ld1BoYXNlKQpAQCAtNDU3LDcgKzQzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgUGFpbnRQ
aGFzZSBwaGFzZTsKICAgICAgICAgYm9vbCBmb3JjZUJsYWNrVGV4dDsKICAgICAgICAgUmVuZGVy
T2JqZWN0KiBwYWludGluZ1Jvb3Q7IC8vIHVzZWQgdG8gZHJhdyBqdXN0IG9uZSBlbGVtZW50IGFu
ZCBpdHMgdmlzdWFsIGtpZHMKLSAgICAgICAgUmVuZGVyRmxvd1NlcXVlbmNlZFNldCogb3V0bGlu
ZU9iamVjdHM7IC8vIHVzZWQgdG8gbGlzdCBvdXRsaW5lcyB0aGF0IHNob3VsZCBiZSBwYWludGVk
IGJ5IGEgYmxvY2sgd2l0aCBpbmxpbmUgY2hpbGRyZW4KKyAgICAgICAgTGlzdEhhc2hTZXQ8UmVu
ZGVyRmxvdyo+KiBvdXRsaW5lT2JqZWN0czsgLy8gdXNlZCB0byBsaXN0IG91dGxpbmVzIHRoYXQg
c2hvdWxkIGJlIHBhaW50ZWQgYnkgYSBibG9jayB3aXRoIGlubGluZSBjaGlsZHJlbgogICAgIH07
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwpA
QCAtNDcyLDcgKzQ0Niw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgLypjbGlwWSovLCBpbnQgLypjbGlwSCovLCBpbnQgLyp0eCovLCBpbnQg
Lyp0eSovLCBpbnQgLyp3aWR0aCovLCBpbnQgLypoZWlnaHQqLywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVGbG93Qm94KiA9IDAsIENvbXBvc2l0ZU9wZXJh
dG9yID0gQ29tcG9zaXRlU291cmNlT3ZlcikgeyB9CiAKLSAgICAKICAgICAvKgogICAgICAqIENh
bGN1bGF0ZXMgdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgb2JqZWN0IChvbmx5IGZvciBub24gaW5s
aW5lCiAgICAgICogb2JqZWN0cykKQEAgLTUxNCw3ICs0ODcsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYpOwog
CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQg
eCwgaW50IHkpOwotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IElu
dFBvaW50JiBwb2ludCkgeyByZXR1cm4gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhwb2ludC54KCks
IHBvaW50LnkoKSk7IH0KKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25z
dCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENo
aWxkKFJlbmRlck9iamVjdCopOwogCkBAIC01NjIsOCArNTM1LDggQEAgcHVibGljOgogICAgIElu
dFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2Up
OwogCiAgICAgLy8gQnVpbGQgYW4gYXJyYXkgb2YgcXVhZHMgaW4gYWJzb2x1dGUgY29vcmRzIGZv
ciBsaW5lIGJveGVzCi0gICAgdmlydHVhbCB2b2lkIGNvbGxlY3RBYnNvbHV0ZUxpbmVCb3hRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYsIHVuc2lnbmVkIC8qc3RhcnRPZmZzZXQqLyA9IDAsIHVuc2ln
bmVkIC8qZW5kT2Zmc2V0Ki8gPSBVSU5UX01BWCwgYm9vbCAvKnVzZVNlbGVjdGlvbkhlaWdodCov
ID0gZmFsc2UpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8Rmxv
YXRRdWFkPiYsIGJvb2wgLyp0b3BMZXZlbCovID0gdHJ1ZSkgeyB9OworICAgIHZpcnR1YWwgdm9p
ZCBjb2xsZWN0QWJzb2x1dGVMaW5lQm94UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCB1bnNpZ25l
ZCAvKnN0YXJ0T2Zmc2V0Ki8gPSAwLCB1bnNpZ25lZCAvKmVuZE9mZnNldCovID0gVUlOVF9NQVgs
IGJvb2wgLyp1c2VTZWxlY3Rpb25IZWlnaHQqLyA9IGZhbHNlKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgLyp0b3BMZXZlbCovID0g
dHJ1ZSkgeyB9CiAKICAgICAvLyB0aGUgcmVjdCB0aGF0IHdpbGwgYmUgcGFpbnRlZCBpZiB0aGlz
IG9iamVjdCBpcyBwYXNzZWQgYXMgdGhlIHBhaW50aW5nUm9vdAogICAgIEludFJlY3QgcGFpbnRp
bmdSb290UmVjdChJbnRSZWN0JiB0b3BMZXZlbFJlY3QpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UGF0aC5jcHAJKHJldmlzaW9uIDQwMjE3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDggQEAKICNpZiBFTkFCTEUoU1ZHKQog
I2luY2x1ZGUgIlJlbmRlclBhdGguaCIKIAotI2luY2x1ZGUgPG1hdGguaD4KLQogI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdDb250YWluZXIuaCIKQEAgLTQxLDcgKzQwLDYgQEAKICNpbmNsdWRlICJTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3Qu
aCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKLQogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNDAyMTcpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAKICNpbmNsdWRlICJBWE9iamVjdENh
Y2hlLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQu
aCIKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAJKHJldmlzaW9uIDQwMjE3
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCiAjaW5jbHVkZSAi
U1ZHSW1hZ2VFbGVtZW50LmgiCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcAkocmV2aXNpb24gNDAyMTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDEyIEBACiAjaW5j
bHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgogCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9u
LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgog
I2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdUU3Bhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
VFNwYW4uY3BwCShyZXZpc2lvbiA0MDIxNykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1RTcGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmIEVOQUJMRShT
VkcpCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVFNwYW4uaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5j
bHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiA0MDIxNykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxNiArMzAsMTcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAKICNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSb290LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNs
dWRlICJTVkdMZW5ndGhMaXN0LmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKICNp
bmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiU1ZHVGV4dEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCShyZXZpc2lvbiA0
MDIxNykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHVGV4dFBhdGguaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZs
b2F0UXVhZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5l
VGV4dEJveC5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDQwMjE3KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAK
LS8qKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMgKG1qb25lc0BrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQpAQCAt
MjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxl
Q2VsbC5oIgogCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQuaCIKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA0MDIxNykK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQgKzEsNCBAQAotLyoqCisvKgogICogKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAKICNpbmNs
dWRlICJDaGFyYWN0ZXJOYW1lcy5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJSYW5n
ZS5oIgpAQCAtMzAyLDEzICszMDMsMTMgQEAgSW5saW5lVGV4dEJveCogUmVuZGVyVGV4dDo6Zmlu
ZE5leHRJbmxpbgogICAgICAgICByZXR1cm4gMDsKIAogICAgIElubGluZVRleHRCb3gqIHMgPSBt
X2ZpcnN0VGV4dEJveDsKLSAgICBpbnQgb2ZmID0gcy0+bV9sZW47CisgICAgaW50IG9mZiA9IHMt
PmxlbigpOwogICAgIHdoaWxlIChvZmZzZXQgPiBvZmYgJiYgcy0+bmV4dFRleHRCb3goKSkgewog
ICAgICAgICBzID0gcy0+bmV4dFRleHRCb3goKTsKLSAgICAgICAgb2ZmID0gcy0+bV9zdGFydCAr
IHMtPm1fbGVuOworICAgICAgICBvZmYgPSBzLT5zdGFydCgpICsgcy0+bGVuKCk7CiAgICAgfQog
ICAgIC8vIHdlIGFyZSBub3cgaW4gdGhlIGNvcnJlY3QgdGV4dCBydW4KLSAgICBwb3MgPSAob2Zm
c2V0ID4gb2ZmID8gcy0+bV9sZW4gOiBzLT5tX2xlbiAtIChvZmYgLSBvZmZzZXQpICk7CisgICAg
cG9zID0gKG9mZnNldCA+IG9mZiA/IHMtPmxlbigpIDogcy0+bGVuKCkgLSAob2ZmIC0gb2Zmc2V0
KSApOwogICAgIHJldHVybiBzOwogfQogCkBAIC0zMjUsMTMgKzMyNiwxMyBAQCBWaXNpYmxlUG9z
aXRpb24gUmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JDCiAgICAgICAgIC8vIGF0IHRoZSB5IGNvb3Jk
aW5hdGUgb2YgdGhlIGZpcnN0IGxpbmUgb3IgYWJvdmUKICAgICAgICAgLy8gYW5kIHRoZSB4IGNv
b3JkaW5hdGUgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IHRleHQgYm94IGxlZnQgZWRnZQog
ICAgICAgICBvZmZzZXQgPSBmaXJzdFRleHRCb3goKS0+b2Zmc2V0Rm9yUG9zaXRpb24oeCk7Ci0g
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCBvZmZzZXQgKyBmaXJzdFRl
eHRCb3goKS0+bV9zdGFydCwgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oZWxlbWVudCgpLCBvZmZzZXQgKyBmaXJzdFRleHRCb3goKS0+c3RhcnQoKSwgRE9XTlNU
UkVBTSk7CiAgICAgfQogICAgIGlmIChsYXN0VGV4dEJveCgpICYmIHkgPj0gbGFzdFRleHRCb3go
KS0+cm9vdCgpLT50b3BPdmVyZmxvdygpICYmIHggPj0gbGFzdFRleHRCb3goKS0+bV94ICsgbGFz
dFRleHRCb3goKS0+bV93aWR0aCkgewogICAgICAgICAvLyBhdCB0aGUgeSBjb29yZGluYXRlIG9m
IHRoZSBsYXN0IGxpbmUgb3IgYmVsb3cKICAgICAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUg
aXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBsYXN0IHRleHQgYm94IHJpZ2h0IGVkZ2UKICAgICAgICAg
b2Zmc2V0ID0gbGFzdFRleHRCb3goKS0+b2Zmc2V0Rm9yUG9zaXRpb24oeCk7Ci0gICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCBvZmZzZXQgKyBsYXN0VGV4dEJveCgpLT5t
X3N0YXJ0LCBET1dOU1RSRUFNKTsKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihlbGVt
ZW50KCksIG9mZnNldCArIGxhc3RUZXh0Qm94KCktPnN0YXJ0KCksIERPV05TVFJFQU0pOwogICAg
IH0KIAogICAgIElubGluZVRleHRCb3gqIGxhc3RCb3hBYm92ZSA9IDA7CkBAIC0zNDQsMjkgKzM0
NSwyOSBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JDCiAgICAgICAg
ICAgICAgICAgaWYgKHggPT0gYm94LT5tX3gpCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB4
IGNvb3JkaW5hdGUgaXMgZXF1YWwgdG8gdGhlIGxlZnQgZWRnZSBvZiB0aGlzIGJveAogICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgYWZmaW5pdHkgbXVzdCBiZSBkb3duc3RyZWFtIHNvIHRoZSBw
b3NpdGlvbiBkb2Vzbid0IGp1bXAgYmFjayB0byB0aGUgcHJldmlvdXMgbGluZQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnQoKSwgb2Zmc2V0ICsgYm94
LT5tX3N0YXJ0LCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbihlbGVtZW50KCksIG9mZnNldCArIGJveC0+c3RhcnQoKSwgRE9XTlNUUkVBTSk7
CiAKICAgICAgICAgICAgICAgICBpZiAoeCA8IGJveC0+bV94ICsgYm94LT5tX3dpZHRoKQogICAg
ICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIHggY29vcmRpbmF0ZSBpcyB0byB0aGUgbGVmdCBv
ZiB0aGUgcmlnaHQgZWRnZSBvZiB0aGlzIGJveAogICAgICAgICAgICAgICAgICAgICAvLyBjaGVj
ayB0byBzZWUgaWYgcG9zaXRpb24gZ29lcyBpbiB0aGlzIGJveAotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnQoKSwgb2Zmc2V0ICsgYm94LT5tX3N0YXJ0
LCBvZmZzZXQgPiAwID8gVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUgOiBET1dOU1RSRUFNKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihlbGVtZW50KCksIG9mZnNl
dCArIGJveC0+c3RhcnQoKSwgb2Zmc2V0ID4gMCA/IFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFIDog
RE9XTlNUUkVBTSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWJveC0+cHJldk9uTGluZSgpICYm
IHggPCBib3gtPm1feCkKICAgICAgICAgICAgICAgICAgICAgLy8gYm94IGlzIGZpcnN0IG9uIGxp
bmUKICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMgdG8gdGhl
IGxlZnQgb2YgdGhlIGZpcnN0IHRleHQgYm94IGxlZnQgZWRnZQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnQoKSwgb2Zmc2V0ICsgYm94LT5tX3N0YXJ0
LCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihlbGVtZW50KCksIG9mZnNldCArIGJveC0+c3RhcnQoKSwgRE9XTlNUUkVBTSk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoIWJveC0+bmV4dE9uTGluZSgpKQogICAgICAgICAgICAgICAgICAgICAv
LyBib3ggaXMgbGFzdCBvbiBsaW5lCiAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgeCBj
b29yZGluYXRlIGlzIHRvIHRoZSByaWdodCBvZiB0aGUgbGFzdCB0ZXh0IGJveCByaWdodCBlZGdl
CiAgICAgICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIFZpc2libGVQb3NpdGlvbiwgdXNlIFVQ
U1RSRUFNIGFmZmluaXR5IGlmIHBvc3NpYmxlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCBvZmZzZXQgKyBib3gtPm1fc3RhcnQsIG9mZnNldCA+
IDAgPyBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSA6IERPV05TVFJFQU0pOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnQoKSwgb2Zmc2V0ICsgYm94LT5z
dGFydCgpLCBvZmZzZXQgPiAwID8gVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUgOiBET1dOU1RSRUFN
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxhc3RCb3hBYm92ZSA9IGJveDsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCBsYXN0
Qm94QWJvdmUgPyBsYXN0Qm94QWJvdmUtPm1fc3RhcnQgKyBsYXN0Qm94QWJvdmUtPm1fbGVuIDog
MCwgRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihlbGVtZW50KCksIGxh
c3RCb3hBYm92ZSA/IGxhc3RCb3hBYm92ZS0+c3RhcnQoKSArIGxhc3RCb3hBYm92ZS0+bGVuKCkg
OiAwLCBET1dOU1RSRUFNKTsKIH0KIAogSW50UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVj
dChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhU
b0VuZE9mTGluZSkKQEAgLTg1Nyw3ICs4NTgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNJbmxp
bmVGbG93T3JFbXB0eVRlCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmICghby0+aXNUZXh0
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmdJbXBsKiB0ZXh0ID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyVGV4dCo+KG8pLT50ZXh0KCk7CisgICAgU3RyaW5nSW1wbCogdGV4dCA9IHRv
UmVuZGVyVGV4dChvKS0+dGV4dCgpOwogICAgIGlmICghdGV4dCkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgcmV0dXJuICF0ZXh0LT5sZW5ndGgoKTsKQEAgLTg3Miw3ICs4NzMsNyBAQCBVQ2hh
ciBSZW5kZXJUZXh0OjpwcmV2aW91c0NoYXJhY3RlcigpCiAgICAgICAgICAgICBicmVhazsKICAg
ICBVQ2hhciBwcmV2ID0gJyAnOwogICAgIGlmIChwcmV2aW91c1RleHQgJiYgcHJldmlvdXNUZXh0
LT5pc1RleHQoKSkKLSAgICAgICAgaWYgKFN0cmluZ0ltcGwqIHByZXZpb3VzU3RyaW5nID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHByZXZpb3VzVGV4dCktPnRleHQoKSkKKyAgICAgICAgaWYg
KFN0cmluZ0ltcGwqIHByZXZpb3VzU3RyaW5nID0gdG9SZW5kZXJUZXh0KHByZXZpb3VzVGV4dCkt
PnRleHQoKSkKICAgICAgICAgICAgIHByZXYgPSAoKnByZXZpb3VzU3RyaW5nKVtwcmV2aW91c1N0
cmluZy0+bGVuZ3RoKCkgLSAxXTsKICAgICByZXR1cm4gcHJldjsKIH0KQEAgLTEwMDMsNyArMTAw
NCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6cG9zaXRpb24oSW5saW5lQm94KiBib3gKICAgICBJbmxp
bmVUZXh0Qm94KiBzID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KGJveCk7CiAKICAgICAv
LyBGSVhNRTogc2hvdWxkIG5vdCBiZSBuZWVkZWQhISEKLSAgICBpZiAoIXMtPm1fbGVuKSB7Cisg
ICAgaWYgKCFzLT5sZW4oKSkgewogICAgICAgICAvLyBXZSB3YW50IHRoZSBib3ggdG8gYmUgZGVz
dHJveWVkLgogICAgICAgICBzLT5yZW1vdmUoKTsKICAgICAgICAgcy0+ZGVzdHJveShyZW5kZXJB
cmVuYSgpKTsKQEAgLTExMzIsOSArMTEzMyw5IEBAIGludCBSZW5kZXJUZXh0OjpjYXJldE1pbk9m
ZnNldCgpIGNvbnN0CiAgICAgSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7CiAg
ICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVybiAwOwotICAgIGludCBtaW5PZmZzZXQgPSBib3gt
Pm1fc3RhcnQ7CisgICAgaW50IG1pbk9mZnNldCA9IGJveC0+c3RhcnQoKTsKICAgICBmb3IgKGJv
eCA9IGJveC0+bmV4dFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCi0g
ICAgICAgIG1pbk9mZnNldCA9IG1pbihtaW5PZmZzZXQsIGJveC0+bV9zdGFydCk7CisgICAgICAg
IG1pbk9mZnNldCA9IG1pbjxpbnQ+KG1pbk9mZnNldCwgYm94LT5zdGFydCgpKTsKICAgICByZXR1
cm4gbWluT2Zmc2V0OwogfQogCkBAIC0xMTQzLDkgKzExNDQsOSBAQCBpbnQgUmVuZGVyVGV4dDo6
Y2FyZXRNYXhPZmZzZXQoKSBjb25zdAogICAgIElubGluZVRleHRCb3gqIGJveCA9IGxhc3RUZXh0
Qm94KCk7CiAgICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVybiB0ZXh0TGVuZ3RoKCk7Ci0gICAg
aW50IG1heE9mZnNldCA9IGJveC0+bV9zdGFydCArIGJveC0+bV9sZW47CisgICAgaW50IG1heE9m
ZnNldCA9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCk7CiAgICAgZm9yIChib3ggPSBib3gtPnBy
ZXZUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5wcmV2VGV4dEJveCgpKQotICAgICAgICBtYXhP
ZmZzZXQgPSBtYXgobWF4T2Zmc2V0LCBib3gtPm1fc3RhcnQgKyBib3gtPm1fbGVuKTsKKyAgICAg
ICAgbWF4T2Zmc2V0ID0gbWF4PGludD4obWF4T2Zmc2V0LCBib3gtPnN0YXJ0KCkgKyBib3gtPmxl
bigpKTsKICAgICByZXR1cm4gbWF4T2Zmc2V0OwogfQogCkBAIC0xMTUzLDcgKzExNTQsNyBAQCB1
bnNpZ25lZCBSZW5kZXJUZXh0OjpjYXJldE1heFJlbmRlcmVkT2ZmCiB7CiAgICAgaW50IGwgPSAw
OwogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpKQotICAgICAgICBsICs9IGJveC0+bV9sZW47CisgICAgICAg
IGwgKz0gYm94LT5sZW4oKTsKICAgICByZXR1cm4gbDsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuaAkocmV2aXNpb24gNDAyMTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKICAqIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTE2OSw2ICsxNjksMTggQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aXNBbGxBU0NJSSA6IDE7CiB9OwogCitpbmxpbmUgUmVuZGVyVGV4dCogdG9SZW5kZXJUZXh0KFJl
bmRlck9iamVjdCogbykKK3sgCisgICAgQVNTRVJUKCFvIHx8IG8tPmlzVGV4dCgpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG8pOworfQorCitpbmxpbmUgY29uc3QgUmVu
ZGVyVGV4dCogdG9SZW5kZXJUZXh0KGNvbnN0IFJlbmRlck9iamVjdCogbykKK3sgCisgICAgQVNT
RVJUKCFvIHx8IG8tPmlzVGV4dCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVu
ZGVyVGV4dCo+KG8pOworfQorCiAjaWZkZWYgTkRFQlVHCiBpbmxpbmUgdm9pZCBSZW5kZXJUZXh0
OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDQwMjE3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAj
aW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCkBAIC0zNTksNyArMzYw
LDcgQEAgU3RyaW5nIFJlbmRlclRleHRDb250cm9sOjp0ZXh0V2l0aEhhcmRMaQogICAgIGlmICgh
cmVuZGVyZXIpCiAgICAgICAgIHJldHVybiAiIjsKIAotICAgIElubGluZUJveCogYm94ID0gcmVu
ZGVyZXItPmlzVGV4dCgpID8gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKS0+Zmly
c3RUZXh0Qm94KCkgOiByZW5kZXJlci0+aW5saW5lQm94V3JhcHBlcigpOworICAgIElubGluZUJv
eCogYm94ID0gcmVuZGVyZXItPmlzVGV4dCgpID8gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKS0+Zmly
c3RUZXh0Qm94KCkgOiByZW5kZXJlci0+aW5saW5lQm94V3JhcHBlcigpOwogICAgIGlmICghYm94
KQogICAgICAgICByZXR1cm4gIiI7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCShyZXZpc2lvbiA0MDIxNykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAgc3RhdGljIFRl
eHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgIGlmIChvLmlzVGV4dCgpKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBiZXR0ZXIgdG8gZHVtcCB0aGUgYm91bmRpbmcgYm94
IHggYW5kIHkgcmF0aGVyIHRoYW4gdGhlIGZpcnN0IHJ1bidzIHggYW5kIHksIGJ1dCB0aGF0IHdv
dWxkIGludm9sdmUgdXBkYXRpbmcKICAgICAgICAgLy8gbWFueSB0ZXN0IHJlc3VsdHMuCi0gICAg
ICAgIGNvbnN0IFJlbmRlclRleHQmIHRleHQgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJUZXh0
Jj4obyk7CisgICAgICAgIGNvbnN0IFJlbmRlclRleHQmIHRleHQgPSAqdG9SZW5kZXJUZXh0KCZv
KTsKICAgICAgICAgSW50UmVjdCBsaW5lc0JveCA9IHRleHQubGluZXNCb3VuZGluZ0JveCgpOwog
ICAgICAgICByID0gSW50UmVjdCh0ZXh0LmZpcnN0UnVuWCgpLCB0ZXh0LmZpcnN0UnVuWSgpLCBs
aW5lc0JveC53aWR0aCgpLCBsaW5lc0JveC5oZWlnaHQoKSk7CiAgICAgICAgIGlmIChhZGp1c3RG
b3JUYWJsZUNlbGxzICYmICF0ZXh0LmZpcnN0VGV4dEJveCgpKQpAQCAtMjA1LDcgKzIwNSw3IEBA
IHN0YXRpYyBUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0KICAgICAgICAgICAgIGNv
bnN0IFJlbmRlclRhYmxlQ2VsbCYgY2VsbCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRhYmxl
Q2VsbCY+KG8pOwogICAgICAgICAgICAgciA9IEludFJlY3QoY2VsbC54KCksIGNlbGwueSgpICsg
Y2VsbC5pbnRyaW5zaWNQYWRkaW5nVG9wKCksIGNlbGwud2lkdGgoKSwgY2VsbC5oZWlnaHQoKSAt
IGNlbGwuaW50cmluc2ljUGFkZGluZ1RvcCgpIC0gY2VsbC5pbnRyaW5zaWNQYWRkaW5nQm90dG9t
KCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHIgPSBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJCb3gmPihvKS5mcmFtZVJlY3QoKTsKKyAgICAgICAgICAgIHIgPSB0b1JlbmRlckJveCgm
byktPmZyYW1lUmVjdCgpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkgaW4gb3Jk
ZXIgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBsYXlvdXQgdGVzdCByZXN1
bHRzLgpAQCAtMjQwLDcgKzI0MCw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRl
eHRTdHJlYW0KICAgICAgICAgaWYgKCFvLmlzQm94KCkpCiAgICAgICAgICAgICByZXR1cm4gdHM7
CiAKLSAgICAgICAgY29uc3QgUmVuZGVyQm94JiBib3ggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5k
ZXJCb3gmPihvKTsKKyAgICAgICAgY29uc3QgUmVuZGVyQm94JiBib3ggPSAqdG9SZW5kZXJCb3go
Jm8pOwogICAgICAgICBpZiAoYm94LmJvcmRlclRvcCgpIHx8IGJveC5ib3JkZXJSaWdodCgpIHx8
IGJveC5ib3JkZXJCb3R0b20oKSB8fCBib3guYm9yZGVyTGVmdCgpKSB7CiAgICAgICAgICAgICB0
cyA8PCAiIFtib3JkZXI6IjsKIApAQCAtMzUwLDcgKzM1MCw3IEBAIHN0YXRpYyB2b2lkIHdyaXRl
VGV4dFJ1bihUZXh0U3RyZWFtJiB0cywKICAgICAgICAgICAgIHRzIDw8ICIgb3ZlcnJpZGUiOwog
ICAgIH0KICAgICB0cyA8PCAiOiAiCi0gICAgICAgIDw8IHF1b3RlQW5kRXNjYXBlTm9uUHJpbnRh
YmxlcyhTdHJpbmcoby50ZXh0KCkpLnN1YnN0cmluZyhydW4ubV9zdGFydCwgcnVuLm1fbGVuKSkK
KyAgICAgICAgPDwgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKFN0cmluZyhvLnRleHQoKSku
c3Vic3RyaW5nKHJ1bi5zdGFydCgpLCBydW4ubGVuKCkpKQogICAgICAgICA8PCAiXG4iOwogfQog
CkBAIC0zODMsNyArMzgzLDcgQEAgdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyTwogICAgIHRzIDw8IG8gPDwgIlxuIjsKIAogICAgIGlmIChvLmlzVGV4dCgpICYmICFvLmlz
QlIoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJUZXh0JiB0ZXh0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyVGV4dCY+KG8pOworICAgICAgICBjb25zdCBSZW5kZXJUZXh0JiB0ZXh0ID0gKnRv
UmVuZGVyVGV4dCgmbyk7CiAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4dC5m
aXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAg
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKICAgICAgICAgICAgIHdyaXRlVGV4dFJ1
bih0cywgdGV4dCwgKmJveCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNp
b24gNDAyMTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw4ICsxLDYgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEhU
TUwgd2lkZ2V0IGZvciBLREUuCi0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNSw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvYmlkaS5jcHAJKHJldmlzaW9uIDQwMjE3KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvYmlkaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw3ICsyNzgsNyBAQCBpbmxpbmUgdm9p
ZCBJbmxpbmVJdGVyYXRvcjo6aW5jcmVtZW50KEluCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
b2JqLT5pc1RleHQoKSkgewogICAgICAgICBwb3MrKzsKLSAgICAgICAgaWYgKHBvcyA+PSBzdGF0
aWNfY2FzdDxSZW5kZXJUZXh0Kj4ob2JqKS0+dGV4dExlbmd0aCgpKSB7CisgICAgICAgIGlmIChw
b3MgPj0gdG9SZW5kZXJUZXh0KG9iaiktPnRleHRMZW5ndGgoKSkgewogICAgICAgICAgICAgb2Jq
ID0gYmlkaU5leHQoYmxvY2ssIG9iaiwgcmVzb2x2ZXIpOwogICAgICAgICAgICAgcG9zID0gMDsK
ICAgICAgICAgICAgIG5leHRCcmVha2FibGVQb3NpdGlvbiA9IC0xOwpAQCAtMzA2LDcgKzMwNiw3
IEBAIGlubGluZSBVQ2hhciBJbmxpbmVJdGVyYXRvcjo6Y3VycmVudCgpIGMKICAgICBpZiAoIW9i
aiB8fCAhb2JqLT5pc1RleHQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZW5kZXJUZXh0
KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG9iaik7CisgICAgUmVuZGVyVGV4dCog
dGV4dCA9IHRvUmVuZGVyVGV4dChvYmopOwogICAgIGlmIChwb3MgPj0gdGV4dC0+dGV4dExlbmd0
aCgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzU4LDEyICszNTgsMTIgQEAgc3RhdGljIHZv
aWQgY2hlY2tNaWRwb2ludHMoSW5saW5lSXRlcmF0bwogICAgICAgICAgICAgaWYgKGVuZHBvaW50
Lm9iai0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAoZW5kcG9pbnQub2JqLT5pc1RleHQoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBEb24n
dCBzaGF2ZSBhIGNoYXJhY3RlciBvZmYgdGhlIGVuZHBvaW50IGlmIGl0IHdhcyBmcm9tIGEgc29m
dCBoeXBoZW4uCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQqIHRleHRPYmogPSBzdGF0
aWNfY2FzdDxSZW5kZXJUZXh0Kj4oZW5kcG9pbnQub2JqKTsKKyAgICAgICAgICAgICAgICAgICAg
UmVuZGVyVGV4dCogdGV4dE9iaiA9IHRvUmVuZGVyVGV4dChlbmRwb2ludC5vYmopOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoZW5kcG9pbnQucG9zICsgMSA8IHRleHRPYmotPnRleHRMZW5ndGgo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRPYmotPmNoYXJhY3RlcnMoKVtl
bmRwb2ludC5wb3MrMV0gPT0gc29mdEh5cGhlbikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRwb2ludC5vYmot
PmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0ICpzdGFydFRl
eHQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4oc3RhcnRwb2ludC5vYmopOworICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyVGV4dCAqc3RhcnRUZXh0ID0gdG9SZW5kZXJUZXh0KHN0YXJ0
cG9pbnQub2JqKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFRleHQtPnRleHRM
ZW5ndGgoKSAmJiBzdGFydFRleHQtPmNoYXJhY3RlcnMoKVswXSA9PSBzb2Z0SHlwaGVuKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtNTc4LDcgKzU3OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVIb3Jpem9udGFsUG9z
aXQKICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZWN0IHN0YXRpYyB4IHBvc2l0aW9uLiAg
VGhleSBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgd2lkdGguCiAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU2ltaWxhcmx5LCBsaW5lIGJyZWFrIGJveGVzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSB3aWR0
aC4KICAgICAgICAgaWYgKHItPm1fb2JqZWN0LT5pc1RleHQoKSkgewotICAgICAgICAgICAgUmVu
ZGVyVGV4dCogcnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4oci0+bV9vYmplY3QpOworICAg
ICAgICAgICAgUmVuZGVyVGV4dCogcnQgPSB0b1JlbmRlclRleHQoci0+bV9vYmplY3QpOwogCiAg
ICAgICAgICAgICBpZiAodGV4dEFsaWduID09IEpVU1RJRlkgJiYgciAhPSB0cmFpbGluZ1NwYWNl
UnVuKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBydC0+Y2hh
cmFjdGVycygpOwpAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVI
b3Jpem9udGFsUG9zaXQKICAgICAgICAgICAgIGludCBzcGFjZUFkZCA9IDA7CiAgICAgICAgICAg
ICBpZiAoci0+bV9vYmplY3QtPmlzVGV4dCgpICYmICFyLT5tX2NvbXBhY3QpIHsKICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzcGFjZXMgPSAwOwotICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHItPm1fb2JqZWN0KS0+Y2hh
cmFjdGVycygpOworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdG9S
ZW5kZXJUZXh0KHItPm1fb2JqZWN0KS0+Y2hhcmFjdGVycygpOwogICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSByLT5tX3N0YXJ0OyBpIDwgci0+bV9zdG9wOyBpKyspIHsKICAgICAgICAgICAg
ICAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07CiAgICAgICAgICAgICAgICAgICAgIGlm
IChjID09ICcgJyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHQnKQpAQCAtOTYzLDcgKzk2Myw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAg
ICAgICAgdHJhaWxpbmdTcGFjZVJ1biA9IHJlc29sdmVyLmxvZ2ljYWxseUxhc3RSdW4oKTsKICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0T2JqZWN0ID0gdHJhaWxpbmdTcGFj
ZVJ1bi0+bV9vYmplY3Q7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0T2JqZWN0LT5pc1Rl
eHQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCogbGFzdFRleHQgPSBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obGFzdE9iamVjdCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJUZXh0KiBsYXN0VGV4dCA9IHRvUmVuZGVyVGV4dChsYXN0T2JqZWN0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gbGFzdFRleHQt
PmNoYXJhY3RlcnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaXJzdFNwYWNlID0g
dHJhaWxpbmdTcGFjZVJ1bi0+c3RvcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KGZpcnN0U3BhY2UgPiB0cmFpbGluZ1NwYWNlUnVuLT5zdGFydCgpKSB7CkBAIC0xMjExLDcgKzEy
MTEsNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhCiAgICAgICAg
ICAgICAvLyBXZSBoYXZlIGEgZGlydHkgbGluZS4KICAgICAgICAgICAgIGlmIChSb290SW5saW5l
Qm94KiBwcmV2Um9vdEJveCA9IGN1cnItPnByZXZSb290Qm94KCkpIHsKICAgICAgICAgICAgICAg
ICAvLyBXZSBoYXZlIGEgcHJldmlvdXMgbGluZS4KLSAgICAgICAgICAgICAgICBpZiAoIWRpcnRp
ZWRCeUZsb2F0ICYmICghcHJldlJvb3RCb3gtPmVuZHNXaXRoQnJlYWsoKSB8fCBwcmV2Um9vdEJv
eC0+bGluZUJyZWFrT2JqKCktPmlzVGV4dCgpICYmIHByZXZSb290Qm94LT5saW5lQnJlYWtQb3Mo
KSA+PSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocHJldlJvb3RCb3gtPmxpbmVCcmVha09iaigp
KS0+dGV4dExlbmd0aCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWRpcnRpZWRCeUZsb2F0ICYm
ICghcHJldlJvb3RCb3gtPmVuZHNXaXRoQnJlYWsoKSB8fCBwcmV2Um9vdEJveC0+bGluZUJyZWFr
T2JqKCktPmlzVGV4dCgpICYmIHByZXZSb290Qm94LT5saW5lQnJlYWtQb3MoKSA+PSB0b1JlbmRl
clRleHQocHJldlJvb3RCb3gtPmxpbmVCcmVha09iaigpKS0+dGV4dExlbmd0aCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIGxpbmUgZGlkbid0IGJyZWFrIGNsZWFubHkg
b3IgYnJva2UgYXQgYSBuZXdsaW5lCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzIGJl
ZW4gZGVsZXRlZCwgc28gdHJlYXQgaXQgYXMgZGlydHkgdG9vLgogICAgICAgICAgICAgICAgICAg
ICBjdXJyID0gcHJldlJvb3RCb3g7CkBAIC0xNTMxLDggKzE1MzEsOCBAQCBpbnQgUmVuZGVyQmxv
Y2s6OnNraXBMZWFkaW5nV2hpdGVzcGFjZShJCiBzdGF0aWMgYm9vbCBzaG91bGRTa2lwV2hpdGVz
cGFjZUFmdGVyU3RhcnRPYmplY3QoUmVuZGVyQmxvY2sqIGJsb2NrLCBSZW5kZXJPYmplY3QqIG8p
CiB7CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gYmlkaU5leHQoYmxvY2ssIG8pOwotICAgIGlm
IChuZXh0ICYmICFuZXh0LT5pc0JSKCkgJiYgbmV4dC0+aXNUZXh0KCkgJiYgc3RhdGljX2Nhc3Q8
UmVuZGVyVGV4dCo+KG5leHQpLT50ZXh0TGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIFJlbmRlclRl
eHQqIG5leHRUZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG5leHQpOworICAgIGlmIChu
ZXh0ICYmICFuZXh0LT5pc0JSKCkgJiYgbmV4dC0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KG5l
eHQpLT50ZXh0TGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIFJlbmRlclRleHQqIG5leHRUZXh0ID0g
dG9SZW5kZXJUZXh0KG5leHQpOwogICAgICAgICBVQ2hhciBuZXh0Q2hhciA9IG5leHRUZXh0LT5j
aGFyYWN0ZXJzKClbMF07CiAgICAgICAgIGlmIChuZXh0VGV4dC0+c3R5bGUoKS0+aXNDb2xsYXBz
aWJsZVdoaXRlU3BhY2UobmV4dENoYXIpKSB7CiAgICAgICAgICAgICBhZGRNaWRwb2ludChJbmxp
bmVJdGVyYXRvcigwLCBvLCAwKSk7CkBAIC0xNzY4LDcgKzE3NjgsNyBAQCBJbmxpbmVJdGVyYXRv
ciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICBpZiAoIXBvcykKICAgICAg
ICAgICAgICAgICBhcHBsaWVkU3RhcnRXaWR0aCA9IGZhbHNlOwogCi0gICAgICAgICAgICBSZW5k
ZXJUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG8pOworICAgICAgICAgICAgUmVu
ZGVyVGV4dCogdCA9IHRvUmVuZGVyVGV4dChvKTsKIAogICAgICAgICAgICAgaW50IHN0cmxlbiA9
IHQtPnRleHRMZW5ndGgoKTsKICAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4gLSBwb3M7CkBA
IC0xODE1LDcgKzE4MTUsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRM
aW5lCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJlZm9yZVNvZnRIeXBoZW4gPSBJbmxpbmVJdGVyYXRvcigwLCBvLCBwb3MgLSAx
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiZWZvcmVTb2Z0SHlwaGVuID0gSW5saW5lSXRlcmF0b3IoMCwgbGFzdCwgbGFzdC0+aXNU
ZXh0KCkgPyBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obGFzdCktPnRleHRMZW5ndGgoKSAtIDEg
OiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTb2Z0SHlwaGVuID0gSW5s
aW5lSXRlcmF0b3IoMCwgbGFzdCwgbGFzdC0+aXNUZXh0KCkgPyB0b1JlbmRlclRleHQobGFzdCkt
PnRleHRMZW5ndGgoKSAtIDEgOiAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR3byBj
b25zZWN1dGl2ZSBzb2Z0IGh5cGhlbnMuIEF2b2lkIG92ZXJsYXBwaW5nIG1pZHBvaW50cy4KICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzTnVtTWlkcG9pbnRzICYmIHNtaWRwb2ludHMtPmF0
KHNOdW1NaWRwb2ludHMgLSAxKS5vYmogPT0gbyAmJiBzbWlkcG9pbnRzLT5hdChzTnVtTWlkcG9p
bnRzIC0gMSkucG9zID09IHBvcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzTnVtTWlk
cG9pbnRzLS07CkBAIC0xOTA1LDcgKzE5MDUsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9j
azo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVXYXNUb29X
aWRlIHx8IHcgKyB0bXBXID4gd2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobEJyZWFrLm9iaiAmJiBzaG91bGRQcmVzZXJ2ZU5ld2xpbmUobEJyZWFrLm9iaikgJiYgbEJy
ZWFrLm9iai0+aXNUZXh0KCkgJiYgIXN0YXRpY19jYXN0PFJlbmRlclRleHQqPihsQnJlYWsub2Jq
KS0+aXNXb3JkQnJlYWsoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obEJyZWFrLm9iaikt
PmNoYXJhY3RlcnMoKVtsQnJlYWsucG9zXSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxCcmVhay5vYmogJiYgc2hvdWxkUHJlc2VydmVOZXdsaW5lKGxCcmVhay5v
YmopICYmIGxCcmVhay5vYmotPmlzVGV4dCgpICYmICF0b1JlbmRlclRleHQobEJyZWFrLm9iaikt
PmlzV29yZEJyZWFrKCkgJiYgdG9SZW5kZXJUZXh0KGxCcmVhay5vYmopLT5jaGFyYWN0ZXJzKClb
bEJyZWFrLnBvc10gPT0gJ1xuJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN0b3BwZWRJZ25vcmluZ1NwYWNlcyAmJiBwb3MgPiAwKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHN0b3AgcmlnaHQgYmVmb3JlIHRoZSBu
ZXdsaW5lIGFuZCB0aGVuIHN0YXJ0IHVwIGFnYWluLgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkTWlkcG9pbnQoSW5saW5lSXRlcmF0b3IoMCwgbywgcG9zIC0gMSkpOyAv
LyBTdG9wCkBAIC0yMDI2LDcgKzIwMjYsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6
ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yQnJlYWsgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjaGVja0ZvckJyZWFr
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQqIG5leHRUZXh0ID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG5leHQpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJU
ZXh0KiBuZXh0VGV4dCA9IHRvUmVuZGVyVGV4dChuZXh0KTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKG5leHRUZXh0LT50ZXh0TGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFVD
aGFyIGMgPSBuZXh0VGV4dC0+Y2hhcmFjdGVycygpWzBdOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCAoYyA9PSAnXG4nICYmICFzaG91bGRQcmVz
ZXJ2ZU5ld2xpbmUobmV4dCkpKQpAQCAtMjE1MCw3ICsyMTUwLDcgQEAgSW5saW5lSXRlcmF0b3Ig
UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgICAgICAvLyAgICBsQnJlYWsucG9zLS07CiAg
ICAgICAgIGVsc2UgaWYgKGxCcmVhay5vYmogPT0gMCAmJiB0cmFpbGluZ1NwYWNlT2JqZWN0LT5p
c1RleHQoKSkgewogICAgICAgICAgICAgLy8gQWRkIGEgbmV3IGVuZCBtaWRwb2ludCB0aGF0IHN0
b3BzIHJpZ2h0IGF0IHRoZSB2ZXJ5IGVuZC4KLSAgICAgICAgICAgIFJlbmRlclRleHQqIHRleHQg
PSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHRyYWlsaW5nU3BhY2VPYmplY3QpOworICAgICAg
ICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRvUmVuZGVyVGV4dCh0cmFpbGluZ1NwYWNlT2JqZWN0
KTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHQtPnRleHRMZW5ndGgoKTsKICAg
ICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IGxlbmd0aCA+PSAyID8gbGVuZ3RoIC0gMiA6IFVJTlRf
TUFYOwogICAgICAgICAgICAgSW5saW5lSXRlcmF0b3IgZW5kTWlkKDAsIHRyYWlsaW5nU3BhY2VP
YmplY3QsIHBvcyk7CkBAIC0yMTcwLDcgKzIxNzAsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJC
bG9jazo6ZmluZE5leHRMaW5lCiAgICAgaWYgKGxCcmVhay5vYmogJiYgbEJyZWFrLnBvcyA+PSAy
ICYmIGxCcmVhay5vYmotPmlzVGV4dCgpKSB7CiAgICAgICAgIC8vIEZvciBzb2Z0IGh5cGhlbnMg
b24gbGluZSBicmVha3MsIHdlIGhhdmUgdG8gY2hvcCBvdXQgdGhlIG1pZHBvaW50cyB0aGF0IG1h
ZGUgdXMKICAgICAgICAgLy8gaWdub3JlIHRoZSBoeXBoZW4gc28gdGhhdCBpdCB3aWxsIHJlbmRl
ciBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgotICAgICAgICBVQ2hhciBjID0gc3RhdGljX2Nhc3Q8
UmVuZGVyVGV4dCo+KGxCcmVhay5vYmopLT5jaGFyYWN0ZXJzKClbbEJyZWFrLnBvcy0xXTsKKyAg
ICAgICAgVUNoYXIgYyA9IHRvUmVuZGVyVGV4dChsQnJlYWsub2JqKS0+Y2hhcmFjdGVycygpW2xC
cmVhay5wb3MtMV07CiAgICAgICAgIGlmIChjID09IHNvZnRIeXBoZW4pCiAgICAgICAgICAgICBj
aG9wTWlkcG9pbnRzQXQobEJyZWFrLm9iaiwgbEJyZWFrLnBvcy0yKTsKICAgICB9CkluZGV4OiBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwko
cmV2aXNpb24gNDAyMjApCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDA5LTAxLTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcg
MjM1MjI6IHVzZSBjaGVja2VkIGNhc3RzIGZvciByZW5kZXIgdHJlZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjIKKworICAgICAgICBTdGVwIG9u
ZTogUmVuZGVyVGV4dC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViUmVuZGVyTm9kZS5tbToKKyAg
ICAgICAgKGNvcHlSZW5kZXJOb2RlKTogVXNlIHRvUmVuZGVyVGV4dC4KKwogMjAwOS0wMS0yMyAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyc3RhbXBl
ZCBieSBEYXJpbiBBZGxlcgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlck5vZGUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlck5vZGUubW0JKHJl
dmlzaW9uIDQwMjE3KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlck5vZGUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTk0LDE0ICs5NCwxNCBAQCBzdGF0aWMgV2ViUmVuZGVyTm9kZSAqY29w
eVJlbmRlck5vZGUoUmVuCiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVpZ2h0ID0gMDsK
ICAgICBpZiAobm9kZS0+aXNCb3goKSkgewotICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHN0YXRp
Y19jYXN0PFJlbmRlckJveCo+KG5vZGUpOworICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVu
ZGVyQm94KG5vZGUpOwogICAgICAgICB4ID0gYm94LT54KCk7CiAgICAgICAgIHkgPSBib3gtPnko
KTsKICAgICAgICAgd2lkdGggPSBib3gtPndpZHRoKCk7CiAgICAgICAgIGhlaWdodCA9IGJveC0+
aGVpZ2h0KCk7CiAgICAgfSBlbHNlIGlmIChub2RlLT5pc1RleHQoKSkgewogICAgICAgICAvLyBG
SVhNRTogUHJlc2VydmUgb2xkIGJlaGF2aW9yIGV2ZW4gdGhvdWdoIGl0J3Mgc3RyYW5nZS4KLSAg
ICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihub2RlKTsK
KyAgICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRvUmVuZGVyVGV4dChub2RlKTsKICAgICAgICAg
eCA9IHRleHQtPmZpcnN0UnVuWCgpOwogICAgICAgICB5ID0gdGV4dC0+Zmlyc3RSdW5ZKCk7CiAg
ICAgICAgIEludFJlY3QgYm94ID0gdGV4dC0+bGluZXNCb3VuZGluZ0JveCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27036</attachid>
            <date>2009-01-26 09:30:06 -0800</date>
            <delta_ts>2009-08-04 15:54:11 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>RenderCast2Patch.txt</filename>
            <type>text/plain</type>
            <size>108733</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYzIEBACisyMDA5LTAxLTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcg
MjM1MjI6IHVzZSBjaGVja2VkIGNhc3RzIGZvciByZW5kZXIgdHJlZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjIKKworICAgICAgICBTdGVwIHR3
bzogUmVuZGVyQmxvY2ssIFJlbmRlckltYWdlLCBSZW5kZXJWaWV3LgorCisgICAgICAgICogZWRp
dGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rpb25DaGFuZ2Up
OgorICAgICAgICBGaXhlZCBidWcgd2hlcmUgdGhpcyBhc3N1bWVkIHRoZSByZW5kZXJlciBvZiB0
aGUgc3RhcnQgbm9kZSBvZiB0aGUKKyAgICAgICAgc2VsZWN0aW9uIGlzIGEgUmVuZGVyVmlldy4g
SW5zdGVhZCBjYWxsIERvY3VtZW50OjpyZW5kZXJWaWV3LgorCisgICAgICAgICogYmluZGluZ3Mv
b2JqYy9ET00ubW06CisgICAgICAgICgtW0RPTUVsZW1lbnQgaW1hZ2VdKTogVXNlIHRvUmVuZGVy
SW1hZ2UuCisgICAgICAgICgtW0RPTUVsZW1lbnQgX2ltYWdlVElGRlJlcHJlc2VudGF0aW9uXSk6
IERpdHRvLgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6aXNDYW5kaWRhdGUpOiBVc2UgdG9SZW5kZXJCbG9j
ay4KKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjphZGRCbG9ja1BsYWNlaG9sZGVySWZOZWVk
ZWQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24pOiBEaXR0by4KKworICAgICAgICAqIGVkaXRp
bmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyOjpub2RlV2lsbEJlUmVtb3ZlZCk6IFVzZSBEb2N1bWVudDo6cmVuZGVyVmlldygp
CisgICAgICAgIGluc3RlYWQgb2YgY2FzdGluZyB0byBSZW5kZXJWaWV3Ki4KKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlY29tcHV0ZUNhcmV0UmVjdCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6aW52YWxpZGF0ZUNhcmV0UmVj
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9jdXNl
ZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKTogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKTogVXNlIHRvUmVuZGVySW1hZ2UuCisgICAgICAgICogaHRtbC9IVE1M
RW1iZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQ6OmF0
dGFjaCk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6YXR0YWNoKTogRGl0dG8u
CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjphdHRhY2gpOiBEaXR0by4KKyAgICAgICAgKiBo
dG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RF
bGVtZW50OjphdHRhY2gpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudDo6YXR0YWNoKTogRGl0dG8u
CisgICAgICAgICogbG9hZGVyL0ltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlTG9hZGVyOjpzZXRJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2Fk
ZXI6OnVwZGF0ZUZyb21FbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxv
YWRlcjo6bm90aWZ5RmluaXNoZWQpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKTogVXNlIHRvUmVuZGVyQmxvY2sKKyAg
ICAgICAgYW5kIHRvUmVuZGVySW1hZ2UuIEdldCB0aGUgem9vbSBmYWN0b3IgZnJvbSB0aGUgaW1h
Z2UncyBSZW5kZXJTdHlsZSBpbnN0ZWFkIG9mCisgICAgICAgIGdldHRpbmcgaXQgZnJvbSB0aGUg
UmVuZGVyVmlldy4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmxheW91dENvdW50KTogVXNlIHRvUmVuZGVyVmlldy4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkcmVuKTogVXNlIHRvUmVuZGVySW1hZ2UuIEFs
c28gdXNlCisgICAgICAgIGlzSW1hZ2UgaW5zdGVhZCBvZiBpc1JlbmRlckltYWdlLgorCisgICAg
ICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDYWNo
ZWRJbWFnZSk6IFVzZSB0b1JlbmRlckltYWdlLgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2Up
OiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6bGF5b3V0KTogVXNlIHRvUmVuZGVyVmlldy4KKyAgICAgICAgKiBwYWdl
L1ByaW50Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcmludENvbnRleHQ6OmNvbXB1
dGVQYWdlUmVjdHMpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL2Nocm9taXVtL0ZyYW1lQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVBhZ2VSZWN0c0ZvckZyYW1lKTogRGl0
dG8uCisgICAgICAgICogcGFnZS93aW4vRnJhbWVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZVBhZ2VSZWN0c0ZvckZyYW1lKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDYWNo
ZWRJbWFnZSk6IFVzZSB0b1JlbmRlckltYWdlLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3
cml0ZUltYWdlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6IERpdHRvLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3F0
L0NsaXBib2FyZFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENhY2hlZEltYWdlKTogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS93aW4vQ2xpcGJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENhY2hlZEltYWdl
KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6IERpdHRvLgorICAgICAgICAq
IHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RS
ZXN1bHQ6OmltYWdlKTogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvTGlzdE1hcmtlckJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaXN0TWFya2VyQm94Ojppc1RleHQpOiBDaGFuZ2Ug
dG8gY2FsbCB0aGUgbmV3IGlzVGV4dE1hcmtlciBmdW5jdGlvbgorICAgICAgICByYXRoZXIgdGhh
biB0aGUgb2xkIGlzVGV4dCBmdW5jdGlvbjsgdGhlIG9sZCBuYW1lIGNvbmZsaWN0ZWQgd2l0aAor
ICAgICAgICBSZW5kZXJPYmplY3Q6OmlzVGV4dC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c3R5bGVXaWxsQ2hh
bmdlKTogVXNlIHRvUmVuZGVyQmxvY2suCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
cmVtb3ZlQ2hpbGQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlv
dXRCbG9jayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmhhbmRsZUNv
bXBhY3RDaGlsZCk6IFJlbW92ZWQgdW5uZWVkZWQgY2FsbCB0byB0b1JlbmRlckJveC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMpOiBVc2UgdG9SZW5kZXJC
bG9jay4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjbGVhckZsb2F0c0lmTmVlZGVk
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lSG9yaXpv
bnRhbFBvc2l0aW9uKTogUmVtb3ZlZCB1bm5lZWRlZCBjYWxsCisgICAgICAgIHRvIHRvUmVuZGVy
Qm94LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4p
OiBBZGRlZCBtaXNzaW5nIGNhbGwgdG8gaXNSZW5kZXJCbG9jaworICAgICAgICBiZWZvcmUgY2Fs
bGluZyBhZGRPdmVyaGFuZ2luZ0Zsb2F0cy4gVGhpcyB3YXMgYSBidWcgaW4gdGhlIG9ic2N1cmUg
Y2FzZXMgd2hlcmUKKyAgICAgICAgd2UnZCBoYXZlIGEgY2hpbGQgdGhhdCdzIG5vdCBhIFJlbmRl
ckJsb2NrOyBjYXVnaHQgYnkgcmVncmVzc2lvbiB0ZXN0cy4gSSdtIG5vdAorICAgICAgICBlbnRp
cmVseSBzdXJlIHRoYXQgdGhpcyBuZXcgYmVoYXZpb3IgaXMgY29ycmVjdCBmb3IgYWxsIGNhc2Vz
LiBJcyB0aGVyZSBhCisgICAgICAgIHBvc3NpYmlsaXR5IHRoYXQgbm9uLVJlbmRlckJsb2NrIG9i
amVjdHMgY291bGQgaGF2ZSBvdmVyaGFuZ2luZyBmbG9hdHMgaW5zaWRlCisgICAgICAgIHRoZWly
IGRlc2NlbmRhbnRzPyBJZiBzbywgaG93IHNob3VsZCB3ZSBoYW5kbGUgdGhhdD8KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpmaWxsQmxvY2tTZWxlY3Rpb25HYXBzKTogVXNlIHRvUmVu
ZGVyQmxvY2suCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb250YWluc0Zsb2F0cyk6IE1h
ZGUgdGhpcyBub24taW5saW5lIHNvIHdlIGRvbid0IGhhdmUKKyAgICAgICAgdG8gaW5jbHVkZSBE
ZXByZWNhdGVkUHRyTGlzdC5oIGluIHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCk6IFVzZSB0b1Jl
bmRlckJsb2NrLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KTog
VXNlIHRvUmVuZGVyVmlldy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpmaXJzdExp
bmVCbG9jayk6IFVzZSB0b1JlbmRlckJsb2NrLgorICAgICAgICAoV2ViQ29yZTo6Z2V0TGluZUF0
SW5kZXgpOiBVc2UgdG9SZW5kZXJCbG9jay4KKyAgICAgICAgKFdlYkNvcmU6OmdldEhlaWdodEZv
ckxpbmVDb3VudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxpbmVD
b3VudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdEZvckJv
cmRlckZpdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNsZWFyVHJ1
bmNhdGlvbik6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6IFJl
bW92ZWQgRGVwcmVjYXRlZFB0ckxpc3QuaCBmcm9tIHRoaXMgaGVhZGVyLAorICAgICAgICBzaW5j
ZSB0aGVyZSB3YXMgbm90aGluZyB0aGF0IG5lZWRlZCBpdCBhbmQgbmVlZGVkIHRvIGJlIGluIHRo
ZSBoZWFkZXIuIE1vdmVkCisgICAgICAgIGNvbnRhaW5zRmxvYXRzIGludG8gdGhlIC5jcHAgZmls
ZSAtLSBpdCdzIGEgdmlydHVhbCBmdW5jdGlvbiBhbnl3YXkuIE1vdmVkCisgICAgICAgIGlzUmVu
ZGVyQmxvY2sgaW50byB0aGUgcHJpdmF0ZSBzZWN0aW9uLiBBZGRlZCB0b1JlbmRlckJsb2NrLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKTogVXNlIHJlbmRlclZpZXcgaW5zdGVhZCBvZiBjYXN0
aW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0Zvcklt
YWdlKTogVXNlIHRvUmVuZGVyVmlldy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2Fs
Y3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnkpOiBDYWxsIHZpZXcoKS0+dmlld1JlY3QoKQor
ICAgICAgICBiZWNhdXNlIEkgcmVtb3ZlZCBSZW5kZXJPYmplY3Q6OnZpZXdSZWN0LCBzaW5jZSBp
dCBhZGRlZCBhbiBleHRyYSBsZXZlbCBvZgorICAgICAgICB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGwg
d2l0aG91dCBhZGRpbmcgYW55IHJlYWwgY2xhcml0eS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6b2Zmc2V0RnJvbUNvbnRhaW5lcik6IFVzZSB0b1JlbmRlckJsb2NrLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjUmVwbGFjZWRIZWlnaHRVc2luZyk6IFVz
ZSB0b1JlbmRlclZpZXcuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmF2YWlsYWJsZUhl
aWdodFVzaW5nKTogVXNlIHRvUmVuZGVyQmxvY2suCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94Lmg6IEFkZGVkIG92ZXJsb2FkIHRvIGNhdGNoIHJlZHVuZGFudCB1c2VzIG9mIHRvUmVu
ZGVyQm94CisgICAgICAgIGFuZCBjYXVzZSBhIGNvbXBpbGUtdGltZSBlcnJvci4KKworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6IFVwZGF0ZSBpbmNsdWRl
cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbEJveCk6IFJlbW92
ZSB1bm5lZWRlZCBjYXN0cyBhbmQKKyAgICAgICAgdXNlIHRvUmVuZGVyQmxvY2suCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCb3gpOiBEaXR0by4K
KworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6c2V0SW1hZ2VTaXplRm9yQWx0VGV4dCk6IEVsaW1pbmF0ZWQgdW5uZWVk
ZWQgYXJndW1lbnQuCisgICAgICAgIEl0J3MgYWx3YXlzIHRoZSBzYW1lIGFzIG1fY2FjaGVkSW1h
Z2UgLS0gSSBjaGVja2VkIGF0IGFsbCBjYWxsIHNpdGVzLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW1hZ2U6OmltYWdlQ2hhbmdlZCk6IFVwZGF0ZWQgdG8gcmVtb3ZlIGFyZ3VtZW50IGZvciBj
YWxsCisgICAgICAgIHRvIHNldEltYWdlU2l6ZUZvckFsdFRleHQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZCk6IENoYW5nZWQgdG8gdXNlIHRoZSBuZXcgdmVy
c2lvbiBvZgorICAgICAgICB0aGUgaW1hZ2UgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBJbnRTaXpl
LiBBbHNvIHJlbW92ZWQgdGhlIHNlY29uZCBjYWxsIHRvCisgICAgICAgIHRoZSBpbWFnZSBmdW5j
dGlvbiBieSBrZWVwaW5nIHRoZSBpbWFnZSBpbiBhIFJlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckltYWdlOjppbWFnZSk6IE1vdmVkIHRoZXNlIG91dCBvZiB0aGUgaGVhZGVyLCBiZWNh
dXNlIHRoZXkKKyAgICAgICAgYXJlIHZpcnR1YWwgc28gaXQncyBub3QgaGVscGZ1bCB0byBoYXZl
IHRoZW0gYmUgaW5saW5lcywgYW5kIHRoZXkgd2VyZSB0aGUKKyAgICAgICAgb25seSBkZXBlbmRl
bmN5IG5vIENhY2hlZEltYWdlIGluIHRoZSBoZWFkZXIuIEFsc28gY2hhbmdlZCB0aGlzIG9uZSB0
byB0YWtlCisgICAgICAgIGFuIEludFNpemUgaW5zdGVhZCBvZiBzZXBhcmF0ZSBoZWlnaHQgYW5k
IHdpZHRoLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmVycm9yT2NjdXJyZWQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjp1c2VzSW1hZ2VDb250YWluZXJT
aXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6c2V0SW1hZ2VDb250
YWluZXJTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6aW1hZ2VI
YXNSZWxhdGl2ZVdpZHRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6
aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW1hZ2U6OmltYWdlU2l6ZSk6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmg6IFJlbW92ZWQgaW5jbHVkZSBvZiBDYWNoZWRJbWFnZS5oLiBNYWRlIGxvdHMgbW9yZQor
ICAgICAgICB0aGluZ3MgcHJpdmF0ZS4gUmVtb3ZlZCBpc1JlbmRlckltYWdlLCBzaW5jZSBpdCdz
IHRoZSBzYW1lIHRoaW5nIGFzIGlzSW1hZ2UKKyAgICAgICAgd2l0aCBhIGRpZmZlcmVudCBuYW1l
LiBSZW1vdmVkIHRoZSB1bm5lZWRlZCBhcmd1bWVudCBmcm9tIHNldEltYWdlU2l6ZUZvckFsdFRl
eHQuCisgICAgICAgIE1vdmVkIGRlZmluaXRpb24gb2YgdGhlIG1lbWJlciBmdW5jdGlvbnMgdGhh
dCBkZXJlZmVyZW5jZSBDYWNoZWRJbWFnZSBpbnRvIHRoZQorICAgICAgICAuY3BwIGZpbGUuIFNp
bmNlIHRoZXkncmUgdmlydHVhbCBmdW5jdGlvbnMsIGl0IHdhc24ndCBoZWxwaW5nIHRvIGhhdmUg
aW5saW5lCisgICAgICAgIGltcGxlbWVudGF0aW9ucyBhbnl3YXkuIEFkZGVkIHRvUmVuZGVySW1h
Z2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2VHZW5lcmF0ZWRDb250ZW50Lmg6
IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZXMuIE1hZGUKKyAgICAgICAgYWxtb3N0IGFsbCBtZW1i
ZXJzIHByaXZhdGUuIFVwZGF0ZWQgaW1hZ2UgZnVuY3Rpb24gdG8gdGFrZSBhbiBJbnRTaXplIHRv
IG1hdGNoCisgICAgICAgIHRoZSBiYXNlIGNsYXNzIGZ1bmN0aW9uLgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1
cGRhdGVMYXllclBvc2l0aW9uKTogUmVtb3ZlZCB1bm5lZWRlZCB0b1JlbmRlckJveCBjYXN0cy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQpOiBVc2UgdG9SZW5kZXJCbG9jay4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0
SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXJlbnRPZkZpcnN0TGluZUJveCk6IFVz
ZSB0b1JlbmRlckJsb2NrLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnBvc2l0
aW9uTGlzdE1hcmtlcik6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6aXNJbWFnZU1h
cmtlcik6IFJlbmFtZWQgZnJvbSBpc0ltYWdlIHRvIGF2b2lkCisgICAgICAgIG92ZXJyaWRpbmcg
dGhlIHZpcnR1YWwgaXNJbWFnZSBmdW5jdGlvbiBmcm9tIFJlbmRlck9iamVjdC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KTogVXBkYXRlZCB0byBjYWxsIGlzSW1h
Z2UuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpsYXlvdXQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmNhbGNQcmVmV2lkdGhzKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjp1cGRhdGVNYXJnaW5zKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpsaW5lSGVpZ2h0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpiYXNlbGluZVBvc2l0
aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxh
dGl2ZU1hcmtlclJlY3QpOiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmg6IE1hZGUgYSBsb3QgbW9yZSB0aGluZ3MgcHJpdmF0ZS4gQ2hhbmdlZCBuYW1lCisg
ICAgICAgIG9mIGlzSW1hZ2UgYW5kIGlzVGV4dCB0byBpc0ltYWdlTWFya2VyIGFuZCBpc1RleHRN
YXJrZXIgdG8gYXZvaWQgb3ZlcnJpZGluZworICAgICAgICB0aGUgaXNJbWFnZSB2aXJ0dWFsIGZ1
bmN0aW9uIGFuZCB0aGUgaXNUZXh0IG5vbi12aXJ0dWFsIGZ1bmN0aW9uIGZyb20KKyAgICAgICAg
UmVuZGVyT2JqZWN0LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9jayk6IFVzZSB0b1Jl
bmRlclZpZXcgYW5kIHRvUmVuZGVyQmxvY2suCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OnJlcGFpbnQpOiBVc2UgdG9SZW5kZXJWaWV3LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpyZXBhaW50UmVjdGFuZ2xlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KTogVXNlIHRvUmVuZGVyQmxvY2su
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmhhbmRsZUR5bmFtaWNGbG9hdFBvc2l0
aW9uQ2hhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnZpZXcp
OiBVc2UgcmVuZGVyVmlldyBpbnN0ZWFkIG9mIGNhc3RpbmcuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21PYmplY3RMaXN0cyk6IFVzZSB0b1JlbmRlckJsb2NrLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzY2hlZHVsZVJlbGF5b3V0KTogVXNlIHRv
UmVuZGVyVmlldy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bWF4aW1hbE91dGxp
bmVTaXplKTogVXNlIHJlbmRlclZpZXcgaW5zdGVhZCBvZiBjYXN0aW5nLgorCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOiBSZW1vdmVkIGlzUmVuZGVySW1hZ2UgYW5kIHZpZXdS
ZWN0IHZpcnR1YWwgZnVuY3Rpb25zLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcDogVXBkYXRlZCBpbmNsdWRlcy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YWRkQ2hpbGQpOiBVc2Ug
dG9SZW5kZXJCbG9jay4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpyZWNhbGNTZWN0
aW9ucyk6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOiBVcGRh
dGVkIGluY2x1ZGVzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDogQWRkZWQg
b3ZlcmxvYWQgdG8gY2F0Y2ggcmVkdW5kYW50IHVzZXMgb2YgdG9SZW5kZXJUZXh0CisgICAgICAg
IGFuZCBjYXVzZSBhIGNvbXBpbGUtdGltZSBlcnJvci4KKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bDo6c3R5bGVEaWRDaGFuZ2UpOiBVc2UgdG9SZW5kZXJCbG9jay4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphZGp1c3RDb250cm9sSGVpZ2h0QmFzZWRPbkxp
bmVIZWlnaHQpOgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGNhc3QuCisKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVmlldy5oOiBSZW1vdmVkIGluY2x1ZGUgb2YgRnJhbWUuaC4gUmVtb3Zl
ZCB6b29tRmFjdG9yCisgICAgICAgIGZ1bmN0aW9uLCBzaWNlIGl0IHdhcyB1c2VkIGluIG9ubHkg
b25lIHBsYWNlIGFuZCBhbHNvIHdhcyBhIGJpdCBhbWJpZ3VvdXMuCisgICAgICAgIE1hZGUgbW9y
ZSB0aGluZ3MgcHJpdmF0ZS4gTWFkZSBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCBhbmQg
dmlld1JlY3QKKyAgICAgICAgbm9uLXZpcnR1YWwuIEFkZGVkIHRvUmVuZGVyVmlldy4gUmVtb3Zl
ZCB1bi1oZWxwZnVsIHVzZSBvZiBiaXRmaWVsZHMgaW4KKyAgICAgICAgTGF5b3V0U3RhdGVNYWlu
dGFpbmVyLgorCisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6YmxvY2spOiBVc2UgdG9SZW5kZXJCbG9jay4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNsYW1wSW1hZ2VCdWZmZXJTaXplVG9WaWV3cG9ydCk6IFVzZSB0b1JlbmRlclZpZXcuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvYmlkaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZENv
bXBhY3RSdW5zKTogVGFrZSBhIFJlbmRlckJsb2NrKiBpbnN0ZWFkIG9mIHRha2luZyBhIFJlbmRl
ck9iamVjdCoKKyAgICAgICAgdGhhdCdzIGd1YXJhbnRlZWQgdG8gYmUgYSBSZW5kZXJCbG9jay4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbik6IFVz
ZSB0b1JlbmRlckJsb2NrLgorCisgICAgICAgICogc3ZnL1NWR0xlbmd0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdMZW5ndGg6OlBlcmNlbnRhZ2VPZlZpZXdwb3J0KTogR2V0IHRvIHRoZSBG
cmFtZVZpZXcgZGlyZWN0bHkgZnJvbQorICAgICAgICB0aGUgZG9jdW1lbnQgaW5zdGVhZCBvZiBn
b2luZyB2aWEgdGhlIFJlbmRlclZpZXcuCisKKyAgICAgICAgKiB3bWwvV01MSW1hZ2VFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOiBVc2UgdG9SZW5kZXJJbWFnZS4KKyAgICAgICAgKFdlYkNvcmU6OldNTEltYWdlRWxl
bWVudDo6YXR0YWNoKTogRGl0dG8uCisKIDIwMDktMDEtMjYgIERpbWl0cmkgR2xhemtvdiAgPGRn
bGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gNDAyNTApCisrKyBXZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0
ICJET01IVE1MQ2FudmFzRWxlbWVudC5oIgogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKICNpbXBv
cnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCisjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiSFRN
TE5hbWVzLmgiCiAjaW1wb3J0ICJIVE1MUGx1Z0luRWxlbWVudC5oIgogI2ltcG9ydCAiTm9kZUl0
ZXJhdG9yLmgiCkBAIC00MCw3ICs0MSw2IEBACiAjaW1wb3J0ICJTY3JpcHRDb250cm9sbGVyLmgi
CiAjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiVHJlZVdhbGtlci5oIgotCiAj
aW1wb3J0IDx3dGYvSGFzaE1hcC5oPgogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTQ5Miw3ICs0OTIs
NyBAQCBzdGF0aWMgTlNBcnJheSAqa2l0KGNvbnN0IFZlY3RvcjxJbnRSZWN0CiB7CiAgICAgV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IFtzZWxmIF9lbGVtZW50XS0+cmVuZGVyZXIo
KTsKICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzSW1hZ2UoKSkgewotICAgICAgICBX
ZWJDb3JlOjpSZW5kZXJJbWFnZSogaW1nID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmVuZGVySW1h
Z2UqPihyZW5kZXJlcik7CisgICAgICAgIFdlYkNvcmU6OlJlbmRlckltYWdlKiBpbWcgPSB0b1Jl
bmRlckltYWdlKHJlbmRlcmVyKTsKICAgICAgICAgaWYgKGltZy0+Y2FjaGVkSW1hZ2UoKSAmJiAh
aW1nLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4g
aW1nLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpLT5nZXROU0ltYWdlKCk7CiAgICAgfQpAQCAtNTE3
LDcgKzUxNyw3IEBAIHN0YXRpYyBOU0FycmF5ICpraXQoY29uc3QgVmVjdG9yPEludFJlY3QKIHsK
ICAgICBXZWJDb3JlOjpSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gW3NlbGYgX2VsZW1lbnRdLT5y
ZW5kZXJlcigpOwogICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNJbWFnZSgpKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OlJlbmRlckltYWdlKiBpbWcgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpS
ZW5kZXJJbWFnZSo+KHJlbmRlcmVyKTsKKyAgICAgICAgV2ViQ29yZTo6UmVuZGVySW1hZ2UqIGlt
ZyA9IHRvUmVuZGVySW1hZ2UocmVuZGVyZXIpOwogICAgICAgICBpZiAoaW1nLT5jYWNoZWRJbWFn
ZSgpICYmICFpbWctPmNhY2hlZEltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgICAg
IHJldHVybiAoTlNEYXRhKikoaW1nLT5jYWNoZWRJbWFnZSgpLT5pbWFnZSgpLT5nZXRUSUZGUmVw
cmVzZW50YXRpb24oKSk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAJKHJl
dmlzaW9uIDQwMjUwKQorKysgV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MCw4ICsxNTAsMTAgQEAgYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjppc0Nh
bmRpZGF0ZSgpIGNvbgogICAgIGlmIChpc1RhYmxlRWxlbWVudChtX3BhcmVudCkgfHwgZWRpdGlu
Z0lnbm9yZXNDb250ZW50KG1fcGFyZW50KSkKICAgICAgICAgcmV0dXJuIChhdFN0YXJ0T2ZOb2Rl
KCkgfHwgYXRFbmRPZk5vZGUoKSkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZSht
X3BhcmVudC0+cGFyZW50KCkpOwogCi0gICAgaWYgKCFtX3BhcmVudC0+aGFzVGFnTmFtZShodG1s
VGFnKSAmJiByZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiAhUG9zaXRpb246Omhhc1JlbmRlcmVk
Tm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSAmJgotICAgICAgIChz
dGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KHJlbmRlcmVyKS0+aGVpZ2h0KCkgfHwgbV9wYXJlbnQt
Pmhhc1RhZ05hbWUoYm9keVRhZykpKQorICAgIGlmICghbV9wYXJlbnQtPmhhc1RhZ05hbWUoaHRt
bFRhZykKKyAgICAgICAgICAgICYmIHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpCisgICAgICAgICAg
ICAmJiAhUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVp
Z2h0KHJlbmRlcmVyKQorICAgICAgICAgICAgJiYgKHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5o
ZWlnaHQoKSB8fCBtX3BhcmVudC0+aGFzVGFnTmFtZShib2R5VGFnKSkpCiAgICAgICAgIHJldHVy
biBhdFN0YXJ0T2ZOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX3Bh
cmVudCk7CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Miw3ICs1OTIs
NyBAQCBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjphCiAgICAgCiAgICAg
Ly8gYXBwZW5kIHRoZSBwbGFjZWhvbGRlciB0byBtYWtlIHN1cmUgaXQgZm9sbG93cwogICAgIC8v
IGFueSB1bnJlbmRlcmVkIGJsb2NrcwotICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHN0YXRpY19j
YXN0PFJlbmRlckJsb2NrKj4ocmVuZGVyZXIpOworICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRv
UmVuZGVyQmxvY2socmVuZGVyZXIpOwogICAgIGlmIChibG9jay0+aGVpZ2h0KCkgPT0gMCB8fCAo
YmxvY2stPmlzTGlzdEl0ZW0oKSAmJiBibG9jay0+aXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJu
IGFwcGVuZEJsb2NrUGxhY2Vob2xkZXIoY29udGFpbmVyKTsKIApJbmRleDogV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJ
KHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3Miw3ICs1NzIsNyBAQCBib29sIEVkaXRvcjo6aGFzQmlkaVNlbGVjdGlvbigp
IGNvbnN0CiAgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ocmVuZGVyZXIp
LT5jb250YWluc05vblplcm9CaWRpTGV2ZWwoKTsKKyAgICByZXR1cm4gdG9SZW5kZXJCbG9jayhy
ZW5kZXJlciktPmNvbnRhaW5zTm9uWmVyb0JpZGlMZXZlbCgpOwogfQogCiBUcmlTdGF0ZSBFZGl0
b3I6OnNlbGVjdGlvblVub3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcg
KzIxNSw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW8KICAgICBp
ZiAoY2xlYXJSZW5kZXJUcmVlU2VsZWN0aW9uKSB7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudD4g
ZG9jdW1lbnQgPSBtX3NlbC5zdGFydCgpLm5vZGUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgZG9j
dW1lbnQtPnVwZGF0ZVJlbmRlcmluZygpOwotICAgICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9
IHN0YXRpY19jYXN0PFJlbmRlclZpZXcqPihkb2N1bWVudC0+cmVuZGVyZXIoKSkpCisgICAgICAg
IGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKICAgICAgICAg
ICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgfQogCkBAIC04NTMsNyArODUzLDcgQEAg
Ym9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZWNvbXB1dGVDYXJldAogICAgIGlmIChvbGRBYnNS
ZXBhaW50UmVjdCA9PSBtX2Fic0NhcmV0Qm91bmRzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4o
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkpIHsKKyAgICBpZiAoUmVuZGVyVmlldyog
dmlldyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkgewogICAgICAgICB2aWV3
LT5yZXBhaW50Vmlld1JlY3RhbmdsZShvbGRBYnNSZXBhaW50UmVjdCwgZmFsc2UpOwogICAgICAg
ICB2aWV3LT5yZXBhaW50Vmlld1JlY3RhbmdsZShtX2Fic0NhcmV0Qm91bmRzLCBmYWxzZSk7CiAg
ICAgfQpAQCAtODg2LDcgKzg4Niw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6aW52YWxp
ZGF0ZUNhcmUKICAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKIAogICAgIGlmICghY2FyZXRSZWN0
Q2hhbmdlZCkgewotICAgICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFJl
bmRlclZpZXcqPihkLT5yZW5kZXJlcigpKSkKKyAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcg
PSBkLT5yZW5kZXJWaWV3KCkpCiAgICAgICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3Rhbmds
ZShjYXJldFJlcGFpbnRSZWN0KCksIGZhbHNlKTsKICAgICB9CiB9CkBAIC0xMTY2LDcgKzExNjYs
NyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmZvY3VzZWRPckFjdGl2CiAgICAgLy8gQmVj
YXVzZSBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGFuZAogICAgIC8v
IFJlbmRlck9iamVjdDo6c2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYgdGhlIGZy
YW1lIGlzIGFjdGl2ZSwKICAgICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhvc2UgY29s
b3JzIHdlcmUgcGFpbnRlZC4KLSAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHN0YXRpY19jYXN0
PFJlbmRlclZpZXcqPihtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKSkKKyAgICBpZiAo
UmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkKICAg
ICAgICAgdmlldy0+cmVwYWludFZpZXdSZWN0YW5nbGUoZW5jbG9zaW5nSW50UmVjdChtX2ZyYW1l
LT5zZWxlY3Rpb25Cb3VuZHMoKSkpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0
aXZlIGZyYW1lLgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rpb25Db250cm9sbGVy
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJv
bGxlck1hYy5tbQkocmV2aXNpb24gNDAyNTApCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFjL1NlbGVj
dGlvbkNvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDQyICsyNyw0MSBAQAogI2lt
cG9ydCAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogCiAjaW1wb3J0ICJBWE9iamVjdENhY2hlLmgi
Ci0jaW1wb3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRnJhbWUuaCIKLSNpbXBvcnQgIkZyYW1l
Vmlldy5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgotI2ltcG9ydCAiU2VsZWN0aW9uLmgiCiAj
aW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKIAotI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2
aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+IAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZv
aWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNo
YW5nZSgpCiB7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsK
KwogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIG1fc2Vs
LnN0YXJ0KCkuaXNOb3ROdWxsKCkgJiYgbV9zZWwuZW5kKCkuaXNOb3ROdWxsKCkpCi0gICAgICAg
IG1fZnJhbWUtPmRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbiht
X3NlbC5zdGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKSwgIkFYU2VsZWN0ZWRUZXh0Q2hhbmdlZCIp
OwotICAgIAorICAgICAgICBkb2N1bWVudC0+YXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0
aW9uKG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5yZW5kZXJlcigpLCAiQVhTZWxlY3RlZFRleHRDaGFu
Z2VkIik7CisKICAgICAvLyBpZiB6b29tIGZlYXR1cmUgaXMgZW5hYmxlZCwgaW5zZXJ0aW9uIHBv
aW50IGNoYW5nZXMgc2hvdWxkIHVwZGF0ZSB0aGUgem9vbQotICAgIGlmIChVQVpvb21FbmFibGVk
KCkgJiYgbV9zZWwuaXNDYXJldCgpICYmIG1fc2VsLnN0YXJ0KCkubm9kZSgpKSB7Ci0gICAgICAg
IFJlbmRlclZpZXcgKnJlbmRlclZpZXcgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4obV9zZWwu
c3RhcnQoKS5ub2RlKCktPnJlbmRlcmVyKCkpOwotICAgICAgICBpZiAocmVuZGVyVmlldykgewot
ICAgICAgICAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0ID0gYWJzb2x1dGVDYXJldEJvdW5kcygp
OwotICAgICAgICAgICAgSW50UmVjdCB2aWV3UmVjdCA9IHJlbmRlclZpZXctPnZpZXdSZWN0KCk7
Ci0gICAgICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHJlbmRlclZpZXctPnZpZXcoKS0+
ZnJhbWVWaWV3KCk7IAotICAgICAgICAgICAgaWYgKGZyYW1lVmlldykgewotICAgICAgICAgICAg
ICAgIHNlbGVjdGlvblJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oc2VsZWN0aW9u
UmVjdCk7Ci0gICAgICAgICAgICAgICAgdmlld1JlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9T
Y3JlZW4odmlld1JlY3QpOwotICAgICAgICAgICAgICAgIENHUmVjdCBjZ0NhcmV0UmVjdCA9IENH
UmVjdE1ha2Uoc2VsZWN0aW9uUmVjdC54KCksIHNlbGVjdGlvblJlY3QueSgpLCBzZWxlY3Rpb25S
ZWN0LndpZHRoKCksIHNlbGVjdGlvblJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIENH
UmVjdCBjZ1ZpZXdSZWN0ID0gQ0dSZWN0TWFrZSh2aWV3UmVjdC54KCksIHZpZXdSZWN0LnkoKSwg
dmlld1JlY3Qud2lkdGgoKSwgdmlld1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIGNn
Q2FyZXRSZWN0ID0gW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gYWNjZXNzaWJp
bGl0eUNvbnZlcnRTY3JlZW5SZWN0OmNnQ2FyZXRSZWN0XTsKLSAgICAgICAgICAgICAgICBjZ1Zp
ZXdSZWN0ID0gW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gYWNjZXNzaWJpbGl0
eUNvbnZlcnRTY3JlZW5SZWN0OmNnVmlld1JlY3RdOyAgICAgICAgICAgICAgCi0KLSAgICAgICAg
ICAgICAgICAodm9pZClVQVpvb21DaGFuZ2VGb2N1cygmY2dWaWV3UmVjdCwgJmNnQ2FyZXRSZWN0
LCBrVUFab29tRm9jdXNUeXBlSW5zZXJ0aW9uUG9pbnQpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotfQorICAgIGlmICghVUFab29tRW5hYmxlZCgpIHx8ICFtX3NlbC5pc0NhcmV0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBkb2N1
bWVudC0+cmVuZGVyVmlldygpOworICAgIGlmICghcmVuZGVyVmlldykKKyAgICAgICAgcmV0dXJu
OworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+dmlldygpOyAKKyAgICBpZiAo
IWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0
ID0gYWJzb2x1dGVDYXJldEJvdW5kcygpOworICAgIEludFJlY3Qgdmlld1JlY3QgPSByZW5kZXJW
aWV3LT52aWV3UmVjdCgpOworCisgICAgc2VsZWN0aW9uUmVjdCA9IGZyYW1lVmlldy0+Y29udGVu
dHNUb1NjcmVlbihzZWxlY3Rpb25SZWN0KTsKKyAgICB2aWV3UmVjdCA9IGZyYW1lVmlldy0+Y29u
dGVudHNUb1NjcmVlbih2aWV3UmVjdCk7CisgICAgQ0dSZWN0IGNnQ2FyZXRSZWN0ID0gQ0dSZWN0
TWFrZShzZWxlY3Rpb25SZWN0LngoKSwgc2VsZWN0aW9uUmVjdC55KCksIHNlbGVjdGlvblJlY3Qu
d2lkdGgoKSwgc2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7CisgICAgQ0dSZWN0IGNnVmlld1JlY3Qg
PSBDR1JlY3RNYWtlKHZpZXdSZWN0LngoKSwgdmlld1JlY3QueSgpLCB2aWV3UmVjdC53aWR0aCgp
LCB2aWV3UmVjdC5oZWlnaHQoKSk7CisgICAgY2dDYXJldFJlY3QgPSBbW1dlYkNvcmVWaWV3RmFj
dG9yeSBzaGFyZWRGYWN0b3J5XSBhY2Nlc3NpYmlsaXR5Q29udmVydFNjcmVlblJlY3Q6Y2dDYXJl
dFJlY3RdOworICAgIGNnVmlld1JlY3QgPSBbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0
b3J5XSBhY2Nlc3NpYmlsaXR5Q29udmVydFNjcmVlblJlY3Q6Y2dWaWV3UmVjdF07ICAgICAgICAg
ICAgICAKIAorICAgIFVBWm9vbUNoYW5nZUZvY3VzKCZjZ1ZpZXdSZWN0LCAmY2dDYXJldFJlY3Qs
IGtVQVpvb21Gb2N1c1R5cGVJbnNlcnRpb25Qb2ludCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gNDAyNTAp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDMsNyArMjAzLDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZAogICAgICAgICBpZiAoZXZ0LT50YXJnZXQoKS0+dG9Ob2RlKCktPmhhc1RhZ05hbWUoaW1nVGFn
KSkgewogICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1nID0gc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudCo+KGV2dC0+dGFyZ2V0KCktPnRvTm9kZSgpKTsKICAgICAgICAgICAgIGlm
IChpbWcgJiYgaW1nLT5pc1NlcnZlck1hcCgpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVySW1h
Z2UqIHIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KGltZy0+cmVuZGVyZXIoKSk7CisgICAg
ICAgICAgICAgICAgUmVuZGVySW1hZ2UqIHIgPSB0b1JlbmRlckltYWdlKGltZy0+cmVuZGVyZXIo
KSk7CiAgICAgICAgICAgICAgICAgaWYgKHIgJiYgZSkgewogICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogYnJva2VuIHdpdGggdHJhbnNmb3JtcwogICAgICAgICAgICAgICAgICAgICBGbG9h
dFBvaW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgpOwpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxFbWJlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRW1i
ZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNDAyNTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVtYmVk
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEhUTUxF
bWJlZEVsZW1lbnQ6OmF0dGFjaCgpCiAgICAgICAgIG1faW1hZ2VMb2FkZXItPnVwZGF0ZUZyb21F
bGVtZW50KCk7CiAKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKCkpLT5zZXRDYWNoZWRJbWFnZShtX2ltYWdlTG9h
ZGVyLT5pbWFnZSgpKTsKKyAgICAgICAgICAgIHRvUmVuZGVySW1hZ2UocmVuZGVyZXIoKSktPnNl
dENhY2hlZEltYWdlKG1faW1hZ2VMb2FkZXItPmltYWdlKCkpOwogICAgIH0KIH0KIApJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gNDAyNTApCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAg
dm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0ci0+bmFtZSgpOwogICAgIGlmIChhdHRyTmFtZSA9PSBh
bHRBdHRyKSB7CiAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzSW1hZ2Uo
KSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4ocmVuZGVyZXIoKSktPnVw
ZGF0ZUFsdFRleHQoKTsKKyAgICAgICAgICAgIHRvUmVuZGVySW1hZ2UocmVuZGVyZXIoKSktPnVw
ZGF0ZUFsdFRleHQoKTsKICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IHNyY0F0dHIpCiAgICAg
ICAgIG1faW1hZ2VMb2FkZXIudXBkYXRlRnJvbUVsZW1lbnRJZ25vcmluZ1ByZXZpb3VzRXJyb3Io
KTsKICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSB3aWR0aEF0dHIpCkBAIC0xNjYsNyArMTY2LDcg
QEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjphdHRhY2goKQogICAgIEhUTUxFbGVtZW50OjphdHRh
Y2goKTsKIAogICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzSW1hZ2UoKSkgewot
ICAgICAgICBSZW5kZXJJbWFnZSogaW1hZ2VPYmogPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+
KHJlbmRlcmVyKCkpOworICAgICAgICBSZW5kZXJJbWFnZSogaW1hZ2VPYmogPSB0b1JlbmRlcklt
YWdlKHJlbmRlcmVyKCkpOwogICAgICAgICBpZiAoaW1hZ2VPYmotPmhhc0ltYWdlKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGltYWdlT2JqLT5zZXRDYWNoZWRJbWFnZShtX2ltYWdl
TG9hZGVyLmltYWdlKCkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNp
b24gNDAyNTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2Miw3ICs1NjIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmliCiAgICAgICAgIElucHV0RWxlbWVudDo6cGFyc2VTaXplQXR0cmlidXRlKG1fZGF0
YSwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsdEF0dHIpIHsKICAgICAg
ICAgaWYgKHJlbmRlcmVyKCkgJiYgaW5wdXRUeXBlKCkgPT0gSU1BR0UpCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKCkpLT51cGRhdGVBbHRUZXh0KCk7Cisg
ICAgICAgICAgICB0b1JlbmRlckltYWdlKHJlbmRlcmVyKCkpLT51cGRhdGVBbHRUZXh0KCk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cikgewogICAgICAgICBpZiAocmVu
ZGVyZXIoKSAmJiBpbnB1dFR5cGUoKSA9PSBJTUFHRSkgewogICAgICAgICAgICAgaWYgKCFtX2lt
YWdlTG9hZGVyKQpAQCAtNjkyLDcgKzY5Miw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YXR0
YWNoKCkKICAgICAgICAgICAgIG1faW1hZ2VMb2FkZXIuc2V0KG5ldyBIVE1MSW1hZ2VMb2FkZXIo
dGhpcykpOwogICAgICAgICBtX2ltYWdlTG9hZGVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAg
ICAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdlT2Jq
ID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihyZW5kZXJlcigpKTsKKyAgICAgICAgICAgIFJl
bmRlckltYWdlKiBpbWFnZU9iaiA9IHRvUmVuZGVySW1hZ2UocmVuZGVyZXIoKSk7CiAgICAgICAg
ICAgICBpbWFnZU9iai0+c2V0Q2FjaGVkSW1hZ2UobV9pbWFnZUxvYWRlci0+aW1hZ2UoKSk7IAog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGltYWdlIGF0IGFsbCBi
ZWNhdXNlIHdlIGhhdmUgbm8gc3JjIGF0dHJpYnV0ZSwgc2V0CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgSFRN
TE9iamVjdEVsZW1lbnQ6OmF0dGFjaCgpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
aWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJl
bmRlcmVyKCkpLT5zZXRDYWNoZWRJbWFnZShtX2ltYWdlTG9hZGVyLT5pbWFnZSgpKTsKKyAgICAg
ICAgICAgIHRvUmVuZGVySW1hZ2UocmVuZGVyZXIoKSktPnNldENhY2hlZEltYWdlKG1faW1hZ2VM
b2FkZXItPmltYWdlKCkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxWaWRl
b0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50
LmNwcAkocmV2aXNpb24gNDAyNTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw4IEBAIHZvaWQgSFRNTFZpZGVvRWxlbWVu
dDo6YXR0YWNoKCkKICAgICAgICAgaWYgKCFtX2ltYWdlTG9hZGVyKQogICAgICAgICAgICAgbV9p
bWFnZUxvYWRlci5zZXQobmV3IEhUTUxJbWFnZUxvYWRlcih0aGlzKSk7CiAgICAgICAgIG1faW1h
Z2VMb2FkZXItPnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgIGlmIChyZW5kZXJlcigpICYm
IHJlbmRlcmVyKCktPmlzSW1hZ2UoKSkgewotICAgICAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdl
UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKCkpOwotICAgICAg
ICAgICAgaW1hZ2VSZW5kZXJlci0+c2V0Q2FjaGVkSW1hZ2UobV9pbWFnZUxvYWRlci0+aW1hZ2Uo
KSk7IAotICAgICAgICB9CisgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlz
SW1hZ2UoKSkKKyAgICAgICAgICAgIHRvUmVuZGVySW1hZ2UocmVuZGVyZXIoKSktPnNldENhY2hl
ZEltYWdlKG1faW1hZ2VMb2FkZXItPmltYWdlKCkpOyAKICAgICB9CiAKIH0KSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9J
bWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29yZS9sb2FkZXIvSW1hZ2VM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSW1hZ2VMb2Fk
ZXI6OnNldEltYWdlKENhY2hlZEltYWdlKiAKICAgICAgICAgaWYgKCFyZW5kZXJlci0+aXNJbWFn
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlcklt
YWdlKj4ocmVuZGVyZXIpLT5yZXNldEFuaW1hdGlvbigpOworICAgICAgICB0b1JlbmRlckltYWdl
KHJlbmRlcmVyKS0+cmVzZXRBbmltYXRpb24oKTsKICAgICB9CiB9CiAKQEAgLTEyMyw3ICsxMjMs
NyBAQCB2b2lkIEltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIGlmICgh
cmVuZGVyZXItPmlzSW1hZ2UoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKS0+cmVzZXRBbmltYXRpb24oKTsKKyAgICAg
ICAgdG9SZW5kZXJJbWFnZShyZW5kZXJlciktPnJlc2V0QW5pbWF0aW9uKCk7CiAgICAgfQogfQog
CkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2Fj
aGVkUgogICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc0ltYWdlKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihyZW5kZXJlciktPnNldENh
Y2hlZEltYWdlKG1faW1hZ2UuZ2V0KCkpOworICAgICAgICB0b1JlbmRlckltYWdlKHJlbmRlcmVy
KS0+c2V0Q2FjaGVkSW1hZ2UobV9pbWFnZS5nZXQoKSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJD
b3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA0MDI1MCkK
KysrIFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE2Miw3ICsxMTYyLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphY2Nlc3NpYgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKG1fcmVuZGVy
ZXItPmlzQmxvY2tGbG93KCkgJiYgbV9yZW5kZXJlci0+Y2hpbGRyZW5JbmxpbmUoKSkKLSAgICAg
ICAgcmV0dXJuICFzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG1fcmVuZGVyZXIpLT5maXJzdExp
bmVCb3goKSAmJiAhbW91c2VCdXR0b25MaXN0ZW5lcigpOworICAgICAgICByZXR1cm4gIXRvUmVu
ZGVyQmxvY2sobV9yZW5kZXJlciktPmZpcnN0TGluZUJveCgpICYmICFtb3VzZUJ1dHRvbkxpc3Rl
bmVyKCk7CiAgICAgCiAgICAgLy8gaWdub3JlIGltYWdlcyBzZWVtaW5nbHkgdXNlZCBhcyBzcGFj
ZXJzCiAgICAgaWYgKGlzSW1hZ2UoKSkgewpAQCAtMTE3OCwxNCArMTE3OCwxNCBAQCBib29sIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2Vzc2liCiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIGNoZWNrIGZvciBvbmUtZGltZW5zaW9uYWwgaW1hZ2UKLSAgICAgICAgUmVuZGVy
SW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihtX3JlbmRlcmVyKTsKKyAg
ICAgICAgUmVuZGVySW1hZ2UqIGltYWdlID0gdG9SZW5kZXJJbWFnZShtX3JlbmRlcmVyKTsKICAg
ICAgICAgaWYgKGltYWdlLT5oZWlnaHQoKSA8PSAxIHx8IGltYWdlLT53aWR0aCgpIDw9IDEpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIC8vIGNoZWNrIHdoZXRo
ZXIgcmVuZGVyZWQgaW1hZ2Ugd2FzIHN0cmV0Y2hlZCBmcm9tIG9uZS1kaW1lbnNpb25hbCBmaWxl
IGltYWdlCiAgICAgICAgIGlmIChpc05hdGl2ZUltYWdlKCkpIHsKICAgICAgICAgICAgIGlmIChp
bWFnZS0+Y2FjaGVkSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgIEludFNpemUgaW1hZ2VTaXpl
ID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZShpbWFnZS0+dmlldygpLT56b29tRmFj
dG9yKCkpOworICAgICAgICAgICAgICAgIEludFNpemUgaW1hZ2VTaXplID0gaW1hZ2UtPmNhY2hl
ZEltYWdlKCktPmltYWdlU2l6ZShpbWFnZS0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gaW1hZ2VTaXplLmhlaWdodCgpIDw9IDEgfHwgaW1hZ2VTaXpl
LndpZHRoKCkgPD0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTIxMSw3ICsxMjEx
LDcgQEAgaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmxheW91dENvdQogewogICAgIGlm
ICghbV9yZW5kZXJlci0+aXNSZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4obV9yZW5kZXJlciktPmZyYW1lVmlldygpLT5s
YXlvdXRDb3VudCgpOworICAgIHJldHVybiB0b1JlbmRlclZpZXcobV9yZW5kZXJlciktPmZyYW1l
VmlldygpLT5sYXlvdXRDb3VudCgpOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6dGV4dCgpIGNvbnN0CkBAIC0yMjkwLDggKzIyOTAsOCBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkCiAgICAgfQogICAgIAogICAgIC8vIGZvciBhIFJlbmRl
ckltYWdlLCBhZGQgdGhlIDxhcmVhPiBlbGVtZW50cyBhcyBpbmRpdmlkdWFsIGFjY2Vzc2liaWxp
dHkgb2JqZWN0cwotICAgIGlmIChtX3JlbmRlcmVyLT5pc1JlbmRlckltYWdlKCkpIHsKLSAgICAg
ICAgSFRNTE1hcEVsZW1lbnQqIG1hcCA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4obV9yZW5k
ZXJlciktPmltYWdlTWFwKCk7CisgICAgaWYgKG1fcmVuZGVyZXItPmlzSW1hZ2UoKSkgeworICAg
ICAgICBIVE1MTWFwRWxlbWVudCogbWFwID0gdG9SZW5kZXJJbWFnZShtX3JlbmRlcmVyKS0+aW1h
Z2VNYXAoKTsKICAgICAgICAgaWYgKG1hcCkgewogICAgICAgICAgICAgZm9yIChOb2RlKiBjdXJy
ZW50ID0gbWFwLT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT50cmF2
ZXJzZU5leHROb2RlKG1hcCkpIHsKIApJbmRleDogV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzMSw4ICs1MzEsNyBAQCBzdGF0aWMgQ2FjaGVkSW1hZ2UqIGdldENhY2hlZElt
YWdlKEVsZW1lCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkgCiAgICAgICAg
IHJldHVybiAwOwotICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PFJlbmRlcklt
YWdlKj4ocmVuZGVyZXIpOwotICAgIHJldHVybiBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKKyAgICBy
ZXR1cm4gdG9SZW5kZXJJbWFnZShyZW5kZXJlciktPmNhY2hlZEltYWdlKCk7CiB9CiAgICAgCiBz
dGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQqIGVsZW1lbnQpCkBAIC01NDIsNyArNTQxLDcg
QEAgc3RhdGljIEltYWdlKiBnZXRJbWFnZShFbGVtZW50KiBlbGVtZW50KQogICAgIGlmICghcmVu
ZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0ltYWdlKCkpIAogICAgICAgICByZXR1cm4gMDsKICAgICAK
LSAgICBSZW5kZXJJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRl
cmVyKTsKKyAgICBSZW5kZXJJbWFnZSogaW1hZ2UgPSB0b1JlbmRlckltYWdlKHJlbmRlcmVyKTsK
ICAgICBpZiAoaW1hZ2UtPmNhY2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5l
cnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1h
Z2UoKTsKICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiA0MDI1MCkK
KysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsNyAr
NDc1LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmxheW91dChib29sIGFsbG93U3VidHJlZQogI2VuZGlm
CiAgICAgfQogCi0gICAgbV9kb0Z1bGxSZXBhaW50ID0gIXN1YnRyZWUgJiYgKG1fZmlyc3RMYXlv
dXQgfHwgc3RhdGljX2Nhc3Q8UmVuZGVyVmlldyo+KHJvb3QpLT5wcmludGluZygpKTsKKyAgICBt
X2RvRnVsbFJlcGFpbnQgPSAhc3VidHJlZSAmJiAobV9maXJzdExheW91dCB8fCB0b1JlbmRlclZp
ZXcocm9vdCktPnByaW50aW5nKCkpOwogCiAgICAgaWYgKCFzdWJ0cmVlKSB7CiAgICAgICAgIC8v
IE5vdyBzZXQgb3VyIHNjcm9sbGJhciBzdGF0ZSBmb3IgdGhlIGxheW91dC4KQEAgLTUzMCw3ICs1
MzAsNyBAQCB2b2lkIEZyYW1lVmlldzo6bGF5b3V0KGJvb2wgYWxsb3dTdWJ0cmVlCiAgICAKICAg
ICBtX2xheW91dFNjaGVkdWxpbmdFbmFibGVkID0gdHJ1ZTsKIAotICAgIGlmICghc3VidHJlZSAm
JiAhc3RhdGljX2Nhc3Q8UmVuZGVyVmlldyo+KHJvb3QpLT5wcmludGluZygpKQorICAgIGlmICgh
c3VidHJlZSAmJiAhdG9SZW5kZXJWaWV3KHJvb3QpLT5wcmludGluZygpKQogICAgICAgICBhZGp1
c3RWaWV3U2l6ZSgpOwogCiAgICAgLy8gTm93IHVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIGFsbCBs
YXllcnMuCkluZGV4OiBXZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAkocmV2aXNpb24gNDAyNTApCisrKyBXZWJD
b3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Myw3
ICs1Myw3IEBAIHZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzKGNvbnMKICAgICBp
ZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwgIW1fZnJhbWUtPnZpZXcoKSB8fCAhbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyVmll
dyogcm9vdCA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcqPihtX2ZyYW1lLT5kb2N1bWVudCgpLT5y
ZW5kZXJlcigpKTsKKyAgICBSZW5kZXJWaWV3KiByb290ID0gdG9SZW5kZXJWaWV3KG1fZnJhbWUt
PmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwogCiAgICAgaWYgKCFyb290KSB7CiAgICAgICAgIExP
R19FUlJPUigiZG9jdW1lbnQgdG8gYmUgcHJpbnRlZCBoYXMgbm8gcmVuZGVyZXIiKTsKSW5kZXg6
IFdlYkNvcmUvcGFnZS9jaHJvbWl1bS9GcmFtZUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvY2hyb21pdW0vRnJhbWVDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDQwMjUwKQor
KysgV2ViQ29yZS9wYWdlL2Nocm9taXVtL0ZyYW1lQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgY29tcHV0ZVBhZ2VSZWN0c0ZvckZyYW1lKEZyYW1lKiBm
cmEKICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+dmlldygpIHx8ICFmcmFt
ZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogIAotICAgIFJlbmRl
clZpZXcqIHJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4oZnJhbWUtPmRvY3VtZW50KCkt
PnJlbmRlcmVyKCkpOworICAgIFJlbmRlclZpZXcqIHJvb3QgPSB0b1JlbmRlclZpZXcoZnJhbWUt
PmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwogCiAgICAgaWYgKCFyb290KSB7CiAgICAgICAgIExP
R19FUlJPUigiZG9jdW1lbnQgdG8gYmUgcHJpbnRlZCBoYXMgbm8gcmVuZGVyZXIiKTsKSW5kZXg6
IFdlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS93aW4vRnJhbWVXaW4uY3BwCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcGFnZS93aW4v
RnJhbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgY29tcHV0
ZVBhZ2VSZWN0c0ZvckZyYW1lKEZyYW1lKiBmcmEKICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgp
IHx8ICFmcmFtZS0+dmlldygpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAg
ICAgICAgcmV0dXJuOwogIAotICAgIFJlbmRlclZpZXcqIHJvb3QgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJWaWV3Kj4oZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOworICAgIFJlbmRlclZpZXcq
IHJvb3QgPSB0b1JlbmRlclZpZXcoZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwogCiAg
ICAgaWYgKCFyb290KSB7CiAgICAgICAgIExPR19FUlJPUigiZG9jdW1lbnQgdG8gYmUgcHJpbnRl
ZCBoYXMgbm8gcmVuZGVyZXIiKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDMsNyArMjQzLDcgQEAgc3RhdGljIENhY2hlZEltYWdlKiBnZXRDYWNoZWRJbWFnZShFbGVtZQog
ICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0ltYWdlKCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgUmVuZGVySW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2Uq
PihyZW5kZXJlcik7CisgICAgUmVuZGVySW1hZ2UqIGltYWdlID0gdG9SZW5kZXJJbWFnZShyZW5k
ZXJlcik7CiAgICAgaWYgKGltYWdlLT5jYWNoZWRJbWFnZSgpICYmICFpbWFnZS0+Y2FjaGVkSW1h
Z2UoKS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hlZEltYWdl
KCk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsOCArMTE3LDgg
QEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIEFTU0VSVChu
b2RlLT5yZW5kZXJlcigpKTsKICAgICBBU1NFUlQobm9kZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgp
KTsKIAotICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdl
Kj4obm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gc3Rh
dGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKSk7CisgICAgUmVu
ZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShub2RlLT5yZW5kZXJlcigpKTsKKyAg
ICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSByZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKTsKICAg
ICBBU1NFUlQoY2FjaGVkSW1hZ2UpOwogICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5p
bWFnZSgpOwogICAgIEFTU0VSVChpbWFnZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Q
YXN0ZWJvYXJkR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkR3RrLmNwcAkocmV2aXNpb24gNDAyNTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Q
YXN0ZWJvYXJkR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDggKzEzNSw4IEBAIHZvaWQg
UGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKICAgICBHdGtDbGlwYm9hcmQqIGNs
aXBib2FyZCA9IGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGdka19kaXNwbGF5X2dldF9k
ZWZhdWx0KCksIEdES19TRUxFQ1RJT05fQ0xJUEJPQVJEKTsKIAogICAgIEFTU0VSVChub2RlICYm
IG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgpKTsKLSAgICBS
ZW5kZXJJbWFnZSogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KG5vZGUtPnJl
bmRlcmVyKCkpOwotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHN0YXRpY19jYXN0PENh
Y2hlZEltYWdlKj4ocmVuZGVyZXItPmNhY2hlZEltYWdlKCkpOworICAgIFJlbmRlckltYWdlKiBy
ZW5kZXJlciA9IHRvUmVuZGVySW1hZ2Uobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgQ2FjaGVkSW1h
Z2UqIGNhY2hlZEltYWdlID0gcmVuZGVyZXItPmNhY2hlZEltYWdlKCk7CiAgICAgQVNTRVJUKGNh
Y2hlZEltYWdlKTsKICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKICAg
ICBBU1NFUlQoaW1hZ2UpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1t
CShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI3OCw4ICsyNzgsOCBAQCB2b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgQVNTRVJUKGNvY29hVVJMKTsKIAogICAgIEFTU0VS
VChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSk7Ci0gICAg
UmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihub2RlLT5y
ZW5kZXJlcigpKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBzdGF0aWNfY2FzdDxD
YWNoZWRJbWFnZSo+KHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpKTsKKyAgICBSZW5kZXJJbWFnZSog
cmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkpOworICAgIENhY2hlZElt
YWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwogICAgIEFTU0VSVChj
YWNoZWRJbWFnZSk7CiAgICAgCiAgICAgaWYgKGNhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAkocmV2aXNpb24gNDAyNTApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIwLDcgKzIyMCw3IEBAIHN0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVkSW1hZ2UoRWxlbWUK
ICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNJbWFnZSgpKSAKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgCi0gICAgUmVuZGVySW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVy
SW1hZ2UqPihyZW5kZXJlcik7CisgICAgUmVuZGVySW1hZ2UqIGltYWdlID0gdG9SZW5kZXJJbWFn
ZShyZW5kZXJlcik7CiAgICAgaWYgKGltYWdlLT5jYWNoZWRJbWFnZSgpICYmICFpbWFnZS0+Y2Fj
aGVkSW1hZ2UoKS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hl
ZEltYWdlKCk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAJKHJldmlz
aW9uIDQwMjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdl
KE5vZGUqIG5vZGUsIAogICAgIEFTU0VSVChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9k
ZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgpKTsKIAogI2lmbmRlZiBRVF9OT19DTElQQk9BUkQKLSAg
ICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KG5v
ZGUtPnJlbmRlcmVyKCkpLT5jYWNoZWRJbWFnZSgpOworICAgIENhY2hlZEltYWdlKiBjYWNoZWRJ
bWFnZSA9IHRvUmVuZGVySW1hZ2Uobm9kZS0+cmVuZGVyZXIoKSktPmNhY2hlZEltYWdlKCk7CiAg
ICAgQVNTRVJUKGNhY2hlZEltYWdlKTsKIAogICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdl
LT5pbWFnZSgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCShyZXZp
c2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzMiw3ICs2MzIsNyBAQCBzdGF0aWMgQ2FjaGVkSW1hZ2UqIGdldENh
Y2hlZEltYWdlKEVsZW1lCiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2Uo
KSkgCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHN0
YXRpY19jYXN0PFJlbmRlckltYWdlKj4ocmVuZGVyZXIpOworICAgIFJlbmRlckltYWdlKiBpbWFn
ZSA9IHRvUmVuZGVySW1hZ2UocmVuZGVyZXIpOwogICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2Uo
KSAmJiAhaW1hZ2UtPmNhY2hlZEltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0
dXJuIGltYWdlLT5jYWNoZWRJbWFnZSgpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Q
YXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0
ZWJvYXJkV2luLmNwcAkocmV2aXNpb24gNDAyNTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Q
YXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDggKzE4OCw4IEBAIHZvaWQg
UGFzdGVib2FyZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXIKIHZvaWQgUGFzdGVib2FyZDo6d3Jp
dGVJbWFnZShOb2RlKiBub2RlLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKIHsKICAgICBB
U1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzSW1h
Z2UoKSk7Ci0gICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1h
Z2UqPihub2RlLT5yZW5kZXJlcigpKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBz
dGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpKTsKKyAgICBS
ZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkpOwor
ICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwog
ICAgIEFTU0VSVChjYWNoZWRJbWFnZSk7CiAgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2Ut
PmltYWdlKCk7CiAgICAgQVNTRVJUKGltYWdlKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDcgQEAgSW1hZ2UqIEhpdFRl
c3RSZXN1bHQ6OmltYWdlKCkgY29uc3QKICAgICAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbV9pbm5lck5vblNoYXJlZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYgKHJlbmRlcmVyICYm
IHJlbmRlcmVyLT5pc0ltYWdlKCkpIHsKLSAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdlID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6UmVuZGVySW1hZ2UqPihyZW5kZXJlcik7CisgICAgICAgIFJlbmRl
ckltYWdlKiBpbWFnZSA9IHRvUmVuZGVySW1hZ2UocmVuZGVyZXIpOwogICAgICAgICBpZiAoaW1h
Z2UtPmNhY2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVk
KCkpCiAgICAgICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlKCk7CiAg
ICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvTGlzdE1hcmtlckJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvTGlzdE1hcmtlckJveC5jcHAJKHJldmlzaW9uIDQwMjUw
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvTGlzdE1hcmtlckJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw0IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1w
bGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KQEAgLTI2LDIwICsyNCwxOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkxpc3RNYXJrZXJCb3guaCIKIAotI2luY2x1ZGUgIklubGlu
ZUZsb3dCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RNYXJrZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1MaXN0TWFya2VyQm94OjpMaXN0
TWFya2VyQm94KFJlbmRlck9iamVjdCogb2JqKQotICAgIDogSW5saW5lQm94KG9iaikKK0xpc3RN
YXJrZXJCb3g6Okxpc3RNYXJrZXJCb3goUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKKyAgICA6IElu
bGluZUJveChyZW5kZXJlcikKIHsKIH0KIAogYm9vbCBMaXN0TWFya2VyQm94Ojppc1RleHQoKSBj
b25zdAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0TWFya2VyKj4ob2JqZWN0
KCkpLT5pc1RleHQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdE1hcmtlcio+
KG9iamVjdCgpKS0+aXNUZXh0TWFya2VyKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDQwMjUwKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDcgRGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkK
LSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKIAorI2luY2x1ZGUgIkRlcHJlY2F0ZWRQ
dHJMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKQEAgLTE3MSw3ICsxNzIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpz
dHlsZVdpbGxDaGFuZ2UoUmVuZGVyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChjYi0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlckJsb2NrKj4oY2IpLT5yZW1vdmVQb3NpdGlvbmVkT2JqZWN0cyh0aGlzKTsKKyAg
ICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGNiKS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdHMo
dGhpcyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQwOSw3ICs0MTAsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplCiAgICAgICAgICAgICBwcmV2LT5tb3ZlQ2hp
bGROb2RlKG5vKTsKICAgICAgICAgfQogIAotICAgICAgICBSZW5kZXJCbG9jayogbmV4dEJsb2Nr
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihuZXh0KTsKKyAgICAgICAgUmVuZGVyQmxvY2sq
IG5leHRCbG9jayA9IHRvUmVuZGVyQmxvY2sobmV4dCk7CiAgICAgICAgIG5leHRCbG9jay0+ZGVs
ZXRlTGluZUJveFRyZWUoKTsKICAgICAgICAgCiAgICAgICAgIC8vIE51a2UgdGhlIG5vdy1lbXB0
eSBibG9jay4KQEAgLTQyNCw3ICs0MjUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVDaGls
ZChSZW5kZXJPYmplCiAgICAgICAgIC8vIGJveC4gIFdlIGNhbiBnbyBhaGVhZCBhbmQgcHVsbCB0
aGUgY29udGVudCByaWdodCBiYWNrIHVwIGludG8gb3VyCiAgICAgICAgIC8vIGJveC4KICAgICAg
ICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgICAgIFJlbmRlckJs
b2NrKiBhbm9uQmxvY2sgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KHJlbW92ZUNoaWxkTm9k
ZShjaGlsZCwgZmFsc2UpKTsKKyAgICAgICAgUmVuZGVyQmxvY2sqIGFub25CbG9jayA9IHRvUmVu
ZGVyQmxvY2socmVtb3ZlQ2hpbGROb2RlKGNoaWxkLCBmYWxzZSkpOwogICAgICAgICBtX2NoaWxk
cmVuSW5saW5lID0gdHJ1ZTsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gYW5vbkJsb2NrLT5m
aXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChvKSB7CkBAIC02OTcsNyArNjk4LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgICAgICAgICAgLy8gT25l
IG9mIG91ciBjaGlsZHJlbidzIGZsb2F0cyBtYXkgaGF2ZSBiZWNvbWUgYW4gb3Zlcmhhbmdpbmcg
ZmxvYXQgZm9yIHVzLiBXZSBuZWVkIHRvIGxvb2sgZm9yIGl0LgogICAgICAgICAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCbG9ja0Zsb3co
KSAmJiAhY2hpbGQtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxk
KTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9j
ayhjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+ZmxvYXRCb3R0b20oKSAr
IGJsb2NrLT55KCkgPiBoZWlnaHQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE92ZXJo
YW5naW5nRmxvYXRzKGJsb2NrLCAtYmxvY2stPngoKSwgLWJsb2NrLT55KCksIGZhbHNlKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC05MDEsNyArOTAyLDcgQEAgUmVuZGVyQm94KiBSZW5kZXJCbG9j
azo6aGFuZGxlQ29tcGFjdENoaQogICAgICAgICAgICAgICAgIC8vIFRoZSBjb21wYWN0IHdpbGwg
Zml0IGluIHRoZSBtYXJnaW4uCiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgY29tcGFjdEluZm8uc2V0KGNoaWxkLCBjdXJyKTsKLSAgICAgICAgICAgICAg
ICB0b1JlbmRlckJveChjaGlsZCktPnNldExvY2F0aW9uKEludFBvaW50KCkpOyAvLyBUaGlzIHBv
c2l0aW9uIHdpbGwgYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBjb21wYWN0J3MKKyAgICAgICAg
ICAgICAgICBjaGlsZC0+c2V0TG9jYXRpb24oSW50UG9pbnQoKSk7IC8vIFRoaXMgcG9zaXRpb24g
d2lsbCBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNvbXBhY3QncwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gZGVzaXJlZCBwb3NpdGlvbiBhbmQgdGhlIGxpbmUgYm94
IGZvciB0aGUgY29tcGFjdCB3aWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBwaWNrIHRoYXQgcG9zaXRpb24gdXAuCiAgICAgICAgICAgICAgICAgCkBAIC0xMDY2LDcg
KzEwNjcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyCiAgICAg
ICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAKICAgICAg
ICAgaWYgKCFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgJiYgY2hpbGQtPmNvbnRhaW5zRmxvYXRzKCkp
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKS0+bWFya0FsbERl
c2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOworICAgICAgICAgICAgdG9SZW5kZXJCbG9j
ayhjaGlsZCktPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKIAogICAg
ICAgICAvLyBPdXIgZ3Vlc3Mgd2FzIHdyb25nLiBNYWtlIHRoZSBjaGlsZCBsYXkgaXRzZWxmIG91
dCBhZ2Fpbi4KICAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7CkBAIC0xMTIxLDcgKzEx
MjIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0c0lmTmVlZGVkKFJlCiAgICAgICAg
IC8vIFNvIGdvIGFoZWFkIGFuZCBtYXJrIHRoZSBpdGVtIGFzIGRpcnR5LgogICAgICAgICBjaGls
ZC0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAgICAgaWYgKCFjaGlsZC0+YXZv
aWRzRmxvYXRzKCkgJiYgY2hpbGQtPmNvbnRhaW5zRmxvYXRzKCkpCi0gICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlckJsb2NrKj4oY2hpbGQpLT5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9y
TGF5b3V0KCk7CisgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5tYXJrQWxsRGVzY2VuZGFu
dHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7CiB9
CiAKQEAgLTExODEsNyArMTE4Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRldGVybWluZUhvcml6
b250YWxQb3MKICAgICAgICAgICAgICAgICAvLyB3aWR0aCBjb21wdXRhdGlvbiB3aWxsIHRha2Ug
aW50byBhY2NvdW50IHRoZSBkZWx0YSBiZXR3ZWVuIHxyaWdodE9mZnwgYW5kIHx4UG9zfAogICAg
ICAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGp1c3QgcGFzcyB0aGUgY29udGVudCB3aWR0
aCBpbiBkaXJlY3RseSB0byB0aGUgfGNhbGNIb3Jpem9udGFsTWFyZ2luc3wKICAgICAgICAgICAg
ICAgICAvLyBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICB0b1JlbmRlckJveChjaGlsZCktPmNh
bGNIb3Jpem9udGFsTWFyZ2lucyhjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpLCBjaGlsZC0+
c3R5bGUoKS0+bWFyZ2luUmlnaHQoKSwgbGluZVdpZHRoKGNoaWxkLT55KCkpKTsKKyAgICAgICAg
ICAgICAgICBjaGlsZC0+Y2FsY0hvcml6b250YWxNYXJnaW5zKGNoaWxkLT5zdHlsZSgpLT5tYXJn
aW5MZWZ0KCksIGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpLCBsaW5lV2lkdGgoY2hpbGQt
PnkoKSkpOwogICAgICAgICAgICAgICAgIGNoUG9zID0gcmlnaHRPZmYgLSBjaGlsZC0+bWFyZ2lu
UmlnaHQoKSAtIGNoaWxkLT53aWR0aCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0x
MzQyLDEwICsxMzQzLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4o
Ym8KICAgICAgICAgfQogCiAgICAgICAgIGlmIChtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzKQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjaGlsZCktPm1hcmtBbGxEZXNj
ZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgICAgIHRvUmVuZGVyQmxvY2so
Y2hpbGQpLT5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAKICAgICAg
ICAgaWYgKGNoaWxkLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgICAgICBwcmV2aW91c0Zsb2F0
Qm90dG9tID0gbWF4KHByZXZpb3VzRmxvYXRCb3R0b20sIG9sZFJlY3QueSgpICsgc3RhdGljX2Nh
c3Q8UmVuZGVyQmxvY2sqPihjaGlsZCktPmZsb2F0Qm90dG9tKCkpOworICAgICAgICAgICAgcHJl
dmlvdXNGbG9hdEJvdHRvbSA9IG1heChwcmV2aW91c0Zsb2F0Qm90dG9tLCBvbGRSZWN0LnkoKSAr
IHRvUmVuZGVyQmxvY2soY2hpbGQpLT5mbG9hdEJvdHRvbSgpKTsKIAogICAgICAgICBib29sIGNo
aWxkSGFkTGF5b3V0ID0gY2hpbGQtPm1fZXZlckhhZExheW91dDsKICAgICAgICAgYm9vbCBjaGls
ZE5lZWRlZExheW91dCA9IGNoaWxkLT5uZWVkc0xheW91dCgpOwpAQCAtMTM3Myw5ICsxMzc0LDEx
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8KICAgICAgICAgICAg
IHNldEhlaWdodChoZWlnaHQoKSArIGNoaWxkLT5tYXJnaW5Cb3R0b20oKSk7CiAgICAgICAgICAg
ICBtYXJnaW5JbmZvLmNsZWFyTWFyZ2luKCk7CiAgICAgICAgIH0KKwogICAgICAgICAvLyBJZiB0
aGUgY2hpbGQgaGFzIG92ZXJoYW5naW5nIGZsb2F0cyB0aGF0IGludHJ1ZGUgaW50byBmb2xsb3dp
bmcgc2libGluZ3MgKG9yIHBvc3NpYmx5IG91dAogICAgICAgICAvLyBvZiB0aGlzIGJsb2NrKSwg
dGhlbiB0aGUgcGFyZW50IGdldHMgbm90aWZpZWQgb2YgdGhlIGZsb2F0cyBub3cuCi0gICAgICAg
IG1heEZsb2F0Qm90dG9tID0gbWF4KG1heEZsb2F0Qm90dG9tLCBhZGRPdmVyaGFuZ2luZ0Zsb2F0
cyhzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKSwgLWNoaWxkLT54KCksIC1jaGlsZC0+
eSgpLCAhY2hpbGROZWVkZWRMYXlvdXQpKTsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1JlbmRlckJs
b2NrKCkpCisgICAgICAgICAgICBtYXhGbG9hdEJvdHRvbSA9IG1heChtYXhGbG9hdEJvdHRvbSwg
YWRkT3ZlcmhhbmdpbmdGbG9hdHModG9SZW5kZXJCbG9jayhjaGlsZCksIC1jaGlsZC0+eCgpLCAt
Y2hpbGQtPnkoKSwgIWNoaWxkTmVlZGVkTGF5b3V0KSk7CiAKICAgICAgICAgLy8gVXBkYXRlIG91
ciBvdmVyZmxvdyBpbiBjYXNlIHRoZSBjaGlsZCBzcGlsbHMgb3V0IHRoZSBibG9jay4KICAgICAg
ICAgbV9vdmVyZmxvd1RvcCA9IG1pbihtX292ZXJmbG93VG9wLCBjaGlsZC0+eSgpICsgY2hpbGQt
Pm92ZXJmbG93VG9wKGZhbHNlKSk7CkBAIC0yMTA2LDggKzIxMDksOCBAQCBHYXBSZWN0cyBSZW5k
ZXJCbG9jazo6ZmlsbEJsb2NrU2VsZWN0aW9uCiAgICAgICAgICAgICBsYXN0UmlnaHQgPSByaWdo
dFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGN1cnItPnkoKSArIGN1cnItPmhlaWdodCgpKTsK
ICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFN0YXRlICE9IFNlbGVjdGlvbk5vbmUpCiAgICAgICAg
ICAgICAvLyBXZSBtdXN0IGJlIGEgYmxvY2sgdGhhdCBoYXMgc29tZSBzZWxlY3RlZCBvYmplY3Qg
aW5zaWRlIGl0LiAgR28gYWhlYWQgYW5kIHJlY3VyLgotICAgICAgICAgICAgcmVzdWx0LnVuaXRl
KHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4oY3VyciktPmZpbGxTZWxlY3Rpb25HYXBzKHJvb3RC
bG9jaywgYmxvY2tYLCBibG9ja1ksIHR4ICsgY3Vyci0+eCgpLCB0eSArIGN1cnItPnkoKSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgcGFpbnRJbmZv
KSk7CisgICAgICAgICAgICByZXN1bHQudW5pdGUodG9SZW5kZXJCbG9jayhjdXJyKS0+ZmlsbFNl
bGVjdGlvbkdhcHMocm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHggKyBjdXJyLT54KCksIHR5
ICsgY3Vyci0+eSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0VG9wLCBsYXN0TGVmdCwgbGFzdFJpZ2h0LCBwYWlu
dEluZm8pKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI4NjgsNyArMjg3MSw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKICAgICAvLyBGaXJzdCBhZGQgaW4g
ZmxvYXRzIGZyb20gdGhlIHBhcmVudC4KICAgICBpbnQgb2Zmc2V0ID0geSgpOwogICAgIGlmIChw
YXJlbnRIYXNGbG9hdHMpIHsKLSAgICAgICAgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyQmxvY2sgKj4ocGFyZW50KCkpOworICAgICAgICBSZW5kZXJCbG9jayog
cGFyZW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudCgpKTsKICAgICAgICAgYWRkSW50cnVk
aW5nRmxvYXRzKHBhcmVudEJsb2NrLCBwYXJlbnRCbG9jay0+Ym9yZGVyTGVmdCgpICsgcGFyZW50
QmxvY2stPnBhZGRpbmdMZWZ0KCksIG9mZnNldCk7CiAgICAgfQogICAgIApAQCAtMjg4NCw3ICsy
ODg3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoKQogICAgIGlmICghcHJldiB8
fCAhcHJldi0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgUmVu
ZGVyQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sgKj4ocHJldik7CisgICAg
UmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhwcmV2KTsKICAgICBpZiAoYmxvY2st
Pm1fZmxvYXRpbmdPYmplY3RzICYmIGJsb2NrLT5mbG9hdEJvdHRvbSgpID4gb2Zmc2V0KQogICAg
ICAgICBhZGRJbnRydWRpbmdGbG9hdHMoYmxvY2ssIHhvZmZzZXQsIG9mZnNldCk7CiAKQEAgLTMw
MzksNiArMzA0MiwxMSBAQCBib29sIFJlbmRlckJsb2NrOjphdm9pZHNGbG9hdHMoKSBjb25zdAog
ICAgIHJldHVybiBSZW5kZXJGbG93Ojphdm9pZHNGbG9hdHMoKSB8fCAhc3R5bGUoKS0+aGFzQXV0
b0NvbHVtbkNvdW50KCkgfHwgIXN0eWxlKCktPmhhc0F1dG9Db2x1bW5XaWR0aCgpOwogfQogCiti
b29sIFJlbmRlckJsb2NrOjpjb250YWluc0Zsb2F0cygpCit7CisgICAgcmV0dXJuIG1fZmxvYXRp
bmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpOworfQorCiBib29sIFJl
bmRlckJsb2NrOjpjb250YWluc0Zsb2F0KFJlbmRlck9iamVjdCogbykKIHsKICAgICBpZiAobV9m
bG9hdGluZ09iamVjdHMpIHsKQEAgLTMwNjQsNyArMzA3Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
Om1hcmtBbGxEZXNjZW5kYW50c1dpdGgKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICAgICAgaWYgKGlzQmxvY2tGbG93KCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nT3JQb3Np
dGlvbmVkKCkgJiYKICAgICAgICAgICAgICAgICAoKGZsb2F0VG9SZW1vdmUgPyBjaGlsZC0+Y29u
dGFpbnNGbG9hdChmbG9hdFRvUmVtb3ZlKSA6IGNoaWxkLT5jb250YWluc0Zsb2F0cygpKSB8fCBj
aGlsZC0+c2hyaW5rVG9Bdm9pZEZsb2F0cygpKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJCbG9jayo+KGNoaWxkKS0+bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0Zvckxh
eW91dChmbG9hdFRvUmVtb3ZlLCBpbkxheW91dCk7CisgICAgICAgICAgICAgICAgdG9SZW5kZXJC
bG9jayhjaGlsZCktPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoZmxvYXRU
b1JlbW92ZSwgaW5MYXlvdXQpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzE2NSw4ICszMTcz
LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgICAgICAv
LyBIaXQgdGVzdCBmbG9hdHMuCiAgICAgICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RG
bG9hdCAmJiBtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgaWYgKGlzUmVuZGVyVmll
dygpKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsZWRYICs9IHN0YXRpY19jYXN0PFJlbmRlclZp
ZXcqPih0aGlzKS0+ZnJhbWVWaWV3KCktPnNjcm9sbFgoKTsKLSAgICAgICAgICAgICAgICBzY3Jv
bGxlZFkgKz0gc3RhdGljX2Nhc3Q8UmVuZGVyVmlldyo+KHRoaXMpLT5mcmFtZVZpZXcoKS0+c2Ny
b2xsWSgpOworICAgICAgICAgICAgICAgIHNjcm9sbGVkWCArPSB0b1JlbmRlclZpZXcodGhpcykt
PmZyYW1lVmlldygpLT5zY3JvbGxYKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsZWRZICs9IHRv
UmVuZGVyVmlldyh0aGlzKS0+ZnJhbWVWaWV3KCktPnNjcm9sbFkoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIG87CkBAIC00MzM1LDgg
KzQzNDMsNyBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJsb2NrCiAgICAg
ICAgIGlmIChmaXJzdExpbmVCbG9jay0+aXNSZXBsYWNlZCgpIHx8IGZpcnN0TGluZUJsb2NrLT5p
c0Zsb2F0aW5nKCkgfHwgCiAgICAgICAgICAgICAhcGFyZW50QmxvY2sgfHwgcGFyZW50QmxvY2st
PmZpcnN0Q2hpbGQoKSAhPSBmaXJzdExpbmVCbG9jayB8fCAhcGFyZW50QmxvY2stPmlzQmxvY2tG
bG93KCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgQVNTRVJUKHBhcmVudEJsb2NrLT5p
c1JlbmRlckJsb2NrKCkpOwotICAgICAgICBmaXJzdExpbmVCbG9jayA9IHN0YXRpY19jYXN0PFJl
bmRlckJsb2NrKj4ocGFyZW50QmxvY2spOworICAgICAgICBmaXJzdExpbmVCbG9jayA9IHRvUmVu
ZGVyQmxvY2socGFyZW50QmxvY2spOwogICAgIH0gCiAgICAgCiAgICAgaWYgKCFoYXNQc2V1ZG8p
CkBAIC00NDk3LDEyICs0NTA0LDEwIEBAIHN0YXRpYyBSb290SW5saW5lQm94KiBnZXRMaW5lQXRJ
bmRleChSZW4KICAgICAgICAgICAgICAgICBpZiAoY291bnQrKyA9PSBpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gYm94OwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIG9i
aiA9IGJsb2NrLT5maXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTGluZXMob2JqKSkgewotICAgICAgICAg
ICAgICAgICAgICBSb290SW5saW5lQm94ICpib3ggPSBnZXRMaW5lQXRJbmRleChzdGF0aWNfY2Fz
dDxSZW5kZXJCbG9jayo+KG9iaiksIGksIGNvdW50KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGJveCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKFJvb3RJbmxpbmVCb3gqIGJveCA9IGdldExp
bmVBdEluZGV4KHRvUmVuZGVyQmxvY2sob2JqKSwgaSwgY291bnQpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGJveDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC00NTI0LDcgKzQ1MjksNyBAQCBzdGF0aWMgaW50IGdldEhlaWdodEZvckxpbmVDb3VudChSZW5k
ZXJCCiAgICAgICAgICAgICBSZW5kZXJCb3gqIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyA9
IDA7CiAgICAgICAgICAgICBmb3IgKFJlbmRlckJveCogb2JqID0gYmxvY2stPmZpcnN0Q2hpbGRC
b3goKTsgb2JqOyBvYmogPSBvYmotPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoc2hvdWxkQ2hlY2tMaW5lcyhvYmopKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBy
ZXN1bHQgPSBnZXRIZWlnaHRGb3JMaW5lQ291bnQoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihv
YmopLCBsLCBmYWxzZSwgY291bnQpOworICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0g
Z2V0SGVpZ2h0Rm9yTGluZUNvdW50KHRvUmVuZGVyQmxvY2sob2JqKSwgbCwgZmFsc2UsIGNvdW50
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQgKyBvYmotPnkoKSArIChpbmNsdWRlQm90dG9tID8gKGJs
b2NrLT5ib3JkZXJCb3R0b20oKSArIGJsb2NrLT5wYWRkaW5nQm90dG9tKCkpIDogMCk7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtNDU0OSwxMyArNDU1NCwxNSBAQCBpbnQgUmVuZGVyQmxvY2s6Omxp
bmVDb3VudCgpCiB7CiAgICAgaW50IGNvdW50ID0gMDsKICAgICBpZiAoc3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEUpIHsKLSAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCisgICAg
ICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVC
b3gqIGJveCA9IGZpcnN0Um9vdEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFJvb3RCb3goKSkK
ICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3Ig
KFJlbmRlck9iamVjdCogb2JqID0gZmlyc3RDaGlsZCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNp
YmxpbmcoKSkKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBvYmogPSBmaXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTGluZXMob2JqKSkKLSAgICAgICAgICAgICAg
ICAgICAgY291bnQgKz0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvYmopLT5saW5lQ291bnQo
KTsKKyAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gdG9SZW5kZXJCbG9jayhvYmopLT5saW5l
Q291bnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gY291
bnQ7CiB9CkBAIC00NTgzLDcgKzQ1OTAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JC
b3JkZXJGaXQoaW50CiAgICAgICAgICAgICBmb3IgKFJlbmRlckJveCogb2JqID0gZmlyc3RDaGls
ZEJveCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmdCb3goKSkgewogICAgICAgICAgICAg
ICAgIGlmICghb2JqLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG9iai0+aXNCbG9ja0Zsb3coKSAmJiAhb2JqLT5oYXNPdmVyZmxvd0NsaXAoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ob2JqKS0+
YWRqdXN0Rm9yQm9yZGVyRml0KHggKyBvYmotPngoKSwgbGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhvYmopLT5hZGp1c3RGb3JCb3JkZXJGaXQoeCAr
IG9iai0+eCgpLCBsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9i
ai0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIGFyZSBhIHJlcGxhY2VkIGVsZW1lbnQgb3Igc29tZSBraW5kIG9mIG5vbi1i
bG9jay1mbG93IG9iamVjdC4KICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVm
dCwgeCArIG9iai0+eCgpKTsKQEAgLTQ2NDAsMTEgKzQ2NDcsMTIgQEAgdm9pZCBSZW5kZXJCbG9j
azo6Y2xlYXJUcnVuY2F0aW9uKCkKICAgICAgICAgICAgIHNldEhhc01hcmt1cFRydW5jYXRpb24o
ZmFsc2UpOwogICAgICAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBib3ggPSBmaXJzdFJvb3RC
b3goKTsgYm94OyBib3ggPSBib3gtPm5leHRSb290Qm94KCkpCiAgICAgICAgICAgICAgICAgYm94
LT5jbGVhclRydW5jYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogb2JqID0gZmlyc3RDaGlsZCgpOyBvYmo7IG9iaiA9IG9iai0+
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBvYmogPSBmaXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTGluZXMob2JqKSkKLSAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvYmopLT5jbGVhclRydW5jYXRp
b24oKTsKKyAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhvYmopLT5jbGVhclRydW5j
YXRpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIH0KIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoKLSAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByZW5kZXIgb2JqZWN0IGltcGxlbWVudGF0aW9uIGZvciBL
SFRNTC4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwu
Y29tKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDcgKzIzLDYgQEAKICNpZm5kZWYg
UmVuZGVyQmxvY2tfaAogI2RlZmluZSBSZW5kZXJCbG9ja19oCiAKLSNpbmNsdWRlICJEZXByZWNh
dGVkUHRyTGlzdC5oIgogI2luY2x1ZGUgIkdhcFJlY3RzLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxv
dy5oIgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKQEAgLTM2LDkgKzMzLDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIElubGluZUl0ZXJhdG9yOwogY2xhc3MgQmlkaVJ1bjsKIGNs
YXNzIFBvc2l0aW9uOwotY2xhc3MgUm9vdElubGluZUJveDsKIAogdGVtcGxhdGUgPGNsYXNzIEl0
ZXJhdG9yLCBjbGFzcyBSdW4+IGNsYXNzIEJpZGlSZXNvbHZlcjsKK3RlbXBsYXRlIDxjbGFzcyBU
PiBjbGFzcyBEZXByZWNhdGVkUHRyTGlzdDsKKwogdHlwZWRlZiBCaWRpUmVzb2x2ZXI8SW5saW5l
SXRlcmF0b3IsIEJpZGlSdW4+IElubGluZUJpZGlSZXNvbHZlcjsKIAogZW51bSBDYXJldFR5cGUg
eyBDdXJzb3JDYXJldCwgRHJhZ0NhcmV0IH07CkBAIC01NCw3ICs1Miw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVC
b3ggPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29s
IGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogCi0gICAgdmly
dHVhbCBib29sIGlzUmVuZGVyQmxvY2soKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzQmxvY2tGbG93KCkgY29uc3QgeyByZXR1cm4gKCFpc0lubGluZSgpIHx8IGlz
UmVwbGFjZWQoKSkgJiYgIWlzVGFibGUoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZUZs
b3coKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgpICYmICFpc1JlcGxhY2VkKCk7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSBjb25zdCB7IHJldHVybiBp
c0lubGluZSgpICYmIGlzUmVwbGFjZWQoKTsgfQpAQCAtMTgwLDcgKzE3Nyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94
KiBmbG9hdFRvUmVtb3ZlID0gMCwgYm9vbCBpbkxheW91dCA9IHRydWUpOwogICAgIHZvaWQgbWFy
a1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY29udGFp
bnNGbG9hdHMoKSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVj
dHMtPmlzRW1wdHkoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBjb250YWluc0Zsb2F0cygpOwogICAg
IHZpcnR1YWwgYm9vbCBjb250YWluc0Zsb2F0KFJlbmRlck9iamVjdCopOwogCiAgICAgdmlydHVh
bCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0OwpAQCAtNDY2LDYgKzQ2Myw4IEBAIHByb3RlY3Rl
ZDoKICAgICAvLyBFbmQgaGVscGVyIGZ1bmN0aW9ucyBhbmQgc3RydWN0cyB1c2VkIGJ5IGxheW91
dEJsb2NrQ2hpbGRyZW4uCiAKIHByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVyQmxv
Y2soKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJl
bmRlckJveCo+Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBEZXByZWNhdGVkUHRyTGlz
dDxGbG9hdGluZ09iamVjdD4qIG1fZmxvYXRpbmdPYmplY3RzOwogICAgIExpc3RIYXNoU2V0PFJl
bmRlckJveCo+KiBtX3Bvc2l0aW9uZWRPYmplY3RzOwpAQCAtNTAxLDYgKzUwMCwyMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgaW50IG1fb3ZlcmZsb3dUb3A7CiB9OwogCitpbmxpbmUgUmVuZGVyQmxvY2sq
IHRvUmVuZGVyQmxvY2soUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sgCisgICAgQVNTRVJUKCFy
ZW5kZXJlciB8fCByZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmVuZGVyQmxvY2sqPihyZW5kZXJlcik7Cit9CisKK2lubGluZSBjb25zdCBSZW5kZXJC
bG9jayogdG9SZW5kZXJCbG9jayhjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreyAKKyAg
ICBBU1NFUlQoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCbG9jayo+KHJlbmRlcmVyKTsKK30KKworLy8g
VGhpcyBpcyBhIHRyaWNrIHRvIGNhdGNoIGNhbGxlcnMgdHJ5aW5nIHRvIHVzZSB0b1JlbmRlckJs
b2NrIG9uIGEgcG9pbnRlciB0aGF0J3MgYWxyZWFkeSBhIFJlbmRlckJsb2NrLgorLy8gSXQgd2ls
bCBwcm9iYWJseSBmYWlsIHRvIGNvbXBpbGUgYW5kIGRlZmluaXRlbHkgZmFpbCB0byBsaW5rLgor
dm9pZCB0b1JlbmRlckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlckJsb2NrX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAkocmV2aXNpb24gNDAyNTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBSZW5kZXJCb3g6OnN0
eWxlRGlkQ2hhbmdlKFJlbmRlclN0eQogICAgIC8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdmll
dy0+bWF4aW1hbE91dGxpbmVTaXplKCkgaXMgdmFsaWQgZm9yIGFueSByZXBhaW50cyB0aGF0IGhh
cHBlbgogICAgIC8vIGR1cmluZyB0aGUgc3R5bGUgY2hhbmdlIChpdCdzIHVzZWQgYnkgYWJzb2x1
dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpLgogICAgIGlmIChzdHlsZSgpLT5vdXRsaW5lV2lkdGgo
KSA+IDAgJiYgc3R5bGUoKS0+b3V0bGluZVNpemUoKSA+IG1heGltYWxPdXRsaW5lU2l6ZShQYWlu
dFBoYXNlT3V0bGluZSkpCi0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclZpZXcqPihkb2N1bWVu
dCgpLT5yZW5kZXJlcigpKS0+c2V0TWF4aW1hbE91dGxpbmVTaXplKHN0eWxlKCktPm91dGxpbmVT
aXplKCkpOworICAgICAgICBkb2N1bWVudCgpLT5yZW5kZXJWaWV3KCktPnNldE1heGltYWxPdXRs
aW5lU2l6ZShzdHlsZSgpLT5vdXRsaW5lU2l6ZSgpKTsKIAogICAgIFJlbmRlck9iamVjdDo6c3R5
bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogCkBAIC05NzksNyArOTc5LDcgQEAgYm9vbCBS
ZW5kZXJCb3g6OnJlcGFpbnRMYXllclJlY3RzRm9ySW1hZwogICAgICAgICAgICAgICAgICAgICBp
bnQgcnc7CiAgICAgICAgICAgICAgICAgICAgIGludCByaDsKIAotICAgICAgICAgICAgICAgICAg
ICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4obGF5
ZXJSZW5kZXJlciktPmZyYW1lVmlldygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IHRvUmVuZGVyVmlldyhsYXllclJlbmRlcmVyKS0+ZnJhbWVWaWV3
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0gZnJhbWVWaWV3LT5jb250ZW50c1dp
ZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByaCA9IGZyYW1lVmlldy0+Y29udGVudHNI
ZWlnaHQoKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEwNTUsNyArMTA1NSw3
IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjdWxhdGVCYWNrZ3JvdW5kSW1hZ2UKICAgICAgICAgcGgg
PSBoIC0gdG9wIC0gYm90dG9tOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZpeGVkCi0gICAg
ICAgIEludFJlY3QgdnIgPSB2aWV3UmVjdCgpOworICAgICAgICBJbnRSZWN0IHZyID0gdmlldygp
LT52aWV3UmVjdCgpOwogICAgICAgICBjeCA9IHZyLngoKTsKICAgICAgICAgY3kgPSB2ci55KCk7
CiAgICAgICAgIHB3ID0gdnIud2lkdGgoKTsKQEAgLTE0NjMsMTEgKzE0NjMsMTAgQEAgSW50U2l6
ZSBSZW5kZXJCb3g6Om9mZnNldEZyb21Db250YWluZXIoUgogICAgICAgICBvZmZzZXQgKz0gcmVs
YXRpdmVQb3NpdGlvbk9mZnNldCgpOwogCiAgICAgaWYgKCFpc0lubGluZSgpIHx8IGlzUmVwbGFj
ZWQoKSkgewotICAgICAgICBSZW5kZXJCbG9jayogY2I7CiAgICAgICAgIGlmIChvLT5pc0Jsb2Nr
RmxvdygpICYmIHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gQWJzb2x1dGVQb3NpdGlvbiAmJiBzdHls
ZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24KLSAgICAgICAgICAgICAgICAmJiAoY2Ig
PSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG8pKS0+aGFzQ29sdW1ucygpKSB7CisgICAgICAg
ICAgICAgICAgJiYgdG9SZW5kZXJCbG9jayhvKS0+aGFzQ29sdW1ucygpKSB7CiAgICAgICAgICAg
ICBJbnRSZWN0IHJlY3QoeCgpLCB5KCksIDEsIDEpOwotICAgICAgICAgICAgY2ItPmFkanVzdFJl
Y3RGb3JDb2x1bW5zKHJlY3QpOworICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhvKS0+YWRqdXN0
UmVjdEZvckNvbHVtbnMocmVjdCk7CiAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHJlY3QueCgp
LCByZWN0LnkoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZCh4
KCksIHkoKSk7CkBAIC0xNTg5LDcgKzE1ODgsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUFi
c29sdXRlUmVwYWludFJlCiAgICAgICAgIGZpeGVkID0gdHJ1ZTsKIAogICAgIGlmIChvLT5pc0Js
b2NrRmxvdygpICYmIHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gQWJzb2x1dGVQb3NpdGlvbiAmJiBz
dHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pIHsKLSAgICAgICAgUmVuZGVyQmxv
Y2sqIGNiID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvKTsKKyAgICAgICAgUmVuZGVyQmxv
Y2sqIGNiID0gdG9SZW5kZXJCbG9jayhvKTsKICAgICAgICAgaWYgKGNiLT5oYXNDb2x1bW5zKCkp
IHsKICAgICAgICAgICAgIEludFJlY3QgcmVwYWludFJlY3QodG9wTGVmdCwgcmVjdC5zaXplKCkp
OwogICAgICAgICAgICAgY2ItPmFkanVzdFJlY3RGb3JDb2x1bW5zKHJlcGFpbnRSZWN0KTsKQEAg
LTIwNjcsMTMgKzIwNjYsMTMgQEAgaW50IFJlbmRlckJveDo6Y2FsY1JlcGxhY2VkSGVpZ2h0VXNp
bmcoTAogICAgICAgICB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNiID0gaXNQb3NpdGlv
bmVkKCkgPyBjb250YWluZXIoKSA6IGNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgd2hp
bGUgKGNiLT5pc0Fub255bW91cygpKSB7Ci0gICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFp
bmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihj
YiktPmFkZFBlcmNlbnRIZWlnaHREZXNjZW5kYW50KGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhp
cykpOworICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGNiLT5jb250YWluaW5n
QmxvY2soKTsKKyAgICAgICAgICAgICAgICBibG9jay0+YWRkUGVyY2VudEhlaWdodERlc2NlbmRh
bnQoY29uc3RfY2FzdDxSZW5kZXJCb3gqPih0aGlzKSk7CisgICAgICAgICAgICAgICAgY2IgPSBi
bG9jazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNiLT5pc1Bvc2l0aW9uZWQo
KSAmJiBjYi0+c3R5bGUoKS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgIShjYi0+c3R5bGUoKS0+dG9w
KCkuaXNBdXRvKCkgfHwgY2ItPnN0eWxlKCktPmJvdHRvbSgpLmlzQXV0bygpKSkgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChjYi0+aXNSZW5kZXJCbG9jaygpKTsKLSAgICAgICAgICAgICAgICBS
ZW5kZXJCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNiKTsKKyAgICAg
ICAgICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKGNiKTsKICAgICAg
ICAgICAgICAgICBpbnQgb2xkSGVpZ2h0ID0gYmxvY2stPmhlaWdodCgpOwogICAgICAgICAgICAg
ICAgIGJsb2NrLT5jYWxjSGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgaW50IG5ld0hlaWdodCA9
IGJsb2NrLT5jYWxjQ29udGVudEJveEhlaWdodChibG9jay0+Y29udGVudEhlaWdodCgpKTsKQEAg
LTIxMTIsNyArMjExMSw3IEBAIGludCBSZW5kZXJCb3g6OmF2YWlsYWJsZUhlaWdodFVzaW5nKGNv
bnMKICAgICAgICAgcmV0dXJuIGNhbGNDb250ZW50Qm94SGVpZ2h0KGgudmFsdWUoKSk7CiAKICAg
ICBpZiAoaXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJWaWV3Kj4odGhpcyktPmZyYW1lVmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAgICAg
IHJldHVybiB0b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT52aXNpYmxlSGVpZ2h0KCk7
CiAKICAgICAvLyBXZSBuZWVkIHRvIHN0b3AgaGVyZSwgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBp
bmNyZWFzZSB0aGUgaGVpZ2h0IG9mIHRoZSB0YWJsZQogICAgIC8vIGFydGlmaWNpYWxseS4gIFdl
J3JlIGdvaW5nIHRvIHJlbHkgb24gdGhpcyBjZWxsIGdldHRpbmcgZXhwYW5kZWQgdG8gc29tZSBu
ZXcKQEAgLTIxMjQsNyArMjEyMyw3IEBAIGludCBSZW5kZXJCb3g6OmF2YWlsYWJsZUhlaWdodFVz
aW5nKGNvbnMKICAgICAgICByZXR1cm4gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaC5jYWxjVmFsdWUo
Y29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUhlaWdodCgpKSk7CiAKICAgICBpZiAoaXNSZW5k
ZXJCbG9jaygpICYmIGlzUG9zaXRpb25lZCgpICYmIHN0eWxlKCktPmhlaWdodCgpLmlzQXV0bygp
ICYmICEoc3R5bGUoKS0+dG9wKCkuaXNBdXRvKCkgfHwgc3R5bGUoKS0+Ym90dG9tKCkuaXNBdXRv
KCkpKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGNvbnN0X2Nhc3Q8UmVuZGVyQmxv
Y2sqPihzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCbG9jayo+KHRoaXMpKTsKKyAgICAgICAgUmVu
ZGVyQmxvY2sqIGJsb2NrID0gY29uc3RfY2FzdDxSZW5kZXJCbG9jayo+KHRvUmVuZGVyQmxvY2so
dGhpcykpOwogICAgICAgICBpbnQgb2xkSGVpZ2h0ID0gYmxvY2stPmhlaWdodCgpOwogICAgICAg
ICBibG9jay0+Y2FsY0hlaWdodCgpOwogICAgICAgICBpbnQgbmV3SGVpZ2h0ID0gYmxvY2stPmNh
bGNDb250ZW50Qm94SGVpZ2h0KGJsb2NrLT5jb250ZW50SGVpZ2h0KCkpOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgJKHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4MCwxOCArMzgwLDIyIEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIGJvb2wgc19oYWRPdmVyZmxvd0NsaXA7CiB9OwogCi1pbmxpbmUgUmVuZGVyQm94KiB0
b1JlbmRlckJveChSZW5kZXJPYmplY3QqIG8pCitpbmxpbmUgUmVuZGVyQm94KiB0b1JlbmRlckJv
eChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogeyAKLSAgICBBU1NFUlQoIW8gfHwgby0+aXNCb3go
KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckJveCo+KG8pOworICAgIEFTU0VSVCgh
cmVuZGVyZXIgfHwgcmVuZGVyZXItPmlzQm94KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxS
ZW5kZXJCb3gqPihyZW5kZXJlcik7CiB9CiAKLWlubGluZSBjb25zdCBSZW5kZXJCb3gqIHRvUmVu
ZGVyQm94KGNvbnN0IFJlbmRlck9iamVjdCogbykKK2lubGluZSBjb25zdCBSZW5kZXJCb3gqIHRv
UmVuZGVyQm94KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7IAotICAgIEFTU0VSVCgh
byB8fCBvLT5pc0JveCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94
Kj4obyk7CisgICAgQVNTRVJUKCFyZW5kZXJlciB8fCByZW5kZXJlci0+aXNCb3goKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlckJveCo+KHJlbmRlcmVyKTsKIH0KIAorLy8g
VGhpcyBpcyBhIHRyaWNrIHRvIGNhdGNoIGNhbGxlcnMgdHJ5aW5nIHRvIHVzZSB0b1JlbmRlckJv
eCBvbiBhIHBvaW50ZXIgdGhhdCdzIGFscmVhZHkgYSBSZW5kZXJCb3guCisvLyBJdCB3aWxsIHBy
b2JhYmx5IGZhaWwgdG8gY29tcGlsZSBhbmQgZGVmaW5pdGVseSBmYWlsIHRvIGxpbmsuCit2b2lk
IHRvUmVuZGVyQm94KGNvbnN0IFJlbmRlckJveCopOworCiBpbmxpbmUgUmVuZGVyQm94KiBSZW5k
ZXJCb3g6OnByZXZpb3VzU2libGluZ0JveCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRvUmVuZGVy
Qm94KHByZXZpb3VzU2libGluZygpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZp
bGVVcGxvYWRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3
ICsyMiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIKIAogI2luY2x1
ZGUgIkZpbGVMaXN0LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDcgQEAKIC8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmVuZGVyIG9iamVjdCBpbXBsZW1lbnRhdGlv
biBmb3IgS0hUTUwuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTQzMyw3ICs0MzEsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94
OjpsYXlvdXRIb3Jpem9udGFsCiAgICAgICAgICAgICAvLyBmaWxsIHRoZSBoZWlnaHQgb2YgYSBj
b250YWluaW5nIGJveCBieSBkZWZhdWx0LgogICAgICAgICAgICAgLy8gTm93IGRvIGEgbGF5b3V0
LgogICAgICAgICAgICAgaW50IG9sZENoaWxkSGVpZ2h0ID0gY2hpbGQtPmhlaWdodCgpOwotICAg
ICAgICAgICAgdG9SZW5kZXJCb3goY2hpbGQpLT5jYWxjSGVpZ2h0KCk7CisgICAgICAgICAgICBj
aGlsZC0+Y2FsY0hlaWdodCgpOwogICAgICAgICAgICAgaWYgKG9sZENoaWxkSGVpZ2h0ICE9IGNo
aWxkLT5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xheW91
dCh0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKQEAg
LTQ2Myw3ICs0NjEsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFs
CiAgICAgICAgICAgICBwbGFjZUNoaWxkKGNoaWxkLCB4UG9zLCBjaGlsZFkpOwogCiAgICAgICAg
ICAgICBpZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKS0+YWRkVmlzdWFsT3ZlcmZsb3coc3RhdGljX2Nhc3Q8
UmVuZGVyQmxvY2sqPihjaGlsZCktPmZsb2F0UmVjdCgpKTsKKyAgICAgICAgICAgICAgICB0b1Jl
bmRlckJsb2NrKGNoaWxkKS0+YWRkVmlzdWFsT3ZlcmZsb3codG9SZW5kZXJCbG9jayhjaGlsZCkt
PmZsb2F0UmVjdCgpKTsKIAogICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IG1heChtX292
ZXJmbG93SGVpZ2h0LCBjaGlsZFkgKyBjaGlsZC0+b3ZlcmZsb3dIZWlnaHQoZmFsc2UpKTsKICAg
ICAgICAgICAgIG1fb3ZlcmZsb3dUb3AgPSBtaW4obV9vdmVyZmxvd1RvcCwgY2hpbGQtPnkoKSAr
IGNoaWxkLT5vdmVyZmxvd1RvcChmYWxzZSkpOwpAQCAtNzAyLDEzICs3MDAsMTMgQEAgdm9pZCBS
ZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgLy8gRGlydHkgYWxsIHRoZSBwb3NpdGlvbmVkIG9iamVjdHMu
CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKS0+bWFy
a1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKS0+Y2xlYXJUcnVuY2F0aW9uKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGNoaWxkKS0+bWFya1Bvc2l0aW9uZWRP
YmplY3RzRm9yTGF5b3V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2Nr
KGNoaWxkKS0+Y2xlYXJUcnVuY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBj
aGlsZC0+aXNCbG9ja0Zsb3coKSkKLSAgICAgICAgICAgICAgICAgICAgbWF4TGluZUNvdW50ID0g
bWF4KG1heExpbmVDb3VudCwgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjaGlsZCktPmxpbmVD
b3VudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF4TGluZUNvdW50ID0gbWF4KG1heExpbmVD
b3VudCwgdG9SZW5kZXJCbG9jayhjaGlsZCktPmxpbmVDb3VudCgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNoaWxkID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICB9CkBAIC03MjEs
NyArNzE5LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwogICAg
ICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNQb3NpdGlvbmVkKCkgfHwgIWNoaWxkLT5zdHlsZSgp
LT5oZWlnaHQoKS5pc0F1dG8oKSB8fCAhY2hpbGQtPmlzQmxvY2tGbG93KCkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrKiBibG9ja0NoaWxkID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjaGlsZCk7
CisgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrQ2hpbGQgPSB0b1JlbmRlckJsb2Nr
KGNoaWxkKTsKICAgICAgICAgICAgICAgICBpbnQgbGluZUNvdW50ID0gYmxvY2tDaGlsZC0+bGlu
ZUNvdW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKGxpbmVDb3VudCA8PSBudW1WaXNpYmxlTGlu
ZXMpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNzY5LDggKzc2Nyw4IEBAIHZv
aWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICAgICAgICAgICAgICBp
bnQgdG90YWxXaWR0aCA9IGVsbGlwc2lzQW5kU3BhY2VXaWR0aCArIGFuY2hvckJveC0+d2lkdGgo
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhpcyB3aWR0
aCBjYW4gYmUgYWNjb21tb2RhdGVkIG9uIHRoZSBsYXN0IHZpc2libGUgbGluZQotICAgICAgICAg
ICAgICAgIFJlbmRlckJsb2NrKiBkZXN0QmxvY2sgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+
KGxhc3RWaXNpYmxlTGluZS0+b2JqZWN0KCkpOwotICAgICAgICAgICAgICAgIFJlbmRlckJsb2Nr
KiBzcmNCbG9jayA9IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4obGFzdExpbmUtPm9iamVjdCgp
KTsKKyAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogZGVzdEJsb2NrID0gdG9SZW5kZXJCbG9j
ayhsYXN0VmlzaWJsZUxpbmUtPm9iamVjdCgpKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJCbG9j
ayogc3JjQmxvY2sgPSB0b1JlbmRlckJsb2NrKGxhc3RMaW5lLT5vYmplY3QoKSk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IERpcmVjdGlvbnMgb2Ygc3JjL2Rl
c3RCbG9jayBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBvdXIgZGlyZWN0aW9uIGFuZCBmcm9tIG9u
ZSBhbm90aGVyLgogICAgICAgICAgICAgICAgIGlmIChzcmNCbG9jay0+c3R5bGUoKS0+ZGlyZWN0
aW9uKCkgIT0gTFRSKQpAQCAtODU2LDcgKzg1NCw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6
OmxheW91dFZlcnRpY2FsQm8KICAgICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGNoaWxk
LT5oZWlnaHQoKSArIGNoaWxkLT5tYXJnaW5Cb3R0b20oKSk7CiAgICAgCiAgICAgICAgICAgICBp
ZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJCbG9jayo+KGNoaWxkKS0+YWRkVmlzdWFsT3ZlcmZsb3coc3RhdGljX2Nhc3Q8UmVuZGVy
QmxvY2sqPihjaGlsZCktPmZsb2F0UmVjdCgpKTsKKyAgICAgICAgICAgICAgICB0b1JlbmRlckJs
b2NrKGNoaWxkKS0+YWRkVmlzdWFsT3ZlcmZsb3codG9SZW5kZXJCbG9jayhjaGlsZCktPmZsb2F0
UmVjdCgpKTsKIAogICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgY2hpbGQgaGFzIG1hZGUgb3Vy
IG92ZXJmbG93IG5lZWQgdG8gZ3Jvdy4KICAgICAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9IG1h
eChjaGlsZC0+eCgpICsgY2hpbGQtPm92ZXJmbG93V2lkdGgoZmFsc2UpLCBtX292ZXJmbG93V2lk
dGgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gNDAyNTApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDggKzg4LDcgQEAgcHJpdmF0ZToKICAgICBUaW1lcjxSZW5kZXJJbWFnZT4gbV9oaWdoUXVhbGl0
eVJlcGFpbnRUaW1lcjsKIH07CiAKLWNsYXNzIFJlbmRlckltYWdlU2NhbGVPYnNlcnZlcgotewor
Y2xhc3MgUmVuZGVySW1hZ2VTY2FsZU9ic2VydmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9v
bCBzaG91bGRJbWFnZVBhaW50QXRMb3dRdWFsaXR5KFJlbmRlckltYWdlKiwgY29uc3QgSW50U2l6
ZSYpOwogCkBAIC0yMTcsMjQgKzIxNiwyNCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQg
cGFkZGluZ0hlaWdoCiBzdGF0aWMgY29uc3QgaW50IG1heEFsdFRleHRXaWR0aCA9IDEwMjQ7CiBz
dGF0aWMgY29uc3QgaW50IG1heEFsdFRleHRIZWlnaHQgPSAyNTY7CiAKLS8vIFNldHMgdGhlIGlt
YWdlIGhlaWdodCBhbmQgd2lkdGggdG8gZml0IHRoZSBhbHQgdGV4dC4gIFJldHVybnMgdHJ1ZSBp
ZiB0aGUKLS8vIGltYWdlIHNpemUgY2hhbmdlZC4KLWJvb2wgUmVuZGVySW1hZ2U6OnNldEltYWdl
U2l6ZUZvckFsdFRleHQoQ2FjaGVkSW1hZ2UqIG5ld0ltYWdlIC8qID0gMCAqLykKKy8vIFNldHMg
dGhlIGltYWdlIGhlaWdodCBhbmQgd2lkdGggdG8gZml0IHRoZSBhbHQgdGV4dC4KKy8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgaW1hZ2Ugc2l6ZSBjaGFuZ2VkLgorYm9vbCBSZW5kZXJJbWFnZTo6c2V0
SW1hZ2VTaXplRm9yQWx0VGV4dCgpCiB7CiAgICAgaW50IGltYWdlV2lkdGggPSAwOwogICAgIGlu
dCBpbWFnZUhlaWdodCA9IDA7CiAgIAogICAgIC8vIElmIHdlJ2xsIGJlIGRpc3BsYXlpbmcgZWl0
aGVyIHRleHQgb3IgYW4gaW1hZ2UsIGFkZCBhIGxpdHRsZSBwYWRkaW5nLgotICAgIGlmICghbV9h
bHRUZXh0LmlzRW1wdHkoKSB8fCBuZXdJbWFnZSkgeworICAgIGlmICghbV9hbHRUZXh0LmlzRW1w
dHkoKSB8fCBtX2NhY2hlZEltYWdlKSB7CiAgICAgICAgIGltYWdlV2lkdGggPSBwYWRkaW5nV2lk
dGg7CiAgICAgICAgIGltYWdlSGVpZ2h0ID0gcGFkZGluZ0hlaWdodDsKICAgICB9CiAgIAotICAg
IGlmIChuZXdJbWFnZSkgeworICAgIGlmIChtX2NhY2hlZEltYWdlKSB7CiAgICAgICAgIC8vIGlt
YWdlU2l6ZSgpIHJldHVybnMgMCBmb3IgdGhlIGVycm9yIGltYWdlLiAgV2UgbmVlZCB0aGUgdHJ1
ZSBzaXplIG9mIHRoZQogICAgICAgICAvLyBlcnJvciBpbWFnZSwgc28gd2UgaGF2ZSB0byBnZXQg
aXQgYnkgZ3JhYmJpbmcgaW1hZ2UoKSBkaXJlY3RseS4KLSAgICAgICAgaW1hZ2VXaWR0aCArPSBu
ZXdJbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAg
ICAgICAgaW1hZ2VIZWlnaHQgKz0gbmV3SW1hZ2UtPmltYWdlKCktPmhlaWdodCgpICogc3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBpbWFnZVdpZHRoICs9IG1fY2FjaGVkSW1hZ2Ut
PmltYWdlKCktPndpZHRoKCkgKiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgIGlt
YWdlSGVpZ2h0ICs9IG1fY2FjaGVkSW1hZ2UtPmltYWdlKCktPmhlaWdodCgpICogc3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpOwogICAgIH0KICAgCiAgICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRo
ZSB1c2VyIG1lYW50IGl0IChpdHMgbm90IGEgdGV4dCB3ZSBpbnZlbnRlZCkKQEAgLTI2Nyw3ICsy
NjYsNyBAQCB2b2lkIFJlbmRlckltYWdlOjppbWFnZUNoYW5nZWQoV3JhcHBlZEltCiAKICAgICAv
LyBTZXQgaW1hZ2UgZGltZW5zaW9ucywgdGFraW5nIGludG8gYWNjb3VudCB0aGUgc2l6ZSBvZiB0
aGUgYWx0IHRleHQuCiAgICAgaWYgKGVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgaW1hZ2VTaXpl
Q2hhbmdlZCA9IHNldEltYWdlU2l6ZUZvckFsdFRleHQobV9jYWNoZWRJbWFnZS5nZXQoKSk7Cisg
ICAgICAgIGltYWdlU2l6ZUNoYW5nZWQgPSBzZXRJbWFnZVNpemVGb3JBbHRUZXh0KCk7CiAgICAg
CiAgICAgYm9vbCBzaG91bGRSZXBhaW50ID0gdHJ1ZTsKIApAQCAtMzkwLDcgKzM4OSw4IEBAIHZv
aWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0gZWxzZSBpZiAoaGFzSW1hZ2UoKSAmJiBjV2lkdGggPiAwICYmIGNIZWln
aHQgPiAwKSB7Ci0gICAgICAgIEltYWdlKiBpbWcgPSBpbWFnZShjV2lkdGgsIGNIZWlnaHQpOwor
ICAgICAgICBJbnRTaXplIGNvbnRlbnRTaXplKGNXaWR0aCwgY0hlaWdodCk7CisgICAgICAgIFJl
ZlB0cjxJbWFnZT4gaW1nID0gaW1hZ2UoY29udGVudFNpemUpOwogICAgICAgICBpZiAoIWltZyB8
fCBpbWctPmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0zOTksMTIgKzM5OSwx
MSBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgICAgICAg
ICBwYWludEN1c3RvbUhpZ2hsaWdodCh0eCAtIHgoKSwgdHkgLSB5KCksIHN0eWxlKCktPmhpZ2hs
aWdodCgpLCB0cnVlKTsKICNlbmRpZgogCi0gICAgICAgIEludFNpemUgY29udGVudFNpemUoY1dp
ZHRoLCBjSGVpZ2h0KTsKICAgICAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IFJlbmRl
ckltYWdlU2NhbGVPYnNlcnZlcjo6c2hvdWxkSW1hZ2VQYWludEF0TG93UXVhbGl0eSh0aGlzLCBj
b250ZW50U2l6ZSk7CiAgICAgICAgIEludFJlY3QgcmVjdChJbnRQb2ludCh0eCArIGxlZnRCb3Jk
ZXIgKyBsZWZ0UGFkLCB0eSArIHRvcEJvcmRlciArIHRvcFBhZCksIGNvbnRlbnRTaXplKTsKICAg
ICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbHQgPSAoZWxlbWVudCgpICYmIGVsZW1lbnQo
KS0+aGFzVGFnTmFtZShpbWdUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihl
bGVtZW50KCkpIDogMDsKICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0
b3IgPSBpbWFnZUVsdCA/IGltYWdlRWx0LT5jb21wb3NpdGVPcGVyYXRvcigpIDogQ29tcG9zaXRl
U291cmNlT3ZlcjsKLSAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlKGNXaWR0aCwgY0hl
aWdodCksIHJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7Cisg
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWcuZ2V0KCksIHJlY3QsIGNvbXBvc2l0ZU9wZXJh
dG9yLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7CiAgICAgfQogfQogCkBAIC01NzQsNCArNTczLDQw
IEBAIEltYWdlKiBSZW5kZXJJbWFnZTo6bnVsbEltYWdlKCkKICAgICByZXR1cm4gSW1hZ2U6Om51
bGxJbWFnZSgpOwogfQogCitJbWFnZSogUmVuZGVySW1hZ2U6OmltYWdlKGNvbnN0IEludFNpemUm
KQoreworICAgIHJldHVybiBtX2NhY2hlZEltYWdlID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKSA6
IG51bGxJbWFnZSgpOworfQorCitib29sIFJlbmRlckltYWdlOjplcnJvck9jY3VycmVkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jYWNoZWRJbWFnZSAmJiBtX2NhY2hlZEltYWdlLT5lcnJvck9j
Y3VycmVkKCk7Cit9CisKK2Jvb2wgUmVuZGVySW1hZ2U6OnVzZXNJbWFnZUNvbnRhaW5lclNpemUo
KSBjb25zdAoreworICAgIHJldHVybiBtX2NhY2hlZEltYWdlICYmIG1fY2FjaGVkSW1hZ2UtPnVz
ZXNJbWFnZUNvbnRhaW5lclNpemUoKTsKK30KKwordm9pZCBSZW5kZXJJbWFnZTo6c2V0SW1hZ2VD
b250YWluZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKG1fY2Fj
aGVkSW1hZ2UpCisgICAgICAgIG1fY2FjaGVkSW1hZ2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShz
aXplKTsKK30KKworYm9vbCBSZW5kZXJJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jYWNoZWRJbWFnZSAmJiBtX2NhY2hlZEltYWdlLT5pbWFnZUhh
c1JlbGF0aXZlV2lkdGgoKTsKK30KKworYm9vbCBSZW5kZXJJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2
ZUhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgJiYgbV9jYWNoZWRJ
bWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpOworfQorCitJbnRTaXplIFJlbmRlckltYWdl
OjppbWFnZVNpemUoZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYWNo
ZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPmltYWdlU2l6ZShtdWx0aXBsaWVyKSA6IEludFNpemUo
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5oCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxs
YW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKSAKICAqICAgICAgICAgICAoQykg
MjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwxMiArMjUs
MTIgQEAKICNpZm5kZWYgUmVuZGVySW1hZ2VfaAogI2RlZmluZSBSZW5kZXJJbWFnZV9oCiAKLSNp
bmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyUmVwbGFjZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBDYWNoZWRJbWFnZTsKIGNsYXNzIEhUTUxNYXBFbGVtZW50OwogCiBjbGFzcyBSZW5kZXJJ
bWFnZSA6IHB1YmxpYyBSZW5kZXJSZXBsYWNlZCB7CkBAIC0zOCwyNCArMzgsMjYgQEAgcHVibGlj
OgogICAgIFJlbmRlckltYWdlKE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJJbWFnZSgpOwog
Citwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsg
cmV0dXJuICJSZW5kZXJJbWFnZSI7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckltYWdlKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlcGxhY2Vk
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0dWFsIGlu
dCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKIAorcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDAp
OwogICAgIAotICAgIGJvb2wgc2V0SW1hZ2VTaXplRm9yQWx0VGV4dChDYWNoZWRJbWFnZSogbmV3
SW1hZ2UgPSAwKTsKLQorcHVibGljOgorICAgIGJvb2wgc2V0SW1hZ2VTaXplRm9yQWx0VGV4dCgp
OwogICAgIHZvaWQgdXBkYXRlQWx0VGV4dCgpOwogCiAgICAgdm9pZCBzZXRDYWNoZWRJbWFnZShD
YWNoZWRJbWFnZSopOwogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FjaGVkSW1hZ2UuZ2V0KCk7IH0KIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgs
IGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKICAgICB2aXJ0dWFsIGlu
dCBjYWxjUmVwbGFjZWRXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCA9IHRydWUpIGNvbnN0OwpA
QCAtNjMsMjcgKzY1LDMyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldp
ZHRocygpOwogCitwdWJsaWM6CiAgICAgSFRNTE1hcEVsZW1lbnQqIGltYWdlTWFwKCk7CiAKICAg
ICB2b2lkIHJlc2V0QW5pbWF0aW9uKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzSW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX2NhY2hlZEltYWdlOyB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCBoaWdo
UXVhbGl0eVJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlckltYWdlPiopOwogCitwdWJsaWM6
CisgICAgdmlydHVhbCBJbWFnZSogaW1hZ2UoY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKCkpOwor
CiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBJbWFnZSogaW1hZ2UoaW50IC8qdyovID0gMCwgaW50
IC8qaCovID0gMCkgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSA/IG1fY2FjaGVkSW1hZ2UtPmltYWdl
KCkgOiBudWxsSW1hZ2UoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBlcnJvck9jY3VycmVkKCkgY29u
c3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZSAmJiBtX2NhY2hlZEltYWdlLT5lcnJvck9jY3VycmVk
KCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT51c2VzSW1hZ2VDb250YWluZXJT
aXplKCkgOiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZUNvbnRhaW5lclNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QgeyBpZiAobV9jYWNoZWRJbWFnZSkgbV9jYWNoZWRJ
bWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHNpemUpOyB9Ci0gICAgdmlydHVhbCBib29sIGlt
YWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2Nh
Y2hlZEltYWdlLT5pbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSA6IGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZElt
YWdlID8gbV9jYWNoZWRJbWFnZS0+aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIDogZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIEludFNpemUgaW1hZ2VTaXplKGZsb2F0IG11bHRpcGxpZXIpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkSW1hZ2UgPyBtX2NhY2hlZEltYWdlLT5pbWFnZVNpemUobXVsdGlwbGll
cikgOiBJbnRTaXplKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0
OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6ZShjb25zdCBJbnRT
aXplJikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBJbnRTaXplIGltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVyKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFdyYXBwZWRJbWFnZVB0ciBpbWFnZVB0cigpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkSW1hZ2UuZ2V0KCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBpbnRyaW5zaWNTaXplQ2hhbmdl
ZCgpIHsgaW1hZ2VDaGFuZ2VkKGltYWdlUHRyKCkpOyB9CiAKLXByaXZhdGU6CiAgICAgaW50IGNh
bGNBc3BlY3RSYXRpb1dpZHRoKCkgY29uc3Q7CiAgICAgaW50IGNhbGNBc3BlY3RSYXRpb0hlaWdo
dCgpIGNvbnN0OwogCkBAIC05NCwxNCArMTAxLDMxIEBAIHByb3RlY3RlZDoKICAgICAvLyBUaGUg
aW1hZ2Ugd2UgYXJlIHJlbmRlcmluZy4KICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJ
bWFnZT4gbV9jYWNoZWRJbWFnZTsKIAorcHJpdmF0ZToKICAgICAvLyBUZXh0IHRvIGRpc3BsYXkg
YXMgbG9uZyBhcyB0aGUgaW1hZ2UgaXNuJ3QgYXZhaWxhYmxlLgogICAgIFN0cmluZyBtX2FsdFRl
eHQ7CiAKICAgICBzdGF0aWMgSW1hZ2UqIG51bGxJbWFnZSgpOwotICAgIAotICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJJbWFnZVNjYWxlT2JzZXJ2ZXI7CisKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVy
SW1hZ2VTY2FsZURhdGE7CiB9OwogCitpbmxpbmUgUmVuZGVySW1hZ2UqIHRvUmVuZGVySW1hZ2Uo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sgCisgICAgQVNTRVJUKCFyZW5kZXJlciB8fCByZW5k
ZXJlci0+aXNJbWFnZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihy
ZW5kZXJlcik7Cit9CisKK2lubGluZSBjb25zdCBSZW5kZXJJbWFnZSogdG9SZW5kZXJJbWFnZShj
b25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreyAKKyAgICBBU1NFUlQoIXJlbmRlcmVyIHx8
IHJlbmRlcmVyLT5pc0ltYWdlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5k
ZXJJbWFnZSo+KHJlbmRlcmVyKTsKK30KKworLy8gVGhpcyBpcyBhIHRyaWNrIHRvIGNhdGNoIGNh
bGxlcnMgdHJ5aW5nIHRvIHVzZSB0b1JlbmRlckltYWdlIG9uIGEgcG9pbnRlciB0aGF0J3MgYWxy
ZWFkeSBhIFJlbmRlckltYWdlLgorLy8gSXQgd2lsbCBwcm9iYWJseSBmYWlsIHRvIGNvbXBpbGUg
YW5kIGRlZmluaXRlbHkgZmFpbCB0byBsaW5rLgordm9pZCB0b1JlbmRlckltYWdlKGNvbnN0IFJl
bmRlckltYWdlKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRl
ckltYWdlX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlR2VuZXJhdGVkQ29u
dGVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlR2VuZXJh
dGVkQ29udGVudC5oCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlR2VuZXJhdGVkQ29udGVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDI2ICsyNywy
MSBAQAogI2RlZmluZSBSZW5kZXJJbWFnZUdlbmVyYXRlZENvbnRlbnRfaAogCiAjaW5jbHVkZSAi
UmVuZGVySW1hZ2UuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN0eWxlSW1hZ2U7CiAK
LWNsYXNzIFJlbmRlckltYWdlR2VuZXJhdGVkQ29udGVudCA6IHB1YmxpYyBSZW5kZXJJbWFnZQot
eworY2xhc3MgUmVuZGVySW1hZ2VHZW5lcmF0ZWRDb250ZW50IDogcHVibGljIFJlbmRlckltYWdl
IHsKIHB1YmxpYzoKICAgICBSZW5kZXJJbWFnZUdlbmVyYXRlZENvbnRlbnQoTm9kZSopOwogICAg
IHZpcnR1YWwgflJlbmRlckltYWdlR2VuZXJhdGVkQ29udGVudCgpOwotICAgIAorCiAgICAgdm9p
ZCBzZXRTdHlsZUltYWdlKFN0eWxlSW1hZ2UqKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaGFz
SW1hZ2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCBJbWFnZSogaW1hZ2UoaW50IHcgPSAwLCBpbnQgaCA9IDApIHsgcmV0dXJuIG1fc3R5bGVJ
bWFnZS0+aW1hZ2UodGhpcywgSW50U2l6ZSh3LCBoKSk7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9ICAgIAorICAgIHZpcnR1
YWwgSW1hZ2UqIGltYWdlKGNvbnN0IEludFNpemUmIHNpemUpIHsgcmV0dXJuIG1fc3R5bGVJbWFn
ZS0+aW1hZ2UodGhpcywgc2l6ZSk7IH0KICAgICB2aXJ0dWFsIGJvb2wgZXJyb3JPY2N1cnJlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpOyB9CiAgICAgdmly
dHVhbCBib29sIHVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxl
SW1hZ2UtPnVzZXNJbWFnZUNvbnRhaW5lclNpemUoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QgeyBtX3N0eWxlSW1h
Z2UtPnNldEltYWdlQ29udGFpbmVyU2l6ZShzaXplKTsgfQpAQCAtNTUsNyArNTAsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCBJbnRTaXplIGltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVyKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlSW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBtdWx0aXBsaWVyKTsg
fQogICAgIHZpcnR1YWwgV3JhcHBlZEltYWdlUHRyIGltYWdlUHRyKCkgY29uc3QgeyByZXR1cm4g
bV9zdHlsZUltYWdlLT5kYXRhKCk7IH0KIAotcHJpdmF0ZToKICAgICBSZWZQdHI8U3R5bGVJbWFn
ZT4gbV9zdHlsZUltYWdlOwogfTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
cmV2aXNpb24gNDAyNTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwMiw4ICs0MDIsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVM
YXllclBvc2l0aW9uKCkKIAogICAgIG1fcmVsWCA9IG1fcmVsWSA9IDA7CiAgICAgaWYgKHJlbmRl
cmVyKCktPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIG1fcmVsWCA9IHRvUmVuZGVyQm94
KHJlbmRlcmVyKCkpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpOwotICAgICAgICBtX3JlbFkg
PSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldFkoKTsKKyAg
ICAgICAgbV9yZWxYID0gcmVuZGVyZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldFgoKTsKKyAg
ICAgICAgbV9yZWxZID0gcmVuZGVyZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldFkoKTsKICAg
ICAgICAgeCArPSBtX3JlbFg7IHkgKz0gbV9yZWxZOwogICAgIH0KICAgICAKQEAgLTQxNSw3ICs0
MTUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKICAgICAgICAg
cG9zaXRpb25lZFBhcmVudC0+c3VidHJhY3RTY3JvbGxlZENvbnRlbnRPZmZzZXQoeCwgeSk7CiAg
ICAgICAgIAogICAgICAgICBpZiAocmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCkpIHsKLSAgICAg
ICAgICAgIEludFNpemUgb2Zmc2V0ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPm9mZnNldEZv
clBvc2l0aW9uZWRJbkNvbnRhaW5lcihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKTsKKyAg
ICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gcmVuZGVyZXIoKS0+b2Zmc2V0Rm9yUG9zaXRpb25l
ZEluQ29udGFpbmVyKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAg
eCArPSBvZmZzZXQud2lkdGgoKTsKICAgICAgICAgICAgIHkgKz0gb2Zmc2V0LmhlaWdodCgpOwog
ICAgICAgICB9CkBAIC0xNDM5LDcgKzE0MzksNyBAQCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0CiAgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOwog
ICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ocmVuZGVyZXIoKSktPmxheW91
dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKHJlbmRlcmVy
KCkpLT5sYXlvdXRCbG9jayh0cnVlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVyKCktPmxheW91dCgpOwogICAgICAgICAgICAgICAgIG1faW5PdmVy
Zmxvd1JlbGF5b3V0ID0gZmFsc2U7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
Y3BwCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDcgQEAKLS8qKgotICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbmRyZXcgV2VsbGluZ3RvbiAocHJv
dG9uQHdpcmV0YXBwZWQubmV0KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTE1Nyw3ICsxNTUsNyBAQCBzdGF0
aWMgUmVuZGVyT2JqZWN0KiBnZXRQYXJlbnRPZkZpcnN0TGluCiAgICAgICAgICAgICAoY3VyckNo
aWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUodWxUYWcpfHwgY3VyckNoaWxkLT5lbGVtZW50KCkt
Pmhhc1RhZ05hbWUob2xUYWcpKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIFJlbmRl
ck9iamVjdCogbGluZUJveCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KHN0YXRpY19jYXN0PFJl
bmRlckJsb2NrKj4oY3VyckNoaWxkKSwgbWFya2VyKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBs
aW5lQm94ID0gZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3godG9SZW5kZXJCbG9jayhjdXJyQ2hpbGQp
LCBtYXJrZXIpOwogICAgICAgICBpZiAobGluZUJveCkKICAgICAgICAgICAgIHJldHVybiBsaW5l
Qm94OwogICAgIH0KQEAgLTI3MSw3ICsyNjksNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpwb3Np
dGlvbkxpc3RNYXJrZXIoCiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgbyA9IG8t
PnBhcmVudEJveCgpOwogICAgICAgICAgICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4obyktPmFkZFZpc3Vh
bE92ZXJmbG93KG1hcmtlclJlY3QpOworICAgICAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2Nr
KG8pLT5hZGRWaXN1YWxPdmVyZmxvdyhtYXJrZXJSZWN0KTsKICAgICAgICAgICAgICAgICBtYXJr
ZXJSZWN0Lm1vdmUoLW8tPngoKSwgLW8tPnkoKSk7CiAgICAgICAgICAgICB9IHdoaWxlIChvICE9
IHRoaXMpOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmNwcAkocmV2aXNpb24gNDAyNTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE0LDcgKzUxNCw3IEBAIElubGluZUJveCogUmVu
ZGVyTGlzdE1hcmtlcjo6Y3JlYXRlSW5saW4KICAgICByZXR1cm4gYm94OwogfQogCi1ib29sIFJl
bmRlckxpc3RNYXJrZXI6OmlzSW1hZ2UoKSBjb25zdAorYm9vbCBSZW5kZXJMaXN0TWFya2VyOjpp
c0ltYWdlTWFya2VyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbWFnZSAmJiAhbV9pbWFnZS0+
ZXJyb3JPY2N1cnJlZCgpOwogfQpAQCAtNTQwLDcgKzU0MCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1h
cmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKIAogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9
IHBhaW50SW5mby5jb250ZXh0OwogCi0gICAgaWYgKGlzSW1hZ2UoKSkgeworICAgIGlmIChpc0lt
YWdlTWFya2VyKCkpIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIGlmIChzdHlsZSgpLT5o
aWdobGlnaHQoKSAhPSBudWxsQXRvbSAmJiAhcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR4LCB0eSwgc3R5bGUo
KS0+aGlnaGxpZ2h0KCksIHRydWUpOwpAQCAtNjM1LDcgKzYzNSw3IEBAIHZvaWQgUmVuZGVyTGlz
dE1hcmtlcjo6bGF5b3V0KCkKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAgICAgQVNTRVJU
KCFwcmVmV2lkdGhzRGlydHkoKSk7CiAKLSAgICBpZiAoaXNJbWFnZSgpKSB7CisgICAgaWYgKGlz
SW1hZ2VNYXJrZXIoKSkgewogICAgICAgICBzZXRXaWR0aChtX2ltYWdlLT5pbWFnZVNpemUodGhp
cywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKS53aWR0aCgpKTsKICAgICAgICAgc2V0SGVpZ2h0
KG1faW1hZ2UtPmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLmhlaWdo
dCgpKTsKICAgICB9IGVsc2UgewpAQCAtNjc1LDcgKzY3NSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1h
cmtlcjo6Y2FsY1ByZWZXaWR0aHMoKQogCiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkt
PmZvbnQoKTsKIAotICAgIGlmIChpc0ltYWdlKCkpIHsKKyAgICBpZiAoaXNJbWFnZU1hcmtlcigp
KSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgc29tZXdoYXQgYXJiaXRyYXJ5IHdpZHRo
LiAgR2VuZXJhdGVkIGltYWdlcyBmb3IgbWFya2VycyByZWFsbHkgd29uJ3QgYmVjb21lIHBhcnRp
Y3VsYXJseSB1c2VmdWwKICAgICAgICAgLy8gdW50aWwgd2Ugc3VwcG9ydCB0aGUgQ1NTMyBtYXJr
ZXIgcHNldWRvY2xhc3MgdG8gYWxsb3cgY29udHJvbCBvdmVyIHRoZSB3aWR0aCBhbmQgaGVpZ2h0
IG9mIHRoZSBtYXJrZXIgYm94LgogICAgICAgICBpbnQgYnVsbGV0V2lkdGggPSBmb250LmFzY2Vu
dCgpIC8gMjsKQEAgLTc0Miw3ICs3NDIsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnVwZGF0
ZU1hcmdpbnMoKQogICAgIGludCBtYXJnaW5SaWdodCA9IDA7CiAKICAgICBpZiAoaXNJbnNpZGUo
KSkgewotICAgICAgICBpZiAoaXNJbWFnZSgpKSB7CisgICAgICAgIGlmIChpc0ltYWdlTWFya2Vy
KCkpIHsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCiAgICAg
ICAgICAgICAgICAgbWFyZ2luUmlnaHQgPSBjTWFya2VyUGFkZGluZzsKICAgICAgICAgICAgIGVs
c2UKQEAgLTc2NCw3ICs3NjQsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdp
bnMoKQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVj
dGlvbigpID09IExUUikgewotICAgICAgICAgICAgaWYgKGlzSW1hZ2UoKSkKKyAgICAgICAgICAg
IGlmIChpc0ltYWdlTWFya2VyKCkpCiAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IC1taW5Q
cmVmV2lkdGgoKSAtIGNNYXJrZXJQYWRkaW5nOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgaW50IG9mZnNldCA9IGZvbnQuYXNjZW50KCkgKiAyIC8gMzsKQEAgLTc4MSw3ICs3
ODEsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChpc0ltYWdlKCkpCisgICAgICAgICAgICBpZiAoaXNJbWFnZU1hcmtlcigpKQogICAgICAgICAg
ICAgICAgIG1hcmdpbkxlZnQgPSBjTWFya2VyUGFkZGluZzsKICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBmb250LmFzY2VudCgpICogMiAvIDM7CkBAIC04
MDcsMTQgKzgwNywxNCBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQog
CiBpbnQgUmVuZGVyTGlzdE1hcmtlcjo6bGluZUhlaWdodChib29sLCBib29sKSBjb25zdAogewot
ICAgIGlmICghaXNJbWFnZSgpKQorICAgIGlmICghaXNJbWFnZU1hcmtlcigpKQogICAgICAgICBy
ZXR1cm4gbV9saXN0SXRlbS0+bGluZUhlaWdodChmYWxzZSwgdHJ1ZSk7CiAgICAgcmV0dXJuIGhl
aWdodCgpOwogfQogCiBpbnQgUmVuZGVyTGlzdE1hcmtlcjo6YmFzZWxpbmVQb3NpdGlvbihib29s
LCBib29sKSBjb25zdAogewotICAgIGlmICghaXNJbWFnZSgpKSB7CisgICAgaWYgKCFpc0ltYWdl
TWFya2VyKCkpIHsKICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsK
ICAgICAgICAgcmV0dXJuIGZvbnQuYXNjZW50KCkgKyAobGluZUhlaWdodChmYWxzZSkgLSBmb250
LmhlaWdodCgpKS8yOwogICAgIH0KQEAgLTgyOCw3ICs4MjgsNyBAQCBib29sIFJlbmRlckxpc3RN
YXJrZXI6OmlzSW5zaWRlKCkgY29uc3QKIAogSW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRS
ZWxhdGl2ZU1hcmtlclJlY3QoKQogewotICAgIGlmIChpc0ltYWdlKCkpCisgICAgaWYgKGlzSW1h
Z2VNYXJrZXIoKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoeCgpLCB5KCksIG1faW1hZ2UtPmlt
YWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLndpZHRoKCksIG1faW1hZ2Ut
PmltYWdlU2l6ZSh0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpLmhlaWdodCgpKTsKIAog
ICAgIHN3aXRjaCAoc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpKSB7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5oCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0zOCw2ICszOCwxNCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTGlzdE1hcmtlcihS
ZW5kZXJMaXN0SXRlbSopOwogICAgIH5SZW5kZXJMaXN0TWFya2VyKCk7CiAKKyAgICBib29sIGlz
SW1hZ2VNYXJrZXIoKSBjb25zdDsKKyAgICBib29sIGlzVGV4dE1hcmtlcigpIGNvbnN0IHsgcmV0
dXJuICFpc0ltYWdlTWFya2VyKCk7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRleHQoKSBjb25zdCB7
IHJldHVybiBtX3RleHQ7IH0KKyAgICBib29sIGlzSW5zaWRlKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyTGlzdE1hcmtlciI7IH0K
IAogICAgIHZpcnR1YWwgYm9vbCBpc0xpc3RNYXJrZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CkBAIC00NSw3ICs1Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJ
bmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAg
IHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogCiAgICAgdmlydHVhbCB2b2lkIGltYWdl
Q2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CiAKQEAgLTU0LDEy
ICs2MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RM
aW5lLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQg
YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFs
c2UpIGNvbnN0OwogCi0gICAgYm9vbCBpc0ltYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1RleHQo
KSBjb25zdCB7IHJldHVybiAhaXNJbWFnZSgpOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0OyB9Ci0KLSAgICBib29sIGlzSW5zaWRlKCkgY29uc3Q7Ci0K
ICAgICB2aXJ0dWFsIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0
ZShTZWxlY3Rpb25TdGF0ZSk7CiAgICAgdmlydHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3QoYm9v
bCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpOwpAQCAtNjcsMTEgKzY4LDkgQEAgcHVibGlj
OgogCiAgICAgdm9pZCB1cGRhdGVNYXJnaW5zKCk7CiAKLXByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFJlbmRlclN0eWxlOjpEaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogbmV3U3R5bGUpOwogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShSZW5kZXJTdHls
ZTo6RGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAotcHJpdmF0ZToKICAgICBJ
bnRSZWN0IGdldFJlbGF0aXZlTWFya2VyUmVjdCgpOwogCiAgICAgU3RyaW5nIG1fdGV4dDsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDAyNTApCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw3IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2Vs
ZWN0b3IuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAgLTYzNyw3ICs2
MzcsNyBAQCBSZW5kZXJCbG9jayogUmVuZGVyT2JqZWN0Ojpjb250YWluaW5nQmxvCiAgICAgfQog
CiAgICAgaWYgKGlzUmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5k
ZXJCbG9jayo+KHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlckJsb2NrKj4odGhpcykpOworICAgICAg
ICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJWaWV3Kj4odG9SZW5kZXJWaWV3KHRoaXMpKTsKIAog
ICAgIFJlbmRlck9iamVjdCogbyA9IHBhcmVudCgpOwogICAgIGlmICghaXNUZXh0KCkgJiYgbV9z
dHlsZS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKSB7CkBAIC02NjcsNyArNjY3LDcgQEAg
UmVuZGVyQmxvY2sqIFJlbmRlck9iamVjdDo6Y29udGFpbmluZ0JsbwogICAgIGlmICghbyB8fCAh
by0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICByZXR1cm4gMDsgLy8gUHJvYmFibHkgZG9lc24n
dCBoYXBwZW4gYW55IG1vcmUsIGJ1dCBsZWF2ZSBqdXN0IGluIGNhc2UuIC1kd2gKIAotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG8pOworICAgIHJldHVybiB0b1JlbmRlckJs
b2NrKG8pOwogfQogCiBpbnQgUmVuZGVyT2JqZWN0Ojpjb250YWluaW5nQmxvY2tXaWR0aCgpIGNv
bnN0CkBAIC0xNjUyLDcgKzE2NTIsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVwYWludChib29s
IGltbWVkaWF0CiAgICAgICAgIG8gPSBvLT5wYXJlbnQoKTsKICAgICBpZiAoIW8tPmlzUmVuZGVy
VmlldygpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVuZGVyVmlldyogdmlldyA9IHN0YXRpY19j
YXN0PFJlbmRlclZpZXcqPihvKTsKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3
KG8pOwogICAgIGlmICh2aWV3LT5wcmludGluZygpKQogICAgICAgICByZXR1cm47IC8vIERvbid0
IHJlcGFpbnQgaWYgd2UncmUgcHJpbnRpbmcuCiAgICAgdmlldy0+cmVwYWludFZpZXdSZWN0YW5n
bGUoYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCksIGltbWVkaWF0ZSk7CkBAIC0xNjY2LDcg
KzE2NjYsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVwYWludFJlY3RhbmdsZShjb25zCiAgICAg
ICAgIG8gPSBvLT5wYXJlbnQoKTsKICAgICBpZiAoIW8tPmlzUmVuZGVyVmlldygpKQogICAgICAg
ICByZXR1cm47Ci0gICAgUmVuZGVyVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcq
PihvKTsKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KG8pOwogICAgIGlmICh2
aWV3LT5wcmludGluZygpKQogICAgICAgICByZXR1cm47IC8vIERvbid0IHJlcGFpbnQgaWYgd2Un
cmUgcHJpbnRpbmcuCiAgICAgSW50UmVjdCBhYnNSZWN0KHIpOwpAQCAtMTgyMCw3ICsxODIwLDcg
QEAgdm9pZCBSZW5kZXJPYmplY3Q6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbgogewogICAgIGlmIChS
ZW5kZXJPYmplY3QqIG8gPSBwYXJlbnQoKSkgewogICAgICAgICBpZiAoby0+aXNCbG9ja0Zsb3co
KSkgewotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxv
Y2sqPihvKTsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IHRvUmVuZGVyQmxvY2sobyk7
CiAgICAgICAgICAgICBpZiAoY2ItPmhhc0NvbHVtbnMoKSkKICAgICAgICAgICAgICAgICBjYi0+
YWRqdXN0UmVjdEZvckNvbHVtbnMocmVjdCk7CiAgICAgICAgIH0KQEAgLTE5NjQsNyArMTk2NCw3
IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpoYW5kbGVEeW5hbWljRmxvYXRQb3MKICAgICAgICAgICAg
ICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGROb2RlKHRoaXMpOwogICAgICAgICAgICAgICAgIHBh
cmVudElubGluZS0+c3BsaXRGbG93KGJlZm9yZUNoaWxkLCBuZXdCb3gsIHRoaXMsIG9sZENvbnRp
bnVhdGlvbik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmVudCgpLT5pc1JlbmRlckJsb2Nr
KCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogbyA9IHN0YXRpY19jYXN0PFJlbmRl
ckJsb2NrKj4ocGFyZW50KCkpOworICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBvID0gdG9S
ZW5kZXJCbG9jayhwYXJlbnQoKSk7CiAgICAgICAgICAgICAgICAgby0+bWFrZUNoaWxkcmVuTm9u
SW5saW5lKCk7CiAgICAgICAgICAgICAgICAgaWYgKG8tPmlzQW5vbnltb3VzQmxvY2soKSAmJiBv
LT5wYXJlbnQoKSkKICAgICAgICAgICAgICAgICAgICAgby0+cGFyZW50KCktPnJlbW92ZUxlZnRv
dmVyQW5vbnltb3VzQmxvY2sobyk7CkBAIC0yMTMxLDExICsyMTMxLDYgQEAgdm9pZCBSZW5kZXJP
YmplY3Q6OnVwZGF0ZUltYWdlKFN0eWxlSW1hZwogICAgIH0KIH0KIAotSW50UmVjdCBSZW5kZXJP
YmplY3Q6OnZpZXdSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdmlldygpLT52aWV3UmVjdCgp
OwotfQotCiBGbG9hdFBvaW50IFJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9p
bnQgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zKSBjb25zdAogewog
ICAgIFJlbmRlck9iamVjdCogbyA9IHBhcmVudCgpOwpAQCAtMjE5NCw3ICsyMTg5LDcgQEAgSW50
UmVjdCBSZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KElubAogCiBSZW5kZXJWaWV3KiBSZW5k
ZXJPYmplY3Q6OnZpZXcoKSBjb25zdAogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJW
aWV3Kj4oZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPnJl
bmRlclZpZXcoKTsKIH0KIAogYm9vbCBSZW5kZXJPYmplY3Q6Omhhc091dGxpbmVBbm5vdGF0aW9u
KCkgY29uc3QKQEAgLTIyNzEsMTAgKzIyNjYsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVtb3Zl
RnJvbU9iamVjdExpc3RzCiAgICAgfQogCiAgICAgaWYgKGlzUG9zaXRpb25lZCgpKSB7Ci0gICAg
ICAgIFJlbmRlck9iamVjdCogcDsKLSAgICAgICAgZm9yIChwID0gcGFyZW50KCk7IHA7IHAgPSBw
LT5wYXJlbnQoKSkgeworICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogcCA9IHBhcmVudCgpOyBw
OyBwID0gcC0+cGFyZW50KCkpIHsKICAgICAgICAgICAgIGlmIChwLT5pc1JlbmRlckJsb2NrKCkp
Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihwKS0+cmVtb3ZlUG9z
aXRpb25lZE9iamVjdCh0b1JlbmRlckJveCh0aGlzKSk7CisgICAgICAgICAgICAgICAgdG9SZW5k
ZXJCbG9jayhwKS0+cmVtb3ZlUG9zaXRpb25lZE9iamVjdCh0b1JlbmRlckJveCh0aGlzKSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0yNTE2LDcgKzI1MTAsNyBAQCBpbnQgUmVuZGVyT2JqZWN0
OjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgCiB2b2lkIFJlbmRlck9iamVjdDo6c2NoZWR1bGVSZWxh
eW91dCgpCiB7CiAgICAgaWYgKGlzUmVuZGVyVmlldygpKSB7Ci0gICAgICAgIEZyYW1lVmlldyog
dmlldyA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcqPih0aGlzKS0+ZnJhbWVWaWV3KCk7CisgICAg
ICAgIEZyYW1lVmlldyogdmlldyA9IHRvUmVuZGVyVmlldyh0aGlzKS0+ZnJhbWVWaWV3KCk7CiAg
ICAgICAgIGlmICh2aWV3KQogICAgICAgICAgICAgdmlldy0+c2NoZWR1bGVSZWxheW91dCgpOwog
ICAgIH0gZWxzZSBpZiAocGFyZW50KCkpIHsKQEAgLTI3NjYsNyArMjc2MCw3IEBAIGludCBSZW5k
ZXJPYmplY3Q6Om1heGltYWxPdXRsaW5lU2l6ZShQYWkKIHsKICAgICBpZiAocCAhPSBQYWludFBo
YXNlT3V0bGluZSAmJiBwICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZSAmJiBwICE9IFBhaW50UGhh
c2VDaGlsZE91dGxpbmVzKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UmVuZGVyVmlldyo+KGRvY3VtZW50KCktPnJlbmRlcmVyKCkpLT5tYXhpbWFsT3V0bGluZVNp
emUoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpLT5tYXhpbWFsT3V0bGlu
ZVNpemUoKTsKIH0KIAogaW50IFJlbmRlck9iamVjdDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTWVkaWEoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc01lbnVMaXN0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUmVuZGVySW1hZ2UoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcklubGluZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyUGFydCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyVmlldygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CkBAIC03NTEsOCArNzUwLDYgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgcGFpbnRP
dXRsaW5lKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgsIGNv
bnN0IFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCBhZGRQREZVUkxSZWN0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgSW50UmVjdCB2aWV3UmVjdCgpIGNv
bnN0OwotCiAgICAgaW50IGdldFZlcnRpY2FsUG9zaXRpb24oYm9vbCBmaXJzdExpbmUpIGNvbnN0
OwogCiAgICAgdm9pZCBhZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhJbnRSZWN0JikgY29u
c3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA0MDI1
MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiVmlzaWJs
ZVBvc2l0aW9uLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgICAgICAgICAgICAgIG1fY2FwdGlv
biA9IDA7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFtX2NhcHRpb24pCi0gICAgICAgICAgICBt
X2NhcHRpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKTsKKyAgICAgICAgICAg
IG1fY2FwdGlvbiA9IHRvUmVuZGVyQmxvY2soY2hpbGQpOwogICAgICAgICB3cmFwSW5Bbm9ueW1v
dXNTZWN0aW9uID0gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChjaGlsZC0+aXNUYWJsZUNvbCgpKSB7
CiAgICAgICAgIG1faGFzQ29sRWxlbWVudHMgPSB0cnVlOwpAQCAtNjY0LDcgKzY2NCw3IEBAIHZv
aWQgUmVuZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zKCkgY29uc3QKICAgICAgICAgc3dpdGNoIChj
aGlsZC0+c3R5bGUoKS0+ZGlzcGxheSgpKSB7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX0NBUFRJ
T046CiAgICAgICAgICAgICAgICAgaWYgKCFtX2NhcHRpb24gJiYgY2hpbGQtPmlzUmVuZGVyQmxv
Y2soKSkgewotICAgICAgICAgICAgICAgICAgICBtX2NhcHRpb24gPSBzdGF0aWNfY2FzdDxSZW5k
ZXJCbG9jayo+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jYXB0aW9uID0gdG9SZW5k
ZXJCbG9jayhjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2FwdGlvbi0+c2V0TmVlZHNM
YXlvdXQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUg
IlRleHRCcmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5j
bHVkZSAiYnJlYWtfbGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTggKzE2OSwyMiBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9pc0FsbEFTQ0lJIDogMTsKIH07CiAKLWlubGluZSBSZW5kZXJU
ZXh0KiB0b1JlbmRlclRleHQoUmVuZGVyT2JqZWN0KiBvKQoraW5saW5lIFJlbmRlclRleHQqIHRv
UmVuZGVyVGV4dChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogeyAKLSAgICBBU1NFUlQoIW8gfHwg
by0+aXNUZXh0KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obyk7Cisg
ICAgQVNTRVJUKCFyZW5kZXJlciB8fCByZW5kZXJlci0+aXNUZXh0KCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIpOwogfQogCi1pbmxpbmUgY29uc3QgUmVu
ZGVyVGV4dCogdG9SZW5kZXJUZXh0KGNvbnN0IFJlbmRlck9iamVjdCogbykKK2lubGluZSBjb25z
dCBSZW5kZXJUZXh0KiB0b1JlbmRlclRleHQoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
IHsgCi0gICAgQVNTRVJUKCFvIHx8IG8tPmlzVGV4dCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgUmVuZGVyVGV4dCo+KG8pOworICAgIEFTU0VSVCghcmVuZGVyZXIgfHwgcmVuZGVy
ZXItPmlzVGV4dCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyVGV4dCo+
KHJlbmRlcmVyKTsKIH0KIAorLy8gVGhpcyBpcyBhIHRyaWNrIHRvIGNhdGNoIGNhbGxlcnMgdHJ5
aW5nIHRvIHVzZSB0b1JlbmRlclRleHQgb24gYSBwb2ludGVyIHRoYXQncyBhbHJlYWR5IGEgUmVu
ZGVyVGV4dC4KKy8vIEl0IHdpbGwgcHJvYmFibHkgZmFpbCB0byBjb21waWxlIGFuZCBkZWZpbml0
ZWx5IGZhaWwgdG8gbGluay4KK3ZvaWQgdG9SZW5kZXJUZXh0KGNvbnN0IFJlbmRlclRleHQqKTsK
KwogI2lmZGVmIE5ERUJVRwogaW5saW5lIHZvaWQgUmVuZGVyVGV4dDo6Y2hlY2tDb25zaXN0ZW5j
eSgpIGNvbnN0CiB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
CShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sOjpzdHlsZURpZENoYW5nZShSCiAgICAgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKGRp
ZmYsIG9sZFN0eWxlKTsKIAogICAgIGlmIChtX2lubmVyVGV4dCkgewotICAgICAgICBSZW5kZXJC
bG9jayogdGV4dEJsb2NrUmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG1faW5u
ZXJUZXh0LT5yZW5kZXJlcigpKTsKKyAgICAgICAgUmVuZGVyQmxvY2sqIHRleHRCbG9ja1JlbmRl
cmVyID0gdG9SZW5kZXJCbG9jayhtX2lubmVyVGV4dC0+cmVuZGVyZXIoKSk7CiAgICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gdGV4dEJsb2NrU3R5bGUgPSBjcmVhdGVJbm5lclRleHRTdHlsZShz
dHlsZSgpKTsKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgc2V0IHRoZSB3aWR0aCBhbmQgdGhlIGhl
aWdodCBpbiB0aGUgb2xkIHN0eWxlIGluIGxheW91dCgpLgogICAgICAgICAvLyBSZXNldCB0aGVt
IG5vdyB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0IGhpbnQuCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJl
dmlzaW9uIDQwMjUwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE0LDcgKzQxNCw3IEBAIGludCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnByZWZlcnIKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjphZGp1c3RDb250cm9sSGVpZ2h0QmFzZWRPbkxpbmVIZWlnaHQoaW50IGxpbmVIZWln
aHQpCiB7CiAgICAgaWYgKFJlbmRlckJveCogcmVzdWx0c1JlbmRlcmVyID0gbV9yZXN1bHRzQnV0
dG9uID8gbV9yZXN1bHRzQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyQmxvY2sqPihyZXN1bHRzUmVuZGVyZXIpLT5jYWxjSGVpZ2h0KCk7CisgICAg
ICAgIHJlc3VsdHNSZW5kZXJlci0+Y2FsY0hlaWdodCgpOwogICAgICAgICBzZXRIZWlnaHQobWF4
KGhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5ib3JkZXJUb3Ao
KSArIHJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyQm90dG9tKCkgKwogICAgICAgICAgICAgICAgICAg
cmVzdWx0c1JlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyByZXN1bHRzUmVuZGVyZXItPnBhZGRpbmdC
b3R0b20oKSArCkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmFkanVzdAogICAgIH0KIAogICAgIGlmIChSZW5kZXJCb3gqIGNhbmNlbFJlbmRlcmVy
ID0gbV9jYW5jZWxCdXR0b24gPyBtX2NhbmNlbEJ1dHRvbi0+cmVuZGVyQm94KCkgOiAwKSB7Ci0g
ICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4oY2FuY2VsUmVuZGVyZXIpLT5jYWxjSGVp
Z2h0KCk7CisgICAgICAgIGNhbmNlbFJlbmRlcmVyLT5jYWxjSGVpZ2h0KCk7CiAgICAgICAgIHNl
dEhlaWdodChtYXgoaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICBjYW5jZWxSZW5kZXJlci0+
Ym9yZGVyVG9wKCkgKyBjYW5jZWxSZW5kZXJlci0+Ym9yZGVyQm90dG9tKCkgKwogICAgICAgICAg
ICAgICAgICAgY2FuY2VsUmVuZGVyZXItPnBhZGRpbmdUb3AoKSArIGNhbmNlbFJlbmRlcmVyLT5w
YWRkaW5nQm90dG9tKCkgKwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gNDAy
NTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEhUTUwgd2lkZ2V0
IGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDggKzIyLDcgQEAKICNpZm5kZWYg
UmVuZGVyVmlld19oCiAjZGVmaW5lIFJlbmRlclZpZXdfaAogCi0jaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIgLy8gTmVlZGVk
IG9ubHkgdG8ga2VlcCBkb2luZ0Z1bGxSZXBhaW50IGlubGluZS4KICNpbmNsdWRlICJMYXlvdXRT
dGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAKQEAgLTM2LDYgKzMzLDcgQEAgcHVi
bGljOgogICAgIFJlbmRlclZpZXcoTm9kZSosIEZyYW1lVmlldyopOwogICAgIHZpcnR1YWwgflJl
bmRlclZpZXcoKTsKIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5h
bWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyVmlldyI7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBp
c1JlbmRlclZpZXcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC00NCwyMyArNDIsMjUgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjYWxjV2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2FsY0hlaWdodCgpOwogICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOworCitwdWJs
aWM6CiAgICAgdmlydHVhbCBGbG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxv
Y2FsUG9pbnQgPSBGbG9hdFBvaW50KCksIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFu
c2Zvcm1zID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBhYnNvbHV0ZVRv
TG9jYWwoRmxvYXRQb2ludCBjb250YWluZXJQb2ludCwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29s
IHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCBGbG9hdFF1YWQgbG9j
YWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmLCBib29sIGZpeGVkID0gZmFsc2UpIGNv
bnN0OwotICAgIAorCiAgICAgaW50IGRvY0hlaWdodCgpIGNvbnN0OwogICAgIGludCBkb2NXaWR0
aCgpIGNvbnN0OwogCiAgICAgLy8gVGhlIHNhbWUgYXMgdGhlIEZyYW1lVmlldydzIGxheW91dEhl
aWdodC9sYXlvdXRXaWR0aCBidXQgd2l0aCBudWxsIGNoZWNrIGd1YXJkcy4KICAgICBpbnQgdmll
d0hlaWdodCgpIGNvbnN0OwogICAgIGludCB2aWV3V2lkdGgoKSBjb25zdDsKLSAgICAKLSAgICBm
bG9hdCB6b29tRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpZXctPmZyYW1lKCkgJiYg
bV9mcmFtZVZpZXctPmZyYW1lKCktPnNob3VsZEFwcGx5UGFnZVpvb20oKSA/IG1fZnJhbWVWaWV3
LT5mcmFtZSgpLT56b29tRmFjdG9yKCkgOiAxLjBmOyB9CiAKICAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldygpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVWaWV3OyB9CiAKK3ByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIGhhc092ZXJoYW5naW5nRmxvYXRzKCkgeyByZXR1cm4gZmFsc2U7IH0KIAorcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0
JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludFZpZXdSZWN0
YW5nbGUoY29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpOwogCkBAIC02OSw4
ICs2OSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCog
c3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlbmQsIGludCBlbmRQb3MpOwogICAg
IHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogc2VsZWN0
aW9uU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXJ0OyB9Ci0gICAgdmlydHVh
bCBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9u
RW5kOyB9CisgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0aW9uU3RhcnQ7IH0KKyAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uRW5kOyB9CiAKICAgICBib29sIHByaW50aW5nKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRQcmludEltYWdlcyhib29sIGVuYWJsZSkgeyBtX3ByaW50SW1hZ2Vz
ID0gZW5hYmxlOyB9CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1heGlt
YWxPdXRsaW5lU2l6ZShpbnQgbykgeyBtX21heGltYWxPdXRsaW5lU2l6ZSA9IG87IH0KICAgICBp
bnQgbWF4aW1hbE91dGxpbmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbWFsT3V0bGluZVNp
emU7IH0KIAotICAgIHZpcnR1YWwgSW50UmVjdCB2aWV3UmVjdCgpIGNvbnN0OworICAgIEludFJl
Y3Qgdmlld1JlY3QoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25TdGFydEVu
ZChpbnQmIHN0YXJ0UG9zLCBpbnQmIGVuZFBvcykgY29uc3Q7CiAKQEAgLTE0OSw3ICsxNDksNiBA
QCBwcml2YXRlOgogICAgIC8vIHNlbGVjdGlvblJlY3Qgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBv
biBhIFJlbmRlclZpZXcKICAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdChib29sKTsK
IAotcHJvdGVjdGVkOgogICAgIEZyYW1lVmlldyogbV9mcmFtZVZpZXc7CiAKICAgICBSZW5kZXJP
YmplY3QqIG1fc2VsZWN0aW9uU3RhcnQ7CkBAIC0xNjgsNyArMTY3LDYgQEAgcHJvdGVjdGVkOgog
CiAgICAgUmVuZGVyT2JqZWN0U2V0IG1fd2lkZ2V0czsKIAotcHJpdmF0ZToKICAgICBpbnQgbV9i
ZXN0VHJ1bmNhdGVkQXQ7CiAgICAgaW50IG1fdHJ1bmNhdG9yV2lkdGg7CiAgICAgYm9vbCBtX2Zv
cmNlZFBhZ2VCcmVhazsKQEAgLTE3Niw2ICsxNzQsMjIgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25l
ZCBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50OwogfTsKIAoraW5saW5lIFJlbmRlclZpZXcqIHRv
UmVuZGVyVmlldyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreyAKKyAgICBBU1NFUlQoIXJlbmRl
cmVyIHx8IHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFJlbmRlclZpZXcqPihyZW5kZXJlcik7Cit9CisKK2lubGluZSBjb25zdCBSZW5kZXJWaWV3KiB0
b1JlbmRlclZpZXcoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sgCisgICAgQVNTRVJU
KCFyZW5kZXJlciB8fCByZW5kZXJlci0+aXNSZW5kZXJWaWV3KCkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBSZW5kZXJWaWV3Kj4ocmVuZGVyZXIpOworfQorCisvLyBUaGlzIGlzIGEg
dHJpY2sgdG8gY2F0Y2ggY2FsbGVycyB0cnlpbmcgdG8gdXNlIHRvUmVuZGVyVmlldyBvbiBhIHBv
aW50ZXIgdGhhdCdzIGFscmVhZHkgYSBSZW5kZXJWaWV3LgorLy8gSXQgd2lsbCBwcm9iYWJseSBm
YWlsIHRvIGNvbXBpbGUgYW5kIGRlZmluaXRlbHkgZmFpbCB0byBsaW5rLgordm9pZCB0b1JlbmRl
clZpZXcoY29uc3QgUmVuZGVyVmlldyopOworCiAvLyBTdGFjay1iYXNlZCBjbGFzcyB0byBhc3Np
c3Qgd2l0aCBMYXlvdXRTdGF0ZSBwdXNoL3BvcAogY2xhc3MgTGF5b3V0U3RhdGVNYWludGFpbmVy
IDogTm9uY29weWFibGUgewogcHVibGljOgpAQCAtMjI4LDkgKzI0Miw5IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICBSZW5kZXJWaWV3KiBtX3ZpZXc7Ci0gICAgYm9vbCBtX2Rpc2FibGVkIDog
MTsgICAgICAgIC8vIHRydWUgaWYgdGhlIG9mZnNldCBhbmQgY2xpcCBwYXJ0IG9mIGxheW91dFN0
YXRlIGlzIGRpc2FibGVkCi0gICAgYm9vbCBtX2RpZFN0YXJ0IDogMTsgICAgICAgIC8vIHRydWUg
aWYgd2UgZGlkIGEgcHVzaCBvciBkaXNhYmxlCi0gICAgYm9vbCBtX2RpZEVuZCA6IDE7ICAgICAg
ICAgIC8vIHRydWUgaWYgd2UgcG9wcGVkIG9yIHJlLWVuYWJsZWQKKyAgICBib29sIG1fZGlzYWJs
ZWQ7IC8vIHRydWUgaWYgdGhlIG9mZnNldCBhbmQgY2xpcCBwYXJ0IG9mIGxheW91dFN0YXRlIGlz
IGRpc2FibGVkCisgICAgYm9vbCBtX2RpZFN0YXJ0OyAvLyB0cnVlIGlmIHdlIGRpZCBhIHB1c2gg
b3IgZGlzYWJsZQorICAgIGJvb2wgbV9kaWRFbmQ7IC8vIHRydWUgaWYgd2UgcG9wcGVkIG9yIHJl
LWVuYWJsZWQKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA0MDI1MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzksNyArMzM5LDcgQEAgaW50
IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcCgpCiAKIFJlbmRlckJsb2NrKiBSb290SW5saW5l
Qm94OjpibG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckJsb2Nr
Kj4obV9vYmplY3QpOworICAgIHJldHVybiB0b1JlbmRlckJsb2NrKG1fb2JqZWN0KTsKIH0KIAog
c3RhdGljIGJvb2wgaXNFZGl0YWJsZUxlYWYoSW5saW5lQm94KiBsZWFmKQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3
ICsxNjAsNyBAQCB2b2lkIGNsYW1wSW1hZ2VCdWZmZXJTaXplVG9WaWV3cG9ydChSZW5kCiAgICAg
aWYgKCFvYmplY3QgfHwgIW9iamVjdC0+aXNSZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlbmRlclZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4ob2JqZWN0
KTsKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KG9iamVjdCk7CiAgICAgaWYg
KCF2aWV3LT5mcmFtZVZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9iaWRpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNw
cAkocmV2aXNpb24gNDAyNTApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImJpZGkuaCIKIAogI2luY2x1ZGUg
IkNoYXJhY3Rlck5hbWVzLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKQEAgLTc1NCwxNCArNzU1LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVy
TGluZShJbmxpbmUKICAgICByZXNvbHZlci5jcmVhdGVCaWRpUnVuc0ZvckxpbmUoZW5kLCBzdHls
ZSgpLT52aXN1YWxseU9yZGVyZWQoKSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKIH0KIAot
c3RhdGljIHZvaWQgYnVpbGRDb21wYWN0UnVucyhSZW5kZXJPYmplY3QqIGNvbXBhY3RPYmosIElu
bGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCitzdGF0aWMgdm9pZCBidWlsZENvbXBhY3RSdW5z
KFJlbmRlckJsb2NrKiBjb21wYWN0QmxvY2ssIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIp
CiB7Ci0gICAgQVNTRVJUKGNvbXBhY3RPYmotPmlzUmVuZGVyQmxvY2soKSk7CiAgICAgQVNTRVJU
KCFyZXNvbHZlci5maXJzdFJ1bigpKTsKIAogICAgIC8vIEZvcm1hdCB0aGUgY29tcGFjdCBsaWtl
IGl0IGlzIGl0cyBvd24gc2luZ2xlIGxpbmUuICBXZSBidWlsZCB1cCBhbGwgdGhlIHJ1bnMgZm9y
CiAgICAgLy8gdGhlIGxpdHRsZSBjb21wYWN0IGFuZCB0aGVuIHJlb3JkZXIgdGhlbSBmb3IgYmlk
aS4KLSAgICBSZW5kZXJCbG9jayogY29tcGFjdEJsb2NrID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxv
Y2sqPihjb21wYWN0T2JqKTsKIAogICAgIElubGluZUl0ZXJhdG9yIHN0YXJ0KGNvbXBhY3RCbG9j
aywgYmlkaUZpcnN0KGNvbXBhY3RCbG9jaywgJnJlc29sdmVyKSwgMCk7CiAgICAgcmVzb2x2ZXIu
c2V0UG9zaXRpb24oc3RhcnQpOwpAQCAtOTQyLDcgKzk0MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgIGJldHdlZW5NaWRwb2ludHMgPSBm
YWxzZTsKICAgICAgICAgICAgIGlzTGluZUVtcHR5ID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICht
X2ZpcnN0TGluZSAmJiBmaXJzdENoaWxkKCktPmlzQ29tcGFjdCgpICYmIGZpcnN0Q2hpbGQoKS0+
aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRDb21wYWN0UnVucyhmaXJz
dENoaWxkKCksIHJlc29sdmVyKTsKKyAgICAgICAgICAgICAgICBidWlsZENvbXBhY3RSdW5zKHRv
UmVuZGVyQmxvY2soZmlyc3RDaGlsZCgpKSwgcmVzb2x2ZXIpOwogICAgICAgICAgICAgICAgIHJl
c29sdmVyLnNldFBvc2l0aW9uKElubGluZUl0ZXJhdG9yKHRoaXMsIGZpcnN0Q2hpbGQoKS0+bmV4
dFNpYmxpbmcoKSwgMCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgRUNsZWFyIGNsZWFy
ID0gQ05PTkU7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdMZW5ndGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAJKHJldmlzaW9uIDQwMjUwKQorKysgV2ViQ29yZS9z
dmcvU1ZHTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDEwICsyODUsMTAgQEAgZmxv
YXQgU1ZHTGVuZ3RoOjpQZXJjZW50YWdlT2ZWaWV3cG9ydChmbAogICAgIERvY3VtZW50KiBkb2Mg
PSBjb250ZXh0LT5kb2N1bWVudCgpOwogICAgIGlmIChkb2MtPmRvY3VtZW50RWxlbWVudCgpID09
IGNvbnRleHQpIHsKICAgICAgICAgLy8gV2UgaGF2ZSB0byBhc2sgdGhlIGNhbnZhcyBmb3IgdGhl
IGZ1bGwgImNhbnZhcyBzaXplIi4uLgotICAgICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyVmlldyo+KGRvYy0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIGlmICh2aWV3ICYm
IHZpZXctPmZyYW1lVmlldygpKSB7Ci0gICAgICAgICAgICB3aWR0aCA9IHZpZXctPmZyYW1lVmll
dygpLT52aXNpYmxlV2lkdGgoKTsgLy8gVE9ETzogcmVjaGVjayEKLSAgICAgICAgICAgIGhlaWdo
dCA9IHZpZXctPmZyYW1lVmlldygpLT52aXNpYmxlSGVpZ2h0KCk7IC8vIFRPRE86IHJlY2hlY2sh
CisgICAgICAgIEZyYW1lVmlldyogdmlldyA9IGRvYy0+dmlldygpOworICAgICAgICBpZiAodmll
dykgeworICAgICAgICAgICAgd2lkdGggPSB2aWV3LT52aXNpYmxlV2lkdGgoKTsgLy8gVE9ETzog
cmVjaGVjayEKKyAgICAgICAgICAgIGhlaWdodCA9IHZpZXctPnZpc2libGVIZWlnaHQoKTsgLy8g
VE9ETzogcmVjaGVjayEKICAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHZpZXdwb3J0RWxlbWVu
dCAmJiB2aWV3cG9ydEVsZW1lbnQtPmlzU1ZHKCkpIHsKICAgICAgICAgY29uc3QgU1ZHU1ZHRWxl
bWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU1ZHRWxlbWVudCo+KHZpZXdwb3J0RWxl
bWVudCk7CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd21sL1dNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDQwMjUwKQorKysg
V2ViQ29yZS93bWwvV01MSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsNyBAQCB2b2lkIFdNTEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAKICAgICBp
ZiAoYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjphbHRBdHRyKSB7CiAgICAgICAgIGlmIChyZW5kZXJl
cigpICYmIHJlbmRlcmVyKCktPmlzSW1hZ2UoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFJl
bmRlckltYWdlKj4ocmVuZGVyZXIoKSktPnVwZGF0ZUFsdFRleHQoKTsKKyAgICAgICAgICAgIHRv
UmVuZGVySW1hZ2UocmVuZGVyZXIoKSktPnVwZGF0ZUFsdFRleHQoKTsKICAgICB9IGVsc2UgaWYg
KGF0dHJOYW1lID09IEhUTUxOYW1lczo6c3JjQXR0ciB8fCBhdHRyTmFtZSA9PSBsb2NhbHNyY0F0
dHIpCiAgICAgICAgIG1faW1hZ2VMb2FkZXIudXBkYXRlRnJvbUVsZW1lbnRJZ25vcmluZ1ByZXZp
b3VzRXJyb3IoKTsKICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBIVE1MTmFtZXM6OndpZHRoQXR0
cikKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBXTUxJbWFnZUVsZW1lbnQ6OmF0dGFjaCgpCiAgICAg
V01MRWxlbWVudDo6YXR0YWNoKCk7CiAKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigp
LT5pc0ltYWdlKCkpIHsKLSAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdlT2JqID0gc3RhdGljX2Nh
c3Q8UmVuZGVySW1hZ2UqPihyZW5kZXJlcigpKTsKKyAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdl
T2JqID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlcigpKTsKICAgICAgICAgaWYgKGltYWdlT2JqLT5o
YXNJbWFnZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33481</attachid>
            <date>2009-07-24 18:02:46 -0700</date>
            <delta_ts>2009-07-29 12:06:56 -0700</delta_ts>
            <desc>Some other work in progress</desc>
            <filename>CheckedCastsPatch.txt</filename>
            <type>text/plain</type>
            <size>26436</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAJKHJldmlzaW9uIDQ2MzgzKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzUsNyArNzc1
LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZwogICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdE1hcmtlcio+KG1fcmVuZGVyZXIpLT50ZXh0KCk7
CiAgICAgCiAgICAgaWYgKG1fcmVuZGVyZXItPmlzUmVuZGVyQnV0dG9uKCkpCi0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCdXR0b24qPihtX3JlbmRlcmVyKS0+dGV4dCgpOworICAg
ICAgICByZXR1cm4gdG9SZW5kZXJCdXR0b24obV9yZW5kZXJlciktPnRleHQoKTsKIAogICAgIGlm
IChpc1dlYkFyZWEoKSkgewogICAgICAgICBpZiAobV9yZW5kZXJlci0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKSkKQEAgLTE2MDMsOCArMTYwMyw3IEBAIFdpZGdldCogQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6d2lkZ2UKIHsKICAgICBpZiAoIW1fcmVuZGVyZXItPmlzV2lkZ2V0KCkpCiAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPiht
X3JlbmRlcmVyKS0+d2lkZ2V0KCk7CisgICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KG1fcmVuZGVy
ZXIpLT53aWRnZXQoKTsKIH0KIAogQVhPYmplY3RDYWNoZSogQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YXhPYmplY3RDYWNoZSgpIGNvbnN0CkBAIC0xNjc1LDcgKzE2NzQsNyBAQCBXaWRnZXQq
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OndpZGdlCiB7CiAgICAgaWYgKCFpc0F0dGFjaG1l
bnQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlcldp
ZGdldCo+KG1fcmVuZGVyZXIpLT53aWRnZXQoKTsKKyAgICByZXR1cm4gdG9SZW5kZXJXaWRnZXQo
bV9yZW5kZXJlciktPndpZGdldCgpOwogfQogCiBGcmFtZVZpZXcqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmZyYW1lVmlld0lmUmVuZGVyVmlldygpIGNvbnN0CkBAIC0xODgwLDcgKzE4Nzks
NyBAQCBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgICAgIC8vIGRlc2NlbmQgaW50byB3aWRnZXQgKEZSQU1F
LCBJRlJBTUUsIE9CSkVDVC4uLikKLSAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJXaWRnZXQqPihyZW5kZXJlciktPndpZGdldCgpOworICAgICAgICBXaWRnZXQqIHdp
ZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CiAgICAgICAgIGlmICgh
d2lkZ2V0IHx8ICF3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJh
bWUoKTsKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsv
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCShyZXZpc2lvbiA0NjM4MykKKysrIFdl
YkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01ODMsNyArNTgzLDcgQEAgc3RhdGljIFBhbmdvTGF5b3V0KiBn
ZXRQYW5nb0xheW91dEZvckF0awogICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqIGFjY09i
amVjdCA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqPihjb3JlT2JqZWN0
KTsKICAgICBpZiAoIWFjY09iamVjdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyVGV4
dCogcmVuZGVyVGV4dCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihhY2NPYmplY3QtPnJlbmRl
cmVyKCkpOworICAgIFJlbmRlclRleHQqIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQoYWNjT2Jq
ZWN0LT5yZW5kZXJlcigpKTsKICAgICBpZiAoIXJlbmRlclRleHQpCiAgICAgICAgIHJldHVybiAw
OwogCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0NjM4MykKKysrIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDcgKzI2Nyw3IEBAIHN0YXRpYyBXaWRnZXQq
IHdpZGdldEZvck5vZGUoTm9kZSogZm9jdXMKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
Zm9jdXNlZE5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXIt
PmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxS
ZW5kZXJXaWRnZXQqPihyZW5kZXJlciktPndpZGdldCgpOworICAgIHJldHVybiB0b1JlbmRlcldp
ZGdldChyZW5kZXJlciktPndpZGdldCgpOwogfQogCiBzdGF0aWMgYm9vbCBhY2NlcHRzRWRpdGlu
Z0ZvY3VzKE5vZGUgKm5vZGUpCkBAIC0yNTMzLDEzICsyNTMzLDEyIEBAIGJvb2wgRG9jdW1lbnQ6
OnNldEZvY3VzZWROb2RlKFBhc3NSZWZQdHIKICAgICAgICAgb2xkRm9jdXNlZE5vZGUtPnNldEZv
Y3VzKGZhbHNlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgLy8gRGlzcGF0Y2ggYSBjaGFu
Z2UgZXZlbnQgZm9yIHRleHQgZmllbGRzIG9yIHRleHRhcmVhcyB0aGF0IGhhdmUgYmVlbiBlZGl0
ZWQKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByID0gc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4o
b2xkRm9jdXNlZE5vZGUuZ2V0KCktPnJlbmRlcmVyKCkpOworICAgICAgICBSZW5kZXJPYmplY3Qq
IHIgPSBvbGRGb2N1c2VkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKHIgJiYgci0+aXNU
ZXh0Q29udHJvbCgpICYmIHRvUmVuZGVyVGV4dENvbnRyb2wociktPmlzRWRpdGVkKCkpIHsKICAg
ICAgICAgICAgIG9sZEZvY3VzZWROb2RlLT5kaXNwYXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5jaGFu
Z2VFdmVudCwgdHJ1ZSwgZmFsc2UpOwotICAgICAgICAgICAgaWYgKChyID0gc3RhdGljX2Nhc3Q8
UmVuZGVyT2JqZWN0Kj4ob2xkRm9jdXNlZE5vZGUuZ2V0KCktPnJlbmRlcmVyKCkpKSkgewotICAg
ICAgICAgICAgICAgIGlmIChyLT5pc1RleHRDb250cm9sKCkpCi0gICAgICAgICAgICAgICAgICAg
IHRvUmVuZGVyVGV4dENvbnRyb2wociktPnNldEVkaXRlZChmYWxzZSk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICByID0gb2xkRm9jdXNlZE5vZGUtPnJlbmRlcmVyKCk7CisgICAgICAgICAg
ICBpZiAociAmJiByLT5pc1RleHRDb250cm9sKCkpCisgICAgICAgICAgICAgICAgdG9SZW5kZXJU
ZXh0Q29udHJvbChyKS0+c2V0RWRpdGVkKGZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IERpc3BhdGNoIHRoZSBibHVyIGV2ZW50IGFuZCBsZXQgdGhlIG5vZGUgZG8gYW55IG90aGVyIGJs
dXIgcmVsYXRlZCBhY3Rpdml0aWVzIChpbXBvcnRhbnQgZm9yIHRleHQgZmllbGRzKQpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNDYzODMpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAg
c3RhdGljIGlubGluZSBSZW5kZXJXaWRnZXQqIGZpbmRXaWRnZXRSZQogICAgICAgICB3aGlsZSAo
biAmJiAhbi0+aGFzVGFnTmFtZShvYmplY3RUYWcpKTsKIAogICAgIGlmIChuICYmIG4tPnJlbmRl
cmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlbmRlcldpZGdldCo+KG4tPnJlbmRlcmVyKCkpOworICAgICAgICByZXR1cm4gdG9S
ZW5kZXJXaWRnZXQobi0+cmVuZGVyZXIoKSk7CiAKICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2MzgzKQorKysgV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjE1LDcgKzE2MTUsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAgICAgaWYgKCFyIHx8
ICFyLT5pc1dpZGdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXaWRnZXQqIHdpZGdldCA9
IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHIpLT53aWRnZXQoKTsKKyAgICBXaWRnZXQqIHdp
ZGdldCA9IHRvUmVuZGVyV2lkZ2V0KHIpLT53aWRnZXQoKTsKICAgICBpZiAod2lkZ2V0KQogICAg
ICAgICB3aWRnZXQtPmhhbmRsZUV2ZW50KGV2ZW50KTsKICNlbHNlCkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2MzgzKQorKysgV2ViQ29yZS9odG1sL0hUTUxP
YmplY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDEwIEBAIEhUTUxP
YmplY3RFbGVtZW50Ojp+SFRNTE9iamVjdEVsZW1lbnQoKQogCiBSZW5kZXJXaWRnZXQqIEhUTUxP
YmplY3RFbGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKIHsKLSAgICBS
ZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCA9IChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlz
V2lkZ2V0KCkpID8gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4ocmVuZGVyZXIoKSkgOiAwOwor
ICAgIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0ID0gKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIo
KS0+aXNXaWRnZXQoKSkgPyB0b1JlbmRlcldpZGdldChyZW5kZXJlcigpKSA6IDA7CiAgICAgaWYg
KHJlbmRlcldpZGdldCAmJiAhcmVuZGVyV2lkZ2V0LT53aWRnZXQoKSkgewogICAgICAgICBkb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgICAg
cmVuZGVyV2lkZ2V0ID0gKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkgPyBz
dGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihyZW5kZXJlcigpKSA6IDA7CisgICAgICAgIHJlbmRl
cldpZGdldCA9IChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpID8gdG9SZW5k
ZXJXaWRnZXQocmVuZGVyZXIoKSkgOiAwOwogICAgIH0KICAgICByZXR1cm4gcmVuZGVyV2lkZ2V0
OwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NjM4MykK
KysrIFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3Nyw5ICsxNzcsMTAgQEAgdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZAogICAgIFJlbmRlck9iamVjdCogciA9IHJlbmRlcmVyKCk7CiAgICAgaWYgKCFyIHx8ICFyLT5p
c1dpZGdldCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV2lkZ2V0KiB3aWRnZXQgPSBz
dGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihyKS0+d2lkZ2V0KCkpCi0gICAgICAgIHdpZGdldC0+
aGFuZGxlRXZlbnQoZXZlbnQpOworICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQo
ciktPndpZGdldCgpOworICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm47CisgICAgd2lk
Z2V0LT5oYW5kbGVFdmVudChldmVudCk7CiB9CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ2MzgzKQorKysgV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNyArNDY3
LDcgQEAgRnJhbWUqIEZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUoSFRNTEZyYQogICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgRnJhbWVW
aWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXIt
PmlzV2lkZ2V0KCkgJiYgdmlldykKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4o
cmVuZGVyZXIpLT5zZXRXaWRnZXQodmlldyk7CisgICAgICAgIHRvUmVuZGVyV2lkZ2V0KHJlbmRl
cmVyKS0+c2V0V2lkZ2V0KHZpZXcpOwogICAgIAogICAgIGNoZWNrQ2FsbEltcGxpY2l0Q2xvc2Uo
KTsKICAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQ2Mzgz
KQorKysgV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDYsMTIgKzEwNiwxMiBAQCBib29sIFBsdWdpblRva2VuaXplcjo6d3JpdGVSYXdEYXRhKGNv
bnN0CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOwogICAg
ICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmFyZVBsdWdpbnNFbmFibGVkKCkpIHsKICAg
ICAgICAgICAgIG1fZG9jLT51cGRhdGVMYXlvdXQoKTsKLSAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoUmVuZGVyV2lkZ2V0KiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KG1f
ZW1iZWRFbGVtZW50LT5yZW5kZXJlcigpKSkgeworCisgICAgICAgICAgICBpZiAoUmVuZGVyV2lk
Z2V0KiByZW5kZXJlciA9IHRvUmVuZGVyV2lkZ2V0KG1fZW1iZWRFbGVtZW50LT5yZW5kZXJlcigp
KSkgewogICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnJlZGlyZWN0
RGF0YVRvUGx1Z2luKHJlbmRlcmVyLT53aWRnZXQoKSk7CiAgICAgICAgICAgICAgICAgZnJhbWUt
PmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VMb2FkZXIoKS0+
c2V0U2hvdWxkQnVmZmVyRGF0YShmYWxzZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCiAg
ICAgICAgICAgICBmaW5pc2goKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCShyZXZpc2lvbiA0NjM4MykKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NjQsNyArNzY0LDcgQEAgSGl0VGVzdFJlc3VsdCBFdmVudEhh
bmRsZXI6OmhpdFRlc3RSZXN1bAogICAgICAgICBOb2RlKiBuID0gcmVzdWx0LmlubmVyTm9kZSgp
OwogICAgICAgICBpZiAoIXJlc3VsdC5pc092ZXJXaWRnZXQoKSB8fCAhbiB8fCAhbi0+cmVuZGVy
ZXIoKSB8fCAhbi0+cmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlcldp
ZGdldCo+KG4tPnJlbmRlcmVyKCkpOworICAgICAgICBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdl
dCA9IHRvUmVuZGVyV2lkZ2V0KG4tPnJlbmRlcmVyKCkpOwogICAgICAgICBXaWRnZXQqIHdpZGdl
dCA9IHJlbmRlcldpZGdldC0+d2lkZ2V0KCk7CiAgICAgICAgIGlmICghd2lkZ2V0IHx8ICF3aWRn
ZXQtPmlzRnJhbWVWaWV3KCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTkxNCw3ICs5MTQsNyBA
QCBGcmFtZSogc3ViZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKCFyZW5k
ZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
V2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihyZW5kZXJlciktPndp
ZGdldCgpOworICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT53
aWRnZXQoKTsKICAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQogICAg
ICAgICByZXR1cm4gMDsKIApAQCAtMTc3MSw4ICsxNzcxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OmhhbmRsZVdoZWVsRXZlbnQoUGxhdAogICAgICAgICBSZW5kZXJPYmplY3QqIHRhcmdldCA9IG5v
ZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoaXNPdmVyV2lkZ2V0ICYmIHRh
cmdldCAmJiB0YXJnZXQtPmlzV2lkZ2V0KCkpIHsKLSAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4odGFyZ2V0KS0+d2lkZ2V0KCk7Ci0KKyAgICAg
ICAgICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCk7
CiAgICAgICAgICAgICBpZiAod2lkZ2V0ICYmIHBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoZSwgd2lk
Z2V0KSkgewogICAgICAgICAgICAgICAgIGUuYWNjZXB0KCk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDQ2MzgzKQorKysgV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYyLDcgKzU2Miw3IEBAIHN0YXRpYyBib29sIGlz
RnJhbWVFbGVtZW50KGNvbnN0IE5vZGUgKm4KICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0g
bi0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNXaWRnZXQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFdpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyV2lkZ2V0Kj4ocmVuZGVyZXIpLT53aWRnZXQoKTsKKyAgICBXaWRnZXQqIHdpZGdl
dCA9IHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CiAgICAgcmV0dXJuIHdpZGdl
dCAmJiB3aWRnZXQtPmlzRnJhbWVWaWV3KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9Qcmlu
dENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3Bw
CShyZXZpc2lvbiA0NjM4MykKKysrIFdlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFn
ZVJlY3RzKGNvbnMKICAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwgIW1fZnJhbWUtPnZp
ZXcoKSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmVuZGVyVmlldyogcm9vdCA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcqPihtX2Zy
YW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJWaWV3KiByb290ID0gdG9S
ZW5kZXJWaWV3KG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwogCiAgICAgaWYgKCFy
b290KSB7CiAgICAgICAgIExPR19FUlJPUigiZG9jdW1lbnQgdG8gYmUgcHJpbnRlZCBoYXMgbm8g
cmVuZGVyZXIiKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmRyb2lkL0V2ZW50SGFuZGxlckFuZHJv
aWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmRyb2lkL0V2ZW50SGFuZGxlckFu
ZHJvaWQuY3BwCShyZXZpc2lvbiA0NjM4MykKKysrIFdlYkNvcmUvcGFnZS9hbmRyb2lkL0V2ZW50
SGFuZGxlckFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXYKICAgICBSZW5kZXJPYmplY3QqIHRh
cmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/IGV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIo
KSA6IDA7CiAgICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRnZXQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdl
dChzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPih0YXJnZXQpLT53aWRnZXQoKSk7CisgICAgcmV0
dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lkZ2V0KHRhcmdldCktPndp
ZGdldCgpKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVu
dFRvV2lkZ2V0KFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0KQpJbmRleDogV2ViQ29yZS9wYWdl
L2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA0NjM4MykK
KysrIFdlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSw4ICsxMDUsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdl
dE1vdXNlRG93bkV2CiAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2
ZW50IHRvLgogICAgIGlmICghZXZlbnQudGFyZ2V0Tm9kZSgpIHx8ICFldmVudC50YXJnZXROb2Rl
KCktPnJlbmRlcmVyKCkgfHwgIWV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNXaWRn
ZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHBhc3NNb3VzZURvd25F
dmVudFRvV2lkZ2V0KHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KGV2ZW50LnRhcmdldE5vZGUo
KS0+cmVuZGVyZXIoKSktPndpZGdldCgpKTsKKyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50
VG9XaWRnZXQodG9SZW5kZXJXaWRnZXQoZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpKS0+
d2lkZ2V0KCkpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9X
aWRnZXQoV2lkZ2V0KiB3aWRnZXQpCkluZGV4OiBXZWJDb3JlL3BhZ2UvY2hyb21pdW0vRnJhbWVD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2Nocm9taXVtL0ZyYW1lQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiA0NjM4MykKKysrIFdlYkNvcmUvcGFnZS9jaHJvbWl1bS9GcmFt
ZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIGNvbXB1
dGVQYWdlUmVjdHNGb3JGcmFtZShGcmFtZSogZnJhCiAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQo
KSB8fCAhZnJhbWUtPnZpZXcoKSB8fCAhZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpCiAg
ICAgICAgIHJldHVybjsKICAKLSAgICBSZW5kZXJWaWV3KiByb290ID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVmlldyo+KGZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJWaWV3
KiByb290ID0gdG9SZW5kZXJWaWV3KGZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKIAog
ICAgIGlmICghcm9vdCkgewogICAgICAgICBMT0dfRVJST1IoImRvY3VtZW50IHRvIGJlIHByaW50
ZWQgaGFzIG5vIHJlbmRlcmVyIik7CkluZGV4OiBXZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxl
ckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsu
Y3BwCShyZXZpc2lvbiA0NjM4MykKKysrIFdlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsOCArNjIsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
cGFzc1dpZGdldE1vdXNlRG93bkV2CiAgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50
YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgOiAwOwogICAgIGlm
ICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChzdGF0aWNfY2FzdDxSZW5k
ZXJXaWRnZXQqPih0YXJnZXQpLT53aWRnZXQoKSk7CisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25F
dmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lkZ2V0KHRhcmdldCktPndpZGdldCgpKTsKIH0KIAogYm9v
bCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldp
ZGdldCogcmVuZGVyV2lkZ2V0KQpJbmRleDogV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxl
ckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVy
SGFpa3UuY3BwCShyZXZpc2lvbiA0NjM4MykKKysrIFdlYkNvcmUvcGFnZS9oYWlrdS9FdmVudEhh
bmRsZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5LDcgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdgogICAgIFJlbmRlck9iamVjdCogdGFyZ2V0
ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDog
MDsKICAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoc3RhdGlj
X2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4odGFyZ2V0KS0+d2lkZ2V0KCkpOworICAgIHJldHVybiBwYXNz
TW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdldCh0YXJnZXQpLT53aWRnZXQoKSk7
CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdl
dChSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRXZl
bnRIYW5kbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5k
bGVyTWFjLm1tCShyZXZpc2lvbiA0NjM4MykKKysrIFdlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5k
bGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdgogICAgIC8vIGp1c3QgcGFzcyBjdXJyZW50RXZl
bnQgZG93biB0byB0aGUgd2lkZ2V0LCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgaXQgZm9yIGV2ZW50
cyB0aGF0CiAgICAgLy8gZG9uJ3QgY29ycmVzcG9uZCB0byBDb2NvYSBldmVudHMuICBUaGUgbW91
c2Vkb3duL3VwcyB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHBhc3NlZCBvbiBhcwogICAgIC8vIHBh
cnQgb2YgdGhlIHByZXNzZWQvcmVsZWFzZWQgaGFuZGxpbmcuCi0gICAgcmV0dXJuIHBhc3NNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHRhcmdldCktPndp
ZGdldCgpKTsKKyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQodG9SZW5kZXJX
aWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCkpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dp
ZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQpCkBA
IC00NDksMTAgKzQ0OSwxMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRU
b1N1CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIo
KTsKICAgICAgICAgICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4ocmVuZGVyZXIpLT53aWRnZXQoKTsKKyAgICAg
ICAgICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT53aWRnZXQo
KTsKICAgICAgICAgICAgIGlmICghd2lkZ2V0IHx8ICF3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFwYXNzV2lkZ2V0
TW91c2VEb3duRXZlbnRUb1dpZGdldChzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihyZW5kZXJl
cikpKQorICAgICAgICAgICAgaWYgKCFwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldCh0
b1JlbmRlcldpZGdldChyZW5kZXJlcikpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIG1fbW91c2VEb3duV2FzSW5TdWJmcmFtZSA9IHRydWU7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uY3BwCShyZXZpc2lvbiA0NjM4MykK
KysrIFdlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3
ICs0Nyw3IEBAIHZvaWQgY29tcHV0ZVBhZ2VSZWN0c0ZvckZyYW1lKEZyYW1lKiBmcmEKICAgICBp
ZiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+dmlldygpIHx8ICFmcmFtZS0+ZG9jdW1l
bnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogIAotICAgIFJlbmRlclZpZXcqIHJv
b3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4oZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVy
KCkpOworICAgIFJlbmRlclZpZXcqIHJvb3QgPSB0b1JlbmRlclZpZXcoZnJhbWUtPmRvY3VtZW50
KCktPnJlbmRlcmVyKCkpOwogCiAgICAgaWYgKCFyb290KSB7CiAgICAgICAgIExPR19FUlJPUigi
ZG9jdW1lbnQgdG8gYmUgcHJpbnRlZCBoYXMgbm8gcmVuZGVyZXIiKTsKSW5kZXg6IFdlYkNvcmUv
cGFnZS93eC9FdmVudEhhbmRsZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL3d4
L0V2ZW50SGFuZGxlcld4LmNwcAkocmV2aXNpb24gNDYzODMpCisrKyBXZWJDb3JlL3BhZ2Uvd3gv
RXZlbnRIYW5kbGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXYKICAgICBpZiAoIWV2ZW50LnRhcmdl
dE5vZGUoKSB8fCAhZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIHx8ICFldmVudC50YXJn
ZXROb2RlKCktPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoc3RhdGljX2Nhc3Q8
UmVuZGVyV2lkZ2V0Kj4oZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpKS0+d2lkZ2V0KCkp
OworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdldChl
dmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkpLT53aWRnZXQoKSk7CiB9CiAKIGJvb2wgRXZl
bnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChSZW5kZXJXaWRnZXQq
IHJlbmRlcldpZGdldCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA0NjM4MykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyAr
MjUyLDcgQEAgc3RhdGljIENhY2hlZEltYWdlKiBnZXRDYWNoZWRJbWFnZShFbGVtZQogICAgIGlm
ICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0ltYWdlKCkpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgUmVuZGVySW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihyZW5k
ZXJlcik7CisgICAgUmVuZGVySW1hZ2UqIGltYWdlID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlcik7
CiAgICAgaWYgKGltYWdlLT5jYWNoZWRJbWFnZSgpICYmICFpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+
ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hlZEltYWdlKCk7CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDQ2MzgzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0
ZWJvYXJkQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOCArMTA0LDggQEAgdm9p
ZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIEFTU0VSVChub2RlKTsK
ICAgICBBU1NFUlQobm9kZS0+cmVuZGVyZXIoKSk7CiAgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVy
KCktPmlzSW1hZ2UoKSk7Ci0gICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8
UmVuZGVySW1hZ2UqPihub2RlLT5yZW5kZXJlcigpKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgp
KTsKKyAgICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRl
cmVyKCkpOworICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJ
bWFnZSgpOwogICAgIEFTU0VSVChjYWNoZWRJbWFnZSk7CiAgICAgSW1hZ2UqIGltYWdlID0gY2Fj
aGVkSW1hZ2UtPmltYWdlKCk7CiAgICAgQVNTRVJUKGltYWdlKTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCShyZXZpc2lvbiA0NjM4MykKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsOCArMTMx
LDggQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIEd0a0Ns
aXBib2FyZCogY2xpcGJvYXJkID0gZ3RrX2NsaXBib2FyZF9nZXRfZm9yX2Rpc3BsYXkoZ2RrX2Rp
c3BsYXlfZ2V0X2RlZmF1bHQoKSwgR0RLX1NFTEVDVElPTl9DTElQQk9BUkQpOwogCiAgICAgQVNT
RVJUKG5vZGUgJiYgbm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdl
KCkpOwotICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdl
Kj4obm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gc3Rh
dGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKSk7CisgICAgUmVu
ZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShub2RlLT5yZW5kZXJlcigpKTsKKyAg
ICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSByZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKTsKICAg
ICBBU1NFUlQoY2FjaGVkSW1hZ2UpOwogICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5p
bWFnZSgpOwogICAgIEFTU0VSVChpbWFnZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Q
YXN0ZWJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3Rl
Ym9hcmRNYWMubW0JKHJldmlzaW9uIDQ2MzgzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFz
dGVib2FyZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgUGFz
dGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKIAogICAgIEFTU0VSVChub2RlLT5yZW5k
ZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSk7CiAgICAgUmVuZGVySW1hZ2Uq
IHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShub2RlLT5yZW5kZXJlcigpKTsKLSAgICBDYWNoZWRJ
bWFnZSogY2FjaGVkSW1hZ2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KHJlbmRlcmVyLT5j
YWNoZWRJbWFnZSgpKTsKKyAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSByZW5kZXJlci0+
Y2FjaGVkSW1hZ2UoKTsKICAgICBBU1NFUlQoY2FjaGVkSW1hZ2UpOwogICAgIAogICAgIGlmIChj
YWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
bGlwYm9hcmRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9h
cmRRdC5jcHAJKHJldmlzaW9uIDQ2MzgzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9h
cmRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCBzdGF0aWMgQ2FjaGVk
SW1hZ2UqIGdldENhY2hlZEltYWdlKEVsZW1lCiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVy
ZXItPmlzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZW5kZXJJbWFnZSogaW1h
Z2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKTsKKyAgICBSZW5kZXJJbWFn
ZSogaW1hZ2UgPSB0b1JlbmRlckltYWdlKHJlbmRlcmVyKTsKICAgICBpZiAoaW1hZ2UtPmNhY2hl
ZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpCiAgICAg
ICAgIHJldHVybiBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9xdC9QYXN0ZWJvYXJkUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQv
UGFzdGVib2FyZFF0LmNwcAkocmV2aXNpb24gNDYzODMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0
L1Bhc3RlYm9hcmRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgQVNTRVJUKG5vZGUgJiYg
bm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCkpOwogCiAjaWZu
ZGVmIFFUX05PX0NMSVBCT0FSRAotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHN0YXRp
Y19jYXN0PFJlbmRlckltYWdlKj4obm9kZS0+cmVuZGVyZXIoKSktPmNhY2hlZEltYWdlKCk7Cisg
ICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gdG9SZW5kZXJJbWFnZShub2RlLT5yZW5kZXJl
cigpKS0+Y2FjaGVkSW1hZ2UoKTsKICAgICBBU1NFUlQoY2FjaGVkSW1hZ2UpOwogCiAgICAgSW1h
Z2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3dpbi9DbGlwYm9hcmRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2lu
L0NsaXBib2FyZFdpbi5jcHAJKHJldmlzaW9uIDQ2MzgzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ2xpcGJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQzLDcgKzY0Myw3IEBAIHN0
YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVkSW1hZ2UoRWxlbWUKICAgICBpZiAoIXJlbmRlcmVy
IHx8ICFyZW5kZXJlci0+aXNJbWFnZSgpKSAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAg
UmVuZGVySW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihyZW5kZXJlcik7
CisgICAgUmVuZGVySW1hZ2UqIGltYWdlID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlcik7CiAgICAg
aWYgKGltYWdlLT5jYWNoZWRJbWFnZSgpICYmICFpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+ZXJyb3JP
Y2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gaW1hZ2UtPmNhY2hlZEltYWdlKCk7CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCShyZXZpc2lvbiA0NjM4MykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODgsOCArMTg4LDggQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1
cgogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmKQogewogICAgIEFTU0VSVChub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYg
bm9kZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgpKTsKLSAgICBSZW5kZXJJbWFnZSogcmVuZGVyZXIg
PSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KG5vZGUtPnJlbmRlcmVyKCkpOwotICAgIENhY2hl
ZEltYWdlKiBjYWNoZWRJbWFnZSA9IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4ocmVuZGVyZXIt
PmNhY2hlZEltYWdlKCkpOworICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1h
Z2Uobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gcmVu
ZGVyZXItPmNhY2hlZEltYWdlKCk7CiAgICAgQVNTRVJUKGNhY2hlZEltYWdlKTsKICAgICBJbWFn
ZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKICAgICBBU1NFUlQoaW1hZ2UpOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9uIDQ2MzgzKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsNyBAQCBwdWJsaWM6
CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveE1vZGVsT2JqZWN0KCkgY29uc3QKICAgICB7
IAogICAgICAgICBpZiAoIW1fcmVuZGVyZXItPmlzVGV4dCgpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0Kj4obV9yZW5kZXJlcik7CisgICAgICAg
ICAgICByZXR1cm4gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChtX3JlbmRlcmVyKTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJl
dmlzaW9uIDQ2MzgzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElu
bGluZXMoUmVuZGVyQmwKICAgICAvLyBXZSBoYXZlIGJlZW4gcmVwYXJlbnRlZCBhbmQgYXJlIG5v
dyB1bmRlciB0aGUgZnJvbUJsb2NrLiAgV2UgbmVlZAogICAgIC8vIHRvIHdhbGsgdXAgb3VyIGlu
bGluZSBwYXJlbnQgY2hhaW4gdW50aWwgd2UgaGl0IHRoZSBjb250YWluaW5nIGJsb2NrLgogICAg
IC8vIE9uY2Ugd2UgaGl0IHRoZSBjb250YWluaW5nIGJsb2NrIHdlJ3JlIGRvbmUuCi0gICAgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGN1cnIgPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVj
dCo+KHBhcmVudCgpKTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY3VyciA9IHRvUmVuZGVy
Qm94TW9kZWxPYmplY3QocGFyZW50KCkpOwogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjdXJy
Q2hpbGQgPSB0aGlzOwogICAgIAogICAgIC8vIEZJWE1FOiBCZWNhdXNlIHNwbGl0dGluZyBpcyBP
KG5eMikgYXMgdGFncyBuZXN0IHBhdGhvbG9naWNhbGx5LCB3ZSBjYXAgdGhlIGRlcHRoIGF0IHdo
aWNoIHdlJ3JlIHdpbGxpbmcgdG8gY2xvbmUuCkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6OnNwbGl0SW5saW5lcyhSZW5kZXJCbAogICAgICAgICAKICAgICAgICAgLy8gS2Vl
cCB3YWxraW5nIHVwIHRoZSBjaGFpbi4KICAgICAgICAgY3VyckNoaWxkID0gY3VycjsKLSAgICAg
ICAgY3VyciA9IHN0YXRpY19jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0Kj4oY3Vyci0+cGFyZW50
KCkpOworICAgICAgICBjdXJyID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChjdXJyLT5wYXJlbnQo
KSk7CiAgICAgICAgIHNwbGl0RGVwdGgrKzsKICAgICB9CiAKQEAgLTM4NCw3ICszODQsNyBAQCB2
b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvCiAgICAgQVNTRVJUKCFiZWZv
cmVDaGlsZCB8fCBiZWZvcmVDaGlsZC0+cGFyZW50KCktPmlzUmVuZGVyQmxvY2soKSB8fCBiZWZv
cmVDaGlsZC0+cGFyZW50KCktPmlzUmVuZGVySW5saW5lKCkpOwogICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBiZWZvcmVDaGlsZFBhcmVudCA9IDA7CiAgICAgaWYgKGJlZm9yZUNoaWxkKQotICAg
ICAgICBiZWZvcmVDaGlsZFBhcmVudCA9IHN0YXRpY19jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0
Kj4oYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsKKyAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQgPSB0
b1JlbmRlckJveE1vZGVsT2JqZWN0KGJlZm9yZUNoaWxkLT5wYXJlbnQoKSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250ID0gbmV4dENvbnRpbnVhdGlvbihm
bG93KTsKICAgICAgICAgaWYgKGNvbnQpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDQ2MzgzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA3LDcgKzYwNyw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZW5kZXJlckNvbnRlbnQKIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVJbWFnZUNvbnRlbnRzKCkKIHsKICAgICBBU1NFUlQocmVuZGVyZXIoKS0+
aXNJbWFnZSgpKTsKLSAgICBSZW5kZXJJbWFnZSogaW1hZ2VSZW5kZXJlciA9IHN0YXRpY19jYXN0
PFJlbmRlckltYWdlKj4ocmVuZGVyZXIoKSk7CisgICAgUmVuZGVySW1hZ2UqIGltYWdlUmVuZGVy
ZXIgPSB0b1JlbmRlckltYWdlKHJlbmRlcmVyKCkpOwogCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlID0gaW1hZ2VSZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKTsKICAgICBpZiAoIWNhY2hlZElt
YWdlKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHJldmlzaW9uIDQ2MzgzKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYg
KzY5LDIxIEBAIHByaXZhdGU6CiAgICAgaW50IG1fcmVmQ291bnQ7CiB9OwogCitpbmxpbmUgUmVu
ZGVyV2lkZ2V0KiB0b1JlbmRlcldpZGdldChSZW5kZXJPYmplY3QqIG8pCit7CisgICAgQVNTRVJU
KCFvIHx8IG8tPmlzV2lkZ2V0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJXaWRn
ZXQqPihvKTsKK30KKworaW5saW5lIGNvbnN0IFJlbmRlcldpZGdldCogdG9SZW5kZXJXaWRnZXQo
Y29uc3QgUmVuZGVyT2JqZWN0KiBvKQoreworICAgIEFTU0VSVCghbyB8fCBvLT5pc1dpZGdldCgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyV2lkZ2V0Kj4obyk7Cit9CisK
Ky8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3Zv
aWQgdG9SZW5kZXJXaWRnZXQoY29uc3QgUmVuZGVyV2lkZ2V0Kik7CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlcldpZGdldF9oCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHJldmlzaW9uIDQ2MzgzKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRy
b2xJbm5lckJsCiAgICAgLy8gTXVsdGlsaW5lIHRleHQgY29udHJvbHMgaGF2ZSB0aGUgc2Nyb2xs
IG9uIHNoYWRvd0FuY2VzdG9yTm9kZSwgc28gd2UgbmVlZCB0byB0YWtlIHRoYXQKICAgICAvLyBp
bnRvIGFjY291bnQgaGVyZS4KICAgICBpZiAobV9tdWx0aUxpbmUpIHsKLSAgICAgICAgUmVuZGVy
VGV4dENvbnRyb2wqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihu
b2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5kZXJlcigpKTsKKyAgICAgICAgUmVuZGVy
VGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdG9SZW5kZXJUZXh0Q29udHJvbChub2RlKCktPnNoYWRv
d0FuY2VzdG9yTm9kZSgpLT5yZW5kZXJlcigpKTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5oYXNP
dmVyZmxvd0NsaXAoKSkKICAgICAgICAgICAgIHJlbmRlcmVyLT5sYXllcigpLT5hZGRTY3JvbGxl
ZENvbnRlbnRPZmZzZXQoY29udGVudHNYLCBjb250ZW50c1kpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33729</attachid>
            <date>2009-07-29 12:06:56 -0700</date>
            <delta_ts>2009-07-30 13:19:17 -0700</delta_ts>
            <desc>Next step: Includes toRenderWidget</desc>
            <filename>RenderCheckPatch4.txt</filename>
            <type>text/plain</type>
            <size>30641</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjU0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTEgQEAKKzIwMDktMDctMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBj
aGVja2VkIGNhc3RzIGZvciByZW5kZXIgdHJlZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjIKKworICAgICAgICBBZGQgbmV3IHRvUmVuZGVyV2lk
Z2V0IGNhc3QgYW5kIHVzZSBpdCBldmVyeXdoZXJlLgorCisgICAgICAgIFVzZSBjaGVja2VkIGNh
c3RzIGluIGFsbCB0aGUgcGxhY2VzIHRoYXQgd2VyZSB1c2luZyBzdGF0aWNfY2FzdAorICAgICAg
ICBidXQgdGhlcmUgaXMgYSBjaGVja2VkIGNhc3QgYXZhaWxhYmxlLgorCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OndpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp3aWRnZXRGb3JBdHRhY2htZW50Vmlldyk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9z
aXRpb25Gb3JQb2ludCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAoZ2V0UGFuZ29MYXlvdXRGb3JBdGspOgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3aWRnZXRGb3JO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRGb2N1c2VkTm9kZSk6CisgICAg
ICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRX
aWRnZXRSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3MpOgorICAgICAgICAq
IGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJ
bkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFN1YmZyYW1lKToK
KyAgICAgICAgKiBsb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVG9rZW5pemVyOjp3cml0ZVJhd0RhdGEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6c3ViZnJhbWVGb3JUYXJnZXROb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgICog
cGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0ZyYW1lRWxlbWVudCk6CisgICAg
ICAgICogcGFnZS9QcmludENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJpbnRDb250
ZXh0Ojpjb21wdXRlUGFnZVJlY3RzKToKKyAgICAgICAgKiBwYWdlL2FuZHJvaWQvRXZlbnRIYW5k
bGVyQW5kcm9pZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NXaWRn
ZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBwYWdlL2Nocm9taXVtL0V2ZW50
SGFuZGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFz
c1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBhZ2UvY2hyb21pdW0v
RnJhbWVDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUGFnZVJlY3RzRm9y
RnJhbWUpOgorICAgICAgICAqIHBhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0
KToKKyAgICAgICAgKiBwYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQp
OgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUp
OgorICAgICAgICAqIHBhZ2Uvd2luL0ZyYW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bXB1dGVQYWdlUmVjdHNGb3JGcmFtZSk6CisgICAgICAgICogcGFnZS93eC9FdmVudEhhbmRsZXJX
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURv
d25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRDYWNoZWRJbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Q
YXN0ZWJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
Q2xpcGJvYXJkUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q2FjaGVkSW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJvYXJk
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldENhY2hlZEltYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OmJveE1vZGVsT2JqZWN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6
c3BsaXRJbmxpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6YWRkQ2hpbGRU
b0NvbnRpbnVhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUltYWdlQ29u
dGVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpwb3NpdGlv
bkZvclBvaW50KToKKyAgICAgICAgVXNlIGNoZWNrZWQgY2FzdCBpbnN0ZWFkIG9mIHN0YXRpY19j
YXN0LgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0Lmg6IEFkZGVk
IHRvUmVuZGVyV2lkZ2V0LgorCiAyMDA5LTA3LTI5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3NSw3ICs3NzUsNyBAQCBTdHJpbmcg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nCiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxSZW5kZXJMaXN0TWFya2VyKj4obV9yZW5kZXJlciktPnRleHQoKTsKICAgICAKICAgICBp
ZiAobV9yZW5kZXJlci0+aXNSZW5kZXJCdXR0b24oKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFJlbmRlckJ1dHRvbio+KG1fcmVuZGVyZXIpLT50ZXh0KCk7CisgICAgICAgIHJldHVybiB0
b1JlbmRlckJ1dHRvbihtX3JlbmRlcmVyKS0+dGV4dCgpOwogCiAgICAgaWYgKGlzV2ViQXJlYSgp
KSB7CiAgICAgICAgIGlmIChtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT5mcmFtZSgpKQpAQCAtMTYw
Myw4ICsxNjAzLDcgQEAgV2lkZ2V0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp3aWRnZQog
ewogICAgIGlmICghbV9yZW5kZXJlci0+aXNXaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KG1fcmVuZGVyZXIpLT53
aWRnZXQoKTsKKyAgICByZXR1cm4gdG9SZW5kZXJXaWRnZXQobV9yZW5kZXJlciktPndpZGdldCgp
OwogfQogCiBBWE9iamVjdENhY2hlKiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpheE9iamVj
dENhY2hlKCkgY29uc3QKQEAgLTE2NzUsNyArMTY3NCw3IEBAIFdpZGdldCogQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6d2lkZ2UKIHsKICAgICBpZiAoIWlzQXR0YWNobWVudCgpKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4obV9yZW5k
ZXJlciktPndpZGdldCgpOworICAgIHJldHVybiB0b1JlbmRlcldpZGdldChtX3JlbmRlcmVyKS0+
d2lkZ2V0KCk7CiB9CiAKIEZyYW1lVmlldyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZnJh
bWVWaWV3SWZSZW5kZXJWaWV3KCkgY29uc3QKQEAgLTE4ODAsNyArMTg3OSw3IEBAIFZpc2libGVQ
b3NpdGlvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWMKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKICAgICAgICAgLy8gZGVzY2VuZCBpbnRvIHdpZGdldCAoRlJBTUUsIElGUkFNRSwgT0JK
RUNULi4uKQotICAgICAgICBXaWRnZXQqIHdpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdl
dCo+KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CisgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5k
ZXJXaWRnZXQocmVuZGVyZXIpLT53aWRnZXQoKTsKICAgICAgICAgaWYgKCF3aWRnZXQgfHwgIXdp
ZGdldC0+aXNGcmFtZVZpZXcoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBGcmFtZSog
ZnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpOwpJbmRleDog
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHAJKHJldmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2NCw3ICs1NjQsNyBAQCBzdGF0aWMgUGFuZ29MYXlvdXQqIGdldFBhbmdvTGF5b3V0
Rm9yQXRrCiAgICAgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCogYWNjT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCo+KGNvcmVPYmplY3QpOwogICAgIGlmICgh
YWNjT2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KGFjY09iamVjdC0+cmVuZGVyZXIoKSk7CisgICAg
UmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChhY2NPYmplY3QtPnJlbmRlcmVy
KCkpOwogICAgIGlmICghcmVuZGVyVGV4dCkKICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHJldmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjcsNyArMjY3LDcgQEAgc3RhdGljIFdpZGdldCogd2lkZ2V0Rm9yTm9k
ZShOb2RlKiBmb2N1cwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBmb2N1c2VkTm9kZS0+
cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNXaWRnZXQoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+
KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CisgICAgcmV0dXJuIHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVy
KS0+d2lkZ2V0KCk7CiB9CiAKIHN0YXRpYyBib29sIGFjY2VwdHNFZGl0aW5nRm9jdXMoTm9kZSAq
bm9kZSkKQEAgLTI1NDEsMTMgKzI1NDEsMTIgQEAgYm9vbCBEb2N1bWVudDo6c2V0Rm9jdXNlZE5v
ZGUoUGFzc1JlZlB0cgogICAgICAgICBvbGRGb2N1c2VkTm9kZS0+c2V0Rm9jdXMoZmFsc2UpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAvLyBEaXNwYXRjaCBhIGNoYW5nZSBldmVudCBmb3Ig
dGV4dCBmaWVsZHMgb3IgdGV4dGFyZWFzIHRoYXQgaGF2ZSBiZWVuIGVkaXRlZAotICAgICAgICBS
ZW5kZXJPYmplY3QqIHIgPSBzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3QqPihvbGRGb2N1c2VkTm9k
ZS5nZXQoKS0+cmVuZGVyZXIoKSk7CisgICAgICAgIFJlbmRlck9iamVjdCogciA9IG9sZEZvY3Vz
ZWROb2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAociAmJiByLT5pc1RleHRDb250cm9sKCkg
JiYgdG9SZW5kZXJUZXh0Q29udHJvbChyKS0+aXNFZGl0ZWQoKSkgewogICAgICAgICAgICAgb2xk
Rm9jdXNlZE5vZGUtPmRpc3BhdGNoRXZlbnQoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCB0cnVl
LCBmYWxzZSk7Ci0gICAgICAgICAgICBpZiAoKHIgPSBzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3Qq
PihvbGRGb2N1c2VkTm9kZS5nZXQoKS0+cmVuZGVyZXIoKSkpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHItPmlzVGV4dENvbnRyb2woKSkKLSAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJUZXh0
Q29udHJvbChyKS0+c2V0RWRpdGVkKGZhbHNlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHIgPSBvbGRGb2N1c2VkTm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIGlmIChyICYmIHIt
PmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAgICAgICAgICB0b1JlbmRlclRleHRDb250cm9sKHIp
LT5zZXRFZGl0ZWQoZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRGlzcGF0Y2ggdGhl
IGJsdXIgZXZlbnQgYW5kIGxldCB0aGUgbm9kZSBkbyBhbnkgb3RoZXIgYmx1ciByZWxhdGVkIGFj
dGl2aXRpZXMgKGltcG9ydGFudCBmb3IgdGV4dCBmaWVsZHMpCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEVtYmVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbWJl
ZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NjU0OCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgaW5saW5l
IFJlbmRlcldpZGdldCogZmluZFdpZGdldFJlCiAgICAgICAgIHdoaWxlIChuICYmICFuLT5oYXNU
YWdOYW1lKG9iamVjdFRhZykpOwogCiAgICAgaWYgKG4gJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5y
ZW5kZXJlcigpLT5pc1dpZGdldCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
V2lkZ2V0Kj4obi0+cmVuZGVyZXIoKSk7CisgICAgICAgIHJldHVybiB0b1JlbmRlcldpZGdldChu
LT5yZW5kZXJlcigpKTsKIAogICAgIHJldHVybiAwOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MTUsNyArMTYxNSw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKICAgICBpZiAoIXIgfHwgIXItPmlzV2lkZ2V0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8
UmVuZGVyV2lkZ2V0Kj4ociktPndpZGdldCgpOworICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5k
ZXJXaWRnZXQociktPndpZGdldCgpOwogICAgIGlmICh3aWRnZXQpCiAgICAgICAgIHdpZGdldC0+
aGFuZGxlRXZlbnQoZXZlbnQpOwogI2Vsc2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsMTAgQEAgSFRNTE9iamVjdEVsZW1lbnQ6
On5IVE1MT2JqZWN0RWxlbWVudCgpCiAKIFJlbmRlcldpZGdldCogSFRNTE9iamVjdEVsZW1lbnQ6
OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdAogewotICAgIFJlbmRlcldpZGdldCog
cmVuZGVyV2lkZ2V0ID0gKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkgPyBz
dGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihyZW5kZXJlcigpKSA6IDA7CisgICAgUmVuZGVyV2lk
Z2V0KiByZW5kZXJXaWRnZXQgPSAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1dpZGdldCgp
KSA/IHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKCkpIDogMDsKICAgICBpZiAocmVuZGVyV2lkZ2V0
ICYmICFyZW5kZXJXaWRnZXQtPndpZGdldCgpKSB7CiAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgICByZW5kZXJXaWRnZXQg
PSAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1dpZGdldCgpKSA/IHN0YXRpY19jYXN0PFJl
bmRlcldpZGdldCo+KHJlbmRlcmVyKCkpIDogMDsKKyAgICAgICAgcmVuZGVyV2lkZ2V0ID0gKHJl
bmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkgPyB0b1JlbmRlcldpZGdldChyZW5k
ZXJlcigpKSA6IDA7CiAgICAgfQogICAgIHJldHVybiByZW5kZXJXaWRnZXQ7CiB9CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDkgKzE3Nywx
MCBAQCB2b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgUmVuZGVy
T2JqZWN0KiByID0gcmVuZGVyZXIoKTsKICAgICBpZiAoIXIgfHwgIXItPmlzV2lkZ2V0KCkpCiAg
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChXaWRnZXQqIHdpZGdldCA9IHN0YXRpY19jYXN0PFJl
bmRlcldpZGdldCo+KHIpLT53aWRnZXQoKSkKLSAgICAgICAgd2lkZ2V0LT5oYW5kbGVFdmVudChl
dmVudCk7CisgICAgV2lkZ2V0KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdldChyKS0+d2lkZ2V0KCk7
CisgICAgaWYgKCF3aWRnZXQpCisgICAgICAgIHJldHVybjsKKyAgICB3aWRnZXQtPmhhbmRsZUV2
ZW50KGV2ZW50KTsKIH0KIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpJbmRleDog
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NCw3ICs0NjQsNyBAQCBGcmFtZSog
RnJhbWVMb2FkZXI6OmxvYWRTdWJmcmFtZShIVE1MRnJhCiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBm
cmFtZS0+dmlldygpOwogICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNXaWRnZXQoKSAm
JiB2aWV3KQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihyZW5kZXJlciktPnNl
dFdpZGdldCh2aWV3KTsKKyAgICAgICAgdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT5zZXRXaWRn
ZXQodmlldyk7CiAgICAgCiAgICAgY2hlY2tDYWxsSW1wbGljaXRDbG9zZSgpOwogICAgIApJbmRl
eDogV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3Jl
L2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiwxMiArMTA2
LDEyIEBAIGJvb2wgUGx1Z2luVG9rZW5pemVyOjp3cml0ZVJhd0RhdGEoY29uc3QKICAgICAgICAg
U2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CiAgICAgICAgIGlmIChzZXR0
aW5ncyAmJiBzZXR0aW5ncy0+YXJlUGx1Z2luc0VuYWJsZWQoKSkgewogICAgICAgICAgICAgbV9k
b2MtPnVwZGF0ZUxheW91dCgpOwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChSZW5kZXJXaWRn
ZXQqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4obV9lbWJlZEVsZW1lbnQt
PnJlbmRlcmVyKCkpKSB7CisKKyAgICAgICAgICAgIGlmIChSZW5kZXJXaWRnZXQqIHJlbmRlcmVy
ID0gdG9SZW5kZXJXaWRnZXQobV9lbWJlZEVsZW1lbnQtPnJlbmRlcmVyKCkpKSB7CiAgICAgICAg
ICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cmVkaXJlY3REYXRhVG9QbHVnaW4o
cmVuZGVyZXItPndpZGdldCgpKTsKICAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmFj
dGl2ZURvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJjZUxvYWRlcigpLT5zZXRTaG91bGRCdWZm
ZXJEYXRhKGZhbHNlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgICAgIGZp
bmlzaCgpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlz
aW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc2NCw3ICs3NjQsNyBAQCBIaXRUZXN0UmVzdWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVz
dFJlc3VsCiAgICAgICAgIE5vZGUqIG4gPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgICAgIGlm
ICghcmVzdWx0LmlzT3ZlcldpZGdldCgpIHx8ICFuIHx8ICFuLT5yZW5kZXJlcigpIHx8ICFuLT5y
ZW5kZXJlcigpLT5pc1dpZGdldCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFJlbmRl
cldpZGdldCogcmVuZGVyV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4obi0+cmVu
ZGVyZXIoKSk7CisgICAgICAgIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0ID0gdG9SZW5kZXJX
aWRnZXQobi0+cmVuZGVyZXIoKSk7CiAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gcmVuZGVyV2lk
Z2V0LT53aWRnZXQoKTsKICAgICAgICAgaWYgKCF3aWRnZXQgfHwgIXdpZGdldC0+aXNGcmFtZVZp
ZXcoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTE0LDcgKzkxNCw3IEBAIEZyYW1lKiBzdWJm
cmFtZUZvclRhcmdldE5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5k
ZXJlci0+aXNXaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBXaWRnZXQqIHdpZGdl
dCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHJlbmRlcmVyKS0+d2lkZ2V0KCk7CisgICAg
V2lkZ2V0KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpZGdldCgpOwogICAg
IGlmICghd2lkZ2V0IHx8ICF3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC0xNzcxLDggKzE3NzEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxF
dmVudChQbGF0CiAgICAgICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0gbm9kZS0+cmVuZGVyZXIo
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChpc092ZXJXaWRnZXQgJiYgdGFyZ2V0ICYmIHRhcmdl
dC0+aXNXaWRnZXQoKSkgewotICAgICAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJXaWRnZXQqPih0YXJnZXQpLT53aWRnZXQoKTsKLQorICAgICAgICAgICAgV2lkZ2V0
KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdldCh0YXJnZXQpLT53aWRnZXQoKTsKICAgICAgICAgICAg
IGlmICh3aWRnZXQgJiYgcGFzc1doZWVsRXZlbnRUb1dpZGdldChlLCB3aWRnZXQpKSB7CiAgICAg
ICAgICAgICAgICAgZS5hY2NlcHQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NTksNyArNTU5LDcgQEAgc3RhdGljIGJvb2wgaXNGcmFtZUVsZW1lbnQo
Y29uc3QgTm9kZSAqbgogICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBuLT5yZW5kZXJlcigp
OwogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgV2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJXaWRn
ZXQqPihyZW5kZXJlciktPndpZGdldCgpOworICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJX
aWRnZXQocmVuZGVyZXIpLT53aWRnZXQoKTsKICAgICByZXR1cm4gd2lkZ2V0ICYmIHdpZGdldC0+
aXNGcmFtZVZpZXcoKTsKIH0KIApJbmRleDogV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHJldmlzaW9uIDQ2
NTQ4KQorKysgV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDcgKzUzLDcgQEAgdm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHMoY29ucwog
ICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSB8fCAhbV9mcmFtZS0+dmlldygpIHx8ICFtX2Zy
YW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5k
ZXJWaWV3KiByb290ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVmlldyo+KG1fZnJhbWUtPmRvY3VtZW50
KCktPnJlbmRlcmVyKCkpOworICAgIFJlbmRlclZpZXcqIHJvb3QgPSB0b1JlbmRlclZpZXcobV9m
cmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7CiAKICAgICBpZiAoIXJvb3QpIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJkb2N1bWVudCB0byBiZSBwcmludGVkIGhhcyBubyByZW5kZXJlciIpOwpJ
bmRleDogV2ViQ29yZS9wYWdlL2FuZHJvaWQvRXZlbnRIYW5kbGVyQW5kcm9pZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuZHJvaWQvRXZlbnRIYW5kbGVyQW5kcm9pZC5jcHAJKHJl
dmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9wYWdlL2FuZHJvaWQvRXZlbnRIYW5kbGVyQW5kcm9p
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OnBhc3NXaWRnZXRNb3VzZURvd25FdgogICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0gZXZlbnQu
dGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDogMDsKICAgICBp
ZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHN0YXRpY19jYXN0
PFJlbmRlcldpZGdldCo+KHRhcmdldCktPndpZGdldCgpKTsKKyAgICByZXR1cm4gcGFzc01vdXNl
RG93bkV2ZW50VG9XaWRnZXQodG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCkpOwogfQog
CiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVu
ZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQpCkluZGV4OiBXZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZl
bnRIYW5kbGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9jaHJvbWl1
bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9w
YWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDggKzEwNSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXYK
ICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCiAgICAg
aWYgKCFldmVudC50YXJnZXROb2RlKCkgfHwgIWV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIo
KSB8fCAhZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpLT5pc1dpZGdldCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQo
c3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4oZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigp
KS0+d2lkZ2V0KCkpOworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1Jl
bmRlcldpZGdldChldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkpLT53aWRnZXQoKSk7CiB9
CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQq
IHdpZGdldCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9jaHJvbWl1bS9GcmFtZUNocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvY2hyb21pdW0vRnJhbWVDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9wYWdlL2Nocm9taXVtL0ZyYW1lQ2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgY29tcHV0ZVBhZ2VSZWN0c0Zv
ckZyYW1lKEZyYW1lKiBmcmEKICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+
dmlldygpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJu
OwogIAotICAgIFJlbmRlclZpZXcqIHJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4oZnJh
bWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOworICAgIFJlbmRlclZpZXcqIHJvb3QgPSB0b1Jl
bmRlclZpZXcoZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwogCiAgICAgaWYgKCFyb290
KSB7CiAgICAgICAgIExPR19FUlJPUigiZG9jdW1lbnQgdG8gYmUgcHJpbnRlZCBoYXMgbm8gcmVu
ZGVyZXIiKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAJKHJldmlzaW9u
IDQ2NTQ4KQorKysgV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw4ICs2Miw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91
c2VEb3duRXYKICAgICBSZW5kZXJPYmplY3QqIHRhcmdldCA9IGV2ZW50LnRhcmdldE5vZGUoKSA/
IGV2ZW50LnRhcmdldE5vZGUoKS0+cmVuZGVyZXIoKSA6IDA7CiAgICAgaWYgKCF0YXJnZXQgfHwg
IXRhcmdldC0+aXNXaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHRh
cmdldCktPndpZGdldCgpKTsKKyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQo
dG9SZW5kZXJXaWRnZXQodGFyZ2V0KS0+d2lkZ2V0KCkpOwogfQogCiBib29sIEV2ZW50SGFuZGxl
cjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVuZGVyV2lkZ2V0KiByZW5kZXJX
aWRnZXQpCkluZGV4OiBXZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAJKHJl
dmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFz
c1dpZGdldE1vdXNlRG93bkV2CiAgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJn
ZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgOiAwOwogICAgIGlmICgh
dGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChzdGF0aWNfY2FzdDxSZW5kZXJX
aWRnZXQqPih0YXJnZXQpLT53aWRnZXQoKSk7CisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVu
dFRvV2lkZ2V0KHRvUmVuZGVyV2lkZ2V0KHRhcmdldCktPndpZGdldCgpKTsKIH0KIAogYm9vbCBF
dmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdl
dCogcmVuZGVyV2lkZ2V0KQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHJl
dmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dp
ZGdldE1vdXNlRG93bkV2CiAgICAgLy8ganVzdCBwYXNzIGN1cnJlbnRFdmVudCBkb3duIHRvIHRo
ZSB3aWRnZXQsIHdlIGRvbid0IHdhbnQgdG8gY2FsbCBpdCBmb3IgZXZlbnRzIHRoYXQKICAgICAv
LyBkb24ndCBjb3JyZXNwb25kIHRvIENvY29hIGV2ZW50cy4gIFRoZSBtb3VzZWRvd24vdXBzIHdp
bGwgaGF2ZSBhbHJlYWR5IGJlZW4gcGFzc2VkIG9uIGFzCiAgICAgLy8gcGFydCBvZiB0aGUgcHJl
c3NlZC9yZWxlYXNlZCBoYW5kbGluZy4KLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9X
aWRnZXQoc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4odGFyZ2V0KS0+d2lkZ2V0KCkpOworICAg
IHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCh0b1JlbmRlcldpZGdldCh0YXJnZXQp
LT53aWRnZXQoKSk7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3du
RXZlbnRUb1dpZGdldChSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCkKQEAgLTQ0OSwxMCArNDQ5
LDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJhbWVFdmVudFRvU3UKICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICAg
ICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzV2lkZ2V0KCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJXaWRnZXQqPihyZW5kZXJlciktPndpZGdldCgpOworICAgICAgICAgICAgV2lkZ2V0
KiB3aWRnZXQgPSB0b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpZGdldCgpOwogICAgICAgICAg
ICAgaWYgKCF3aWRnZXQgfHwgIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIXBhc3NXaWRnZXRNb3VzZURvd25FdmVu
dFRvV2lkZ2V0KHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHJlbmRlcmVyKSkpCisgICAgICAg
ICAgICBpZiAoIXBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lkZ2V0
KHJlbmRlcmVyKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
bV9tb3VzZURvd25XYXNJblN1YmZyYW1lID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpJbmRleDogV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAJKHJldmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9w
YWdlL3dpbi9GcmFtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9p
ZCBjb21wdXRlUGFnZVJlY3RzRm9yRnJhbWUoRnJhbWUqIGZyYQogICAgIGlmICghZnJhbWUtPmRv
Y3VtZW50KCkgfHwgIWZyYW1lLT52aWV3KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJl
cigpKQogICAgICAgICByZXR1cm47CiAgCi0gICAgUmVuZGVyVmlldyogcm9vdCA9IHN0YXRpY19j
YXN0PFJlbmRlclZpZXcqPihmcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7CisgICAgUmVu
ZGVyVmlldyogcm9vdCA9IHRvUmVuZGVyVmlldyhmcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIo
KSk7CiAKICAgICBpZiAoIXJvb3QpIHsKICAgICAgICAgTE9HX0VSUk9SKCJkb2N1bWVudCB0byBi
ZSBwcmludGVkIGhhcyBubyByZW5kZXJlciIpOwpJbmRleDogV2ViQ29yZS9wYWdlL3d4L0V2ZW50
SGFuZGxlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uvd3gvRXZlbnRIYW5kbGVy
V3guY3BwCShyZXZpc2lvbiA0NjU0OCkKKysrIFdlYkNvcmUvcGFnZS93eC9FdmVudEhhbmRsZXJX
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OnBhc3NXaWRnZXRNb3VzZURvd25FdgogICAgIGlmICghZXZlbnQudGFyZ2V0Tm9kZSgpIHx8ICFl
dmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgfHwgIWV2ZW50LnRhcmdldE5vZGUoKS0+cmVu
ZGVyZXIoKS0+aXNXaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJl
dHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQq
PihldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkpLT53aWRnZXQoKSk7CisgICAgcmV0dXJu
IHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHRvUmVuZGVyV2lkZ2V0KGV2ZW50LnRhcmdldE5v
ZGUoKS0+cmVuZGVyZXIoKSktPndpZGdldCgpKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OnBh
c3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIsNyBAQCBzdGF0
aWMgQ2FjaGVkSW1hZ2UqIGdldENhY2hlZEltYWdlKEVsZW1lCiAgICAgaWYgKCFyZW5kZXJlciB8
fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZW5kZXJJ
bWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKTsKKyAgICBS
ZW5kZXJJbWFnZSogaW1hZ2UgPSB0b1JlbmRlckltYWdlKHJlbmRlcmVyKTsKICAgICBpZiAoaW1h
Z2UtPmNhY2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVk
KCkpCiAgICAgICAgIHJldHVybiBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAkocmV2aXNp
b24gNDY1NDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw4ICsxMDQsOCBAQCB2b2lkIFBhc3RlYm9hcmQ6
OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgQVNTRVJUKG5vZGUpOwogICAgIEFTU0VSVChu
b2RlLT5yZW5kZXJlcigpKTsKICAgICBBU1NFUlQobm9kZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgp
KTsKLSAgICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+
KG5vZGUtPnJlbmRlcmVyKCkpOwotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHN0YXRp
Y19jYXN0PENhY2hlZEltYWdlKj4ocmVuZGVyZXItPmNhY2hlZEltYWdlKCkpOworICAgIFJlbmRl
ckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2Uobm9kZS0+cmVuZGVyZXIoKSk7CisgICAg
Q2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gcmVuZGVyZXItPmNhY2hlZEltYWdlKCk7CiAgICAg
QVNTRVJUKGNhY2hlZEltYWdlKTsKICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1h
Z2UoKTsKICAgICBBU1NFUlQoaW1hZ2UpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVi
b2FyZEd0ay5jcHAJKHJldmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw4ICsxMzEsOCBAQCB2b2lkIFBh
c3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgR3RrQ2xpcGJvYXJkKiBjbGlw
Ym9hcmQgPSBndGtfY2xpcGJvYXJkX2dldF9mb3JfZGlzcGxheShnZGtfZGlzcGxheV9nZXRfZGVm
YXVsdCgpLCBHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCk7CiAKICAgICBBU1NFUlQobm9kZSAmJiBu
b2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSk7Ci0gICAgUmVu
ZGVySW1hZ2UqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihub2RlLT5yZW5k
ZXJlcigpKTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBzdGF0aWNfY2FzdDxDYWNo
ZWRJbWFnZSo+KHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpKTsKKyAgICBSZW5kZXJJbWFnZSogcmVu
ZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkpOworICAgIENhY2hlZEltYWdl
KiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwogICAgIEFTU0VSVChjYWNo
ZWRJbWFnZSk7CiAgICAgSW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlKCk7CiAgICAg
QVNTRVJUKGltYWdlKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQko
cmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZUltYWdlKE5vZGUqIG5vZGUsIAogCiAgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9k
ZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgpKTsKICAgICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0
b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkpOwotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJ
bWFnZSA9IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4ocmVuZGVyZXItPmNhY2hlZEltYWdlKCkp
OworICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgp
OwogICAgIEFTU0VSVChjYWNoZWRJbWFnZSk7CiAgICAgCiAgICAgaWYgKGNhY2hlZEltYWdlLT5l
cnJvck9jY3VycmVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAkocmV2
aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSw3IEBAIHN0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2Fj
aGVkSW1hZ2UoRWxlbWUKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNJbWFnZSgp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHN0YXRpY19j
YXN0PFJlbmRlckltYWdlKj4ocmVuZGVyZXIpOworICAgIFJlbmRlckltYWdlKiBpbWFnZSA9IHRv
UmVuZGVySW1hZ2UocmVuZGVyZXIpOwogICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2UoKSAmJiAh
aW1hZ2UtPmNhY2hlZEltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIGlt
YWdlLT5jYWNoZWRJbWFnZSgpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9h
cmRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQu
Y3BwCShyZXZpc2lvbiA0NjU0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6
d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKICAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5yZW5kZXJl
cigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSk7CiAKICNpZm5kZWYgUVRfTk9fQ0xJ
UEJPQVJECi0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVy
SW1hZ2UqPihub2RlLT5yZW5kZXJlcigpKS0+Y2FjaGVkSW1hZ2UoKTsKKyAgICBDYWNoZWRJbWFn
ZSogY2FjaGVkSW1hZ2UgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkpLT5jYWNoZWRJ
bWFnZSgpOwogICAgIEFTU0VSVChjYWNoZWRJbWFnZSk7CiAKICAgICBJbWFnZSogaW1hZ2UgPSBj
YWNoZWRJbWFnZS0+aW1hZ2UoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2Fy
ZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2lu
LmNwcAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDMsNyArNjQzLDcgQEAgc3RhdGljIENhY2hlZElt
YWdlKiBnZXRDYWNoZWRJbWFnZShFbGVtZQogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVy
LT5pc0ltYWdlKCkpIAogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBSZW5kZXJJbWFnZSog
aW1hZ2UgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKTsKKyAgICBSZW5kZXJJ
bWFnZSogaW1hZ2UgPSB0b1JlbmRlckltYWdlKHJlbmRlcmVyKTsKICAgICBpZiAoaW1hZ2UtPmNh
Y2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpCiAg
ICAgICAgIHJldHVybiBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKIApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9uIDQ2NTQ4KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsxODgs
OCBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVyCiB2b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYp
CiB7CiAgICAgQVNTRVJUKG5vZGUgJiYgbm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJl
cigpLT5pc0ltYWdlKCkpOwotICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHN0YXRpY19jYXN0
PFJlbmRlckltYWdlKj4obm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlID0gc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihyZW5kZXJlci0+Y2FjaGVkSW1hZ2Uo
KSk7CisgICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShub2RlLT5yZW5k
ZXJlcigpKTsKKyAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSByZW5kZXJlci0+Y2FjaGVk
SW1hZ2UoKTsKICAgICBBU1NFUlQoY2FjaGVkSW1hZ2UpOwogICAgIEltYWdlKiBpbWFnZSA9IGNh
Y2hlZEltYWdlLT5pbWFnZSgpOwogICAgIEFTU0VSVChpbWFnZSk7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVCb3guaAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3gu
aAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogYm94TW9kZWxPYmplY3QoKSBjb25zdAogICAgIHsgCiAgICAgICAgIGlm
ICghbV9yZW5kZXJlci0+aXNUZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVuZGVyQm94TW9kZWxPYmplY3QqPihtX3JlbmRlcmVyKTsKKyAgICAgICAgICAgIHJldHVybiB0
b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVuZGVyZXIpOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gNDY1NDgp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTgsNyArMjU4LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyhSZW5kZXJC
bAogICAgIC8vIFdlIGhhdmUgYmVlbiByZXBhcmVudGVkIGFuZCBhcmUgbm93IHVuZGVyIHRoZSBm
cm9tQmxvY2suICBXZSBuZWVkCiAgICAgLy8gdG8gd2FsayB1cCBvdXIgaW5saW5lIHBhcmVudCBj
aGFpbiB1bnRpbCB3ZSBoaXQgdGhlIGNvbnRhaW5pbmcgYmxvY2suCiAgICAgLy8gT25jZSB3ZSBo
aXQgdGhlIGNvbnRhaW5pbmcgYmxvY2sgd2UncmUgZG9uZS4KLSAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogY3VyciA9IHN0YXRpY19jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0Kj4ocGFyZW50KCkp
OworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjdXJyID0gdG9SZW5kZXJCb3hNb2RlbE9iamVj
dChwYXJlbnQoKSk7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGN1cnJDaGlsZCA9IHRoaXM7
CiAgICAgCiAgICAgLy8gRklYTUU6IEJlY2F1c2Ugc3BsaXR0aW5nIGlzIE8obl4yKSBhcyB0YWdz
IG5lc3QgcGF0aG9sb2dpY2FsbHksIHdlIGNhcCB0aGUgZGVwdGggYXQgd2hpY2ggd2UncmUgd2ls
bGluZyB0byBjbG9uZS4KQEAgLTMwMiw3ICszMDIsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3Bs
aXRJbmxpbmVzKFJlbmRlckJsCiAgICAgICAgIAogICAgICAgICAvLyBLZWVwIHdhbGtpbmcgdXAg
dGhlIGNoYWluLgogICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyOwotICAgICAgICBjdXJyID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3QqPihjdXJyLT5wYXJlbnQoKSk7CisgICAgICAg
IGN1cnIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGN1cnItPnBhcmVudCgpKTsKICAgICAgICAg
c3BsaXREZXB0aCsrOwogICAgIH0KIApAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjphZGRDaGlsZFRvQ29udGludWF0aW8KICAgICBBU1NFUlQoIWJlZm9yZUNoaWxkIHx8IGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKS0+aXNSZW5kZXJCbG9jaygpIHx8IGJlZm9yZUNoaWxkLT5wYXJl
bnQoKS0+aXNSZW5kZXJJbmxpbmUoKSk7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJlZm9y
ZUNoaWxkUGFyZW50ID0gMDsKICAgICBpZiAoYmVmb3JlQ2hpbGQpCi0gICAgICAgIGJlZm9yZUNo
aWxkUGFyZW50ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3QqPihiZWZvcmVDaGls
ZC0+cGFyZW50KCkpOworICAgICAgICBiZWZvcmVDaGlsZFBhcmVudCA9IHRvUmVuZGVyQm94TW9k
ZWxPYmplY3QoYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGNvbnQgPSBuZXh0Q29udGludWF0aW9uKGZsb3cpOwogICAgICAg
ICBpZiAoY29udCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDcsNyArNjA3LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnJlbmRlcmVyQ29udGVudAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZUltYWdlQ29udGVudHMoKQogewogICAgIEFTU0VSVChyZW5kZXJlcigpLT5pc0ltYWdlKCkpOwot
ICAgIFJlbmRlckltYWdlKiBpbWFnZVJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2Uq
PihyZW5kZXJlcigpKTsKKyAgICBSZW5kZXJJbWFnZSogaW1hZ2VSZW5kZXJlciA9IHRvUmVuZGVy
SW1hZ2UocmVuZGVyZXIoKSk7CiAKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFn
ZVJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwogICAgIGlmICghY2FjaGVkSW1hZ2UpCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuaAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksMjEgQEAgcHJp
dmF0ZToKICAgICBpbnQgbV9yZWZDb3VudDsKIH07CiAKK2lubGluZSBSZW5kZXJXaWRnZXQqIHRv
UmVuZGVyV2lkZ2V0KFJlbmRlck9iamVjdCogbykKK3sKKyAgICBBU1NFUlQoIW8gfHwgby0+aXNX
aWRnZXQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KG8pOworfQor
CitpbmxpbmUgY29uc3QgUmVuZGVyV2lkZ2V0KiB0b1JlbmRlcldpZGdldChjb25zdCBSZW5kZXJP
YmplY3QqIG8pCit7CisgICAgQVNTRVJUKCFvIHx8IG8tPmlzV2lkZ2V0KCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJXaWRnZXQqPihvKTsKK30KKworLy8gVGhpcyB3aWxs
IGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlcldp
ZGdldChjb25zdCBSZW5kZXJXaWRnZXQqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gUmVuZGVyV2lkZ2V0X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAkocmV2aXNpb24gNDY1NDgpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw3ICs2OSw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbElubmVyQmwKICAg
ICAvLyBNdWx0aWxpbmUgdGV4dCBjb250cm9scyBoYXZlIHRoZSBzY3JvbGwgb24gc2hhZG93QW5j
ZXN0b3JOb2RlLCBzbyB3ZSBuZWVkIHRvIHRha2UgdGhhdAogICAgIC8vIGludG8gYWNjb3VudCBo
ZXJlLgogICAgIGlmIChtX211bHRpTGluZSkgewotICAgICAgICBSZW5kZXJUZXh0Q29udHJvbCog
cmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbCo+KG5vZGUoKS0+c2hhZG93
QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCkpOworICAgICAgICBSZW5kZXJUZXh0Q29udHJvbCog
cmVuZGVyZXIgPSB0b1JlbmRlclRleHRDb250cm9sKG5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2Rl
KCktPnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAocmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgp
KQogICAgICAgICAgICAgcmVuZGVyZXItPmxheWVyKCktPmFkZFNjcm9sbGVkQ29udGVudE9mZnNl
dChjb250ZW50c1gsIGNvbnRlbnRzWSk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33821</attachid>
            <date>2009-07-30 13:20:25 -0700</date>
            <delta_ts>2009-07-31 17:52:35 -0700</delta_ts>
            <desc>Next step: Includes toRenderTable*</desc>
            <filename>RenderCheckPatch5.txt</filename>
            <type>text/plain</type>
            <size>67943</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjU5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAwIEBACisyMDA5LTA3LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2Ug
Y2hlY2tlZCBjYXN0cyBmb3IgcmVuZGVyIHRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTIyCisKKyAgICAgICAgTmV4dCBzdGVwOiBBZGQgY2Fz
dHMgZm9yIGFsbCB0aGUgUmVuZGVyVGFibGUgY2xhc3NlcyBhbmQgdXNlIHRoZW0gZXZlcnl3aGVy
ZS4KKworICAgICAgICBBbHNvIGFkZGVkIGEgZmV3IHVzZXMgaW4gcGxhY2VzIHRoYXQgd2VyZSBz
dGlsbCB1c2luZyBzdGF0aWNfY2FzdC4KKyAgICAgICAgQWxzbyBtYWRlIHNvbWUgdmlydHVhbCBt
ZW1iZXIgZnVuY3Rpb25zIHByaXZhdGUuCisgICAgICAgIEFsc28gY2hhbmdlZCBSZW5kZXJUYWJs
ZTo6bV90YWJsZUxheW91dCB0byB1c2UgT3duUHRyLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVRhYmxlOjppc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmNlbGxGb3JDb2x1bW5BbmRSb3cpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpwYXJlbnRUYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJbmRleFJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmNvbHVtbkluZGV4UmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6dGl0bGVVSUVsZW1lbnQpOgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbjo6aGVhZGVyT2JqZWN0KToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OnBhcmVudFRhYmxlKToKKyAgICAgICAg
KiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6CisgICAgICAgICogZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkRW1pdFRhYkJlZm9yZU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkRW1pdE5ld2xpbmVzQmVmb3JlQW5kQWZ0ZXJO
b2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUYWJsZUNvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWFyY2hGb3JMYWJlbHNB
Ym92ZUNlbGwpOgorICAgICAgICAqIHBhZ2UvbWFjL0ZyYW1lTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWU6OnNlYXJjaEZvck5TTGFiZWxzQWJvdmVDZWxsKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9UYWJsZUxh
eW91dDo6cmVjYWxjQ29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9UYWJsZUxheW91dDo6
ZnVsbFJlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRTY2FsZUNvbHVtbnMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNhbGNQcmVm
V2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6Y2FsY1BlcmNlbnRhZ2VIZWlnaHQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojph
ZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9j
ayk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbGxhcHNlZEJvdHRvbUJvcmRlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlQ29sOjp0YWJsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93OjphZGRDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlUm93OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Omxvd2VzdFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cmlnaHRtb3N0UG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpsZWZ0bW9zdFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpyZWNhbGNDZWxscyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRleHRSdW4pOgorICAgICAgICBVc2Ug
Y2hlY2tlZCBjYXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6c3R5bGVEaWRDaGFuZ2UpOiBVcGRhdGVkIHRv
IHVzZSBPd25QdHIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YWRkQ2hpbGQpOiBV
c2UgY2hlY2tlZCBjYXN0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmxheW91dCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNldENlbGxXaWR0aHMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpwYWludE9iamVjdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNwbGl0Q29sdW1uKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YXBwZW5kQ29sdW1uKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29sRWxlbWVudCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJCb3R0b20pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlOjpvdXRlckJvcmRlckxlZnQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlOjpvdXRlckJvcmRlclJpZ2h0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6c2VjdGlvbkFib3ZlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZTo6c2VjdGlvbkJlbG93KTogRGl0dG8uCisKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGUuaDogQWRkZWQgY2hlY2tlZCBjYXN0LiBNYWRlIHZpcnR1YWwK
KyAgICAgICAgZnVuY3Rpb25zIHByaXZhdGUuIENoYW5nZWQgbV90YWJsZUxheW91dCB0byBiZSBh
IE93blB0ci4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaDogQWRkZWQg
Y2hlY2tlZCBjYXN0LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oOiBEaXR0
by4gTWFkZSB2aXJ0dWFsIGZ1bmN0aW9ucyBwcml2YXRlLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZVJvdy5oOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmg6IERpdHRvLgorCiAyMDA5LTA3LTMwICBEZWFuIE1jTmFtZWUgIDxkZWFubUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDog
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHJldmlzaW9u
IDQ2NTk2KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6
OmlzVGFibGVFeHBvc2FibAogICAgIGlmIChhcmlhUm9sZSAhPSBVbmtub3duUm9sZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHN0YXRpY19j
YXN0PFJlbmRlclRhYmxlKj4obV9yZW5kZXJlcik7CisgICAgUmVuZGVyVGFibGUqIHRhYmxlID0g
dG9SZW5kZXJUYWJsZShtX3JlbmRlcmVyKTsKICAgICAKICAgICAvLyB0aGlzIGVtcGxveXMgYSBo
ZXVyaXN0aWMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgdGFibGUgc2hvdWxkIGFwcGVhci4gCiAgICAg
Ly8gT25seSAiZGF0YSIgdGFibGVzIHNob3VsZCBiZSBleHBvc2VkIGFzIHRhYmxlcy4gCkBAIC0y
MTIsNyArMjEyLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFkZENoaWxkcmVuKCkKICAg
ICBpZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPmlzVGFibGUoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIFJlbmRlclRhYmxlKiB0YWJsZSA9IHN0YXRpY19jYXN0PFJlbmRlclRh
YmxlKj4obV9yZW5kZXJlcik7CisgICAgUmVuZGVyVGFibGUqIHRhYmxlID0gdG9SZW5kZXJUYWJs
ZShtX3JlbmRlcmVyKTsKICAgICBBWE9iamVjdENhY2hlKiBheENhY2hlID0gbV9yZW5kZXJlci0+
ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpOwogCiAgICAgLy8gZ28gdGhyb3VnaCBhbGwgdGhl
IGF2YWlsYWJsZSBzZWN0aW9ucyB0byBwdWxsIG91dCB0aGUgcm93cwpAQCAtMzc0LDcgKzM3NCw3
IEBAIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqIEFjY2Vzc2liaWxpdHlUYWIKICAgICBpZiAoIWhh
c0NoaWxkcmVuKCkpCiAgICAgICAgIGFkZENoaWxkcmVuKCk7CiAgICAgCi0gICAgUmVuZGVyVGFi
bGUqIHRhYmxlID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihtX3JlbmRlcmVyKTsKKyAgICBS
ZW5kZXJUYWJsZSogdGFibGUgPSB0b1JlbmRlclRhYmxlKG1fcmVuZGVyZXIpOwogICAgIFJlbmRl
clRhYmxlU2VjdGlvbiogdGFibGVTZWN0aW9uID0gdGFibGUtPmhlYWRlcigpOwogICAgIGlmICgh
dGFibGVTZWN0aW9uKQogICAgICAgICB0YWJsZVNlY3Rpb24gPSB0YWJsZS0+Zmlyc3RCb2R5KCk7
CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNl
bGwuY3BwCShyZXZpc2lvbiA0NjU5NikKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5VGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVDCiAgICAgaWYgKCFtX3JlbmRlcmVy
IHx8ICFtX3JlbmRlcmVyLT5pc1RhYmxlQ2VsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoc3RhdGljX2Nhc3Q8
UmVuZGVyVGFibGVDZWxsKj4obV9yZW5kZXJlciktPnRhYmxlKCkpOworICAgIHJldHVybiBheE9i
amVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHRvUmVuZGVyVGFibGVDZWxsKG1fcmVuZGVyZXIpLT50
YWJsZSgpKTsKIH0KICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6aXNUYWJsZUNl
bGwoKSBjb25zdApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6
OnJvd0luZGV4UmFuCiAgICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5pc1RhYmxl
Q2VsbCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgUmVuZGVyVGFibGVDZWxsKiByZW5k
ZXJDZWxsID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4obV9yZW5kZXJlcik7CisgICAg
UmVuZGVyVGFibGVDZWxsKiByZW5kZXJDZWxsID0gdG9SZW5kZXJUYWJsZUNlbGwobV9yZW5kZXJl
cik7CiAgICAgcm93UmFuZ2UuZmlyc3QgPSByZW5kZXJDZWxsLT5yb3coKTsKICAgICByb3dSYW5n
ZS5zZWNvbmQgPSByZW5kZXJDZWxsLT5yb3dTcGFuKCk7CiAgICAgCkBAIC0xMjIsNyArMTIyLDcg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjb2x1bW5JbmRleAogICAgIGlmICghbV9y
ZW5kZXJlciB8fCAhbV9yZW5kZXJlci0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIFJlbmRlclRhYmxlQ2VsbCogcmVuZGVyQ2VsbCA9IHN0YXRpY19jYXN0PFJlbmRl
clRhYmxlQ2VsbCo+KG1fcmVuZGVyZXIpOworICAgIFJlbmRlclRhYmxlQ2VsbCogcmVuZGVyQ2Vs
bCA9IHRvUmVuZGVyVGFibGVDZWxsKG1fcmVuZGVyZXIpOwogICAgIGNvbHVtblJhbmdlLmZpcnN0
ID0gcmVuZGVyQ2VsbC0+Y29sKCk7CiAgICAgY29sdW1uUmFuZ2Uuc2Vjb25kID0gcmVuZGVyQ2Vs
bC0+Y29sU3BhbigpOyAgICAKIH0KQEAgLTE0MSw3ICsxNDEsNyBAQCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVDCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFt
ZSh0aFRhZykpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIFJlbmRlclRhYmxlQ2VsbCog
cmVuZGVyQ2VsbCA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ2VsbCo+KG1fcmVuZGVyZXIpOwor
ICAgIFJlbmRlclRhYmxlQ2VsbCogcmVuZGVyQ2VsbCA9IHRvUmVuZGVyVGFibGVDZWxsKG1fcmVu
ZGVyZXIpOwogCiAgICAgLy8gSWYgdGhpcyBjZWxsIGlzIGluIHRoZSBmaXJzdCBjb2x1bW4sIHRo
ZXJlIGlzIG5vIG5lZWQgdG8gY29udGludWUuCiAgICAgaW50IGNvbCA9IHJlbmRlckNlbGwtPmNv
bCgpOwpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVt
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlU
YWJsZUNvbHVtbi5jcHAJKHJldmlzaW9uIDQ2NTk2KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsx
MDUsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5VGFibGVDCiAgICAgaWYg
KCFyZW5kZXJlci0+aXNUYWJsZSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBSZW5k
ZXJUYWJsZSogdGFibGUgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHJlbmRlcmVyKTsKKyAg
ICBSZW5kZXJUYWJsZSogdGFibGUgPSB0b1JlbmRlclRhYmxlKHJlbmRlcmVyKTsKICAgICAKICAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoZWFkZXJPYmplY3QgPSAwOwogICAgIApJbmRleDogV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAJKHJldmlz
aW9uIDQ2NTk2KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eVRhYmxlUgogICAgIGlmICghbV9yZW5kZXJlciB8fCAhbV9yZW5kZXJl
ci0+aXNUYWJsZVJvdygpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gYXhP
YmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVJvdyo+KG1f
cmVuZGVyZXIpLT50YWJsZSgpKTsKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNy
ZWF0ZSh0b1JlbmRlclRhYmxlUm93KG1fcmVuZGVyZXIpLT50YWJsZSgpKTsKIH0KICAgICAKIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6aGVhZGVyT2JqZWN0KCkK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDQ2NTk2KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNyArMzY0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpyZW1vdmVOb2RlKAogICAgICAgICAvLyBtYWtlIHN1cmUgZW1wdHkgY2VsbCBoYXMg
c29tZSBoZWlnaHQKICAgICAgICAgdXBkYXRlTGF5b3V0KCk7CiAgICAgICAgIFJlbmRlck9iamVj
dCAqciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmIChyICYmIHItPmlzVGFibGVDZWxs
KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4ociktPmNvbnRlbnRIZWlnaHQoKSA8
PSAwKQorICAgICAgICBpZiAociAmJiByLT5pc1RhYmxlQ2VsbCgpICYmIHRvUmVuZGVyVGFibGVD
ZWxsKHIpLT5jb250ZW50SGVpZ2h0KCkgPD0gMCkKICAgICAgICAgICAgIGluc2VydEJsb2NrUGxh
Y2Vob2xkZXIoUG9zaXRpb24obm9kZSwgMCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDQ2NTk2KQorKysgV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5OSw3ICs1OTksNyBA
QCBzdGF0aWMgYm9vbCBzaG91bGRFbWl0VGFiQmVmb3JlTm9kZShOb2RlCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICAvLyBXYW50IGEgdGFiIGJlZm9yZSBldmVyeSBjZWxsIG90aGVy
IHRoYW4gdGhlIGZpcnN0IG9uZQotICAgIFJlbmRlclRhYmxlQ2VsbCogcmMgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJUYWJsZUNlbGwqPihyKTsKKyAgICBSZW5kZXJUYWJsZUNlbGwqIHJjID0gdG9SZW5k
ZXJUYWJsZUNlbGwocik7CiAgICAgUmVuZGVyVGFibGUqIHQgPSByYy0+dGFibGUoKTsKICAgICBy
ZXR1cm4gdCAmJiAodC0+Y2VsbEJlZm9yZShyYykgfHwgdC0+Y2VsbEFib3ZlKHJjKSk7CiB9CkBA
IC02NDksNyArNjQ5LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkRW1pdE5ld2xpbmVzQmVmb3JlQW5k
QQogICAgIC8vIE5lZWQgdG8gbWFrZSBhbiBleGNlcHRpb24gZm9yIHRhYmxlIHJvdyBlbGVtZW50
cywgYmVjYXVzZSB0aGV5IGFyZSBuZWl0aGVyCiAgICAgLy8gImlubGluZSIgb3IgIlJlbmRlckJs
b2NrIiwgYnV0IHdlIHdhbnQgbmV3bGluZXMgZm9yIHRoZW0uCiAgICAgaWYgKHItPmlzVGFibGVS
b3coKSkgewotICAgICAgICBSZW5kZXJUYWJsZSogdCA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxl
Um93Kj4ociktPnRhYmxlKCk7CisgICAgICAgIFJlbmRlclRhYmxlKiB0ID0gdG9SZW5kZXJUYWJs
ZVJvdyhyKS0+dGFibGUoKTsKICAgICAgICAgaWYgKHQgJiYgIXQtPmlzSW5saW5lKCkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxl
Q2VsbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxs
RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2NTk2KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNl
bGxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTIgKzkyLDEyIEBAIHZvaWQgSFRN
TFRhYmxlQ2VsbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXQKICAgICAgICAgclNwYW4gPSAhYXR0ci0+
aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAxOwogICAgICAgICByU3BhbiA9IG1h
eCgxLCBtaW4oclNwYW4sIG1heFJvd3NwYW4pKTsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYg
cmVuZGVyZXIoKS0+aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clRhYmxlQ2VsbCo+KHJlbmRlcmVyKCkpLT51cGRhdGVGcm9tRWxlbWVudCgpOworICAgICAgICAg
ICAgdG9SZW5kZXJUYWJsZUNlbGwocmVuZGVyZXIoKSktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY29sc3BhbkF0dHIpIHsKICAgICAgICAgY1Nw
YW4gPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAxOwogICAgICAg
ICBjU3BhbiA9IG1heCgxLCBjU3Bhbik7CiAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRl
cmVyKCktPmlzVGFibGVDZWxsKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUYWJs
ZUNlbGwqPihyZW5kZXJlcigpKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKKyAgICAgICAgICAgIHRv
UmVuZGVyVGFibGVDZWxsKHJlbmRlcmVyKCkpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5vd3JhcEF0dHIpIHsKICAgICAgICAgaWYgKCFhdHRy
LT5pc051bGwoKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5
V2hpdGVTcGFjZSwgQ1NTVmFsdWVXZWJraXROb3dyYXApOwpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUNvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFi
bGVDb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDY1OTYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRh
YmxlQ29sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEyICs3OSwxMiBAQCB2b2lk
IEhUTUxUYWJsZUNvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBzcGFuQXR0cikgewogICAgICAgICBfc3BhbiA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHIt
PnZhbHVlKCkudG9JbnQoKSA6IDE7CiAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPmlzVGFibGVDb2woKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ29s
Kj4ocmVuZGVyZXIoKSktPnVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgICAgICAgICByZW5kZXJl
cigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IHdpZHRoQXR0cikgewogICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTUHJvcGVydHlXaWR0aCwgYXR0ci0+dmFs
dWUoKSk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RhYmxl
Q29sKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNvbCogY29sID0gc3RhdGljX2Nh
c3Q8UmVuZGVyVGFibGVDb2wqPihyZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJU
YWJsZUNvbCogY29sID0gdG9SZW5kZXJUYWJsZUNvbChyZW5kZXJlcigpKTsKICAgICAgICAgICAg
ICAgICBpbnQgbmV3V2lkdGggPSB3aWR0aCgpLnRvSW50KCk7CiAgICAgICAgICAgICAgICAgaWYg
KG5ld1dpZHRoICE9IGNvbC0+d2lkdGgoKSkKICAgICAgICAgICAgICAgICAgICAgY29sLT5zZXRO
ZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gNDY1
OTYpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsMTAg
KzM4NywxMCBAQCBzdGF0aWMgUmVndWxhckV4cHJlc3Npb24qIGNyZWF0ZVJlZ0V4cEZvCiAKIFN0
cmluZyBGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKFJlZ3VsYXJFeHByZXNzaW9uKiBy
ZWdFeHAsIEhUTUxUYWJsZUNlbGxFbGVtZW50KiBjZWxsKQogewotICAgIFJlbmRlclRhYmxlQ2Vs
bCogY2VsbFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oY2VsbC0+cmVu
ZGVyZXIoKSk7CisgICAgUmVuZGVyT2JqZWN0KiBjZWxsUmVuZGVyZXIgPSBjZWxsLT5yZW5kZXJl
cigpOwogCiAgICAgaWYgKGNlbGxSZW5kZXJlciAmJiBjZWxsUmVuZGVyZXItPmlzVGFibGVDZWxs
KCkpIHsKLSAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsQWJvdmVSZW5kZXJlciA9IGNlbGxS
ZW5kZXJlci0+dGFibGUoKS0+Y2VsbEFib3ZlKGNlbGxSZW5kZXJlcik7CisgICAgICAgIFJlbmRl
clRhYmxlQ2VsbCogY2VsbEFib3ZlUmVuZGVyZXIgPSB0b1JlbmRlclRhYmxlQ2VsbChjZWxsUmVu
ZGVyZXIpLT50YWJsZSgpLT5jZWxsQWJvdmUodG9SZW5kZXJUYWJsZUNlbGwoY2VsbFJlbmRlcmVy
KSk7CiAKICAgICAgICAgaWYgKGNlbGxBYm92ZVJlbmRlcmVyKSB7CiAgICAgICAgICAgICBIVE1M
VGFibGVDZWxsRWxlbWVudCogYWJvdmVDZWxsID0KSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRnJh
bWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkocmV2
aXNpb24gNDY1OTYpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDcsMTAgKzE0NywxMCBAQCBzdGF0aWMgUmVndWxhckV4cHJlc3Npb24qIHJlZ0V4
cEZvckxhYmVsCiAKIE5TU3RyaW5nKiBGcmFtZTo6c2VhcmNoRm9yTlNMYWJlbHNBYm92ZUNlbGwo
UmVndWxhckV4cHJlc3Npb24qIHJlZ0V4cCwgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGNlbGwpCiB7
Ci0gICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsUmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJU
YWJsZUNlbGwqPihjZWxsLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJPYmplY3QqIGNlbGxSZW5k
ZXJlciA9IGNlbGwtPnJlbmRlcmVyKCk7CiAKICAgICBpZiAoY2VsbFJlbmRlcmVyICYmIGNlbGxS
ZW5kZXJlci0+aXNUYWJsZUNlbGwoKSkgewotICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGxB
Ym92ZVJlbmRlcmVyID0gY2VsbFJlbmRlcmVyLT50YWJsZSgpLT5jZWxsQWJvdmUoY2VsbFJlbmRl
cmVyKTsKKyAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsQWJvdmVSZW5kZXJlciA9IHRvUmVu
ZGVyVGFibGVDZWxsKGNlbGxSZW5kZXJlciktPnRhYmxlKCktPmNlbGxBYm92ZSh0b1JlbmRlclRh
YmxlQ2VsbChjZWxsUmVuZGVyZXIpKTsKIAogICAgICAgICBpZiAoY2VsbEFib3ZlUmVuZGVyZXIp
IHsKICAgICAgICAgICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50KiBhYm92ZUNlbGwgPQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiA0NjU5NikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDkgKzYwLDkgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbihpbnQgZQogCiAg
ICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNvbCgpKQotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDb2wqPihjaGlsZCktPmNhbGNQcmVmV2lk
dGhzKCk7CisgICAgICAgICAgICB0b1JlbmRlclRhYmxlQ29sKGNoaWxkKS0+Y2FsY1ByZWZXaWR0
aHMoKTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAg
ICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRh
YmxlU2VjdGlvbio+KGNoaWxkKTsKKyAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2Vj
dGlvbiA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKTsKICAgICAgICAgICAgIGludCBudW1S
b3dzID0gc2VjdGlvbi0+bnVtUm93cygpOwogICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBs
YXN0ID0gMDsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUm93czsgaSsrKSB7
CkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBBdXRvVGFibGVMYXlvdXQ6OmZ1bGxSZWNhbGMoKQog
ICAgIGludCBjQ29sID0gMDsKICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgaWYgKGNoaWxk
LT5pc1RhYmxlQ29sKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclRhYmxlQ29sICpjb2wgPSBzdGF0
aWNfY2FzdDxSZW5kZXJUYWJsZUNvbCo+KGNoaWxkKTsKKyAgICAgICAgICAgIFJlbmRlclRhYmxl
Q29sICpjb2wgPSB0b1JlbmRlclRhYmxlQ29sKGNoaWxkKTsKICAgICAgICAgICAgIGludCBzcGFu
ID0gY29sLT5zcGFuKCk7CiAgICAgICAgICAgICBpZiAoY29sLT5maXJzdENoaWxkKCkpIHsKICAg
ICAgICAgICAgICAgICBncnBXaWR0aCA9IGNvbC0+c3R5bGUoKS0+d2lkdGgoKTsKQEAgLTIyNyw3
ICsyMjcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRTY2FsZUNvbHVtbnMoUmVuZGVyVGFiCiAgICAg
ICAgICAgICAgICAgaWYgKHR3LmlzUGVyY2VudCgpKQogICAgICAgICAgICAgICAgICAgICBzY2Fs
ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNlbGwqPihjYik7
CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IHRvUmVuZGVyVGFi
bGVDZWxsKGNiKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmNvbFNwYW4oKSA+IDEg
fHwgY2VsbC0+dGFibGUoKS0+c3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjYWxlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiA0NjU5NikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Myw3ICs5Myw3IEBAIGludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShp
bnQKICAgICBMZW5ndGggZ3JwV2lkdGg7CiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIGlm
IChjaGlsZC0+aXNUYWJsZUNvbCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJUYWJsZUNvbCogY29s
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDb2wqPihjaGlsZCk7CisgICAgICAgICAgICBSZW5k
ZXJUYWJsZUNvbCogY29sID0gdG9SZW5kZXJUYWJsZUNvbChjaGlsZCk7CiAgICAgICAgICAgICBp
ZiAoY29sLT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICAgICAgZ3JwV2lkdGggPSBjb2wtPnN0
eWxlKCktPndpZHRoKCk7CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTEyOCw3ICsxMjgsNyBAQCBp
bnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXkoaW50CiAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRFZmZlY3RpdmVDb2x1bW4rKzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNvbCo+KGNoaWxkKS0+
Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICAgICAgICAgIHRvUmVuZGVyVGFibGVDb2woY2hpbGQpLT5j
YWxjUHJlZldpZHRocygpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGJyZWFrOwogCkBA
IC0xNTYsNyArMTU2LDcgQEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGlu
dAogICAgICAgICBjaGlsZCA9IGZpcnN0Um93LT5maXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxl
IChjaGlsZCkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ2VsbCgpKSB7Ci0gICAg
ICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFi
bGVDZWxsKj4oY2hpbGQpOworICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9
IHRvUmVuZGVyVGFibGVDZWxsKGNoaWxkKTsKICAgICAgICAgICAgICAgICBpZiAoY2VsbC0+cHJl
ZldpZHRoc0RpcnR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGNlbGwtPmNhbGNQcmVmV2lkdGhz
KCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDQ2NTk2KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTIxLDcgKzM5MjEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjUHJlZldpZHRocygpCiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoaXNUYWJsZUNlbGwoKSkgewotICAgICAgICAgICAgTGVuZ3Ro
IHcgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJUYWJsZUNlbGwqPih0aGlzKS0+c3R5bGVPckNv
bFdpZHRoKCk7CisgICAgICAgICAgICBMZW5ndGggdyA9IHRvUmVuZGVyVGFibGVDZWxsKHRoaXMp
LT5zdHlsZU9yQ29sV2lkdGgoKTsKICAgICAgICAgICAgIGlmICh3LmlzRml4ZWQoKSAmJiB3LnZh
bHVlKCkgPiAwKQogICAgICAgICAgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWluUHJl
ZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHcudmFsdWUoKSkpOwogICAgICAgICB9CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDQ2NTk2KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5OSw3ICsxNDk5LDcgQEAg
aW50IFJlbmRlckJveDo6Y2FsY1BlcmNlbnRhZ2VIZWlnaHQoY29ucwogICAgICAgICAgICAgLy8g
bm8gc2l6ZSBhbmQgYWxsb3cgdGhlIGZsZXhpbmcgb2YgdGhlIHRhYmxlIG9yIHRoZSBjZWxsIHRv
IGl0cyBzcGVjaWZpZWQgaGVpZ2h0IHRvIGNhdXNlIHVzCiAgICAgICAgICAgICAvLyB0byBncm93
IHRvIGZpbGwgdGhlIHNwYWNlLiAgVGhpcyBjb3VsZCBlbmQgdXAgYmVpbmcgd3JvbmcgaW4gc29t
ZSBjYXNlcywgYnV0IGl0IGlzCiAgICAgICAgICAgICAvLyBwcmVmZXJhYmxlIHRvIHRoZSBhbHRl
cm5hdGl2ZSAoc2l6aW5nIGludHJpbnNpY2FsbHkgYW5kIG1ha2luZyB0aGUgcm93IGVuZCB1cCB0
b28gYmlnKS4KLSAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0
PFJlbmRlclRhYmxlQ2VsbCo+KGNiKTsKKyAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2Vs
bCA9IHRvUmVuZGVyVGFibGVDZWxsKGNiKTsKICAgICAgICAgICAgIGlmIChzY3JvbGxzT3ZlcmZs
b3dZKCkgJiYgKCFjZWxsLT5zdHlsZSgpLT5oZWlnaHQoKS5pc0F1dG8oKSB8fCAhY2VsbC0+dGFi
bGUoKS0+c3R5bGUoKS0+aGVpZ2h0KCkuaXNBdXRvKCkpKQogICAgICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiA0NjU5NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NSw3ICsyODUsNyBAQCB2b2lkIFJlbmRlck9iamVj
dDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0CiAgICAgICAgIFJlbmRlclRhYmxlKiB0YWJsZTsKICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBhZnRlckNoaWxkID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGls
ZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBjaGlsZHJlbi0+bGFzdENoaWxkKCk7CiAgICAgICAgIGlm
IChhZnRlckNoaWxkICYmIGFmdGVyQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgYWZ0ZXJDaGlsZC0+
aXNUYWJsZSgpKQotICAgICAgICAgICAgdGFibGUgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+
KGFmdGVyQ2hpbGQpOworICAgICAgICAgICAgdGFibGUgPSB0b1JlbmRlclRhYmxlKGFmdGVyQ2hp
bGQpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHRhYmxlID0gbmV3IChyZW5kZXJBcmVu
YSgpKSBSZW5kZXJUYWJsZShkb2N1bWVudCgpIC8qIGlzIGFub255bW91cyAqLyk7CiAgICAgICAg
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgp
OwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRMYXllck5lZWRzRnVs
bFJlcGEKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9jaygpIGNvbnN0
CiB7CiAgICAgaWYgKGlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyVGFibGVD
ZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyVGFibGVDZWxsKj4odGhpcyk7Cisg
ICAgICAgIGNvbnN0IFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IHRvUmVuZGVyVGFibGVDZWxsKHRo
aXMpOwogICAgICAgICBpZiAocGFyZW50KCkgJiYgY2VsbC0+c2VjdGlvbigpKQogICAgICAgICAg
ICAgcmV0dXJuIGNlbGwtPnRhYmxlKCk7CiAgICAgICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gNDY1OTYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDExICs2Myw2IEBAIFJlbmRl
clRhYmxlOjpSZW5kZXJUYWJsZShOb2RlKiBub2RlKQogICAgIG1fY29sdW1ucy5maWxsKENvbHVt
blN0cnVjdCgpLCAxKTsKIH0KIAotUmVuZGVyVGFibGU6On5SZW5kZXJUYWJsZSgpCi17Ci0gICAg
ZGVsZXRlIG1fdGFibGVMYXlvdXQ7Ci19Ci0KIHZvaWQgUmVuZGVyVGFibGU6OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7
CiAgICAgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKQEAgLTgw
LDE0ICs3NSwxMiBAQCB2b2lkIFJlbmRlclRhYmxlOjpzdHlsZURpZENoYW5nZShTdHlsZURpCiAg
ICAgbV9jb2x1bW5Qb3NbMF0gPSBtX2hTcGFjaW5nOwogCiAgICAgaWYgKCFtX3RhYmxlTGF5b3V0
IHx8IHN0eWxlKCktPnRhYmxlTGF5b3V0KCkgIT0gb2xkVGFibGVMYXlvdXQpIHsKLSAgICAgICAg
ZGVsZXRlIG1fdGFibGVMYXlvdXQ7Ci0KICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBDU1My
IHNwZWMsIHlvdSBvbmx5IHVzZSBmaXhlZCB0YWJsZSBsYXlvdXQgaWYgYW4KICAgICAgICAgLy8g
ZXhwbGljaXQgd2lkdGggaXMgc3BlY2lmaWVkIG9uIHRoZSB0YWJsZS4gIEF1dG8gd2lkdGggaW1w
bGllcyBhdXRvIHRhYmxlIGxheW91dC4KICAgICAgICAgaWYgKHN0eWxlKCktPnRhYmxlTGF5b3V0
KCkgPT0gVEZJWEVEICYmICFzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpKQotICAgICAgICAgICAg
bV90YWJsZUxheW91dCA9IG5ldyBGaXhlZFRhYmxlTGF5b3V0KHRoaXMpOworICAgICAgICAgICAg
bV90YWJsZUxheW91dC5zZXQobmV3IEZpeGVkVGFibGVMYXlvdXQodGhpcykpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX3RhYmxlTGF5b3V0ID0gbmV3IEF1dG9UYWJsZUxheW91dCh0aGlz
KTsKKyAgICAgICAgICAgIG1fdGFibGVMYXlvdXQuc2V0KG5ldyBBdXRvVGFibGVMYXlvdXQodGhp
cykpOwogICAgIH0KIH0KIApAQCAtMTMwLDE4ICsxMjMsMTggQEAgdm9pZCBSZW5kZXJUYWJsZTo6
YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgICAgICAgICAgY2FzZSBUQUJMRV9IRUFERVJfR1JP
VVA6CiAgICAgICAgICAgICAgICAgcmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1faGVh
ZCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgICAgIGlmICghbV9oZWFkKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1faGVhZCA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KGNo
aWxkKTsKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFkID0gdG9SZW5kZXJUYWJsZVNlY3Rpb24o
Y2hpbGQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHJl
c2V0U2VjdGlvblBvaW50ZXJJZk5vdEJlZm9yZShtX2ZpcnN0Qm9keSwgYmVmb3JlQ2hpbGQpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZmlyc3RCb2R5KSAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hp
bGQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSB0b1JlbmRlclRhYmxl
U2VjdGlvbihjaGlsZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHdyYXBJ
bkFub255bW91c1NlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgVEFCTEVfRk9PVEVSX0dST1VQOgogICAgICAgICAgICAgICAgIHJlc2V0U2Vj
dGlvblBvaW50ZXJJZk5vdEJlZm9yZShtX2Zvb3QsIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAg
ICAgICBpZiAoIW1fZm9vdCkgewotICAgICAgICAgICAgICAgICAgICBtX2Zvb3QgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIG1f
Zm9vdCA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAg
d3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CkBAIC0xNDksNyArMTQyLDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgICAgICAgICAgY2FzZSBUQUJMRV9ST1dfR1JP
VVA6CiAgICAgICAgICAgICAgICAgcmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1fZmly
c3RCb2R5LCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2ZpcnN0Qm9keSkK
LSAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJs
ZVNlY3Rpb24qPihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gdG9S
ZW5kZXJUYWJsZVNlY3Rpb24oY2hpbGQpOwogICAgICAgICAgICAgICAgIHdyYXBJbkFub255bW91
c1NlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CkBAIC0yODAsNyArMjczLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rp
b24oKSkgewogICAgICAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgICAg
ICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNl
Y3Rpb24qPihjaGlsZCk7CisgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24g
PSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCk7CiAgICAgICAgICAgICBjYWxjdWxhdGVkSGVp
Z2h0ICs9IHNlY3Rpb24tPmNhbGNSb3dIZWlnaHQoKTsKICAgICAgICAgICAgIGlmIChjb2xsYXBz
aW5nKQogICAgICAgICAgICAgICAgIHNlY3Rpb24tPnJlY2FsY091dGVyQm9yZGVyKCk7CkBAIC0z
NDQsNyArMzM3LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBEaXN0cmlidXRlIGV4dHJhIGhlaWdodCBiZXR3ZWVuIGFsbCB0YWJs
ZSBib2R5IHNlY3Rpb25zIGluc3RlYWQgb2YgZ2l2aW5nIGl0IGFsbCB0byB0aGUgZmlyc3Qgb25l
LgotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpLT5s
YXlvdXRSb3dzKGNoaWxkID09IG1fZmlyc3RCb2R5ID8gbWF4KDAsIHRoIC0gY2FsY3VsYXRlZEhl
aWdodCkgOiAwKTsKKyAgICAgICAgICAgIHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKS0+bGF5
b3V0Um93cyhjaGlsZCA9PSBtX2ZpcnN0Qm9keSA/IG1heCgwLCB0aCAtIGNhbGN1bGF0ZWRIZWln
aHQpIDogMCk7CiAgICAgfQogCiAgICAgaWYgKCFtX2ZpcnN0Qm9keSAmJiB0aCA+IGNhbGN1bGF0
ZWRIZWlnaHQgJiYgIXN0eWxlKCktPmh0bWxIYWNrcygpKSB7CkBAIC00MjgsNyArNDIxLDcgQEAg
dm9pZCBSZW5kZXJUYWJsZTo6c2V0Q2VsbFdpZHRocygpCiB7CiAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGlsZCktPnNldENlbGxXaWR0aHMo
KTsKKyAgICAgICAgICAgIHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKS0+c2V0Q2VsbFdpZHRo
cygpOwogICAgIH0KIH0KIApAQCAtNDg4LDcgKzQ4MSw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OnBh
aW50T2JqZWN0KFBhaW50SW5mbyYKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gbmV4dElu
UHJlT3JkZXJBZnRlckNoaWxkcmVuKCk7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvID0g
Zmlyc3RDaGlsZCgpOyBvICYmIG8gIT0gc3RvcDsgbyA9IG8tPm5leHRJblByZU9yZGVyKCkpCiAg
ICAgICAgICAgICBpZiAoby0+aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUYWJsZUNlbGwqPihvKS0+Y29sbGVjdEJvcmRlclN0eWxlcyhib3JkZXJTdHls
ZXMpOworICAgICAgICAgICAgICAgIHRvUmVuZGVyVGFibGVDZWxsKG8pLT5jb2xsZWN0Qm9yZGVy
U3R5bGVzKGJvcmRlclN0eWxlcyk7CiAgICAgICAgIFJlbmRlclRhYmxlQ2VsbDo6c29ydEJvcmRl
clN0eWxlcyhib3JkZXJTdHlsZXMpOwogICAgICAgICBzaXplX3QgY291bnQgPSBib3JkZXJTdHls
ZXMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
QEAgLTU3MSw3ICs1NjQsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpzcGxpdENvbHVtbihpbnQgcG9z
LCBpCiAgICAgLy8gY2hhbmdlIHdpZHRoIG9mIGFsbCByb3dzLgogICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpLT5zcGxpdENvbHVtbihw
b3MsIG9sZFNpemUgKyAxKTsKKyAgICAgICAgICAgIHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxk
KS0+c3BsaXRDb2x1bW4ocG9zLCBvbGRTaXplICsgMSk7CiAgICAgfQogCiAgICAgbV9jb2x1bW5Q
b3MuZ3JvdyhudW1FZmZDb2xzKCkgKyAxKTsKQEAgLTU4OSw3ICs1ODIsNyBAQCB2b2lkIFJlbmRl
clRhYmxlOjphcHBlbmRDb2x1bW4oaW50IHNwYW4pCiAgICAgLy8gY2hhbmdlIHdpZHRoIG9mIGFs
bCByb3dzLgogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5p
c1RhYmxlU2VjdGlvbigpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0
aW9uKj4oY2hpbGQpLT5hcHBlbmRDb2x1bW4ocG9zKTsKKyAgICAgICAgICAgIHRvUmVuZGVyVGFi
bGVTZWN0aW9uKGNoaWxkKS0+YXBwZW5kQ29sdW1uKHBvcyk7CiAgICAgfQogCiAgICAgbV9jb2x1
bW5Qb3MuZ3JvdyhudW1FZmZDb2xzKCkgKyAxKTsKQEAgLTYwNSw3ICs1OTgsNyBAQCBSZW5kZXJU
YWJsZUNvbCogUmVuZGVyVGFibGU6OmNvbEVsZW1lbnQoCiAKICAgICB3aGlsZSAoY2hpbGQpIHsK
ICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ29sKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclRh
YmxlQ29sKiBjb2xFbGVtID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDb2wqPihjaGlsZCk7Cisg
ICAgICAgICAgICBSZW5kZXJUYWJsZUNvbCogY29sRWxlbSA9IHRvUmVuZGVyVGFibGVDb2woY2hp
bGQpOwogICAgICAgICAgICAgaW50IHNwYW4gPSBjb2xFbGVtLT5zcGFuKCk7CiAgICAgICAgICAg
ICBpZiAoIWNvbEVsZW0tPmZpcnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgICAgIGludCBzdGFy
dENvbCA9IGNDb2w7CkBAIC02NTgsNyArNjUxLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cmVjYWxj
U2VjdGlvbnMoKSBjb25zdAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBUQUJMRV9IRUFERVJfR1JPVVA6CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxl
U2VjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2Vj
dGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KGNoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gdG9SZW5kZXJUYWJsZVNl
Y3Rpb24oY2hpbGQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhZCkKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faGVhZCA9IHNlY3Rpb247CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKCFtX2ZpcnN0Qm9keSkKQEAgLTY2OCw3ICs2NjEsNyBAQCB2b2lkIFJlbmRlclRhYmxl
OjpyZWNhbGNTZWN0aW9ucygpIGNvbnN0CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIFRBQkxFX0ZPT1RFUl9HUk9VUDoKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQt
PmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0
aW9uKiBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpOwor
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0b1JlbmRl
clRhYmxlU2VjdGlvbihjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9mb290KQog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9mb290ID0gc2VjdGlvbjsKICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoIW1fZmlyc3RCb2R5KQpAQCAtNjc4LDcgKzY3MSw3IEBAIHZvaWQgUmVu
ZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zKCkgY29uc3QKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgVEFCTEVfUk9XX0dST1VQOgogICAgICAgICAgICAgICAgIGlmIChj
aGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYWJs
ZVNlY3Rpb24qIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGls
ZCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHRv
UmVuZGVyVGFibGVTZWN0aW9uKGNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2Zp
cnN0Qm9keSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gc2VjdGlvbjsK
ICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi0+cmVjYWxjQ2VsbHNJZk5lZWRlZCgpOwpAQCAt
NjkzLDcgKzY4Niw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zKCkgY29uc3QK
ICAgICBpbnQgbWF4Q29scyA9IDA7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclRhYmxl
U2VjdGlvbiogc2VjdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KGNoaWxk
KTsKKyAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHRvUmVuZGVyVGFi
bGVTZWN0aW9uKGNoaWxkKTsKICAgICAgICAgICAgIGludCBzZWN0aW9uQ29scyA9IHNlY3Rpb24t
Pm51bUNvbHVtbnMoKTsKICAgICAgICAgICAgIGlmIChzZWN0aW9uQ29scyA+IG1heENvbHMpCiAg
ICAgICAgICAgICAgICAgbWF4Q29scyA9IHNlY3Rpb25Db2xzOwpAQCAtODg0LDcgKzg3Nyw3IEBA
IGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJCb3R0b20oKSBjb24KICAgICBlbHNlIHsKICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZDsKICAgICAgICAgZm9yIChjaGlsZCA9IGxhc3RDaGls
ZCgpOyBjaGlsZCAmJiAhY2hpbGQtPmlzVGFibGVTZWN0aW9uKCk7IGNoaWxkID0gY2hpbGQtPnBy
ZXZpb3VzU2libGluZygpKSB7IH0KLSAgICAgICAgYm90dG9tU2VjdGlvbiA9IGNoaWxkID8gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpIDogMDsKKyAgICAgICAgYm90dG9t
U2VjdGlvbiA9IGNoaWxkID8gdG9SZW5kZXJUYWJsZVNlY3Rpb24oY2hpbGQpIDogMDsKICAgICB9
CiAgICAgaWYgKGJvdHRvbVNlY3Rpb24pIHsKICAgICAgICAgYm9yZGVyV2lkdGggPSBib3R0b21T
ZWN0aW9uLT5vdXRlckJvcmRlckJvdHRvbSgpOwpAQCAtOTE2LDcgKzkwOSw3IEBAIGludCBSZW5k
ZXJUYWJsZTo6b3V0ZXJCb3JkZXJMZWZ0KCkgY29uc3QKICAgICBmb3IgKFJlbmRlck9iamVjdCog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CiAgICAgICAgIGlmICghY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaW50IHN3ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9u
Kj4oY2hpbGQpLT5vdXRlckJvcmRlckxlZnQoKTsKKyAgICAgICAgaW50IHN3ID0gdG9SZW5kZXJU
YWJsZVNlY3Rpb24oY2hpbGQpLT5vdXRlckJvcmRlckxlZnQoKTsKICAgICAgICAgaWYgKHN3ID09
IC0xKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGVsc2UKQEAgLTk0Niw3ICs5Mzks
NyBAQCBpbnQgUmVuZGVyVGFibGU6Om91dGVyQm9yZGVyUmlnaHQoKSBjb25zCiAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIWNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGludCBzdyA9IHN0YXRpY19jYXN0PFJlbmRl
clRhYmxlU2VjdGlvbio+KGNoaWxkKS0+b3V0ZXJCb3JkZXJSaWdodCgpOworICAgICAgICBpbnQg
c3cgPSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCktPm91dGVyQm9yZGVyUmlnaHQoKTsKICAg
ICAgICAgaWYgKHN3ID09IC0xKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGVsc2UK
QEAgLTk2OCwxMyArOTYxLDEzIEBAIFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6OnNl
Y3Rpb24KIAogICAgIFJlbmRlck9iamVjdCogcHJldlNlY3Rpb24gPSBzZWN0aW9uID09IG1fZm9v
dCA/IGxhc3RDaGlsZCgpIDogc2VjdGlvbi0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgd2hpbGUg
KHByZXZTZWN0aW9uKSB7Ci0gICAgICAgIGlmIChwcmV2U2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24o
KSAmJiBwcmV2U2VjdGlvbiAhPSBtX2hlYWQgJiYgcHJldlNlY3Rpb24gIT0gbV9mb290ICYmICgh
c2tpcEVtcHR5U2VjdGlvbnMgfHwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4ocHJl
dlNlY3Rpb24pLT5udW1Sb3dzKCkpKQorICAgICAgICBpZiAocHJldlNlY3Rpb24tPmlzVGFibGVT
ZWN0aW9uKCkgJiYgcHJldlNlY3Rpb24gIT0gbV9oZWFkICYmIHByZXZTZWN0aW9uICE9IG1fZm9v
dCAmJiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8IHRvUmVuZGVyVGFibGVTZWN0aW9uKHByZXZTZWN0
aW9uKS0+bnVtUm93cygpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBwcmV2U2VjdGlv
biA9IHByZXZTZWN0aW9uLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB9CiAgICAgaWYgKCFwcmV2
U2VjdGlvbiAmJiBtX2hlYWQgJiYgKCFza2lwRW1wdHlTZWN0aW9ucyB8fCBtX2hlYWQtPm51bVJv
d3MoKSkpCiAgICAgICAgIHByZXZTZWN0aW9uID0gbV9oZWFkOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihwcmV2U2VjdGlvbik7CisgICAgcmV0dXJuIHRvUmVu
ZGVyVGFibGVTZWN0aW9uKHByZXZTZWN0aW9uKTsKIH0KIAogUmVuZGVyVGFibGVTZWN0aW9uKiBS
ZW5kZXJUYWJsZTo6c2VjdGlvbkJlbG93KGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlv
biwgYm9vbCBza2lwRW1wdHlTZWN0aW9ucykgY29uc3QKQEAgLTk4NiwxMyArOTc5LDEzIEBAIFJl
bmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGU6OnNlY3Rpb24KIAogICAgIFJlbmRlck9iamVj
dCogbmV4dFNlY3Rpb24gPSBzZWN0aW9uID09IG1faGVhZCA/IGZpcnN0Q2hpbGQoKSA6IHNlY3Rp
b24tPm5leHRTaWJsaW5nKCk7CiAgICAgd2hpbGUgKG5leHRTZWN0aW9uKSB7Ci0gICAgICAgIGlm
IChuZXh0U2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSAmJiBuZXh0U2VjdGlvbiAhPSBtX2hlYWQg
JiYgbmV4dFNlY3Rpb24gIT0gbV9mb290ICYmICghc2tpcEVtcHR5U2VjdGlvbnMgfHwgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4obmV4dFNlY3Rpb24pLT5udW1Sb3dzKCkpKQorICAg
ICAgICBpZiAobmV4dFNlY3Rpb24tPmlzVGFibGVTZWN0aW9uKCkgJiYgbmV4dFNlY3Rpb24gIT0g
bV9oZWFkICYmIG5leHRTZWN0aW9uICE9IG1fZm9vdCAmJiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8
IHRvUmVuZGVyVGFibGVTZWN0aW9uKG5leHRTZWN0aW9uKS0+bnVtUm93cygpKSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBuZXh0U2VjdGlvbiA9IG5leHRTZWN0aW9uLT5uZXh0U2libGlu
ZygpOwogICAgIH0KICAgICBpZiAoIW5leHRTZWN0aW9uICYmIG1fZm9vdCAmJiAoIXNraXBFbXB0
eVNlY3Rpb25zIHx8IG1fZm9vdC0+bnVtUm93cygpKSkKICAgICAgICAgbmV4dFNlY3Rpb24gPSBt
X2Zvb3Q7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KG5leHRT
ZWN0aW9uKTsKKyAgICByZXR1cm4gdG9SZW5kZXJUYWJsZVNlY3Rpb24obmV4dFNlY3Rpb24pOwog
fQogCiBSZW5kZXJUYWJsZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQWJvdmUoY29uc3QgUmVuZGVy
VGFibGVDZWxsKiBjZWxsKSBjb25zdApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCShyZXZp
c2lvbiA0NjU5NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTIgKzEsMTAgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
RE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk3IE1h
cnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVu
IFdlaXMgKHdlaXNAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFu
IChiYXN0aWFuQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNDAsMTMgKzM4LDYgQEAgY2xhc3MgVGFibGVMYXlvdXQ7CiBjbGFzcyBSZW5kZXJUYWJs
ZSA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6CiAgICAgUmVuZGVyVGFibGUoTm9kZSop
OwotICAgIH5SZW5kZXJUYWJsZSgpOwotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJO
YW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclRhYmxlIjsgfQotCi0gICAgdmlydHVhbCBib29s
IGlzVGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXZv
aWRzRmxvYXRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgaW50IGdldENvbHVtblBv
cyhpbnQgY29sKSBjb25zdCB7IHJldHVybiBtX2NvbHVtblBvc1tjb2xdOyB9CiAKQEAgLTcwLDI2
ICs2MSw3IEBAIHB1YmxpYzoKICAgICBpbnQgY2FsY0JvcmRlclJpZ2h0KCkgY29uc3Q7CiAgICAg
dm9pZCByZWNhbGNIb3Jpem9udGFsQm9yZGVycygpOwogCi0gICAgLy8gb3ZlcnJpZGVzCiAgICAg
dmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQgPSAwKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2Jq
ZWN0KiBvbGRDaGlsZCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50
IHR4LCBpbnQgdHkpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBp
bnQgdHgsIGludCB0eSk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFp
bnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE1hc2soUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KTsKLSAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7Ci0gICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGlu
dCB4UG9zLCBpbnQgeVBvcywgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwotICAgIAot
ICAgIHZpcnR1YWwgaW50IGZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVGaXJzdExldHRlcigpOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBzZXRDZWxsV2lk
dGhzKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1dpZHRoKCk7CiAKICAgICBzdHJ1Y3QgQ29s
dW1uU3RydWN0IHsKICAgICAgICAgZW51bSB7CkBAIC0xNjMsOCArMTM1LDYgQEAgcHVibGljOgog
ICAgIAogICAgIGJvb2wgaGFzU2VjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2hlYWQgfHwgbV9m
b290IHx8IG1fZmlyc3RCb2R5OyB9CiAKLSAgICB2aXJ0dWFsIEludFJlY3Qgb3ZlcmZsb3dDbGlw
UmVjdChpbnQgdHgsIGludCB0eSk7Ci0KICAgICB2b2lkIHJlY2FsY1NlY3Rpb25zSWZOZWVkZWQo
KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fbmVlZHNTZWN0aW9uUmVjYWxjKQpAQCAtMTc1
LDYgKzE0NSwzMyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAogcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAi
UmVuZGVyVGFibGUiOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNUYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0
KiBvbGRDaGlsZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBpbnQg
dHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJ
bmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludE1hc2soUGFpbnRJ
bmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCk7CisgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4
UG9zLCBpbnQgeVBvcywgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIAorICAg
IHZpcnR1YWwgaW50IGZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVGaXJzdExldHRlcigpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXRDZWxsV2lkdGhz
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1dpZHRoKCk7CisKKyAgICB2aXJ0dWFsIEludFJl
Y3Qgb3ZlcmZsb3dDbGlwUmVjdChpbnQgdHgsIGludCB0eSk7CisKICAgICB2b2lkIHJlY2FsY1Nl
Y3Rpb25zKCkgY29uc3Q7CiAKICAgICBtdXRhYmxlIFZlY3RvcjxpbnQ+IG1fY29sdW1uUG9zOwpA
QCAtMTg1LDcgKzE4Miw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZW5kZXJUYWJsZVNlY3Rp
b24qIG1fZm9vdDsKICAgICBtdXRhYmxlIFJlbmRlclRhYmxlU2VjdGlvbiogbV9maXJzdEJvZHk7
CiAKLSAgICBUYWJsZUxheW91dCogbV90YWJsZUxheW91dDsKKyAgICBPd25QdHI8VGFibGVMYXlv
dXQ+IG1fdGFibGVMYXlvdXQ7CiAKICAgICBjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSogbV9j
dXJyZW50Qm9yZGVyOwogICAgIApAQCAtMTk4LDYgKzE5NSwyMSBAQCBwcml2YXRlOgogICAgIGlu
dCBtX2JvcmRlclJpZ2h0OwogfTsKIAoraW5saW5lIFJlbmRlclRhYmxlKiB0b1JlbmRlclRhYmxl
KFJlbmRlck9iamVjdCogbykKK3sKKyAgICBBU1NFUlQoIW8gfHwgby0+aXNUYWJsZSgpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihvKTsKK30KKworaW5saW5lIGNvbnN0
IFJlbmRlclRhYmxlKiB0b1JlbmRlclRhYmxlKGNvbnN0IFJlbmRlck9iamVjdCogbykKK3sKKyAg
ICBBU1NFUlQoIW8gfHwgby0+aXNUYWJsZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyVGFibGUqPihvKTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2lu
ZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclRhYmxlKGNvbnN0IFJlbmRlclRh
YmxlKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlclRhYmxl
X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkocmV2aXNpb24gNDY1
OTYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NTAsNyArNTUwLDcgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgUmVuZGVyVGFibGVD
ZWxsOjpjbwogICAgIAogICAgIC8vIE5vdyBjaGVjayByb3cgZ3JvdXBzLgogICAgIFJlbmRlclRh
YmxlU2VjdGlvbiogY3VyclNlY3Rpb24gPSBzZWN0aW9uKCk7Ci0gICAgaWYgKHJvdygpICsgcm93
U3BhbigpID49IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KGN1cnJTZWN0aW9uKS0+
bnVtUm93cygpKSB7CisgICAgaWYgKHJvdygpICsgcm93U3BhbigpID49IGN1cnJTZWN0aW9uLT5u
dW1Sb3dzKCkpIHsKICAgICAgICAgLy8gKDUpIE91ciByb3cgZ3JvdXAncyBib3R0b20gYm9yZGVy
LgogICAgICAgICByZXN1bHQgPSBjb21wYXJlQm9yZGVycyhyZXN1bHQsIENvbGxhcHNlZEJvcmRl
clZhbHVlKCZjdXJyU2VjdGlvbi0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tKCksIEJST1dHUk9VUCkp
OwogICAgICAgICBpZiAoIXJlc3VsdC5leGlzdHMoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5oCShyZXZpc2lvbiA0NjU5NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQAogICogICAgICAgICAg
IChDKSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDEy
ICszMyw2IEBAIGNsYXNzIFJlbmRlclRhYmxlQ2VsbCA6IHB1YmxpYyBSZW5kZXJCbG8KIHB1Ymxp
YzoKICAgICBSZW5kZXJUYWJsZUNlbGwoTm9kZSopOwogCi0gICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJSZW5kZXJUYWJs
ZUNlbGwgKGFub255bW91cykiIDogIlJlbmRlclRhYmxlQ2VsbCI7IH0KLQotICAgIHZpcnR1YWwg
Ym9vbCBpc1RhYmxlQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95KCk7Ci0KICAgICAvLyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQgY2VsbElu
ZGV4CiAgICAgaW50IGNlbGxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2b2lkIHNl
dENlbGxJbmRleChpbnQpIHsgfQpAQCAtNTQsMTUgKzQ4LDEzIEBAIHB1YmxpYzoKICAgICBpbnQg
cm93KCkgY29uc3QgeyByZXR1cm4gbV9yb3c7IH0KICAgICB2b2lkIHNldFJvdyhpbnQgcm93KSB7
IG1fcm93ID0gcm93OyB9CiAKLSAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihwYXJlbnQoKS0+cGFy
ZW50KCkpOyB9Ci0gICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmVuZGVyVGFibGUqPihwYXJlbnQoKS0+cGFyZW50KCktPnBhcmVudCgpKTsgfQorICAg
IFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRvUmVuZGVyVGFi
bGVTZWN0aW9uKHBhcmVudCgpLT5wYXJlbnQoKSk7IH0KKyAgICBSZW5kZXJUYWJsZSogdGFibGUo
KSBjb25zdCB7IHJldHVybiB0b1JlbmRlclRhYmxlKHBhcmVudCgpLT5wYXJlbnQoKS0+cGFyZW50
KCkpOyB9CiAKICAgICBMZW5ndGggc3R5bGVPckNvbFdpZHRoKCkgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGlzUG9zaXRpb25lZCgpIHx8
IGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8
fCBoYXNNYXNrKCkgfHwgaGFzUmVmbGVjdGlvbigpOyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgY2Fs
Y1ByZWZXaWR0aHMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1dpZHRoKCk7CisKICAgICB2b2lk
IHVwZGF0ZVdpZHRoKGludCk7CiAKICAgICBpbnQgYm9yZGVyTGVmdCgpIGNvbnN0OwpAQCAtODks
MTMgKzgxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0gICAgdmlydHVh
bCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwot
ICAgIHZpcnR1YWwgdm9pZCBwYWludE1hc2soUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwg
aW50IHR5KTsKLSAgICB2b2lkIHBhaW50Q29sbGFwc2VkQm9yZGVyKEdyYXBoaWNzQ29udGV4dCos
IGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKTsKLSAgICB2b2lkIHBhaW50QmFja2dyb3VuZHNC
ZWhpbmRDZWxsKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBSZW5kZXJPYmplY3QqIGJhY2tn
cm91bmRPYmplY3QpOwogCi0gICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKKyAgICB2b2lk
IHBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBS
ZW5kZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpOwogCiAgICAgdmlydHVhbCBpbnQgYmFzZWxp
bmVQb3NpdGlvbihib29sIGZpcnN0TGluZSA9IGZhbHNlLCBib29sIGlzUm9vdExpbmVCb3ggPSBm
YWxzZSkgY29uc3Q7CiAKQEAgLTEyMCw2ICsxMDcsMjQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCBtYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5z
Zm9ybXMsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJS
ZW5kZXJUYWJsZUNlbGwgKGFub255bW91cykiIDogIlJlbmRlclRhYmxlQ2VsbCI7IH0KKworICAg
IHZpcnR1YWwgYm9vbCBpc1RhYmxlQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXll
cigpIGNvbnN0IHsgcmV0dXJuIGlzUG9zaXRpb25lZCgpIHx8IGlzVHJhbnNwYXJlbnQoKSB8fCBo
YXNPdmVyZmxvd0NsaXAoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNNYXNrKCkgfHwgaGFzUmVm
bGVjdGlvbigpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1dpZHRoKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7
CisKKyAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOworICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIEludFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpOworCisgICAgdm9pZCBwYWludENvbGxh
cHNlZEJvcmRlcihHcmFwaGljc0NvbnRleHQqLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCk7
CisKICAgICBpbnQgbV9yb3c7CiAgICAgaW50IG1fY29sdW1uOwogICAgIGludCBtX3Jvd1NwYW47
CkBAIC0xMjksNiArMTM0LDIxIEBAIHByaXZhdGU6CiAgICAgaW50IG1fcGVyY2VudGFnZUhlaWdo
dDsKIH07CiAKK2lubGluZSBSZW5kZXJUYWJsZUNlbGwqIHRvUmVuZGVyVGFibGVDZWxsKFJlbmRl
ck9iamVjdCogbykKK3sKKyAgICBBU1NFUlQoIW8gfHwgby0+aXNUYWJsZUNlbGwoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ2VsbCo+KG8pOworfQorCitpbmxpbmUgY29u
c3QgUmVuZGVyVGFibGVDZWxsKiB0b1JlbmRlclRhYmxlQ2VsbChjb25zdCBSZW5kZXJPYmplY3Qq
IG8pCit7CisgICAgQVNTRVJUKCFvIHx8IG8tPmlzVGFibGVDZWxsKCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBSZW5kZXJUYWJsZUNlbGwqPihvKTsKK30KKworLy8gVGhpcyB3aWxs
IGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclRh
YmxlQ2VsbChjb25zdCBSZW5kZXJUYWJsZUNlbGwqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gUmVuZGVyVGFibGVDZWxsX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNvbC5jcHAJKHJldmlzaW9uIDQ2NTk2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyICsxLDEwIEBACi0vKioKLSAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAq
CisvKgogICogQ29weXJpZ2h0IChDKSAxOTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdlaXMgKHdlaXNAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMSwxMyArMjksMTUgQEAK
ICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxUYWJsZUNvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIFJlbmRl
clRhYmxlQ29sOjpSZW5kZXJUYWJsZUNvbChOb2RlKiBub2RlKQotICAgIDogUmVuZGVyQm94KG5v
ZGUpLCBtX3NwYW4oMSkKKyAgICA6IFJlbmRlckJveChub2RlKQorICAgICwgbV9zcGFuKDEpCiB7
CiAgICAgLy8gaW5pdCBSZW5kZXJPYmplY3QgYXR0cmlidXRlcwogICAgIHNldElubGluZSh0cnVl
KTsgLy8gb3VyIG9iamVjdCBpcyBub3QgSW5saW5lCkBAIC03NSwxMCArNzUsMTEgQEAgSW50UmVj
dCBSZW5kZXJUYWJsZUNvbDo6Y2xpcHBlZE92ZXJmbG93UgogICAgIC8vIEZJWE1FOiBGaW5kIGEg
YmV0dGVyIHdheSB0byBkbyB0aGlzLCBlLmcuLCBuZWVkIHRvIHJlcGFpbnQgYWxsIHRoZSBjZWxs
cyB0aGF0IHdlCiAgICAgLy8gbWlnaHQgaGF2ZSBwcm9wYWdhdGVkIGEgYmFja2dyb3VuZCBjb2xv
ciBvciBib3JkZXJzIGludG8uCiAgICAgLy8gRklYTUU6IGNoZWNrIGZvciByZXBhaW50Q29udGFp
bmVyIGVhY2ggdGltZSBoZXJlPwotICAgIGlmIChSZW5kZXJPYmplY3QqIHBhcmVudFRhYmxlID0g
dGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudFRhYmxlLT5jbGlwcGVkT3ZlcmZsb3dSZWN0
Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKIAotICAgIHJldHVybiBJbnRSZWN0KCk7Cisg
ICAgUmVuZGVyVGFibGUqIHBhcmVudFRhYmxlID0gdGFibGUoKTsKKyAgICBpZiAoIXBhcmVudFRh
YmxlKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIHJldHVybiBwYXJlbnRUYWJsZS0+
Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CiB9CiAKIHZv
aWQgUmVuZGVyVGFibGVDb2w6OmltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IElu
dFJlY3QqKQpAQCAtMTAwLDcgKzEwMSw3IEBAIFJlbmRlclRhYmxlKiBSZW5kZXJUYWJsZUNvbDo6
dGFibGUoKSBjb24KICAgICBSZW5kZXJPYmplY3QqIHRhYmxlID0gcGFyZW50KCk7CiAgICAgaWYg
KHRhYmxlICYmICF0YWJsZS0+aXNUYWJsZSgpKQogICAgICAgICB0YWJsZSA9IHRhYmxlLT5wYXJl
bnQoKTsKLSAgICByZXR1cm4gdGFibGUgJiYgdGFibGUtPmlzVGFibGUoKSA/IHN0YXRpY19jYXN0
PFJlbmRlclRhYmxlKj4odGFibGUpIDogMDsKKyAgICByZXR1cm4gdGFibGUgJiYgdGFibGUtPmlz
VGFibGUoKSA/IHRvUmVuZGVyVGFibGUodGFibGUpIDogMDsKIH0KIAogfQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNvbC5oCShyZXZpc2lvbiA0NjU5NikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzEsMTAgQEAKIC8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUu
Ci0gKgogICogQ29weXJpZ2h0IChDKSAxOTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdlaXMgKHdlaXNAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOSwxOSArMjcsMjcgQEAK
ICNkZWZpbmUgUmVuZGVyVGFibGVDb2xfaAogCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5j
bHVkZSAiUmVuZGVyVGFibGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBSZW5k
ZXJUYWJsZTsKKwogY2xhc3MgUmVuZGVyVGFibGVDb2wgOiBwdWJsaWMgUmVuZGVyQm94IHsKIHB1
YmxpYzoKICAgICBSZW5kZXJUYWJsZUNvbChOb2RlKik7CiAKLSAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQot
ICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4o
KSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAgICAgUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAK
KyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKworICAgIGludCBzcGFuKCkgY29u
c3QgeyByZXR1cm4gbV9zcGFuOyB9CisgICAgdm9pZCBzZXRTcGFuKGludCBzKSB7IG1fc3BhbiA9
IHM7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogdmly
dHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQorICAgIHZpcnR1YWwgY29uc3Qg
UmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBj
aGlsZHJlbigpOyB9CisKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCB7IHJldHVybiAiUmVuZGVyVGFibGVDb2wiOyB9CiAgICAgdmlydHVhbCBib29sIGlzVGFibGVD
b2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBpbnQgbGluZUhlaWdodChi
b29sKSBjb25zdCB7IHJldHVybiAwOyB9CkBAIC01NCwxOCArNjAsMjcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hh
bmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKLQotICAgIGludCBzcGFuKCkgY29uc3QgeyByZXR1cm4g
bV9zcGFuOyB9Ci0gICAgdm9pZCBzZXRTcGFuKGludCBzKSB7IG1fc3BhbiA9IHM7IH0KLQotcHJp
dmF0ZToKICAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBjb25zdDsKIAogICAgIFJlbmRlck9iamVj
dENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIGludCBtX3NwYW47CiB9OwogCitpbmxpbmUgUmVu
ZGVyVGFibGVDb2wqIHRvUmVuZGVyVGFibGVDb2woUmVuZGVyT2JqZWN0KiBvKQoreworICAgIEFT
U0VSVCghbyB8fCBvLT5pc1RhYmxlQ29sKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJUYWJsZUNvbCo+KG8pOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVyVGFibGVDb2wqIHRvUmVu
ZGVyVGFibGVDb2woY29uc3QgUmVuZGVyT2JqZWN0KiBvKQoreworICAgIEFTU0VSVCghbyB8fCBv
LT5pc1RhYmxlQ29sKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJUYWJs
ZUNvbCo+KG8pOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVj
ZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyVGFibGVDb2woY29uc3QgUmVuZGVyVGFibGVDb2wq
KTsKKwogfQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJ
KHJldmlzaW9uIDQ2NTk2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OmFk
ZENoaWxkKFJlbmRlck9iamUKICAgICB3aGlsZSAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQt
PnBhcmVudCgpICE9IHRoaXMpCiAgICAgICAgIGJlZm9yZUNoaWxkID0gYmVmb3JlQ2hpbGQtPnBh
cmVudCgpOwogCi0gICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGFibGVDZWxsKj4oY2hpbGQpOworICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IHRvUmVuZGVy
VGFibGVDZWxsKGNoaWxkKTsKIAogICAgIC8vIEdlbmVyYXRlZCBjb250ZW50IGNhbiByZXN1bHQg
aW4gdXMgaGF2aW5nIGEgbnVsbCBzZWN0aW9uIHNvIG1ha2Ugc3VyZSB0byBudWxsIGNoZWNrIG91
ciBwYXJlbnQuCiAgICAgaWYgKHBhcmVudCgpKQpAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgUmVu
ZGVyVGFibGVSb3c6OmxheW91dCgpCiAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAg
ICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSkgewotICAgICAgICAgICAgUmVuZGVyVGFibGVD
ZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oY2hpbGQpOworICAgICAg
ICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gdG9SZW5kZXJUYWJsZUNlbGwoY2hpbGQpOwog
ICAgICAgICAgICAgaWYgKGNoaWxkLT5uZWVkc0xheW91dCgpKSB7CiAgICAgICAgICAgICAgICAg
Y2VsbC0+Y2FsY1ZlcnRpY2FsTWFyZ2lucygpOwogICAgICAgICAgICAgICAgIGNlbGwtPmxheW91
dCgpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OnBhaW50KFBhaW50
SW5mbyYgcGEKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ2VsbCgpKSB7CiAgICAgICAgICAg
ICAvLyBQYWludCB0aGUgcm93IGJhY2tncm91bmQgYmVoaW5kIHRoZSBjZWxsLgogICAgICAgICAg
ICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBh
aW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpIHsKLSAgICAg
ICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJs
ZUNlbGwqPihjaGlsZCk7CisgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0g
dG9SZW5kZXJUYWJsZUNlbGwoY2hpbGQpOwogICAgICAgICAgICAgICAgIGNlbGwtPnBhaW50QmFj
a2dyb3VuZHNCZWhpbmRDZWxsKHBhaW50SW5mbywgdHgsIHR5LCB0aGlzKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICghdG9SZW5kZXJCb3goY2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdM
YXllcigpKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCShyZXZpc2lvbiA0NjU5
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTIgKzEsMTAgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGlt
cGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk3IE1hcnRpbiBK
b25lcyAobWpvbmVzQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdlaXMg
KHdlaXNAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0
aWFuQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzUsMTUgKzMzLDE2IEBAIGNsYXNzIFJlbmRlclRhYmxlUm93IDogcHVibGljIFJlbmRlckJveCAK
IHB1YmxpYzoKICAgICBSZW5kZXJUYWJsZVJvdyhOb2RlKik7CiAKLSAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRyZW4oKTsg
fQotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRy
ZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAgICAg
UmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9
CiAKLSAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24oKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihwYXJlbnQoKSk7IH0KLSAgICBSZW5kZXJUYWJs
ZSogdGFibGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBhcmVu
dCgpLT5wYXJlbnQoKSk7IH0KKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24oKSBjb25z
dCB7IHJldHVybiB0b1JlbmRlclRhYmxlU2VjdGlvbihwYXJlbnQoKSk7IH0KKyAgICBSZW5kZXJU
YWJsZSogdGFibGUoKSBjb25zdCB7IHJldHVybiB0b1JlbmRlclRhYmxlKHBhcmVudCgpLT5wYXJl
bnQoKSk7IH0KIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCog
dmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQorICAgIHZpcnR1YWwgY29u
c3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVy
biBjaGlsZHJlbigpOyB9CisKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRlclRhYmxlUm93IChhbm9ueW1vdXMp
IiA6ICJSZW5kZXJUYWJsZVJvdyI7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlUm93KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNjUsMTAgKzY0LDI0IEBAIHByaXZhdGU6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG5ld1N0eWxlKTsKIAotcHJpdmF0ZToKICAgICBSZW5kZXJPYmplY3RDaGlsZExp
c3QgbV9jaGlsZHJlbjsKIH07CiAKK2lubGluZSBSZW5kZXJUYWJsZVJvdyogdG9SZW5kZXJUYWJs
ZVJvdyhSZW5kZXJPYmplY3QqIG8pCit7CisgICAgQVNTRVJUKCFvIHx8IG8tPmlzVGFibGVSb3co
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlUm93Kj4obyk7Cit9CisKK2lu
bGluZSBjb25zdCBSZW5kZXJUYWJsZVJvdyogdG9SZW5kZXJUYWJsZVJvdyhjb25zdCBSZW5kZXJP
YmplY3QqIG8pCit7CisgICAgQVNTRVJUKCFvIHx8IG8tPmlzVGFibGVSb3coKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRhYmxlUm93Kj4obyk7Cit9CisKKy8vIFRoaXMg
d2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5k
ZXJUYWJsZVJvdyhjb25zdCBSZW5kZXJUYWJsZVJvdyopOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBSZW5kZXJUYWJsZVJvd19oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDQ2NTk2KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEy
NCw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXIKICAgICBpZiAo
IWVuc3VyZVJvd3MobV9jUm93ICsgMSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZ3JpZFtt
X2NSb3ddLnJvd1JlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVSb3cqPihjaGlsZCk7
CisgICAgbV9ncmlkW21fY1Jvd10ucm93UmVuZGVyZXIgPSB0b1JlbmRlclRhYmxlUm93KGNoaWxk
KTsKIAogICAgIGlmICghYmVmb3JlQ2hpbGQpIHsKICAgICAgICAgbV9ncmlkW21fY1Jvd10uaGVp
Z2h0ID0gY2hpbGQtPnN0eWxlKCktPmhlaWdodCgpOwpAQCAtNTMwLDcgKzUzMCw3IEBAIGludCBS
ZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHQKICAgICAgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBvID0gY2VsbC0+Zmlyc3RDaGlsZCgpOyBvOyBvID0gby0+bmV4dFNpYmxpbmco
KSkgewogICAgICAgICAgICAgICAgIGlmICghby0+aXNUZXh0KCkgJiYgby0+c3R5bGUoKS0+aGVp
Z2h0KCkuaXNQZXJjZW50KCkgJiYgKGZsZXhBbGxDaGlsZHJlbiB8fCBvLT5pc1JlcGxhY2VkKCkg
fHwgKG8tPmlzQm94KCkgJiYgdG9SZW5kZXJCb3gobyktPnNjcm9sbHNPdmVyZmxvdygpKSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gVGFibGVzIHdpdGggbm8gc2VjdGlvbnMgZG8gbm90IGZs
ZXguCi0gICAgICAgICAgICAgICAgICAgIGlmICghby0+aXNUYWJsZSgpIHx8IHN0YXRpY19jYXN0
PFJlbmRlclRhYmxlKj4obyktPmhhc1NlY3Rpb25zKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFvLT5pc1RhYmxlKCkgfHwgdG9SZW5kZXJUYWJsZShvKS0+aGFzU2VjdGlvbnMoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgby0+c2V0TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENoaWxkcmVuRmxleCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTY1OSw3ICs2NTksNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9u
Ojpsb3dlc3RQb3NpdGlvbihiCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHJvdyA9IGZpcnN0Q2hp
bGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGN1cnIgPSByb3ctPmZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjdXJyLT5pc1RhYmxlQ2VsbCgpKSB7Ci0g
ICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGFibGVDZWxsKj4oY3Vycik7CisgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxs
ID0gdG9SZW5kZXJUYWJsZUNlbGwoY3Vycik7CiAgICAgICAgICAgICAgICAgYm90dG9tID0gbWF4
KGJvdHRvbSwgY2VsbC0+eSgpICsgY2VsbC0+bG93ZXN0UG9zaXRpb24oZmFsc2UpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtNjc3LDcgKzY3Nyw3IEBAIGludCBSZW5kZXJUYWJsZVNl
Y3Rpb246OnJpZ2h0bW9zdFBvc2l0aW8KICAgICBmb3IgKFJlbmRlck9iamVjdCogcm93ID0gZmly
c3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBmb3Ig
KFJlbmRlck9iamVjdCogY3VyciA9IHJvdy0+Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGN1cnItPmlzVGFibGVDZWxsKCkp
IHsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJUYWJsZUNlbGwqPihjdXJyKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwq
IGNlbGwgPSB0b1JlbmRlclRhYmxlQ2VsbChjdXJyKTsKICAgICAgICAgICAgICAgICByaWdodCA9
IG1heChyaWdodCwgY2VsbC0+eCgpICsgY2VsbC0+cmlnaHRtb3N0UG9zaXRpb24oZmFsc2UpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNjk1LDcgKzY5NSw3IEBAIGludCBSZW5kZXJU
YWJsZVNlY3Rpb246OmxlZnRtb3N0UG9zaXRpb24KICAgICBmb3IgKFJlbmRlck9iamVjdCogcm93
ID0gZmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IHJvdy0+Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGN1cnItPmlzVGFibGVD
ZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJUYWJsZUNlbGwqPihjdXJyKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJUYWJs
ZUNlbGwqIGNlbGwgPSB0b1JlbmRlclRhYmxlQ2VsbChjdXJyKTsKICAgICAgICAgICAgICAgICBs
ZWZ0ID0gbWluKGxlZnQsIGNlbGwtPngoKSArIGNlbGwtPmxlZnRtb3N0UG9zaXRpb24oZmFsc2Up
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTAyNyw3ICsxMDI3LDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBhaQogICAgICAgICAgICAgICAgIGlmICgh
Y2VsbCB8fCAociA+IHN0YXJ0cm93ICYmIChjZWxsQXQociAtIDEsIGMpLmNlbGwgPT0gY2VsbCkp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIFJlbmRl
clRhYmxlUm93KiByb3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVJvdyo+KGNlbGwtPnBhcmVu
dCgpKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZVJvdyogcm93ID0gdG9SZW5kZXJUYWJs
ZVJvdyhjZWxsLT5wYXJlbnQoKSk7CiAKICAgICAgICAgICAgICAgICBpZiAocGFpbnRQaGFzZSA9
PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUNo
aWxkQmxvY2tCYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
aGFuZGxlIHBhaW50aW5nIGEgc3RhY2sgb2YgYmFja2dyb3VuZHMuICBUaGlzIHN0YWNrIChmcm9t
IGJvdHRvbSB0byB0b3ApIGNvbnNpc3RzIG9mCkBAIC0xMDgxLDEyICsxMDgxLDEyIEBAIHZvaWQg
UmVuZGVyVGFibGVTZWN0aW9uOjpyZWNhbGNDZWxscygpCiAgICAgICAgICAgICBpZiAoIWVuc3Vy
ZVJvd3MobV9jUm93ICsgMSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIFJlbmRlclRhYmxlUm93KiB0YWJsZVJvdyA9IHN0YXRpY19jYXN0PFJlbmRl
clRhYmxlUm93Kj4ocm93KTsKKyAgICAgICAgICAgIFJlbmRlclRhYmxlUm93KiB0YWJsZVJvdyA9
IHRvUmVuZGVyVGFibGVSb3cocm93KTsKICAgICAgICAgICAgIG1fZ3JpZFttX2NSb3ddLnJvd1Jl
bmRlcmVyID0gdGFibGVSb3c7CiAKICAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxs
ID0gcm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzVGFibGVDZWxsKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGFkZENlbGwoc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oY2VsbCksIHRhYmxl
Um93KTsKKyAgICAgICAgICAgICAgICAgICAgYWRkQ2VsbCh0b1JlbmRlclRhYmxlQ2VsbChjZWxs
KSwgdGFibGVSb3cpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlzaW9uIDQ2NTk2KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTIgKzEsMTAgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVu
dGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk3IE1hcnRpbiBKb25lcyAo
bWpvbmVzQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdlaXMgKHdlaXNA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzgsMjMg
KzM2LDEyIEBAIGNsYXNzIFJlbmRlclRhYmxlUm93OwogY2xhc3MgUmVuZGVyVGFibGVTZWN0aW9u
IDogcHVibGljIFJlbmRlckJveCB7CiBwdWJsaWM6CiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKE5v
ZGUqKTsKLSAgICB+UmVuZGVyVGFibGVTZWN0aW9uKCk7CisgICAgdmlydHVhbCB+UmVuZGVyVGFi
bGVTZWN0aW9uKCk7CiAKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVh
bENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQotICAgIHZpcnR1YWwgY29uc3QgUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGls
ZHJlbigpOyB9CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNv
bnN0IHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBj
aGlsZHJlbigpIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRlclRh
YmxlU2VjdGlvbiAoYW5vbnltb3VzKSIgOiAiUmVuZGVyVGFibGVTZWN0aW9uIjsgfQotCi0gICAg
dmlydHVhbCBib29sIGlzVGFibGVTZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKLQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
LQogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gMCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJl
bmRlck9iamVjdCogb2xkQ2hpbGQpOwogCiAgICAgdmlydHVhbCBpbnQgZmlyc3RMaW5lQm94QmFz
ZWxpbmUoKSBjb25zdDsKIApAQCAtNjQsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgaW50IGNhbGNS
b3dIZWlnaHQoKTsKICAgICBpbnQgbGF5b3V0Um93cyhpbnQgaGVpZ2h0KTsKIAotICAgIFJlbmRl
clRhYmxlKiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlKj4o
cGFyZW50KCkpOyB9CisgICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3QgeyByZXR1cm4gdG9S
ZW5kZXJUYWJsZShwYXJlbnQoKSk7IH0KIAogICAgIHN0cnVjdCBDZWxsU3RydWN0IHsKICAgICAg
ICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsOwpAQCAtOTEsMTAgKzc4LDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgaW50IG92ZXJmbG93SGVpZ2h0KGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkg
Y29uc3QgeyByZXR1cm4gKCFpbmNsdWRlSW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkpID8g
aGVpZ2h0KCkgOiBtX292ZXJmbG93SGVpZ2h0OyB9CiAgICAgdmlydHVhbCBpbnQgb3ZlcmZsb3dU
b3AoYm9vbCBpbmNsdWRlSW50ZXJpb3IgPSB0cnVlKSBjb25zdCB7IHJldHVybiAoIWluY2x1ZGVJ
bnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkgPyAwIDogbV9vdmVyZmxvd1RvcDsgfQogCi0g
ICAgdmlydHVhbCBpbnQgbG93ZXN0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlv
ciwgYm9vbCBpbmNsdWRlU2VsZikgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcmlnaHRtb3N0UG9z
aXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgYm9vbCBpbmNsdWRlU2VsZikgY29u
c3Q7Ci0gICAgdmlydHVhbCBpbnQgbGVmdG1vc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxv
d0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdDsKLQogICAgIGludCBjYWxjT3V0ZXJC
b3JkZXJUb3AoKSBjb25zdDsKICAgICBpbnQgY2FsY091dGVyQm9yZGVyQm90dG9tKCkgY29uc3Q7
CiAgICAgaW50IGNhbGNPdXRlckJvcmRlckxlZnQoYm9vbCBydGwpIGNvbnN0OwpAQCAtMTA2LDEx
ICs4OSw2IEBAIHB1YmxpYzoKICAgICBpbnQgb3V0ZXJCb3JkZXJMZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9vdXRlckJvcmRlckxlZnQ7IH0KICAgICBpbnQgb3V0ZXJCb3JkZXJSaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1fb3V0ZXJCb3JkZXJSaWdodDsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmpl
Y3QoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotCi0gICAgdmlydHVhbCB2b2lkIGltYWdl
Q2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7Ci0KICAgICBpbnQg
bnVtUm93cygpIGNvbnN0IHsgcmV0dXJuIG1fZ3JpZFJvd3M7IH0KICAgICBpbnQgbnVtQ29sdW1u
cygpIGNvbnN0OwogICAgIHZvaWQgcmVjYWxjQ2VsbHMoKTsKQEAgLTEyOSw5ICsxMDcsMzEgQEAg
cHVibGljOgogCiAgICAgaW50IGdldEJhc2VsaW5lKGludCByb3cpIHsgcmV0dXJuIG1fZ3JpZFty
b3ddLmJhc2VsaW5lOyB9CiAKK3ByaXZhdGU6CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3RDaGls
ZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KKyAgICB2aXJ0
dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gY2hpbGRyZW4oKTsgfQorCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJO
YW1lKCkgY29uc3QgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJSZW5kZXJUYWJsZVNlY3Rpb24g
KGFub255bW91cykiIDogIlJlbmRlclRhYmxlU2VjdGlvbiI7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBpc1RhYmxlU2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0KiBvbGRDaGlsZCk7CisKKyAgICB2aXJ0
dWFsIGludCBsb3dlc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29s
IGluY2x1ZGVTZWxmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCByaWdodG1vc3RQb3NpdGlvbihi
b29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCBsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJp
b3IsIGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3Qo
UGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworCisgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hh
bmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CisKICAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKLXByaXZhdGU6
CiAgICAgdmlydHVhbCBpbnQgbGluZUhlaWdodChib29sLCBib29sKSBjb25zdCB7IHJldHVybiAw
OyB9CiAKICAgICBib29sIGVuc3VyZVJvd3MoaW50KTsKQEAgLTE2MSw2ICsxNjEsMjEgQEAgcHJp
dmF0ZToKICAgICBib29sIG1faGFzT3ZlcmZsb3dpbmdDZWxsOwogfTsKIAoraW5saW5lIFJlbmRl
clRhYmxlU2VjdGlvbiogdG9SZW5kZXJUYWJsZVNlY3Rpb24oUmVuZGVyT2JqZWN0KiBvKQorewor
ICAgIEFTU0VSVCghbyB8fCBvLT5pc1RhYmxlU2VjdGlvbigpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4obyk7Cit9CisKK2lubGluZSBjb25zdCBSZW5kZXJU
YWJsZVNlY3Rpb24qIHRvUmVuZGVyVGFibGVTZWN0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykK
K3sKKyAgICBBU1NFUlQoIW8gfHwgby0+aXNUYWJsZVNlY3Rpb24oKSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbio+KG8pOworfQorCisvLyBUaGlzIHdp
bGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVy
VGFibGVTZWN0aW9uKGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiopOworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZW5kZXJUYWJsZVNlY3Rpb25faApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDQ2NTk2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCwx
NCArMjA0LDE0IEBAIHN0YXRpYyBUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0KICAg
ICAgICAgLy8gRklYTUU6IERlbGliZXJhdGVseSBkdW1wIHRoZSAiaW5uZXIiIGJveCBvZiB0YWJs
ZSBjZWxscywgc2luY2UgdGhhdCBpcyB3aGF0IGN1cnJlbnQgcmVzdWx0cyByZWZsZWN0LiAgV2Un
ZCBsaWtlCiAgICAgICAgIC8vIHRvIGNsZWFuIHVwIHRoZSByZXN1bHRzIHRvIGR1bXAgYm90aCB0
aGUgb3V0ZXIgYm94IGFuZCB0aGUgaW50cmluc2ljIHBhZGRpbmcgc28gdGhhdCBib3RoIGJpdHMg
b2YgaW5mb3JtYXRpb24gYXJlCiAgICAgICAgIC8vIGNhcHR1cmVkIGJ5IHRoZSByZXN1bHRzLgot
ICAgICAgICBjb25zdCBSZW5kZXJUYWJsZUNlbGwmIGNlbGwgPSBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJUYWJsZUNlbGwmPihvKTsKKyAgICAgICAgY29uc3QgUmVuZGVyVGFibGVDZWxsJiBjZWxs
ID0gKnRvUmVuZGVyVGFibGVDZWxsKCZvKTsKICAgICAgICAgciA9IEludFJlY3QoY2VsbC54KCks
IGNlbGwueSgpICsgY2VsbC5pbnRyaW5zaWNQYWRkaW5nVG9wKCksIGNlbGwud2lkdGgoKSwgY2Vs
bC5oZWlnaHQoKSAtIGNlbGwuaW50cmluc2ljUGFkZGluZ1RvcCgpIC0gY2VsbC5pbnRyaW5zaWNQ
YWRkaW5nQm90dG9tKCkpOwogICAgIH0gZWxzZSBpZiAoby5pc0JveCgpKQogICAgICAgICByID0g
dG9SZW5kZXJCb3goJm8pLT5mcmFtZVJlY3QoKTsKIAogICAgIC8vIEZJWE1FOiBUZW1wb3Jhcnkg
aW4gb3JkZXIgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBsYXlvdXQgdGVz
dCByZXN1bHRzLgogICAgIGlmIChhZGp1c3RGb3JUYWJsZUNlbGxzKQotICAgICAgICByLm1vdmUo
MCwgLXN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ2VsbCo+KG8uY29udGFpbmluZ0Jsb2NrKCkpLT5p
bnRyaW5zaWNQYWRkaW5nVG9wKCkpOworICAgICAgICByLm1vdmUoMCwgLXRvUmVuZGVyVGFibGVD
ZWxsKG8uY29udGFpbmluZ0Jsb2NrKCkpLT5pbnRyaW5zaWNQYWRkaW5nVG9wKCkpOwogCiAgICAg
dHMgPDwgIiAiIDw8IHI7CiAKQEAgLTMwNyw3ICszMDcsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSAm
b3BlcmF0b3I8PChUZXh0U3RyZWFtCiAgICAgfQogCiAgICAgaWYgKG8uaXNUYWJsZUNlbGwoKSkg
ewotICAgICAgICBjb25zdCBSZW5kZXJUYWJsZUNlbGwmIGMgPSBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJUYWJsZUNlbGwmPihvKTsKKyAgICAgICAgY29uc3QgUmVuZGVyVGFibGVDZWxsJiBjID0g
KnRvUmVuZGVyVGFibGVDZWxsKCZvKTsKICAgICAgICAgdHMgPDwgIiBbcj0iIDw8IGMucm93KCkg
PDwgIiBjPSIgPDwgYy5jb2woKSA8PCAiIHJzPSIgPDwgYy5yb3dTcGFuKCkgPDwgIiBjcz0iIDw8
IGMuY29sU3BhbigpIDw8ICJdIjsKICAgICB9CiAKQEAgLTM0Myw3ICszNDMsNyBAQCBzdGF0aWMg
dm9pZCB3cml0ZVRleHRSdW4oVGV4dFN0cmVhbSYgdHMsCiAgICAgLy8gRklYTUU6IFRhYmxlIGNl
bGwgYWRqdXN0bWVudCBpcyB0ZW1wb3JhcnkgdW50aWwgcmVzdWx0cyBjYW4gYmUgdXBkYXRlZC4K
ICAgICBpbnQgeSA9IHJ1bi5tX3k7CiAgICAgaWYgKG8uY29udGFpbmluZ0Jsb2NrKCktPmlzVGFi
bGVDZWxsKCkpCi0gICAgICAgIHkgLT0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oby5j
b250YWluaW5nQmxvY2soKSktPmludHJpbnNpY1BhZGRpbmdUb3AoKTsKKyAgICAgICAgeSAtPSB0
b1JlbmRlclRhYmxlQ2VsbChvLmNvbnRhaW5pbmdCbG9jaygpKS0+aW50cmluc2ljUGFkZGluZ1Rv
cCgpOwogICAgIHRzIDw8ICJ0ZXh0IHJ1biBhdCAoIiA8PCBydW4ubV94IDw8ICIsIiA8PCB5IDw8
ICIpIHdpZHRoICIgPDwgcnVuLm1fd2lkdGg7CiAgICAgaWYgKHJ1bi5kaXJlY3Rpb24oKSA9PSBS
VEwgfHwgcnVuLm1fZGlyT3ZlcnJpZGUpIHsKICAgICAgICAgdHMgPDwgKHJ1bi5kaXJlY3Rpb24o
KSA9PSBSVEwgPyAiIFJUTCIgOiAiIExUUiIpOwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2NTk2KQorKysg
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAw
OS0wNy0zMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGNoZWNrZWQgY2FzdHMgZm9yIHJl
bmRlciB0cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzUyMgorCisgICAgICAgICogTWlzYy9XZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubW06
CisgICAgICAgIChmaWxlV3JhcHBlckZvckVsZW1lbnQpOgorICAgICAgICAqIE1pc2MvV2ViTlNQ
YXN0ZWJvYXJkRXh0cmFzLm1tOgorICAgICAgICAoaW1hZ2VGcm9tRWxlbWVudCk6CisgICAgICAg
ICgtW05TUGFzdGVib2FyZCBfd2ViX2RlY2xhcmVBbmRXcml0ZURyYWdJbWFnZUZvckVsZW1lbnQ6
VVJMOnRpdGxlOmFyY2hpdmU6c291cmNlOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUu
bW06CisgICAgICAgICgtW1dlYkZyYW1lIF9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50V2lkdGhT
Y2FsZUZhY3RvcjpwcmludEhlaWdodDpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2FjY2Vzc2li
aWxpdHlUcmVlXSk6CisgICAgICAgICogV2ViVmlldy9XZWJSZW5kZXJOb2RlLm1tOgorICAgICAg
ICAoY29weVJlbmRlck5vZGUpOgorICAgICAgICBVc2UgY2hlY2tlZCBjYXN0cy4KKwogMjAwOS0w
Ny0yOSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxodHRw
Oi8vd2Via2l0Lm9yZy9iLzI3Nzg4PiBEb24ndCBleHBvcnQgV2ViUGx1Z2luQ29udHJvbGxlci5o
IGFzIGEgcHJpdmF0ZSBoZWFkZXIKSW5kZXg6IFdlYktpdC9tYWMvTWlzYy9XZWJOU0F0dHJpYnV0
ZWRTdHJpbmdFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0
cmlidXRlZFN0cmluZ0V4dHJhcy5tbQkocmV2aXNpb24gNDY1OTYpCisrKyBXZWJLaXQvbWFjL01p
c2MvV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3
ICs3Miw3IEBAIHN0YXRpYyBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlckZvckVsZW0KICAgICAg
ICAgd3JhcHBlciA9IFtba2l0KGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIF9kYXRhU291cmNlXSBf
ZmlsZVdyYXBwZXJGb3JVUkw6VVJMXTsKICAgICB9CiAgICAgaWYgKCF3cmFwcGVyKSB7Ci0gICAg
ICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4oZS0+
cmVuZGVyZXIoKSk7CisgICAgICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1h
Z2UoZS0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKSAm
JiAhcmVuZGVyZXItPmNhY2hlZEltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkgewogICAgICAgICAg
ICAgd3JhcHBlciA9IFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENv
bnRlbnRzOihOU0RhdGEgKikocmVuZGVyZXItPmNhY2hlZEltYWdlKCktPmltYWdlKCktPmdldFRJ
RkZSZXByZXNlbnRhdGlvbigpKV07CiAgICAgICAgICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRG
aWxlbmFtZTpAImltYWdlLnRpZmYiXTsKSW5kZXg6IFdlYktpdC9tYWMvTWlzYy9XZWJOU1Bhc3Rl
Ym9hcmRFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYk5TUGFzdGVi
b2FyZEV4dHJhcy5tbQkocmV2aXNpb24gNDY1OTYpCisrKyBXZWJLaXQvbWFjL01pc2MvV2ViTlNQ
YXN0ZWJvYXJkRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNyArMjE5LDcgQEAgc3Rh
dGljIENhY2hlZEltYWdlKiBpbWFnZUZyb21FbGVtZW50KERPTQogICAgICAgICByZXR1cm4gMDsK
ICAgICAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsK
LSAgICBSZW5kZXJJbWFnZSogaW1hZ2VSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdl
Kj4ocmVuZGVyZXIpOworICAgIFJlbmRlckltYWdlKiBpbWFnZVJlbmRlcmVyID0gdG9SZW5kZXJJ
bWFnZShyZW5kZXJlcik7CiAgICAgaWYgKCFpbWFnZVJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpIHx8
IGltYWdlUmVuZGVyZXItPmNhY2hlZEltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkgCiAgICAgICAg
IHJldHVybiAwOyAgICAgICAgCiAgICAgcmV0dXJuIGltYWdlUmVuZGVyZXItPmNhY2hlZEltYWdl
KCk7CkBAIC0yNjgsNyArMjY4LDcgQEAgc3RhdGljIENhY2hlZEltYWdlKiBpbWFnZUZyb21FbGVt
ZW50KERPTQogICAgIE5TU3RyaW5nICpleHRlbnNpb24gPSBAIiI7CiAgICAgaWYgKFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBjb3JlKGVsZW1lbnQpLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGlm
IChyZW5kZXJlci0+aXNJbWFnZSgpKSB7Ci0gICAgICAgICAgICBpZiAoQ2FjaGVkSW1hZ2UqIGlt
YWdlID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihyZW5kZXJlciktPmNhY2hlZEltYWdlKCkp
IHsKKyAgICAgICAgICAgIGlmIChDYWNoZWRJbWFnZSogaW1hZ2UgPSB0b1JlbmRlckltYWdlKHJl
bmRlcmVyKS0+Y2FjaGVkSW1hZ2UoKSkgewogICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGlt
YWdlLT5pbWFnZSgpLT5maWxlbmFtZUV4dGVuc2lvbigpOwogICAgICAgICAgICAgICAgIGlmICgh
W2V4dGVuc2lvbiBsZW5ndGhdKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKSW5kZXg6
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDQ2NTk2KQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NDMsNyArNTQzLDcgQEAgc3RhdGlj
IGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKAogICAgIH0KIAogICAgIGlmICghX3By
aXZhdGUtPmNvcmVGcmFtZSB8fCAhX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSB8fCAh
X3ByaXZhdGUtPmNvcmVGcmFtZS0+dmlldygpKSByZXR1cm4gcGFnZXM7Ci0gICAgUmVuZGVyVmll
dyogcm9vdCA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcgKj4oX3ByaXZhdGUtPmNvcmVGcmFtZS0+
ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVyVmlldyogcm9vdCA9IHRvUmVuZGVy
VmlldyhfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKICAgICBp
ZiAoIXJvb3QpIHJldHVybiBwYWdlczsKICAgICAKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBfcHJp
dmF0ZS0+Y29yZUZyYW1lLT52aWV3KCk7CkBAIC02NDksNyArNjQ5LDcgQEAgc3RhdGljIGlubGlu
ZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKAogCiAgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZy
YW1lIHx8ICFfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIFJlbmRlclZpZXcqIHJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3ICo+KF9w
cml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOworICAgIFJlbmRlclZp
ZXcqIHJvb3QgPSB0b1JlbmRlclZpZXcoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+
cmVuZGVyZXIoKSk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIHJl
dHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKHJvb3QpLT53cmFwcGVyKCk7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UmVuZGVyTm9kZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVy
Tm9kZS5tbQkocmV2aXNpb24gNDY1OTYpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVy
Tm9kZS5tbQkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBzdGF0aWMgV2ViUmVuZGVy
Tm9kZSAqY29weVJlbmRlck5vZGUoUmVuCiAKICAgICBOU1N0cmluZyAqbmFtZSA9IFtbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoVVRGOFN0cmluZzpub2RlLT5yZW5kZXJOYW1lKCldOwogICAgIAot
ICAgIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0ID0gbm9kZS0+aXNXaWRnZXQoKSA/IHN0YXRp
Y19jYXN0PFJlbmRlcldpZGdldCo+KG5vZGUpIDogMDsKKyAgICBSZW5kZXJXaWRnZXQqIHJlbmRl
cldpZGdldCA9IG5vZGUtPmlzV2lkZ2V0KCkgPyB0b1JlbmRlcldpZGdldChub2RlKSA6IDA7CiAg
ICAgV2lkZ2V0KiB3aWRnZXQgPSByZW5kZXJXaWRnZXQgPyByZW5kZXJXaWRnZXQtPndpZGdldCgp
IDogMDsKICAgICBOU1ZpZXcgKnZpZXcgPSB3aWRnZXQgPyB3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0
KCkgOiBuaWw7CiAKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA0NjU5NikKKysrIFdlYktpdC93aW4vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDctMzAgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFVzZSBjaGVja2VkIGNhc3RzIGZvciByZW5kZXIgdHJlZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjIKKworICAgICAg
ICAqIERPTUhUTUxDbGFzc2VzLmNwcDoKKyAgICAgICAgKERPTUhUTUxJbnB1dEVsZW1lbnQ6Omlz
VXNlckVkaXRlZCk6CisgICAgICAgIChET01IVE1MVGV4dEFyZWFFbGVtZW50Ojppc1VzZXJFZGl0
ZWQpOgorICAgICAgICBVc2UgY2hlY2tlZCBjYXN0cy4KKwogMjAwOS0wNy0yOSAgQnJpYW4gV2Vp
bnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2FzIGRvaW5nIHRoZSBi
dWlsZCBmaXggd3JvbmcsIE5vdEltcGxlbWVudGVkLmggaXMgaW4gV2ViQ29yZS4KSW5kZXg6IFdl
YktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vRE9N
SFRNTENsYXNzZXMuY3BwCShyZXZpc2lvbiA0NjU5NikKKysrIFdlYktpdC93aW4vRE9NSFRNTENs
YXNzZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI4NCw3ICsxMjg0LDcgQEAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01IVE1MSW5wdXRFbAogICAgIGlmIChGQUlMRUQo
aXNUZXh0RmllbGQoJnRleHRGaWVsZCkpIHx8ICF0ZXh0RmllbGQpCiAgICAgICAgIHJldHVybiBT
X09LOwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCk7
Ci0gICAgaWYgKHJlbmRlcmVyICYmIHN0YXRpY19jYXN0PFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sKj4ocmVuZGVyZXIpLT5pc1VzZXJFZGl0ZWQoKSkKKyAgICBpZiAocmVuZGVyZXIgJiYgdG9S
ZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlciktPmlzVXNlckVkaXRlZCgpKQogICAgICAgICAqcmVz
dWx0ID0gVFJVRTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTE0ODEsNyArMTQ4MSw3IEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTFRleHRBcmUKICAgICAqcmVzdWx0ID0gRkFM
U0U7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IG1fZWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIgJiYgc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlciktPmlzVXNlckVkaXRlZCgpKQor
ICAgIGlmIChyZW5kZXJlciAmJiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKS0+aXNVc2Vy
RWRpdGVkKCkpCiAgICAgICAgICpyZXN1bHQgPSBUUlVFOwogICAgIHJldHVybiBTX09LOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34094</attachid>
            <date>2009-08-04 15:54:11 -0700</date>
            <delta_ts>2009-08-05 02:55:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>CheckedCastsLastPatch.txt</filename>
            <type>text/plain</type>
            <size>163567</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjI0IEBACisyMDA5LTA4LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2Ug
Y2hlY2tlZCBjYXN0cyBmb3IgcmVuZGVyIHRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTIyCisKKyAgICAgICAgTGFzdCBwYXRjaC4gTWFrZXMg
YWxsIHRoZSBjYXN0cyBvZiBSZW5kZXJPYmplY3QgdXNlIGNoZWNrZWQKKyAgICAgICAgY2FzdHMg
aW5zdGVhZCBvZiB1c2luZyBzdGF0aWNfY2FzdCBkaXJlY3RseS4KKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eUxpc3RCb3g6OnZpc2libGVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5TGlzdEJveDo6ZG9BY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbjo6ZWxlbWVudFJlY3QpOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZ1ZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRpdGxlVUlF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2xpZGVyVGh1
bWI6OmVsZW1lbnRSZWN0KToKKyAgICAgICAgKiBkb20vSW5wdXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklucHV0RWxlbWVudDo6dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KToK
KyAgICAgICAgKiBkb20vU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RFbGVtZW50OjpzY3JvbGxUb1NlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RF
bGVtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RFbGVtZW50Ojpz
ZXRSZWNhbGNMaXN0SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0RWxlbWVudDo6bWVu
dUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdEVsZW1l
bnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBlZGl0aW5nL0JyZWFr
QmxvY2txdW90ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtCbG9ja3F1b3Rl
Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNC
aW5kaW5ncyk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAqIGh0bWwvSFRN
TEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50Ojp1
cGRhdGVXaWRnZXQpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OmF0dGFjaCk6CisgICAgICAg
ICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxG
cmFtZVNldEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvSFRN
TElGcmFtZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQ6
OmF0dGFjaCk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YWRkU2VhcmNoUmVzdWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6Om9uU2VhcmNoKToKKyAgICAgICAgKiBodG1sL0hU
TUxMSUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExJRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExJRWxlbWVudDo6YXR0YWNo
KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllclNpemVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyUmVuZGVyaW5nQ2FuQmVB
Y2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBs
YXllckdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4pOgorICAgICAgICAqIGh0bWwvSFRNTE9MaXN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6dXBkYXRlV2lkZ2V0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRB
cmVhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVF
ZGl0RHJhZyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpjYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQpOgorICAgICAgICAqIHBhZ2Uv
RnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Om93bmVyUmVuZGVyZXIpOgorICAg
ICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
ZGV0YWNoQ3VzdG9tU2Nyb2xsYmFycyk6CisgICAgICAgICogcGFnZS93aW5jZS9GcmFtZVdpbmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVQYWdlUmVjdHNGb3JGcmFtZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lRmxvd0JveDo6cGxhY2VCb3hlc0hvcml6b250YWxseSk6CisgICAgICAgICogcmVuZGVyaW5n
L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJv
bFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6ZmluZE5leHRMaW5lQnJlYWspOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3Vu
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBsYW5Db3VudGVyKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVT
ZXQ6OmNvbXB1dGVFZGdlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNldDo6
c2V0SXNSZXNpemluZyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRlbnRzQm94KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JW
aWRlbyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnByZXZpb3VzTGlzdEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dEl0ZW06OmV4cGxpY2l0VmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Omlu
dmFsaWRhdGVDb3VudGVyc0luQ29udGFpbmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U2Nyb2xsYmFyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhl
bWU6Om1pbmltdW1UaHVtYkxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3JvbGxi
YXJUaGVtZTo6YmFja0J1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xs
YmFyVGhlbWU6OmZvcndhcmRCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNj
cm9sbGJhclRoZW1lOjp0cmFja1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xs
YmFyVGhlbWU6OmNvbnN0cmFpblRyYWNrUmVjdFRvVHJhY2tQaWVjZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3JvbGxiYXJUaGVtZTo6cGFpbnRUcmFja0JhY2tncm91
bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnBhaW50VHJhY2tQ
aWVjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTY3JvbGxiYXJUaGVtZTo6cGFpbnRCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnBhaW50VGh1bWIp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpkZXRlcm1pbmVTbGlkZXJUaHVtYlN0YXRlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lU2FmYXJpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjpwYWludFNsaWRlclRodW1iKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmRldGVybWluZVNsaWRl
clRodW1iU3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NoYXJhY3RlckxheW91dEluZm86OmFkZExheW91
dEluZm9ybWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpmaW5kU1ZHUm9vdE9iamVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUZXh0Q29udHJvbElubmVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAqIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SW1hZ2VFbGVtZW50OjphdHRhY2gpOgorICAgICAgICAqIHN2Zy9TVkdNYXJrZXJFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKToK
KyAgICAgICAgKiBzdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnJvb3RJbmxpbmVCb3hGb3JUZXh0Q29udGVudEVsZW1lbnQpOgorICAgICAgICAqIHdtbC9X
TUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MSW5wdXRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgVXNlIGNoZWNrZWQgY2FzdHMuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQXBwbGV0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckNvdW50ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRnJhbWUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RJ
dGVtLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTWVkaWEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGFydC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBh
dGguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHVGV4dFBhdGguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250
YWluZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlkZW8uaDoKKyAg
ICAgICAgQWRkZWQgYSBjaGVja2VkIGNhc3QuIEFsc28gbWFkZSBtb3N0IG1lbWJlcnMgcHJvdGVj
dGVkIG9yIHByaXZhdGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclNWR0lubGluZVRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVGV4
dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oOgorICAgICAgICBN
YWRlIG1vc3QgbWVtYmVycyBwcm90ZWN0ZWQgb3IgcHJpdmF0ZS4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdDb250
YWluZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGRl
c3RydWN0b3IuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
Lmg6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgdmlydHVhbCBmdW5jdGlvbiBvdmVycmlkZXMg
dGhhdCBkaWQgdGhlIHNhbWUgYXMKKyAgICAgICAgdGhlIGRlZmF1bHQgYW5kIGJhc2UgY2xhc3Mu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnBhaW50KTogVXBk
YXRlZCB0byB1c2UgbV92aWV3cG9ydAorICAgICAgICBkaXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5n
IGEgZnVuY3Rpb24gY2FsbC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyOjphcHBseVZpZXdwb3J0Q2xpcCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnZpZXdwb3J0VHJhbnNmb3JtKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6bG9jYWxUb1BhcmVudFRy
YW5zZm9ybSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVmlld3BvcnRDb250
YWluZXI6OnBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXApOiBEaXR0by4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHNldWRvRm9y
U2Nyb2xsYmFyUGFydCk6IENoYW5nZWQgc3dpdGNoIHN0YXRlbWVudCB0byB1c2UgY2FzZXMgZm9y
CisgICAgICAgIGFsbCB2YWx1ZXMgaW5zdGVhZCBvZiB1c2luZyBhIGRlZmF1bHQgY2FzZS4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om9wZXJhdG9yPDwpOiBSZW1vdmVkIGRlcGVuZGVuY3kgb24gY2FzdGluZyB0byB0eXBlcyB0
aGF0IGRvbid0CisgICAgICAgIGhhdmUgYW55IHB1YmxpYyBtZW1iZXJzIHdlIG5lZWQgdG8gZ2V0
IGF0LiBJbnN0ZWFkLCB1c2UgZnVuY3Rpb24gbmFtZXMgdG8KKyAgICAgICAgaWRlbnRpZnkgdGhl
IHR5cGUgcmF0aGVyIHRoYW4gZG9pbmcgc28gbXVjaCBvdmVybG9hZGluZy4gQ2hhbmdlZCB0byB1
c2UKKyAgICAgICAgY2hlY2tlZCBjYXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlKTogRGl0
dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpyZW5kZXJTdWJ0cmVlVG9JbWFnZSk6IENoYW5nZWQgdG8gdXNlIGEgY2hlY2tl
ZCBjYXN0IGFuZCBhbHNvCisgICAgICAgIGFkZGVkIGEgY29tbWVudCBhYm91dCB0aGUgZmFjdCB0
aGF0IHRoZSBjb2RlIGRvZXMgbm90IGRvIHN1ZmZpY2llbnQgdHlwZQorICAgICAgICBjaGVja2lu
ZyBiZWZvcmUgZG9pbmcgdGhlIGNhc3QuCisKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVJlbmRlclNWR1RleHRCb3gp
OiBSZW5hbWVkIHRoaXMgZnJvbSBvcGVyYXRvcjw8LgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVT
VkdJbmxpbmVUZXh0Qm94ZXMpOiBSZW5hbWVkIHRoaXMgZnJvbSB3cml0ZVNWR0lubGluZVRleHQu
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1RleHQpOiBSZW5hbWVkIHRoaXMgZnJvbSB3cml0
ZS4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU1ZHSW5saW5lVGV4dCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6d3JpdGVTVkdJbWFnZSk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9T
VkdSZW5kZXJUcmVlQXNUZXh0Lmg6IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlcy4gUmVtb3ZlZAor
ICAgICAgICB1bm5lZWRlZCBkZWZhdWx0IGFyZ3VtZW50cy4KKwogMjAwOS0wOC0wNCAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXZlIEh5YXR0LgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUxpc3RCb3guY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlMaXN0Qm94Ojp2aXNpYmxlQ2hpbGRyCiAgICAgCiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbV9jaGlsZHJlbi5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxSZW5kZXJMaXN0
Qm94Kj4obV9yZW5kZXJlciktPmxpc3RJbmRleElzVmlzaWJsZShpKSkKKyAgICAgICAgaWYgKHRv
UmVuZGVyTGlzdEJveChtX3JlbmRlcmVyKS0+bGlzdEluZGV4SXNWaXNpYmxlKGkpKQogICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChtX2NoaWxkcmVuW2ldKTsKICAgICB9CiB9CkBAIC0xNjgsNyAr
MTY4LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eUxpc3RCbwogICAgIGNv
bnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RF
bGVtZW50Kj4obm9kZSktPmxpc3RJdGVtcygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxpc3RJ
dGVtcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIEludFJlY3QgcmVjdCA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RCb3gqPihtX3Jl
bmRlcmVyKS0+aXRlbUJvdW5kaW5nQm94UmVjdChwYXJlbnRSZWN0LngoKSwgcGFyZW50UmVjdC55
KCksIGkpOworICAgICAgICBJbnRSZWN0IHJlY3QgPSB0b1JlbmRlckxpc3RCb3gobV9yZW5kZXJl
ciktPml0ZW1Cb3VuZGluZ0JveFJlY3QocGFyZW50UmVjdC54KCksIHBhcmVudFJlY3QueSgpLCBp
KTsKICAgICAgICAgLy8gVGhlIGNhc3QgdG8gSFRNTEVsZW1lbnQgYmVsb3cgaXMgc2FmZSBiZWNh
dXNlIHRoZSBvbmx5IG90aGVyIHBvc3NpYmxlIGxpc3RJdGVtIHR5cGUKICAgICAgICAgLy8gd291
bGQgYmUgYSBXTUxFbGVtZW50LCBidXQgV01MIGJ1aWxkcyBkb24ndCB1c2UgYWNjZXNzYmlsaXR5
IGZlYXR1cmVzIGF0IGFsbC4KICAgICAgICAgaWYgKHJlY3QuY29udGFpbnMocG9pbnQpKQpJbmRl
eDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hP
cHRpb24uY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAs
NyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uOjplbGVtCiAgICAgSW50UmVj
dCBwYXJlbnRSZWN0ID0gbGlzdEJveFJlbmRlcmVyLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hl
KCktPmdldE9yQ3JlYXRlKGxpc3RCb3hSZW5kZXJlciktPmJvdW5kaW5nQm94UmVjdCgpOwogICAg
IGludCBpbmRleCA9IGxpc3RCb3hPcHRpb25JbmRleCgpOwogICAgIGlmIChpbmRleCAhPSAtMSkK
LSAgICAgICAgcmVjdCA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RCb3gqPihsaXN0Qm94UmVuZGVy
ZXIpLT5pdGVtQm91bmRpbmdCb3hSZWN0KHBhcmVudFJlY3QueCgpLCBwYXJlbnRSZWN0LnkoKSwg
aW5kZXgpOworICAgICAgICByZWN0ID0gdG9SZW5kZXJMaXN0Qm94KGxpc3RCb3hSZW5kZXJlcikt
Pml0ZW1Cb3VuZGluZ0JveFJlY3QocGFyZW50UmVjdC54KCksIHBhcmVudFJlY3QueSgpLCBpbmRl
eCk7CiAgICAgCiAgICAgcmV0dXJuIHJlY3Q7CiB9CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA0Njc3
NykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjk3LDEwICs2OTcsOCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6dGV4dFVuCiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAgICAgCi0gICAgaWYgKGlzRmlsZVVwbG9hZEJ1dHRvbigpKSB7Ci0gICAg
ICAgIFJlbmRlckZpbGVVcGxvYWRDb250cm9sKiB1cGxvYWRDb250cm9sID0gc3RhdGljX2Nhc3Q8
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqPihtX3JlbmRlcmVyKTsKLSAgICAgICAgcmV0dXJuIHVw
bG9hZENvbnRyb2wtPmJ1dHRvblZhbHVlKCk7Ci0gICAgfQorICAgIGlmIChpc0ZpbGVVcGxvYWRC
dXR0b24oKSkKKyAgICAgICAgcmV0dXJuIHRvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wobV9yZW5k
ZXJlciktPmJ1dHRvblZhbHVlKCk7CiAgICAgCiAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXIt
Pm5vZGUoKTsKICAgICBpZiAobm9kZSkgewpAQCAtNzg0LDEwICs3ODIsMTAgQEAgU3RyaW5nIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZwogICAgICAgICByZXR1cm4gdGV4dFVuZGVy
RWxlbWVudCgpOwogICAgIAogICAgIGlmIChtX3JlbmRlcmVyLT5pc01lbnVMaXN0KCkpCi0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJNZW51TGlzdCo+KG1fcmVuZGVyZXIpLT50ZXh0
KCk7CisgICAgICAgIHJldHVybiB0b1JlbmRlck1lbnVMaXN0KG1fcmVuZGVyZXIpLT50ZXh0KCk7
CiAgICAgCiAgICAgaWYgKG1fcmVuZGVyZXItPmlzTGlzdE1hcmtlcigpKQotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdE1hcmtlcio+KG1fcmVuZGVyZXIpLT50ZXh0KCk7Cisg
ICAgICAgIHJldHVybiB0b1JlbmRlckxpc3RNYXJrZXIobV9yZW5kZXJlciktPnRleHQoKTsKICAg
ICAKICAgICBpZiAobV9yZW5kZXJlci0+aXNSZW5kZXJCdXR0b24oKSkKICAgICAgICAgcmV0dXJu
IHRvUmVuZGVyQnV0dG9uKG1fcmVuZGVyZXIpLT50ZXh0KCk7CkBAIC04MDgsMTAgKzgwNiw4IEBA
IFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmcKICAgICBpZiAoaXNUZXh0
Q29udHJvbCgpKQogICAgICAgICByZXR1cm4gdGV4dCgpOwogICAgIAotICAgIGlmIChpc0ZpbGVV
cGxvYWRCdXR0b24oKSkgewotICAgICAgICBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbCogdXBsb2Fk
Q29udHJvbCA9IHN0YXRpY19jYXN0PFJlbmRlckZpbGVVcGxvYWRDb250cm9sKj4obV9yZW5kZXJl
cik7Ci0gICAgICAgIHJldHVybiB1cGxvYWRDb250cm9sLT5maWxlVGV4dFZhbHVlKCk7Ci0gICAg
fQorICAgIGlmIChpc0ZpbGVVcGxvYWRCdXR0b24oKSkKKyAgICAgICAgcmV0dXJuIHRvUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wobV9yZW5kZXJlciktPmZpbGVUZXh0VmFsdWUoKTsKICAgICAKICAg
ICAvLyBGSVhNRTogV2UgbWlnaHQgbmVlZCB0byBpbXBsZW1lbnQgYSB2YWx1ZSBoZXJlIGZvciBt
b3JlIHR5cGVzCiAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGJldHRlciBub3QgdG8gYWR2ZXJ0
aXNlIGEgdmFsdWUgYXQgYWxsIGZvciB0aGUgdHlwZXMgZm9yIHdoaWNoIHdlIGRvbid0IGltcGxl
bWVudCBvbmU7CkBAIC0xMjE0LDcgKzEyMTAsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5UmVuZGVyCiAgICAgCiAgICAgLy8gaWYgaXNGaWVsZHNldCBpcyB0cnVlLCB0aGUg
cmVuZGVyZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIFJlbmRlckZpZWxkc2V0CiAgICAgaWYgKGlz
RmllbGRzZXQoKSkKLSAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
c3RhdGljX2Nhc3Q8UmVuZGVyRmllbGRzZXQqPihtX3JlbmRlcmVyKS0+ZmluZExlZ2VuZCgpKTsK
KyAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUodG9SZW5kZXJGaWVs
ZHNldChtX3JlbmRlcmVyKS0+ZmluZExlZ2VuZCgpKTsKICAgICAKICAgICBpZiAoIWV4cG9zZXNU
aXRsZVVJRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEzMjUsNyArMTMyMSw3IEBA
IGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWIKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShjYW52YXNUYWcpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJIVE1MQ2FudmFzKiBjYW52YXMgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJIVE1MQ2FudmFzKj4obV9yZW5kZXJlcik7CisgICAgICAgICAgICBSZW5kZXJIVE1MQ2FudmFz
KiBjYW52YXMgPSB0b1JlbmRlckhUTUxDYW52YXMobV9yZW5kZXJlcik7CiAgICAgICAgICAgICBp
ZiAoY2FudmFzLT5oZWlnaHQoKSA8PSAxIHx8IGNhbnZhcy0+d2lkdGgoKSA8PSAxKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAkocmV2aXNp
b24gNDY3NzcpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxp
dHlTbGlkZXJUaHVtYjo6ZWxlbWVuCiAgICAgaWYgKCFtX3BhcmVudFNsaWRlci0+cmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIEludFJlY3QgaW50UmVjdCA9IHN0
YXRpY19jYXN0PFJlbmRlclNsaWRlcio+KG1fcGFyZW50U2xpZGVyLT5yZW5kZXJlcigpKS0+dGh1
bWJSZWN0KCk7CisgICAgSW50UmVjdCBpbnRSZWN0ID0gdG9SZW5kZXJTbGlkZXIobV9wYXJlbnRT
bGlkZXItPnJlbmRlcmVyKCkpLT50aHVtYlJlY3QoKTsKICAgICBGbG9hdFF1YWQgZmxvYXRRdWFk
ID0gbV9wYXJlbnRTbGlkZXItPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRS
ZWN0KGludFJlY3QpKTsKIAogICAgIHJldHVybiBmbG9hdFF1YWQuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3Jl
L2RvbS9JbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHZv
aWQgSW5wdXRFbGVtZW50Ojp1cGRhdGVQbGFjZWhvbGRlclZpc2kKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmICFpbnB1dEVsZW1lbnQtPnBsYWNlaG9sZGVyKCkuaXNF
bXB0eSgpKTsKIAogICAgIGlmICgob2xkUGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUgIT0gZGF0
YS5wbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpIHx8IHBsYWNlaG9sZGVyVmFsdWVDaGFuZ2Vk
KSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUqPihlbGVtZW50LT5yZW5kZXJlcigpKS0+dXBkYXRlUGxhY2Vob2xk
ZXJWaXNpYmlsaXR5KCk7CisgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVs
ZW1lbnQtPnJlbmRlcmVyKCkpLT51cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoKTsKIH0KIAog
dm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShJbnB1dEVsZW1lbnREYXRh
JiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCwgYm9v
bCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pCkluZGV4OiBXZWJDb3JlL2RvbS9TZWxlY3RFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TZWxlY3RFbGVtZW50LmNwcAkocmV2
aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL2RvbS9TZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgU2VsZWN0RWxlbWVudDo6c2Nyb2xsVG9TZWxl
Y3Rpb24oU2UKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0
Qm94Kj4ocmVuZGVyZXIpLT5zZWxlY3Rpb25DaGFuZ2VkKCk7CisgICAgICAgIHRvUmVuZGVyTGlz
dEJveChyZW5kZXJlciktPnNlbGVjdGlvbkNoYW5nZWQoKTsKIH0KIAogdm9pZCBTZWxlY3RFbGVt
ZW50OjpyZWNhbGNTdHlsZShTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWxlbWVu
dCkKQEAgLTIyNiw5ICsyMjYsOSBAQCB2b2lkIFNlbGVjdEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFNl
bGVjdEVsCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7
CiAgICAgaWYgKGVsZW1lbnQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpICYmIHJlbmRlcmVyKSB7
CiAgICAgICAgIGlmIChkYXRhLnVzZXNNZW51TGlzdCgpKQotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyTWVudUxpc3QqPihyZW5kZXJlciktPnNldE9wdGlvbnNDaGFuZ2VkKHRydWUpOwor
ICAgICAgICAgICAgdG9SZW5kZXJNZW51TGlzdChyZW5kZXJlciktPnNldE9wdGlvbnNDaGFuZ2Vk
KHRydWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0
Qm94Kj4ocmVuZGVyZXIpLT5zZXRPcHRpb25zQ2hhbmdlZCh0cnVlKTsKKyAgICAgICAgICAgIHRv
UmVuZGVyTGlzdEJveChyZW5kZXJlciktPnNldE9wdGlvbnNDaGFuZ2VkKHRydWUpOwogICAgIH0g
ZWxzZSBpZiAoZGF0YS5zaG91bGRSZWNhbGNMaXN0SXRlbXMoKSkKICAgICAgICAgcmVjYWxjTGlz
dEl0ZW1zKGRhdGEsIGVsZW1lbnQpOwogfQpAQCAtMjM5LDkgKzIzOSw5IEBAIHZvaWQgU2VsZWN0
RWxlbWVudDo6c2V0UmVjYWxjTGlzdEl0ZW1zKFMKICAgICBkYXRhLnNldEFjdGl2ZVNlbGVjdGlv
bkFuY2hvckluZGV4KC0xKTsgLy8gTWFudWFsIHNlbGVjdGlvbiBhbmNob3IgaXMgcmVzZXQgd2hl
biBtYW5pcHVsYXRpbmcgdGhlIHNlbGVjdCBwcm9ncmFtbWF0aWNhbGx5LgogICAgIGlmIChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICBpZiAo
ZGF0YS51c2VzTWVudUxpc3QoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlck1lbnVM
aXN0Kj4ocmVuZGVyZXIpLT5zZXRPcHRpb25zQ2hhbmdlZCh0cnVlKTsKKyAgICAgICAgICAgIHRv
UmVuZGVyTWVudUxpc3QocmVuZGVyZXIpLT5zZXRPcHRpb25zQ2hhbmdlZCh0cnVlKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KHJlbmRlcmVy
KS0+c2V0T3B0aW9uc0NoYW5nZWQodHJ1ZSk7CisgICAgICAgICAgICB0b1JlbmRlckxpc3RCb3go
cmVuZGVyZXIpLT5zZXRPcHRpb25zQ2hhbmdlZCh0cnVlKTsKICAgICB9CiAgICAgZWxlbWVudC0+
c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogfQpAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQgU2VsZWN0
RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnQKICAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNl
bGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiBk
aXNwYXRjaGluZyBjaGFuZ2UgZXZlbnRzIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LAogICAgICAg
ICAgICAgLy8gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFu
Z2VkLCB3aGljaCBnZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlvbiBm
cm9tIHRoZSBtZW51LgogICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oZGF0YSwgZWxlbWVu
dCk7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyTWVudUxpc3QqPihlbGVtZW50LT5yZW5kZXJlcigpKSkKKyAgICAgICAgICAgIGlm
IChSZW5kZXJNZW51TGlzdCogbWVudUxpc3QgPSB0b1JlbmRlck1lbnVMaXN0KGVsZW1lbnQtPnJl
bmRlcmVyKCkpKQogICAgICAgICAgICAgICAgIG1lbnVMaXN0LT5zaG93UG9wdXAoKTsKICAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICB9CkBAIC02MDksNyArNjA5LDcgQEAgdm9p
ZCBTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFdmVudAogICAgICAgICAgICAgLy8gU2F2
ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlv
biB3aGVuIGRpc3BhdGNoaW5nIGNoYW5nZSBldmVudHMgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgs
CiAgICAgICAgICAgICAvLyB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIFJlbmRlck1lbnVMaXN0Ojp2
YWx1ZUNoYW5nZWQsIHdoaWNoIGdldHMgY2FsbGVkIGFmdGVyIHRoZSB1c2VyIG1ha2VzIGEgc2Vs
ZWN0aW9uIGZyb20gdGhlIG1lbnUuCiAgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbihkYXRh
LCBlbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChSZW5kZXJNZW51TGlzdCogbWVudUxpc3QgPSBz
dGF0aWNfY2FzdDxSZW5kZXJNZW51TGlzdCo+KGVsZW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAg
ICAgICAgaWYgKFJlbmRlck1lbnVMaXN0KiBtZW51TGlzdCA9IHRvUmVuZGVyTWVudUxpc3QoZWxl
bWVudC0+cmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgbWVudUxpc3QtPnNob3dQb3B1cCgp
OwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIH0KQEAgLTYxOSw3ICs2MTks
NyBAQCB2b2lkIFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50CiAgICAgICAgICAg
ICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcg
c2VsZWN0aW9uIHdoZW4gZGlzcGF0Y2hpbmcgY2hhbmdlIGV2ZW50cyBkdXJpbmcgc2V0U2VsZWN0
ZWRJbmRleCwKICAgICAgICAgICAgIC8vIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gUmVuZGVyTWVu
dUxpc3Q6OnZhbHVlQ2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxsZWQgYWZ0ZXIgdGhlIHVzZXIgbWFr
ZXMgYSBzZWxlY3Rpb24gZnJvbSB0aGUgbWVudS4KICAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0
aW9uKGRhdGEsIGVsZW1lbnQpOwotICAgICAgICAgICAgaWYgKFJlbmRlck1lbnVMaXN0KiBtZW51
TGlzdCA9IHN0YXRpY19jYXN0PFJlbmRlck1lbnVMaXN0Kj4oZWxlbWVudC0+cmVuZGVyZXIoKSkp
CisgICAgICAgICAgICBpZiAoUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0ID0gdG9SZW5kZXJNZW51
TGlzdChlbGVtZW50LT5yZW5kZXJlcigpKSkKICAgICAgICAgICAgICAgICBtZW51TGlzdC0+c2hv
d1BvcHVwKCk7CiAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlm
IChrZXlDb2RlID09ICdccicpIHsKQEAgLTY0Miw3ICs2NDIsNyBAQCB2b2lkIFNlbGVjdEVsZW1l
bnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50CiAKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRp
Y19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAg
ICAgICAgZWxlbWVudC0+Zm9jdXMoKTsKLSAgICAgICAgaWYgKFJlbmRlck1lbnVMaXN0KiBtZW51
TGlzdCA9IHN0YXRpY19jYXN0PFJlbmRlck1lbnVMaXN0Kj4oZWxlbWVudC0+cmVuZGVyZXIoKSkp
IHsKKyAgICAgICAgaWYgKFJlbmRlck1lbnVMaXN0KiBtZW51TGlzdCA9IHRvUmVuZGVyTWVudUxp
c3QoZWxlbWVudC0+cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgIGlmIChtZW51TGlzdC0+cG9w
dXBJc1Zpc2libGUoKSkKICAgICAgICAgICAgICAgICBtZW51TGlzdC0+aGlkZVBvcHVwKCk7CiAg
ICAgICAgICAgICBlbHNlIHsKQEAgLTY2Niw3ICs2NjYsNyBAQCB2b2lkIFNlbGVjdEVsZW1lbnQ6
Omxpc3RCb3hEZWZhdWx0RXZlbnRICiAgICAgICAgIC8vIENvbnZlcnQgdG8gY29vcmRzIHJlbGF0
aXZlIHRvIHRoZSBsaXN0IGJveCBpZiBuZWVkZWQuCiAgICAgICAgIE1vdXNlRXZlbnQqIG1vdXNl
RXZlbnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwogICAgICAgICBJbnRQb2lu
dCBsb2NhbE9mZnNldCA9IHJvdW5kZWRJbnRQb2ludChlbGVtZW50LT5yZW5kZXJlcigpLT5hYnNv
bHV0ZVRvTG9jYWwobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSkp
OwotICAgICAgICBpbnQgbGlzdEluZGV4ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KGVs
ZW1lbnQtPnJlbmRlcmVyKCkpLT5saXN0SW5kZXhBdE9mZnNldChsb2NhbE9mZnNldC54KCksIGxv
Y2FsT2Zmc2V0LnkoKSk7CisgICAgICAgIGludCBsaXN0SW5kZXggPSB0b1JlbmRlckxpc3RCb3go
ZWxlbWVudC0+cmVuZGVyZXIoKSktPmxpc3RJbmRleEF0T2Zmc2V0KGxvY2FsT2Zmc2V0LngoKSwg
bG9jYWxPZmZzZXQueSgpKTsKICAgICAgICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7CiAgICAgICAg
ICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBu
ZXcgc2VsZWN0aW9uIHdoZW4gZGlzcGF0Y2hpbmcgY2hhbmdlIGV2ZW50cyBkdXJpbmcgbW91c2V1
cCwgb3IgYWZ0ZXIgYXV0b3Njcm9sbCBmaW5pc2hlcy4KICAgICAgICAgICAgIHNhdmVMYXN0U2Vs
ZWN0aW9uKGRhdGEsIGVsZW1lbnQpOwpAQCAtNzU5LDcgKzc1OSw3IEBAIHZvaWQgU2VsZWN0RWxl
bWVudDo6bGlzdEJveERlZmF1bHRFdmVudEgKICAgICAgICAgICAgICAgICBzZXRBY3RpdmVTZWxl
Y3Rpb25BbmNob3JJbmRleChkYXRhLCBlbGVtZW50LCBkYXRhLmFjdGl2ZVNlbGVjdGlvbkVuZElu
ZGV4KCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJM
aXN0Qm94Kj4oZWxlbWVudC0+cmVuZGVyZXIoKSktPnNjcm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlz
dEluZGV4KGVuZEluZGV4KTsKKyAgICAgICAgICAgIHRvUmVuZGVyTGlzdEJveChlbGVtZW50LT5y
ZW5kZXJlcigpKS0+c2Nyb2xsVG9SZXZlYWxFbGVtZW50QXRMaXN0SW5kZXgoZW5kSW5kZXgpOwog
ICAgICAgICAgICAgdXBkYXRlTGlzdEJveFNlbGVjdGlvbihkYXRhLCBlbGVtZW50LCBkZXNlbGVj
dE90aGVycyk7CiAgICAgICAgICAgICBsaXN0Qm94T25DaGFuZ2UoZGF0YSwgZWxlbWVudCk7CiAg
ICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2Vi
Q29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkK
ICAgICAgICAgICAgIHdoaWxlIChsaXN0Q2hpbGROb2RlICYmICFsaXN0Q2hpbGROb2RlLT5oYXNU
YWdOYW1lKGxpVGFnKSkKICAgICAgICAgICAgICAgICBsaXN0Q2hpbGROb2RlID0gbGlzdENoaWxk
Tm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmIChsaXN0Q2hpbGROb2RlICYmIGxp
c3RDaGlsZE5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0
ZShzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY2xvbmVkQ2hpbGQuZ2V0KCkpLCBzdGFydEF0dHIsIFN0
cmluZzo6bnVtYmVyKHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtKj4obGlzdENoaWxkTm9kZS0+
cmVuZGVyZXIoKSktPnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRl
KHN0YXRpY19jYXN0PEVsZW1lbnQqPihjbG9uZWRDaGlsZC5nZXQoKSksIHN0YXJ0QXR0ciwgU3Ry
aW5nOjpudW1iZXIodG9SZW5kZXJMaXN0SXRlbShsaXN0Q2hpbGROb2RlLT5yZW5kZXJlcigpKS0+
dmFsdWUoKSkpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgYXBwZW5kTm9kZShj
bG9uZWRDaGlsZC5nZXQoKSwgY2xvbmVkQW5jZXN0b3IuZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEFwcGxldEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBSZW5k
ZXJXaWRnZXQqIEhUTUxBcHBsZXRFbGVtZW50OjpyZW5kZXJXCiAgICAgaWYgKCFzZXR0aW5ncyB8
fCAhc2V0dGluZ3MtPmlzSmF2YUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBS
ZW5kZXJBcHBsZXQqIGFwcGxldCA9IHN0YXRpY19jYXN0PFJlbmRlckFwcGxldCo+KHJlbmRlcmVy
KCkpOworICAgIFJlbmRlckFwcGxldCogYXBwbGV0ID0gdG9SZW5kZXJBcHBsZXQocmVuZGVyZXIo
KSk7CiAgICAgaWYgKGFwcGxldCkKICAgICAgICAgYXBwbGV0LT5jcmVhdGVXaWRnZXRJZk5lY2Vz
c2FyeSgpOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2
Nzc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk1LDE0ICsxOTUsMTUgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQog
ICAgIGlmIChtXzJEQ29udGV4dCkKICAgICAgICAgbV8yRENvbnRleHQtPnJlc2V0KCk7CiAKLSAg
ICBpZiAoUmVuZGVyT2JqZWN0KiBybyA9IHJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGlmIChtX3JlbmRlcmVy
SXNDYW52YXMpIHsKICAgICAgICAgICAgIGlmIChvbGRTaXplICE9IG1fc2l6ZSkKLSAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJIVE1MQ2FudmFzKj4ocm8pLT5jYW52YXNTaXplQ2hh
bmdlZCgpOworICAgICAgICAgICAgICAgIHRvUmVuZGVySFRNTENhbnZhcyhyZW5kZXJlciktPmNh
bnZhc1NpemVDaGFuZ2VkKCk7CiAgICAgICAgICAgICBpZiAoaGFkSW1hZ2VCdWZmZXIpCi0gICAg
ICAgICAgICAgICAgcm8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgICAgICByZW5kZXJlci0+cmVw
YWludCgpOwogICAgICAgICB9Ci0gICAgICAgIAorICAgIH0KKwogICAgIGlmIChtX29ic2VydmVy
KQogICAgICAgICBtX29ic2VydmVyLT5jYW52YXNSZXNpemVkKHRoaXMpOwogfQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MRW1iZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEVtYmVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsxODIsNyBAQCB2
b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+
dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAgIGlmIChtX25lZWRXaWRnZXRVcGRhdGUgJiYgcmVu
ZGVyZXIoKSAmJiAhaXNJbWFnZVR5cGUoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyUGFy
dE9iamVjdCo+KHJlbmRlcmVyKCkpLT51cGRhdGVXaWRnZXQodHJ1ZSk7CisgICAgICAgIHRvUmVu
ZGVyUGFydE9iamVjdChyZW5kZXJlcigpKS0+dXBkYXRlV2lkZ2V0KHRydWUpOwogfQogCiB2b2lk
IEhUTUxFbWJlZEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsOSArMTkz
LDEwIEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmF0dGFjaCgpCiAKICAgICBIVE1MRnJh
bWVPd25lckVsZW1lbnQ6OmF0dGFjaCgpOwogICAgIAotICAgIGlmIChSZW5kZXJQYXJ0KiByZW5k
ZXJQYXJ0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyUGFydCo+KHJlbmRlcmVyKCkpKQorICAgIGlmIChS
ZW5kZXJQYXJ0KiByZW5kZXJQYXJ0ID0gdG9SZW5kZXJQYXJ0KHJlbmRlcmVyKCkpKSB7CiAgICAg
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb250ZW50RnJhbWUoKSkKICAgICAgICAgICAgIHJlbmRl
clBhcnQtPnNldFdpZGdldChmcmFtZS0+dmlldygpKTsKKyAgICB9CiB9CiAKIEtVUkwgSFRNTEZy
YW1lRWxlbWVudEJhc2U6OmxvY2F0aW9uKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
RnJhbWVTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1l
U2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZVNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBI
VE1MRnJhbWVTZXRFbGVtZW50OjphdHRhY2goKQogdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiB7CiAgICAgaWYgKGV2dC0+aXNNb3VzZUV2
ZW50KCkgJiYgIW5vcmVzaXplICYmIHJlbmRlcmVyKCkpIHsKLSAgICAgICAgaWYgKHN0YXRpY19j
YXN0PFJlbmRlckZyYW1lU2V0Kj4ocmVuZGVyZXIoKSktPnVzZXJSZXNpemUoc3RhdGljX2Nhc3Q8
TW91c2VFdmVudCo+KGV2dCkpKSB7CisgICAgICAgIGlmICh0b1JlbmRlckZyYW1lU2V0KHJlbmRl
cmVyKCkpLT51c2VyUmVzaXplKHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpKSkgewogICAg
ICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2
Nzc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgSFRNTElGcmFtZUVsZW1lbnQ6OmF0dGFjaCgpCiB7
CiAgICAgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmF0dGFjaCgpOwogCi0gICAgaWYgKFJlbmRlclBh
cnRPYmplY3QqIHJlbmRlclBhcnRPYmplY3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJQYXJ0T2JqZWN0
Kj4ocmVuZGVyZXIoKSkpCisgICAgaWYgKFJlbmRlclBhcnRPYmplY3QqIHJlbmRlclBhcnRPYmpl
Y3QgPSB0b1JlbmRlclBhcnRPYmplY3QocmVuZGVyZXIoKSkpCiAgICAgICAgIHJlbmRlclBhcnRP
YmplY3QtPnVwZGF0ZVdpZGdldChmYWxzZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzE0LDcgKzEzMTQsNyBAQCB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAgICAgICAgICAgICAgICAgbV9hY3RpdmVTdWJt
aXQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpbnB1dFR5cGUo
KSA9PSBGSUxFICYmIHJlbmRlcmVyKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbCo+KHJlbmRlcmVyKCkpLT5jbGljaygpOworICAgICAgICAgICAgdG9S
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbChyZW5kZXJlcigpKS0+Y2xpY2soKTsKICAgICB9CiAKICAg
ICAvLyBVc2Uga2V5IHByZXNzIGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91
c2UgZXZlbnRzCkBAIC0xNTAxLDEwICsxNTAxLDEwIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGwKICAgICAgICAgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudChtX2RhdGEsIHRoaXMsIGRvY3VtZW50KCksIGV2dCk7CiAKICAgICBpZiAo
aXNUZXh0RmllbGQoKSAmJiByZW5kZXJlcigpICYmIChldnQtPmlzTW91c2VFdmVudCgpIHx8IGV2
dC0+aXNEcmFnRXZlbnQoKSB8fCBldnQtPmlzV2hlZWxFdmVudCgpIHx8IGV2dC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQgfHwgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZv
Y3VzRXZlbnQpKQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUqPihyZW5kZXJlcigpKS0+Zm9yd2FyZEV2ZW50KGV2dCk7CisgICAgICAgIHRvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKHJlbmRlcmVyKCkpLT5mb3J3YXJkRXZlbnQoZXZ0KTsKIAogICAg
IGlmIChpbnB1dFR5cGUoKSA9PSBSQU5HRSAmJiByZW5kZXJlcigpICYmIChldnQtPmlzTW91c2VF
dmVudCgpIHx8IGV2dC0+aXNEcmFnRXZlbnQoKSB8fCBldnQtPmlzV2hlZWxFdmVudCgpKSkKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyU2xpZGVyKj4ocmVuZGVyZXIoKSktPmZvcndhcmRFdmVu
dChldnQpOworICAgICAgICB0b1JlbmRlclNsaWRlcihyZW5kZXJlcigpKS0+Zm9yd2FyZEV2ZW50
KGV2dCk7CiAKICAgICBpZiAoIWNhbGxCYXNlQ2xhc3NFYXJseSAmJiAhZXZ0LT5kZWZhdWx0SGFu
ZGxlZCgpKQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0
RXZlbnRIYW5kbGVyKGV2dCk7CkBAIC0xNzA0LDE0ICsxNzA0LDE0IEBAIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6YWRkU2VhcmNoUmVzdWx0KCkKIHsKICAgICBBU1NFUlQoaXNTZWFyY2hGaWVsZCgp
KTsKICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKj4ocmVuZGVyZXIoKSktPmFkZFNlYXJjaFJlc3VsdCgpOworICAgICAg
ICB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJlcigpKS0+YWRkU2VhcmNoUmVz
dWx0KCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6b25TZWFyY2goKQogewogICAgIEFT
U0VSVChpc1NlYXJjaEZpZWxkKCkpOwogICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqPihyZW5kZXJlcigpKS0+c3RvcFNl
YXJjaEV2ZW50VGltZXIoKTsKKyAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUo
cmVuZGVyZXIoKSktPnN0b3BTZWFyY2hFdmVudFRpbWVyKCk7CiAgICAgZGlzcGF0Y2hFdmVudChl
dmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIHRydWUsIGZhbHNlKTsKIH0KIApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
TElFbGVtZW50LmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExJRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2LDkgQEAgdm9pZCBIVE1MTElFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZQogICAgICAgICBtX3JlcXVlc3RlZFZhbHVlID0gYXR0
ci0+dmFsdWUoKS50b0ludCgpOwogICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigp
LT5pc0xpc3RJdGVtKCkpIHsKICAgICAgICAgICAgIGlmIChtX3JlcXVlc3RlZFZhbHVlID4gMCkK
LSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+KHJlbmRlcmVyKCkp
LT5zZXRFeHBsaWNpdFZhbHVlKG1fcmVxdWVzdGVkVmFsdWUpOworICAgICAgICAgICAgICAgIHRv
UmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIoKSktPnNldEV4cGxpY2l0VmFsdWUobV9yZXF1ZXN0ZWRW
YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVu
ZGVyTGlzdEl0ZW0qPihyZW5kZXJlcigpKS0+Y2xlYXJFeHBsaWNpdFZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgdG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcigpKS0+Y2xlYXJFeHBsaWNpdFZhbHVl
KCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikg
ewogICAgICAgICBpZiAoYXR0ci0+dmFsdWUoKSA9PSAiYSIpCkBAIC04NCw3ICs4NCw3IEBAIHZv
aWQgSFRNTExJRWxlbWVudDo6YXR0YWNoKCkKICAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7CiAK
ICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAg
ICAgUmVuZGVyTGlzdEl0ZW0qIHJlbmRlciA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtKj4o
cmVuZGVyZXIoKSk7CisgICAgICAgIFJlbmRlckxpc3RJdGVtKiByZW5kZXIgPSB0b1JlbmRlckxp
c3RJdGVtKHJlbmRlcmVyKCkpOwogCiAgICAgICAgIC8vIEZpbmQgdGhlIGVuY2xvc2luZyBsaXN0
IG5vZGUuCiAgICAgICAgIE5vZGUqIGxpc3ROb2RlID0gMDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjUsNyArNzY1LDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKE1lZAogCiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlf
Rk9SX1ZJREVPKQogICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1ZpZGVv
KCkpIHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclZpZGVvKj4ocmVuZGVyZXIoKSkt
PnZpZGVvU2l6ZUNoYW5nZWQoKTsKKyAgICAgICAgICAgIHRvUmVuZGVyVmlkZW8ocmVuZGVyZXIo
KSktPnZpZGVvU2l6ZUNoYW5nZWQoKTsKICAgICAgICAgfQogI2VuZGlmICAgICAgICAKICAgICAg
ICAgbV9kZWxheWluZ1RoZUxvYWRFdmVudCA9IGZhbHNlOwpAQCAtMTM0MCw3ICsxMzQwLDcgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckR1cmF0aQogICAgIGlmIChyZW5kZXJl
cigpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiAgICAgICAg
IGlmIChyZW5kZXJlcigpLT5pc1ZpZGVvKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5k
ZXJWaWRlbyo+KHJlbmRlcmVyKCkpLT52aWRlb1NpemVDaGFuZ2VkKCk7CisgICAgICAgICAgICB0
b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkpLT52aWRlb1NpemVDaGFuZ2VkKCk7CiAgICAgfQogI2Vu
ZGlmICAgICAgICAKICAgICBlbmRQcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpOwpAQCAt
MTM4MCw3ICsxMzgwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllclNpemVD
aAogICAgIGJlZ2luUHJvY2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2soKTsKICNpZiAhRU5BQkxF
KFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIo
KS0+aXNWaWRlbygpKQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJWaWRlbyo+KHJlbmRlcmVy
KCkpLT52aWRlb1NpemVDaGFuZ2VkKCk7CisgICAgICAgIHRvUmVuZGVyVmlkZW8ocmVuZGVyZXIo
KSktPnZpZGVvU2l6ZUNoYW5nZWQoKTsKICNlbmRpZiAgICAgICAgCiAgICAgZW5kUHJvY2Vzc2lu
Z01lZGlhUGxheWVyQ2FsbGJhY2soKTsKIH0KQEAgLTEzOTAsNyArMTM5MCw3IEBAIGJvb2wgSFRN
TE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJSZW5kZXIKIHsKICAgICBpZiAocmVuZGVyZXIoKSAm
JiByZW5kZXJlcigpLT5pc1ZpZGVvKCkpIHsKICAgICAgICAgQVNTRVJUKHJlbmRlcmVyKCktPnZp
ZXcoKSk7Ci0gICAgICAgIHJldHVybiByZW5kZXJlcigpLT52aWV3KCktPmNvbXBvc2l0b3IoKS0+
Y2FuQWNjZWxlcmF0ZVZpZGVvUmVuZGVyaW5nKHN0YXRpY19jYXN0PFJlbmRlclZpZGVvKj4ocmVu
ZGVyZXIoKSkpOworICAgICAgICByZXR1cm4gcmVuZGVyZXIoKS0+dmlldygpLT5jb21wb3NpdG9y
KCktPmNhbkFjY2VsZXJhdGVWaWRlb1JlbmRlcmluZyh0b1JlbmRlclZpZGVvKHJlbmRlcmVyKCkp
KTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTM5OCw3ICsxMzk4LDcgQEAgYm9v
bCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllclJlbmRlcgogR3JhcGhpY3NMYXllciogSFRN
TE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJHcmFwaGljc0xheWVyKE1lZGlhUGxheWVyKikKIHsK
ICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1ZpZGVvKCkpCi0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJWaWRlbyo+KHJlbmRlcmVyKCkpLT52aWRlb0dyYXBoaWNz
TGF5ZXIoKTsKKyAgICAgICAgcmV0dXJuIHRvUmVuZGVyVmlkZW8ocmVuZGVyZXIoKSktPnZpZGVv
R3JhcGhpY3NMYXllcigpOwogICAgIHJldHVybiAwOwogfQogI2VuZGlmCkBAIC0xNjIwLDcgKzE2
MjAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAgICAgICAg
IHdpZGdldC0+aGFuZGxlRXZlbnQoZXZlbnQpOwogI2Vsc2UKICAgICBpZiAocmVuZGVyZXIoKSAm
JiByZW5kZXJlcigpLT5pc01lZGlhKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlck1lZGlh
Kj4ocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldmVudCk7CisgICAgICAgIHRvUmVuZGVyTWVk
aWEocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldmVudCk7CiAgICAgaWYgKGV2ZW50LT5kZWZh
dWx0SGFuZGxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgSFRNTEVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOwpAQCAtMTYzNyw2ICsxNjM3LDcgQEAgYm9vbCBIVE1MTWVkaWFF
bGVtZW50Ojpwcm9jZXNzaW5nVXNlckdlcwogfQogCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9G
T1JfVklERU8pCisKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVsaXZlck5vdGlmaWNhdGlvbihN
ZWRpYVBsYXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSBub3RpZmljYXRpb24pCiB7CiAgICAgaWYg
KG5vdGlmaWNhdGlvbiA9PSBNZWRpYVBsYXllck5vdGlmaWNhdGlvblBsYXlQYXVzZUJ1dHRvblBy
ZXNzZWQpIHsKQEAgLTE2NzQsOCArMTY3NSw5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Zmlu
aXNoUGFyc2luZ0NoaWwKICAgICAKICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVk
KCk7CiAgICAgaWYgKG1fbmVlZFdpZGdldFVwZGF0ZSAmJiByZW5kZXJlcigpKQotICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJQYXJ0T2JqZWN0Kj4ocmVuZGVyZXIoKSktPnVwZGF0ZVdpZGdldCh0
cnVlKTsKKyAgICAgICAgdG9SZW5kZXJQYXJ0T2JqZWN0KHJlbmRlcmVyKCkpLT51cGRhdGVXaWRn
ZXQodHJ1ZSk7CiB9CisKICNlbmRpZgogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9MaXN0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEhUTUxPTGlzdEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgIG1fc3RhcnQgPSBzdGFydDsKICAgICAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGNoaWxkID0gcmVuZGVyZXIoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRJblByZU9yZGVyKHJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlz
TGlzdEl0ZW0oKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+
KGNoaWxkKS0+dXBkYXRlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICB0b1JlbmRlckxpc3RJdGVt
KGNoaWxkKS0+dXBkYXRlVmFsdWUoKTsKICAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICBI
VE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxP
YmplY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQg
SFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBk
YXRlU3R5bGVJZk5lZWRlZCgpOwogICAgIGlmIChtX25lZWRXaWRnZXRVcGRhdGUgJiYgcmVuZGVy
ZXIoKSAmJiAhbV91c2VGYWxsYmFja0NvbnRlbnQgJiYgIWlzSW1hZ2VUeXBlKCkpCi0gICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihyZW5kZXJlcigpKS0+dXBkYXRlV2lkZ2V0
KHRydWUpOworICAgICAgICB0b1JlbmRlclBhcnRPYmplY3QocmVuZGVyZXIoKSktPnVwZGF0ZVdp
ZGdldCh0cnVlKTsKIH0KIAogdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0No
aWxkcmVuKCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9u
IDQ2Nzc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjcsNyArMjY3LDcgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp1cGRh
dGVGb2N1c0FwcAogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAocmVuZGVyZXIoKSAmJiAoZXZlbnQtPmlzTW91c2VF
dmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5pc1doZWVsRXZlbnQoKSB8
fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpKQotICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZSo+KHJlbmRlcmVyKCkpLT5mb3J3YXJk
RXZlbnQoZXZlbnQpOworICAgICAgICB0b1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lKHJlbmRl
cmVyKCkpLT5mb3J3YXJkRXZlbnQoZXZlbnQpOwogCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9EcmFn
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9wYWdlL0RyYWdDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc5LDExICszNzksMTAgQEAgYm9vbCBEcmFn
Q29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAgICAgICBpZiAoZmlsZW5hbWVzLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAvLyBVZ2x5LiAg
Rm9yIHNlY3VyaXR5IG5vbmUgb2YgdGhlIEFQSSdzIGF2YWlsYWJsZSB0byB1cyB0byBzZXQgdGhl
IGlucHV0IHZhbHVlCi0gICAgICAgIC8vIG9uIGZpbGUgaW5wdXRzLiAgRXZlbiBmb3JjaW5nIGEg
Y2hhbmdlIGluIEhUTUxJbnB1dEVsZW1lbnQgZG9lc24ndCB3b3JrIGFzCi0gICAgICAgIC8vIFJl
bmRlckZpbGVVcGxvYWRDb250cm9sIGNsZWFycyB0aGUgZmlsZSB3aGVuIGRvaW5nIHVwZGF0ZUZy
b21FbGVtZW50KCkKLSAgICAgICAgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqIHJlbmRlcmVyID0g
c3RhdGljX2Nhc3Q8UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wqPihmaWxlSW5wdXQtPnJlbmRlcmVy
KCkpOwotCisgICAgICAgIC8vIFVnbHkuIEZvciBzZWN1cml0eSBub25lIG9mIHRoZSBBUElzIGF2
YWlsYWJsZSB0byB1cyBjYW4gc2V0IHRoZSBpbnB1dCB2YWx1ZQorICAgICAgICAvLyBvbiBmaWxl
IGlucHV0cy4gRXZlbiBmb3JjaW5nIGEgY2hhbmdlIGluIEhUTUxJbnB1dEVsZW1lbnQgZG9lc24n
dCB3b3JrIGFzCisgICAgICAgIC8vIFJlbmRlckZpbGVVcGxvYWRDb250cm9sIGNsZWFycyB0aGUg
ZmlsZSB3aGVuIGRvaW5nIHVwZGF0ZUZyb21FbGVtZW50KCkuCisgICAgICAgIFJlbmRlckZpbGVV
cGxvYWRDb250cm9sKiByZW5kZXJlciA9IHRvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2woZmlsZUlu
cHV0LT5yZW5kZXJlcigpKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDQ2Nzc3KQor
KysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0NSwx
MCArOTQ1LDEwIEBAIEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCAKICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlciA/IHJlbmRlcmVyLT5zdHlsZSgpIDogMDsK
IAogICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNGcmFtZVNldCgpKSB7Ci0gICAgICAg
IFJlbmRlckZyYW1lU2V0KiBmcyA9IHN0YXRpY19jYXN0PFJlbmRlckZyYW1lU2V0Kj4ocmVuZGVy
ZXIpOwotICAgICAgICBpZiAoZnMtPmNhblJlc2l6ZVJvdyhldmVudC5sb2NhbFBvaW50KCkpKQor
ICAgICAgICBSZW5kZXJGcmFtZVNldCogZnJhbWVTZXRSZW5kZXJlciA9IHRvUmVuZGVyRnJhbWVT
ZXQocmVuZGVyZXIpOworICAgICAgICBpZiAoZnJhbWVTZXRSZW5kZXJlci0+Y2FuUmVzaXplUm93
KGV2ZW50LmxvY2FsUG9pbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gcm93UmVzaXplQ3Vyc29y
KCk7Ci0gICAgICAgIGlmIChmcy0+Y2FuUmVzaXplQ29sdW1uKGV2ZW50LmxvY2FsUG9pbnQoKSkp
CisgICAgICAgIGlmIChmcmFtZVNldFJlbmRlcmVyLT5jYW5SZXNpemVDb2x1bW4oZXZlbnQubG9j
YWxQb2ludCgpKSkKICAgICAgICAgICAgIHJldHVybiBjb2x1bW5SZXNpemVDdXJzb3IoKTsKICAg
ICB9CiAKQEAgLTI0MTYsNyArMjQxNiw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjYXBzTG9ja1N0
YXRlTWF5SGF2ZUMKICAgICBpZiAoTm9kZSogbm9kZSA9IGQtPmZvY3VzZWROb2RlKCkpIHsKICAg
ICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAg
ICAgIGlmIChyLT5pc1RleHRGaWVsZCgpKQotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZSo+KHIpLT5jYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5n
ZWQoKTsKKyAgICAgICAgICAgICAgICB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShyKS0+
Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4
OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE1NCw3ICsxMTU0LDcgQEAgUmVuZGVyUGFydCogRnJhbWU6Om93bmVyUmVu
ZGVyZXIoKSBjb25zdAogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODU4NQogICAgIGlmICghb2JqZWN0LT5pc1JlbmRlclBhcnQoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclBhcnQqPihvYmplY3QpOworICAg
IHJldHVybiB0b1JlbmRlclBhcnQob2JqZWN0KTsKIH0KIAogYm9vbCBGcmFtZTo6aXNEaXNjb25u
ZWN0ZWQoKSBjb25zdApJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NCwxMSArMjQ0LDEx
IEBAIHZvaWQgRnJhbWVWaWV3OjpkZXRhY2hDdXN0b21TY3JvbGxiYXJzKCkKICAgICBSZW5kZXJC
b3gqIHJlbmRlckJveCA9IGJvZHktPnJlbmRlckJveCgpOwogCiAgICAgU2Nyb2xsYmFyKiBob3Jp
em9udGFsQmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIGlmIChob3Jpem9udGFsQmFy
ICYmIGhvcml6b250YWxCYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkgJiYgcmVpbnRlcnByZXRfY2Fz
dDxSZW5kZXJTY3JvbGxiYXIqPihob3Jpem9udGFsQmFyKS0+b3duaW5nUmVuZGVyZXIoKSA9PSBy
ZW5kZXJCb3gpCisgICAgaWYgKGhvcml6b250YWxCYXIgJiYgaG9yaXpvbnRhbEJhci0+aXNDdXN0
b21TY3JvbGxiYXIoKSAmJiB0b1JlbmRlclNjcm9sbGJhcihob3Jpem9udGFsQmFyKS0+b3duaW5n
UmVuZGVyZXIoKSA9PSByZW5kZXJCb3gpCiAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxi
YXIoZmFsc2UpOwogCiAgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbEJhciA9IHZlcnRpY2FsU2Nyb2xs
YmFyKCk7Ci0gICAgaWYgKHZlcnRpY2FsQmFyICYmIHZlcnRpY2FsQmFyLT5pc0N1c3RvbVNjcm9s
bGJhcigpICYmIHJlaW50ZXJwcmV0X2Nhc3Q8UmVuZGVyU2Nyb2xsYmFyKj4odmVydGljYWxCYXIp
LT5vd25pbmdSZW5kZXJlcigpID09IHJlbmRlckJveCkKKyAgICBpZiAodmVydGljYWxCYXIgJiYg
dmVydGljYWxCYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkgJiYgdG9SZW5kZXJTY3JvbGxiYXIodmVy
dGljYWxCYXIpLT5vd25pbmdSZW5kZXJlcigpID09IHJlbmRlckJveCkKICAgICAgICAgc2V0SGFz
VmVydGljYWxTY3JvbGxiYXIoZmFsc2UpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2Uvd2luY2Uv
RnJhbWVXaW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL3dpbmNlL0ZyYW1lV2lu
Y2UuY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcGFnZS93aW5jZS9GcmFtZVdpbmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIGNvbXB1dGVQYWdlUmVj
dHNGb3JGcmFtZShGcmFtZSogZnJhCiAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSB8fCAhZnJh
bWUtPnZpZXcoKSB8fCAhZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlbmRlclZpZXcqIHJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3ICo+
KGZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJWaWV3KiByb290ID0g
dG9SZW5kZXJWaWV3KGZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKIAogICAgIGlmICgh
cm9vdCkgewogICAgICAgICBMT0dfRVJST1IoImRvY3VtZW50IHRvIGJlIHByaW50ZWQgaGFzIG5v
IHJlbmRlcmVyIik7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNp
b24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw3IEBAIGludCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVz
SG9yaXpvbnRhbGwKICAgICAgICAgICAgICAgICB4UG9zICs9IGZsb3ctPm1hcmdpbkxlZnQoKTsK
ICAgICAgICAgICAgICAgICB4UG9zID0gZmxvdy0+cGxhY2VCb3hlc0hvcml6b250YWxseSh4UG9z
LCBsZWZ0UG9zaXRpb24sIHJpZ2h0UG9zaXRpb24sIG5lZWRzV29yZFNwYWNpbmcpOwogICAgICAg
ICAgICAgICAgIHhQb3MgKz0gZmxvdy0+bWFyZ2luUmlnaHQoKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIWN1cnItPnJlbmRlcmVyKCktPmlzTGlzdE1hcmtlcigpIHx8IHN0YXRpY19jYXN0PFJl
bmRlckxpc3RNYXJrZXIqPihjdXJyLT5yZW5kZXJlcigpKS0+aXNJbnNpZGUoKSkgeworICAgICAg
ICAgICAgfSBlbHNlIGlmICghY3Vyci0+cmVuZGVyZXIoKS0+aXNMaXN0TWFya2VyKCkgfHwgdG9S
ZW5kZXJMaXN0TWFya2VyKGN1cnItPnJlbmRlcmVyKCkpLT5pc0luc2lkZSgpKSB7CiAgICAgICAg
ICAgICAgICAgeFBvcyArPSBjdXJyLT5ib3hNb2RlbE9iamVjdCgpLT5tYXJnaW5MZWZ0KCk7CiAg
ICAgICAgICAgICAgICAgY3Vyci0+c2V0WCh4UG9zKTsKICAgICAgICAgICAgICAgICBsZWZ0UG9z
aXRpb24gPSBtaW4oeFBvcyArIHRvUmVuZGVyQm94KGN1cnItPnJlbmRlcmVyKCkpLT5vdmVyZmxv
d0xlZnQoZmFsc2UpLCBsZWZ0UG9zaXRpb24pOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL01l
ZGlhQ29udHJvbEVsZW1lbnRzLmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw5ICs0
ODcsOCBAQCB2b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVsCiAKICAgICBN
ZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogCi0g
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50IHx8IGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKKyAgICBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZW1vdmVFdmVudCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGZsb2F0IHRpbWUg
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHZhbHVlKCkudG9Eb3VibGUoKSk7CiAgICAgaWYgKHRp
bWUgIT0gbV9tZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkpIHsKQEAgLTQ5Nyw5ICs0OTYsOSBA
QCB2b2lkIE1lZGlhQ29udHJvbFRpbWVsaW5lRWxlbWVudDo6ZGVmYXVsCiAgICAgICAgIG1fbWVk
aWFFbGVtZW50LT5zZXRDdXJyZW50VGltZSh0aW1lLCBlYyk7CiAgICAgfQogCi0gICAgUmVuZGVy
U2xpZGVyKiBzbGlkZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJTbGlkZXIqPihyZW5kZXJlcigpKTsK
KyAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHRvUmVuZGVyU2xpZGVyKHJlbmRlcmVyKCkpOwog
ICAgIGlmIChzbGlkZXIgJiYgc2xpZGVyLT5pbkRyYWdNb2RlKCkpCi0gICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlck1lZGlhKj4obV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkpLT51cGRhdGVUaW1l
RGlzcGxheSgpOworICAgICAgICB0b1JlbmRlck1lZGlhKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJl
cigpKS0+dXBkYXRlVGltZURpc3BsYXkoKTsKIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50LT5lbmRTY3J1
YmJpbmcoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFwcGxldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFwcGxldC5oCShyZXZpc2lvbiA0Njc3NykK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFwcGxldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw2ICs0NiwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IG1fYXJnczsKICAgICB9OwogCisgICAgaW5saW5lIFJlbmRlckFwcGxldCogdG9S
ZW5kZXJBcHBsZXQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCisgICAgeworICAgICAgICBBU1NFUlQo
IW9iamVjdCB8fCBvYmplY3QtPmlzQXBwbGV0KCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UmVuZGVyQXBwbGV0Kj4ob2JqZWN0KTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHdpbGwgY2F0
Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCisgICAgdm9pZCB0b1JlbmRlckFw
cGxldChjb25zdCBSZW5kZXJBcHBsZXQqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gUmVuZGVyQXBwbGV0X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2
aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEwICsxLDggQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
cmVuZGVyIG9iamVjdCBpbXBsZW1lbnRhdGlvbiBmb3IgS0hUTUwuCi0gKgogICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5
OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDcgRGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC01MiwyNiArNTAsMTUgQEAgcHVibGljOgogICAgIFJlbmRlckJsb2NrKE5vZGUq
KTsKICAgICB2aXJ0dWFsIH5SZW5kZXJCbG9jaygpOwogCi0gICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KLSAg
ICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQogICAgIGNvbnN0IFJlbmRlck9iamVjdENoaWxk
TGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogICAgIFJlbmRl
ck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0OwotCiAgICAgLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgb3ZlcnJp
ZGRlbiBmb3IgaW5saW5lLWJsb2NrLgogICAgIHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoYm9vbCBm
aXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKICAgICB2aXJ0dWFs
IGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3gg
PSBmYWxzZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNCbG9ja0Zsb3coKSBjb25zdCB7
IHJldHVybiAoIWlzSW5saW5lKCkgfHwgaXNSZXBsYWNlZCgpKSAmJiAhaXNUYWJsZSgpOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgY29uc3QgeyByZXR1
cm4gaXNJbmxpbmUoKSAmJiBpc1JlcGxhY2VkKCk7IH0KLQotICAgIHZvaWQgbWFrZUNoaWxkcmVu
Tm9uSW5saW5lKFJlbmRlck9iamVjdCogaW5zZXJ0aW9uUG9pbnQgPSAwKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayhSZW5kZXJCbG9jayogY2hpbGQpOwot
CiAgICAgUmVuZGVyTGluZUJveExpc3QqIGxpbmVCb3hlcygpIHsgcmV0dXJuICZtX2xpbmVCb3hl
czsgfQogICAgIGNvbnN0IFJlbmRlckxpbmVCb3hMaXN0KiBsaW5lQm94ZXMoKSBjb25zdCB7IHJl
dHVybiAmbV9saW5lQm94ZXM7IH0KIApAQCAtNzksNyArNjYsNiBAQCBwdWJsaWM6CiAgICAgSW5s
aW5lRmxvd0JveCogbGFzdExpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hlcy5sYXN0
TGluZUJveCgpOyB9CiAKICAgICB2b2lkIGRlbGV0ZUxpbmVCb3hUcmVlKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQpIHsg
bV9saW5lQm94ZXMuZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQodGhpcywgY2hpbGQpOyB9CiAK
ICAgICAvLyBUaGUgaGVpZ2h0IChhbmQgd2lkdGgpIG9mIGEgYmxvY2sgd2hlbiB5b3UgaW5jbHVk
ZSBvdmVyZmxvdyBzcGlsbGFnZSBvdXQgb2YgdGhlIGJvdHRvbQogICAgIC8vIG9mIHRoZSBibG9j
ayAoZS5nLiwgYSA8ZGl2IHN0eWxlPSJoZWlnaHQ6MjVweCI+IHRoYXQgaGFzIGEgMTAwcHggdGFs
bCBpbWFnZSBpbnNpZGUKQEAgLTg5LDE1ICs3NSw4MyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBp
bnQgb3ZlcmZsb3dMZWZ0KGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgb3ZlcmZsb3dUb3AoYm9vbCBpbmNsdWRlSW50ZXJpb3IgPSB0cnVlKSBjb25z
dDsKICAgICB2aXJ0dWFsIEludFJlY3Qgb3ZlcmZsb3dSZWN0KGJvb2wgaW5jbHVkZUludGVyaW9y
ID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldE92ZXJmbG93SGVpZ2h0KGludCBo
KSB7IG1fb3ZlcmZsb3dIZWlnaHQgPSBoOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE92ZXJmbG93
V2lkdGgoaW50IHcpIHsgbV9vdmVyZmxvd1dpZHRoID0gdzsgfQogCiAgICAgdm9pZCBhZGRWaXN1
YWxPdmVyZmxvdyhjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTZWxmQ29s
bGFwc2luZ0Jsb2NrKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9i
amVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CiAKLSAgICB2aXJ0dWFsIGludCBt
YXhUb3BNYXJnaW4oYm9vbCBwb3NpdGl2ZSkgY29uc3QgeyByZXR1cm4gcG9zaXRpdmUgPyBtYXhU
b3BQb3NNYXJnaW4oKSA6IG1heFRvcE5lZ01hcmdpbigpOyB9Ci0gICAgdmlydHVhbCBpbnQgbWF4
Qm90dG9tTWFyZ2luKGJvb2wgcG9zaXRpdmUpIGNvbnN0IHsgcmV0dXJuIHBvc2l0aXZlID8gbWF4
Qm90dG9tUG9zTWFyZ2luKCkgOiBtYXhCb3R0b21OZWdNYXJnaW4oKTsgfQorICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pOworCisgICAgdm9pZCBpbnNl
cnRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCopOworICAgIHZvaWQgcmVtb3ZlUG9zaXRpb25l
ZE9iamVjdChSZW5kZXJCb3gqKTsKKyAgICB2b2lkIHJlbW92ZVBvc2l0aW9uZWRPYmplY3RzKFJl
bmRlckJsb2NrKik7CisKKyAgICB2b2lkIGFkZFBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJlbmRl
ckJveCopOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50KFJl
bmRlckJveCopOworICAgIEhhc2hTZXQ8UmVuZGVyQm94Kj4qIHBlcmNlbnRIZWlnaHREZXNjZW5k
YW50cygpIGNvbnN0OworCisgICAgUm9vdElubGluZUJveCogY3JlYXRlQW5kQXBwZW5kUm9vdElu
bGluZUJveCgpOworCisgICAgYm9vbCBnZW5lcmF0ZXNMaW5lQm94ZXNGb3JJbmxpbmVDaGlsZChS
ZW5kZXJPYmplY3QqLCBib29sIGlzTGluZUVtcHR5ID0gdHJ1ZSwgYm9vbCBwcmV2aW91c0xpbmVC
cm9rZUNsZWFubHkgPSB0cnVlKTsKKworICAgIHZvaWQgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZs
b2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUgPSAwLCBib29sIGluTGF5b3V0
ID0gdHJ1ZSk7CisgICAgdm9pZCBtYXJrUG9zaXRpb25lZE9iamVjdHNGb3JMYXlvdXQoKTsKKwor
ICAgIGJvb2wgY29udGFpbnNGbG9hdHMoKSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiAh
bV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHkoKTsgfQorICAgIGJvb2wgY29udGFpbnNGbG9hdChS
ZW5kZXJPYmplY3QqKTsKKworICAgIEludFJlY3QgZmxvYXRSZWN0KCkgY29uc3Q7CisKKyAgICBp
bnQgbGluZVdpZHRoKGludCB5LCBib29sIGZpcnN0TGluZSkgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgbG93ZXN0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJv
b2wgaW5jbHVkZVNlbGYgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCByaWdodG1vc3RQ
b3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yID0gdHJ1ZSwgYm9vbCBpbmNsdWRl
U2VsZiA9IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGxlZnRtb3N0UG9zaXRpb24oYm9v
bCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJvb2wgaW5jbHVkZVNlbGYgPSB0cnVl
KSBjb25zdDsKKworICAgIGludCByaWdodE9mZnNldChpbnQgeSwgYm9vbCBmaXJzdExpbmUpIGNv
bnN0IHsgcmV0dXJuIHJpZ2h0UmVsT2Zmc2V0KHksIHJpZ2h0T2Zmc2V0KCksIGZpcnN0TGluZSk7
IH0KKyAgICBpbnQgbGVmdE9mZnNldChpbnQgeSwgYm9vbCBmaXJzdExpbmUpIGNvbnN0IHsgcmV0
dXJuIGxlZnRSZWxPZmZzZXQoeSwgbGVmdE9mZnNldCgpLCBmaXJzdExpbmUpOyB9CisKKyAgICB2
aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7
CisgICAgCisgICAgLy8gQmxvY2sgZmxvd3Mgc3ViY2xhc3MgYXZhaWxhYmxlV2lkdGggdG8gaGFu
ZGxlIG11bHRpIGNvbHVtbiBsYXlvdXQgKHNocmlua2luZyB0aGUgd2lkdGggYXZhaWxhYmxlIHRv
IGNoaWxkcmVuIHdoZW4gbGF5aW5nIG91dC4pCisgICAgdmlydHVhbCBpbnQgYXZhaWxhYmxlV2lk
dGgoKSBjb25zdDsKKyAgICAKKyAgICBSb290SW5saW5lQm94KiBmaXJzdFJvb3RCb3goKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxSb290SW5saW5lQm94Kj4oZmlyc3RMaW5lQm94KCkpOyB9
CisgICAgUm9vdElubGluZUJveCogbGFzdFJvb3RCb3goKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxSb290SW5saW5lQm94Kj4obGFzdExpbmVCb3goKSk7IH0KKworICAgIGJvb2wgY29udGFp
bnNOb25aZXJvQmlkaUxldmVsKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0
aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgcyk7CisKKyAgICBHYXBSZWN0cyBzZWxlY3Rpb25HYXBS
ZWN0c0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwor
ICAgIEludFJlY3QgZmlsbExlZnRTZWxlY3Rpb25HYXAoUmVuZGVyT2JqZWN0KiBzZWxPYmosIGlu
dCB4UG9zLCBpbnQgeVBvcywgaW50IGhlaWdodCwgUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBp
bnQgdHgsIGludCB0eSwgY29uc3QgUGFpbnRJbmZvKik7CisgICAgSW50UmVjdCBmaWxsUmlnaHRT
ZWxlY3Rpb25HYXAoUmVuZGVyT2JqZWN0KiBzZWxPYmosIGludCB4UG9zLCBpbnQgeVBvcywgaW50
IGhlaWdodCwgUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGludCB0eSwgY29uc3Qg
UGFpbnRJbmZvKik7CisgICAgSW50UmVjdCBmaWxsSG9yaXpvbnRhbFNlbGVjdGlvbkdhcChSZW5k
ZXJPYmplY3QqIHNlbE9iaiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGNvbnN0IFBhaW50SW5mbyopOworCisgICAgdm9pZCBnZXRIb3Jpem9udGFsU2VsZWN0aW9u
R2FwSW5mbyhTZWxlY3Rpb25TdGF0ZSwgYm9vbCYgbGVmdEdhcCwgYm9vbCYgcmlnaHRHYXApOwor
CisgICAgLy8gSGVscGVyIG1ldGhvZHMgZm9yIGNvbXB1dGluZyBsaW5lIGNvdW50cyBhbmQgaGVp
Z2h0cyBmb3IgbGluZSBjb3VudHMuCisgICAgUm9vdElubGluZUJveCogbGluZUF0SW5kZXgoaW50
KTsKKyAgICBpbnQgbGluZUNvdW50KCk7CisgICAgaW50IGhlaWdodEZvckxpbmVDb3VudChpbnQp
OworICAgIHZvaWQgY2xlYXJUcnVuY2F0aW9uKCk7CisKKyAgICB2b2lkIGFkanVzdFJlY3RGb3JD
b2x1bW5zKEludFJlY3QmKSBjb25zdDsKKworICAgIHZvaWQgYWRkQ29udGludWF0aW9uV2l0aE91
dGxpbmUoUmVuZGVySW5saW5lKik7CisKKyAgICBSZW5kZXJJbmxpbmUqIGlubGluZUNvbnRpbnVh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGludWF0aW9uOyB9CisgICAgdm9pZCBz
ZXRJbmxpbmVDb250aW51YXRpb24oUmVuZGVySW5saW5lKiBjKSB7IG1faW5saW5lQ29udGludWF0
aW9uID0gYzsgfQorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhIGNvbnZlbmllbmNlIGhlbHBl
ciBmb3IgY3JlYXRpbmcgYW4gYW5vbnltb3VzIGJsb2NrIHRoYXQgaW5oZXJpdHMgaXRzCisgICAg
Ly8gc3R5bGUgZnJvbSB0aGlzIFJlbmRlckJsb2NrLgorICAgIFJlbmRlckJsb2NrKiBjcmVhdGVB
bm9ueW1vdXNCbG9jaygpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHNl
dE92ZXJmbG93SGVpZ2h0KGludCBoKSB7IG1fb3ZlcmZsb3dIZWlnaHQgPSBoOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldE92ZXJmbG93V2lkdGgoaW50IHcpIHsgbV9vdmVyZmxvd1dpZHRoID0gdzsg
fQogCiAgICAgaW50IG1heFRvcFBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2lu
ID8gbV9tYXhNYXJnaW4tPm1fdG9wUG9zIDogTWF4TWFyZ2luOjp0b3BQb3NEZWZhdWx0KHRoaXMp
OyB9CiAgICAgaW50IG1heFRvcE5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2lu
ID8gbV9tYXhNYXJnaW4tPm1fdG9wTmVnIDogTWF4TWFyZ2luOjp0b3BOZWdEZWZhdWx0KHRoaXMp
OyB9CkBAIC0xMTYsMzIgKzE3MCw3MiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCA9IDApOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5k
ZXJPYmplY3QqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisKKyAgICB2b2lkIGxheW91
dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludE9iamVjdChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisKKyAgICBpbnQgcmln
aHRSZWxPZmZzZXQoaW50IHksIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQg
PSB0cnVlLCBpbnQqIGhlaWdodFJlbWFpbmluZyA9IDApIGNvbnN0OworICAgIGludCBsZWZ0UmVs
T2Zmc2V0KGludCB5LCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50ID0gdHJ1
ZSwgaW50KiBoZWlnaHRSZW1haW5pbmcgPSAwKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwg
aW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBjYWxjUHJlZldpZHRocygpOworCisgICAgdmlydHVhbCBpbnQgZmlyc3RMaW5lQm94QmFzZWxp
bmUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBsYXN0TGluZUJveEJhc2VsaW5lKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKKworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYp
OworCisgICAgLy8gRGVsYXkgdXBkYXRlIHNjcm9sbGJhciB1bnRpbCBmaW5pc2hEZWxheVJlcGFp
bnQoKSB3aWxsIGJlCisgICAgLy8gY2FsbGVkLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBh
IGZsZXhib3ggaXMgbGF5aW5nIG91dCBpdHMKKyAgICAvLyBkZXNjZW5kYW50LiBJZiBtdWx0aXBs
ZSBjYWxscyBhcmUgbWFkZSB0byBzdGFydERlbGF5UmVwYWludCgpLAorICAgIC8vIGZpbmlzaERl
bGF5UmVwYWludCgpIHdpbGwgZG8gbm90aGluZyB1bnRpbCBmaW5pc2hEZWxheVJlcGFpbnQoKQor
ICAgIC8vIGlzIGNhbGxlZCB0aGUgc2FtZSBudW1iZXIgb2YgdGltZXMuCisgICAgc3RhdGljIHZv
aWQgc3RhcnREZWxheVVwZGF0ZVNjcm9sbEluZm8oKTsKKyAgICBzdGF0aWMgdm9pZCBmaW5pc2hE
ZWxheVVwZGF0ZVNjcm9sbEluZm8oKTsKKworICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOworICAgIHZp
cnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzTGluZUlmRW1wdHkoKSBjb25z
dDsKKyAgICBib29sIGxheW91dE9ubHlQb3NpdGlvbmVkT2JqZWN0cygpOworICAgIAorcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkg
eyByZXR1cm4gY2hpbGRyZW4oKTsgfQorICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9CisK
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKKworICAgIHZpcnR1
YWwgYm9vbCBpc1JlbmRlckJsb2NrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc0Jsb2NrRmxvdygpIGNvbnN0IHsgcmV0dXJuICghaXNJbmxpbmUoKSB8fCBpc1Jl
cGxhY2VkKCkpICYmICFpc1RhYmxlKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVCbG9j
a09ySW5saW5lVGFibGUoKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgpICYmIGlzUmVwbGFjZWQo
KTsgfQorCisgICAgdm9pZCBtYWtlQ2hpbGRyZW5Ob25JbmxpbmUoUmVuZGVyT2JqZWN0KiBpbnNl
cnRpb25Qb2ludCA9IDApOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVMZWZ0b3ZlckFub255bW91
c0Jsb2NrKFJlbmRlckJsb2NrKiBjaGlsZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlydHlMaW5l
c0Zyb21DaGFuZ2VkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCkgeyBtX2xpbmVCb3hlcy5kaXJ0
eUxpbmVzRnJvbUNoYW5nZWRDaGlsZCh0aGlzLCBjaGlsZCk7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBpc1NlbGZDb2xsYXBzaW5nQmxvY2soKSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IG1heFRv
cE1hcmdpbihib29sIHBvc2l0aXZlKSBjb25zdCB7IHJldHVybiBwb3NpdGl2ZSA/IG1heFRvcFBv
c01hcmdpbigpIDogbWF4VG9wTmVnTWFyZ2luKCk7IH0KKyAgICB2aXJ0dWFsIGludCBtYXhCb3R0
b21NYXJnaW4oYm9vbCBwb3NpdGl2ZSkgY29uc3QgeyByZXR1cm4gcG9zaXRpdmUgPyBtYXhCb3R0
b21Qb3NNYXJnaW4oKSA6IG1heEJvdHRvbU5lZ01hcmdpbigpOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgcmVwYWludE92ZXJoYW5naW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cyk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CiAgICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkcmVuKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiBtYXhGbG9hdEJvdHRvbSk7CiAgICAgdm9pZCBsYXlv
dXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludFRvcCwg
aW50JiByZXBhaW50Qm90dG9tKTsKIAotICAgIHZvaWQgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMo
Ym9vbCByZWxheW91dENoaWxkcmVuKTsKLSAgICB2b2lkIGluc2VydFBvc2l0aW9uZWRPYmplY3Qo
UmVuZGVyQm94Kik7Ci0gICAgdm9pZCByZW1vdmVQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCop
OwotICAgIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoUmVuZGVyQmxvY2sqKTsKLQotICAg
IHZvaWQgYWRkUGVyY2VudEhlaWdodERlc2NlbmRhbnQoUmVuZGVyQm94Kik7Ci0gICAgc3RhdGlj
IHZvaWQgcmVtb3ZlUGVyY2VudEhlaWdodERlc2NlbmRhbnQoUmVuZGVyQm94Kik7Ci0gICAgSGFz
aFNldDxSZW5kZXJCb3gqPiogcGVyY2VudEhlaWdodERlc2NlbmRhbnRzKCkgY29uc3Q7Ci0KICAg
ICB2aXJ0dWFsIHZvaWQgcG9zaXRpb25MaXN0TWFya2VyKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgYm9yZGVyRml0QWRqdXN0KGludCYgeCwgaW50JiB3KSBjb25zdDsgLy8gU2hyaW5rIHRoZSBi
b3ggaW4gd2hpY2ggdGhlIGJvcmRlciBwYWludHMgaWYgYm9yZGVyLWZpdCBpcyBzZXQuCiAKICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmVmb3JlQWZ0ZXJDb250ZW50KFBzZXVkb0lkKTsKIAotICAg
IFJvb3RJbmxpbmVCb3gqIGNyZWF0ZUFuZEFwcGVuZFJvb3RJbmxpbmVCb3goKTsKICAgICB2aXJ0
dWFsIFJvb3RJbmxpbmVCb3gqIGNyZWF0ZVJvb3RJbmxpbmVCb3goKTsgLy8gU3ViY2xhc3NlZCBi
eSBTVkcgYW5kIFJ1YnkuCiAKICAgICAvLyBDYWxsZWQgdG8gbGF5IG91dCB0aGUgbGVnZW5kIGZv
ciBhIGZpZWxkc2V0LgpAQCAtMTY5LDcgKzI2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIHlQb3MpOwogICAgIGJvb2wgbWF0Y2hlZEVu
ZExpbmUoY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVu
ZExpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1cywKICAgICAgICAgICAg
ICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZFlQb3MsIGludCYg
cmVwYWludEJvdHRvbSwgaW50JiByZXBhaW50VG9wKTsKLSAgICBib29sIGdlbmVyYXRlc0xpbmVC
b3hlc0ZvcklubGluZUNoaWxkKFJlbmRlck9iamVjdCosIGJvb2wgaXNMaW5lRW1wdHkgPSB0cnVl
LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWUpOworCiAgICAgdm9pZCBza2lw
VHJhaWxpbmdXaGl0ZXNwYWNlKElubGluZUl0ZXJhdG9yJiwgYm9vbCBpc0xpbmVFbXB0eSwgYm9v
bCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOwogICAgIGludCBza2lwTGVhZGluZ1doaXRlc3Bh
Y2UoSW5saW5lQmlkaVJlc29sdmVyJiwgYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNMaW5lRW1wdHks
IGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKICAgICB2b2lkIGZpdEJlbG93RmxvYXRz
KGludCB3aWR0aFRvRml0LCBib29sIGZpcnN0TGluZSwgaW50JiBhdmFpbGFibGVXaWR0aCk7CkBA
IC0xODMsOCArMjc3LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2hlY2tMaW5lc0ZvclRleHRPdmVy
ZmxvdygpOwogICAgIC8vIEVuZCBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiBSZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwLgogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50
IHR4LCBpbnQgdHkpOwogICAgIHZvaWQgcGFpbnRGbG9hdHMoUGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHksIGJvb2wgcHJlc2VydmVQaGFzZSA9IGZhbHNlKTsKICAgICB2b2lkIHBhaW50Q29udGVu
dHMoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZvaWQgcGFpbnRDb2x1bW5Db250
ZW50cyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgYm9vbCBwYWludEZsb2F0cyA9IGZhbHNl
KTsKQEAgLTIwMiwxMSArMjk0LDYgQEAgcHVibGljOgogICAgIGJvb2wgcG9zaXRpb25OZXdGbG9h
dHMoKTsKICAgICB2b2lkIGNsZWFyRmxvYXRzKCk7CiAgICAgaW50IGdldENsZWFyRGVsdGEoUmVu
ZGVyQm94KiBjaGlsZCwgaW50IHlQb3MpOwotICAgIHZvaWQgbWFya0FsbERlc2NlbmRhbnRzV2l0
aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUgPSAwLCBib29sIGluTGF5
b3V0ID0gdHJ1ZSk7Ci0gICAgdm9pZCBtYXJrUG9zaXRpb25lZE9iamVjdHNGb3JMYXlvdXQoKTsK
LQotICAgIGJvb2wgY29udGFpbnNGbG9hdHMoKSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAm
JiAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHkoKTsgfQotICAgIGJvb2wgY29udGFpbnNGbG9h
dChSZW5kZXJPYmplY3QqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25z
dDsKIApAQCAtMjE4LDQ5ICszMDUsMjAgQEAgcHVibGljOgogICAgIGludCBmbG9hdEJvdHRvbSgp
IGNvbnN0OwogICAgIGlubGluZSBpbnQgbGVmdEJvdHRvbSgpOwogICAgIGlubGluZSBpbnQgcmln
aHRCb3R0b20oKTsKLSAgICBJbnRSZWN0IGZsb2F0UmVjdCgpIGNvbnN0OwotCi0gICAgaW50IGxp
bmVXaWR0aChpbnQgeSwgYm9vbCBmaXJzdExpbmUpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxv
d2VzdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVlLCBib29sIGlu
Y2x1ZGVTZWxmID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcmlnaHRtb3N0UG9zaXRp
b24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJvb2wgaW5jbHVkZVNlbGYg
PSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaW5j
bHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVlLCBib29sIGluY2x1ZGVTZWxmID0gdHJ1ZSkgY29u
c3Q7CiAKICAgICBpbnQgcmlnaHRPZmZzZXQoKSBjb25zdDsKLSAgICBpbnQgcmlnaHRSZWxPZmZz
ZXQoaW50IHksIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQgPSB0cnVlLCBp
bnQqIGhlaWdodFJlbWFpbmluZyA9IDApIGNvbnN0OwotICAgIGludCByaWdodE9mZnNldChpbnQg
eSwgYm9vbCBmaXJzdExpbmUpIGNvbnN0IHsgcmV0dXJuIHJpZ2h0UmVsT2Zmc2V0KHksIHJpZ2h0
T2Zmc2V0KCksIGZpcnN0TGluZSk7IH0KLQogICAgIGludCBsZWZ0T2Zmc2V0KCkgY29uc3Q7Ci0g
ICAgaW50IGxlZnRSZWxPZmZzZXQoaW50IHksIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRl
eHRJbmRlbnQgPSB0cnVlLCBpbnQqIGhlaWdodFJlbWFpbmluZyA9IDApIGNvbnN0OwotICAgIGlu
dCBsZWZ0T2Zmc2V0KGludCB5LCBib29sIGZpcnN0TGluZSkgY29uc3QgeyByZXR1cm4gbGVmdFJl
bE9mZnNldCh5LCBsZWZ0T2Zmc2V0KCksIGZpcnN0TGluZSk7IH0KLQotICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQg
eCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIGJv
b2wgaGl0VGVzdENvbHVtbnMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVh
bCBib29sIGhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBpc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYsIGlu
dCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwogCi0gICAgdmlydHVhbCBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpOwotICAgIAotICAgIC8vIEJsb2Nr
IGZsb3dzIHN1YmNsYXNzIGF2YWlsYWJsZVdpZHRoIHRvIGhhbmRsZSBtdWx0aSBjb2x1bW4gbGF5
b3V0IChzaHJpbmtpbmcgdGhlIHdpZHRoIGF2YWlsYWJsZSB0byBjaGlsZHJlbiB3aGVuIGxheWlu
ZyBvdXQuKQotICAgIHZpcnR1YWwgaW50IGF2YWlsYWJsZVdpZHRoKCkgY29uc3Q7Ci0gICAgCi0g
ICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgdm9pZCBjYWxjSW5saW5lUHJl
ZldpZHRocygpOwogICAgIHZvaWQgY2FsY0Jsb2NrUHJlZldpZHRocygpOwogCi0gICAgdmlydHVh
bCBpbnQgZmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsYXN0
TGluZUJveEJhc2VsaW5lKCkgY29uc3Q7Ci0KLSAgICBSb290SW5saW5lQm94KiBmaXJzdFJvb3RC
b3goKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSb290SW5saW5lQm94Kj4oZmlyc3RMaW5l
Qm94KCkpOyB9Ci0gICAgUm9vdElubGluZUJveCogbGFzdFJvb3RCb3goKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxSb290SW5saW5lQm94Kj4obGFzdExpbmVCb3goKSk7IH0KLQotICAgIGJv
b2wgY29udGFpbnNOb25aZXJvQmlkaUxldmVsKCkgY29uc3Q7Ci0KICAgICAvLyBPYnRhaW5zIHRo
ZSBuZWFyZXN0IGVuY2xvc2luZyBibG9jayAoaW5jbHVkaW5nIHRoaXMgYmxvY2spIHRoYXQgY29u
dHJpYnV0ZXMgYSBmaXJzdC1saW5lIHN0eWxlIHRvIG91ciBpbmxpbmUKICAgICAvLyBjaGlsZHJl
bi4KICAgICB2aXJ0dWFsIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVGaXJzdExldHRlcigpOwotCiAgICAgYm9vbCBpblJvb3RCbG9j
a0NvbnRleHQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgSW50UmVjdCByZWN0V2l0aE91dGxpbmVG
b3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBpbnQgb3V0
bGluZVdpZHRoKTsKQEAgLTI2OCwxNyArMzI2LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0
dWFsIFJlbmRlck9iamVjdCogaG92ZXJBbmNlc3RvcigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVI
aXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYpOwotICAgIAogICAg
IHZpcnR1YWwgdm9pZCBjaGlsZEJlY2FtZU5vbklubGluZShSZW5kZXJPYmplY3QqIGNoaWxkKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzKTsK
LQogICAgIHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCAvKmNsaXBUb1Zpc2libGVDb250ZW50
Ki8pCiAgICAgewogICAgICAgICByZXR1cm4gc2VsZWN0aW9uR2FwUmVjdHNGb3JSZXBhaW50KHJl
cGFpbnRDb250YWluZXIpOwogICAgIH0KLSAgICBHYXBSZWN0cyBzZWxlY3Rpb25HYXBSZWN0c0Zv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwogICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRQYWludFNlbGVjdGlvbkdhcHMoKSBjb25zdDsKICAgICBib29sIGlz
U2VsZWN0aW9uUm9vdCgpIGNvbnN0OwogICAgIEdhcFJlY3RzIGZpbGxTZWxlY3Rpb25HYXBzKFJl
bmRlckJsb2NrKiByb290QmxvY2ssIGludCBibG9ja1gsIGludCBibG9ja1ksIGludCB0eCwgaW50
IHR5LApAQCAtMjg5LDcxICszNDIsMzEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50JiBsYXN0VG9wLCBpbnQmIGxhc3RMZWZ0LCBpbnQmIGxhc3RSaWdo
dCwgY29uc3QgUGFpbnRJbmZvKik7CiAgICAgSW50UmVjdCBmaWxsVmVydGljYWxTZWxlY3Rpb25H
YXAoaW50IGxhc3RUb3AsIGludCBsYXN0TGVmdCwgaW50IGxhc3RSaWdodCwgaW50IGJvdHRvbVks
IFJlbmRlckJsb2NrKiByb290QmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwgY29uc3QgUGFpbnRJbmZvKik7Ci0gICAgSW50
UmVjdCBmaWxsTGVmdFNlbGVjdGlvbkdhcChSZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50IHhQb3Ms
IGludCB5UG9zLCBpbnQgaGVpZ2h0LCBSZW5kZXJCbG9jayogcm9vdEJsb2NrLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja1gsIGludCBibG9ja1ksIGludCB0eCwg
aW50IHR5LCBjb25zdCBQYWludEluZm8qKTsKLSAgICBJbnRSZWN0IGZpbGxSaWdodFNlbGVjdGlv
bkdhcChSZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgaGVpZ2h0
LCBSZW5kZXJCbG9jayogcm9vdEJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBibG9ja1gsIGludCBibG9ja1ksIGludCB0eCwgaW50IHR5LCBjb25zdCBQYWludElu
Zm8qKTsKLSAgICBJbnRSZWN0IGZpbGxIb3Jpem9udGFsU2VsZWN0aW9uR2FwKFJlbmRlck9iamVj
dCogc2VsT2JqLCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29u
c3QgUGFpbnRJbmZvKik7Ci0KLSAgICB2b2lkIGdldEhvcml6b250YWxTZWxlY3Rpb25HYXBJbmZv
KFNlbGVjdGlvblN0YXRlLCBib29sJiBsZWZ0R2FwLCBib29sJiByaWdodEdhcCk7CiAgICAgaW50
IGxlZnRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IHkpOwogICAg
IGludCByaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgeSk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQg
dHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mKTsKIAotICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBjb21wdXRpbmcgbGluZSBjb3Vu
dHMgYW5kIGhlaWdodHMgZm9yIGxpbmUgY291bnRzLgotICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVB
dEluZGV4KGludCk7Ci0gICAgaW50IGxpbmVDb3VudCgpOwotICAgIGludCBoZWlnaHRGb3JMaW5l
Q291bnQoaW50KTsKLSAgICB2b2lkIGNsZWFyVHJ1bmNhdGlvbigpOwotCiAgICAgaW50IGRlc2ly
ZWRDb2x1bW5XaWR0aCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGRlc2lyZWRDb2x1bW5Db3VudCgp
IGNvbnN0OwogICAgIFZlY3RvcjxJbnRSZWN0PiogY29sdW1uUmVjdHMoKSBjb25zdDsKICAgICB2
b2lkIHNldERlc2lyZWRDb2x1bW5Db3VudEFuZFdpZHRoKGludCBjb3VudCwgaW50IHdpZHRoKTsK
ICAgICBpbnQgY29sdW1uR2FwKCkgY29uc3Q7CiAgICAgCi0gICAgdm9pZCBhZGp1c3RSZWN0Rm9y
Q29sdW1ucyhJbnRSZWN0JikgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZENvbnRpbnVhdGlvbldpdGhP
dXRsaW5lKFJlbmRlcklubGluZSopOwogICAgIHZvaWQgcGFpbnRDb250aW51YXRpb25PdXRsaW5l
cyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAKLSAgICBSZW5kZXJJbmxpbmUqIGlubGlu
ZUNvbnRpbnVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGludWF0aW9uOyB9Ci0g
ICAgdm9pZCBzZXRJbmxpbmVDb250aW51YXRpb24oUmVuZGVySW5saW5lKiBjKSB7IG1faW5saW5l
Q29udGludWF0aW9uID0gYzsgfQotCiAgICAgdmlydHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0
KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUg
PSAwKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRl
eHQqLCBpbnQgdHgsIGludCB0eSk7CiAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgY29udmVu
aWVuY2UgaGVscGVyIGZvciBjcmVhdGluZyBhbiBhbm9ueW1vdXMgYmxvY2sgdGhhdCBpbmhlcml0
cyBpdHMKLSAgICAvLyBzdHlsZSBmcm9tIHRoaXMgUmVuZGVyQmxvY2suCi0gICAgUmVuZGVyQmxv
Y2sqIGNyZWF0ZUFub255bW91c0Jsb2NrKCkgY29uc3Q7Ci0KLSAgICAvLyBEZWxheSB1cGRhdGUg
c2Nyb2xsYmFyIHVudGlsIGZpbmlzaERlbGF5UmVwYWludCgpIHdpbGwgYmUKLSAgICAvLyBjYWxs
ZWQuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBhIGZsZXhib3ggaXMgbGF5b3V0aW5nIGl0
cwotICAgIC8vIGRlc2NlbmRhbnQuICBJZiBtdWx0aXBsZSBzdGFydERlbGF5UmVwYWludCgpIGlz
IGNhbGxlZCwKLSAgICAvLyBmaW5pc2hEZWxheVJlcGFpbnQoKSB3aWxsIGRvIG5vdGhpbmcgdW50
aWwgZmluaXNoRGVsYXlSZXBhaW50KCkKLSAgICAvLyBpcyBjYWxsZWQgc2FtZSB0aW1lcy4KLSAg
ICBzdGF0aWMgdm9pZCBzdGFydERlbGF5VXBkYXRlU2Nyb2xsSW5mbygpOwotICAgIHN0YXRpYyB2
b2lkIGZpbmlzaERlbGF5VXBkYXRlU2Nyb2xsSW5mbygpOwotCi1wcml2YXRlOgogICAgIHZvaWQg
YWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKEludFBvaW50JikgY29uc3Q7CiAgICAgdm9pZCBh
ZGp1c3RGb3JCb3JkZXJGaXQoaW50IHgsIGludCYgbGVmdCwgaW50JiByaWdodCkgY29uc3Q7IC8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgYm9yZGVyRml0QWRqdXN0CiAKICAgICB2b2lkIG1hcmtMaW5l
c0RpcnR5SW5WZXJ0aWNhbFJhbmdlKGludCB0b3AsIGludCBib3R0b20pOwogCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0
IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLQogICAgIHZv
aWQgbmV3TGluZShFQ2xlYXIpOwotICAgIHZpcnR1YWwgYm9vbCBoYXNMaW5lSWZFbXB0eSgpIGNv
bnN0OwotICAgIGJvb2wgbGF5b3V0T25seVBvc2l0aW9uZWRPYmplY3RzKCk7CiAKLSAgICAKLXBy
aXZhdGU6CiAgICAgUG9zaXRpb24gcG9zaXRpb25Gb3JCb3goSW5saW5lQm94KiwgYm9vbCBzdGFy
dCA9IHRydWUpIGNvbnN0OwogICAgIFBvc2l0aW9uIHBvc2l0aW9uRm9yUmVuZGVyZXIoUmVuZGVy
T2JqZWN0KiwgYm9vbCBzdGFydCA9IHRydWUpIGNvbnN0OwogICAgIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IEludFBvaW50Jik7CkBAIC0z
NjgsNyArMzgxLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVy
TGF5b3V0KCk7CiAKLXByb3RlY3RlZDoKICAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3QgewogICAg
ICAgICBlbnVtIFR5cGUgewogICAgICAgICAgICAgRmxvYXRMZWZ0LApAQCAtNDc5LDcgKzQ5MSw2
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihjb25zdCBN
YXJnaW5JbmZvJik7CiAgICAgLy8gRW5kIGhlbHBlciBmdW5jdGlvbnMgYW5kIHN0cnVjdHMgdXNl
ZCBieSBsYXlvdXRCbG9ja0NoaWxkcmVuLgogCi1wcml2YXRlOgogICAgIHR5cGVkZWYgTGlzdEhh
c2hTZXQ8UmVuZGVyQm94Kj46OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIERlcHJlY2F0
ZWRQdHJMaXN0PEZsb2F0aW5nT2JqZWN0PiogbV9mbG9hdGluZ09iamVjdHM7CiAgICAgTGlzdEhh
c2hTZXQ8UmVuZGVyQm94Kj4qIG1fcG9zaXRpb25lZE9iamVjdHM7CkBAIC01MTMsMzMgKzUyNCwz
NCBAQCBwcml2YXRlOgogCiAgICAgTWF4TWFyZ2luKiBtX21heE1hcmdpbjsKIAotcHJvdGVjdGVk
OgogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIFJlbmRlckxpbmVC
b3hMaXN0IG1fbGluZUJveGVzOyAgIC8vIEFsbCBvZiB0aGUgcm9vdCBsaW5lIGJveGVzIGNyZWF0
ZWQgZm9yIHRoaXMgYmxvY2sgZmxvdy4gIEZvciBleGFtcGxlLCA8ZGl2PkhlbGxvPGJyPndvcmxk
LjwvZGl2PiB3aWxsIGhhdmUgdHdvIHRvdGFsIGxpbmVzIGZvciB0aGUgPGRpdj4uCiAKK3Byb3Rl
Y3RlZDoKICAgICAvLyBIb3cgbXVjaCBjb250ZW50IG92ZXJmbG93cyBvdXQgb2Ygb3VyIGJsb2Nr
IHZlcnRpY2FsbHkgb3IgaG9yaXpvbnRhbGx5LgogICAgIGludCBtX292ZXJmbG93SGVpZ2h0Owog
ICAgIGludCBtX292ZXJmbG93V2lkdGg7CiAgICAgaW50IG1fb3ZlcmZsb3dMZWZ0OwogICAgIGlu
dCBtX292ZXJmbG93VG9wOwotICAgIAorCitwcml2YXRlOgogICAgIG11dGFibGUgaW50IG1fbGlu
ZUhlaWdodDsKIH07CiAKLWlubGluZSBSZW5kZXJCbG9jayogdG9SZW5kZXJCbG9jayhSZW5kZXJP
YmplY3QqIG8pCitpbmxpbmUgUmVuZGVyQmxvY2sqIHRvUmVuZGVyQmxvY2soUmVuZGVyT2JqZWN0
KiBvYmplY3QpCiB7IAotICAgIEFTU0VSVCghbyB8fCBvLT5pc1JlbmRlckJsb2NrKCkpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG8pOworICAgIEFTU0VSVCghb2JqZWN0
IHx8IG9iamVjdC0+aXNSZW5kZXJCbG9jaygpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyQmxvY2sqPihvYmplY3QpOwogfQogCi1pbmxpbmUgY29uc3QgUmVuZGVyQmxvY2sqIHRvUmVu
ZGVyQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBvKQoraW5saW5lIGNvbnN0IFJlbmRlckJsb2Nr
KiB0b1JlbmRlckJsb2NrKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQogeyAKLSAgICBBU1NF
UlQoIW8gfHwgby0+aXNSZW5kZXJCbG9jaygpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyQmxvY2sqPihvKTsKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzUmVu
ZGVyQmxvY2soKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlckJsb2NrKj4o
b2JqZWN0KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vz
c2FyeSBjYXN0Lgotdm9pZCB0b1JlbmRlckJsb2NrKGNvbnN0IFJlbmRlckJsb2NrKiBvKTsKK3Zv
aWQgdG9SZW5kZXJCbG9jayhjb25zdCBSZW5kZXJCbG9jayopOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzg2LDcgKzE3ODYsNyBAQCBJbmxpbmVJ
dGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8vIE9wdGltaXplIGZvciBhIGNvbW1vbiBjYXNlLiBJZiB3ZSBjYW4ndCBmaW5kIHdoaXRl
c3BhY2UgYWZ0ZXIgdGhlIGxpc3QKICAgICAgICAgICAgIC8vIGl0ZW0sIHRoZW4gdGhpcyBpcyBh
bGwgbW9vdC4gLWR3aAotICAgICAgICAgICAgaWYgKG8tPmlzTGlzdE1hcmtlcigpICYmICFzdGF0
aWNfY2FzdDxSZW5kZXJMaXN0TWFya2VyKj4obyktPmlzSW5zaWRlKCkpIHsKKyAgICAgICAgICAg
IGlmIChvLT5pc0xpc3RNYXJrZXIoKSAmJiAhdG9SZW5kZXJMaXN0TWFya2VyKG8pLT5pc0luc2lk
ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgp
ICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdCh0aGlzLCBvLCBsaW5lTWlk
cG9pbnRTdGF0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTGlrZSB3aXRoIGlubGluZSBm
bG93cywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSAKICAg
ICAgICAgICAgICAgICAgICAgLy8gYWRkaXRpb25hbCBzcGFjZXMgd2Ugc2VlIHdpbGwgYmUgZGlz
Y2FyZGVkLgpAQCAtMjEwNiw3ICsyMTA2LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6
OmZpbmROZXh0TGluZQogCiAgICAgICAgIGlmICghby0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgp
KSB7CiAgICAgICAgICAgICBsYXN0ID0gbzsKLSAgICAgICAgICAgIGlmIChsYXN0LT5pc1JlcGxh
Y2VkKCkgJiYgYXV0b1dyYXAgJiYgKCFsYXN0LT5pc0ltYWdlKCkgfHwgYWxsb3dJbWFnZXNUb0Jy
ZWFrKSAmJiAoIWxhc3QtPmlzTGlzdE1hcmtlcigpIHx8IHN0YXRpY19jYXN0PFJlbmRlckxpc3RN
YXJrZXIqPihsYXN0KS0+aXNJbnNpZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChsYXN0LT5pc1Jl
cGxhY2VkKCkgJiYgYXV0b1dyYXAgJiYgKCFsYXN0LT5pc0ltYWdlKCkgfHwgYWxsb3dJbWFnZXNU
b0JyZWFrKSAmJiAoIWxhc3QtPmlzTGlzdE1hcmtlcigpIHx8IHRvUmVuZGVyTGlzdE1hcmtlcihs
YXN0KS0+aXNJbnNpZGUoKSkpIHsKICAgICAgICAgICAgICAgICB3ICs9IHRtcFc7CiAgICAgICAg
ICAgICAgICAgdG1wVyA9IDA7CiAgICAgICAgICAgICAgICAgbEJyZWFrLm9iaiA9IG5leHQ7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3
LDggKzEwNyw4IEBAIHN0YXRpYyBib29sIHBsYW5Db3VudGVyKFJlbmRlck9iamVjdCogb2IKIAog
ICAgIGlmIChjb3VudGVyTmFtZSA9PSAibGlzdC1pdGVtIikgewogICAgICAgICBpZiAob2JqZWN0
LT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxSZW5kZXJMaXN0
SXRlbSo+KG9iamVjdCktPmhhc0V4cGxpY2l0VmFsdWUoKSkgewotICAgICAgICAgICAgICAgIHZh
bHVlID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEl0ZW0qPihvYmplY3QpLT5leHBsaWNpdFZhbHVl
KCk7CisgICAgICAgICAgICBpZiAodG9SZW5kZXJMaXN0SXRlbShvYmplY3QpLT5oYXNFeHBsaWNp
dFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvUmVuZGVyTGlzdEl0ZW0ob2Jq
ZWN0KS0+ZXhwbGljaXRWYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlzUmVzZXQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckNvdW50ZXIuaAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJDb3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA0IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNv
bSkKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMywy
MSArMzMsMzAgQEAgY2xhc3MgUmVuZGVyQ291bnRlciA6IHB1YmxpYyBSZW5kZXJUZXh0IAogcHVi
bGljOgogICAgIFJlbmRlckNvdW50ZXIoRG9jdW1lbnQqLCBjb25zdCBDb3VudGVyQ29udGVudCYp
OwogCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95Q291
bnRlck5vZGVzKFJlbmRlck9iamVjdCopOworCitwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0NvdW50ZXIoKSBj
b25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxUZXh0KCkg
Y29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKGludCBsZWFkV2lk
dGgpOwogCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95
Q291bnRlck5vZGVzKFJlbmRlck9iamVjdCopOwotCi1wcml2YXRlOgogICAgIENvdW50ZXJDb250
ZW50IG1fY291bnRlcjsKICAgICBtdXRhYmxlIENvdW50ZXJOb2RlKiBtX2NvdW50ZXJOb2RlOwog
fTsKIAoraW5saW5lIFJlbmRlckNvdW50ZXIqIHRvUmVuZGVyQ291bnRlcihSZW5kZXJPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzQ291bnRlcigpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQ291bnRlcio+KG9iamVjdCk7Cit9CisKKy8v
IFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQg
dG9SZW5kZXJDb3VudGVyKGNvbnN0IFJlbmRlckNvdW50ZXIqKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gUmVuZGVyQ291bnRlcl9oCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWVsZHNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpZWxkc2V0LmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmllbGRzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0zNCw2ICszMiw5IEBAIGNsYXNzIFJlbmRlckZpZWxkc2V0IDogcHVibGlj
IFJlbmRlckJsb2MKIHB1YmxpYzoKICAgICBSZW5kZXJGaWVsZHNldChOb2RlKik7CiAKKyAgICBS
ZW5kZXJCb3gqIGZpbmRMZWdlbmQoKSBjb25zdDsKKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRmllbGRTZXQiOyB9
CiAgICAgdmlydHVhbCBib29sIGlzRmllbGRzZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAK
QEAgLTQzLDE3ICs0NCwyMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGF2b2lkc0Zsb2F0
cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgc3RyZXRjaGVzVG9N
aW5JbnRyaW5zaWNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFJlbmRlckJv
eCogZmluZExlZ2VuZCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0
eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KTsKIAotcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWlu
dEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dE1hc2soUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworCiAgICAgdm9pZCBwYWludEJvcmRl
ck1pbnVzTGVnZW5kKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50
IGgsIGNvbnN0IFJlbmRlclN0eWxlKiwgaW50IGx4LCBpbnQgbHcsIGludCBsYik7CiB9OwogCitp
bmxpbmUgUmVuZGVyRmllbGRzZXQqIHRvUmVuZGVyRmllbGRzZXQoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc0ZpZWxkc2V0KCkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJGaWVsZHNldCo+KG9iamVjdCk7Cit9CisKKy8vIFRo
aXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9S
ZW5kZXJGaWVsZHNldChjb25zdCBSZW5kZXJGaWVsZHNldCopOworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBSZW5kZXJGaWVsZHNldF9oCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsMTMgKzM1LDcgQEAgY2xhc3Mg
SFRNTElucHV0RWxlbWVudDsKIGNsYXNzIFJlbmRlckZpbGVVcGxvYWRDb250cm9sIDogcHVibGlj
IFJlbmRlckJsb2NrLCBwcml2YXRlIEZpbGVDaG9vc2VyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbChIVE1MSW5wdXRFbGVtZW50Kik7Ci0gICAgflJlbmRlckZp
bGVVcGxvYWRDb250cm9sKCk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCB7IHJldHVybiAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wiOyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZX
aWR0aHMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHkpOworICAgIHZpcnR1YWwgflJlbmRlckZpbGVVcGxvYWRDb250cm9sKCk7CiAKICAg
ICB2b2lkIGNsaWNrKCk7CiAKQEAgLTU0LDEwICs0OCwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzKCk7CiAKLXByb3RlY3RlZDoKK3ByaXZhdGU6CisgICAg
dmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckZp
bGVVcGxvYWRDb250cm9sIjsgfQorCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50
KCk7CisgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50T2JqZWN0KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKwogICAgIHZpcnR1YWwg
dm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSk7CiAKLXByaXZhdGU6CiAgICAgaW50IG1heEZpbGVuYW1lV2lkdGgoKSBjb25zdDsK
ICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVCdXR0b25TdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0OwogCkBAIC02NSw2ICs2NCwxNSBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gbV9maWxlQ2hvb3NlcjsKIH07CiAKK2lubGluZSBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbCogdG9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbChSZW5kZXJP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCAhc3RyY21wKG9iamVjdC0+
cmVuZGVyTmFtZSgpLCAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wiKSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFJlbmRlckZpbGVVcGxvYWRDb250cm9sKj4ob2JqZWN0KTsKK30KKworLy8gVGhp
cyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1Jl
bmRlckZpbGVVcGxvYWRDb250cm9sKGNvbnN0IFJlbmRlckZpbGVVcGxvYWRDb250cm9sKik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlckZpbGVVcGxvYWRDb250
cm9sX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuaAkocmV2aXNpb24gNDY3NzcpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0
MywxNSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB2aWV3Q2xlYXJlZCgpOwogfTsKIAor
aW5saW5lIFJlbmRlckZyYW1lKiB0b1JlbmRlckZyYW1lKFJlbmRlck9iamVjdCogb2JqZWN0KQor
eworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNGcmFtZSgpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVuZGVyRnJhbWUqPihvYmplY3QpOworfQorCisvLyBUaGlzIHdpbGwgY2F0
Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyRnJhbWUo
Y29uc3QgUmVuZGVyRnJhbWUqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gUmVuZGVyRnJhbWVfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAko
cmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxNiw5ICs0MTYsOSBAQCB2b2lkIFJlbmRlckZyYW1lU2V0Ojpj
b21wdXRlRWRnZUluZm8oKQogICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbHM7ICsrYykg
ewogICAgICAgICAgICAgRnJhbWVFZGdlSW5mbyBlZGdlSW5mbzsKICAgICAgICAgICAgIGlmIChj
aGlsZC0+aXNGcmFtZVNldCgpKQotICAgICAgICAgICAgICAgIGVkZ2VJbmZvID0gc3RhdGljX2Nh
c3Q8UmVuZGVyRnJhbWVTZXQqPihjaGlsZCktPmVkZ2VJbmZvKCk7CisgICAgICAgICAgICAgICAg
ZWRnZUluZm8gPSB0b1JlbmRlckZyYW1lU2V0KGNoaWxkKS0+ZWRnZUluZm8oKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlZGdlSW5mbyA9IHN0YXRpY19jYXN0PFJlbmRlckZy
YW1lKj4oY2hpbGQpLT5lZGdlSW5mbygpOworICAgICAgICAgICAgICAgIGVkZ2VJbmZvID0gdG9S
ZW5kZXJGcmFtZShjaGlsZCktPmVkZ2VJbmZvKCk7CiAgICAgICAgICAgICBmaWxsRnJvbUVkZ2VJ
bmZvKGVkZ2VJbmZvLCByLCBjKTsKICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkKQpAQCAtNTkwLDkgKzU5MCwxMCBAQCBib29s
IFJlbmRlckZyYW1lU2V0Ojp1c2VyUmVzaXplKE1vdXNlRXZlCiB2b2lkIFJlbmRlckZyYW1lU2V0
OjpzZXRJc1Jlc2l6aW5nKGJvb2wgaXNSZXNpemluZykKIHsKICAgICBtX2lzUmVzaXppbmcgPSBp
c1Jlc2l6aW5nOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBwID0gcGFyZW50KCk7IHA7IHAgPSBw
LT5wYXJlbnQoKSkKLSAgICAgICAgaWYgKHAtPmlzRnJhbWVTZXQoKSkKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlckZyYW1lU2V0Kj4ocCktPm1faXNDaGlsZFJlc2l6aW5nID0gaXNSZXNp
emluZzsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogYW5jZXN0b3IgPSBwYXJlbnQoKTsgYW5jZXN0
b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChhbmNlc3Rv
ci0+aXNGcmFtZVNldCgpKQorICAgICAgICAgICAgdG9SZW5kZXJGcmFtZVNldChhbmNlc3Rvcikt
Pm1faXNDaGlsZFJlc2l6aW5nID0gaXNSZXNpemluZzsKKyAgICB9CiAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+c2V0UmVzaXppbmdGcmFtZVNldChpc1Jlc2l6aW5nID8gZnJhbWVTZXQoKSA6IDApOwogfQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCShyZXZpc2lvbiA0Njc3NykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDE5
ICs1Nyw5IEBAIHB1YmxpYzoKICAgICBSZW5kZXJGcmFtZVNldChIVE1MRnJhbWVTZXRFbGVtZW50
Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyRnJhbWVTZXQoKTsKIAotICAgIHZpcnR1YWwgUmVuZGVy
T2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSB7IHJldHVybiBjaGlsZHJlbigpOyB9
Ci0gICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJl
bigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KICAgICBjb25zdCBSZW5kZXJPYmplY3RD
aGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KICAgICBS
ZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0K
IAotICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJGcmFtZVNldCI7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZVNldCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7Ci0gICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSk7Ci0gICAg
dmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikg
Y29uc3Q7Ci0gICAgCiAgICAgRnJhbWVFZGdlSW5mbyBlZGdlSW5mbygpIGNvbnN0OwogCiAgICAg
Ym9vbCB1c2VyUmVzaXplKE1vdXNlRXZlbnQqKTsKQEAgLTk1LDYgKzg1LDE3IEBAIHByaXZhdGU6
CiAgICAgICAgIGludCBtX3NwbGl0UmVzaXplT2Zmc2V0OwogICAgIH07CiAKKyAgICB2aXJ0dWFs
IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRy
ZW4oKTsgfQorICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFs
Q2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9CisKKyAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRnJhbWVTZXQiOyB9
CisgICAgdmlydHVhbCBib29sIGlzRnJhbWVTZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50
IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgYm9vbCBpc0No
aWxkQWxsb3dlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIAogICAg
IGlubGluZSBIVE1MRnJhbWVTZXRFbGVtZW50KiBmcmFtZVNldCgpIGNvbnN0OwogCiAgICAgdm9p
ZCBzZXRJc1Jlc2l6aW5nKGJvb2wpOwpAQCAtMTIyLDYgKzEyMywxNiBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9pc0NoaWxkUmVzaXppbmc7CiB9OwogCisKK2lubGluZSBSZW5kZXJGcmFtZVNldCog
dG9SZW5kZXJGcmFtZVNldChSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9i
amVjdCB8fCBvYmplY3QtPmlzRnJhbWVTZXQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJl
bmRlckZyYW1lU2V0Kj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBk
b2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlckZyYW1lU2V0KGNvbnN0IFJl
bmRlckZyYW1lU2V0Kik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJl
bmRlckZyYW1lU2V0X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmgJKHJl
dmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxNyArMzYsMjMgQEAgY2xh
c3MgUmVuZGVySFRNTENhbnZhcyA6IHB1YmxpYyBSZW5kZXJSZQogcHVibGljOgogICAgIFJlbmRl
ckhUTUxDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQqKTsKIAotICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJIVE1MQ2FudmFzIjsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0
eCwgaW50IHR5KTsKLQogICAgIHZvaWQgY2FudmFzU2l6ZUNoYW5nZWQoKTsKICAgICAKLXByb3Rl
Y3RlZDoKK3ByaXZhdGU6CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29u
c3QgeyByZXR1cm4gIlJlbmRlckhUTUxDYW52YXMiOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50
UmVwbGFjZWQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBp
bnRyaW5zaWNTaXplQ2hhbmdlZCgpIHsgY2FudmFzU2l6ZUNoYW5nZWQoKTsgfQotCiB9OwogCitp
bmxpbmUgUmVuZGVySFRNTENhbnZhcyogdG9SZW5kZXJIVE1MQ2FudmFzKFJlbmRlck9iamVjdCog
b2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8ICFzdHJjbXAob2JqZWN0LT5yZW5kZXJO
YW1lKCksICJSZW5kZXJIVE1MQ2FudmFzIikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJIVE1MQ2FudmFzKj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBk
b2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlckhUTUxDYW52YXMoY29uc3Qg
UmVuZGVySFRNTENhbnZhcyopOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBSZW5kZXJIVE1MQ2FudmFzX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAko
cmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSByZW5kZXIgb2JqZWN0IGltcGxlbWVudGF0aW9uIGZvciBLSFRNTC4KLSAqCiAgKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTEsMTAgKzQ5
LDYgQEAgUmVuZGVySW5saW5lOjpSZW5kZXJJbmxpbmUoTm9kZSogbm9kZSkKICAgICBzZXRDaGls
ZHJlbklubGluZSh0cnVlKTsKIH0KIAotUmVuZGVySW5saW5lOjp+UmVuZGVySW5saW5lKCkKLXsK
LX0KLQogdm9pZCBSZW5kZXJJbmxpbmU6OmRlc3Ryb3koKQogewogICAgIC8vIERldGFjaCBvdXIg
Y29udGludWF0aW9uIGZpcnN0LgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlz
aW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsOSArMSw3IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHJl
bmRlciBvYmplY3QgaW1wbGVtZW50YXRpb24gZm9yIEtIVE1MLgotICoKICAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAz
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNSwyMCArMzMsNTIgQEAgY2xhc3MgUG9zaXRpb247CiBj
bGFzcyBSZW5kZXJJbmxpbmUgOiBwdWJsaWMgUmVuZGVyQm94TW9kZWxPYmplY3QgewogcHVibGlj
OgogICAgIFJlbmRlcklubGluZShOb2RlKik7Ci0gICAgdmlydHVhbCB+UmVuZGVySW5saW5lKCk7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworCisgICAgdmlydHVhbCB2b2lkIGFkZENo
aWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAw
KTsKKworICAgIHZpcnR1YWwgaW50IG1hcmdpbkxlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBtYXJnaW5SaWdodCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworCisgICAgSW50UmVjdCBsaW5lc0Jv
dW5kaW5nQm94KCkgY29uc3Q7CisKKyAgICBJbmxpbmVGbG93Qm94KiBjcmVhdGVBbmRBcHBlbmRJ
bmxpbmVGbG93Qm94KCk7CisKKyAgICB2b2lkIGRpcnR5TGluZUJveGVzKGJvb2wgZnVsbExheW91
dCk7CisKKyAgICBSZW5kZXJMaW5lQm94TGlzdCogbGluZUJveGVzKCkgeyByZXR1cm4gJm1fbGlu
ZUJveGVzOyB9CisgICAgY29uc3QgUmVuZGVyTGluZUJveExpc3QqIGxpbmVCb3hlcygpIGNvbnN0
IHsgcmV0dXJuICZtX2xpbmVCb3hlczsgfQorCisgICAgSW5saW5lRmxvd0JveCogZmlyc3RMaW5l
Qm94KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94ZXMuZmlyc3RMaW5lQm94KCk7IH0KKyAgICBJ
bmxpbmVGbG93Qm94KiBsYXN0TGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveGVzLmxh
c3RMaW5lQm94KCk7IH0KKworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVhdGlvbjsgfQorCisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZURyYWdTdGF0ZShib29sIGRyYWdPbik7CisgICAgCisgICAgSW50U2l6ZSByZWxhdGl2ZVBv
c2l0aW9uZWRJbmxpbmVPZmZzZXQoY29uc3QgUmVuZGVyQm94KiBjaGlsZCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4
LCBpbnQgdHkpOworICAgIHZvaWQgcGFpbnRPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCosIGludCB0
eCwgaW50IHR5KTsKKworcHVibGljOgorICAgIGludCB2ZXJ0aWNhbFBvc2l0aW9uRnJvbUNhY2hl
KGJvb2wgZmlyc3RMaW5lKSBjb25zdDsKKyAgICB2b2lkIGludmFsaWRhdGVWZXJ0aWNhbFBvc2l0
aW9uKCkgeyBtX3ZlcnRpY2FsUG9zaXRpb24gPSBQb3NpdGlvblVuZGVmaW5lZDsgfQorCitwcml2
YXRlOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4o
KSB7IHJldHVybiBjaGlsZHJlbigpOyB9CiAgICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RD
aGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0K
ICAgICBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1
cm4gJm1fY2hpbGRyZW47IH0KICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkg
eyByZXR1cm4gJm1fY2hpbGRyZW47IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0K
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgYm9vbCBpc1JlbmRlcklubGluZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkID0gMCk7CiAgICAgdm9pZCBhZGRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRl
ck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogICAgIHZpcnR1
YWwgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKIApAQCAtNzMsOTUgKzEwMyw2NCBA
QCBwdWJsaWM6CiAgICAgLy8gSnVzdCBpZ25vcmUgdG9wL2JvdHRvbSBtYXJnaW5zIG9uIFJlbmRl
cklubGluZXMuCiAgICAgdmlydHVhbCBpbnQgbWFyZ2luVG9wKCkgY29uc3QgeyByZXR1cm4gMDsg
fQogICAgIHZpcnR1YWwgaW50IG1hcmdpbkJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAg
ICB2aXJ0dWFsIGludCBtYXJnaW5MZWZ0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbWFyZ2lu
UmlnaHQoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0
b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7Ci0gICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKLQogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVk
T3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lcik7CiAgICAgdmlydHVhbCBJbnRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGludCBvdXRsaW5lV2lkdGgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJlY3QsIGJvb2wgZml4ZWQpOwogCiAgICAg
dmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYp
OwogCi0gICAgSW50UmVjdCBsaW5lc0JvdW5kaW5nQm94KCkgY29uc3Q7Ci0gICAgCiAgICAgdmly
dHVhbCBJbnRSZWN0IGJvcmRlckJvdW5kaW5nQm94KCkgY29uc3QKICAgICB7CiAgICAgICAgIElu
dFJlY3QgYm91bmRpbmdCb3ggPSBsaW5lc0JvdW5kaW5nQm94KCk7CiAgICAgICAgIHJldHVybiBJ
bnRSZWN0KDAsIDAsIGJvdW5kaW5nQm94LndpZHRoKCksIGJvdW5kaW5nQm94LmhlaWdodCgpKTsK
ICAgICB9CiAKLSAgICBJbmxpbmVGbG93Qm94KiBjcmVhdGVBbmRBcHBlbmRJbmxpbmVGbG93Qm94
KCk7ICAgIAogICAgIHZpcnR1YWwgSW5saW5lRmxvd0JveCogY3JlYXRlSW5saW5lRmxvd0JveCgp
OyAvLyBTdWJjbGFzc2VkIGJ5IFNWRyBhbmQgUnVieQogCi0gICAgdm9pZCBkaXJ0eUxpbmVCb3hl
cyhib29sIGZ1bGxMYXlvdXQpOwogICAgIHZpcnR1YWwgdm9pZCBkaXJ0eUxpbmVzRnJvbUNoYW5n
ZWRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkKSB7IG1fbGluZUJveGVzLmRpcnR5TGluZXNGcm9t
Q2hhbmdlZENoaWxkKHRoaXMsIGNoaWxkKTsgfQogCi0gICAgUmVuZGVyTGluZUJveExpc3QqIGxp
bmVCb3hlcygpIHsgcmV0dXJuICZtX2xpbmVCb3hlczsgfQotICAgIGNvbnN0IFJlbmRlckxpbmVC
b3hMaXN0KiBsaW5lQm94ZXMoKSBjb25zdCB7IHJldHVybiAmbV9saW5lQm94ZXM7IH0KLQotICAg
IElubGluZUZsb3dCb3gqIGZpcnN0TGluZUJveCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJveGVz
LmZpcnN0TGluZUJveCgpOyB9Ci0gICAgSW5saW5lRmxvd0JveCogbGFzdExpbmVCb3goKSBjb25z
dCB7IHJldHVybiBtX2xpbmVCb3hlcy5sYXN0TGluZUJveCgpOyB9Ci0KICAgICB2aXJ0dWFsIGlu
dCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkg
Y29uc3Q7CiAKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGludWF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250aW51YXRpb247IH0KICAgICBSZW5kZXJJbmxpbmUqIGlubGluZUNvbnRp
bnVhdGlvbigpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29udGludWF0aW9uKFJlbmRlckJveE1vZGVs
T2JqZWN0KiBjKSB7IG1fY29udGludWF0aW9uID0gYzsgfQogICAgIAotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pOwotICAgIAogICAgIHZpcnR1YWwgdm9pZCBj
aGlsZEJlY2FtZU5vbklubGluZShSZW5kZXJPYmplY3QqIGNoaWxkKTsKIAogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYp
OwogCi0gICAgSW50U2l6ZSByZWxhdGl2ZVBvc2l0aW9uZWRJbmxpbmVPZmZzZXQoY29uc3QgUmVu
ZGVyQm94KiBjaGlsZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVj
dHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHkpOwotICAgIHZvaWQgcGFpbnRPdXRs
aW5lKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsKLQogICAgIHZpcnR1YWwgdm9p
ZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwogCi0g
ICAgaW50IHZlcnRpY2FsUG9zaXRpb25Gcm9tQ2FjaGUoYm9vbCBmaXJzdExpbmUpIGNvbnN0Owot
ICAgIHZvaWQgaW52YWxpZGF0ZVZlcnRpY2FsUG9zaXRpb24oKSB7IG1fdmVydGljYWxQb3NpdGlv
biA9IFBvc2l0aW9uVW5kZWZpbmVkOyB9Ci0KICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CiAgICAgdmlydHVhbCB2b2lkIGFkZERhc2hib2FyZFJlZ2lvbnMoVmVjdG9yPERhc2hib2FyZFJl
Z2lvblZhbHVlPiYpOwogI2VuZGlmCiAgICAgCi1wcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lk
IHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKCk7CiAg
ICAgCiAgICAgc3RhdGljIFJlbmRlcklubGluZSogY2xvbmVJbmxpbmUoUmVuZGVySW5saW5lKiBz
cmMpOwogCi1wcml2YXRlOgogICAgIHZvaWQgcGFpbnRPdXRsaW5lRm9yTGluZShHcmFwaGljc0Nv
bnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgcHJldkxpbmUsIGNvbnN0IElu
dFJlY3QmIHRoaXNMaW5lLCBjb25zdCBJbnRSZWN0JiBuZXh0TGluZSk7CiAgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlvbkJlZm9yZShSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KTsKIAotcHJvdGVjdGVkOgogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwog
ICAgIFJlbmRlckxpbmVCb3hMaXN0IG1fbGluZUJveGVzOyAgIC8vIEFsbCBvZiB0aGUgbGluZSBi
b3hlcyBjcmVhdGVkIGZvciB0aGlzIGlubGluZSBmbG93LiAgRm9yIGV4YW1wbGUsIDxpPkhlbGxv
PGJyPndvcmxkLjwvaT4gd2lsbCBoYXZlIHR3byA8aT4gbGluZSBib3hlcy4KIAotcHJpdmF0ZToK
ICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbV9jb250aW51YXRpb247IC8vIENhbiBiZSBlaXRo
ZXIgYSBibG9jayBvciBhbiBpbmxpbmUuIDxiPjxpPjxwPkhlbGxvPC9wPjwvaT48L2I+LiBJbiB0
aGlzIGV4YW1wbGUgdGhlIDxpPiB3aWxsIGhhdmUgYSBibG9jayBhcyBpdHMgY29udGludWF0aW9u
IGJ1dCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxi
PiB3aWxsIGp1c3QgaGF2ZSBhbiBpbmxpbmUgYXMgaXRzIGNvbnRpbnVhdGlvbi4KICAgICBtdXRh
YmxlIGludCBtX2xpbmVIZWlnaHQ7CiAgICAgbXV0YWJsZSBpbnQgbV92ZXJ0aWNhbFBvc2l0aW9u
OwogfTsKIAotaW5saW5lIFJlbmRlcklubGluZSogdG9SZW5kZXJJbmxpbmUoUmVuZGVyT2JqZWN0
KiBvKQoraW5saW5lIFJlbmRlcklubGluZSogdG9SZW5kZXJJbmxpbmUoUmVuZGVyT2JqZWN0KiBv
YmplY3QpCiB7IAotICAgIEFTU0VSVCghbyB8fCBvLT5pc1JlbmRlcklubGluZSgpKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVySW5saW5lKj4obyk7CisgICAgQVNTRVJUKCFvYmplY3Qg
fHwgb2JqZWN0LT5pc1JlbmRlcklubGluZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVySW5saW5lKj4ob2JqZWN0KTsKIH0KIAotaW5saW5lIGNvbnN0IFJlbmRlcklubGluZSogdG9S
ZW5kZXJJbmxpbmUoY29uc3QgUmVuZGVyT2JqZWN0KiBvKQoraW5saW5lIGNvbnN0IFJlbmRlcklu
bGluZSogdG9SZW5kZXJJbmxpbmUoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7IAotICAg
IEFTU0VSVCghbyB8fCBvLT5pc1JlbmRlcklubGluZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgUmVuZGVySW5saW5lKj4obyk7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0
LT5pc1JlbmRlcklubGluZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVy
SW5saW5lKj4ob2JqZWN0KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBh
biB1bm5lY2Vzc2FyeSBjYXN0LgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MCw3ICs2NzAsNyBAQCBJbnRSZWN0
IFJlbmRlckxheWVyQmFja2luZzo6Y29udGVudHNCb3goCiAgICAgSW50UmVjdCBjb250ZW50c1Jl
Y3Q7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGlmIChyZW5kZXJlcigpLT5pc1ZpZGVvKCkpIHsK
LSAgICAgICAgUmVuZGVyVmlkZW8qIHZpZGVvUmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJW
aWRlbyo+KHJlbmRlcmVyKCkpOworICAgICAgICBSZW5kZXJWaWRlbyogdmlkZW9SZW5kZXJlciA9
IHRvUmVuZGVyVmlkZW8ocmVuZGVyZXIoKSk7CiAgICAgICAgIGNvbnRlbnRzUmVjdCA9IHZpZGVv
UmVuZGVyZXItPnZpZGVvQm94KCk7CiAgICAgfSBlbHNlCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gNDY3NzcpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0
ZUJhY2tpbgogI2lmIEVOQUJMRShWSURFTykKICAgICBpZiAobGF5ZXJDaGFuZ2VkICYmIGxheWVy
LT5yZW5kZXJlcigpLT5pc1ZpZGVvKCkpIHsKICAgICAgICAgLy8gSWYgaXQncyBhIHZpZGVvLCBn
aXZlIHRoZSBtZWRpYSBwbGF5ZXIgYSBjaGFuY2UgdG8gaG9vayB1cCB0byB0aGUgbGF5ZXIuCi0g
ICAgICAgIFJlbmRlclZpZGVvKiB2aWRlbyA9IHN0YXRpY19jYXN0PFJlbmRlclZpZGVvKj4obGF5
ZXItPnJlbmRlcmVyKCkpOworICAgICAgICBSZW5kZXJWaWRlbyogdmlkZW8gPSB0b1JlbmRlclZp
ZGVvKGxheWVyLT5yZW5kZXJlcigpKTsKICAgICAgICAgdmlkZW8tPmFjY2VsZXJhdGVkUmVuZGVy
aW5nU3RhdGVDaGFuZ2VkKCk7CiAgICAgfQogI2VuZGlmCkBAIC04OTAsNyArODkwLDcgQEAgYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcAogewogI2lmIEVOQUJMRShWSURF
TykKICAgICBpZiAocmVuZGVyZXItPmlzVmlkZW8oKSkgewotICAgICAgICBSZW5kZXJWaWRlbyog
dmlkZW8gPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWRlbyo+KHJlbmRlcmVyKTsKKyAgICAgICAgUmVu
ZGVyVmlkZW8qIHZpZGVvID0gdG9SZW5kZXJWaWRlbyhyZW5kZXJlcik7CiAgICAgICAgIHJldHVy
biBjYW5BY2NlbGVyYXRlVmlkZW9SZW5kZXJpbmcodmlkZW8pOwogICAgIH0KICNlbmRpZgpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHNlbGVjdCBlbGVtZW50IHJlbmRlcmVy
IGluIFdlYkNvcmUuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM5LDggKzM5LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFJlbmRl
ckxpc3RCb3ggOiBwdWJsaWMgUmVuZGVyQmxvY2ssIHByaXZhdGUgU2Nyb2xsYmFyQ2xpZW50IHsK
IHB1YmxpYzoKICAgICBSZW5kZXJMaXN0Qm94KEVsZW1lbnQqKTsKLSAgICB+UmVuZGVyTGlzdEJv
eCgpOworICAgIHZpcnR1YWwgflJlbmRlckxpc3RCb3goKTsKIAorICAgIHZvaWQgc2VsZWN0aW9u
Q2hhbmdlZCgpOworCisgICAgdm9pZCBzZXRPcHRpb25zQ2hhbmdlZChib29sIGNoYW5nZWQpIHsg
bV9vcHRpb25zQ2hhbmdlZCA9IGNoYW5nZWQ7IH0KKworICAgIGludCBsaXN0SW5kZXhBdE9mZnNl
dChpbnQgeCwgaW50IHkpOworICAgIEludFJlY3QgaXRlbUJvdW5kaW5nQm94UmVjdChpbnQgdHgs
IGludCB0eSwgaW50IGluZGV4KTsKKworICAgIGJvb2wgc2Nyb2xsVG9SZXZlYWxFbGVtZW50QXRM
aXN0SW5kZXgoaW50IGluZGV4KTsKKyAgICBib29sIGxpc3RJbmRleElzVmlzaWJsZShpbnQgaW5k
ZXgpOworCisgICAgaW50IHNjcm9sbFRvd2FyZChjb25zdCBJbnRQb2ludCYpOyAvLyBSZXR1cm5z
IHRoZSBuZXcgaW5kZXggb3IgLTEgaWYgbm8gc2Nyb2xsIG9jY3VycmVkCisKK3ByaXZhdGU6CiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
ckxpc3RCb3giOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0Qm94KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQpAQCAtNjMsMTYgKzc2LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwogCi0gICAgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKCk7Ci0KLSAgICB2b2lkIHNl
dE9wdGlvbnNDaGFuZ2VkKGJvb2wgY2hhbmdlZCkgeyBtX29wdGlvbnNDaGFuZ2VkID0gY2hhbmdl
ZDsgfQotCi0gICAgaW50IGxpc3RJbmRleEF0T2Zmc2V0KGludCB4LCBpbnQgeSk7Ci0gICAgSW50
UmVjdCBpdGVtQm91bmRpbmdCb3hSZWN0KGludCB0eCwgaW50IHR5LCBpbnQgaW5kZXgpOwotCi0g
ICAgYm9vbCBzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleChpbnQgaW5kZXgpOwotICAg
IGJvb2wgbGlzdEluZGV4SXNWaXNpYmxlKGludCBpbmRleCk7Ci0KICAgICB2aXJ0dWFsIGJvb2wg
Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZChib29sKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAgICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcEF1
dG9zY3JvbGwoKTsKQEAgLTgwLDggKzgzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRQYW5TY3JvbGwoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lk
IHBhblNjcm9sbChjb25zdCBJbnRQb2ludCYpOwogCi0gICAgaW50IHNjcm9sbFRvd2FyZChjb25z
dCBJbnRQb2ludCYpOyAvLyBSZXR1cm5zIHRoZSBuZXcgaW5kZXggb3IgLTEgaWYgbm8gc2Nyb2xs
IG9jY3VycmVkCi0KICAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsTGVmdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50
IHNjcm9sbFRvcCgpIGNvbnN0OwpAQCAtOTIsMTAgKzkzLDggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCi1wcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAotcHJpdmF0ZToKICAgICAvLyBTY3JvbGxi
YXJDbGllbnQgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xs
YmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmKTsKQEAgLTEzMCw2ICsxMjksMTUgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CiB9OwogCitpbmxpbmUgUmVuZGVyTGlzdEJveCogdG9S
ZW5kZXJMaXN0Qm94KFJlbmRlck9iamVjdCogb2JqZWN0KQoreyAKKyAgICBBU1NFUlQoIW9iamVj
dCB8fCBvYmplY3QtPmlzTGlzdEJveCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
TGlzdEJveCo+KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcg
YW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJMaXN0Qm94KGNvbnN0IFJlbmRlckxp
c3RCb3gqKTsKKwogfSAvLyBuYW1lcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZW5kZXJMaXN0
Qm94X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDQ2
Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MSwyMCArOTEsMjAgQEAgc3RhdGljIE5vZGUqIGVuY2xvc2luZ0xpc3QoTm9kZSog
bm9kZSkKIAogc3RhdGljIFJlbmRlckxpc3RJdGVtKiBwcmV2aW91c0xpc3RJdGVtKE5vZGUqIGxp
c3QsIGNvbnN0IFJlbmRlckxpc3RJdGVtKiBpdGVtKQogewotICAgIGZvciAoTm9kZSogbiA9IGl0
ZW0tPm5vZGUoKS0+dHJhdmVyc2VQcmV2aW91c05vZGUoKTsgbiAhPSBsaXN0OyBuID0gbi0+dHJh
dmVyc2VQcmV2aW91c05vZGUoKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIG8gPSBuLT5yZW5k
ZXJlcigpOwotICAgICAgICBpZiAobyAmJiBvLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgICAg
IE5vZGUqIG90aGVyTGlzdCA9IGVuY2xvc2luZ0xpc3Qobik7Ci0gICAgICAgICAgICAvLyBUaGlz
IGl0ZW0gaXMgcGFydCBvZiBvdXIgY3VycmVudCBsaXN0LCBzbyBpdCdzIHdoYXQgd2UncmUgbG9v
a2luZyBmb3IuCi0gICAgICAgICAgICBpZiAobGlzdCA9PSBvdGhlckxpc3QpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtKj4obyk7Ci0gICAgICAgICAg
ICAvLyBXZSBmb3VuZCBvdXJzZWxmIGluc2lkZSBhbm90aGVyIGxpc3Q7IGxldHMgc2tpcCB0aGUg
cmVzdCBvZiBpdC4KLSAgICAgICAgICAgIC8vIFVzZSB0cmF2ZXJzZU5leHROb2RlKCkgaGVyZSBi
ZWNhdXNlIHRoZSBvdGhlciBsaXN0IGl0c2VsZiBtYXkgYWN0dWFsbHkKLSAgICAgICAgICAgIC8v
IGJlIGEgbGlzdCBpdGVtIGl0c2VsZi4gV2UgbmVlZCB0byBleGFtaW5lIGl0LCBzbyB3ZSBkbyB0
aGlzIHRvIGNvdW50ZXJhY3QKLSAgICAgICAgICAgIC8vIHRoZSB0cmF2ZXJzZVByZXZpb3VzTm9k
ZSgpIHRoYXQgd2lsbCBiZSBkb25lIGJ5IHRoZSBsb29wLgotICAgICAgICAgICAgaWYgKG90aGVy
TGlzdCkKLSAgICAgICAgICAgICAgICBuID0gb3RoZXJMaXN0LT50cmF2ZXJzZU5leHROb2RlKCk7
Ci0gICAgICAgIH0KKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBpdGVtLT5ub2RlKCktPnRyYXZlcnNl
UHJldmlvdXNOb2RlKCk7IG5vZGUgIT0gbGlzdDsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlUHJldmlv
dXNOb2RlKCkpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRl
cmVyKCk7CisgICAgICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0xpc3RJdGVtKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgTm9kZSogb3RoZXJMaXN0ID0gZW5jbG9z
aW5nTGlzdChub2RlKTsKKyAgICAgICAgLy8gVGhpcyBpdGVtIGlzIHBhcnQgb2Ygb3VyIGN1cnJl
bnQgbGlzdCwgc28gaXQncyB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLgorICAgICAgICBpZiAobGlz
dCA9PSBvdGhlckxpc3QpCisgICAgICAgICAgICByZXR1cm4gdG9SZW5kZXJMaXN0SXRlbShyZW5k
ZXJlcik7CisgICAgICAgIC8vIFdlIGZvdW5kIG91cnNlbGYgaW5zaWRlIGFub3RoZXIgbGlzdDsg
bGV0cyBza2lwIHRoZSByZXN0IG9mIGl0LgorICAgICAgICAvLyBVc2UgdHJhdmVyc2VOZXh0Tm9k
ZSgpIGhlcmUgYmVjYXVzZSB0aGUgb3RoZXIgbGlzdCBpdHNlbGYgbWF5IGFjdHVhbGx5CisgICAg
ICAgIC8vIGJlIGEgbGlzdCBpdGVtIGl0c2VsZi4gV2UgbmVlZCB0byBleGFtaW5lIGl0LCBzbyB3
ZSBkbyB0aGlzIHRvIGNvdW50ZXJhY3QKKyAgICAgICAgLy8gdGhlIHRyYXZlcnNlUHJldmlvdXNO
b2RlKCkgdGhhdCB3aWxsIGJlIGRvbmUgYnkgdGhlIGxvb3AuCisgICAgICAgIGlmIChvdGhlckxp
c3QpCisgICAgICAgICAgICBub2RlID0gb3RoZXJMaXN0LT50cmF2ZXJzZU5leHROb2RlKCk7CiAg
ICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMzAyLDkgKzMwMiw5IEBAIHZvaWQgUmVuZGVyTGlz
dEl0ZW06OmV4cGxpY2l0VmFsdWVDaGFuZ2UKICAgICBSZW5kZXJPYmplY3QqIGxpc3RSZW5kZXJl
ciA9IDA7CiAgICAgaWYgKGxpc3ROb2RlKQogICAgICAgICBsaXN0UmVuZGVyZXIgPSBsaXN0Tm9k
ZS0+cmVuZGVyZXIoKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogciA9IHRoaXM7IHI7IHIgPSBy
LT5uZXh0SW5QcmVPcmRlcihsaXN0UmVuZGVyZXIpKQotICAgICAgICBpZiAoci0+aXNMaXN0SXRl
bSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHN0YXRpY19jYXN0PFJl
bmRlckxpc3RJdGVtKj4ocik7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhp
czsgcmVuZGVyZXI7IHJlbmRlcmVyID0gcmVuZGVyZXItPm5leHRJblByZU9yZGVyKGxpc3RSZW5k
ZXJlcikpCisgICAgICAgIGlmIChyZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7CisgICAgICAgICAg
ICBSZW5kZXJMaXN0SXRlbSogaXRlbSA9IHRvUmVuZGVyTGlzdEl0ZW0ocmVuZGVyZXIpOwogICAg
ICAgICAgICAgaWYgKCFpdGVtLT5tX2hhc0V4cGxpY2l0VmFsdWUpIHsKICAgICAgICAgICAgICAg
ICBpdGVtLT5tX2lzVmFsdWVVcFRvRGF0ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmIChS
ZW5kZXJMaXN0TWFya2VyKiBtYXJrZXIgPSBpdGVtLT5tX21hcmtlcikKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uaAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0SXRlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTMzLDEyICszMyw2IEBAIGNsYXNzIFJlbmRlckxpc3RJdGVtIDogcHVibGljIFJlbmRl
ckJsb2MKIHB1YmxpYzoKICAgICBSZW5kZXJMaXN0SXRlbShOb2RlKik7CiAKLSAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyTGlzdEl0ZW0i
OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotCiAgICAgaW50IHZhbHVlKCkg
Y29uc3QgeyBpZiAoIW1faXNWYWx1ZVVwVG9EYXRlKSB1cGRhdGVWYWx1ZU5vdygpOyByZXR1cm4g
bV92YWx1ZTsgfQogICAgIHZvaWQgdXBkYXRlVmFsdWUoKTsKIApAQCAtNDcsNiArNDEsMTYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0RXhwbGljaXRWYWx1ZShpbnQgdmFsdWUpOwogICAgIHZvaWQg
Y2xlYXJFeHBsaWNpdFZhbHVlKCk7CiAKKyAgICB2b2lkIHNldE5vdEluTGlzdChib29sIG5vdElu
TGlzdCkgeyBtX25vdEluTGlzdCA9IG5vdEluTGlzdDsgfQorICAgIGJvb2wgbm90SW5MaXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9ub3RJbkxpc3Q7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyTGlzdEl0ZW0iOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworCiAgICAgdmlydHVhbCBib29sIGlz
RW1wdHkoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHkpOwogCkBAIC01NSwxNSArNTksMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIHBvc2l0aW9uTGlzdE1hcmtlcigpOwogCi0gICAgdm9pZCBzZXROb3RJbkxpc3QoYm9vbCBu
b3RJbkxpc3QpIHsgbV9ub3RJbkxpc3QgPSBub3RJbkxpc3Q7IH0KLSAgICBib29sIG5vdEluTGlz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbm90SW5MaXN0OyB9Ci0KICAgICBjb25zdCBTdHJpbmcmIG1h
cmtlclRleHQoKSBjb25zdDsKIAotcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAK
LXByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVNYXJrZXJMb2NhdGlvbigpOwogICAgIGlubGluZSBp
bnQgY2FsY1ZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVWYWx1ZU5vdygpIGNvbnN0OwpA
QCAtNzgsNiArNzcsMTUgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbm90SW5MaXN0IDogMTsKIH07
CiAKK2lubGluZSBSZW5kZXJMaXN0SXRlbSogdG9SZW5kZXJMaXN0SXRlbShSZW5kZXJPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzTGlzdEl0ZW0oKSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtKj4ob2JqZWN0KTsKK30KKwor
Ly8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9p
ZCB0b1JlbmRlckxpc3RJdGVtKGNvbnN0IFJlbmRlckxpc3RJdGVtKik7CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlckxpc3RJdGVtX2gKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTM2LDggKzM2LDE1IEBAIFN0cmluZyBsaXN0TWFya2VyVGV4dChFTGlzdFN0
eWxlVHlwZSwgaW4KIGNsYXNzIFJlbmRlckxpc3RNYXJrZXIgOiBwdWJsaWMgUmVuZGVyQm94IHsK
IHB1YmxpYzoKICAgICBSZW5kZXJMaXN0TWFya2VyKFJlbmRlckxpc3RJdGVtKik7Ci0gICAgflJl
bmRlckxpc3RNYXJrZXIoKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJMaXN0TWFya2VyKCk7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKworICAgIGNvbnN0IFN0cmluZyYgdGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQorCisgICAgYm9vbCBpc0luc2lkZSgpIGNvbnN0
OworCitwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJSZW5kZXJMaXN0TWFya2VyIjsgfQogCiAgICAgdmlydHVhbCBib29sIGlzTGlz
dE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTQ1LDcgKzUyLDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lk
dGhzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwg
Y29uc3QgSW50UmVjdCogPSAwKTsKIApAQCAtNTYsOSArNjIsNiBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGlzSW1hZ2UoKSBjb25zdDsKICAgICBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuICFp
c0ltYWdlKCk7IH0KLSAgICBjb25zdCBTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHQ7IH0KLQotICAgIGJvb2wgaXNJbnNpZGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBz
ZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSk7CiAgICAgdmlydHVhbCBJbnRSZWN0IHNl
bGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSk7CkBAIC02NiwxMSArNjksOSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZU1hcmdpbnMoKTsKIAotcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5k
ZXJTdHlsZSogbmV3U3R5bGUpOwogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKLXByaXZhdGU6CiAg
ICAgSW50UmVjdCBnZXRSZWxhdGl2ZU1hcmtlclJlY3QoKTsKIAogICAgIFN0cmluZyBtX3RleHQ7
CkBAIC03OCw2ICs3OSwyMSBAQCBwcml2YXRlOgogICAgIFJlbmRlckxpc3RJdGVtKiBtX2xpc3RJ
dGVtOwogfTsKIAoraW5saW5lIFJlbmRlckxpc3RNYXJrZXIqIHRvUmVuZGVyTGlzdE1hcmtlcihS
ZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlz
TGlzdE1hcmtlcigpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdE1hcmtlcio+
KG9iamVjdCk7Cit9CisKK2lubGluZSBjb25zdCBSZW5kZXJMaXN0TWFya2VyKiB0b1JlbmRlckxp
c3RNYXJrZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmpl
Y3QgfHwgb2JqZWN0LT5pc0xpc3RNYXJrZXIoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IFJlbmRlckxpc3RNYXJrZXIqPihvYmplY3QpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2gg
YW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyTGlzdE1hcmtl
cihjb25zdCBSZW5kZXJMaXN0TWFya2VyKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIFJlbmRlckxpc3RNYXJrZXJfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVkaWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5o
CShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NCwxOCArNTQsOSBAQCBwdWJsaWM6CiAgICAgUmVu
ZGVyTWVkaWEoSFRNTE1lZGlhRWxlbWVudCosIGNvbnN0IEludFNpemUmIGludHJpbnNpY1NpemUp
OwogICAgIHZpcnR1YWwgflJlbmRlck1lZGlhKCk7CiAgICAgCi0gICAgdmlydHVhbCBSZW5kZXJP
YmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0K
LSAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVu
KCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQogICAgIGNvbnN0IFJlbmRlck9iamVjdENo
aWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogICAgIFJl
bmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQog
Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJl
dHVybiAiUmVuZGVyTWVkaWEiOyB9Ci0gICAgdmlydHVhbCBib29sIGlzTWVkaWEoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9Ci0gICAgCiAgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
KCkgY29uc3Q7CiAgICAgTWVkaWFQbGF5ZXIqIHBsYXllcigpIGNvbnN0OwogCkBAIC04MCwxMSAr
NzEsMjIgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50Kik7CiAK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisKK3ByaXZhdGU6CisgICAg
dmlydHVhbCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJu
IGNoaWxkcmVuKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCog
dmlydHVhbENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQorCisgICAgdmly
dHVhbCB2b2lkIGRlc3Ryb3koKTsKKyAgICAKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRl
ck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyTWVkaWEiOyB9CisgICAgdmlydHVhbCBib29s
IGlzTWVkaWEoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICB2aXJ0dWFsIGludCBsb3dl
c3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yID0gdHJ1ZSwgYm9vbCBpbmNs
dWRlU2VsZiA9IHRydWUpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHJpZ2h0bW9zdFBvc2l0aW9u
KGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVlLCBib29sIGluY2x1ZGVTZWxmID0g
dHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgbGVmdG1vc3RQb3NpdGlvbihib29sIGluY2x1
ZGVPdmVyZmxvd0ludGVyaW9yID0gdHJ1ZSwgYm9vbCBpbmNsdWRlU2VsZiA9IHRydWUpIGNvbnN0
OwogCi1wcml2YXRlOgogICAgIHZvaWQgY3JlYXRlQ29udHJvbHNTaGFkb3dSb290KCk7CiAgICAg
dm9pZCBkZXN0cm95Q29udHJvbHNTaGFkb3dSb290KCk7CiAgICAgdm9pZCBjcmVhdGVQYW5lbCgp
OwpAQCAtMTM2LDYgKzEzOCwxNSBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fb3BhY2l0eUFuaW1h
dGlvblRvOwogfTsKIAoraW5saW5lIFJlbmRlck1lZGlhKiB0b1JlbmRlck1lZGlhKFJlbmRlck9i
amVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNNZWRpYSgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTWVkaWEqPihvYmplY3QpOworfQorCisv
LyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lk
IHRvUmVuZGVyTWVkaWEoY29uc3QgUmVuZGVyTWVkaWEqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkocmV2aXNp
b24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCwxNiBAQCBjbGFzcyBSZW5kZXJUZXh0OwogY2xhc3MgUmVuZGVy
TWVudUxpc3QgOiBwdWJsaWMgUmVuZGVyRmxleGlibGVCb3gsIHByaXZhdGUgUG9wdXBNZW51Q2xp
ZW50IHsKIHB1YmxpYzoKICAgICBSZW5kZXJNZW51TGlzdChFbGVtZW50Kik7Ci0gICAgflJlbmRl
ck1lbnVMaXN0KCk7CisgICAgdmlydHVhbH5SZW5kZXJNZW51TGlzdCgpOworCitwdWJsaWM6Cisg
ICAgYm9vbCBwb3B1cElzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wdXBJc1Zpc2libGU7
IH0KKyAgICB2b2lkIHNob3dQb3B1cCgpOworICAgIHZvaWQgaGlkZVBvcHVwKCk7CisKKyAgICB2
b2lkIHNldE9wdGlvbnNDaGFuZ2VkKGJvb2wgY2hhbmdlZCkgeyBtX29wdGlvbnNDaGFuZ2VkID0g
Y2hhbmdlZDsgfQorCisgICAgU3RyaW5nIHRleHQoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgaXNNZW51TGlzdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTU5LDE2
ICs2OCw2IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsK
IAotcHVibGljOgotICAgIGJvb2wgcG9wdXBJc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Bv
cHVwSXNWaXNpYmxlOyB9Ci0gICAgdm9pZCBzaG93UG9wdXAoKTsKLSAgICB2b2lkIGhpZGVQb3B1
cCgpOwotCi0gICAgdm9pZCBzZXRPcHRpb25zQ2hhbmdlZChib29sIGNoYW5nZWQpIHsgbV9vcHRp
b25zQ2hhbmdlZCA9IGNoYW5nZWQ7IH0KLQotICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7Ci0KLXBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAogICAgIC8vIFBvcHVwTWVudUNsaWVudCBt
ZXRob2RzCkBAIC0xMTQsNiArMTEzLDE1IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3BvcHVwSXNW
aXNpYmxlOwogfTsKIAoraW5saW5lIFJlbmRlck1lbnVMaXN0KiB0b1JlbmRlck1lbnVMaXN0KFJl
bmRlck9iamVjdCogb2JqZWN0KQoreyAKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlz
TWVudUxpc3QoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlck1lbnVMaXN0Kj4ob2Jq
ZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2Fy
eSBjYXN0Lgordm9pZCB0b1JlbmRlck1lbnVMaXN0KGNvbnN0IFJlbmRlck1lbnVMaXN0Kik7CisK
IH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9u
IDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ3LDkgKzI0NywxMCBAQCBib29sIFJlbmRlck9iamVjdDo6aXNIVE1MTWFycXVl
ZSgpIGNvbnN0CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZUxpc3RNYXJrZXJOdW1iZXJzKFJlbmRlck9i
amVjdCogY2hpbGQpCiB7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIHIgPSBjaGlsZDsgcjsgciA9
IHItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlmIChyLT5pc0xpc3RJdGVtKCkpCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+KHIpLT51cGRhdGVWYWx1ZSgpOworICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBzaWJsaW5nID0gY2hpbGQ7IHNpYmxpbmc7IHNpYmxpbmcgPSBz
aWJsaW5nLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5pc0xpc3RJdGVt
KCkpCisgICAgICAgICAgICB0b1JlbmRlckxpc3RJdGVtKHNpYmxpbmcpLT51cGRhdGVWYWx1ZSgp
OworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJPYmplY3Q6OmFkZENoaWxkKFJlbmRlck9iamVjdCog
bmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEsMTMgKzQxLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgdXBk
YXRlTGlzdE1hcmtlck51bWJlcnMoUmVuZGVyT2JqZWN0KiBjaGlsZCkKIHsKLSAgICBmb3IgKFJl
bmRlck9iamVjdCogciA9IGNoaWxkOyByOyByID0gci0+bmV4dFNpYmxpbmcoKSkgewotICAgICAg
ICBpZiAoci0+aXNMaXN0SXRlbSgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTGlz
dEl0ZW0qPihyKS0+dXBkYXRlVmFsdWUoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogc2libGlu
ZyA9IGNoaWxkOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKSkgewor
ICAgICAgICBpZiAoc2libGluZy0+aXNMaXN0SXRlbSgpKQorICAgICAgICAgICAgdG9SZW5kZXJM
aXN0SXRlbShzaWJsaW5nKS0+dXBkYXRlVmFsdWUoKTsKICAgICB9CiB9CiAKLQogdm9pZCBSZW5k
ZXJPYmplY3RDaGlsZExpc3Q6OmRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCkKIHsKICAgICB3aGls
ZSAoZmlyc3RDaGlsZCgpKSB7CkBAIC0yODEsNyArMjgwLDcgQEAgc3RhdGljIHZvaWQgaW52YWxp
ZGF0ZUNvdW50ZXJzSW5Db250YWluZQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChSZW5kZXJP
YmplY3QqIGNvbnRlbnQgPSBjb250YWluZXItPmZpcnN0Q2hpbGQoKTsgY29udGVudDsgY29udGVu
dCA9IGNvbnRlbnQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNvbnRlbnQtPmlzQ291
bnRlcigpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQ291bnRlcio+KGNvbnRlbnQp
LT5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICB0b1JlbmRlckNvdW50ZXIoY29udGVudCktPmlu
dmFsaWRhdGUoKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBh
cnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmgJKHJldmlz
aW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSwxNSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJQYXJ0IjsgfQogfTsKIAoraW5saW5l
IFJlbmRlclBhcnQqIHRvUmVuZGVyUGFydChSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBB
U1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzUmVuZGVyUGFydCgpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UmVuZGVyUGFydCo+KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBh
bnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9SZW5kZXJQYXJ0KGNvbnN0
IFJlbmRlclBhcnQqKTsKKwogfQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclBhcnRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQ
YXJ0T2JqZWN0LmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UGFydE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChD
KSAyMDAwIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA5IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQyLDYg
KzQyLDE1IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHZpZXdDbGVhcmVkKCk7CiB9Owog
CitpbmxpbmUgUmVuZGVyUGFydE9iamVjdCogdG9SZW5kZXJQYXJ0T2JqZWN0KFJlbmRlck9iamVj
dCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IChvYmplY3QtPmlzUmVuZGVyUGFy
dCgpICYmICFvYmplY3QtPmlzRnJhbWUoKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJQYXJ0T2JqZWN0Kj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBk
b2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclBhcnRPYmplY3QoY29uc3Qg
UmVuZGVyUGFydE9iamVjdCopOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBSZW5kZXJQYXJ0T2JqZWN0X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmgJKHJldmlzaW9u
IDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw5IEBAIGNsYXNzIFJlbmRlclBhdGggOiBwdWJsaWMgUmVuZGVyU1ZHTW9k
ZWwKIHB1YmxpYzoKICAgICBSZW5kZXJQYXRoKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Kik7CiAKKyAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3Q7CisKK3ByaXZhdGU6CiAgICAgLy8g
SGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tlCiAgICAg
Ym9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNGaWxsID0g
dHJ1ZSkgY29uc3Q7CiAgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50Jiwg
Ym9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpIGNvbnN0OwpAQCAtNDksNyArNTIsNiBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVG9QYXJlbnRUcmFu
c2Zvcm0oKSBjb25zdDsKIAotICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdDsKICAgICB2b2lk
IHNldFBhdGgoY29uc3QgUGF0aCYpOwogCiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyUGF0aCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTczLDYgKzc1LDIxIEBAIHByaXZhdGU6CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9sb2NhbFRyYW5zZm9ybTsKIH07CiAKK2lubGluZSBSZW5k
ZXJQYXRoKiB0b1JlbmRlclBhdGgoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJU
KCFvYmplY3QgfHwgb2JqZWN0LT5pc1JlbmRlclBhdGgoKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFJlbmRlclBhdGgqPihvYmplY3QpOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVyUGF0aCog
dG9SZW5kZXJQYXRoKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCgh
b2JqZWN0IHx8IG9iamVjdC0+aXNSZW5kZXJQYXRoKCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBSZW5kZXJQYXRoKj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFu
eW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclBhdGgoY29uc3Qg
UmVuZGVyUGF0aCopOworCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5oCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzIsMjUgQEAgcHVibGljOgog
ICAgIFJlbmRlclJlcGxhY2VkKE5vZGUqLCBjb25zdCBJbnRTaXplJiBpbnRyaW5zaWNTaXplKTsK
ICAgICB2aXJ0dWFsIH5SZW5kZXJSZXBsYWNlZCgpOwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOworCisgICAgdmlydHVhbCBJbnRTaXplIGludHJpbnNpY1NpemUoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0
ZSk7CisKKyAgICBib29sIGlzU2VsZWN0ZWQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSk7CisKKyAgICB2b2lkIHNldEludHJpbnNpY1NpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZp
cnR1YWwgdm9pZCBpbnRyaW5zaWNTaXplQ2hhbmdlZCgpOworCisgICAgYm9vbCBzaG91bGRQYWlu
dChQYWludEluZm8mLCBpbnQmIHR4LCBpbnQmIHR5KTsKKyAgICB2b2lkIGFkanVzdE92ZXJmbG93
Rm9yQm94U2hhZG93QW5kUmVmbGVjdCgpOworICAgIEludFJlY3QgbG9jYWxTZWxlY3Rpb25SZWN0
KGJvb2wgY2hlY2tXaGV0aGVyU2VsZWN0ZWQgPSB0cnVlKSBjb25zdDsKKworcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
UmVwbGFjZWQiOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KQEAgLTQwLDE1ICs1OSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94
ID0gZmFsc2UpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7Ci0g
ICAgCi0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpOworCiAgICAgdmlydHVhbCBpbnQgbWluaW11
bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRSZXBsYWNlZChQYWludEluZm8mLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovKSB7IH0KIAotICAg
IHZpcnR1YWwgSW50U2l6ZSBpbnRyaW5zaWNTaXplKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIGlu
dCBvdmVyZmxvd0hlaWdodChib29sIGluY2x1ZGVJbnRlcmlvciA9IHRydWUpIGNvbnN0OwogICAg
IHZpcnR1YWwgaW50IG92ZXJmbG93V2lkdGgoYm9vbCBpbmNsdWRlSW50ZXJpb3IgPSB0cnVlKSBj
b25zdDsKICAgICB2aXJ0dWFsIGludCBvdmVyZmxvd0xlZnQoYm9vbCBpbmNsdWRlSW50ZXJpb3Ig
PSB0cnVlKSBjb25zdDsKQEAgLTYxLDIyICs3Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CiAgICAgCiAg
ICAgdmlydHVhbCBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpOwot
ICAgIHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRy
dWUpOwotCi0gICAgYm9vbCBpc1NlbGVjdGVkKCkgY29uc3Q7CiAKLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpOwotCi0gICAgdm9pZCBzZXRJbnRyaW5zaWNTaXplKGNvbnN0IEludFNp
emUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW50cmluc2ljU2l6ZUNoYW5nZWQoKTsKLQotICAgIGJv
b2wgc2hvdWxkUGFpbnQoUGFpbnRJbmZvJiwgaW50JiB0eCwgaW50JiB0eSk7Ci0gICAgdm9pZCBh
ZGp1c3RPdmVyZmxvd0ZvckJveFNoYWRvd0FuZFJlZmxlY3QoKTsKLSAgICBJbnRSZWN0IGxvY2Fs
U2VsZWN0aW9uUmVjdChib29sIGNoZWNrV2hldGhlclNlbGVjdGVkID0gdHJ1ZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1
ZSk7CiAKLXByaXZhdGU6CiAgICAgSW50U2l6ZSBtX2ludHJpbnNpY1NpemU7CiB9OwogCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
OCBAQCBjbGFzcyBTVkdFbGVtZW50OwogY2xhc3MgUmVuZGVyU1ZHQmxvY2sgOiBwdWJsaWMgUmVu
ZGVyQmxvY2ssIHByb3RlY3RlZCBTVkdSZW5kZXJCYXNlIHsKIHB1YmxpYzoKICAgICBSZW5kZXJT
VkdCbG9jayhTVkdFbGVtZW50Kik7CisKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFN0
eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+KTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCAr
NDIsNiBAQCBSZW5kZXJTVkdDb250YWluZXI6OlJlbmRlclNWR0NvbnRhaW5lcihTCiB7CiB9CiAK
LVJlbmRlclNWR0NvbnRhaW5lcjo6flJlbmRlclNWR0NvbnRhaW5lcigpCi17Ci19Ci0KIGJvb2wg
UmVuZGVyU1ZHQ29udGFpbmVyOjpkcmF3c0NvbnRlbnRzKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9kcmF3c0NvbnRlbnRzOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFp
bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVy
LmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFp
bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgog
ICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogICAgIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgICAgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsMTAgKzM0LDcgQEAgY2xhc3MgU1ZHRWxlbWVu
dDsKIGNsYXNzIFJlbmRlclNWR0NvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJTVkdNb2RlbE9iamVj
dCB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU1ZHQ29udGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQqKTsK
LSAgICB+UmVuZGVyU1ZHQ29udGFpbmVyKCk7CiAKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENo
aWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQotICAgIHZp
cnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25z
dCB7IHJldHVybiBjaGlsZHJlbigpOyB9CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAgICAgUmVuZGVyT2Jq
ZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAKQEAgLTQ0
LDExICs0MiwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREcmF3c0NvbnRlbnRzKGJvb2wpOwog
ICAgIGJvb2wgZHJhd3NDb250ZW50cygpIGNvbnN0OwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CisKK3By
aXZhdGU6CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJl
bigpIHsgcmV0dXJuIGNoaWxkcmVuKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVj
dENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsg
fQorCiAgICAgdmlydHVhbCBib29sIGlzU1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICJSZW5kZXJTVkdDb250YWluZXIiOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50
WSk7CisKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0
KiwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRp
bmdCb3goKSBjb25zdDsKQEAgLTU2LDcgKzYxLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBi
b29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAKLXBy
b3RlY3RlZDoKICAgICAvLyBBbGxvdyBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyIHRv
IGhvb2sgaW4gYXQgdGhlIHJpZ2h0IHRpbWUgaW4gbGF5b3V0KCkKICAgICB2aXJ0dWFsIHZvaWQg
Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKSB7IH0KIApAQCAtNjUsMTMgKzY5LDI5IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZvJikgeyB9
CiAgICAgdmlydHVhbCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQ
b2ludCYgLypwb2ludEluUGFyZW50Ki8pIHsgcmV0dXJuIHRydWU7IH0KIAotcHJpdmF0ZToKICAg
ICBib29sIHNlbGZXaWxsUGFpbnQoKSBjb25zdDsKIAogICAgIFJlbmRlck9iamVjdENoaWxkTGlz
dCBtX2NoaWxkcmVuOwogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnRzIDogMTsKIH07CiAgIAoraW5s
aW5lIFJlbmRlclNWR0NvbnRhaW5lciogdG9SZW5kZXJTVkdDb250YWluZXIoUmVuZGVyT2JqZWN0
KiBvYmplY3QpCit7CisgICAgLy8gTm90ZTogaXNTVkdDb250YWluZXIgaXMgYWxzbyB0cnVlIGZv
ciBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciwgd2hpY2ggaXMgbm90IGRlcml2ZWQgZnJvbSB0
aGlzLgorICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNTVkdDb250YWluZXIoKSAmJiBz
dHJjbXAob2JqZWN0LT5yZW5kZXJOYW1lKCksICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciIp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHQ29udGFpbmVyKj4ob2JqZWN0KTsK
K30KKworaW5saW5lIGNvbnN0IFJlbmRlclNWR0NvbnRhaW5lciogdG9SZW5kZXJTVkdDb250YWlu
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gTm90ZTogaXNTVkdDb250
YWluZXIgaXMgYWxzbyB0cnVlIGZvciBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciwgd2hpY2gg
aXMgbm90IGRlcml2ZWQgZnJvbSB0aGlzLgorICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+
aXNTVkdDb250YWluZXIoKSAmJiBzdHJjbXAob2JqZWN0LT5yZW5kZXJOYW1lKCksICJSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lciIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVu
ZGVyU1ZHQ29udGFpbmVyKj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9u
ZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b1JlbmRlclNWR0NvbnRhaW5lcihj
b25zdCBSZW5kZXJTVkdDb250YWluZXIqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hp
ZGRlbkNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwx
MCArMzUsNiBAQCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OlJlbmRlclNWR0hpZGRlCiB7CiB9
CiAKLVJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6flJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcigp
Ci17Ci19Ci0KIHZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpsYXlvdXQoKQogewogICAg
IEFTU0VSVChuZWVkc0xheW91dCgpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR0hpZGRlbkNvbnRhaW5lci5oCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICsz
Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBSZW5kZXJTVkdIaWRkZW5Db250
YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHQ29udGFpbmVyIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50Kik7Ci0gICAgICAgIHZp
cnR1YWwgflJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcigpOwogCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBpc1NWR0NvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBwcml2YXRlOgog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdIaWRkZW5Db250YWluZXIoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKICAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29u
c3QgeyByZXR1cm4gIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lciI7IH0KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdJbWFnZS5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMCArNDcsNiBA
QCBSZW5kZXJTVkdJbWFnZTo6UmVuZGVyU1ZHSW1hZ2UoU1ZHSW1hZ2VFCiB7CiB9CiAKLVJlbmRl
clNWR0ltYWdlOjp+UmVuZGVyU1ZHSW1hZ2UoKQotewotfQotCiB2b2lkIFJlbmRlclNWR0ltYWdl
OjphZGp1c3RSZWN0c0ZvckFzcGVjdFJhdGlvKEZsb2F0UmVjdCYgZGVzdFJlY3QsIEZsb2F0UmVj
dCYgc3JjUmVjdCwgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyogYXNwZWN0UmF0aW8pCiB7CiAgICAg
ZmxvYXQgb3JpZ0Rlc3RXaWR0aCA9IGRlc3RSZWN0LndpZHRoKCk7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0ltYWdlLmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAg
Q29weXJpZ2h0IChDKSAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+Ci0g
ICAgQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgICAgQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICBDb3B5
cmlnaHQgKEMpIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlLCBJbmMuCiAKQEAgLTM4LDggKzM4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIFJlbmRlclNWR0ltYWdlIDogcHVibGljIFJlbmRlckltYWdlLCBTVkdSZW5k
ZXJCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlbmRlclNWR0ltYWdlKFNWR0ltYWdlRWxl
bWVudCopOwotICAgICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdJbWFnZSgpOwogCisgICAgcHJpdmF0
ZToKICAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1
cm4gIlJlbmRlclNWR0ltYWdlIjsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNjMsMTIgKzYzLDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKIAotICAg
ICAgICBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAg
ICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0
VGVzdEFjdGlvbik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50
IF90eSwgSGl0VGVzdEFjdGlvbik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0
eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAotICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1
YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X2xvY2FsVHJhbnNmb3JtOyB9CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9sb2Nh
bFRyYW5zZm9ybTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgJ
KHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIFJlbmRlclNWR0lubGluZVRleHQgOiBwdWJsaWMgUmVuZGVyVGV4dCB7CiBwdWJsaWM6
CiAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dChOb2RlKiwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPik7
CisKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qg
eyByZXR1cm4gIlJlbmRlclNWR0lubGluZVRleHQiOyB9CiAgICAgICAgIAogICAgIHZpcnR1YWwg
dm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKik7
CkBAIC00OSw3ICs1MSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
CiAKLXByaXZhdGU6CiAgICAgdmlydHVhbCBJbmxpbmVUZXh0Qm94KiBjcmVhdGVUZXh0Qm94KCk7
CiAgICAgSW50UmVjdCBjb21wdXRlUmVwYWludFJlY3RGb3JSYW5nZShSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKICAgICBG
bG9hdFF1YWQgY29tcHV0ZVJlcGFpbnRRdWFkRm9yUmFuZ2UoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGludCBzdGFydFBvcywgaW50IGVuZFBvcyk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDYg
QEAgUmVuZGVyU1ZHUm9vdDo6UmVuZGVyU1ZHUm9vdChTVkdTdHlsZWRFbAogICAgIHNldFJlcGxh
Y2VkKHRydWUpOwogfQogCi1SZW5kZXJTVkdSb290Ojp+UmVuZGVyU1ZHUm9vdCgpCi17Ci19Ci0K
IGludCBSZW5kZXJTVkdSb290OjpsaW5lSGVpZ2h0KGJvb2wsIGJvb2wpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGhlaWdodCgpICsgbWFyZ2luVG9wKCkgKyBtYXJnaW5Cb3R0b20oKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDcgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KICAgICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM1LDEzICszNiwxNCBA
QCBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIGNsYXNzIFJlbmRlclNWR1Jvb3QgOiBwdWJs
aWMgUmVuZGVyQm94LCBTVkdSZW5kZXJCYXNlIHsKIHB1YmxpYzoKICAgICBSZW5kZXJTVkdSb290
KFNWR1N0eWxlZEVsZW1lbnQqKTsKLSAgICB+UmVuZGVyU1ZHUm9vdCgpOwogCi0gICAgdmlydHVh
bCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIHsgcmV0dXJuIGNoaWxk
cmVuKCk7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVh
bENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQogICAgIGNvbnN0IFJlbmRl
ck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsg
fQogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGls
ZHJlbjsgfQogCitwcml2YXRlOgorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2
aXJ0dWFsQ2hpbGRyZW4oKSB7IHJldHVybiBjaGlsZHJlbigpOyB9CisgICAgdmlydHVhbCBjb25z
dCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJu
IGNoaWxkcmVuKCk7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jvb3QoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qg
eyByZXR1cm4gIlJlbmRlclNWR1Jvb3QiOyB9CiAKQEAgLTcwLDcgKzcyLDYgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJh
bnNmb3JtU3RhdGUmKSBjb25zdDsKIAotcHJpdmF0ZToKICAgICB2b2lkIGNhbGNWaWV3cG9ydCgp
OwogICAgIGNvbnN0IEZsb2F0U2l6ZSYgdmlld3BvcnRTaXplKCkgY29uc3Q7CiAKQEAgLTg1LDYg
Kzg2LDIxIEBAIHByaXZhdGU6CiAgICAgRmxvYXRTaXplIG1fdmlld3BvcnRTaXplOwogfTsKIAor
aW5saW5lIFJlbmRlclNWR1Jvb3QqIHRvUmVuZGVyU1ZHUm9vdChSZW5kZXJPYmplY3QqIG9iamVj
dCkKK3sgCisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1NWR1Jvb3QoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNWR1Jvb3QqPihvYmplY3QpOworfQorCitpbmxpbmUg
Y29uc3QgUmVuZGVyU1ZHUm9vdCogdG9SZW5kZXJTVkdSb290KGNvbnN0IFJlbmRlck9iamVjdCog
b2JqZWN0KQoreyAKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzU1ZHUm9vdCgpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUm9vdCo+KG9iamVjdCk7Cit9
CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4K
K3ZvaWQgdG9SZW5kZXJTVkdSb290KGNvbnN0IFJlbmRlclNWR1Jvb3QqKTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIFJlbmRl
clNWR1RleHQgOiBwdWJsaWMgUmVuZGVyU1ZHQmwKIHB1YmxpYzoKICAgICBSZW5kZXJTVkdUZXh0
KFNWR1RleHRFbGVtZW50KiBub2RlKTsKIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHVGV4dCI7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC02MSw3
ICs2Miw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0Jv
eCgpIGNvbnN0OwogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkgY29uc3Q7CiAKLXByaXZhdGU6CiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHJl
bW92ZWQgd2hlbiBsb2NhbFRyYW5zZm9ybSgpIGlzIHJlbW92ZWQgZnJvbSBSZW5kZXJPYmplY3QK
ICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdUZXh0UGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1RleHRQYXRoLmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU1ZHVGV4dFBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KICAqCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0zNyw5ICszOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBleGFjdEFsaWdubWVudCgpIGNvbnN0OwogICAgICAgICBib29sIHN0cmV0Y2hNZXRob2QoKSBj
b25zdDsKIAorICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdUZXh0UGF0aCI7IH0KIAotICAgIHByaXZh
dGU6CiAgICAgICAgIGZsb2F0IG1fc3RhcnRPZmZzZXQ7CiAKICAgICAgICAgYm9vbCBtX2V4YWN0
QWxpZ25tZW50IDogMTsKQEAgLTQ3LDYgKzQ4LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBQYXRoIG1fbGF5b3V0UGF0aDsKICAgICB9OworCisgICAgaW5saW5lIFJlbmRlclNW
R1RleHRQYXRoKiB0b1JlbmRlclNWR1RleHRQYXRoKFJlbmRlck9iamVjdCogb2JqZWN0KQorICAg
IHsgCisgICAgICAgIEFTU0VSVCghb2JqZWN0IHx8ICFzdHJjbXAob2JqZWN0LT5yZW5kZXJOYW1l
KCksICJSZW5kZXJTVkdUZXh0UGF0aCIpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJl
bmRlclNWR1RleHRQYXRoKj4ob2JqZWN0KTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHdpbGwgY2F0
Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCisgICAgdm9pZCB0b1JlbmRlclNW
R1RleHRQYXRoKGNvbnN0IFJlbmRlclNWR1RleHRQYXRoKik7CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRh
aW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXIuY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTQgKzM4
LDE0IEBAIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpSZW5kZXJTVkdWaWUKIHsKIH0KIAot
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6On5SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcigp
Ci17Ci19Ci0KIHZvaWQgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpCiB7CisgICAgLy8gRklYTUU6
IFRoZSBpZiBzdGF0ZW1lbnQgaGVyZSBldmFsdWF0ZXMgdG8gZmFsc2UuIGlzRW1wdHkoKSBpcyBl
eGFjdGx5IHRoZSBzYW1lCisgICAgLy8gYXMgd2hhdCBpcyBvbiB0aGUgcmlnaHQgc2lkZSwgc28g
aXQncyBiYXNpY2FsbHkgIWlzRW1wdHkgJiYgaXNFbXB0eS4gU28gdGhpcworICAgIC8vIGZ1bmN0
aW9uIGRvZXMgbm90aGluZy4KKwogICAgIC8vIEEgdmFsdWUgb2YgemVybyBkaXNhYmxlcyByZW5k
ZXJpbmcgb2YgdGhlIGVsZW1lbnQuIAotICAgIGlmICghdmlld3BvcnQoKS5pc0VtcHR5KCkgJiYg
KHZpZXdwb3J0KCkud2lkdGgoKSA8PSAwLiB8fCB2aWV3cG9ydCgpLmhlaWdodCgpIDw9IDAuKSkK
KyAgICBpZiAoIW1fdmlld3BvcnQuaXNFbXB0eSgpICYmIChtX3ZpZXdwb3J0LndpZHRoKCkgPD0g
MC4gfHwgbV92aWV3cG9ydC5oZWlnaHQoKSA8PSAwLikpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQocGFpbnRJbmZvLCBwYXJlbnRYLCBwYXJlbnRZKTsK
QEAgLTU0LDEyICs1NCw3IEBAIHZvaWQgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnBhaW50
KFAKIHZvaWQgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OmFwcGx5Vmlld3BvcnRDbGlwKFBh
aW50SW5mbyYgcGFpbnRJbmZvKQogewogICAgIGlmIChzdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBP
VklTSUJMRSkKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVj
dCh2aWV3cG9ydCgpKSk7IC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlJ2xsIHdhbnQgZmxvYXQtcHJl
Y2lzaW9uIGNsaXBwaW5nCi19Ci0KLUZsb2F0UmVjdCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
cjo6dmlld3BvcnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3ZpZXdwb3J0OworICAgICAgICBw
YWludEluZm8uY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KG1fdmlld3BvcnQpKTsgLy8g
RklYTUU6IEV2ZW50dWFsbHkgd2UnbGwgd2FudCBmbG9hdC1wcmVjaXNpb24gY2xpcHBpbmcKIH0K
IAogdm9pZCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6Y2FsY1ZpZXdwb3J0KCkKQEAgLTkx
LDEwICs4NiwxMCBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdWaWV3cG9ydENvCiB7
CiAgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkgewogICAgICAg
ICBTVkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgp
KTsKLSAgICAgICAgcmV0dXJuIHN2Zy0+dmlld0JveFRvVmlld1RyYW5zZm9ybSh2aWV3cG9ydCgp
LndpZHRoKCksIHZpZXdwb3J0KCkuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gc3ZnLT52aWV3
Qm94VG9WaWV3VHJhbnNmb3JtKG1fdmlld3BvcnQud2lkdGgoKSwgbV92aWV3cG9ydC5oZWlnaHQo
KSk7CiAgICAgfSBlbHNlIGlmIChub2RlKCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6Om1hcmtlclRh
ZykpIHsKICAgICAgICAgU1ZHTWFya2VyRWxlbWVudCogbWFya2VyID0gc3RhdGljX2Nhc3Q8U1ZH
TWFya2VyRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBtYXJrZXItPnZpZXdCb3hU
b1ZpZXdUcmFuc2Zvcm0odmlld3BvcnQoKS53aWR0aCgpLCB2aWV3cG9ydCgpLmhlaWdodCgpKTsK
KyAgICAgICAgcmV0dXJuIG1hcmtlci0+dmlld0JveFRvVmlld1RyYW5zZm9ybShtX3ZpZXdwb3J0
LndpZHRoKCksIG1fdmlld3BvcnQuaGVpZ2h0KCkpOwogICAgIH0KIAogICAgIHJldHVybiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpOwpAQCAtMTAzLDcgKzk4LDcgQEAgVHJhbnNmb3JtYXRpb25NYXRy
aXggUmVuZGVyU1ZHVmlld3BvcnRDbwogVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZHVmll
d3BvcnRDb250YWluZXI6OmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0VHJhbnNsYXRpb247Ci0gICAgdmlld3BvcnRUcmFu
c2xhdGlvbi50cmFuc2xhdGUodmlld3BvcnQoKS54KCksIHZpZXdwb3J0KCkueSgpKTsKKyAgICB2
aWV3cG9ydFRyYW5zbGF0aW9uLnRyYW5zbGF0ZShtX3ZpZXdwb3J0LngoKSwgbV92aWV3cG9ydC55
KCkpOwogICAgIHJldHVybiB2aWV3cG9ydFRyYW5zZm9ybSgpICogdmlld3BvcnRUcmFuc2xhdGlv
bjsKICAgICAvLyBJZiB0aGlzIGNsYXNzIHdlcmUgZXZlciBnaXZlbiBhIGxvY2FsVHJhbnNmb3Jt
KCksIHRoZW4gdGhlIGFib3ZlIHdvdWxkIHJlYWQ6CiAgICAgLy8gcmV0dXJuIHZpZXdwb3J0VHJh
bnNmb3JtKCkgKiBsb2NhbFRyYW5zZm9ybSgpICogdmlld3BvcnRUcmFuc2xhdGlvbjsKQEAgLTEy
MSw3ICsxMTYsNyBAQCBib29sIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpwb2ludElzCiAg
ICAgLy8gUmVzcGVjdCB0aGUgdmlld3BvcnQgY2xpcCAod2hpY2ggaXMgaW4gcGFyZW50IGNvb3Jk
cykuICBTVkcgZG9lcyBub3Qgc3VwcG9ydCBzZXBhcmF0ZSB4L3kgb3ZlcmZsb3cgcnVsZXMuCiAg
ICAgaWYgKHN0eWxlKCktPm92ZXJmbG93WCgpID09IE9ISURERU4pIHsKICAgICAgICAgQVNTRVJU
KHN0eWxlKCktPm92ZXJmbG93WSgpID09IE9ISURERU4pOwotICAgICAgICBpZiAoIXZpZXdwb3J0
KCkuY29udGFpbnMocG9pbnRJblBhcmVudCkpCisgICAgICAgIGlmICghbV92aWV3cG9ydC5jb250
YWlucyhwb2ludEluUGFyZW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyLmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcg
QEAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA3
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA5IEdvb2dsZSwg
SW5jLgorICAgIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDI0ICszNCwyMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJT
VkdDb250YWluZXIgewogcHVibGljOgogICAgIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKFNW
R1N0eWxlZEVsZW1lbnQqKTsKLSAgICB+UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIoKTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBpc1NWR0NvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXIiOyB9CisgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBw
dWJsaWMgZm9yIFNWR1Jlc291cmNlTWFya2VyOjpkcmF3LCBsaWtlbHkgdGhlIGNhbGxzaXRlIHNo
b3VsZCBiZSBjaGFuZ2VkLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdwb3J0VHJhbnNm
b3JtKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBh
cmVudFgsIGludCBwYXJlbnRZKTsKIAorcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdD
b250YWluZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
IjsgfQorCiAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBvdmVycmlkZSBzaG91bGQgYmUg
cmVtb3ZlZCBvbmNlIGNhbGxlcnMgb2YgUmVuZGVyQm94OjphYnNvbHV0ZVRyYW5zZm9ybSgpIGNh
biBiZSByZW1vdmVkLgogICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggYWJzb2x1dGVU
cmFuc2Zvcm0oKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCB2aWV3cG9ydCgpIGNvbnN0OwotCi0g
ICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBwdWJsaWMgZm9yIFNWR1Jlc291cmNlTWFya2VyOjpk
cmF3LCBsaWtlbHkgdGhlIGNhbGxzaXRlIHNob3VsZCBiZSBjaGFuZ2VkLgotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHZpZXdwb3J0VHJhbnNmb3JtKCkgY29uc3Q7Ci0KLXByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIGNhbGNWaWV3cG9ydCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5Vmll
d3BvcnRDbGlwKFBhaW50SW5mbyYpOwpAQCAtNTksNiArNTcsMTUgQEAgcHJpdmF0ZToKICAgICBG
bG9hdFJlY3QgbV92aWV3cG9ydDsKIH07CiAgIAoraW5saW5lIFJlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyKiB0b1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKFJlbmRlck9iamVjdCogb2JqZWN0
KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8ICFzdHJjbXAob2JqZWN0LT5yZW5kZXJOYW1lKCks
ICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIqPihvYmplY3QpOworfQorCisvLyBUaGlzIHdpbGwg
Y2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXIoY29uc3QgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIqKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsy
NSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIu
aCIKKwogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJT
Y3JvbGxiYXJUaGVtZS5oIgogCkBAIC0xNzMsOSArMTc0LDEyIEBAIHN0YXRpYyBQc2V1ZG9JZCBw
c2V1ZG9Gb3JTY3JvbGxiYXJQYXJ0KFMKICAgICAgICAgICAgIHJldHVybiBTQ1JPTExCQVJfVEhV
TUI7CiAgICAgICAgIGNhc2UgVHJhY2tCR1BhcnQ6CiAgICAgICAgICAgICByZXR1cm4gU0NST0xM
QkFSX1RSQUNLOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFNDUk9MTEJB
UjsKKyAgICAgICAgY2FzZSBOb1BhcnQ6CisgICAgICAgIGNhc2UgU2Nyb2xsYmFyQkdQYXJ0Ogor
ICAgICAgICBjYXNlIEFsbFBhcnRzOgorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIHJl
dHVybiBTQ1JPTExCQVI7CiB9CiAKIHZvaWQgUmVuZGVyU2Nyb2xsYmFyOjp1cGRhdGVTY3JvbGxi
YXJQYXJ0KFNjcm9sbGJhclBhcnQgcGFydFR5cGUsIGJvb2wgZGVzdHJveSkKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw2IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlckJveDsKLWNsYXNzIFJlbmRlclN0eWxl
OwogY2xhc3MgUmVuZGVyU2Nyb2xsYmFyUGFydDsKIGNsYXNzIFJlbmRlclN0eWxlOwogCkBAIC00
NiwyMSArNDUsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBj
cmVhdGVDdXN0b21TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRp
b24sIFJlbmRlckJveCopOwogICAgIHZpcnR1YWwgflJlbmRlclNjcm9sbGJhcigpOwogCi0gICAg
dmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEVuYWJsZWQoYm9vbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SG92
ZXJlZFBhcnQoU2Nyb2xsYmFyUGFydCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZXNzZWRQYXJ0
KFNjcm9sbGJhclBhcnQpOwotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJQYXJ0cyhib29sIGRl
c3Ryb3kgPSBmYWxzZSk7Ci0KICAgICBzdGF0aWMgU2Nyb2xsYmFyUGFydCBwYXJ0Rm9yU3R5bGVS
ZXNvbHZlKCk7CiAgICAgc3RhdGljIFJlbmRlclNjcm9sbGJhciogc2Nyb2xsYmFyRm9yU3R5bGVS
ZXNvbHZlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVDaGFuZ2VkKCk7Ci0KICAgICBSZW5k
ZXJCb3gqIG93bmluZ1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQogCiAgICAg
dm9pZCBwYWludFBhcnQoR3JhcGhpY3NDb250ZXh0KiwgU2Nyb2xsYmFyUGFydCwgY29uc3QgSW50
UmVjdCYpOwpAQCAtNzAsOSArNTcsMjIgQEAgcHVibGljOgogICAgIEludFJlY3QgdHJhY2tQaWVj
ZVJlY3RXaXRoTWFyZ2lucyhTY3JvbGxiYXJQYXJ0LCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICBp
bnQgbWluaW11bVRodW1iTGVuZ3RoKCk7Ci0gICAgdmlydHVhbCBib29sIGlzQ3VzdG9tU2Nyb2xs
YmFyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgdm9p
ZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyopOworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJv
b2wpOworCisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmIGRhbWFnZVJlY3QpOworCisgICAgdmlydHVhbCB2b2lkIHNldEhvdmVyZWRQYXJ0KFNj
cm9sbGJhclBhcnQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzc2VkUGFydChTY3JvbGxiYXJQ
YXJ0KTsKKworICAgIHZpcnR1YWwgdm9pZCBzdHlsZUNoYW5nZWQoKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBpc0N1c3RvbVNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZv
aWQgdXBkYXRlU2Nyb2xsYmFyUGFydHMoYm9vbCBkZXN0cm95ID0gZmFsc2UpOworCiAgICAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gZ2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUoU2Nyb2xsYmFyUGFy
dCwgUHNldWRvSWQpOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyUGFydChTY3JvbGxiYXJQYXJ0
LCBib29sIGRlc3Ryb3kgPSBmYWxzZSk7CiAKQEAgLTgwLDYgKzgwLDE1IEBAIHByaXZhdGU6CiAg
ICAgSGFzaE1hcDx1bnNpZ25lZCwgUmVuZGVyU2Nyb2xsYmFyUGFydCo+IG1fcGFydHM7CiB9Owog
CitpbmxpbmUgUmVuZGVyU2Nyb2xsYmFyKiB0b1JlbmRlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNj
cm9sbGJhcikKK3sKKyAgICBBU1NFUlQoIXNjcm9sbGJhciB8fCBzY3JvbGxiYXItPmlzQ3VzdG9t
U2Nyb2xsYmFyKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTY3JvbGxiYXIqPihz
Y3JvbGxiYXIpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVj
ZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclNjcm9sbGJh
ciopOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZW5kZXJTY3JvbGxi
YXJfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNwcAko
cmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE3ICs2NiwxNyBAQCBib29sIFJlbmRlclNjcm9s
bGJhclRoZW1lOjpoYXNUaHVtYihTY3JvCiAKIGludCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6bWlu
aW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxSZW5kZXJTY3JvbGxiYXIqPihzY3JvbGxiYXIpLT5taW5pbXVtVGh1bWJMZW5ndGgo
KTsKKyAgICByZXR1cm4gdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKS0+bWluaW11bVRodW1i
TGVuZ3RoKCk7CiB9CiAKIEludFJlY3QgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmJhY2tCdXR0b25S
ZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnRUeXBlLCBib29sKQog
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTY3JvbGxiYXIqPihzY3JvbGxiYXIpLT5i
dXR0b25SZWN0KHBhcnRUeXBlKTsKKyAgICByZXR1cm4gdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xs
YmFyKS0+YnV0dG9uUmVjdChwYXJ0VHlwZSk7CiB9CiAKIEludFJlY3QgUmVuZGVyU2Nyb2xsYmFy
VGhlbWU6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0IHBhcnRUeXBlLCBib29sKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTY3Jv
bGxiYXIqPihzY3JvbGxiYXIpLT5idXR0b25SZWN0KHBhcnRUeXBlKTsKKyAgICByZXR1cm4gdG9S
ZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKS0+YnV0dG9uUmVjdChwYXJ0VHlwZSk7CiB9CiAKIElu
dFJlY3QgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnRyYWNrUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgYm9vbCkKQEAgLTg4LDEzICs4OCwxMyBAQCBJbnRSZWN0IFJlbmRlclNjcm9sbGJhclRoZW1l
Ojp0cmFja1JlY3QoCiAgICAgaW50IGVuZExlbmd0aDsKICAgICBidXR0b25TaXplc0Fsb25nVHJh
Y2tBeGlzKHNjcm9sbGJhciwgc3RhcnRMZW5ndGgsIGVuZExlbmd0aCk7CiAgICAgCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlbmRlclNjcm9sbGJhcio+KHNjcm9sbGJhciktPnRyYWNrUmVjdChz
dGFydExlbmd0aCwgZW5kTGVuZ3RoKTsKKyAgICByZXR1cm4gdG9SZW5kZXJTY3JvbGxiYXIoc2Ny
b2xsYmFyKS0+dHJhY2tSZWN0KHN0YXJ0TGVuZ3RoLCBlbmRMZW5ndGgpOwogfQogCiBJbnRSZWN0
IFJlbmRlclNjcm9sbGJhclRoZW1lOjpjb25zdHJhaW5UcmFja1JlY3RUb1RyYWNrUGllY2VzKFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogeyAKLSAgICBJbnRSZWN0
IGJhY2tSZWN0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyU2Nyb2xsYmFyKj4oc2Nyb2xsYmFyKS0+dHJh
Y2tQaWVjZVJlY3RXaXRoTWFyZ2lucyhCYWNrVHJhY2tQYXJ0LCByZWN0KTsKLSAgICBJbnRSZWN0
IGZvcndhcmRSZWN0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyU2Nyb2xsYmFyKj4oc2Nyb2xsYmFyKS0+
dHJhY2tQaWVjZVJlY3RXaXRoTWFyZ2lucyhGb3J3YXJkVHJhY2tQYXJ0LCByZWN0KTsKKyAgICBJ
bnRSZWN0IGJhY2tSZWN0ID0gdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKS0+dHJhY2tQaWVj
ZVJlY3RXaXRoTWFyZ2lucyhCYWNrVHJhY2tQYXJ0LCByZWN0KTsKKyAgICBJbnRSZWN0IGZvcndh
cmRSZWN0ID0gdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKS0+dHJhY2tQaWVjZVJlY3RXaXRo
TWFyZ2lucyhGb3J3YXJkVHJhY2tQYXJ0LCByZWN0KTsKICAgICBJbnRSZWN0IHJlc3VsdCA9IHJl
Y3Q7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSB7CiAgICAgICAgIHJlc3VsdC5zZXRYKGJhY2tSZWN0LngoKSk7CkBAIC0xMTQsMjcgKzEx
NCwyNyBAQCB2b2lkIFJlbmRlclNjcm9sbGJhclRoZW1lOjpwYWludFNjcm9sbENvCiAKIHZvaWQg
UmVuZGVyU2Nyb2xsYmFyVGhlbWU6OnBhaW50U2Nyb2xsYmFyQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotICAgIHN0YXRpY19jYXN0
PFJlbmRlclNjcm9sbGJhcio+KHNjcm9sbGJhciktPnBhaW50UGFydChjb250ZXh0LCBTY3JvbGxi
YXJCR1BhcnQsIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOworICAgIHRvUmVuZGVyU2Nyb2xsYmFy
KHNjcm9sbGJhciktPnBhaW50UGFydChjb250ZXh0LCBTY3JvbGxiYXJCR1BhcnQsIHNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCkpOwogfQogCiB2b2lkIFJlbmRlclNjcm9sbGJhclRoZW1lOjpwYWludFRy
YWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHN0YXRpY19jYXN0PFJlbmRlclNjcm9s
bGJhcio+KHNjcm9sbGJhciktPnBhaW50UGFydChjb250ZXh0LCBUcmFja0JHUGFydCwgcmVjdCk7
CisgICAgdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKS0+cGFpbnRQYXJ0KGNvbnRleHQsIFRy
YWNrQkdQYXJ0LCByZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6cGFpbnRU
cmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKIHsKLSAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJTY3JvbGxiYXIqPihzY3JvbGxiYXIpLT5wYWludFBhcnQoY29udGV4dCwgcGFy
dCwgcmVjdCk7CisgICAgdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyKS0+cGFpbnRQYXJ0KGNv
bnRleHQsIHBhcnQsIHJlY3QpOwogfQogCiB2b2lkIFJlbmRlclNjcm9sbGJhclRoZW1lOjpwYWlu
dEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7Ci0gICAgc3RhdGljX2Nh
c3Q8UmVuZGVyU2Nyb2xsYmFyKj4oc2Nyb2xsYmFyKS0+cGFpbnRQYXJ0KGNvbnRleHQsIHBhcnQs
IHJlY3QpOworICAgIHRvUmVuZGVyU2Nyb2xsYmFyKHNjcm9sbGJhciktPnBhaW50UGFydChjb250
ZXh0LCBwYXJ0LCByZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6cGFpbnRU
aHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewotICAgIHN0YXRpY19jYXN0PFJlbmRlclNjcm9sbGJhcio+KHNj
cm9sbGJhciktPnBhaW50UGFydChjb250ZXh0LCBUaHVtYlBhcnQsIHJlY3QpOworICAgIHRvUmVu
ZGVyU2Nyb2xsYmFyKHNjcm9sbGJhciktPnBhaW50UGFydChjb250ZXh0LCBUaHVtYlBhcnQsIHJl
Y3QpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHJldmlzaW9u
IDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW4KIAogICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2
ZW50ICYmIGlzTGVmdEJ1dHRvbikgewogICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSAm
JiByZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTbGlkZXIqIHNsaWRlciA9IHN0YXRp
Y19jYXN0PFJlbmRlclNsaWRlcio+KHJlbmRlcmVyKCktPnBhcmVudCgpKTsKKyAgICAgICAgICAg
IFJlbmRlclNsaWRlciogc2xpZGVyID0gdG9SZW5kZXJTbGlkZXIocmVuZGVyZXIoKS0+cGFyZW50
KCkpOwogICAgICAgICAgICAgaWYgKHNsaWRlcikgewogICAgICAgICAgICAgICAgIGlmIChzbGlk
ZXItPm1vdXNlRXZlbnRJc0luVGh1bWIobW91c2VFdmVudCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gV2Ugc2VsZWN0ZWQgdGhlIHRodW1iLCB3ZSB3YW50IHRoZSBjdXJzb3IgdG8gYWx3YXlz
IHN0YXkgYXQKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIFNsaWRlclRodW1iRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuCiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHsKICAgICAgICAgaWYgKG1faW5EcmFnTW9kZSAmJiBy
ZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJT
bGlkZXIqIHNsaWRlciA9IHN0YXRpY19jYXN0PFJlbmRlclNsaWRlcio+KHJlbmRlcmVyKCktPnBh
cmVudCgpKTsKKyAgICAgICAgICAgIFJlbmRlclNsaWRlciogc2xpZGVyID0gdG9SZW5kZXJTbGlk
ZXIocmVuZGVyZXIoKS0+cGFyZW50KCkpOwogICAgICAgICAgICAgaWYgKHNsaWRlcikgewogICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQgY3VyUG9pbnQgPSBzbGlkZXItPmFic29sdXRlVG9Mb2Nh
bChtb3VzZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0cnVlKTsKICAgICAgICAg
ICAgICAgICBJbnRQb2ludCBldmVudE9mZnNldChjdXJQb2ludC54KCkgKyBtX29mZnNldFRvVGh1
bWIueCgpLCBjdXJQb2ludC55KCkgKyBtX29mZnNldFRvVGh1bWIueSgpKTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNsaWRlci5oCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNsaWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywxNSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTbGlkZXJUaHVtYkVsZW1lbnQ7CiAg
ICAgfTsKIAorICAgIGlubGluZSBSZW5kZXJTbGlkZXIqIHRvUmVuZGVyU2xpZGVyKFJlbmRlck9i
amVjdCogb2JqZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5p
c1NsaWRlcigpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNsaWRlcio+KG9i
amVjdCk7CisgICAgfQorCisgICAgLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1
bm5lY2Vzc2FyeSBjYXN0LgorICAgIHZvaWQgdG9SZW5kZXJTbGlkZXIoY29uc3QgUmVuZGVyU2xp
ZGVyKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlbmRlclNsaWRl
cl9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgJKHJldmlzaW9uIDQ2
Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsMTcgKzM0LDYgQEAgY2xhc3MgUmVuZGVyVGV4dENvbnRyb2wgOiBwdWJsaWMg
UmVuZGVyQgogcHVibGljOgogICAgIHZpcnR1YWwgflJlbmRlclRleHRDb250cm9sKCk7CiAKLSAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
VGV4dENvbnRyb2wiOyB9Ci0gICAgdmlydHVhbCBib29sIGlzVGV4dENvbnRyb2woKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGhhc0NvbnRyb2xDbGlwKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIEludFJlY3QgY29udHJvbENsaXBSZWN0KGlu
dCB0eCwgaW50IHR5KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY0hlaWdodCgpOwotICAg
IHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVM
ZWZ0b3ZlckFub255bW91c0Jsb2NrKFJlbmRlckJsb2NrKikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGF2b2lkc0Zsb2F0cygp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICAKICAgICBib29sIGlzRWRpdGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9lZGl0ZWQ7IH0KICAgICB2b2lkIHNldEVkaXRlZChib29sIGlzRWRpdGVkKSB7
IG1fZWRpdGVkID0gaXNFZGl0ZWQ7IH0KIApAQCAtNjQsMTAgKzUzLDYgQEAgcHVibGljOgogICAg
IFN0cmluZyB0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKCk7CiAgICAgdm9pZCBzZWxlY3Rpb25DaGFu
Z2VkKGJvb2wgdXNlclRyaWdnZXJlZCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5n
UmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHkpOwotCi0gICAgdmlydHVhbCBi
b29sIGNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoYm9vbCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCBp
bmRleCk7CiAgICAgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpOwogCkBAIC05MiwxMCArNzcsMjYgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpID0gMDsKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlKiBzdGFydFN0eWxlKSBjb25zdCA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJv
bUVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY0hlaWdodCgpOworCiAgICAgZnJpZW5k
IGNsYXNzIFRleHRJdGVyYXRvcjsKICAgICBIVE1MRWxlbWVudCogaW5uZXJUZXh0RWxlbWVudCgp
IGNvbnN0OwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJSZW5kZXJUZXh0Q29udHJvbCI7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0Q29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aGFzQ29udHJvbENsaXAoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgSW50
UmVjdCBjb250cm9sQ2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBjYWxjUHJlZldpZHRocygpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVMZWZ0b3ZlckFu
b255bW91c0Jsb2NrKFJlbmRlckJsb2NrKikgeyB9CisgICAgdmlydHVhbCBib29sIGNhbkhhdmVD
aGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGF2b2lk
c0Zsb2F0cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHkpOworCisg
ICAgdmlydHVhbCBib29sIGNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoYm9vbCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgU3RyaW5nIGZpbmlzaFRleHQoVmVjdG9yPFVDaGFyPiYp
IGNvbnN0OwogCiAgICAgYm9vbCBtX2VkaXRlZDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sTXVsdGlMaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKSAK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMwLDE0ICszMSwxNSBAQCBwdWJsaWM6CiAgICAgUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUoTm9kZSopOwogICAgIHZpcnR1YWwgflJlbmRlclRleHRDb250
cm9sTXVsdGlMaW5lKCk7CiAKKyAgICB2b2lkIGZvcndhcmRFdmVudChFdmVudCopOworCitwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRBcmVhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
aW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7Ci0gICAgdm9pZCBm
b3J3YXJkRXZlbnQoRXZlbnQqKTsKIAotcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBwcmVmZXJy
ZWRDb250ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0Q29udHJvbEhlaWdodEJhc2VkT25MaW5lSGVpZ2h0KGludCBsaW5lSGVpZ2h0KTsKICAg
ICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9v
dExpbmVCb3gpIGNvbnN0OwpAQCAtNDgsNiArNTAsMTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlKiBzdGFydFN0eWxlKSBjb25zdDsKIH07CiAKK2lubGluZSBSZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZSogdG9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZShSZW5kZXJPYmplY3QqIG9i
amVjdCkKK3sgCisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1RleHRBcmVhKCkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZSo+KG9iamVj
dCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3Nhcnkg
Y2FzdC4KK3ZvaWQgdG9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZShjb25zdCBSZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZSopOworCiB9CiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHJldmlzaW9uIDQ2Nzc3KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTM4LDkgKzM5LDYgQEAgcHVibGljOgog
ICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKik7CiAgICAgdmlydHVhbCB+UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJv
bENsaXAoKSBjb25zdCB7IHJldHVybiBtX2NhbmNlbEJ1dHRvbjsgfQotICAgIHZpcnR1YWwgYm9v
bCBpc1RleHRGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQogICAgIGJvb2wgcGxhY2Vo
b2xkZXJJc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3BsYWNlaG9sZGVyVmlzaWJsZTsgfQog
ICAgIGJvb2wgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBjb25zdDsKICAgICB2b2lkIHVw
ZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOwpAQCAtNTIsMTQgKzUwLDE5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNob3dQb3B1cCgpOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlUG9wdXAoKTsgLy8g
UG9wdXBNZW51Q2xpZW50IG1ldGhvZAogCisgICAgdm9pZCBmb3J3YXJkRXZlbnQoRXZlbnQqKTsK
KworICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CisKK3ByaXZhdGU6Cisg
ICAgdmlydHVhbCBib29sIGhhc0NvbnRyb2xDbGlwKCkgY29uc3QgeyByZXR1cm4gbV9jYW5jZWxC
dXR0b247IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5
LCBIaXRUZXN0QWN0aW9uKTsKLSAgICB2b2lkIGZvcndhcmRFdmVudChFdmVudCopOwotCi0gICAg
dm9pZCBjYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
dXRvc2Nyb2xsKCk7CiAKQEAgLTcyLDcgKzc1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxUb3AoaW50KTsKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjBmKTsKIAotcHJp
dmF0ZToKICAgICBpbnQgdGV4dEJsb2NrV2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBw
cmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0Q29udHJvbEhlaWdodEJhc2VkT25MaW5lSGVpZ2h0KGludCBsaW5lSGVpZ2h0
KTsKQEAgLTk0LDcgKzk2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0U2VhcmNoRXZlbnRU
aW1lcigpOwogICAgIHZvaWQgc2VhcmNoRXZlbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZT4qKTsKIAotcHJpdmF0ZToKICAgICAvLyBQb3B1cE1lbnVDbGllbnQg
bWV0aG9kcwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4
LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKTsKICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtVGV4dCh1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OwpAQCAtMTIwLDcgKzEyMSw2IEBAIHByaXZhdGU6CiAK
ICAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCgpIGNvbnN0OwogCi1wcml2YXRlOgogICAg
IGJvb2wgbV9wbGFjZWhvbGRlclZpc2libGU7CiAgICAgYm9vbCBtX3NlYXJjaFBvcHVwSXNWaXNp
YmxlOwogICAgIGJvb2wgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3I7CkBAIC0xMzQsNiAr
MTM0LDE1IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFN0cmluZz4gbV9yZWNlbnRTZWFyY2hlczsK
IH07CiAKK2lubGluZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHRvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKFJlbmRlck9iamVjdCogb2JqZWN0KQoreyAKKyAgICBBU1NFUlQoIW9i
amVjdCB8fCBvYmplY3QtPmlzVGV4dEZpZWxkKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqPihvYmplY3QpOworfQorCisvLyBUaGlzIHdpbGwg
Y2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKGNvbnN0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSopOwor
CiB9CiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTWFjLm1tCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1MDYsNyArMTUwNiw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTbGlkZXIKICAgICBlbHNlCiAgICAgICAg
IG9sZFByZXNzZWQgPSBtX2lzU2xpZGVyVGh1bWJIb3Jpem9udGFsUHJlc3NlZDsKIAotICAgIGJv
b2wgcHJlc3NlZCA9IHN0YXRpY19jYXN0PFJlbmRlclNsaWRlcio+KG8tPnBhcmVudCgpKS0+aW5E
cmFnTW9kZSgpOworICAgIGJvb2wgcHJlc3NlZCA9IHRvUmVuZGVyU2xpZGVyKG8tPnBhcmVudCgp
KS0+aW5EcmFnTW9kZSgpOwogCiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKICAgICAgICAgbV9pc1NsaWRlclRodW1iVmVydGljYWxQ
cmVzc2VkID0gcHJlc3NlZDsKQEAgLTE5MTAsNyArMTkxMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6cGFpbnRNZWRpYVMKICAgICAgICAgY3VycmVudFRpbWUgPSBwbGF5ZXItPmN1
cnJlbnRUaW1lKCk7CiAgICAgfQogCi0gICAgYm9vbCBzaG91bGREcmF3RW5kQ2FwcyA9ICFzdGF0
aWNfY2FzdDxSZW5kZXJNZWRpYSo+KG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSktPnNob3VsZFNo
b3dUaW1lRGlzcGxheUNvbnRyb2xzKCk7CisgICAgYm9vbCBzaG91bGREcmF3RW5kQ2FwcyA9ICF0
b1JlbmRlck1lZGlhKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSktPnNob3VsZFNob3dUaW1lRGlz
cGxheUNvbnRyb2xzKCk7CiAgICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayhNZWRpYUNvbnRyb2xs
ZXJUaGVtZUNsYXNzaWMsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwg
dGltZUxvYWRlZCwgY3VycmVudFRpbWUsIGR1cmF0aW9uLCBzaG91bGREcmF3RW5kQ2FwcyA/IE1l
ZGlhVUlQYXJ0RHJhd0VuZENhcHNGbGFnIDogMCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAko
cmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDcgKzQ2NSw3IEBAIHVuc2lnbmVkIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OmRldGVybWkKICAgICAgICAgcmVzdWx0ID0gVFVTX0RJU0FCTEVE
OwogICAgIGVsc2UgaWYgKHN1cHBvcnRzRm9jdXMoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpKSAm
JiBpc0ZvY3VzZWQoby0+cGFyZW50KCkpKQogICAgICAgICByZXN1bHQgPSBUVVNfRk9DVVNFRDsK
LSAgICBlbHNlIGlmIChzdGF0aWNfY2FzdDxSZW5kZXJTbGlkZXIqPihvLT5wYXJlbnQoKSktPmlu
RHJhZ01vZGUoKSkKKyAgICBlbHNlIGlmICh0b1JlbmRlclNsaWRlcihvLT5wYXJlbnQoKSktPmlu
RHJhZ01vZGUoKSkKICAgICAgICAgcmVzdWx0ID0gVFVTX1BSRVNTRUQ7CiAgICAgZWxzZSBpZiAo
aXNIb3ZlcmVkKG8pKQogICAgICAgICByZXN1bHQgPSBUVVNfSE9UOwpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMzQsNyArMTEzNCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIoUmUKICAgICBlbHNlCiAgICAg
ICAgIG9sZFByZXNzZWQgPSBtX2lzU2xpZGVyVGh1bWJIb3Jpem9udGFsUHJlc3NlZDsKIAotICAg
IGJvb2wgcHJlc3NlZCA9IHN0YXRpY19jYXN0PFJlbmRlclNsaWRlcio+KG8tPnBhcmVudCgpKS0+
aW5EcmFnTW9kZSgpOworICAgIGJvb2wgcHJlc3NlZCA9IHRvUmVuZGVyU2xpZGVyKG8tPnBhcmVu
dCgpKS0+aW5EcmFnTW9kZSgpOwogCiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9
PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKICAgICAgICAgbV9pc1NsaWRlclRodW1iVmVydGlj
YWxQcmVzc2VkID0gcHJlc3NlZDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
U2FmYXJpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNh
ZmFyaS5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVTYWZhcmkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAwLDcgKzEwMDAsNyBAQCBib29sIFJl
bmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRodW1iCiAKICAgICBBU1NFUlQoby0+cGFyZW50
KCktPmlzU2xpZGVyKCkpOwogCi0gICAgYm9vbCBwcmVzc2VkID0gc3RhdGljX2Nhc3Q8UmVuZGVy
U2xpZGVyKj4oby0+cGFyZW50KCkpLT5pbkRyYWdNb2RlKCk7CisgICAgYm9vbCBwcmVzc2VkID0g
dG9SZW5kZXJTbGlkZXIoby0+cGFyZW50KCkpLT5pbkRyYWdNb2RlKCk7CiAgICAgVGhlbWVDb250
cm9sU3RhdGUgc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvLT5wYXJlbnQoKSk7CiAgICAgc3RhdGUg
Jj0gflNhZmFyaVRoZW1lOjpQcmVzc2VkU3RhdGU7CiAgICAgaWYgKHByZXNzZWQpCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI4LDcg
KzQyOCw3IEBAIHVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVTbGlkZXIKICAgICAg
ICAgcmVzdWx0ID0gVFVTX0RJU0FCTEVEOwogICAgIGVsc2UgaWYgKHN1cHBvcnRzRm9jdXMoby0+
c3R5bGUoKS0+YXBwZWFyYW5jZSgpKSAmJiBpc0ZvY3VzZWQoby0+cGFyZW50KCkpKQogICAgICAg
ICByZXN1bHQgPSBUVVNfRk9DVVNFRDsKLSAgICBlbHNlIGlmIChzdGF0aWNfY2FzdDxSZW5kZXJT
bGlkZXIqPihvLT5wYXJlbnQoKSktPmluRHJhZ01vZGUoKSkKKyAgICBlbHNlIGlmICh0b1JlbmRl
clNsaWRlcihvLT5wYXJlbnQoKSktPmluRHJhZ01vZGUoKSkKICAgICAgICAgcmVzdWx0ID0gVFVT
X1BSRVNTRUQ7CiAgICAgZWxzZSBpZiAoaXNIb3ZlcmVkKG8pKQogICAgICAgICByZXN1bHQgPSBU
VVNfSE9UOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlz
aW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxMiw3ICszMTIsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSAmb3BlcmF0
b3I8PChUZXh0U3RyZWFtCiAgICAgfQogCiAgICAgaWYgKG8uaXNMaXN0TWFya2VyKCkpIHsKLSAg
ICAgICAgU3RyaW5nIHRleHQgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJMaXN0TWFya2VyJj4o
bykudGV4dCgpOworICAgICAgICBTdHJpbmcgdGV4dCA9IHRvUmVuZGVyTGlzdE1hcmtlcigmbykt
PnRleHQoKTsKICAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYg
KHRleHQubGVuZ3RoKCkgIT0gMSkKICAgICAgICAgICAgICAgICB0ZXh0ID0gcXVvdGVBbmRFc2Nh
cGVOb25QcmludGFibGVzKHRleHQpOwpAQCAtMzU5LDI2ICszNTksMjggQEAgdm9pZCB3cml0ZShU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTwogewogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYg
KG8uaXNSZW5kZXJQYXRoKCkpIHsKLSAgICAgICAgd3JpdGUodHMsIHN0YXRpY19jYXN0PGNvbnN0
IFJlbmRlclBhdGgmPihvKSwgaW5kZW50KTsKKyAgICAgICAgd3JpdGUodHMsICp0b1JlbmRlclBh
dGgoJm8pLCBpbmRlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChvLmlzU1ZH
Q29udGFpbmVyKCkpIHsKLSAgICAgICAgd3JpdGUodHMsIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRl
clNWR0NvbnRhaW5lciY+KG8pLCBpbmRlbnQpOworICAgICAgICAvLyBGSVhNRTogaXNTVkdDb250
YWluZXIgcmV0dXJucyB0cnVlIGZvciBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciwgc28gaWYg
dGhpcyBpcyBldmVyCisgICAgICAgIC8vIGNhbGxlZCB3aXRoIG9uZSBvZiB0aG9zZSwgd2Ugd2ls
bCByZWFkIGZyb20gdGhlIHdyb25nIG9mZnNldCBpbiBhbiBvYmplY3QgZHVlIHRvIGEgYmFkIGNh
c3QuCisgICAgICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdDb250YWluZXIoJm8pLCBpbmRlbnQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChvLmlzU1ZHUm9vdCgpKSB7Ci0gICAg
ICAgIHdyaXRlKHRzLCBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdSb290Jj4obyksIGluZGVu
dCk7CisgICAgICAgIHdyaXRlKHRzLCAqdG9SZW5kZXJTVkdSb290KCZvKSwgaW5kZW50KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoby5pc1NWR1RleHQoKSkgewogICAgICAgICBp
ZiAoIW8uaXNUZXh0KCkpCi0gICAgICAgICAgICB3cml0ZSh0cywgc3RhdGljX2Nhc3Q8Y29uc3Qg
UmVuZGVyU1ZHVGV4dCY+KG8pLCBpbmRlbnQpOworICAgICAgICAgICAgd3JpdGVTVkdUZXh0KHRz
LCAqdG9SZW5kZXJCbG9jaygmbyksIGluZGVudCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHdyaXRlKHRzLCBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdJbmxpbmVUZXh0Jj4obyksIGlu
ZGVudCk7CisgICAgICAgICAgICB3cml0ZVNWR0lubGluZVRleHQodHMsICp0b1JlbmRlclRleHQo
Jm8pLCBpbmRlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChvLmlzU1ZHSW1h
Z2UoKSkgewotICAgICAgICB3cml0ZSh0cywgc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHSW1h
Z2UmPihvKSwgaW5kZW50KTsKKyAgICAgICAgd3JpdGUodHMsICp0b1JlbmRlckltYWdlKCZvKSwg
aW5kZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtNDAyLDcgKzQwNCw3
IEBAIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck8KICAgICB9CiAKICAg
ICBpZiAoby5pc1dpZGdldCgpKSB7Ci0gICAgICAgIFdpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgUmVuZGVyV2lkZ2V0Jj4obykud2lkZ2V0KCk7CisgICAgICAgIFdpZGdldCogd2lk
Z2V0ID0gdG9SZW5kZXJXaWRnZXQoJm8pLT53aWRnZXQoKTsKICAgICAgICAgaWYgKHdpZGdldCAm
JiB3aWRnZXQtPmlzRnJhbWVWaWV3KCkpIHsKICAgICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCk7CiAgICAgICAgICAgICBSZW5kZXJWaWV3
KiByb290ID0gdmlldy0+ZnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCk7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWRlby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZGVvLmgJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlkZW8uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDYgKzQyLDIwIEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJWaWRlbyhIVE1MTWVkaWFFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyVmlkZW8o
KTsKIAorICAgIHZvaWQgdmlkZW9TaXplQ2hhbmdlZCgpOworICAgIEludFJlY3QgdmlkZW9Cb3go
KSBjb25zdDsKKyAgICAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgYm9v
bCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3Q7CisgICAgdm9pZCBhY2NlbGVy
YXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpOworICAgIEdyYXBoaWNzTGF5ZXIqIHZpZGVvR3Jh
cGhpY3NMYXllcigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUZyb21FbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW50cmluc2ljU2l6ZUNo
YW5nZWQoKSB7IHZpZGVvU2l6ZUNoYW5nZWQoKTsgfQorCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclZpZGVvIjsgfQogCiAgICAgdmly
dHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC01Niwy
MSArNzAsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsK
ICAgICAKLSAgICB2b2lkIHZpZGVvU2l6ZUNoYW5nZWQoKTsKLSAgICBJbnRSZWN0IHZpZGVvQm94
KCkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotCi0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJl
bmRlcmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0
YXRlQ2hhbmdlZCgpOwotICAgIEdyYXBoaWNzTGF5ZXIqIHZpZGVvR3JhcGhpY3NMYXllcigpIGNv
bnN0OwotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgaW50cmluc2ljU2l6
ZUNoYW5nZWQoKSB7IHZpZGVvU2l6ZUNoYW5nZWQoKTsgfQotCi1wcml2YXRlOgogICAgIGludCBj
YWxjQXNwZWN0UmF0aW9XaWR0aCgpIGNvbnN0OwogICAgIGludCBjYWxjQXNwZWN0UmF0aW9IZWln
aHQoKSBjb25zdDsKIApAQCAtODAsNiArNzksMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0
ZVBsYXllcigpOwogfTsKIAoraW5saW5lIFJlbmRlclZpZGVvKiB0b1JlbmRlclZpZGVvKFJlbmRl
ck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNWaWRl
bygpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVmlkZW8qPihvYmplY3QpOworfQor
CisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2
b2lkIHRvUmVuZGVyVmlkZW8oY29uc3QgUmVuZGVyVmlkZW8qKTsKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3Rlckxh
eW91dEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3Rl
ckxheW91dEluZm8uY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NW
R0NoYXJhY3RlckxheW91dEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNyArMjc0LDcg
QEAgdm9pZCBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjphZGRMYXlvdXRJbgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYW5nbGVTdGFjay5pc0VtcHR5KCkgJiYgYmFzZWxpbmVTaGlmdFN0YWNr
LmlzRW1wdHkoKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyeCA9PSAwLjBmICYm
IGN1cnkgPT0gMC4wZjsKIAotICAgIFJlbmRlclNWR1RleHRQYXRoKiB0ZXh0UGF0aCA9IHN0YXRp
Y19jYXN0PFJlbmRlclNWR1RleHRQYXRoKj4oZmxvd0JveC0+cmVuZGVyZXIoKSk7CisgICAgUmVu
ZGVyU1ZHVGV4dFBhdGgqIHRleHRQYXRoID0gdG9SZW5kZXJTVkdUZXh0UGF0aChmbG93Qm94LT5y
ZW5kZXJlcigpKTsKICAgICBQYXRoIHBhdGggPSB0ZXh0UGF0aC0+bGF5b3V0UGF0aCgpOwogCiAg
ICAgZmxvYXQgYmFzZWxpbmVTaGlmdCA9IGNhbGN1bGF0ZUJhc2VsaW5lU2hpZnQodGV4dFBhdGgp
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHJldmlzaW9uIDQ2
Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2OSw5ICsxNjksMTEgQEAgdm9pZCByZW5kZXJTdWJ0cmVlVG9JbWFnZShJbWFn
ZUJ1ZmZlciogaQogICAgIEFTU0VSVChpbWFnZS0+Y29udGV4dCgpKTsKICAgICBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyBpbmZvKGltYWdlLT5jb250ZXh0KCksIEludFJlY3QoKSwgUGFpbnRQaGFz
ZUZvcmVncm91bmQsIDAsIDAsIDApOwogCisgICAgLy8gRklYTUU6IGlzU1ZHQ29udGFpbmVyIHJl
dHVybnMgdHJ1ZSBmb3IgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIsIHNvIGlmIHRoaXMgaXMg
ZXZlcgorICAgIC8vIGNhbGxlZCB3aXRoIG9uZSBvZiB0aG9zZSwgd2Ugd2lsbCByZWFkIGZyb20g
dGhlIHdyb25nIG9mZnNldCBpbiBhbiBvYmplY3QgZHVlIHRvIGEgYmFkIGNhc3QuCiAgICAgUmVu
ZGVyU1ZHQ29udGFpbmVyKiBzdmdDb250YWluZXIgPSAwOwogICAgIGlmIChpdGVtICYmIGl0ZW0t
PmlzU1ZHQ29udGFpbmVyKCkpCi0gICAgICAgIHN2Z0NvbnRhaW5lciA9IHN0YXRpY19jYXN0PFJl
bmRlclNWR0NvbnRhaW5lcio+KGl0ZW0pOworICAgICAgICBzdmdDb250YWluZXIgPSB0b1JlbmRl
clNWR0NvbnRhaW5lcihpdGVtKTsKIAogICAgIGJvb2wgZHJhd3NDb250ZW50cyA9IHN2Z0NvbnRh
aW5lciA/IHN2Z0NvbnRhaW5lci0+ZHJhd3NDb250ZW50cygpIDogZmFsc2U7CiAgICAgaWYgKHN2
Z0NvbnRhaW5lciAmJiAhZHJhd3NDb250ZW50cykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3
IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0lt
YWdlLmgiCisjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxp
bmVUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jvb3QuaCIKQEAgLTMzMiwyNSArMzMyLDE4IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0KICAgICByZXR1cm4gd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCByb290
KTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlclNWR0ltYWdlJiByb290KQotewotICAgIHJldHVybiB3cml0ZVBvc2l0aW9uQW5k
U3R5bGUodHMsIHJvb3QpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHVGV4dCYgdGV4dCkKK3N0YXRpYyB2b2lkIHdyaXRl
UmVuZGVyU1ZHVGV4dEJveChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyQmxvY2smIHRleHQp
CiB7CiAgICAgU1ZHUm9vdElubGluZUJveCogYm94ID0gc3RhdGljX2Nhc3Q8U1ZHUm9vdElubGlu
ZUJveCo+KHRleHQuZmlyc3RSb290Qm94KCkpOwogCiAgICAgaWYgKCFib3gpCi0gICAgICAgIHJl
dHVybiB0czsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPFNWR1RleHRDaHVuaz4mIGNo
dW5rcyA9IGNvbnN0X2Nhc3Q8VmVjdG9yPFNWR1RleHRDaHVuaz4mID4oYm94LT5zdmdUZXh0Q2h1
bmtzKCkpOwogICAgIHRzIDw8ICIgYXQgKCIgPDwgdGV4dC54KCkgPDwgIiwiIDw8IHRleHQueSgp
IDw8ICIpIHNpemUgIiA8PCBib3gtPndpZHRoKCkgPDwgIngiIDw8IGJveC0+aGVpZ2h0KCkgPDwg
IiBjb250YWlucyAiIDw8IGNodW5rcy5zaXplKCkgPDwgIiBjaHVuayhzKSI7CiAKICAgICBpZiAo
dGV4dC5wYXJlbnQoKSAmJiAodGV4dC5wYXJlbnQoKS0+c3R5bGUoKS0+Y29sb3IoKSAhPSB0ZXh0
LnN0eWxlKCktPmNvbG9yKCkpKQogICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJjb2xv
ciIsIHRleHQuc3R5bGUoKS0+Y29sb3IoKS5uYW1lKCkpOwotCi0gICAgcmV0dXJuIHRzOwogfQog
CiBzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNJbmxpbmVUZXh0Qm94KFNWR1RleHRDaHVuayYg
Y2h1bmssIFNWR0lubGluZVRleHRCb3gqIGJveCkKQEAgLTQ1NSw3ICs0NDgsNyBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgd3JpdGVTVkdJbmxpbmVUZXh0Qm94CiAgICAgfQogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgd3JpdGVTVkdJbmxpbmVUZXh0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJT
VkdJbmxpbmVUZXh0JiB0ZXh0LCBpbnQgaW5kZW50KQorc3RhdGljIGlubGluZSB2b2lkIHdyaXRl
U1ZHSW5saW5lVGV4dEJveGVzKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJUZXh0JiB0ZXh0
LCBpbnQgaW5kZW50KQogewogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4dC5maXJz
dFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCiAgICAgICAgIHdyaXRl
U1ZHSW5saW5lVGV4dEJveCh0cywgc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGJveCks
IGluZGVudCk7CkBAIC00OTAsMjAgKzQ4MywyMCBAQCB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJTCiAgICAgd3JpdGVDaGlsZHJlbih0cywgcm9vdCwgaW5kZW50KTsKIH0K
IAotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHVGV4dCYgdGV4dCwg
aW50IGluZGVudCkKK3ZvaWQgd3JpdGVTVkdUZXh0KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5k
ZXJCbG9jayYgdGV4dCwgaW50IGluZGVudCkKIHsKICAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRz
LCB0ZXh0LCBpbmRlbnQpOwotICAgIHRzIDw8IHRleHQgPDwgIlxuIjsKKyAgICB3cml0ZVJlbmRl
clNWR1RleHRCb3godHMsIHRleHQpOwogICAgIHdyaXRlQ2hpbGRyZW4odHMsIHRleHQsIGluZGVu
dCk7CiB9CiAKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0lubGlu
ZVRleHQmIHRleHQsIGludCBpbmRlbnQpCit2b2lkIHdyaXRlU1ZHSW5saW5lVGV4dChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyVGV4dCYgdGV4dCwgaW50IGluZGVudCkKIHsKICAgICB3cml0
ZVN0YW5kYXJkUHJlZml4KHRzLCB0ZXh0LCBpbmRlbnQpOwogCiAgICAgLy8gV2h5IG5vdCBqdXN0
IGxpbmVzQm91bmRpbmdCb3goKT8KICAgICB0cyA8PCAiICIgPDwgRmxvYXRSZWN0KHRleHQuZmly
c3RSdW5PcmlnaW4oKSwgdGV4dC5saW5lc0JvdW5kaW5nQm94KCkuc2l6ZSgpKSA8PCAiXG4iOwot
ICAgIHdyaXRlU1ZHSW5saW5lVGV4dCh0cywgdGV4dCwgaW5kZW50KTsKKyAgICB3cml0ZVNWR0lu
bGluZVRleHRCb3hlcyh0cywgdGV4dCwgaW5kZW50KTsKIH0KIAogdm9pZCB3cml0ZShUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyUGF0aCYgcGF0aCwgaW50IGluZGVudCkKQEAgLTUxMiwxMCAr
NTA1LDEwIEBAIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclAKICAgICB0
cyA8PCBwYXRoIDw8ICJcbiI7CiB9CiAKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFJlbmRlclNWR0ltYWdlJiBpbWFnZSwgaW50IGluZGVudCkKK3ZvaWQgd3JpdGVTVkdJbWFnZShU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVySW1hZ2UmIGltYWdlLCBpbnQgaW5kZW50KQogewog
ICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIGltYWdlLCBpbmRlbnQpOwotICAgIHRzIDw8IGlt
YWdlIDw8ICJcbiI7CisgICAgd3JpdGVQb3NpdGlvbkFuZFN0eWxlKHRzLCBpbWFnZSk7CiB9CiAK
IHZvaWQgd3JpdGVSZW5kZXJSZXNvdXJjZXMoVGV4dFN0cmVhbSYgdHMsIE5vZGUqIHBhcmVudCkK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDQ2
Nzc3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNs
YXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogICAgIGNsYXNzIENvbG9yOwogICAgIGNsYXNzIEZs
b2F0UG9pbnQ7CiAgICAgY2xhc3MgRmxvYXRSZWN0OwpAQCAtNDAsMjAgKzM5LDIxIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJbnRQb2ludDsKICAgICBjbGFzcyBJbnRSZWN0Owog
ICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgUmVuZGVyQmxvY2s7CisgICAgY2xhc3MgUmVuZGVy
SW1hZ2U7CiAgICAgY2xhc3MgUmVuZGVyUGF0aDsKICAgICBjbGFzcyBSZW5kZXJTVkdDb250YWlu
ZXI7Ci0gICAgY2xhc3MgUmVuZGVyU1ZHSW5saW5lVGV4dDsKICAgICBjbGFzcyBSZW5kZXJTVkdS
b290OwotICAgIGNsYXNzIFJlbmRlclNWR1RleHQ7IAotICAgIGNsYXNzIFJlbmRlclNWR0ltYWdl
OworICAgIGNsYXNzIFJlbmRlclRleHQ7CisgICAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7
CiAKIC8vIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBtYWluIFJlbmRlclRyZWVBc1RleHQgY29kZQot
dm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyUGF0aCYsIGludCBpbmRlbnQgPSAw
KTsKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0NvbnRhaW5lciYsIGlu
dCBpbmRlbnQgPSAwKTsKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0lu
bGluZVRleHQmLCBpbnQgaW5kZW50ID0gMCk7Ci12b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25z
dCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVudCA9IDApOwotdm9pZCB3cml0ZShUZXh0U3RyZWFt
JiwgY29uc3QgUmVuZGVyU1ZHVGV4dCYsIGludCBpbmRlbnQgPSAwKTsKLXZvaWQgd3JpdGUoVGV4
dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0ltYWdlJiwgaW50IGluZGVudCA9IDApOwordm9pZCB3
cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyUGF0aCYsIGludCBpbmRlbnQpOwordm9pZCB3
cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyJiwgaW50IGluZGVudCk7
Cit2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVu
dCk7Cit2b2lkIHdyaXRlU1ZHSW1hZ2UoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlckltYWdlJiwg
aW50IGluZGVudCk7Cit2b2lkIHdyaXRlU1ZHSW5saW5lVGV4dChUZXh0U3RyZWFtJiwgY29uc3Qg
UmVuZGVyVGV4dCYsIGludCBpbmRlbnQpOwordm9pZCB3cml0ZVNWR1RleHQoVGV4dFN0cmVhbSYs
IGNvbnN0IFJlbmRlckJsb2NrJiwgaW50IGluZGVudCk7CiAKIHZvaWQgd3JpdGVSZW5kZXJSZXNv
dXJjZXMoVGV4dFN0cmVhbSYsIE5vZGUqIHBhcmVudCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1NWR1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsMTQgKzI4NSwx
MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xvc2VUZXh0Q2h1bmsoU1ZHVGV4CiAKIFJlbmRlclNW
R1Jvb3QqIGZpbmRTVkdSb290T2JqZWN0KFJlbmRlck9iamVjdCogc3RhcnQpCiB7Ci0gICAgLy8g
RmluZCBhc3NvY2lhdGVkIHJvb3QgaW5saW5lIGJveAorICAgIC8vIEZpbmQgYXNzb2NpYXRlZCBy
b290IGlubGluZSBib3guCiAgICAgd2hpbGUgKHN0YXJ0ICYmICFzdGFydC0+aXNTVkdSb290KCkp
CiAgICAgICAgIHN0YXJ0ID0gc3RhcnQtPnBhcmVudCgpOwotCiAgICAgQVNTRVJUKHN0YXJ0KTsK
LSAgICBBU1NFUlQoc3RhcnQtPmlzU1ZHUm9vdCgpKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxSZW5kZXJTVkdSb290Kj4oc3RhcnQpOworICAgIHJldHVybiB0b1JlbmRlclNWR1Jvb3Qoc3Rh
cnQpOwogfQogCiBzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgdG9wTGVmdFBvc2l0aW9uT2ZDaGFy
YWN0ZXJSYW5nZShWZWN0b3I8U1ZHQ2hhcj4mIGNoYXJzKQpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShyZXZpc2lvbiA0Njc3NykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s6
Om5vZGVBdAogCiAgICAgYm9vbCBwbGFjZWhvbGRlcklzVmlzaWJsZSA9IGZhbHNlOwogICAgIGlm
IChyZW5kZXJlci0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAgcGxhY2Vob2xkZXJJc1Zpc2libGUg
PSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqPihyZW5kZXJlciktPnBs
YWNlaG9sZGVySXNWaXNpYmxlKCk7CisgICAgICAgIHBsYWNlaG9sZGVySXNWaXNpYmxlID0gdG9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIpLT5wbGFjZWhvbGRlcklzVmlzaWJs
ZSgpOwogCiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1
bHQsIHgsIHksIHR4LCB0eSwgcGxhY2Vob2xkZXJJc1Zpc2libGUgPyBIaXRUZXN0QmxvY2tCYWNr
Z3JvdW5kIDogaGl0VGVzdEFjdGlvbik7CiB9CkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpkZQogICAgIGlmIChldnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0
aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAg
ICAgICBpbnB1dC0+Zm9jdXMoKTsKICAgICAgICAgaW5wdXQtPnNlbGVjdCgpOwotICAgICAgICBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lKj4oaW5wdXQtPnJlbmRlcmVyKCkpOworICAgICAgICBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHJlbmRlcmVyID0gdG9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUoaW5wdXQtPnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAocmVuZGVyZXItPnBvcHVw
SXNWaXNpYmxlKCkpCiAgICAgICAgICAgICByZW5kZXJlci0+aGlkZVBvcHVwKCk7CiAgICAgICAg
IGVsc2UgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPiAwKQpJbmRleDogV2ViQ29yZS9zdmcvU1ZH
SW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiA0Njc3NykKKysrIFdlYkNvcmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMsOCArMyw2IEBACiAgICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAg
ICAgICAgICAgICAgICAgICAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+
CiAKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQogICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwogICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgpAQCAtMTMwLDcgKzEyOCw3IEBAIHZvaWQgU1ZHSW1hZ2VFbGVtZW50
OjphdHRhY2goKQogewogICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjphdHRhY2go
KTsKIAotICAgIGlmIChSZW5kZXJTVkdJbWFnZSogaW1hZ2VPYmogPSBzdGF0aWNfY2FzdDxSZW5k
ZXJTVkdJbWFnZSo+KHJlbmRlcmVyKCkpKSB7CisgICAgaWYgKFJlbmRlckltYWdlKiBpbWFnZU9i
aiA9IHRvUmVuZGVySW1hZ2UocmVuZGVyZXIoKSkpIHsKICAgICAgICAgaWYgKGltYWdlT2JqLT5o
YXNJbWFnZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdN
YXJrZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVt
ZW50LmNwcAkocmV2aXNpb24gNDY3NzcpCisrKyBXZWJDb3JlL3N2Zy9TVkdNYXJrZXJFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIFNWR1Jlc291cmNlKiBTVkdN
YXJrZXJFbGVtZW50OjpjYW52YXNSZXMKICAgICBpZiAoIW1fbWFya2VyKQogICAgICAgICBtX21h
cmtlciA9IFNWR1Jlc291cmNlTWFya2VyOjpjcmVhdGUoKTsKIAotICAgIG1fbWFya2VyLT5zZXRN
YXJrZXIoc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIqPihyZW5kZXJlcigp
KSk7CisgICAgbV9tYXJrZXItPnNldE1hcmtlcih0b1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
KHJlbmRlcmVyKCkpKTsKIAogICAgIGlmIChvcmllbnRUeXBlKCkgPT0gU1ZHX01BUktFUl9PUklF
TlRfQU5HTEUpIHsKICAgICAgICAgaWYgKG9yaWVudEFuZ2xlKCkpCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1RleHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS9zdmcv
U1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDcgKzMyOCw3
IEBAIHN0YXRpYyBpbmxpbmUgU1ZHUm9vdElubGluZUJveCogcm9vdElubGkKICAgICBpZiAoIW9i
amVjdCB8fCAhb2JqZWN0LT5pc1NWR1RleHQoKSB8fCBvYmplY3QtPmlzVGV4dCgpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIFJlbmRlclNWR1RleHQqIHN2Z1RleHQgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJTVkdUZXh0Kj4ob2JqZWN0KTsKKyAgICBSZW5kZXJCbG9jayogc3ZnVGV4dCA9IHRvUmVu
ZGVyQmxvY2sob2JqZWN0KTsKIAogICAgIC8vIEZpbmQgcm9vdCBpbmxpbmUgYm94CiAgICAgU1ZH
Um9vdElubGluZUJveCogcm9vdEJveCA9IHN0YXRpY19jYXN0PFNWR1Jvb3RJbmxpbmVCb3gqPihz
dmdUZXh0LT5maXJzdFJvb3RCb3goKSk7CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQ2Nzc3KQorKysgV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgV01MSW5wdXRFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGUKICAgICAgICAgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudChtX2RhdGEsIHRoaXMsIGRvY3VtZW50KCksIGV2dCk7CiAKICAgICBpZiAocmVuZGVy
ZXIoKSAmJiAoZXZ0LT5pc01vdXNlRXZlbnQoKSB8fCBldnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZ0
LT5pc1doZWVsRXZlbnQoKSB8fCBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50
IHx8IGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50KSkKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKj4ocmVuZGVyZXIoKSktPmZvcndh
cmRFdmVudChldnQpOworICAgICAgICB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShyZW5k
ZXJlcigpKS0+Zm9yd2FyZEV2ZW50KGV2dCk7CiB9CiAKIHZvaWQgV01MSW5wdXRFbGVtZW50Ojpj
YWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpCg==
</data>
<flag name="review"
          id="18263"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>