<?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>11844</bug_id>
          
          <creation_ts>2006-12-15 12:53:06 -0800</creation_ts>
          <short_desc>Code Cleanup for more of the rendering code</short_desc>
          <delta_ts>2006-12-16 15:51:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>41856</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-12-15 12:53:06 -0800</bug_when>
    <thetext>Patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41854</commentid>
    <comment_count>1</comment_count>
      <attachid>11869</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-12-15 13:01:51 -0800</bug_when>
    <thetext>Created attachment 11869
patch

Cleanup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41677</commentid>
    <comment_count>2</comment_count>
      <attachid>11869</attachid>
    <who name="">mitz</who>
    <bug_when>2006-12-15 15:38:29 -0800</bug_when>
    <thetext>Comment on attachment 11869
patch

Move the ampersand next to &apos;int&apos; here:

 InlineTextBox* RenderText::findNextInlineTextBox(int offset, int &amp;pos) const

Make this &quot;the RenderText&apos;s m_str&quot; (without &apos;string&apos;). Also I don&apos;t think the &apos;@p&apos; further down helps.

-    // The text runs point to parts of the rendertext&apos;s str string
+    // The text runs point to parts of the rendertext&apos;s m_str string
     // (they don&apos;t include &apos;\n&apos;)
     // Find the text run that includes the character at @p offset
     // and return pos, which is the position of the char in the run.

Move this &apos;*&apos;:

 IntRect RenderText::caretRect(int offset, EAffinity affinity, int *extraWidthToEndOfLine)

What does this comment tell you that the code that follows it doesn&apos;t? If you&apos;re leaving it in, then since you touched it I&apos;ll have to ask you to capitalize it.

+    // if the text has a variable width tab, we need to call
     if (m_hasTab)
         calcMinMaxWidth(leadWidth);

Please break this into two statements:

         beginMaxW = endMaxW = maxW;

Need spaces around the first &apos;+&apos; too:

+            while (i+linelen &lt; len &amp;&amp; (*m_str)[i + linelen] != &apos;\n&apos;)

Split:

     m_hasBreakableChar = m_hasBreak = m_hasTab = m_hasBeginWS = m_hasEndWS = false;

Can the local variable be renamed &apos;wordLen&apos;?

         int wordlen = j - i;

Needs spaces around &apos;+&apos;:

+         currPos &lt; from+len &amp;&amp; ((*m_str)[currPos] == &apos;\n&apos; || (*m_str)[currPos] == &apos; &apos; || (*m_str)[currPos] == &apos;\t&apos;);

How about using INT_MAX, then? Also, &apos;pos&apos;, &apos;x&apos;, &apos;result&apos; and &apos;retVal&apos; are all nicer names for the local variable.

+    // FIXME: we should not use a random value like this.
+    int retval = 6666666;

I think it&apos;s better to indent the whole block after &apos;case CAPITALIZE:&apos; and leave the &apos;break;&apos; outside:

             switch (style()-&gt;textTransform()) {
                 case CAPITALIZE:

Consider using INT_MAX:

+    // FIXME: we should not use a random value like this.
     int minx = 100000000;

This should say &apos;in case&apos;:

+    // If we&apos;re within the text control, we want to act as if we&apos;ve hit the inner div, incase the point

It would be nice to change this to say RenderTextControl and update test results at some point.
 
+    virtual const char* renderName() const { return &quot;RenderTextField&quot;; }

These changes are fine (unless you think it should be &apos;255.0&apos;?). However, I wonder if the math is correct - it maps 0.9999 to 254, which seems wrong (that is, I don&apos;t think that&apos;s how CG works):

-    return Color((int)(255 * [color redComponent]), (int)(255 * [color greenComponent]), (int)(255 * [color blueComponent]));
+    return Color(static_cast&lt;int&gt;(255 * [color redComponent]), static_cast&lt;int&gt;(255 * [color greenComponent]), static_cast&lt;int&gt;(255 * [color blueComponent]));

How about &apos;ts &lt;&lt; &quot;layer &quot; &lt;&lt; layerBounds;&apos; instead of this?

+    ts &lt;&lt; &quot;layer&quot; &lt;&lt; &quot; &quot; &lt;&lt; layerBounds;

This should be &apos;true&apos;:

+    , m_printImages(false)

Please rename &apos;f&apos; to &apos;fixed&apos; here too:

+    virtual bool absolutePosition(int&amp; xPos, int&amp; yPos, bool f = false);

Needs spaces around the first &apos;||&apos;:

+        if (topLevel||!(text-&gt;x()-&gt;getFirst() || text-&gt;y()-&gt;getFirst() ||

There is no KRenderingStyle.cpp:

+// FIXME: This should be in KRenderingStyle.cpp

+// FIXME: This should be in KRenderingStyle.cpp

+// FIXME: This should be in KRenderingStyle.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41736</commentid>
    <comment_count>3</comment_count>
      <attachid>11887</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-12-16 13:39:35 -0800</bug_when>
    <thetext>Created attachment 11887
updated patch

Updated patch addressing mitz&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41739</commentid>
    <comment_count>4</comment_count>
      <attachid>11887</attachid>
    <who name="">mitz</who>
    <bug_when>2006-12-16 14:07:14 -0800</bug_when>
    <thetext>Comment on attachment 11887
updated patch

r=me, although I&apos;d prefer if you addressed the following comments before landing:

Use the class name &apos;RenderText&apos; instead of &apos;rendertext&apos;:

+    // The text runs point to parts of the rendertext&apos;s m_str

I&apos;m fine with you just adding these comments for now, but it&apos;s wrong to call these values &apos;random&apos;. Use &apos;arbitrary&apos; instead.

+    // FIXME: we should not use a random value like this.  Perhaps we should use INT_MAX.

+    // FIXME: we should not use a random value like this.  Perhaps we should use INT_MAX.

Here I think it&apos;s best to leave &apos;sizes&apos; since otherwise it&apos;s not obvious that the parameter is pointing to an array:

-    void setControlSize(NSCell*, const IntSize* sizes, const IntSize&amp; minSize);
-    void setSizeFromFont(RenderStyle*, const IntSize* sizes) const;
-    IntSize sizeForFont(RenderStyle*, const IntSize* sizes) const;
-    IntSize sizeForSystemFont(RenderStyle*, const IntSize* sizes) const;
+    void setControlSize(NSCell*, const IntSize*, const IntSize&amp; minSize);
+    void setSizeFromFont(RenderStyle*, const IntSize*) const;
+    IntSize sizeForFont(RenderStyle*, const IntSize*) const;
+    IntSize sizeForSystemFont(RenderStyle*, const IntSize*) const;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41753</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-12-16 15:51:28 -0800</bug_when>
    <thetext>Landed in r18263.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11869</attachid>
            <date>2006-12-15 13:01:51 -0800</date>
            <delta_ts>2006-12-16 13:39:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>newestCleaning.diff</filename>
            <type>text/plain</type>
            <size>184485</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODIzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEwIEBACisyMDA2LTEyLTE1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGF0Y2gg
Zm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ0CisgICAgICAg
IENvZGUgQ2xlYW51cCBmb3IgbW9yZSBvZiB0aGUgcmVuZGVyaW5nIGNvZGUKKworICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpjYWxj
TWluTWF4V2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OlJlbmRlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dDo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6ZGVz
dHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjphdHRhY2hUZXh0Qm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmZpbmROZXh0SW5saW5lVGV4dEJveCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpcnN0UmVuZGVyZXJPbk5leHRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
Omxhc3RSZW5kZXJlck9uUHJldkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6
Y2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnBvc09mQ2hhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjphbGxBc2NpaSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0OjpzaG91bGRVc2VNb25vc3BhY2VDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0OjpjYWNoZVdpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Ojp3aWR0aEZyb21DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp0cmltbWVk
TWluTWF4V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y2FsY01pbk1heFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3BhY2VBY2NvcmRpbmdUb1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bWluWFBvcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUZXh0OjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
OjpzZXRUZXh0V2l0aE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzZXRU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHQ6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHQ6OmdldEFic29sdXRlUmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp2ZXJ0aWNh
bFBvc2l0aW9uSGludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpmb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNhcmV0TWluT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHQ6OmNhcmV0TWF4T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHQ6OnByZXZpb3VzT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6
Om5leHRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6aW5saW5lQm94KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dDo6aXNUZXh0RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6
ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Om5vZGVBdFBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnN0cmlu
Z0xlbmd0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpSZW5kZXJUZXh0Q29udHJvbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6c2V0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZURpdlN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnNldFNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sOjp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6dGV4dFdpdGhIYXJkTGluZUJyZWFrcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY0hlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Q29udHJvbDo6Y2FsY01pbk1heFdpZHRoKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
OjpyZW5kZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpyZW1v
dmVMZWZ0b3ZlckFub255bW91c0JveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRGcmFnbWVudDo6UmVu
ZGVyVGV4dEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRGcmFnbWVudDo6
b3JpZ2luYWxTdHJpbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRGcmFnbWVudDo6aXNUZXh0RnJhZ21lbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c3Rh
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RDaGVja2Jv
eFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6
Oik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OlJlbmRlclRoZW1lTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
bGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWN0aXZlTGlzdEJveFNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
c3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6aXNDb250cm9s
U3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RSZXBhaW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQ2hlY2tlZFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpjb250cm9sU3VwcG9ydHNU
aW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250
cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRDaGVja2Jv
eCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6Y2hlY2tib3hNYXJnaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRDaGVja2JveENlbGxTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0Q2hlY2tib3hTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFJhZGlvKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjpyYWRpb01hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6OnNldFJhZGlvQ2VsbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lTWFjOjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjpidXR0b25NYXJnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpz
ZXRCdXR0b25TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRCdXR0
b25DZWxsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFRl
eHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RU
ZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cEJ1
dHRvbk1hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwQnV0
dG9uUGFkZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUb3BHcmFkaWVudEludGVycG9sYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWFpbkdyYWRpZW50SW50ZXJwb2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJh
Y2tHcmFkaWVudEludGVycG9sYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lTWFjOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRodW1iKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlSW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnByaW50Qm9yZGVy
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VGFnTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0VtcHR5T3JVbnN0eWxlZEFwcGxlU3R5bGVTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6Ondy
aXRlVGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojp3cml0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpub2RlUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6d3JpdGVTZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJWaWV3OjpjYWxjTWluTWF4V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmFic29sdXRlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6cmVuZGVyZXJBZnRlclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2V0U2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNlbGVjdGlvblN0YXJ0RW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnVwZGF0ZVdpZGdldFBvc2l0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjphZGRXaWRnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVmlldzo6cmVtb3ZlV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZp
ZXc6OnZpZXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmRvY0hlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojpkb2NXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJWaWV3OjpzZXRCZXN0VHJ1bmNhdGVkQXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJWaWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpyZW5kZXJOYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNlbGVjdGlvblN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNlbGVjdGlvbkVuZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OmRl
c3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpyZXNpemVXaWRnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdl
dDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0
OjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6cGxhY2VFbGxpcHNpcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpmaWxsTGluZVNlbGVjdGlvbkdhcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSb290SW5saW5lQm94OjpmaXJzdFNlbGVjdGVkQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OlJvb3RJbmxpbmVCb3g6Omxhc3RTZWxlY3RlZEJveCk6CisgICAgICAgIChXZWJDb3Jl
OjpSb290SW5saW5lQm94OjpzZWxlY3Rpb25Ub3ApOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElu
bGluZUJveDo6Y2xvc2VzdExlYWZDaGlsZEZvclhQb3MpOgorICAgICAgICAqIHJlbmRlcmluZy9S
b290SW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojppc1Jvb3RJ
bmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6c2V0VmVydGljYWxP
dmVyZmxvd1Bvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZXRI
b3Jpem9udGFsT3ZlcmZsb3dQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGlu
ZUJveDo6c2V0VmVydGljYWxTZWxlY3Rpb25Qb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Um9vdElubGluZUJveDo6bGluZUJyZWFrT2JqKToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxp
bmVCb3g6OmxpbmVCcmVha1Bvcyk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojpz
ZXRMaW5lQnJlYWtQb3MpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6YmxvY2tI
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6c2V0QmxvY2tIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6ZW5kc1dpdGhCcmVhayk6CisgICAg
ICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZXRFbmRzV2l0aEJyZWFrKToKKyAgICAgICAg
KiByZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJ
bmxpbmVGbG93Qm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpwYWludFNWR0lubGluZUZs
b3cpOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNsYXRlQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OnBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OnBs
YWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFic0Jhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnBs
YWNlU1ZHRmxvd1ZlcnRpY2FsbHkpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdJbmxpbmVGbG93
Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFN0cmVhbVNlcGFyYXRvcjo6VGV4dFN0cmVhbVNlcGFyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6Omhhc0Zy
YWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUluZGVudCk6CisgICAgICAgIChXZWJD
b3JlOjp3cml0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFRhZ05hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVSZW5kZXJSZXNvdXJj
ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUm9vdElubGlu
ZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGx5
KToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9UYWJsZUxheW91dC5oOgorCiAyMDA2LTEyLTE1ICBNYXJ2aW4gRGVja2VyICA8bWFy
di5kZWNrZXJAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIGFuZCBBbGV4
ZXkuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTgyMzUpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtODk4Nyw4ICs4OTg3LDYgQEAKIAkJRjUyM0QxODQwMkRFNDJF
ODAxODYzNUNBIC8qIGNzcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCi0JCQkJQUEwOTc4RUQwQUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUu
Y3BwICovLAotCQkJCUFBMDk3OEVFMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZh
bHVlLmggKi8sCiAJCQkJQTgwRTZDREEwQTE5ODlDQTAwN0ZCOEM1IC8qIENvdW50ZXIuaCAqLywK
IAkJCQk5MzA3MDVDNzA5RTBDOTVGMDBCMTdGRTQgLyogQ291bnRlci5pZGwgKi8sCiAJCQkJQTgw
RTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovLApAQCAt
ODk5OCw2ICs4OTk2LDggQEAKIAkJCQk4NUM1NkNBQzBBQTg5RjhFMDBEOTU3NTUgLyogQ1NTQ2hh
cnNldFJ1bGUuaWRsICovLAogCQkJCUJDRUE0NzdDMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwICovLAogCQkJCUJDRUE0NzdEMDk3Q0FBQzgwMDk0QzlF
NCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCAqLywKKwkJCQlBQTA5NzhFRDBBQkFB
NkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgKi8sCisJCQkJQUEwOTc4RUUw
QUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCAqLywKIAkJCQlBODBFNkNC
RDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTRm9udEZhY2VSdWxlLmNwcCAqLywKIAkJCQlBODBFNkNE
MzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTRm9udEZhY2VSdWxlLmggKi8sCiAJCQkJODVDNTZDQTMw
QUE4OUNBNDAwRDk1NzU1IC8qIENTU0ZvbnRGYWNlUnVsZS5pZGwgKi8sCkBAIC05MTA2LDEwICs5
MTA2LDYgQEAKIAkJRjUyM0QyRjMwMkRFNDQzQjAxODYzNUNBIC8qIHJlbmRlcmluZyAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTczNTJDMTcwQjFCQjg5
RDAwQTk4NkQwIC8qIFJlbmRlclNWR0Jsb2NrLmNwcCAqLywKLQkJCQlBNzM1MkMxODBCMUJCODlE
MDBBOTg2RDAgLyogUmVuZGVyU1ZHQmxvY2suaCAqLywKLQkJCQlBQjI0N0E2QTBBRkQ2MzgzMDAz
RkE1RkQgLyogUmVuZGVyU2xpZGVyLmNwcCAqLywKLQkJCQlBQjI0N0E2QjBBRkQ2MzgzMDAzRkE1
RkQgLyogUmVuZGVyU2xpZGVyLmggKi8sCiAJCQkJQThDRkYwNEIwQTE1NEYwOTAwMEE0MjM0IC8q
IEF1dG9UYWJsZUxheW91dC5jcHAgKi8sCiAJCQkJQThDRkYwNDkwQTE1NEYwOTAwMEE0MjM0IC8q
IEF1dG9UYWJsZUxheW91dC5oICovLAogCQkJCUJDRUE0ODEzMDk3RDkzMDIwMDk0QzlFNCAvKiBi
aWRpLmNwcCAqLywKQEAgLTkyMDQsOCArOTIwMCwxMiBAQAogCQkJCTg1M0NBOUVGMEFFRUM2NTcw
MDIzNzJEQyAvKiBSZW5kZXJQYXRoLmggKi8sCiAJCQkJQTg3MURGREUwQTE1Mzc2QjAwQjEyQTY4
IC8qIFJlbmRlclJlcGxhY2VkLmNwcCAqLywKIAkJCQlBODcxREZERjBBMTUzNzZCMDBCMTJBNjgg
LyogUmVuZGVyUmVwbGFjZWQuaCAqLywKKwkJCQlBQjI0N0E2QTBBRkQ2MzgzMDAzRkE1RkQgLyog
UmVuZGVyU2xpZGVyLmNwcCAqLywKKwkJCQlBQjI0N0E2QjBBRkQ2MzgzMDAzRkE1RkQgLyogUmVu
ZGVyU2xpZGVyLmggKi8sCiAJCQkJQkNFQTQ4NDQwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclN0
eWxlLmNwcCAqLywKIAkJCQlCQ0VBNDg0NTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyU3R5bGUu
aCAqLywKKwkJCQlBNzM1MkMxNzBCMUJCODlEMDBBOTg2RDAgLyogUmVuZGVyU1ZHQmxvY2suY3Bw
ICovLAorCQkJCUE3MzUyQzE4MEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9jay5oICov
LAogCQkJCTg1M0NBOUNBMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIuY3Bw
ICovLAogCQkJCTg1M0NBOUNCMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIu
aCAqLywKIAkJCQk4NTNDQTlDQzBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHSW1hZ2UuY3Bw
ICovLApAQCAtOTIzNiw4ICs5MjM2LDYgQEAKIAkJCQlCQ0VBNDg0RjA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVyVGV4dEZyYWdtZW50LmggKi8sCiAJCQkJQkNFQTQ4NEEwOTdEOTMwMjAwOTRDOUU0
IC8qIFJlbmRlclRoZW1lLmNwcCAqLywKIAkJCQlCQ0VBNDg0QjA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVyVGhlbWUuaCAqLywKLQkJCQlCMkVCREM5QTBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAgKi8sCi0JCQkJQjJFQkRDOUIwQUY3N0UzNDAwQUU0QTY4IC8qIFNW
R1JlbmRlclRyZWVBc1RleHQuaCAqLywKIAkJCQlCQ0VBNDg0OTA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVyVGhlbWVNYWMubW0gKi8sCiAJCQkJQkNFQTQ4NDgwOTdEOTMwMjAwOTRDOUU0IC8qIFJl
bmRlclRoZW1lTWFjLmggKi8sCiAJCQkJOTM5NTVBNDIwM0Q3MjkzMjAwODYzNUNFIC8qIFJlbmRl
clRyZWVBc1RleHQuY3BwICovLApAQCAtOTI1MCw2ICs5MjQ4LDggQEAKIAkJCQlBOENGRjVEQTBB
MTU1QTA1MDAwQTQyMzQgLyogUm9vdElubGluZUJveC5oICovLAogCQkJCTg1M0NBOUUyMEFFRUM2
MDgwMDIzNzJEQyAvKiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLywKIAkJCQk4NTNDQTlFMzBBRUVD
NjA4MDAyMzcyREMgLyogU1ZHSW5saW5lRmxvd0JveC5oICovLAorCQkJCUIyRUJEQzlBMEFGNzdF
MzQwMEFFNEE2OCAvKiBTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCAqLywKKwkJCQlCMkVCREM5QjBB
Rjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5oICovLAogCQkJCTg1M0NBOUU0
MEFFRUM2MDgwMDIzNzJEQyAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLywKIAkJCQk4NTNDQTlF
NTBBRUVDNjA4MDAyMzcyREMgLyogU1ZHUm9vdElubGluZUJveC5oICovLAogCQkJCUE4Q0ZGMDRD
MEExNTRGMDkwMDBBNDIzNCAvKiBUYWJsZUxheW91dC5oICovLApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ291bnRlci5jcHAJKHJldmlzaW9uIDE4MjM1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lk
IFJlbmRlckNvdW50ZXI6OmNhbGNNaW5NYXhXaWR0aCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBzdHIgPSBuZXcgU3RyaW5nSW1wbChtX2l0ZW0uY2hhcmFjdGVycygpLCBtX2l0ZW0ubGVuZ3Ro
KCkpOworICAgIG1fc3RyID0gbmV3IFN0cmluZ0ltcGwobV9pdGVtLmNoYXJhY3RlcnMoKSwgbV9p
dGVtLmxlbmd0aCgpKTsKIAogICAgIFJlbmRlclRleHQ6OmNhbGNNaW5NYXhXaWR0aCgpOwogfQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDE4MjM1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDczICszMyw1
MSBAQAogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiVGV4dFN0eWxlLmgiCiAjaW5jbHVkZSAiYnJlYWtfbGluZXMuaCIKLSNpbmNsdWRlICJU
ZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbnQgUmVuZGVyVGV4
dDo6cHJldmlvdXNPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0Ci17Ci0gICAgU3RyaW5nSW1wbCAq
c2kgPSBzdHIuZ2V0KCk7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gY2hhcmFj
dGVyQnJlYWtJdGVyYXRvcihzaS0+Y2hhcmFjdGVycygpLCBzaS0+bGVuZ3RoKCkpOwotICAgIGlm
ICghaXRlcmF0b3IpCi0gICAgICAgIHJldHVybiBjdXJyZW50IC0gMTsKLQotICAgIGxvbmcgcmVz
dWx0ID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0ZXJhdG9yLCBjdXJyZW50KTsKLSAgICBpZiAocmVz
dWx0ID09IFRleHRCcmVha0RvbmUpCi0gICAgICAgIHJlc3VsdCA9IGN1cnJlbnQgLSAxOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IFJlbmRlclRleHQ6Om5leHRPZmZzZXQoaW50IGN1
cnJlbnQpIGNvbnN0Ci17Ci0gICAgU3RyaW5nSW1wbCAqc2kgPSBzdHIuZ2V0KCk7Ci0gICAgVGV4
dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihzaS0+Y2hh
cmFjdGVycygpLCBzaS0+bGVuZ3RoKCkpOwotICAgIGlmICghaXRlcmF0b3IpCi0gICAgICAgIHJl
dHVybiBjdXJyZW50ICsgMTsKLSAgICAKLSAgICBsb25nIHJlc3VsdCA9IHRleHRCcmVha0ZvbGxv
d2luZyhpdGVyYXRvciwgY3VycmVudCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBUZXh0QnJlYWtEb25l
KQotICAgICAgICByZXN1bHQgPSBjdXJyZW50ICsgMTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLVJlbmRlclRleHQ6OlJlbmRlclRleHQoTm9kZSogbm9kZSwgU3RyaW5nSW1wbCAqX3N0cikK
LSAgICAgOiBSZW5kZXJPYmplY3Qobm9kZSksIHN0cihfc3RyKSwgbV9maXJzdFRleHRCb3goMCks
IG1fbGFzdFRleHRCb3goMCkKLSAgICAgLCBtX21pbldpZHRoKC0xKSwgbV9tYXhXaWR0aCgtMSks
IG1fc2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uTm9uZSkKLSAgICAgLCBtX2xpbmVzRGlydHkoZmFs
c2UpLCBtX2NvbnRhaW5zUmV2ZXJzZWRUZXh0KGZhbHNlKQotICAgICAsIG1fYWxsQXNjaWlDaGVj
a2VkKGZhbHNlKSwgbV9hbGxBc2NpaShmYWxzZSkKK1JlbmRlclRleHQ6OlJlbmRlclRleHQoTm9k
ZSogbm9kZSwgU3RyaW5nSW1wbCogc3RyKQorICAgICA6IFJlbmRlck9iamVjdChub2RlKQorICAg
ICAsIG1fc3RyKHN0cikKKyAgICAgLCBtX2ZpcnN0VGV4dEJveCgwKQorICAgICAsIG1fbGFzdFRl
eHRCb3goMCkKKyAgICAgLCBtX21pbldpZHRoKC0xKQorICAgICAsIG1fbWF4V2lkdGgoLTEpCisg
ICAgICwgbV9zZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25Ob25lKQorICAgICAsIG1fbGluZXNEaXJ0
eShmYWxzZSkKKyAgICAgLCBtX2NvbnRhaW5zUmV2ZXJzZWRUZXh0KGZhbHNlKQorICAgICAsIG1f
YWxsQXNjaWlDaGVja2VkKGZhbHNlKQorICAgICAsIG1fYWxsQXNjaWkoZmFsc2UpCiAgICAgICwg
bV9tb25vc3BhY2VDaGFyYWN0ZXJXaWR0aCgwKQogewogICAgIHNldFJlbmRlclRleHQoKTsKLSAg
ICBpZiAoc3RyKQotICAgICAgICBzdHIgPSBzdHItPnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXND
dXJyZW5jeVN5bWJvbCgpKTsKLSAgICBBU1NFUlQoIXN0ciB8fCAhc3RyLT5sZW5ndGgoKSB8fCBz
dHItPmNoYXJhY3RlcnMoKSk7CisgICAgaWYgKG1fc3RyKQorICAgICAgICBtX3N0ciA9IG1fc3Ry
LT5yZXBsYWNlKCdcXCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CisgICAgQVNTRVJU
KCFtX3N0ciB8fCAhbV9zdHItPmxlbmd0aCgpIHx8IG1fc3RyLT5jaGFyYWN0ZXJzKCkpOwogfQog
Ci12b2lkIFJlbmRlclRleHQ6OnNldFN0eWxlKFJlbmRlclN0eWxlICpfc3R5bGUpCit2b2lkIFJl
bmRlclRleHQ6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsKLSAgICBpZiAoIHN0
eWxlKCkgIT0gX3N0eWxlICkgewotICAgICAgICBib29sIG5lZWRUb1RyYW5zZm9ybVRleHQgPSAo
IXN0eWxlKCkgJiYgX3N0eWxlLT50ZXh0VHJhbnNmb3JtKCkgIT0gVFROT05FKSB8fAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUoKSAmJiBzdHlsZSgpLT50ZXh0VHJh
bnNmb3JtKCkgIT0gX3N0eWxlLT50ZXh0VHJhbnNmb3JtKCkpOworICAgIGlmIChzdHlsZSgpICE9
IG5ld1N0eWxlKSB7CisgICAgICAgIGJvb2wgbmVlZFRvVHJhbnNmb3JtVGV4dCA9ICghc3R5bGUo
KSAmJiBuZXdTdHlsZS0+dGV4dFRyYW5zZm9ybSgpICE9IFRUTk9ORSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlKCkgJiYgc3R5bGUoKS0+dGV4dFRyYW5zZm9y
bSgpICE9IG5ld1N0eWxlLT50ZXh0VHJhbnNmb3JtKCkpOwogCi0gICAgICAgIGJvb2wgbmVlZFRv
U2VjdXJlVGV4dCA9ICghc3R5bGUoKSAmJiBfc3R5bGUtPnRleHRTZWN1cml0eSgpICE9IFRTTk9O
RSk7CisgICAgICAgIGJvb2wgbmVlZFRvU2VjdXJlVGV4dCA9ICghc3R5bGUoKSAmJiBuZXdTdHls
ZS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FKTsKIAotICAgICAgICBSZW5kZXJPYmplY3Q6OnNl
dFN0eWxlKCBfc3R5bGUgKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZShuZXdTdHls
ZSk7CiAKICAgICAgICAgaWYgKG5lZWRUb1RyYW5zZm9ybVRleHQgfHwgbmVlZFRvU2VjdXJlVGV4
dCkgewogICAgICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHRleHRUb1RyYW5zZm9ybSA9IG9y
aWdpbmFsU3RyaW5nKCk7CiAgICAgICAgICAgICBpZiAodGV4dFRvVHJhbnNmb3JtKQorICAgICAg
ICAgICAgICAgIC8vIHNldFRleHQgYWxzbyBjYWxscyBjYWNoZVdpZHRocygpLCBzbyB0aGVyZSBp
cyBubyBuZWVkIHRvIGNhbGwgaXQgYWdhaW4gaW4gdGhhdCBjYXNlLgogICAgICAgICAgICAgICAg
IHNldFRleHQodGV4dFRvVHJhbnNmb3JtLmdldCgpLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAg
ICAvLyBzZXRUZXh0IGFsc28gY2FsbHMgY2FjaGVXaWR0aHMoKSwgc28gdGhlcmUgaXMgbm8gbmVl
ZCB0byBjYWxsIGl0IGFnYWluIGluIHRoYXQgY2FzZS4KLSAgICAgICAgZWxzZQorICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIGNhY2hlV2lkdGhzKCk7CiAgICAgfQogfQpAQCAtMTE1LDggKzkz
LDcgQEAgdm9pZCBSZW5kZXJUZXh0OjpkZXN0cm95KCkKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0g
Ym94LT5uZXh0VGV4dEJveCgpKQogICAgICAgICAgICAgICAgIGJveC0+cmVtb3ZlKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAocGFyZW50KCkpCisgICAgICAgIH0gZWxzZSBpZiAocGFy
ZW50KCkpCiAgICAgICAgICAgICBwYXJlbnQoKS0+ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQo
dGhpcyk7CiAgICAgfQogICAgIGRlbGV0ZVRleHRCb3hlcygpOwpAQCAtMTQwLDggKzExNyw3IEBA
IHZvaWQgUmVuZGVyVGV4dDo6YXR0YWNoVGV4dEJveChJbmxpbmVUZXgKICAgICBpZiAobV9sYXN0
VGV4dEJveCkgewogICAgICAgICBtX2xhc3RUZXh0Qm94LT5zZXROZXh0TGluZUJveChib3gpOwog
ICAgICAgICBib3gtPnNldFByZXZpb3VzTGluZUJveChtX2xhc3RUZXh0Qm94KTsKLSAgICB9Ci0g
ICAgZWxzZQorICAgIH0gZWxzZQogICAgICAgICBtX2ZpcnN0VGV4dEJveCA9IGJveDsKICAgICBJ
bmxpbmVUZXh0Qm94KiBsYXN0ID0gYm94OwogICAgIGZvciAoSW5saW5lVGV4dEJveCogY3VyciA9
IGJveDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRUZXh0Qm94KCkpIHsKQEAgLTE3NywxMSArMTUz
LDYgQEAgdm9pZCBSZW5kZXJUZXh0OjpkZWxldGVUZXh0Qm94ZXMoKQogICAgIH0KIH0KIAotYm9v
bCBSZW5kZXJUZXh0Ojppc1RleHRGcmFnbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclRleHQ6Om9yaWdpbmFsU3RyaW5n
KCkgY29uc3QKIHsKICAgICByZXR1cm4gZWxlbWVudCgpID8gZWxlbWVudCgpLT5zdHJpbmcoKSA6
IDA7CkBAIC0yMTUsMTggKzE4NiwxNyBAQCB2b2lkIFJlbmRlclRleHQ6OmFkZExpbmVCb3hSZWN0
cyhWZWN0b3I8CiAKIElubGluZVRleHRCb3gqIFJlbmRlclRleHQ6OmZpbmROZXh0SW5saW5lVGV4
dEJveChpbnQgb2Zmc2V0LCBpbnQgJnBvcykgY29uc3QKIHsKLSAgICAvLyBUaGUgdGV4dCBydW5z
IHBvaW50IHRvIHBhcnRzIG9mIHRoZSByZW5kZXJ0ZXh0J3Mgc3RyIHN0cmluZworICAgIC8vIFRo
ZSB0ZXh0IHJ1bnMgcG9pbnQgdG8gcGFydHMgb2YgdGhlIHJlbmRlcnRleHQncyBtX3N0ciBzdHJp
bmcKICAgICAvLyAodGhleSBkb24ndCBpbmNsdWRlICdcbicpCiAgICAgLy8gRmluZCB0aGUgdGV4
dCBydW4gdGhhdCBpbmNsdWRlcyB0aGUgY2hhcmFjdGVyIGF0IEBwIG9mZnNldAogICAgIC8vIGFu
ZCByZXR1cm4gcG9zLCB3aGljaCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXIgaW4gdGhlIHJ1
bi4KIAogICAgIGlmICghbV9maXJzdFRleHRCb3gpCiAgICAgICAgIHJldHVybiAwOwotICAgIAor
CiAgICAgSW5saW5lVGV4dEJveCogcyA9IG1fZmlyc3RUZXh0Qm94OwogICAgIGludCBvZmYgPSBz
LT5tX2xlbjsKLSAgICB3aGlsZSAob2Zmc2V0ID4gb2ZmICYmIHMtPm5leHRUZXh0Qm94KCkpCi0g
ICAgeworICAgIHdoaWxlIChvZmZzZXQgPiBvZmYgJiYgcy0+bmV4dFRleHRCb3goKSkgewogICAg
ICAgICBzID0gcy0+bmV4dFRleHRCb3goKTsKICAgICAgICAgb2ZmID0gcy0+bV9zdGFydCArIHMt
Pm1fbGVuOwogICAgIH0KQEAgLTI0OCw3ICsyMTgsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
VGV4dDo6cG9zaXRpb25Gb3JDCiAKICAgICAvLyBHZXQgdGhlIG9mZnNldCBmb3IgdGhlIHBvc2l0
aW9uLCBzaW5jZSB0aGlzIHdpbGwgdGFrZSBydGwgdGV4dCBpbnRvIGFjY291bnQuCiAgICAgaW50
IG9mZnNldDsKLSAgICAKKwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byByb2xs
IHRoZXNlIHNwZWNpYWwgY2FzZXMgaW50byB0aGUgZ2VuZXJhbCBjYXNlcyBpbiB0aGUgbG9vcCBi
ZWxvdy4KICAgICBpZiAoZmlyc3RUZXh0Qm94KCkgJiYgeSA8IGFic3kgKyBmaXJzdFRleHRCb3go
KS0+cm9vdCgpLT5ib3R0b21PdmVyZmxvdygpICYmIHggPCBhYnN4ICsgZmlyc3RUZXh0Qm94KCkt
Pm1feCkgewogICAgICAgICAvLyBhdCB0aGUgeSBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBsaW5l
IG9yIGFib3ZlCkBAIC0yOTMsNTYgKzI2Myw1NiBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4
dDo6cG9zaXRpb25Gb3JDCiAgICAgICAgICAgICBsYXN0Qm94QWJvdmUgPSBib3g7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGVsZW1lbnQoKSwg
bGFzdEJveEFib3ZlID8gbGFzdEJveEFib3ZlLT5tX3N0YXJ0ICsgbGFzdEJveEFib3ZlLT5tX2xl
biA6IDAsIERPV05TVFJFQU0pOwogfQogCiAjaWYgX19HTlVDX18KLXN0YXRpYyBSZW5kZXJPYmpl
Y3QgKmZpcnN0UmVuZGVyZXJPbk5leHRMaW5lKElubGluZUJveCAqYm94KSBfX2F0dHJpYnV0ZV9f
ICgodW51c2VkKSk7CitzdGF0aWMgUmVuZGVyT2JqZWN0KiBmaXJzdFJlbmRlcmVyT25OZXh0TGlu
ZShJbmxpbmVCb3gqIGJveCkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwogI2VuZGlmCi1zdGF0
aWMgUmVuZGVyT2JqZWN0ICpmaXJzdFJlbmRlcmVyT25OZXh0TGluZShJbmxpbmVCb3ggKmJveCkK
K3N0YXRpYyBSZW5kZXJPYmplY3QqIGZpcnN0UmVuZGVyZXJPbk5leHRMaW5lKElubGluZUJveCog
Ym94KQogewogICAgIGlmICghYm94KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJvb3RJbmxp
bmVCb3ggKnJvb3QgPSBib3gtPnJvb3QoKTsKKyAgICBSb290SW5saW5lQm94KiByb290ID0gYm94
LT5yb290KCk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCisK
ICAgICBpZiAocm9vdC0+ZW5kc1dpdGhCcmVhaygpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAK
LSAgICBSb290SW5saW5lQm94ICpuZXh0Um9vdCA9IHJvb3QtPm5leHRSb290Qm94KCk7CisKKyAg
ICBSb290SW5saW5lQm94KiBuZXh0Um9vdCA9IHJvb3QtPm5leHRSb290Qm94KCk7CiAgICAgaWYg
KCFuZXh0Um9vdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgSW5saW5lQm94ICpmaXJz
dENoaWxkID0gbmV4dFJvb3QtPmZpcnN0Q2hpbGQoKTsKKworICAgIElubGluZUJveCogZmlyc3RD
aGlsZCA9IG5leHRSb290LT5maXJzdENoaWxkKCk7CiAgICAgaWYgKCFmaXJzdENoaWxkKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBmaXJzdENoaWxkLT5vYmplY3QoKTsKIH0KIAot
c3RhdGljIFJlbmRlck9iamVjdCAqbGFzdFJlbmRlcmVyT25QcmV2TGluZShJbmxpbmVCb3ggKmJv
eCkKK3N0YXRpYyBSZW5kZXJPYmplY3QqIGxhc3RSZW5kZXJlck9uUHJldkxpbmUoSW5saW5lQm94
KiBib3gpCiB7CiAgICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIFJv
b3RJbmxpbmVCb3ggKnJvb3QgPSBib3gtPnJvb3QoKTsKKworICAgIFJvb3RJbmxpbmVCb3gqIHJv
b3QgPSBib3gtPnJvb3QoKTsKICAgICBpZiAoIXJvb3QpCiAgICAgICAgIHJldHVybiAwOwotICAg
IAorCiAgICAgaWYgKHJvb3QtPmVuZHNXaXRoQnJlYWsoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgCi0gICAgUm9vdElubGluZUJveCAqcHJldlJvb3QgPSByb290LT5wcmV2Um9vdEJveCgpOwor
CisgICAgUm9vdElubGluZUJveCogcHJldlJvb3QgPSByb290LT5wcmV2Um9vdEJveCgpOwogICAg
IGlmICghcHJldlJvb3QpCiAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIElubGluZUJveCAq
bGFzdENoaWxkID0gcHJldlJvb3QtPmxhc3RDaGlsZCgpOworCisgICAgSW5saW5lQm94KiBsYXN0
Q2hpbGQgPSBwcmV2Um9vdC0+bGFzdENoaWxkKCk7CiAgICAgaWYgKCFsYXN0Q2hpbGQpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIAorCiAgICAgcmV0dXJuIGxhc3RDaGlsZC0+b2JqZWN0KCk7CiB9
CiAKQEAgLTM1MywxMSArMzIzLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhdExpbmVXcmFwKElu
bGluZVRleHQKIAogSW50UmVjdCBSZW5kZXJUZXh0OjpjYXJldFJlY3QoaW50IG9mZnNldCwgRUFm
ZmluaXR5IGFmZmluaXR5LCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKLSAgICBpZiAo
IWZpcnN0VGV4dEJveCgpIHx8IHN0cmluZ0xlbmd0aCgpID09IDApCisgICAgaWYgKCFmaXJzdFRl
eHRCb3goKSB8fCAhc3RyaW5nTGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAK
ICAgICAvLyBGaW5kIHRoZSB0ZXh0IGJveCBmb3IgdGhlIGdpdmVuIG9mZnNldAotICAgIElubGlu
ZVRleHRCb3ggKmJveCA9IDA7CisgICAgSW5saW5lVGV4dEJveCogYm94ID0gMDsKICAgICBmb3Ig
KGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewog
ICAgICAgICBpZiAoYm94LT5jb250YWluc0NhcmV0T2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAg
ICAgIC8vIENoZWNrIGlmIGRvd25zdHJlYW0gYWZmaW5pdHkgd291bGQgbWFrZSB1cyBtb3ZlIHRv
IHRoZSBuZXh0IGxpbmUuCkBAIC0zNjYsNyArMzM2LDcgQEAgSW50UmVjdCBSZW5kZXJUZXh0Ojpj
YXJldFJlY3QoaW50IG9mZnNldAogICAgICAgICAgICAgICAgIGJveCA9IGJveC0+bmV4dFRleHRC
b3goKTsKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBib3gtPm1fc3RhcnQ7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIElubGluZVRleHRCb3ggKnByZXZCb3ggPSBib3gt
PnByZXZUZXh0Qm94KCk7CisgICAgICAgICAgICAgICAgSW5saW5lVGV4dEJveCogcHJldkJveCA9
IGJveC0+cHJldlRleHRCb3goKTsKICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID09IGJveC0+
bV9zdGFydCAmJiBhZmZpbml0eSA9PSBVUFNUUkVBTSAmJiBwcmV2Qm94ICYmICFib3gtPnByZXZP
bkxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAocHJldkJveCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgYm94ID0gcHJldkJveDsKQEAgLTM4MSwxMCArMzUxLDkgQEAgSW50UmVj
dCBSZW5kZXJUZXh0OjpjYXJldFJlY3QoaW50IG9mZnNldAogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgaWYgKCFib3gpIHsKKworICAgIGlmICghYm94KQog
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIH0KIAogICAgIGludCBoZWlnaHQgPSBib3gt
PnJvb3QoKS0+Ym90dG9tT3ZlcmZsb3coKSAtIGJveC0+cm9vdCgpLT50b3BPdmVyZmxvdygpOwog
ICAgIGludCB0b3AgPSBib3gtPnJvb3QoKS0+dG9wT3ZlcmZsb3coKTsKQEAgLTQwMiw3ICszNzEs
NyBAQCBJbnRSZWN0IFJlbmRlclRleHQ6OmNhcmV0UmVjdChpbnQgb2Zmc2V0CiAgICAgbGVmdCAr
PSBhYnN4OwogICAgIHRvcCArPSBhYnN5OwogCi0gICAgUmVuZGVyQmxvY2sgKmNiID0gY29udGFp
bmluZ0Jsb2NrKCk7CisgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7CiAg
ICAgaWYgKHN0eWxlKCktPmF1dG9XcmFwKCkpIHsKICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRo
ID0gY2ItPmxpbmVXaWR0aCh0b3ApOwogICAgICAgICBpZiAoIWJveC0+bV9yZXZlcnNlZCkKQEAg
LTQxMCwxMSArMzc5LDExIEBAIEludFJlY3QgUmVuZGVyVGV4dDo6Y2FyZXRSZWN0KGludCBvZmZz
ZXQKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbGVmdCA9IG1heChsZWZ0LCBhYnN4ICsgcm9v
dExlZnQpOwogICAgIH0KLSAgICAgCisKICAgICByZXR1cm4gSW50UmVjdChsZWZ0LCB0b3AsIDEs
IGhlaWdodCk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6cG9zT2ZDaGFyKGludCBjaHIsIGludCAm
eCwgaW50ICZ5KQordm9pZCBSZW5kZXJUZXh0Ojpwb3NPZkNoYXIoaW50IGNociwgaW50JiB4LCBp
bnQmIHkpCiB7CiAgICAgYWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoeCwgeSk7CiAKQEAgLTQz
MSwyMCArNDAwLDIxIEBAIGJvb2wgUmVuZGVyVGV4dDo6YWxsQXNjaWkoKSBjb25zdAogICAgIGlm
IChtX2FsbEFzY2lpQ2hlY2tlZCkKICAgICAgICAgcmV0dXJuIG1fYWxsQXNjaWk7CiAgICAgbV9h
bGxBc2NpaUNoZWNrZWQgPSB0cnVlOwotICAgIAorCiAgICAgdW5zaWduZWQgaTsKLSAgICBmb3Ig
KGkgPSAwOyBpIDwgc3RyLT5sZW5ndGgoKTsgaSsrKQotICAgICAgICBpZiAoKCpzdHIpW2ldID4g
MHg3ZikgeworICAgIGZvciAoaSA9IDA7IGkgPCBtX3N0ci0+bGVuZ3RoKCk7IGkrKykgeworICAg
ICAgICBpZiAoKCptX3N0cilbaV0gPiAweDdmKSB7CiAgICAgICAgICAgICBtX2FsbEFzY2lpID0g
ZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gbV9hbGxBc2NpaTsKICAgICAgICAgfQotICAgIAor
ICAgIH0KKwogICAgIG1fYWxsQXNjaWkgPSB0cnVlOwotICAgIAorCiAgICAgcmV0dXJuIG1fYWxs
QXNjaWk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dDo6c2hvdWxkVXNlTW9ub3NwYWNlQ2FjaGUoY29u
c3QgRm9udCAqZikgY29uc3QKK2Jvb2wgUmVuZGVyVGV4dDo6c2hvdWxkVXNlTW9ub3NwYWNlQ2Fj
aGUoY29uc3QgRm9udCogZikgY29uc3QKIHsKICAgICByZXR1cm4gKGYgJiYgZi0+aXNGaXhlZFBp
dGNoKCkgJiYgYWxsQXNjaWkoKSAmJiAhc3R5bGUoKS0+Zm9udCgpLmlzU21hbGxDYXBzKCkpOwog
fQpAQCAtNDU4LDM2ICs0MjgsMzYgQEAgdm9pZCBSZW5kZXJUZXh0OjpjYWNoZVdpZHRocygpCiAg
ICAgaWYgKHNob3VsZFVzZU1vbm9zcGFjZUNhY2hlKGYpKSB7CiAgICAgICAgIGNvbnN0IFVDaGFy
IGMgPSAnICc7CiAgICAgICAgIG1fbW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGggPSBmLT53aWR0aChU
ZXh0UnVuKCZjLCAxKSk7Ci0gICAgfSBlbHNlIHsKKyAgICB9IGVsc2UKICAgICAgICAgbV9tb25v
c3BhY2VDaGFyYWN0ZXJXaWR0aCA9IDA7Ci0gICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGludCBS
ZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250KiBmLCBpbnQgc3RhcnQsIGludCBs
ZW4sIGludCB0YWJXaWR0aCwgaW50IHhwb3MpIGNvbnN0CitBTFdBWVNfSU5MSU5FIGludCBSZW5k
ZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250KiBmLCBpbnQgc3RhcnQsIGludCBsZW4s
IGludCB0YWJXaWR0aCwgaW50IHhQb3MpIGNvbnN0CiB7Ci0gICAgaWYgKG1fbW9ub3NwYWNlQ2hh
cmFjdGVyV2lkdGggIT0gMCkgewotICAgICAgICBpbnQgaSwgdyA9IDA7Ci0gICAgICAgIGZvciAo
aSA9IHN0YXJ0OyBpIDwgc3RhcnQrbGVuOyBpKyspIHsKLSAgICAgICAgICAgIFVDaGFyIGMgPSAo
KnN0cilbaV07CisgICAgaWYgKG1fbW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGgpIHsKKyAgICAgICAg
aW50IGk7CisgICAgICAgIGludCB3ID0gMDsKKyAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBz
dGFydCArIGxlbjsgaSsrKSB7CisgICAgICAgICAgICBVQ2hhciBjID0gKCptX3N0cilbaV07CiAg
ICAgICAgICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBkaXIgPSBXVEY6OlVuaWNvZGU6OmRp
cmVjdGlvbihjKTsKICAgICAgICAgICAgIGlmIChkaXIgIT0gV1RGOjpVbmljb2RlOjpOb25TcGFj
aW5nTWFyayAmJiBkaXIgIT0gV1RGOjpVbmljb2RlOjpCb3VuZGFyeU5ldXRyYWwpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYyA9PSAnXHQnICYmIHRhYldpZHRoICE9IDApCi0gICAgICAgICAgICAg
ICAgICAgIHcgKz0gdGFiV2lkdGggLSAoKHhwb3MgKyB3KSAlIHRhYldpZHRoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYyA9PSAnXHQnICYmIHRhYldpZHRoKQorICAgICAgICAgICAgICAgICAgICB3
ICs9IHRhYldpZHRoIC0gKCh4UG9zICsgdykgJSB0YWJXaWR0aCk7CiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICB3ICs9IG1fbW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGg7
Ci0gICAgICAgICAgICAgICAgaWYgKERlcHJlY2F0ZWRDaGFyKGMpLmlzU3BhY2UoKSAmJiBpID4g
c3RhcnQgJiYgIURlcHJlY2F0ZWRDaGFyKCgqc3RyKVtpIC0gMV0pLmlzU3BhY2UoKSkKLSAgICAg
ICAgICAgICAgICAgICAgdyArPSBmLT53b3JkU3BhY2luZygpOyAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKERlcHJlY2F0ZWRDaGFyKGMpLmlzU3BhY2UoKSAmJiBpID4gc3RhcnQgJiYgIURl
cHJlY2F0ZWRDaGFyKCgqbV9zdHIpW2kgLSAxXSkuaXNTcGFjZSgpKQorICAgICAgICAgICAgICAg
ICAgICB3ICs9IGYtPndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICByZXR1cm4gdzsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGYtPndpZHRoKFRleHRS
dW4oc3RyaW5nKCksIHN0YXJ0LCBsZW4sIDApLCBUZXh0U3R5bGUodGFiV2lkdGgsIHhwb3MpKTsK
KworICAgIHJldHVybiBmLT53aWR0aChUZXh0UnVuKHN0cmluZygpLCBzdGFydCwgbGVuLCAwKSwg
VGV4dFN0eWxlKHRhYldpZHRoLCB4UG9zKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1l
ZE1pbk1heFdpZHRoKGludCBsZWFkV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQmIGJlZ2luTWluVywgYm9vbCYgYmVnaW5XUywgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQmIGJlZ2luTWluVywgYm9vbCYgYmVnaW5XUywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgZW5kTWluVywgYm9vbCYgZW5kV1Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBoYXNCcmVha2FibGVD
aGFyLCBib29sJiBoYXNCcmVhaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCYgYmVnaW5NYXhXLCBpbnQmIGVuZE1heFcsCkBAIC00OTYsNTQgKzQ2Niw1MiBAQCB2b2lk
IFJlbmRlclRleHQ6OnRyaW1tZWRNaW5NYXhXaWR0aChpbnQgCiAgICAgYm9vbCBjb2xsYXBzZVdo
aXRlU3BhY2UgPSBzdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKICAgICBpZiAoIWNvbGxh
cHNlV2hpdGVTcGFjZSkKICAgICAgICAgc3RyaXBGcm9udFNwYWNlcyA9IGZhbHNlOwotICAgIAot
ICAgIGludCBsZW4gPSBzdHItPmxlbmd0aCgpOwotICAgIGlmIChsZW4gPT0gMCB8fCAoc3RyaXBG
cm9udFNwYWNlcyAmJiBzdHItPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkpIHsKKworICAgIGlu
dCBsZW4gPSBtX3N0ci0+bGVuZ3RoKCk7CisgICAgaWYgKCFsZW4gfHwgKHN0cmlwRnJvbnRTcGFj
ZXMgJiYgbV9zdHItPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkpIHsKICAgICAgICAgbWF4VyA9
IDA7CiAgICAgICAgIGhhc0JyZWFrID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgCi0gICAgLy8gaWYgdGhlIHRleHQgaGFzIGEgdmFyaWFibGUgd2lkdGggdGFiLCB3ZSBuZWVk
IHRvIGNhbGwgCisKKyAgICAvLyBpZiB0aGUgdGV4dCBoYXMgYSB2YXJpYWJsZSB3aWR0aCB0YWIs
IHdlIG5lZWQgdG8gY2FsbAogICAgIGlmIChtX2hhc1RhYikKICAgICAgICAgY2FsY01pbk1heFdp
ZHRoKGxlYWRXaWR0aCk7Ci0gICAgCisKICAgICBtaW5XID0gbV9taW5XaWR0aDsKICAgICBtYXhX
ID0gbV9tYXhXaWR0aDsKICAgICBiZWdpbldTID0gIXN0cmlwRnJvbnRTcGFjZXMgJiYgbV9oYXNC
ZWdpbldTOwogICAgIGVuZFdTID0gbV9oYXNFbmRXUzsKLSAgICAKKwogICAgIGJlZ2luTWluVyA9
IG1fYmVnaW5NaW5XaWR0aDsKICAgICBlbmRNaW5XID0gbV9lbmRNaW5XaWR0aDsKLSAgICAKKwog
ICAgIGhhc0JyZWFrYWJsZUNoYXIgPSBtX2hhc0JyZWFrYWJsZUNoYXI7CiAgICAgaGFzQnJlYWsg
PSBtX2hhc0JyZWFrOwogCi0gICAgaWYgKHN0cmlwRnJvbnRTcGFjZXMgJiYgKCgqc3RyKVswXSA9
PSAnICcgfHwgKCgqc3RyKVswXSA9PSAnXG4nICYmICFzdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUo
KSkgfHwgKCpzdHIpWzBdID09ICdcdCcpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQgKmYgPSBmb250
KGZhbHNlKTsgLy8gRklYTUU6IFdoeSBpcyBpdCBvayB0byBpZ25vcmUgZmlyc3QtbGluZSBoZXJl
PworICAgIGlmIChzdHJpcEZyb250U3BhY2VzICYmICgoKm1fc3RyKVswXSA9PSAnICcgfHwgKCgq
bV9zdHIpWzBdID09ICdcbicgJiYgIXN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSB8fCAoKm1f
c3RyKVswXSA9PSAnXHQnKSkgeworICAgICAgICBjb25zdCBGb250KiBmID0gZm9udChmYWxzZSk7
IC8vIEZJWE1FOiBXaHkgaXMgaXQgb2sgdG8gaWdub3JlIGZpcnN0LWxpbmUgaGVyZT8KICAgICAg
ICAgY29uc3QgVUNoYXIgc3BhY2UgPSAnICc7CiAgICAgICAgIGludCBzcGFjZVdpZHRoID0gZi0+
d2lkdGgoVGV4dFJ1bigmc3BhY2UsIDEpKTsKICAgICAgICAgbWF4VyAtPSBzcGFjZVdpZHRoICsg
Zi0+d29yZFNwYWNpbmcoKTsKICAgICB9Ci0gICAgCisKICAgICBzdHJpcEZyb250U3BhY2VzID0g
Y29sbGFwc2VXaGl0ZVNwYWNlICYmIG1faGFzRW5kV1M7Ci0gICAgCisKICAgICBpZiAoIXN0eWxl
KCktPmF1dG9XcmFwKCkgfHwgbWluVyA+IG1heFcpCiAgICAgICAgIG1pblcgPSBtYXhXOwogCiAg
ICAgLy8gQ29tcHV0ZSBvdXIgbWF4IHdpZHRocyBieSBzY2FubmluZyB0aGUgc3RyaW5nIGZvciBu
ZXdsaW5lcy4KICAgICBpZiAoaGFzQnJlYWspIHsKLSAgICAgICAgY29uc3QgRm9udCAqZiA9IGZv
bnQoZmFsc2UpOworICAgICAgICBjb25zdCBGb250KiBmID0gZm9udChmYWxzZSk7CiAgICAgICAg
IGJvb2wgZmlyc3RMaW5lID0gdHJ1ZTsKICAgICAgICAgYmVnaW5NYXhXID0gZW5kTWF4VyA9IG1h
eFc7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIHsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgaW50IGxp
bmVsZW4gPSAwOwotICAgICAgICAgICAgd2hpbGUgKGkrbGluZWxlbiA8IGxlbiAmJiAoKnN0cilb
aStsaW5lbGVuXSAhPSAnXG4nKQorICAgICAgICAgICAgd2hpbGUgKGkrbGluZWxlbiA8IGxlbiAm
JiAoKm1fc3RyKVtpICsgbGluZWxlbl0gIT0gJ1xuJykKICAgICAgICAgICAgICAgICBsaW5lbGVu
Kys7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobGluZWxlbikKLSAgICAgICAg
ICAgIHsKKworICAgICAgICAgICAgaWYgKGxpbmVsZW4pIHsKICAgICAgICAgICAgICAgICBlbmRN
YXhXID0gd2lkdGhGcm9tQ2FjaGUoZiwgaSwgbGluZWxlbiwgdGFiV2lkdGgoKSwgbGVhZFdpZHRo
ICsgZW5kTWF4Vyk7CiAgICAgICAgICAgICAgICAgaWYgKGZpcnN0TGluZSkgewogICAgICAgICAg
ICAgICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKQEAgLTU1MSwxNCArNTE5LDEzIEBAIHZvaWQg
UmVuZGVyVGV4dDo6dHJpbW1lZE1pbk1heFdpZHRoKGludCAKICAgICAgICAgICAgICAgICAgICAg
YmVnaW5NYXhXID0gZW5kTWF4VzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aSArPSBsaW5lbGVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RM
aW5lKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0TGluZSkgewogICAgICAgICAgICAg
ICAgIGJlZ2luTWF4VyA9IDA7CiAgICAgICAgICAgICAgICAgZmlyc3RMaW5lID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgbGVhZFdpZHRoID0gMDsKICAgICAgICAgICAgIH0KLSAgICAKLSAgICAg
ICAgICAgIGlmIChpID09IGxlbi0xKQorCisgICAgICAgICAgICBpZiAoaSA9PSBsZW4gLSAxKQog
ICAgICAgICAgICAgICAgIC8vIEEgPHByZT4gcnVuIHRoYXQgZW5kcyB3aXRoIGEgbmV3bGluZSwg
YXMgaW4sIGUuZy4sCiAgICAgICAgICAgICAgICAgLy8gPHByZT5Tb21lIHRleHRcblxuPHNwYW4+
TW9yZSB0ZXh0PC9wcmU+CiAgICAgICAgICAgICAgICAgZW5kTWF4VyA9IDA7CkBAIC01NzAsMzMg
KzUzNywzNSBAQCB2b2lkIFJlbmRlclRleHQ6OmNhbGNNaW5NYXhXaWR0aCgpCiB7CiAgICAgLy8g
VXNlIDAgZm9yIHRoZSBsZWFkV2lkdGguICAgSWYgdGhlIHRleHQgY29udGFpbnMgYSB2YXJpYWJs
ZSB3aWR0aCB0YWIsIHRoZSByZWFsIHdpZHRoCiAgICAgLy8gd2lsbCBnZXQgbWVhc3VyZWQgd2hl
biB0cmltbWVkTWluTWF4V2lkdGggY2FsbHMgYWdhaW4gd2l0aCB0aGUgcmVhbCBsZWFkV2lkdGgu
Ci0gICAgQVNTRVJUKCAhbWluTWF4S25vd24oKSApOworICAgIEFTU0VSVCghbWluTWF4S25vd24o
KSk7CiAgICAgY2FsY01pbk1heFdpZHRoKDApOwogfQogCi1pbmxpbmUgYm9vbCBpc1NwYWNlQWNj
b3JkaW5nVG9TdHlsZShVQ2hhciBjLCBSZW5kZXJTdHlsZSogc3R5bGUpIAoraW5saW5lIGJvb2wg
aXNTcGFjZUFjY29yZGluZ1RvU3R5bGUoVUNoYXIgYywgUmVuZGVyU3R5bGUqIHN0eWxlKQogewog
ICAgIHJldHVybiBjID09ICcgJyB8fCAoYyA9PSAweGEwICYmIHN0eWxlLT5uYnNwTW9kZSgpID09
IFNQQUNFKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgoaW50IGxlYWRX
aWR0aCkKIHsKLSAgICAvLyAjIyMgY2FsYyBNaW4gYW5kIE1heCB3aWR0aC4uLgotICAgIG1fbWlu
V2lkdGggPSBtX2JlZ2luTWluV2lkdGggPSBtX2VuZE1pbldpZHRoID0gMDsKKyAgICAvLyBGSVhN
RTogY2FsYyBNaW4gYW5kIE1heCB3aWR0aC4uLgorICAgIG1fbWluV2lkdGggPSAwOworICAgIG1f
YmVnaW5NaW5XaWR0aCA9IDA7CisgICAgbV9lbmRNaW5XaWR0aCA9IDA7CiAgICAgbV9tYXhXaWR0
aCA9IDA7CiAKICAgICBpZiAoaXNCUigpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAg
ICAgaW50IGN1cnJNaW5XaWR0aCA9IDA7CiAgICAgaW50IGN1cnJNYXhXaWR0aCA9IDA7CiAgICAg
bV9oYXNCcmVha2FibGVDaGFyID0gbV9oYXNCcmVhayA9IG1faGFzVGFiID0gbV9oYXNCZWdpbldT
ID0gbV9oYXNFbmRXUyA9IGZhbHNlOwotICAgIAorCiAgICAgLy8gRklYTUU6IG5vdCAxMDAlIGNv
cnJlY3QgZm9yIGZpcnN0LWxpbmUKICAgICBjb25zdCBGb250KiBmID0gZm9udChmYWxzZSk7CiAg
ICAgaW50IHdvcmRTcGFjaW5nID0gc3R5bGUoKS0+d29yZFNwYWNpbmcoKTsKLSAgICBpbnQgbGVu
ID0gc3RyLT5sZW5ndGgoKTsKLSAgICBjb25zdCBVQ2hhciogdHh0ID0gc3RyLT5jaGFyYWN0ZXJz
KCk7CisgICAgaW50IGxlbiA9IG1fc3RyLT5sZW5ndGgoKTsKKyAgICBjb25zdCBVQ2hhciogdHh0
ID0gbV9zdHItPmNoYXJhY3RlcnMoKTsKICAgICBib29sIG5lZWRzV29yZFNwYWNpbmcgPSBmYWxz
ZTsKICAgICBib29sIGlnbm9yaW5nU3BhY2VzID0gZmFsc2U7CiAgICAgYm9vbCBpc1NwYWNlID0g
ZmFsc2U7CkBAIC02MDQsMTIgKzU3MywxMiBAQCB2b2lkIFJlbmRlclRleHQ6OmNhbGNNaW5NYXhX
aWR0aChpbnQgbGVhCiAgICAgYm9vbCBmaXJzdExpbmUgPSB0cnVlOwogICAgIGludCBuZXh0QnJl
YWthYmxlID0gLTE7CiAgICAgYm9vbCBicmVha05CU1AgPSBzdHlsZSgpLT5hdXRvV3JhcCgpICYm
IHN0eWxlKCktPm5ic3BNb2RlKCkgPT0gU1BBQ0U7Ci0gICAgCisKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgIFVDaGFyIGMgPSB0eHRbaV07Ci0gICAgICAgIAor
CiAgICAgICAgIGJvb2wgcHJldmlvdXNDaGFyYWN0ZXJJc1NwYWNlID0gaXNTcGFjZTsKLSAgICAg
ICAgCisKICAgICAgICAgYm9vbCBpc05ld2xpbmUgPSBmYWxzZTsKICAgICAgICAgaWYgKGMgPT0g
J1xuJykgewogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSB7CkBA
IC02MjQsMjYgKzU5MywyNCBAQCB2b2lkIFJlbmRlclRleHQ6OmNhbGNNaW5NYXhXaWR0aChpbnQg
bGVhCiAgICAgICAgICAgICAgICAgaXNTcGFjZSA9IGZhbHNlOwogICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgaXNTcGFjZSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7CisgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgaXNTcGFjZSA9IGMgPT0gJyAnOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAoKGlzU3BhY2UgfHwgaXNOZXdsaW5lKSAmJiBpID09IDApCisK
KyAgICAgICAgaWYgKChpc1NwYWNlIHx8IGlzTmV3bGluZSkgJiYgIWkpCiAgICAgICAgICAgICBt
X2hhc0JlZ2luV1MgPSB0cnVlOwotICAgICAgICBpZiAoKGlzU3BhY2UgfHwgaXNOZXdsaW5lKSAm
JiBpID09IGxlbi0xKQorICAgICAgICBpZiAoKGlzU3BhY2UgfHwgaXNOZXdsaW5lKSAmJiBpID09
IGxlbiAtIDEpCiAgICAgICAgICAgICBtX2hhc0VuZFdTID0gdHJ1ZTsKLSAgICAgICAgICAgIAor
CiAgICAgICAgIGlmICghaWdub3JpbmdTcGFjZXMgJiYgc3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNw
YWNlKCkgJiYgcHJldmlvdXNDaGFyYWN0ZXJJc1NwYWNlICYmIGlzU3BhY2UpCiAgICAgICAgICAg
ICBpZ25vcmluZ1NwYWNlcyA9IHRydWU7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChpZ25vcmlu
Z1NwYWNlcyAmJiAhaXNTcGFjZSkKICAgICAgICAgICAgIGlnbm9yaW5nU3BhY2VzID0gZmFsc2U7
Ci0gICAgICAgIAorCiAgICAgICAgIC8vIElnbm9yZSBzcGFjZXMgYW5kIHNvZnQgaHlwaGVucwot
ICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMgfHwgYyA9PSBTT0ZUX0hZUEhFTikgeworICAgICAg
ICBpZiAoaWdub3JpbmdTcGFjZXMgfHwgYyA9PSBTT0ZUX0hZUEhFTikKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2wgaGFzQnJlYWsgPSBp
c0JyZWFrYWJsZSh0eHQsIGksIGxlbiwgbmV4dEJyZWFrYWJsZSwgYnJlYWtOQlNQKTsKICAgICAg
ICAgaW50IGogPSBpOwogICAgICAgICB3aGlsZSAoYyAhPSAnXG4nICYmICFpc1NwYWNlQWNjb3Jk
aW5nVG9TdHlsZShjLCBzdHlsZSgpKSAmJiBjICE9ICdcdCcgJiYgYyAhPSBTT0ZUX0hZUEhFTikg
ewpAQCAtNjU0LDE4ICs2MjEsMTggQEAgdm9pZCBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgo
aW50IGxlYQogICAgICAgICAgICAgaWYgKGlzQnJlYWthYmxlKHR4dCwgaiwgbGVuLCBuZXh0QnJl
YWthYmxlLCBicmVha05CU1ApKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgICAgICAKKwogICAgICAgICBpbnQgd29yZGxlbiA9IGogLSBpOwogICAgICAgICBpZiAo
d29yZGxlbikgewogICAgICAgICAgICAgaW50IHcgPSB3aWR0aEZyb21DYWNoZShmLCBpLCB3b3Jk
bGVuLCB0YWJXaWR0aCgpLCBsZWFkV2lkdGggKyBjdXJyTWF4V2lkdGgpOwogICAgICAgICAgICAg
Y3Vyck1pbldpZHRoICs9IHc7CiAgICAgICAgICAgICBjdXJyTWF4V2lkdGggKz0gdzsKLSAgICAg
ICAgICAgIAorCiAgICAgICAgICAgICBib29sIGlzU3BhY2UgPSAoaiA8IGxlbikgJiYgaXNTcGFj
ZUFjY29yZGluZ1RvU3R5bGUoYywgc3R5bGUoKSk7CiAgICAgICAgICAgICBib29sIGlzQ29sbGFw
c2libGVXaGl0ZVNwYWNlID0gKGogPCBsZW4pICYmIHN0eWxlKCktPmlzQ29sbGFwc2libGVXaGl0
ZVNwYWNlKGMpOwogICAgICAgICAgICAgaWYgKGogPCBsZW4gJiYgc3R5bGUoKS0+YXV0b1dyYXAo
KSkKICAgICAgICAgICAgICAgICBtX2hhc0JyZWFrYWJsZUNoYXIgPSB0cnVlOwotICAgICAgICAg
ICAgCisKICAgICAgICAgICAgIC8vIEFkZCBpbiB3b3JkU3BhY2luZyB0byBvdXIgY3Vyck1heFdp
ZHRoLCBidXQgbm90IGlmIHRoaXMgaXMgdGhlIGxhc3Qgd29yZCBvbiBhIGxpbmUgb3IgdGhlCiAg
ICAgICAgICAgICAvLyBsYXN0IHdvcmQgaW4gdGhlIHJ1bi4KICAgICAgICAgICAgIGlmICh3b3Jk
U3BhY2luZyAmJiAoaXNTcGFjZSB8fCBpc0NvbGxhcHNpYmxlV2hpdGVTcGFjZSkgJiYgIWNvbnRh
aW5zT25seVdoaXRlc3BhY2UoaiwgbGVuLWopKQpAQCAtNjgxLDQ1ICs2NDgsNDUgQEAgdm9pZCBS
ZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgoaW50IGxlYQogICAgICAgICAgICAgICAgIG1fYmVn
aW5NaW5XaWR0aCA9IGhhc0JyZWFrID8gMCA6IHc7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBtX2VuZE1pbldpZHRoID0gdzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGN1cnJN
aW5XaWR0aCA+IG1fbWluV2lkdGgpIG1fbWluV2lkdGggPSBjdXJyTWluV2lkdGg7CisKKyAgICAg
ICAgICAgIGlmIChjdXJyTWluV2lkdGggPiBtX21pbldpZHRoKQorICAgICAgICAgICAgICAgIG1f
bWluV2lkdGggPSBjdXJyTWluV2lkdGg7CiAgICAgICAgICAgICBjdXJyTWluV2lkdGggPSAwOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpICs9IHdvcmRsZW4tMTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIHsKKworICAgICAgICAgICAgaSArPSB3b3JkbGVuIC0gMTsKKyAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIE5vd3JhcCBjYW4gbmV2ZXIgYmUgYnJva2VuLCBzbyBkb24n
dCBib3RoZXIgc2V0dGluZyB0aGUKLSAgICAgICAgICAgIC8vIGJyZWFrYWJsZSBjaGFyYWN0ZXIg
Ym9vbGVhbi4gUHJlIGNhbiBvbmx5IGJlIGJyb2tlbiBpZiB3ZSBlbmNvdW50ZXIgYSBuZXdsaW5l
LiAgICAgCisgICAgICAgICAgICAvLyBicmVha2FibGUgY2hhcmFjdGVyIGJvb2xlYW4uIFByZSBj
YW4gb25seSBiZSBicm9rZW4gaWYgd2UgZW5jb3VudGVyIGEgbmV3bGluZS4KICAgICAgICAgICAg
IGlmIChzdHlsZSgpLT5hdXRvV3JhcCgpIHx8IGlzTmV3bGluZSkKICAgICAgICAgICAgICAgICBt
X2hhc0JyZWFrYWJsZUNoYXIgPSB0cnVlOwogCi0gICAgICAgICAgICBpZiAoY3Vyck1pbldpZHRo
ID4gbV9taW5XaWR0aCkgbV9taW5XaWR0aCA9IGN1cnJNaW5XaWR0aDsKKyAgICAgICAgICAgIGlm
IChjdXJyTWluV2lkdGggPiBtX21pbldpZHRoKQorICAgICAgICAgICAgICAgIG1fbWluV2lkdGgg
PSBjdXJyTWluV2lkdGg7CiAgICAgICAgICAgICBjdXJyTWluV2lkdGggPSAwOwotICAgICAgICAg
ICAgCisKICAgICAgICAgICAgIGlmIChpc05ld2xpbmUpIHsgLy8gT25seSBzZXQgaWYgcHJlc2Vy
dmVOZXdsaW5lIHdhcyB0cnVlIGFuZCB3ZSBzYXcgYSBuZXdsaW5lLgogICAgICAgICAgICAgICAg
IGlmIChmaXJzdExpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RMaW5lID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgIGxlYWRXaWR0aCA9IDA7CiAgICAgICAgICAgICAgICAgICAg
IG1fYmVnaW5NaW5XaWR0aCA9IGN1cnJNYXhXaWR0aDsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGN1cnJNYXhXaWR0aCA+IG1fbWF4V2lk
dGgpIG1fbWF4V2lkdGggPSBjdXJyTWF4V2lkdGg7CisKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
ck1heFdpZHRoID4gbV9tYXhXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgbV9tYXhXaWR0aCA9
IGN1cnJNYXhXaWR0aDsKICAgICAgICAgICAgICAgICBjdXJyTWF4V2lkdGggPSAwOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgeworICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBjdXJyTWF4V2lkdGggKz0gZi0+d2lkdGgoVGV4dFJ1bih0
eHQgKyBpLCAxKSwgVGV4dFN0eWxlKHRhYldpZHRoKCksIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0
aCkpOwotICAgICAgICAgICAgICAgIG5lZWRzV29yZFNwYWNpbmcgPSBpc1NwYWNlICYmICFwcmV2
aW91c0NoYXJhY3RlcklzU3BhY2UgJiYgaSA9PSBsZW4tMTsKKyAgICAgICAgICAgICAgICBuZWVk
c1dvcmRTcGFjaW5nID0gaXNTcGFjZSAmJiAhcHJldmlvdXNDaGFyYWN0ZXJJc1NwYWNlICYmIGkg
PT0gbGVuIC0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChu
ZWVkc1dvcmRTcGFjaW5nICYmIGxlbiA+IDEpIAorICAgIGlmIChuZWVkc1dvcmRTcGFjaW5nICYm
IGxlbiA+IDEpCiAgICAgICAgIGN1cnJNYXhXaWR0aCArPSB3b3JkU3BhY2luZzsKLSAgICAKKwog
ICAgIG1fbWluV2lkdGggPSBtYXgoY3Vyck1pbldpZHRoLCBtX21pbldpZHRoKTsKICAgICBtX21h
eFdpZHRoID0gbWF4KGN1cnJNYXhXaWR0aCwgbV9tYXhXaWR0aCk7Ci0gICAgICAgIAorCiAgICAg
aWYgKCFzdHlsZSgpLT5hdXRvV3JhcCgpKQogICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0
aDsKIApAQCAtNzMwLDI2ICs2OTcsMjggQEAgdm9pZCBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lk
dGgoaW50IGxlYQogICAgICAgICAgICAgbV9iZWdpbk1pbldpZHRoID0gbV9tYXhXaWR0aDsKICAg
ICAgICAgbV9lbmRNaW5XaWR0aCA9IGN1cnJNYXhXaWR0aDsKICAgICB9Ci0gICAgCisKICAgICBz
ZXRNaW5NYXhLbm93bigpOwotICAgIC8va2REZWJ1ZyggNjA0MCApIDw8ICJUZXh0OjpjYWxjTWlu
TWF4V2lkdGgoKTogbWluID0gIiA8PCBtX21pbldpZHRoIDw8ICIgbWF4ID0gIiA8PCBtX21heFdp
ZHRoIDw8IGVuZGw7CiB9CiAKIGJvb2wgUmVuZGVyVGV4dDo6Y29udGFpbnNPbmx5V2hpdGVzcGFj
ZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgY3Vy
clBvczsKLSAgICBmb3IgKGN1cnJQb3MgPSBmcm9tOyAKLSAgICAgICAgIGN1cnJQb3MgPCBmcm9t
K2xlbiAmJiAoKCpzdHIpW2N1cnJQb3NdID09ICdcbicgfHwgKCpzdHIpW2N1cnJQb3NdID09ICcg
JyB8fCAoKnN0cilbY3VyclBvc10gPT0gJ1x0Jyk7IAorICAgIGZvciAoY3VyclBvcyA9IGZyb207
CisgICAgICAgICBjdXJyUG9zIDwgZnJvbStsZW4gJiYgKCgqbV9zdHIpW2N1cnJQb3NdID09ICdc
bicgfHwgKCptX3N0cilbY3VyclBvc10gPT0gJyAnIHx8ICgqbV9zdHIpW2N1cnJQb3NdID09ICdc
dCcpOwogICAgICAgICAgY3VyclBvcysrKTsKICAgICByZXR1cm4gY3VyclBvcyA+PSAoZnJvbSts
ZW4pOwogfQogCiBpbnQgUmVuZGVyVGV4dDo6bWluWFBvcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2ZpcnN0VGV4dEJveCkgcmV0dXJuIDA7Ci0gICAgaW50IHJldHZhbD02NjY2NjY2OworICAgIGlm
ICghbV9maXJzdFRleHRCb3gpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IHdl
IHNob3VsZCBub3QgdXNlIGEgcmFuZG9tIHZhbHVlIGxpa2UgdGhpcy4KKyAgICBpbnQgcmV0dmFs
ID0gNjY2NjY2NjsKICAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgp
OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkKLSAgICAgICAgcmV0dmFsID0gbWluKHJl
dHZhbCwgKGludClib3gtPm1feCk7CisgICAgICAgIHJldHZhbCA9IG1pbihyZXR2YWwsIHN0YXRp
Y19jYXN0PGludD4oYm94LT5tX3gpKTsKICAgICByZXR1cm4gcmV0dmFsOwogfQogCkBAIC03Njgs
MjQgKzczNywyMyBAQCBjb25zdCBGb250JiBSZW5kZXJUZXh0Ojpmb250KCkKICAgICByZXR1cm4g
c3R5bGUoKS0+Zm9udCgpOwogfQogCi12b2lkIFJlbmRlclRleHQ6OnNldFNlbGVjdGlvblN0YXRl
KFNlbGVjdGlvblN0YXRlIHMpCit2b2lkIFJlbmRlclRleHQ6OnNldFNlbGVjdGlvblN0YXRlKFNl
bGVjdGlvblN0YXRlIHN0YXRlKQogewogICAgIElubGluZVRleHRCb3gqIGJveDsKLSAgICAKLSAg
ICBtX3NlbGVjdGlvblN0YXRlID0gczsKLSAgICBpZiAocyA9PSBTZWxlY3Rpb25TdGFydCB8fCBz
ID09IFNlbGVjdGlvbkVuZCB8fCBzID09IFNlbGVjdGlvbkJvdGgpIHsKKworICAgIG1fc2VsZWN0
aW9uU3RhdGUgPSBzdGF0ZTsKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uU3RhcnQgfHwgc3Rh
dGUgPT0gU2VsZWN0aW9uRW5kIHx8IHN0YXRlID09IFNlbGVjdGlvbkJvdGgpIHsKICAgICAgICAg
aW50IHN0YXJ0UG9zLCBlbmRQb3M7CiAgICAgICAgIHNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0UG9z
LCBlbmRQb3MpOwotICAgICAgICBpZihzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvblN0YXJ0
KSB7Ci0gICAgICAgICAgICBlbmRQb3MgPSBzdHItPmxlbmd0aCgpOwotICAgICAgICAgICAgCisg
ICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvblN0YXJ0KSB7CisgICAgICAg
ICAgICBlbmRQb3MgPSBtX3N0ci0+bGVuZ3RoKCk7CisKICAgICAgICAgICAgIC8vIHRvIGhhbmRs
ZSBzZWxlY3Rpb24gZnJvbSBlbmQgb2YgdGV4dCB0byBlbmQgb2YgbGluZQotICAgICAgICAgICAg
aWYgKHN0YXJ0UG9zICE9IDAgJiYgc3RhcnRQb3MgPT0gZW5kUG9zKSB7CisgICAgICAgICAgICBp
ZiAoc3RhcnRQb3MgIT0gMCAmJiBzdGFydFBvcyA9PSBlbmRQb3MpCiAgICAgICAgICAgICAgICAg
c3RhcnRQb3MgPSBlbmRQb3MgLSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYo
c2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25FbmQpCisgICAgICAgIH0gZWxzZSBpZiAoc2Vs
ZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25FbmQpCiAgICAgICAgICAgICBzdGFydFBvcyA9IDA7
Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICBpZiAoYm94LT5pc1NlbGVjdGVk
KHN0YXJ0UG9zLCBlbmRQb3MpKSB7CiAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogbGlu
ZSA9IGJveC0+cm9vdCgpOwpAQCAtNzkzLDYzICs3NjEsNjQgQEAgdm9pZCBSZW5kZXJUZXh0Ojpz
ZXRTZWxlY3Rpb25TdGF0ZShTZWxlYwogICAgICAgICAgICAgICAgICAgICBsaW5lLT5zZXRIYXNT
ZWxlY3RlZENoaWxkcmVuKHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoYm94ID0gZmlyc3RUZXh0Qm94
KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICBSb290SW5s
aW5lQm94KiBsaW5lID0gYm94LT5yb290KCk7CiAgICAgICAgICAgICBpZiAobGluZSkKLSAgICAg
ICAgICAgICAgICBsaW5lLT5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHMgPT0gU2VsZWN0aW9uSW5z
aWRlKTsKKyAgICAgICAgICAgICAgICBsaW5lLT5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRl
ID09IFNlbGVjdGlvbkluc2lkZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgY29udGFp
bmluZ0Jsb2NrKCktPnNldFNlbGVjdGlvblN0YXRlKHMpOworCisgICAgY29udGFpbmluZ0Jsb2Nr
KCktPnNldFNlbGVjdGlvblN0YXRlKHN0YXRlKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0OjpzZXRU
ZXh0V2l0aE9mZnNldChTdHJpbmdJbXBsICp0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbiwgYm9vbCBmb3JjZSkKK3ZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dFdpdGhPZmZzZXQoU3Ry
aW5nSW1wbCogdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW4sIGJvb2wgZm9yY2Up
CiB7Ci0gICAgdW5zaWduZWQgb2xkTGVuID0gc3RyID8gc3RyLT5sZW5ndGgoKSA6IDA7CisgICAg
dW5zaWduZWQgb2xkTGVuID0gbV9zdHIgPyBtX3N0ci0+bGVuZ3RoKCkgOiAwOwogICAgIHVuc2ln
bmVkIG5ld0xlbiA9IHRleHQgPyB0ZXh0LT5sZW5ndGgoKSA6IDA7CiAgICAgaW50IGRlbHRhID0g
bmV3TGVuIC0gb2xkTGVuOwotICAgIHVuc2lnbmVkIGVuZCA9IGxlbiA/IG9mZnNldCtsZW4tMSA6
IG9mZnNldDsKKyAgICB1bnNpZ25lZCBlbmQgPSBsZW4gPyBvZmZzZXQgKyBsZW4gLSAxIDogb2Zm
c2V0OwogCiAgICAgUm9vdElubGluZUJveCogZmlyc3RSb290Qm94ID0gMDsKICAgICBSb290SW5s
aW5lQm94KiBsYXN0Um9vdEJveCA9IDA7Ci0gICAgCisKICAgICBib29sIGRpcnRpZWRMaW5lcyA9
IGZhbHNlOwotICAgIAorCiAgICAgLy8gRGlydHkgYWxsIHRleHQgYm94ZXMgdGhhdCBpbmNsdWRl
IGNoYXJhY3RlcnMgaW4gYmV0d2VlbiBvZmZzZXQgYW5kIG9mZnNldCtsZW4uCiAgICAgZm9yIChJ
bmxpbmVUZXh0Qm94KiBjdXJyID0gZmlyc3RUZXh0Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5u
ZXh0VGV4dEJveCgpKSB7CiAgICAgICAgIC8vIFRleHQgcnVuIGlzIGVudGlyZWx5IGJlZm9yZSB0
aGUgYWZmZWN0ZWQgcmFuZ2UuCiAgICAgICAgIGlmIChjdXJyLT5lbmQoKSA8IG9mZnNldCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKKwogICAgICAgICAvLyBUZXh0IHJ1biBpcyBl
bnRpcmVseSBhZnRlciB0aGUgYWZmZWN0ZWQgcmFuZ2UuCiAgICAgICAgIGlmIChjdXJyLT5zdGFy
dCgpID4gZW5kKSB7CiAgICAgICAgICAgICBjdXJyLT5vZmZzZXRSdW4oZGVsdGEpOwogICAgICAg
ICAgICAgUm9vdElubGluZUJveCogcm9vdCA9IGN1cnItPnJvb3QoKTsKICAgICAgICAgICAgIGlm
ICghZmlyc3RSb290Qm94KSB7CiAgICAgICAgICAgICAgICAgZmlyc3RSb290Qm94ID0gcm9vdDsK
LSAgICAgICAgICAgICAgICBpZiAoIWRpcnRpZWRMaW5lcykgeyAvLyBUaGUgYWZmZWN0ZWQgYXJl
YSB3YXMgaW4gYmV0d2VlbiB0d28gcnVucy4gR28gYWhlYWQgYW5kIG1hcmsgdGhlIHJvb3QgYm94
IG9mIHRoZSBydW4gYWZ0ZXIgdGhlIGFmZmVjdGVkIGFyZWEgYXMgZGlydHkuCisgICAgICAgICAg
ICAgICAgaWYgKCFkaXJ0aWVkTGluZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFm
ZmVjdGVkIGFyZWEgd2FzIGluIGJldHdlZW4gdHdvIHJ1bnMuIEdvIGFoZWFkIGFuZCBtYXJrIHRo
ZSByb290IGJveCBvZgorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcnVuIGFmdGVyIHRoZSBh
ZmZlY3RlZCBhcmVhIGFzIGRpcnR5LgogICAgICAgICAgICAgICAgICAgICBmaXJzdFJvb3RCb3gt
Pm1hcmtEaXJ0eSgpOwogICAgICAgICAgICAgICAgICAgICBkaXJ0aWVkTGluZXMgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxhc3RSb290Qm94
ID0gcm9vdDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjdXJyLT5lbmQoKSA+PSBvZmZz
ZXQgJiYgY3Vyci0+ZW5kKCkgPD0gZW5kKSB7Ci0gICAgICAgICAgICBjdXJyLT5kaXJ0eUxpbmVC
b3hlcygpOyAvLyBUZXh0IHJ1biBvdmVybGFwcyB3aXRoIHRoZSBsZWZ0IGVuZCBvZiB0aGUgYWZm
ZWN0ZWQgcmFuZ2UuCisgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+ZW5kKCkgPj0gb2Zmc2V0ICYm
IGN1cnItPmVuZCgpIDw9IGVuZCkgeworICAgICAgICAgICAgLy8gVGV4dCBydW4gb3ZlcmxhcHMg
d2l0aCB0aGUgbGVmdCBlbmQgb2YgdGhlIGFmZmVjdGVkIHJhbmdlLgorICAgICAgICAgICAgY3Vy
ci0+ZGlydHlMaW5lQm94ZXMoKTsKICAgICAgICAgICAgIGRpcnRpZWRMaW5lcyA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY3Vyci0+c3RhcnQoKSA8PSBvZmZzZXQgJiYgY3Vy
ci0+ZW5kKCkgPj0gZW5kKSB7Ci0gICAgICAgICAgICBjdXJyLT5kaXJ0eUxpbmVCb3hlcygpOyAv
LyBUZXh0IHJ1biBzdWJzdW1lcyB0aGUgYWZmZWN0ZWQgcmFuZ2UuCisgICAgICAgIH0gZWxzZSBp
ZiAoY3Vyci0+c3RhcnQoKSA8PSBvZmZzZXQgJiYgY3Vyci0+ZW5kKCkgPj0gZW5kKSB7CisgICAg
ICAgICAgICAvLyBUZXh0IHJ1biBzdWJzdW1lcyB0aGUgYWZmZWN0ZWQgcmFuZ2UuCisgICAgICAg
ICAgICBjdXJyLT5kaXJ0eUxpbmVCb3hlcygpOwogICAgICAgICAgICAgZGlydGllZExpbmVzID0g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjdXJyLT5zdGFydCgpIDw9IGVuZCAm
JiBjdXJyLT5lbmQoKSA+PSBlbmQpIHsKLSAgICAgICAgICAgIGN1cnItPmRpcnR5TGluZUJveGVz
KCk7IC8vIFRleHQgcnVuIG92ZXJsYXBzIHdpdGggcmlnaHQgZW5kIG9mIHRoZSBhZmZlY3RlZCBy
YW5nZS4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5zdGFydCgpIDw9IGVuZCAmJiBjdXJyLT5l
bmQoKSA+PSBlbmQpIHsKKyAgICAgICAgICAgIC8vIFRleHQgcnVuIG92ZXJsYXBzIHdpdGggcmln
aHQgZW5kIG9mIHRoZSBhZmZlY3RlZCByYW5nZS4KKyAgICAgICAgICAgIGN1cnItPmRpcnR5TGlu
ZUJveGVzKCk7CiAgICAgICAgICAgICBkaXJ0aWVkTGluZXMgPSB0cnVlOwogICAgICAgICB9CiAg
ICAgfQotICAgIAorCiAgICAgLy8gTm93IHdlIGhhdmUgdG8gd2FsayBhbGwgb2YgdGhlIGNsZWFu
IGxpbmVzIGFuZCBhZGp1c3QgdGhlaXIgY2FjaGVkIGxpbmUgYnJlYWsgaW5mb3JtYXRpb24KICAg
ICAvLyB0byByZWZsZWN0IG91ciB1cGRhdGVkIG9mZnNldHMuCiAgICAgaWYgKGxhc3RSb290Qm94
KQpAQCAtODYxLDkgKzgzMCw5IEBAIHZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dFdpdGhPZmZzZXQo
U3RyaW4KICAgICB9CiAgICAgZm9yIChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94
OyBjdXJyICYmIGN1cnIgIT0gbGFzdFJvb3RCb3g7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgp
KSB7CiAgICAgICAgIGlmIChjdXJyLT5saW5lQnJlYWtPYmooKSA9PSB0aGlzICYmIGN1cnItPmxp
bmVCcmVha1BvcygpID4gZW5kKQotICAgICAgICAgICAgY3Vyci0+c2V0TGluZUJyZWFrUG9zKGN1
cnItPmxpbmVCcmVha1BvcygpK2RlbHRhKTsKKyAgICAgICAgICAgIGN1cnItPnNldExpbmVCcmVh
a1BvcyhjdXJyLT5saW5lQnJlYWtQb3MoKSArIGRlbHRhKTsKICAgICB9Ci0gICAgCisKICAgICBt
X2xpbmVzRGlydHkgPSBkaXJ0aWVkTGluZXM7CiAgICAgc2V0VGV4dCh0ZXh0LCBmb3JjZSk7CiB9
CkBAIC04NzIsMTggKzg0MSwxOCBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFRleHRXaXRoT2Zmc2V0
KFN0cmluCiAjZGVmaW5lIFNRVUFSRV9DSEFSIDB4MjVBQQogI2RlZmluZSBDSVJDTEVfQ0hBUiAw
eDI1RTYKIAotdm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0KFN0cmluZ0ltcGwgKnRleHQsIGJvb2wg
Zm9yY2UpCit2b2lkIFJlbmRlclRleHQ6OnNldFRleHQoU3RyaW5nSW1wbCogdGV4dCwgYm9vbCBm
b3JjZSkKIHsKICAgICBpZiAoIXRleHQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWZvcmNl
ICYmIHN0ciA9PSB0ZXh0KQorICAgIGlmICghZm9yY2UgJiYgbV9zdHIgPT0gdGV4dCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9hbGxBc2NpaUNoZWNrZWQgPSBmYWxzZTsKIAotICAgIHN0ciA9
IHRleHQ7Ci0gICAgaWYgKHN0cikgewotICAgICAgICBzdHIgPSBzdHItPnJlcGxhY2UoJ1xcJywg
YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKKyAgICBtX3N0ciA9IHRleHQ7CisgICAgaWYg
KG1fc3RyKSB7CisgICAgICAgIG1fc3RyID0gbV9zdHItPnJlcGxhY2UoJ1xcJywgYmFja3NsYXNo
QXNDdXJyZW5jeVN5bWJvbCgpKTsKICAgICAgICAgaWYgKHN0eWxlKCkpIHsKICAgICAgICAgICAg
IHN3aXRjaCAoc3R5bGUoKS0+dGV4dFRyYW5zZm9ybSgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBDQVBJVEFMSVpFOgpAQCAtODk3LDI0ICs4NjYsMjkgQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRU
ZXh0KFN0cmluZ0ltcGwgKnRleAogICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCog
cHJldlN0ciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihvKS0+c3RyaW5nKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmV2aW91cyA9ICgqcHJldlN0cilbcHJldlN0ci0+bGVuZ3RoKCkg
LSAxXTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzdHIgPSBz
dHItPmNhcGl0YWxpemUocHJldmlvdXMpOworICAgICAgICAgICAgICAgICAgICBtX3N0ciA9IG1f
c3RyLT5jYXBpdGFsaXplKHByZXZpb3VzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgVVBQRVJDQVNFOgorICAgICAg
ICAgICAgICAgICAgICBtX3N0ciA9IG1fc3RyLT51cHBlcigpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIExPV0VSQ0FTRToKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdHIgPSBtX3N0ci0+bG93ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBVUFBFUkNBU0U6ICBzdHIgPSBzdHItPnVwcGVyKCk7ICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgTE9XRVJDQVNFOiAgc3RyID0gc3RyLT5s
b3dlcigpOyAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE5PTkU6Ci0gICAgICAg
ICAgICAgICAgZGVmYXVsdDo7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAg
ICAgc3dpdGNoKHN0eWxlKCktPnRleHRTZWN1cml0eSgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBUU0RJU0M6Ci0gICAgICAgICAgICAgICAgICAgIHN0ciA9IHN0ci0+c2VjdXJlKEJVTExFVF9D
SEFSKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdHIgPSBtX3N0ci0+c2VjdXJlKEJVTExFVF9D
SEFSKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBU
U0NJUkNMRToKLSAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyLT5zZWN1cmUoQ0lSQ0xFX0NI
QVIpOworICAgICAgICAgICAgICAgICAgICBtX3N0ciA9IG1fc3RyLT5zZWN1cmUoQ0lSQ0xFX0NI
QVIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFRT
U1FVQVJFOiAKLSAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyLT5zZWN1cmUoU1FVQVJFX0NI
QVIpOworICAgICAgICAgICAgICAgIGNhc2UgVFNTUVVBUkU6CisgICAgICAgICAgICAgICAgICAg
IG1fc3RyID0gbV9zdHItPnNlY3VyZShTUVVBUkVfQ0hBUik7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgVFNOT05FOgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTkyNCwxMCArODk4LDEwIEBAIHZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dChT
dHJpbmdJbXBsICp0ZXgKIAogICAgIGNhY2hlV2lkdGhzKCk7CiAKLSAgICAvLyAjIyMgd2hhdCBz
aG91bGQgaGFwcGVuIGlmIHdlIGNoYW5nZSB0aGUgdGV4dCBvZiBhCisgICAgLy8gRklYTUU6IHdo
YXQgc2hvdWxkIGhhcHBlbiBpZiB3ZSBjaGFuZ2UgdGhlIHRleHQgb2YgYQogICAgIC8vIFJlbmRl
ckJSIG9iamVjdCA/Ci0gICAgQVNTRVJUKCFpc0JSKCkgfHwgKHN0ci0+bGVuZ3RoKCkgPT0gMSAm
JiAoKnN0cilbMF0gPT0gJ1xuJykpOwotICAgIEFTU0VSVCghc3RyLT5sZW5ndGgoKSB8fCBzdHIt
PmNoYXJhY3RlcnMoKSk7CisgICAgQVNTRVJUKCFpc0JSKCkgfHwgKG1fc3RyLT5sZW5ndGgoKSA9
PSAxICYmICgqbV9zdHIpWzBdID09ICdcbicpKTsKKyAgICBBU1NFUlQoIW1fc3RyLT5sZW5ndGgo
KSB8fCBtX3N0ci0+Y2hhcmFjdGVycygpKTsKIAogICAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4
UmVjYWxjKCk7CiB9CkBAIC05NzMsNjcgKzk0Nyw3MCBAQCBJbmxpbmVCb3gqIFJlbmRlclRleHQ6
OmNyZWF0ZUlubGluZUJveChiCiAKIHZvaWQgUmVuZGVyVGV4dDo6cG9zaXRpb24oSW5saW5lQm94
KiBib3gpCiB7Ci0gICAgSW5saW5lVGV4dEJveCAqcyA9IHN0YXRpY19jYXN0PElubGluZVRleHRC
b3gqPihib3gpOwotICAgIAotICAgIC8vICMjIyBzaG91bGQgbm90IGJlIG5lZWRlZCEhIQotICAg
IGlmIChzLT5tX2xlbiA9PSAwKSB7CisgICAgSW5saW5lVGV4dEJveCogcyA9IHN0YXRpY19jYXN0
PElubGluZVRleHRCb3gqPihib3gpOworCisgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgbmVl
ZGVkISEhCisgICAgaWYgKCFzLT5tX2xlbikgewogICAgICAgICAvLyBXZSB3YW50IHRoZSBib3gg
dG8gYmUgZGVzdHJveWVkLgogICAgICAgICBzLT5yZW1vdmUoKTsKICAgICAgICAgcy0+ZGVzdHJv
eShyZW5kZXJBcmVuYSgpKTsKICAgICAgICAgbV9maXJzdFRleHRCb3ggPSBtX2xhc3RUZXh0Qm94
ID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIG1fY29udGFpbnNSZXZl
cnNlZFRleHQgfD0gcy0+bV9yZXZlcnNlZDsKIH0KIAotdW5zaWduZWQgaW50IFJlbmRlclRleHQ6
OndpZHRoKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgeHBvcywgYm9v
bCBmaXJzdExpbmUpIGNvbnN0Cit1bnNpZ25lZCBpbnQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWdu
ZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW4sIGludCB4UG9zLCBib29sIGZpcnN0TGluZSkg
Y29uc3QKIHsKLSAgICBpZiAoZnJvbSA+PSBzdHItPmxlbmd0aCgpKQorICAgIGlmIChmcm9tID49
IG1fc3RyLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGZyb20gKyBsZW4g
PiBzdHItPmxlbmd0aCgpKQotICAgICAgICBsZW4gPSBzdHItPmxlbmd0aCgpIC0gZnJvbTsKIAot
ICAgIGNvbnN0IEZvbnQgKmYgPSBmb250KGZpcnN0TGluZSk7Ci0gICAgcmV0dXJuIHdpZHRoKGZy
b20sIGxlbiwgZiwgeHBvcyk7CisgICAgaWYgKGZyb20gKyBsZW4gPiBtX3N0ci0+bGVuZ3RoKCkp
CisgICAgICAgIGxlbiA9IG1fc3RyLT5sZW5ndGgoKSAtIGZyb207CisKKyAgICBjb25zdCBGb250
KiBmID0gZm9udChmaXJzdExpbmUpOworICAgIHJldHVybiB3aWR0aChmcm9tLCBsZW4sIGYsIHhQ
b3MpOwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgaW50IGZy
b20sIHVuc2lnbmVkIGludCBsZW4sIGNvbnN0IEZvbnQgKmYsIGludCB4cG9zKSBjb25zdAordW5z
aWduZWQgaW50IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBp
bnQgbGVuLCBjb25zdCBGb250KiBmLCBpbnQgeFBvcykgY29uc3QKIHsKLSAgICBpZiAoIXN0ci0+
Y2hhcmFjdGVycygpIHx8IGZyb20gPiBzdHItPmxlbmd0aCgpKQorICAgIGlmICghbV9zdHItPmNo
YXJhY3RlcnMoKSB8fCBmcm9tID4gbV9zdHItPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBpZiAoZnJvbSArIGxlbiA+IHN0ci0+bGVuZ3RoKCkpCi0gICAgICAgIGxlbiA9IHN0ci0+
bGVuZ3RoKCkgLSBmcm9tOworCisgICAgaWYgKGZyb20gKyBsZW4gPiBtX3N0ci0+bGVuZ3RoKCkp
CisgICAgICAgIGxlbiA9IG1fc3RyLT5sZW5ndGgoKSAtIGZyb207CiAKICAgICBpbnQgdzsKLSAg
ICBpZiAoIXN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpICYmIGYgPT0gJnN0eWxlKCktPmZvbnQo
KSAmJiBmcm9tID09IDAgJiYgbGVuID09IHN0ci0+bGVuZ3RoKCkpCisgICAgaWYgKCFzdHlsZSgp
LT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBmID09ICZzdHlsZSgpLT5mb250KCkgJiYgIWZyb20gJiYg
bGVuID09IG1fc3RyLT5sZW5ndGgoKSkKICAgICAgICAgdyA9IG1fbWF4V2lkdGg7CiAgICAgZWxz
ZSBpZiAoZiA9PSAmc3R5bGUoKS0+Zm9udCgpKQotICAgICAgICB3ID0gd2lkdGhGcm9tQ2FjaGUo
ZiwgZnJvbSwgbGVuLCB0YWJXaWR0aCgpLCB4cG9zKTsKKyAgICAgICAgdyA9IHdpZHRoRnJvbUNh
Y2hlKGYsIGZyb20sIGxlbiwgdGFiV2lkdGgoKSwgeFBvcyk7CiAgICAgZWxzZQotICAgICAgICB3
ID0gZi0+d2lkdGgoVGV4dFJ1bihzdHJpbmcoKSwgZnJvbSwgbGVuLCAwKSwgVGV4dFN0eWxlKHRh
YldpZHRoKCksIHhwb3MpKTsKLSAgICAgICAgCisgICAgICAgIHcgPSBmLT53aWR0aChUZXh0UnVu
KHN0cmluZygpLCBmcm9tLCBsZW4sIDApLCBUZXh0U3R5bGUodGFiV2lkdGgoKSwgeFBvcykpOwor
CiAgICAgcmV0dXJuIHc7CiB9CiAKIGludCBSZW5kZXJUZXh0Ojp3aWR0aCgpIGNvbnN0CiB7Cisg
ICAgLy8gRklYTUU6IHdlIHNob3VsZCBub3QgdXNlIGEgcmFuZG9tIHZhbHVlIGxpa2UgdGhpcy4K
ICAgICBpbnQgbWlueCA9IDEwMDAwMDAwMDsKICAgICBpbnQgbWF4eCA9IDA7CiAgICAgLy8gc2xv
b293CiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBzID0gZmlyc3RUZXh0Qm94KCk7IHM7IHMgPSBz
LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIGlmKHMtPm1feCA8IG1pbngpCisgICAgICAgIGlm
IChzLT5tX3ggPCBtaW54KQogICAgICAgICAgICAgbWlueCA9IHMtPm1feDsKLSAgICAgICAgaWYo
cy0+bV94ICsgcy0+bV93aWR0aCA+IG1heHgpCisgICAgICAgIGlmIChzLT5tX3ggKyBzLT5tX3dp
ZHRoID4gbWF4eCkKICAgICAgICAgICAgIG1heHggPSBzLT5tX3ggKyBzLT5tX3dpZHRoOwogICAg
IH0KIAotICAgIHJldHVybiBtYXgoMCwgbWF4eC1taW54KTsKKyAgICByZXR1cm4gbWF4KDAsIG1h
eHggLSBtaW54KTsKIH0KIAogSW50UmVjdCBSZW5kZXJUZXh0OjpnZXRBYnNvbHV0ZVJlcGFpbnRS
ZWN0KCkKIHsKLSAgICBSZW5kZXJPYmplY3QgKmNiID0gY29udGFpbmluZ0Jsb2NrKCk7CisgICAg
UmVuZGVyT2JqZWN0KiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIHJldHVybiBjYi0+Z2V0
QWJzb2x1dGVSZXBhaW50UmVjdCgpOwogfQogCkBAIC0xMDQ1LDIyICsxMDIyLDIyIEBAIEludFJl
Y3QgUmVuZGVyVGV4dDo6c2VsZWN0aW9uUmVjdCgpCiAgICAgUmVuZGVyQmxvY2sqIGNiID0gIGNv
bnRhaW5pbmdCbG9jaygpOwogICAgIGlmICghY2IpCiAgICAgICAgIHJldHVybiByZWN0OwotICAg
IAorCiAgICAgLy8gTm93IGNhbGN1bGF0ZSBzdGFydFBvcyBhbmQgZW5kUG9zIGZvciBwYWludGlu
ZyBzZWxlY3Rpb24uCiAgICAgLy8gV2UgaW5jbHVkZSBhIHNlbGVjdGlvbiB3aGlsZSBlbmRQb3Mg
PiAwCiAgICAgaW50IHN0YXJ0UG9zLCBlbmRQb3M7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkg
PT0gU2VsZWN0aW9uSW5zaWRlKSB7CiAgICAgICAgIC8vIFdlIGFyZSBmdWxseSBzZWxlY3RlZC4K
ICAgICAgICAgc3RhcnRQb3MgPSAwOwotICAgICAgICBlbmRQb3MgPSBzdHItPmxlbmd0aCgpOwor
ICAgICAgICBlbmRQb3MgPSBtX3N0ci0+bGVuZ3RoKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
c2VsZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3MsIGVuZFBvcyk7CiAgICAgICAgIGlmIChzZWxlY3Rp
b25TdGF0ZSgpID09IFNlbGVjdGlvblN0YXJ0KQotICAgICAgICAgICAgZW5kUG9zID0gc3RyLT5s
ZW5ndGgoKTsKKyAgICAgICAgICAgIGVuZFBvcyA9IG1fc3RyLT5sZW5ndGgoKTsKICAgICAgICAg
ZWxzZSBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25FbmQpCiAgICAgICAgICAgICBz
dGFydFBvcyA9IDA7CiAgICAgfQotICAgIAorCiAgICAgaWYgKHN0YXJ0UG9zID09IGVuZFBvcykK
ICAgICAgICAgcmV0dXJuIHJlY3Q7CiAKQEAgLTEwNjgsMjYgKzEwNDUsMjYgQEAgSW50UmVjdCBS
ZW5kZXJUZXh0OjpzZWxlY3Rpb25SZWN0KCkKICAgICBjYi0+YWJzb2x1dGVQb3NpdGlvbkZvckNv
bnRlbnQoYWJzeCwgYWJzeSk7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gY2ItPmxheWVyKCk7
CiAgICAgaWYgKGxheWVyKQotICAgICAgIGxheWVyLT5zdWJ0cmFjdFNjcm9sbE9mZnNldChhYnN4
LCBhYnN5KTsgCisgICAgICAgbGF5ZXItPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KGFic3gsIGFic3kp
OwogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpKQogICAgICAgICByZWN0LnVuaXRlKGJveC0+c2VsZWN0aW9u
UmVjdChhYnN4LCBhYnN5LCBzdGFydFBvcywgZW5kUG9zKSk7CiAKICAgICByZXR1cm4gcmVjdDsK
IH0KIAotc2hvcnQgUmVuZGVyVGV4dDo6dmVydGljYWxQb3NpdGlvbkhpbnQoIGJvb2wgZmlyc3RM
aW5lICkgY29uc3QKK3Nob3J0IFJlbmRlclRleHQ6OnZlcnRpY2FsUG9zaXRpb25IaW50KGJvb2wg
Zmlyc3RMaW5lKSBjb25zdAogewotICAgIHJldHVybiBwYXJlbnQoKS0+dmVydGljYWxQb3NpdGlv
bkhpbnQoIGZpcnN0TGluZSApOworICAgIHJldHVybiBwYXJlbnQoKS0+dmVydGljYWxQb3NpdGlv
bkhpbnQoZmlyc3RMaW5lKTsKIH0KIAotY29uc3QgRm9udCAqUmVuZGVyVGV4dDo6Zm9udChib29s
IGZpcnN0TGluZSkgY29uc3QKK2NvbnN0IEZvbnQqIFJlbmRlclRleHQ6OmZvbnQoYm9vbCBmaXJz
dExpbmUpIGNvbnN0CiB7CiAgICAgcmV0dXJuICZzdHlsZShmaXJzdExpbmUpLT5mb250KCk7CiB9
CiAKIGludCBSZW5kZXJUZXh0OjpjYXJldE1pbk9mZnNldCgpIGNvbnN0CiB7Ci0gICAgSW5saW5l
VGV4dEJveCAqYm94ID0gZmlyc3RUZXh0Qm94KCk7CisgICAgSW5saW5lVGV4dEJveCogYm94ID0g
Zmlyc3RUZXh0Qm94KCk7CiAgICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlu
dCBtaW5PZmZzZXQgPSBib3gtPm1fc3RhcnQ7CkBAIC0xMDk5LDExICsxMDc2LDExIEBAIGludCBS
ZW5kZXJUZXh0OjpjYXJldE1pbk9mZnNldCgpIGNvbnN0CiBpbnQgUmVuZGVyVGV4dDo6Y2FyZXRN
YXhPZmZzZXQoKSBjb25zdAogewogICAgIElubGluZVRleHRCb3gqIGJveCA9IGxhc3RUZXh0Qm94
KCk7Ci0gICAgaWYgKCFib3gpIAotICAgICAgICByZXR1cm4gc3RyLT5sZW5ndGgoKTsKKyAgICBp
ZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIG1fc3RyLT5sZW5ndGgoKTsKICAgICBpbnQgbWF4T2Zm
c2V0ID0gYm94LT5tX3N0YXJ0ICsgYm94LT5tX2xlbjsKICAgICBmb3IgKGJveCA9IGJveC0+cHJl
dlRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPnByZXZUZXh0Qm94KCkpCi0gICAgICAgIG1heE9m
ZnNldCA9IG1heChtYXhPZmZzZXQsYm94LT5tX3N0YXJ0ICsgYm94LT5tX2xlbik7CisgICAgICAg
IG1heE9mZnNldCA9IG1heChtYXhPZmZzZXQsIGJveC0+bV9zdGFydCArIGJveC0+bV9sZW4pOwog
ICAgIHJldHVybiBtYXhPZmZzZXQ7CiB9CiAKQEAgLTExMTUsNiArMTA5MiwzNCBAQCB1bnNpZ25l
ZCBSZW5kZXJUZXh0OjpjYXJldE1heFJlbmRlcmVkT2ZmCiAgICAgcmV0dXJuIGw7CiB9CiAKK2lu
dCBSZW5kZXJUZXh0OjpwcmV2aW91c09mZnNldChpbnQgY3VycmVudCkgY29uc3QKK3sKKyAgICBT
dHJpbmdJbXBsKiBzaSA9IG1fc3RyLmdldCgpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVy
YXRvciA9IGNoYXJhY3RlckJyZWFrSXRlcmF0b3Ioc2ktPmNoYXJhY3RlcnMoKSwgc2ktPmxlbmd0
aCgpKTsKKyAgICBpZiAoIWl0ZXJhdG9yKQorICAgICAgICByZXR1cm4gY3VycmVudCAtIDE7CisK
KyAgICBsb25nIHJlc3VsdCA9IHRleHRCcmVha1ByZWNlZGluZyhpdGVyYXRvciwgY3VycmVudCk7
CisgICAgaWYgKHJlc3VsdCA9PSBUZXh0QnJlYWtEb25lKQorICAgICAgICByZXN1bHQgPSBjdXJy
ZW50IC0gMTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludCBSZW5kZXJUZXh0OjpuZXh0
T2Zmc2V0KGludCBjdXJyZW50KSBjb25zdAoreworICAgIFN0cmluZ0ltcGwqIHNpID0gbV9zdHIu
Z2V0KCk7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gY2hhcmFjdGVyQnJlYWtJ
dGVyYXRvcihzaS0+Y2hhcmFjdGVycygpLCBzaS0+bGVuZ3RoKCkpOworICAgIGlmICghaXRlcmF0
b3IpCisgICAgICAgIHJldHVybiBjdXJyZW50ICsgMTsKKworICAgIGxvbmcgcmVzdWx0ID0gdGV4
dEJyZWFrRm9sbG93aW5nKGl0ZXJhdG9yLCBjdXJyZW50KTsKKyAgICBpZiAocmVzdWx0ID09IFRl
eHRCcmVha0RvbmUpCisgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQgKyAxOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogSW5saW5lQm94KiBSZW5kZXJUZXh0OjppbmxpbmVCb3goaW50IG9mZnNl
dCwgRUFmZmluaXR5IGFmZmluaXR5KQogewogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0g
Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CkBAIC0xMTI5
LDggKzExMzQsOCBAQCBJbmxpbmVCb3gqIFJlbmRlclRleHQ6OmlubGluZUJveChpbnQgb2ZmCiAg
ICAgICAgICAgICAvLyBub3QgcmVuZGVyZWQuCiAgICAgICAgICAgICByZXR1cm4gYm94LT5wcmV2
VGV4dEJveCgpID8gYm94LT5wcmV2VGV4dEJveCgpIDogZmlyc3RUZXh0Qm94KCk7CiAgICAgfQot
ICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE4MjM1KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsMTUgQEAgY2xh
c3MgU3RyaW5nSW1wbDsKIAogY2xhc3MgUmVuZGVyVGV4dCA6IHB1YmxpYyBSZW5kZXJPYmplY3Qg
ewogICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVUZXh0Qm94OwotCiBwdWJsaWM6CiAgICAgUmVuZGVy
VGV4dChOb2RlKiwgU3RyaW5nSW1wbCopOwogCi0gICAgdmlydHVhbCBib29sIGlzVGV4dEZyYWdt
ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFs
U3RyaW5nKCkgY29uc3Q7Ci0gICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1l
KCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclRleHQiOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNU
ZXh0RnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5nKCkgY29uc3Q7CisKICAgICB2aXJ0dWFs
IHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKIAogICAgIHZvaWQgZXh0cmFjdFRleHRCb3go
SW5saW5lVGV4dEJveCopOwpAQCAtNTgsMzAgKzU4LDMwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJl
bW92ZVRleHRCb3goSW5saW5lVGV4dEJveCopOwogICAgIHZvaWQgZGVsZXRlVGV4dEJveGVzKCk7
CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKLSAgICAKLSAgICBTdHJpbmcgZGF0YSgpIGNv
bnN0IHsgcmV0dXJuIHN0ci5nZXQoKTsgfQotICAgIFN0cmluZ0ltcGwqIHN0cmluZygpIGNvbnN0
IHsgcmV0dXJuIHN0ci5nZXQoKTsgfQorCisgICAgU3RyaW5nIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX3N0ci5nZXQoKTsgfQorICAgIFN0cmluZ0ltcGwqIHN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyLmdldCgpOyB9CiAKICAgICB2aXJ0dWFsIElubGluZUJveCogY3JlYXRlSW5saW5lQm94
KGJvb2wsYm9vbCwgYm9vbCBpc09ubHlSdW4gPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIGRp
cnR5TGluZUJveGVzKGJvb2wgZnVsbExheW91dCwgYm9vbCBpc1Jvb3RJbmxpbmVCb3ggPSBmYWxz
ZSk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50
IHR5KSB7IGFzc2VydChmYWxzZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyBhc3Nl
cnQoZmFsc2UpOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0
aW9uKSB7IGFzc2VydChmYWxzZSk7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBw
YWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0
ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZv
aWQgYWRkTGluZUJveFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gVUlOVF9NQVgpOwogCiAgICAgdmlydHVhbCBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpOwogCi0gICAg
dmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBzdHItPmxlbmd0aCgpOyB9
Ci0gICAgY29uc3QgVUNoYXIqIHRleHQoKSBjb25zdCB7IHJldHVybiBzdHItPmNoYXJhY3RlcnMo
KTsgfQotICAgIHVuc2lnbmVkIHN0cmluZ0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0ci0+bGVu
Z3RoKCk7IH0gLy8gbm9uIHZpcnR1YWwgaW1wbGVtZW50YXRpb24gb2YgbGVuZ3RoKCkKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyLT5sZW5ndGgoKTsg
fQorICAgIGNvbnN0IFVDaGFyKiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zdHItPmNoYXJhY3Rl
cnMoKTsgfQorICAgIHVuc2lnbmVkIHN0cmluZ0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
LT5sZW5ndGgoKTsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBsZW5ndGgoKQog
ICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihJbmxpbmVCb3gqKTsKIAotICAgIHZpcnR1YWwgdW5z
aWduZWQgd2lkdGgodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBjb25zdCBGb250KiwgaW50
IHhwb3MpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgd2lkdGgodW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbGVuLCBpbnQgeHBvcywgYm9vbCBmaXJzdExpbmUgPSBmYWxzZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCB1bnNpZ25lZCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNv
bnN0IEZvbnQqLCBpbnQgeFBvcykgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCB3aWR0aCh1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGludCB4UG9zLCBib29sIGZpcnN0TGluZSA9IGZh
bHNlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IGhlaWdodCgpIGNvbnN0OwogCkBAIC05NSwxMiArOTUsMTIgQEAgcHVibGljOgogICAgIC8v
IHdpZHRocwogICAgIHZvaWQgY2FsY01pbk1heFdpZHRoKGludCBsZWFkV2lkdGgpOwogICAgIHZp
cnR1YWwgdm9pZCB0cmltbWVkTWluTWF4V2lkdGgoaW50IGxlYWRXaWR0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NaW5XLCBib29sJiBiZWdpbldTLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NaW5XLCBib29s
JiBiZWdpbldTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBlbmRN
aW5XLCBib29sJiBlbmRXUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wmIGhhc0JyZWFrYWJsZUNoYXIsIGJvb2wmIGhhc0JyZWFrLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50JiBiZWdpbk1heFcsIGludCYgZW5kTWF4VywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWluVywgaW50JiBtYXhXLCBib29sJiBz
dHJpcEZyb250U3BhY2VzKTsKLSAgICAKKwogICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFj
ZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0OwogCiAgICAgLy8gcmV0dXJucyB0
aGUgbWluaW11bSB4IHBvc2l0aW9uIG9mIGFsbCBydW5zIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQu
CkBAIC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJbmxpbmVCb3gqIGlu
bGluZUJveChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgPSBVUFNUUkVBTSk7CiAKLSAgICBpbnQgd2lk
dGhGcm9tQ2FjaGUoY29uc3QgRm9udCosIGludCBzdGFydCwgaW50IGxlbiwgaW50IHRhYldpZHRo
LCBpbnQgeHBvcykgY29uc3Q7CisgICAgaW50IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQqLCBp
bnQgc3RhcnQsIGludCBsZW4sIGludCB0YWJXaWR0aCwgaW50IHhQb3MpIGNvbnN0OwogICAgIGJv
b2wgc2hvdWxkVXNlTW9ub3NwYWNlQ2FjaGUoY29uc3QgRm9udCopIGNvbnN0OwogICAgIHZvaWQg
Y2FjaGVXaWR0aHMoKTsKICAgICBib29sIGFsbEFzY2lpKCkgY29uc3Q7CkBAIC0xNDgsMTQgKzE0
OCwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGludCBwcmV2aW91c09mZnNldChpbnQgY3Vy
cmVudCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgbmV4dE9mZnNldChpbnQgY3VycmVudCkgY29u
c3Q7Ci0gICAgCisKICAgICBib29sIGNvbnRhaW5zUmV2ZXJzZWRUZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9jb250YWluc1JldmVyc2VkVGV4dDsgfQotICAgIAorCiAgICAgSW5saW5lVGV4dEJveCog
ZmluZE5leHRJbmxpbmVUZXh0Qm94KGludCBvZmZzZXQsIGludCYgcG9zKSBjb25zdDsKIAogcHJv
dGVjdGVkOgogICAgIC8vIG1lbWJlcnMKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gc3RyOworICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBtX3N0cjsKIAogICAgIElubGluZVRleHRCb3gqIG1fZmlyc3RU
ZXh0Qm94OwogICAgIElubGluZVRleHRCb3gqIG1fbGFzdFRleHRCb3g7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiAxODIzNSkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEs
MTQgKzQxLDE3IEBACiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogI2luY2x1ZGUgPG1hdGgu
aD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBSZW5kZXJUZXh0Q29udHJvbDo6UmVuZGVyVGV4dENvbnRyb2wo
Tm9kZSogbm9kZSwgYm9vbCBtdWx0aUxpbmUpCi0gICAgOiBSZW5kZXJCbG9jayhub2RlKSwgbV9k
aXJ0eShmYWxzZSksIG1fbXVsdGlMaW5lKG11bHRpTGluZSkKKyAgICA6IFJlbmRlckJsb2NrKG5v
ZGUpCisgICAgLCBtX2RpcnR5KGZhbHNlKQorICAgICwgbV9tdWx0aUxpbmUobXVsdGlMaW5lKQog
ewogfQogCkBAIC02OCw5ICs3MSwxMCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRTdHls
ZShSZW5kZXJTCiAgICAgICAgIFJlbmRlckJsb2NrKiBkaXZSZW5kZXJlciA9IHN0YXRpY19jYXN0
PFJlbmRlckJsb2NrKj4obV9kaXYtPnJlbmRlcmVyKCkpOwogICAgICAgICBSZW5kZXJTdHlsZSog
ZGl2U3R5bGUgPSBjcmVhdGVEaXZTdHlsZShzdHlsZSk7CiAgICAgICAgIGRpdlJlbmRlcmVyLT5z
ZXRTdHlsZShkaXZTdHlsZSk7Ci0gICAgICAgIGZvciAoTm9kZSAqbiA9IG1fZGl2LT5maXJzdENo
aWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKG1fZGl2LmdldCgpKSkKKyAgICAgICAg
Zm9yIChOb2RlKiBuID0gbV9kaXYtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4
dE5vZGUobV9kaXYuZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAobi0+cmVuZGVyZXIoKSkKICAg
ICAgICAgICAgICAgICBuLT5yZW5kZXJlcigpLT5zZXRTdHlsZShkaXZTdHlsZSk7CisgICAgICAg
IH0KICAgICB9CiAgICAgc2V0SGFzT3ZlcmZsb3dDbGlwKGZhbHNlKTsKICAgICBzZXRSZXBsYWNl
ZChpc0lubGluZSgpKTsKQEAgLTgwLDcgKzg0LDcgQEAgUmVuZGVyU3R5bGUqIFJlbmRlclRleHRD
b250cm9sOjpjcmVhdGVEaQogewogICAgIFJlbmRlclN0eWxlKiBkaXZTdHlsZSA9IG5ldyAocmVu
ZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50KiBl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudCo+KG5vZGUoKSk7Ci0g
ICAgCisKICAgICBkaXZTdHlsZS0+aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7CiAgICAgZGl2U3R5
bGUtPnNldERpc3BsYXkoQkxPQ0spOwogICAgIGRpdlN0eWxlLT5zZXRVc2VyTW9kaWZ5KGVsZW1l
bnQtPmlzUmVhZE9ubHlDb250cm9sKCkgfHwgZWxlbWVudC0+ZGlzYWJsZWQoKSA/IFJFQURfT05M
WSA6IFJFQURfV1JJVEVfUExBSU5URVhUX09OTFkpOwpAQCAtOTgsNyArMTAyLDYgQEAgUmVuZGVy
U3R5bGUqIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVEaQogICAgICAgICAgICAgZGl2U3R5bGUt
PnNldFdoaXRlU3BhY2UoUFJFX1dSQVApOwogICAgICAgICAgICAgZGl2U3R5bGUtPnNldFdvcmRX
cmFwKEJSRUFLX1dPUkQpOwogICAgICAgICB9Ci0KICAgICB9IGVsc2UgewogICAgICAgICBkaXZT
dHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOwogICAgICAgICBkaXZTdHlsZS0+c2V0T3ZlcmZsb3dY
KE9ISURERU4pOwpAQCAtMTM3LDEwICsxNDAsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6
dXBkYXRlRnJvbUVsZW1lbgogICAgICAgICBtX2Rpdi0+c2V0UmVuZGVyZXIoZGl2UmVuZGVyZXIp
OwogICAgICAgICBtX2Rpdi0+c2V0QXR0YWNoZWQoKTsKICAgICAgICAgbV9kaXYtPnNldEluRG9j
dW1lbnQodHJ1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFJlbmRlclN0eWxlKiBkaXZTdHlsZSA9
IGNyZWF0ZURpdlN0eWxlKHN0eWxlKCkpOwotICAgICAgICBkaXZSZW5kZXJlci0+c2V0U3R5bGUo
ZGl2U3R5bGUpOyAKLSAgICAgICAgCisgICAgICAgIGRpdlJlbmRlcmVyLT5zZXRTdHlsZShkaXZT
dHlsZSk7CisKICAgICAgICAgLy8gQWRkIGRpdiB0byBSZW5kZXIgdHJlZQogICAgICAgICBSZW5k
ZXJCbG9jazo6YWRkQ2hpbGQoZGl2UmVuZGVyZXIpOwogICAgIH0KQEAgLTE0OSw5ICsxNTIsOSBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sOjp1cGRhdGVGcm9tRWxlbWVuCiAgICAgbV9kaXYtPnJl
bmRlcmVyKCktPnN0eWxlKCktPnNldFVzZXJNb2RpZnkoZWxlbWVudC0+aXNSZWFkT25seUNvbnRy
b2woKSB8fCBlbGVtZW50LT5kaXNhYmxlZCgpID8gUkVBRF9PTkxZIDogUkVBRF9XUklURV9QTEFJ
TlRFWFRfT05MWSk7CiAgICAgU3RyaW5nIHZhbHVlOwogICAgIGlmIChtX211bHRpTGluZSkKLSAg
ICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4oZWxlbWVudCkt
PnZhbHVlKCkuY29weSgpOyAgICAKKyAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxIVE1MVGV4
dEFyZWFFbGVtZW50Kj4oZWxlbWVudCktPnZhbHVlKCkuY29weSgpOwogICAgIGVsc2UKLSAgICAg
ICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCktPnZhbHVl
KCkuY29weSgpOyAgICAgICAgCisgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KGVsZW1lbnQpLT52YWx1ZSgpLmNvcHkoKTsKICAgICBpZiAoIWVsZW1lbnQtPnZh
bHVlTWF0Y2hlc1JlbmRlcmVyKCkgfHwgbV9tdWx0aUxpbmUpIHsKICAgICAgICAgU3RyaW5nIG9s
ZFRleHQgPSB0ZXh0KCk7CiAgICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkKQEAgLTE3Miw3ICsx
NzUsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjp1cGRhdGVGcm9tRWxlbWVuCiAKIGludCBS
ZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uU3RhcnQoKQogewotICAgIHJldHVybiBpbmRleEZv
clZpc2libGVQb3NpdGlvbihkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb25Db250cm9sbGVy
KCktPnN0YXJ0KCkpOyAgICAgICAgCisgICAgcmV0dXJuIGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9u
KGRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c3RhcnQoKSk7CiB9
CiAKIGludCBSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uRW5kKCkKQEAgLTE4NCwxMiArMTg3
LDEyIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNldFNlbGVjdGlvblN0YXIKIHsKICAgICBz
ZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgbWF4KHN0YXJ0LCBzZWxlY3Rpb25FbmQoKSkpOwogfQot
IAorCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRTZWxlY3Rpb25FbmQoaW50IGVuZCkKIHsK
ICAgICBzZXRTZWxlY3Rpb25SYW5nZShtaW4oZW5kLCBzZWxlY3Rpb25TdGFydCgpKSwgZW5kKTsK
IH0KLSAgICAKKwogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0KCkKIHsKICAgICBzZXRT
ZWxlY3Rpb25SYW5nZSgwLCB0ZXh0KCkubGVuZ3RoKCkpOwpAQCAtMTk5LDcgKzIwMiw3IEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2w6OnNldFNlbGVjdGlvblJhbmcKIHsKICAgICBlbmQgPSBtYXgo
ZW5kLCAwKTsKICAgICBzdGFydCA9IG1pbihtYXgoc3RhcnQsIDApLCBlbmQpOwotICAgIAorCiAg
ICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKICAgICBpZiAoc3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IEhJRERFTikgewpAQCAtMjE1LDcgKzIxOCw3IEBAIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2w6OnNldFNlbGVjdGlvblJhbmcKICAgICAgICAgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0
aW9uOwogICAgIGVsc2UKICAgICAgICAgZW5kUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJ
bmRleChlbmQpOwotICAgIAorCiAgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24uaXNOb3ROdWxsKCkg
JiYgZW5kUG9zaXRpb24uaXNOb3ROdWxsKCkpOwogICAgIEFTU0VSVChzdGFydFBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCkubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBub2RlKCkgJiYg
ZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
ID09IG5vZGUoKSk7CiAKQEAgLTIyNyw3ICsyMzAsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9s
OjpzZXRTZWxlY3Rpb25SYW5nCiB9CiAKIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJv
bDo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW50IGluZGV4KQoteyAgICAKK3sKICAgICBpZiAo
aW5kZXggPD0gMCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihtX2Rpdi5nZXQoKSwg
MCwgRE9XTlNUUkVBTSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0yNzksNyArMjgy
LDcgQEAgU3RyaW5nIFJlbmRlclRleHRDb250cm9sOjp0ZXh0KCkKIFN0cmluZyBSZW5kZXJUZXh0
Q29udHJvbDo6dGV4dFdpdGhIYXJkTGluZUJyZWFrcygpCiB7CiAgICAgU3RyaW5nIHMoIiIpOwot
ICAgIAorCiAgICAgaWYgKCFtX2RpdiB8fCAhbV9kaXYtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAg
cmV0dXJuIHM7CiAKQEAgLTMxOSwxNSArMzIyLDE0IEBAIFN0cmluZyBSZW5kZXJUZXh0Q29udHJv
bDo6dGV4dFdpdGhIYXJkTGkKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY0hlaWdodCgp
CiB7Ci0gICAgCiAgICAgaW50IHJvd3MgPSAxOwogICAgIGlmIChtX211bHRpTGluZSkKICAgICAg
ICAgcm93cyA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihub2RlKCkpLT5yb3dz
KCk7Ci0gICAgCisKICAgICBpbnQgbGluZSA9IG1fZGl2LT5yZW5kZXJlcigpLT5saW5lSGVpZ2h0
KHRydWUpOwogICAgIGludCB0b0FkZCA9IHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKSAr
IGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkgKwogICAgICAgICAgICAgICAgIG1fZGl2LT5y
ZW5kZXJlcigpLT5wYWRkaW5nVG9wKCkgKyBtX2Rpdi0+cmVuZGVyZXIoKS0+cGFkZGluZ0JvdHRv
bSgpOwotICAgIAorCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBnZXQgdGhlIHNpemUgb2YgdGhl
IHNjcm9sbGJhciBmcm9tIHRoZSBSZW5kZXJUaGVtZSBpbnN0ZWFkIG9mIGhhcmQgY29kaW5nIGl0
IGhlcmUuCiAgICAgaW50IHNjcm9sbGJhclNpemUgPSAwOwogICAgIC8vIFdlIGFyZSBhYmxlIHRv
IGhhdmUgYSBob3Jpem9udGFsIHNjcm9sbGJhciBpZiB0aGUgb3ZlcmZsb3cgc3R5bGUgaXMgc2Ny
b2xsLCBvciBpZiBpdHMgYXV0byBhbmQgdGhlcmUncyBubyB3b3JkIHdyYXAuCkBAIC0zMzUsNyAr
MzM3LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY0hlaWdodCgpCiAgICAgICAgIHNj
cm9sbGJhclNpemUgPSAxNTsKIAogICAgIG1faGVpZ2h0ID0gbGluZSAqIHJvd3MgKyB0b0FkZCAr
IHNjcm9sbGJhclNpemU7Ci0gICAgCisKICAgICBSZW5kZXJCbG9jazo6Y2FsY0hlaWdodCgpOwog
fQogCkBAIC0zNDYsMjMgKzM0OCwyMyBAQCBzaG9ydCBSZW5kZXJUZXh0Q29udHJvbDo6YmFzZWxp
bmVQb3NpdGlvCiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKGIsIGlz
Um9vdExpbmVCb3gpOwogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQg
eCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiti
b29sIFJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50
IHR5LCBIaXRUZXN0QWN0aW9uIGFjdGlvbikKIHsKLSAgICAvLyBJZiB3ZSdyZSB3aXRoaW4gdGhl
IHRleHQgY29udHJvbCwgd2Ugd2FudCB0byBhY3QgYXMgaWYgd2UndmUgaGl0IHRoZSBpbm5lciBk
aXYsIGluY2FzZSB0aGUgcG9pbnQgCisgICAgLy8gSWYgd2UncmUgd2l0aGluIHRoZSB0ZXh0IGNv
bnRyb2wsIHdlIHdhbnQgdG8gYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgaW5uZXIgZGl2LCBpbmNh
c2UgdGhlIHBvaW50CiAgICAgLy8gd2FzIG9uIHRoZSBjb250cm9sIGJ1dCBub3Qgb24gdGhlIGRp
diAoc2VlIFJhZGFyIDQ2MTc4NDEpLgotICAgIGlmIChSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pKSB7CisgICAgaWYg
KFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwg
YWN0aW9uKSkgewogICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG1fZGl2LmdldCgpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAgCisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6bGF5b3V0KCkKLXsgICAgCit7CiAgICAgaW50IG9s
ZEhlaWdodCA9IG1faGVpZ2h0OwogICAgIGNhbGNIZWlnaHQoKTsKICAgICBib29sIHJlbGF5b3V0
Q2hpbGRyZW4gPSBvbGRIZWlnaHQgIT0gbV9oZWlnaHQ7Ci0gICAgCisKICAgICAvLyBTZXQgdGhl
IGRpdidzIGhlaWdodAogICAgIGludCBkaXZIZWlnaHQgPSBtX2hlaWdodCAtIHBhZGRpbmdUb3Ao
KSAtIHBhZGRpbmdCb3R0b20oKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCk7CiAgICAg
bV9kaXYtPnJlbmRlcmVyKCktPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoZGl2SGVpZ2h0LCBG
aXhlZCkpOwpAQCAtMzg5LDE1ICszOTEsMTQgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2Fs
Y01pbk1heFdpZHRoKAogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBnZXQgdGhlIHNp
emUgb2YgdGhlIHNjcm9sbGJhciBmcm9tIHRoZSBSZW5kZXJUaGVtZSBpbnN0ZWFkIG9mIGhhcmQg
Y29kaW5nIGl0IGhlcmUuCiAgICAgICAgICAgICBpZiAobV9kaXYtPnJlbmRlcmVyKCktPnN0eWxl
KCktPm92ZXJmbG93WSgpICE9IE9ISURERU4pCiAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyU2l6
ZSA9IDE1OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgZmFjdG9yID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSkt
PnNpemUoKTsKICAgICAgICAgICAgIGlmIChmYWN0b3IgPD0gMCkKICAgICAgICAgICAgICAgICBm
YWN0b3IgPSAyMDsKICAgICAgICAgfQotICAgICAgICBtX21heFdpZHRoID0gKGludCljZWlsZihj
aGFyV2lkdGggKiBmYWN0b3IpICsgc2Nyb2xsYmFyU2l6ZTsKKyAgICAgICAgbV9tYXhXaWR0aCA9
IHN0YXRpY19jYXN0PGludD4oY2VpbGYoY2hhcldpZHRoICogZmFjdG9yKSkgKyBzY3JvbGxiYXJT
aXplOwogICAgIH0KLSAgICAKKwogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQo
KSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkgPiAwKSB7CiAgICAgICAgIG1fbWF4V2lk
dGggPSBtYXgobV9tYXhXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0
aCgpLnZhbHVlKCkpKTsKICAgICAgICAgbV9taW5XaWR0aCA9IG1heChtX21pbldpZHRoLCBjYWxj
Q29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwpAQCAtNDA1LDE4
ICs0MDYsMTggQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY01pbk1heFdpZHRoKAogICAg
ICAgICBtX21pbldpZHRoID0gMDsKICAgICBlbHNlCiAgICAgICAgIG1fbWluV2lkdGggPSBtX21h
eFdpZHRoOwotICAgIAorCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYm
IHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKICAgICAg
ICAgbV9tYXhXaWR0aCA9IG1pbihtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxl
KCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgICAgICBtX21pbldpZHRoID0gbWluKG1fbWlu
V2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7
CiAgICAgfQogCi0gICAgaW50IHRvQWRkID0gcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgp
ICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIAorICAgIGludCB0b0FkZCA9IHBhZGRp
bmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkg
KwogICAgICAgICAgICAgICAgIG1fZGl2LT5yZW5kZXJlcigpLT5wYWRkaW5nTGVmdCgpICsgbV9k
aXYtPnJlbmRlcmVyKCktPnBhZGRpbmdSaWdodCgpOwogICAgIG1fbWluV2lkdGggKz0gdG9BZGQ7
CiAgICAgbV9tYXhXaWR0aCArPSB0b0FkZDsKIAotICAgIHNldE1pbk1heEtub3duKCk7ICAgIAor
ICAgIHNldE1pbk1heEtub3duKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmZvcndh
cmRFdmVudChFdmVudCogZXZ0KQpAQCAtNDgzLDQgKzQ4NCw0IEBAIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2w6OnNldFNjcm9sbFRvcChpbnQKICAgICAgICAgbV9kaXYtPnNldFNjcm9sbFRvcChuZXdU
b3ApOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmgJKHJldmlzaW9uIDE4MjM1KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMTgsOCArMTgsOCBAQAog
ICoKICAqLwogCi0jaWZuZGVmIFJlbmRlclRleHRGaWVsZF9ICi0jZGVmaW5lIFJlbmRlclRleHRG
aWVsZF9ICisjaWZuZGVmIFJlbmRlclRleHRDb250cm9sX2gKKyNkZWZpbmUgUmVuZGVyVGV4dENv
bnRyb2xfaAogCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKIApAQCAtMzIsMTAgKzMyLDExIEBA
IHB1YmxpYzoKICAgICBSZW5kZXJUZXh0Q29udHJvbChOb2RlKiwgYm9vbCBtdWx0aUxpbmUpOwog
ICAgIHZpcnR1YWwgflJlbmRlclRleHRDb250cm9sKCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyVGV4dEZpZWxkIjsgfQorCiAg
ICAgdmlydHVhbCB2b2lkIGNhbGNIZWlnaHQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1h
eFdpZHRoKCk7Ci0gICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gIlJlbmRlclRleHRGaWVsZCI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTGVmdG92
ZXJBbm9ueW1vdXNCb3hlcygpIHt9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUxlZnRvdmVyQW5v
bnltb3VzQm94ZXMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUq
KTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICB2aXJ0dWFsIGJv
b2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTUwLDEzICs1
MSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFZGl0ZWQoYm9vbCBpc0VkaXRlZCkgeyBtX2Rp
cnR5ID0gaXNFZGl0ZWQ7IH07CiAgICAgYm9vbCBpc1RleHRGaWVsZCgpIGNvbnN0IHsgcmV0dXJu
ICFtX211bHRpTGluZTsgfQogICAgIGJvb2wgaXNUZXh0QXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1f
bXVsdGlMaW5lOyB9Ci0gICAgCisKICAgICBpbnQgc2VsZWN0aW9uU3RhcnQoKTsKICAgICBpbnQg
c2VsZWN0aW9uRW5kKCk7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydChpbnQpOwotICAgIHZv
aWQgc2V0U2VsZWN0aW9uRW5kKGludCk7ICAgIAorICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5kKGlu
dCk7CiAgICAgdm9pZCBzZWxlY3QoKTsKLSAgICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGludCwg
aW50KTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCk7CiAK
ICAgICB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7CiAgICAgU3RyaW5nIHRleHQoKTsKQEAgLTc0
LDE1ICs3NSwxMyBAQCBwdWJsaWM6CiAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0
aW9uRm9ySW5kZXgoaW50IGluZGV4KTsKICAgICBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci0gCi0gICAgcHJpdmF0ZToKLSAgIAorCitwcml2YXRl
OgogICAgIFJlZlB0cjxIVE1MVGV4dEZpZWxkSW5uZXJFbGVtZW50PiBtX2RpdjsKICAgICBib29s
IG1fZGlydHk7CiAgICAgYm9vbCBtX211bHRpTGluZTsKLQogfTsKIAotfQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJUZXh0Q29udHJvbF9oCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHJldmlzaW9uIDE4MjM1
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsMzIgKzI1LDI4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGV4dEZyYWdtZW50LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFJlbmRlclRleHRGcmFnbWVudDo6UmVuZGVyVGV4dEZyYWdtZW50
KE5vZGUqIG5vZGUsIFN0cmluZ0ltcGwqIHN0ciwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3Ro
LCBSZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyKQotICAgIDogUmVuZGVyVGV4dChub2RlLCBzdHIg
PyBzdHItPnN1YnN0cmluZyhzdGFydE9mZnNldCwgbGVuZ3RoKSA6IDApLCBtX3N0YXJ0KHN0YXJ0
T2Zmc2V0KSwgbV9lbmQobGVuZ3RoKSwgbV9maXJzdExldHRlcihmaXJzdExldHRlcikKKyAgICA6
IFJlbmRlclRleHQobm9kZSwgc3RyID8gc3RyLT5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGxlbmd0
aCkgOiAwKQorICAgICwgbV9zdGFydChzdGFydE9mZnNldCkKKyAgICAsIG1fZW5kKGxlbmd0aCkK
KyAgICAsIG1fZmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXIpCiB7CiB9CiAKIFJlbmRlclRleHRGcmFn
bWVudDo6UmVuZGVyVGV4dEZyYWdtZW50KE5vZGUqIG5vZGUsIFN0cmluZ0ltcGwqIHN0cikKLSAg
ICA6IFJlbmRlclRleHQobm9kZSwgc3RyKSwgbV9zdGFydCgwKSwgbV9lbmQoc3RyID8gc3RyLT5s
ZW5ndGgoKSA6IDApLCBtX2dlbmVyYXRlZENvbnRlbnRTdHIoc3RyKSwgbV9maXJzdExldHRlcigw
KQotewotfQotCi1ib29sIFJlbmRlclRleHRGcmFnbWVudDo6aXNUZXh0RnJhZ21lbnQoKSBjb25z
dAorICAgIDogUmVuZGVyVGV4dChub2RlLCBzdHIpCisgICAgLCBtX3N0YXJ0KDApCisgICAgLCBt
X2VuZChzdHIgPyBzdHItPmxlbmd0aCgpIDogMCkKKyAgICAsIG1fZ2VuZXJhdGVkQ29udGVudFN0
cihzdHIpCisgICAgLCBtX2ZpcnN0TGV0dGVyKDApCiB7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAK
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVyVGV4dEZyYWdtZW50OjpvcmlnaW5hbFN0cmlu
ZygpIGNvbnN0CiB7Ci0gICAgU3RyaW5nSW1wbCogcmVzdWx0ID0gMDsKLSAgICBpZiAoZWxlbWVu
dCgpKQotICAgICAgICByZXN1bHQgPSBlbGVtZW50KCktPnN0cmluZygpOwotICAgIGVsc2UKLSAg
ICAgICAgcmVzdWx0ID0gY29udGVudFN0cmluZygpOworICAgIFN0cmluZ0ltcGwqIHJlc3VsdCA9
IChlbGVtZW50KCkgPyBlbGVtZW50KCktPnN0cmluZygpIDogY29udGVudFN0cmluZygpKTsKICAg
ICBpZiAocmVzdWx0ICYmIChzdGFydCgpID4gMCB8fCBzdGFydCgpIDwgcmVzdWx0LT5sZW5ndGgo
KSkpCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+c3Vic3RyaW5nKHN0YXJ0KCksIGVuZCgpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjIsNCArNTgsNSBAQCB2b2lkIFJlbmRlclRleHRGcmFn
bWVudDo6ZGVzdHJveSgpCiAgICAgICAgIGZpcnN0TGV0dGVyKCktPmRlc3Ryb3koKTsKICAgICBS
ZW5kZXJUZXh0OjpkZXN0cm95KCk7CiB9Ci19CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5oCShyZXZpc2lvbiAxODIzNSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgS0hUTUxfUmVuZGVyVGV4dEZy
YWdtZW50X0gKLSNkZWZpbmUgS0hUTUxfUmVuZGVyVGV4dEZyYWdtZW50X0gKKyNpZm5kZWYgUmVu
ZGVyVGV4dEZyYWdtZW50X2gKKyNkZWZpbmUgUmVuZGVyVGV4dEZyYWdtZW50X2gKIAogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIKIApAQCAtMzMsMjMgKzMzLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIC8vIGZpcnN0IGxldHRlciBhbmQgdGhhdCBtdXN0IHRoZXJlZm9yZSBoYXZlIGRpZmZlcmVu
dCBzdHlsZXMgKGFuZCBwb3NpdGlvbnMgaW4gdGhlIHJlbmRlciB0cmVlKS4KIC8vIFdlIGNhY2hl
IG9mZnNldHMgc28gdGhhdCB0ZXh0IHRyYW5zZm9ybWF0aW9ucyBjYW4gYmUgYXBwbGllZCBpbiBz
dWNoIGEgd2F5IHRoYXQgd2UgY2FuIHJlY292ZXIKIC8vIHRoZSBvcmlnaW5hbCB1bmFsdGVyZWQg
c3RyaW5nIGZyb20gb3VyIGNvcnJlc3BvbmRpbmcgRE9NIG5vZGUuCi1jbGFzcyBSZW5kZXJUZXh0
RnJhZ21lbnQgOiBwdWJsaWMgUmVuZGVyVGV4dAoteworY2xhc3MgUmVuZGVyVGV4dEZyYWdtZW50
IDogcHVibGljIFJlbmRlclRleHQgewogcHVibGljOgogICAgIFJlbmRlclRleHRGcmFnbWVudChO
b2RlKiwgU3RyaW5nSW1wbCosIGludCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgUmVuZGVyT2Jq
ZWN0KiBmaXJzdExldHRlciA9IDApOwogICAgIFJlbmRlclRleHRGcmFnbWVudChOb2RlKiwgU3Ry
aW5nSW1wbCopOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGcmFnbWVudCgpIGNvbnN0
OwotICAgIAorCisgICAgdmlydHVhbCBib29sIGlzVGV4dEZyYWdtZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKIAogICAgIHVuc2lnbmVk
IHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQogICAgIHVuc2lnbmVkIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5kOyB9CiAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlyc3RMZXR0ZXI7IH0KLSAgICAKKwogICAgIFN0cmluZ0ltcGwqIGNv
bnRlbnRTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2dlbmVyYXRlZENvbnRlbnRTdHIuZ2V0KCk7
IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcoKSBj
b25zdDsKLSAgICAKKwogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3N0YXJ0OwogICAgIHVuc2ln
bmVkIG1fZW5kOwpAQCAtNTcsNiArNTYsNiBAQCBwcml2YXRlOgogICAgIFJlbmRlck9iamVjdCog
bV9maXJzdExldHRlcjsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
CisjZW5kaWYgLy8gUmVuZGVyVGV4dEZyYWdtZW50X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAJKHJldmlzaW9uIDE4MjM1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxOSArMzQsMTggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi12b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlLCAKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVy
RGF0YSYgYm9yZGVyLCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENv
bG9yJiBiYWNrZ3JvdW5kQ29sb3IpCiB7Ci0KICAgICAvLyBGb3JjZSBpbmxpbmUgYW5kIHRhYmxl
IGRpc3BsYXkgc3R5bGVzIHRvIGJlIGlubGluZS1ibG9jayAoZXhjZXB0IGZvciB0YWJsZS0gd2hp
Y2ggaXMgYmxvY2spCi0gICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FIHx8IHN0eWxl
LT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVf
Uk9XX0dST1VQIHx8IAorICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IElOTElORSB8fCBzdHls
ZS0+ZGlzcGxheSgpID09IElOTElORV9UQUJMRSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxF
X1JPV19HUk9VUCB8fAogICAgICAgICBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0hFQURFUl9H
Uk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0ZPT1RFUl9HUk9VUCB8fAotICAgICAg
ICBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVyB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRB
QkxFX0NPTFVNTl9HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0NPTFVNTiB8fCAK
KyAgICAgICAgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cgfHwgc3R5bGUtPmRpc3BsYXko
KSA9PSBUQUJMRV9DT0xVTU5fR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9DT0xV
TU4gfHwKICAgICAgICAgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9DRUxMIHx8IHN0eWxlLT5k
aXNwbGF5KCkgPT0gVEFCTEVfQ0FQVElPTikKICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoSU5M
SU5FX0JMT0NLKTsKICAgICBlbHNlIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IENPTVBBQ1QgfHwg
c3R5bGUtPmRpc3BsYXkoKSA9PSBSVU5fSU4gfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBMSVNUX0lU
RU0gfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRSkKICAgICAgICAgc3R5bGUtPnNldERpc3Bs
YXkoQkxPQ0spOwotICAgIAorCiAgICAgaWYgKFVBSGFzQXBwZWFyYW5jZSAmJiB0aGVtZSgpLT5p
c0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9y
KSkgewogICAgICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEFwcGVhcmFu
Y2UpCiAgICAgICAgICAgICBzdHlsZS0+c2V0QXBwZWFyYW5jZShNZW51bGlzdEJ1dHRvbkFwcGVh
cmFuY2UpOwpAQCAtMjA3LDE4ICsyMDYsMTggQEAgQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3Jt
QWN0aXZlU2VsZWN0aQogICAgIC8vIFVzZSBhIGJsdWUgY29sb3IgYnkgZGVmYXVsdCBpZiB0aGUg
cGxhdGZvcm0gdGhlbWUgZG9lc24ndCBkZWZpbmUgYW55dGhpbmcuCiAgICAgcmV0dXJuIENvbG9y
KDAsIDAsIDI1NSk7CiB9Ci0gICAgCisKIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0
aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICAvLyBVc2UgYSBncmV5
IGNvbG9yIGJ5IGRlZmF1bHQgaWYgdGhlIHBsYXRmb3JtIHRoZW1lIGRvZXNuJ3QgZGVmaW5lIGFu
eXRoaW5nLgogICAgIHJldHVybiBDb2xvcigxMjgsIDEyOCwgMTI4KTsKIH0KLSAgIAorCiBDb2xv
ciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdAogewogICAgIHJldHVybiBDb2xvcigpOwogfQotICAgIAorCiBDb2xvciBSZW5kZXJUaGVt
ZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIENvbG9yKCk7CkBAIC0yNjgsMTYgKzI2NywxNSBAQCBib29sIFJlbmRlclRoZW1l
Ojppc0NvbnRyb2xTdHlsZWQoY29uc3QgCiAgICAgICAgIGNhc2UgTGlzdGJveEFwcGVhcmFuY2U6
CiAgICAgICAgIGNhc2UgTWVudWxpc3RBcHBlYXJhbmNlOgogICAgICAgICBjYXNlIFRleHRGaWVs
ZEFwcGVhcmFuY2U6Ci0gICAgICAgIGNhc2UgVGV4dEFyZWFBcHBlYXJhbmNlOiB7CisgICAgICAg
IGNhc2UgVGV4dEFyZWFBcHBlYXJhbmNlOgogICAgICAgICAgICAgLy8gVGVzdCB0aGUgc3R5bGUg
dG8gc2VlIGlmIHRoZSBVQSBib3JkZXIgYW5kIGJhY2tncm91bmQgbWF0Y2guCiAgICAgICAgICAg
ICByZXR1cm4gKHN0eWxlLT5ib3JkZXIoKSAhPSBib3JkZXIgfHwKICAgICAgICAgICAgICAgICAg
ICAgKnN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gYmFja2dyb3VuZCB8fAogICAgICAgICAg
ICAgICAgICAgICBzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkgIT0gYmFja2dyb3VuZENvbG9yKTsK
LSAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMjkxLDExICsyODksMTEg
QEAgYm9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKFJlbmRlck9iagogICAgIC8vIERlZmF1
bHQgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgY29udHJvbHMgZG9udCByZXNwb25kIHRvIGNo
YW5nZXMgaW4gOmhvdmVyIHN0YXRlCiAgICAgaWYgKHN0YXRlID09IEhvdmVyU3RhdGUgJiYgIXN1
cHBvcnRzSG92ZXIoby0+c3R5bGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
CisKICAgICAvLyBBc3N1bWUgcHJlc3NlZCBzdGF0ZSBpcyBvbmx5IHJlc3BvbmRlZCB0byBpZiB0
aGUgY29udHJvbCBpcyBlbmFibGVkLgogICAgIGlmIChzdGF0ZSA9PSBQcmVzc2VkU3RhdGUgJiYg
IWlzRW5hYmxlZChvKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgLy8gUmVw
YWludCB0aGUgY29udHJvbC4KICAgICBvLT5yZXBhaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC0zNTYsMTAgKzM1NCwxMCBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxl
KENTCiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUgYWN0dWFsbHkgc2NhbGVz
IGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0IG92ZXJmbG93IGZvciBz
bWFsbCBoZWlnaHRzLikKICAgICAvLyBmb250LXNpemUgLSBub3QgaG9ub3JlZCAoY29udHJvbCBo
YXMgbm8gdGV4dCksIGJ1dCB3ZSB1c2UgaXQgdG8gZGVjaWRlIHdoaWNoIGNvbnRyb2wgc2l6ZSB0
byB1c2UuCiAgICAgc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsKLSAgICAKKwogICAgIC8vIHBhZGRp
bmcgLSBub3QgaG9ub3JlZCBieSBXaW5JRSwgbmVlZHMgdG8gYmUgcmVtb3ZlZC4KICAgICBzdHls
ZS0+cmVzZXRQYWRkaW5nKCk7Ci0gICAgCisKICAgICAvLyBib3JkZXIgLSBob25vcmVkIGJ5IFdp
bklFLCBidXQgbG9va3MgdGVycmlibGUgKGp1c3QgcGFpbnRzIGluIHRoZSBjb250cm9sIGJveCBh
bmQgdHVybnMgb2ZmIHRoZSBXaW5kb3dzIFhQIHRoZW1lKQogICAgIC8vIGZvciBub3csIHdlIHdp
bGwgbm90IGhvbm9yIGl0LgogICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwpAQCAtMzcxLDEwICsz
NjksMTAgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShDU1NTdAogICAgIC8v
IHdpZHRoL2hlaWdodCAtIGhvbm9yZWQgKFdpbklFIGFjdHVhbGx5IHNjYWxlcyBpdHMgY29udHJv
bCBmb3Igc21hbGwgd2lkdGhzLCBidXQgbGV0cyBpdCBvdmVyZmxvdyBmb3Igc21hbGwgaGVpZ2h0
cy4pCiAgICAgLy8gZm9udC1zaXplIC0gbm90IGhvbm9yZWQgKGNvbnRyb2wgaGFzIG5vIHRleHQp
LCBidXQgd2UgdXNlIGl0IHRvIGRlY2lkZSB3aGljaCBjb250cm9sIHNpemUgdG8gdXNlLgogICAg
IHNldFJhZGlvU2l6ZShzdHlsZSk7Ci0gICAgCisKICAgICAvLyBwYWRkaW5nIC0gbm90IGhvbm9y
ZWQgYnkgV2luSUUsIG5lZWRzIHRvIGJlIHJlbW92ZWQuCiAgICAgc3R5bGUtPnJlc2V0UGFkZGlu
ZygpOwotICAgIAorCiAgICAgLy8gYm9yZGVyIC0gaG9ub3JlZCBieSBXaW5JRSwgYnV0IGxvb2tz
IHRlcnJpYmxlIChqdXN0IHBhaW50cyBpbiB0aGUgY29udHJvbCBib3ggYW5kIHR1cm5zIG9mZiB0
aGUgV2luZG93cyBYUCB0aGVtZSkKICAgICAvLyBmb3Igbm93LCB3ZSB3aWxsIG5vdCBob25vciBp
dC4KICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKQEAgLTQxNSw0ICs0MTMsNCBAQCB2b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoCiB7CiB9CiAKLX0KK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24gMTgyMzUp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSwxNCBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgUG9wdXBNZW51OwogY2xhc3MgUmVu
ZGVyTWVudUxpc3Q7CiAKLWVudW0gQ29udHJvbFN0YXRlIHsgSG92ZXJTdGF0ZSwgUHJlc3NlZFN0
YXRlLCBGb2N1c1N0YXRlLCBFbmFibGVkU3RhdGUsIENoZWNrZWRTdGF0ZSwgUmVhZE9ubHlTdGF0
ZSB9OworZW51bSBDb250cm9sU3RhdGUgeworICAgIEhvdmVyU3RhdGUsCisgICAgUHJlc3NlZFN0
YXRlLAorICAgIEZvY3VzU3RhdGUsCisgICAgRW5hYmxlZFN0YXRlLAorICAgIENoZWNrZWRTdGF0
ZSwKKyAgICBSZWFkT25seVN0YXRlCit9OwogCiBjbGFzcyBSZW5kZXJUaGVtZSB7CiBwdWJsaWM6
CkBAIC00Myw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAvLyBtZXRyaWNzIGFuZCBkZWZhdWx0cyBn
aXZlbiB0aGUgY29udGVudHMgb2YgdGhlIHN0eWxlLiAgVGhpcyBpbmNsdWRlcyBzb3BoaXN0aWNh
dGVkIG9wZXJhdGlvbnMgbGlrZQogICAgIC8vIHNlbGVjdGlvbiBvZiBjb250cm9sIHNpemUgYmFz
ZWQgb2ZmIHRoZSBmb250LCB0aGUgZGlzYWJsaW5nIG9mIGFwcGVhcmFuY2Ugd2hlbiBjZXJ0YWlu
IG90aGVyIHByb3BlcnRpZXMgbGlrZQogICAgIC8vICJib3JkZXIiIGFyZSBzZXQsIG9yIGlmIHRo
ZSBhcHBlYXJhbmNlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRoZW1lLgotICAgIHZvaWQgYWRq
dXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCosICBib29s
IFVBSGFzQXBwZWFyYW5jZSwgCisgICAgdm9pZCBhZGp1c3RTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KiwgIGJvb2wgVUFIYXNBcHBlYXJhbmNlLAogICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEJhY2tncm91bmRMYXllciYs
IGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMg
Y2FsbGVkIHRvIHBhaW50IHRoZSB3aWRnZXQgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5kZXJP
YmplY3QuICBBIHdpZGdldCdzIGZvcmVncm91bmQsIGUuZy4sIHRoZQpAQCAtMTI5LDExICsxMzYs
MTEgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVh
bCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQotICAgIAorCiAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRl
clN0eWxlKikgY29uc3QgeyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCB7IH0KSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24gMTgyMzUpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4
IEBACiAgKgogICovCiAKLSNpZm5kZWYgUkVOREVSX1RIRU1FX01BQ19ICi0jZGVmaW5lIFJFTkRF
Ul9USEVNRV9NQUNfSAorI2lmbmRlZiBSZW5kZXJUaGVtZU1hY19oCisjZGVmaW5lIFJlbmRlclRo
ZW1lTWFjX2gKIAogI2ltcG9ydCAiUmVuZGVyVGhlbWUuaCIKIApAQCAtNDcsMzQgKzQ3LDM0IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5k
ZXJPYmplY3QqLCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVk
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhY2tncm91bmRMYXllciYgYmFj
a2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQo
Y29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEJhY2tncm91bmRMYXllciYsIGNvbnN0IENvbG9yJiBiYWNr
Z3JvdW5kQ29sb3IpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVzaXplQ29udHJv
bChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIENvbG9y
IHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkgY29uc3Q7Ci0gICAgCisKICAgICAvLyBTeXN0ZW0gZm9udHMuCiAgICAgdmlydHVhbCB2
b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0g
ICAgCisKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVj
dCopIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJh
bmNlIHZhbHVlLgogICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICAKKwog
ICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRS
YWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBXZWJDb3Jl
OjpFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAg
CisKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKIApAQCAtODYsNyArODYsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJU
cmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIApA
QCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0U2l6ZUZyb21Gb250KFJlbmRl
clN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwogICAgIEludFNpemUgc2l6ZUZv
ckZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CiAgICAgdm9p
ZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSos
IE5TQ29udHJvbFNpemUpIGNvbnN0OwotICAgIAorCiAgICAgdm9pZCB1cGRhdGVDaGVja2VkU3Rh
dGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9pZCB1cGRhdGVFbmFibGVk
U3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9pZCB1cGRhdGVGb2N1
c2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7CkBAIC0xMTgsNyArMTE4LDcg
QEAgcHJpdmF0ZToKICAgICBjb25zdCBJbnRTaXplKiBidXR0b25TaXplcygpIGNvbnN0OwogICAg
IGNvbnN0IGludCogYnV0dG9uTWFyZ2lucygpIGNvbnN0OwogICAgIHZvaWQgc2V0QnV0dG9uQ2Vs
bFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKLSAgICAKKwogICAg
IHZvaWQgc2V0UG9wdXBQYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiwgTlNDb250
cm9sU2l6ZSkgY29uc3Q7CiAgICAgdm9pZCBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBS
ZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50U2l6ZSogcG9wdXBC
dXR0b25TaXplcygpIGNvbnN0OwpAQCAtMTM4LDYgKzEzOCw2IEBAIHByaXZhdGU6CiAgICAgSW1h
Z2UqIHJlc2l6ZUNvcm5lckltYWdlOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
Ci0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZU1hY19oCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTgyMzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2ltcG9y
dCAiY29uZmlnLmgiCiAjaW1wb3J0ICJSZW5kZXJUaGVtZU1hYy5oIgogCi0jaW1wb3J0ICJjc3Nz
dHlsZXNlbGVjdG9yLmgiCiAjaW1wb3J0ICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW1wb3J0ICJE
b2N1bWVudC5oIgogI2ltcG9ydCAiRWxlbWVudC5oIgpAQCAtMzQsNiArMzMsNyBAQAogI2ltcG9y
dCAiUmVuZGVyU2xpZGVyLmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJXZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0ICJjc3NzdHlsZXNlbGVjdG9yLmgiCiAKICNp
bXBvcnQgPENvY29hL0NvY29hLmg+CiAKQEAgLTU0LDcgKzU0LDcgQEAgZW51bSB7CiAgICAgYm90
dG9tUGFkZGluZywKICAgICBsZWZ0UGFkZGluZwogfTsKLSAgICAKKwogUmVuZGVyVGhlbWUqIHRo
ZW1lKCkKIHsKICAgICBzdGF0aWMgUmVuZGVyVGhlbWVNYWMgbWFjVGhlbWU7CkBAIC02OCw3ICs2
OCw3IEBAIFJlbmRlclRoZW1lTWFjOjpSZW5kZXJUaGVtZU1hYygpCiAgICAgLCBzbGlkZXJUaHVt
Ykhvcml6b250YWxDZWxsKG5pbCkKICAgICAsIHNsaWRlclRodW1iVmVydGljYWxDZWxsKG5pbCkK
ICAgICAsIHNsaWRlckhvcml6b250YWxDZWxsSXNQcmVzc2VkKGZhbHNlKQotICAgICwgc2xpZGVy
VmVydGljYWxDZWxsSXNQcmVzc2VkKGZhbHNlKSAgICAKKyAgICAsIHNsaWRlclZlcnRpY2FsQ2Vs
bElzUHJlc3NlZChmYWxzZSkKICAgICAsIHJlc2l6ZUNvcm5lckltYWdlKDApCiB7CiB9CkBAIC03
NiwxOSArNzYsMTkgQEAgUmVuZGVyVGhlbWVNYWM6OlJlbmRlclRoZW1lTWFjKCkKIENvbG9yIFJl
bmRlclRoZW1lTWFjOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0CiB7CiAgICAgTlNDb2xvciogY29sb3IgPSBbW05TQ29sb3Igc2VsZWN0ZWRUZXh0QmFja2dy
b3VuZENvbG9yXSBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNl
XTsKLSAgICByZXR1cm4gQ29sb3IoKGludCkoMjU1ICogW2NvbG9yIHJlZENvbXBvbmVudF0pLCAo
aW50KSgyNTUgKiBbY29sb3IgZ3JlZW5Db21wb25lbnRdKSwgKGludCkoMjU1ICogW2NvbG9yIGJs
dWVDb21wb25lbnRdKSk7CisgICAgcmV0dXJuIENvbG9yKHN0YXRpY19jYXN0PGludD4oMjU1ICog
W2NvbG9yIHJlZENvbXBvbmVudF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NSAqIFtjb2xvciBncmVl
bkNvbXBvbmVudF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NSAqIFtjb2xvciBibHVlQ29tcG9uZW50
XSkpOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7CiAgICAgTlNDb2xvciogY29sb3IgPSBbW05TQ29s
b3Igc2Vjb25kYXJ5U2VsZWN0ZWRDb250cm9sQ29sb3JdIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFt
ZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOwotICAgIHJldHVybiBDb2xvcigoaW50KSgyNTUgKiBb
Y29sb3IgcmVkQ29tcG9uZW50XSksIChpbnQpKDI1NSAqIFtjb2xvciBncmVlbkNvbXBvbmVudF0p
LCAoaW50KSgyNTUgKiBbY29sb3IgYmx1ZUNvbXBvbmVudF0pKTsKKyAgICByZXR1cm4gQ29sb3Io
c3RhdGljX2Nhc3Q8aW50PigyNTUgKiBbY29sb3IgcmVkQ29tcG9uZW50XSksIHN0YXRpY19jYXN0
PGludD4oMjU1ICogW2NvbG9yIGdyZWVuQ29tcG9uZW50XSksIHN0YXRpY19jYXN0PGludD4oMjU1
ICogW2NvbG9yIGJsdWVDb21wb25lbnRdKSk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lTWFjOjph
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICBOU0Nv
bG9yKiBjb2xvciA9IFtbTlNDb2xvciBhbHRlcm5hdGVTZWxlY3RlZENvbnRyb2xDb2xvcl0gY29s
b3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07Ci0gICAgcmV0dXJu
IENvbG9yKChpbnQpKDI1NSAqIFtjb2xvciByZWRDb21wb25lbnRdKSwgKGludCkoMjU1ICogW2Nv
bG9yIGdyZWVuQ29tcG9uZW50XSksIChpbnQpKDI1NSAqIFtjb2xvciBibHVlQ29tcG9uZW50XSkp
OworICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxpbnQ+KDI1NSAqIFtjb2xvciByZWRDb21w
b25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUgKiBbY29sb3IgZ3JlZW5Db21wb25lbnRdKSwg
c3RhdGljX2Nhc3Q8aW50PigyNTUgKiBbY29sb3IgYmx1ZUNvbXBvbmVudF0pKTsKIH0KIAogdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbikgY29uc3QKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjpzeXN0ZW1Gb250KGludCBwcm9wCiAgICAgc3RhdGljIEZvbnREZXNjcmlwdGlvbiBt
aW5pQ29udHJvbEZvbnQ7CiAgICAgc3RhdGljIEZvbnREZXNjcmlwdGlvbiBzbWFsbENvbnRyb2xG
b250OwogICAgIHN0YXRpYyBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQ7Ci0gICAgCisKICAg
ICBGb250RGVzY3JpcHRpb24qIGNhY2hlZERlc2M7CiAgICAgTlNGb250KiBmb250ID0gbmlsOwog
ICAgIHN3aXRjaCAocHJvcElkKSB7CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6c3lzdGVtRm9udChpbnQgcHJvcAogICAgICAgICAgICAgaWYgKCFzeXN0ZW1Gb250Lmlz
QWJzb2x1dGVTaXplKCkpCiAgICAgICAgICAgICAgICAgZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9u
dE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplXV07CiAgICAgfQotICAgIAorCiAgICAgaWYg
KGZvbnQpIHsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CiAg
ICAgICAgIGNhY2hlZERlc2MtPnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0Zh
bWlseSk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c3lzdGVtRm9u
dChpbnQgcHJvcAogICAgIGZvbnREZXNjcmlwdGlvbiA9ICpjYWNoZWREZXNjOwogfQogCi1ib29s
IFJlbmRlclRoZW1lTWFjOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIAorYm9vbCBSZW5kZXJUaGVtZU1hYzo6aXNDb250
cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9y
ZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhY2tncm91
bmRMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QK
IHsKICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRBcHBlYXJhbmNlIHx8
IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEFyZWFBcHBlYXJhbmNlIHx8IHN0eWxlLT5hcHBl
YXJhbmNlKCkgPT0gTGlzdGJveEFwcGVhcmFuY2UpCkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoYwogICAgICAgICBjYXNlIENoZWNrYm94
QXBwZWFyYW5jZTogewogICAgICAgICAgICAgLy8gU2luY2Ugd2UgcXVlcnkgdGhlIHByb3RvdHlw
ZSBjZWxsLCB3ZSBuZWVkIHRvIHVwZGF0ZSBpdHMgc3RhdGUgdG8gbWF0Y2guCiAgICAgICAgICAg
ICBzZXRDaGVja2JveENlbGxTdGF0ZShvLCByKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIC8v
IFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5j
bHVkZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGNoZWNrYm94CiAgICAgICAgICAg
ICAvLyBzaGFkb3ciIGFuZCB0aGUgY2hlY2suICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQg
b2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBXZWJLaXQuCiAgICAgICAgICAgICByID0g
aW5mbGF0ZVJlY3QociwgY2hlY2tib3hTaXplcygpW1tjaGVja2JveCBjb250cm9sU2l6ZV1dLCBj
aGVja2JveE1hcmdpbnMoKSk7CkBAIC0xODQsNyArMTg0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0UmVwYWludFJlY3QoYwogICAgICAgICBjYXNlIFJhZGlvQXBwZWFyYW5jZTogewog
ICAgICAgICAgICAgLy8gU2luY2Ugd2UgcXVlcnkgdGhlIHByb3RvdHlwZSBjZWxsLCB3ZSBuZWVk
IHRvIHVwZGF0ZSBpdHMgc3RhdGUgdG8gbWF0Y2guCiAgICAgICAgICAgICBzZXRSYWRpb0NlbGxT
dGF0ZShvLCByKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIC8vIFdlIGluZmxhdGUgdGhlIHJl
Y3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVkZWQgaW4gdGhlIGNlbGwg
dG8gYWNjb21tb2RhdGUgdGhlIGNoZWNrYm94CiAgICAgICAgICAgICAvLyBzaGFkb3ciIGFuZCB0
aGUgY2hlY2suICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0
aGUgY29udHJvbCBpbiBXZWJLaXQuCiAgICAgICAgICAgICByID0gaW5mbGF0ZVJlY3QociwgcmFk
aW9TaXplcygpW1tyYWRpbyBjb250cm9sU2l6ZV1dLCByYWRpb01hcmdpbnMoKSk7CkBAIC0xOTQs
NyArMTk0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoYwogICAg
ICAgICBjYXNlIEJ1dHRvbkFwcGVhcmFuY2U6IHsKICAgICAgICAgICAgIC8vIFNpbmNlIHdlIHF1
ZXJ5IHRoZSBwcm90b3R5cGUgY2VsbCwgd2UgbmVlZCB0byB1cGRhdGUgaXRzIHN0YXRlIHRvIG1h
dGNoLgogICAgICAgICAgICAgc2V0QnV0dG9uQ2VsbFN0YXRlKG8sIHIpOwotICAgICAgICAKKwog
ICAgICAgICAgICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBuZWVkZWQgdG8gYWNjb3VudCBm
b3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0byBhY2NvbW1vZGF0ZSB0aGUgY2hlY2ti
b3gKICAgICAgICAgICAgIC8vIHNoYWRvdyIgYW5kIHRoZSBjaGVjay4gIFdlIGRvbid0IGNvbnNp
ZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KICAg
ICAgICAgICAgIGlmIChbYnV0dG9uIGJlemVsU3R5bGVdID09IE5TUm91bmRlZEJlemVsU3R5bGUp
CkBAIC0yMDIsNyArMjAyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJl
Y3QoYwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBNZW51bGlz
dEFwcGVhcmFuY2U6IHsKLSAgICAgICAgICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIp
OyAKKyAgICAgICAgICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIpOwogICAgICAgICAg
ICAgciA9IGluZmxhdGVSZWN0KHIsIHBvcHVwQnV0dG9uU2l6ZXMoKVtbcG9wdXBCdXR0b24gY29u
dHJvbFNpemVdXSwgcG9wdXBCdXR0b25NYXJnaW5zKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVD
aGVja2VkU3RhdGUoCiAgICAgYm9vbCBvbGRJbmRldGVybWluYXRlID0gW2NlbGwgc3RhdGVdID09
IE5TTWl4ZWRTdGF0ZTsKICAgICBib29sIGluZGV0ZXJtaW5hdGUgPSBpc0luZGV0ZXJtaW5hdGUo
byk7CiAgICAgYm9vbCBjaGVja2VkID0gaXNDaGVja2VkKG8pOwotICAgIAorCiAgICAgaWYgKG9s
ZEluZGV0ZXJtaW5hdGUgIT0gaW5kZXRlcm1pbmF0ZSkgewogICAgICAgICBbY2VsbCBzZXRTdGF0
ZTppbmRldGVybWluYXRlID8gTlNNaXhlZFN0YXRlIDogKGNoZWNrZWQgPyBOU09uU3RhdGUgOiBO
U09mZlN0YXRlKV07CiAgICAgICAgIHJldHVybjsKQEAgLTI4MiwxMSArMjgyLDExIEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnQKIHsKICAgICBpZiAoIWlzRW5hYmxl
ZChvKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgLy8gQ2hlY2tib3hlcyBv
bmx5IGhhdmUgdGludCB3aGVuIGNoZWNrZWQuCiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBDaGVja2JveEFwcGVhcmFuY2UpCiAgICAgICAgIHJldHVybiBpc0NoZWNrZWQobyk7
Ci0gICAgCisKICAgICAvLyBGb3Igbm93IGFzc3VtZSBvdGhlciBjb250cm9scyBoYXZlIHRpbnQg
aWYgZW5hYmxlZC4KICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lk
IFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTCiAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUo
dHJ1ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0
aW9uOjpTZXJpZkZhbWlseSk7Ci0gICAgCisKICAgICBOU0ZvbnQqIGZvbnQgPSBbTlNGb250IHN5
c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRy
b2xTaXplXV07CiAgICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KFtm
b250IGZhbWlseU5hbWVdKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFtm
b250IHBvaW50U2l6ZV0pOwpAQCAtMzUwLDEzICszNTAsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRDaGVja2JveChSZW5kZQogewogICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5k
IGhlaWdodCBuZWVkZWQgZm9yIHRoZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBw
YWludGluZy4KICAgICBzZXRDaGVja2JveENlbGxTdGF0ZShvLCByKTsKLSAgICAKKwogICAgIC8v
IFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5j
bHVkZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGNoZWNrYm94CiAgICAgLy8gc2hh
ZG93IiBhbmQgdGhlIGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9mIHRoZSBi
b3VuZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0
ID0gaW5mbGF0ZVJlY3QociwgY2hlY2tib3hTaXplcygpW1tjaGVja2JveCBjb250cm9sU2l6ZV1d
LCBjaGVja2JveE1hcmdpbnMoKSk7CiAgICAgW2NoZWNrYm94IGRyYXdXaXRoRnJhbWU6TlNSZWN0
KGluZmxhdGVkUmVjdCkgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmdldERvY3VtZW50
VmlldygpXTsKICAgICBbY2hlY2tib3ggc2V0Q29udHJvbFZpZXc6IG5pbF07Ci0gICAgCisKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTM2OCw3ICszNjgsNyBAQCBjb25zdCBJbnRTaXplKiBS
ZW5kZXJUaGVtZU1hYzo6Y2hlY2tib3hTCiAKIGNvbnN0IGludCogUmVuZGVyVGhlbWVNYWM6OmNo
ZWNrYm94TWFyZ2lucygpIGNvbnN0CiB7Ci0gICAgc3RhdGljIGNvbnN0IGludCBtYXJnaW5zWzNd
WzRdID0gCisgICAgc3RhdGljIGNvbnN0IGludCBtYXJnaW5zWzNdWzRdID0KICAgICB7CiAgICAg
ICAgIHsgMywgNCwgNCwgMiB9LAogICAgICAgICB7IDQsIDMsIDMsIDMgfSwKQEAgLTM4NSwxMCAr
Mzg1LDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldENoZWNrYm94Q2VsbFN0YXQKICAgICAg
ICAgW2NoZWNrYm94IHNldFRpdGxlOm5pbF07CiAgICAgICAgIFtjaGVja2JveCBzZXRBbGxvd3NN
aXhlZFN0YXRlOllFU107CiAgICAgfQotICAgIAorCiAgICAgLy8gU2V0IHRoZSBjb250cm9sIHNp
emUgYmFzZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUgcGFpbnRpbmcgaW50by4KICAgICBzZXRD
b250cm9sU2l6ZShjaGVja2JveCwgY2hlY2tib3hTaXplcygpLCByLnNpemUoKSk7Ci0gICAgCisK
ICAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBk
YXRlQ2hlY2tlZFN0YXRlKGNoZWNrYm94LCBvKTsKICAgICB1cGRhdGVFbmFibGVkU3RhdGUoY2hl
Y2tib3gsIG8pOwpAQCAtNDAxLDcgKzQwMSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldENo
ZWNrYm94U2l6ZShSZW4KICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBz
cGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlmICghc3R5bGUtPndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQog
ICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRl
cm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KICAgICBzZXRTaXplRnJv
bUZvbnQoc3R5bGUsIGNoZWNrYm94U2l6ZXMoKSk7CiB9CkBAIC00MTAsMTMgKzQxMCwxMyBAQCBi
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludFJhZGlvKFJlbmRlck9iCiB7CiAgICAgLy8gRGV0ZXJt
aW5lIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG5lZWRlZCBmb3IgdGhlIGNvbnRyb2wgYW5kIHByZXBh
cmUgdGhlIGNlbGwgZm9yIHBhaW50aW5nLgogICAgIHNldFJhZGlvQ2VsbFN0YXRlKG8sIHIpOwot
ICAgIAorCiAgICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBuZWVkZWQgdG8gYWNjb3VudCBm
b3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0byBhY2NvbW1vZGF0ZSB0aGUgY2hlY2ti
b3gKICAgICAvLyBzaGFkb3ciIGFuZCB0aGUgY2hlY2suICBXZSBkb24ndCBjb25zaWRlciB0aGlz
IHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBXZWJLaXQuCiAgICAgSW50UmVj
dCBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChyLCByYWRpb1NpemVzKClbW3JhZGlvIGNvbnRy
b2xTaXplXV0sIHJhZGlvTWFyZ2lucygpKTsKICAgICBbcmFkaW8gZHJhd1dpdGhGcmFtZTpOU1Jl
Y3QoaW5mbGF0ZWRSZWN0KSBpblZpZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+Z2V0RG9jdW1l
bnRWaWV3KCldOwogICAgIFtyYWRpbyBzZXRDb250cm9sVmlldzogbmlsXTsKLSAgICAKKwogICAg
IHJldHVybiBmYWxzZTsKIH0KIApAQCAtNDI4LDcgKzQyOCw3IEBAIGNvbnN0IEludFNpemUqIFJl
bmRlclRoZW1lTWFjOjpyYWRpb1NpemUKIAogY29uc3QgaW50KiBSZW5kZXJUaGVtZU1hYzo6cmFk
aW9NYXJnaW5zKCkgY29uc3QKIHsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0g
PSAKKyAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0gPQogICAgIHsKICAgICAgICAg
eyAyLCAyLCA0LCAyIH0sCiAgICAgICAgIHsgMywgMiwgMywgMiB9LApAQCAtNDQ0LDEwICs0NDQs
MTAgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0UmFkaW9DZWxsU3RhdGUoYwogICAgICAgICBb
cmFkaW8gc2V0QnV0dG9uVHlwZTpOU1JhZGlvQnV0dG9uXTsKICAgICAgICAgW3JhZGlvIHNldFRp
dGxlOm5pbF07CiAgICAgfQotICAgIAorCiAgICAgLy8gU2V0IHRoZSBjb250cm9sIHNpemUgYmFz
ZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUgcGFpbnRpbmcgaW50by4KICAgICBzZXRDb250cm9s
U2l6ZShyYWRpbywgcmFkaW9TaXplcygpLCByLnNpemUoKSk7Ci0gICAgCisKICAgICAvLyBVcGRh
dGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlQ2hlY2tlZFN0
YXRlKHJhZGlvLCBvKTsKICAgICB1cGRhdGVFbmFibGVkU3RhdGUocmFkaW8sIG8pOwpAQCAtNDYx
LDcgKzQ2MSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFJhZGlvU2l6ZShSZW5kZXIKICAg
ICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2Ug
aGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47Ci0g
ICAgCisKICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNp
YyB3aWR0aCBvZiB0aGUgY29udHJvbC4KICAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIHJhZGlv
U2l6ZXMoKSk7CiB9CkBAIC00OTAsNyArNDkwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0QnV0dG9uU3R5bGUoQwogICAgIC8vICgzKSBCdXR0b24gaXMgdGhlIGNvbnN0YW50IHRoYXQg
bWVhbnMgInBpY2sgdGhlIGJlc3QgYnV0dG9uIGFzIGFwcHJvcHJpYXRlLiIgIDxidXR0b24+cyB1
c2UgdGhpcyBjb25zdGFudC4gIFRoaXMgYnV0dG9uIHdpbGwKICAgICAvLyBhbHNvIHNjYWxlIHZl
cnRpY2FsbHkgYW5kIGFsbG93IGN1c3RvbSBmb250cyBhbmQgY29sb3JzLiAgSXQgd2lsbCBhdHRl
bXB0IHRvIHVzZSBBcXVhIGlmIHBvc3NpYmxlIGFuZCB3aWxsIG1ha2UgdGhpcyBkZXRlcm1pbmF0
aW9uCiAgICAgLy8gc29sZWx5IG9uIHRoZSByZWN0YW5nbGUgb2YgdGhlIGNvbnRyb2wuCi0gICAg
CisKICAgICAvLyBEZXRlcm1pbmUgb3VyIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgb3VyIGZvbnQu
CiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHls
ZSk7CiAKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RCdXR0
b25TdHlsZShDCiAKICAgICAgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgogICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8v
IFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUKICAgICAgICAgc3R5bGUtPnNldFdoaXRlU3Bh
Y2UoUFJFKTsKIApAQCAtNTE3LDcgKzUxNyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dEJ1dHRvblN0eWxlKEMKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTZXQgYSBtaW4taGVpZ2h0
IHNvIHRoYXQgd2UgY2FuJ3QgZ2V0IHNtYWxsZXIgdGhhbiB0aGUgbWluaSBidXR0b24uCiAgICAg
ICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKDE1LCBGaXhlZCkpOwotICAgICAgICAKKwog
ICAgICAgICAvLyBSZXNldCB0aGUgdG9wIGFuZCBib3R0b20gYm9yZGVycy4KICAgICAgICAgc3R5
bGUtPnJlc2V0Qm9yZGVyVG9wKCk7CiAgICAgICAgIHN0eWxlLT5yZXNldEJvcmRlckJvdHRvbSgp
OwpAQCAtNTMyLDcgKzUzMiw3IEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpidXR0
b25TaXoKIAogY29uc3QgaW50KiBSZW5kZXJUaGVtZU1hYzo6YnV0dG9uTWFyZ2lucygpIGNvbnN0
CiB7Ci0gICAgc3RhdGljIGNvbnN0IGludCBtYXJnaW5zWzNdWzRdID0gCisgICAgc3RhdGljIGNv
bnN0IGludCBtYXJnaW5zWzNdWzRdID0KICAgICB7CiAgICAgICAgIHsgNCwgNiwgNywgNiB9LAog
ICAgICAgICB7IDQsIDUsIDYsIDUgfSwKQEAgLTU0Niw3ICs1NDYsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjpzZXRCdXR0b25TaXplKFJlbmRlCiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWln
aHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KICAgICBp
ZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQo
KS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gVXNlIHRoZSBmb250
IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCiAg
ICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBidXR0b25TaXplcygpKTsKIH0KQEAgLTU2Nyw5ICs1
NjcsOSBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRCdXR0b25DZWxsU3RhdGUoCiAgICAgICAg
ICAgICBbYnV0dG9uIHNldEJlemVsU3R5bGU6TlNTaGFkb3dsZXNzU3F1YXJlQmV6ZWxTdHlsZV07
CiAgICAgfSBlbHNlIGlmIChbYnV0dG9uIGJlemVsU3R5bGVdICE9IE5TUm91bmRlZEJlemVsU3R5
bGUpCiAgICAgICAgIFtidXR0b24gc2V0QmV6ZWxTdHlsZTpOU1JvdW5kZWRCZXplbFN0eWxlXTsK
LSAgICAgICAgICAgIAorCiAgICAgc2V0Q29udHJvbFNpemUoYnV0dG9uLCBidXR0b25TaXplcygp
LCByLnNpemUoKSk7Ci0gICAgCisKICAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdl
IHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlQ2hlY2tlZFN0YXRlKGJ1dHRvbiwgbyk7CiAgICAgdXBk
YXRlRW5hYmxlZFN0YXRlKGJ1dHRvbiwgbyk7CkBAIC02MTMsNyArNjEzLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoUmVuZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAogewogfQogCkBAIC02MjQsMTMgKzYyNCwxMyBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRBcmVhKFJlbmRlCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAogewogfQogCiBjb25zdCBpbnQq
IFJlbmRlclRoZW1lTWFjOjpwb3B1cEJ1dHRvbk1hcmdpbnMoKSBjb25zdAogewotICAgIHN0YXRp
YyBjb25zdCBpbnQgbWFyZ2luc1szXVs0XSA9IAorICAgIHN0YXRpYyBjb25zdCBpbnQgbWFyZ2lu
c1szXVs0XSA9CiAgICAgewogICAgICAgICB7IDAsIDMsIDEsIDMgfSwKICAgICAgICAgeyAwLCAz
LCAyLCAzIH0sCkBAIC02NDcsNyArNjQ3LDcgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVN
YWM6OnBvcHVwQnV0dAogCiBjb25zdCBpbnQqIFJlbmRlclRoZW1lTWFjOjpwb3B1cEJ1dHRvblBh
ZGRpbmcoTlNDb250cm9sU2l6ZSBzaXplKSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBpbnQg
cGFkZGluZ1szXVs0XSA9IAorICAgIHN0YXRpYyBjb25zdCBpbnQgcGFkZGluZ1szXVs0XSA9CiAg
ICAgewogICAgICAgICB7IDIsIDI2LCAzLCA4IH0sCiAgICAgICAgIHsgMiwgMjMsIDMsIDggfSwK
QEAgLTY4MCwxMCArNjgwLDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3Qo
UmVuZGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWNvbnN0IGZsb2F0IGJhc2VGb250U2l6ZSA9
IDExLjA7Ci1jb25zdCBmbG9hdCBiYXNlQXJyb3dIZWlnaHQgPSA0LjA7Ci1jb25zdCBmbG9hdCBi
YXNlQXJyb3dXaWR0aCA9IDUuMDsKLWNvbnN0IGZsb2F0IGJhc2VTcGFjZUJldHdlZW5BcnJvd3Mg
PSAyLjA7Citjb25zdCBmbG9hdCBiYXNlRm9udFNpemUgPSAxMS4wZjsKK2NvbnN0IGZsb2F0IGJh
c2VBcnJvd0hlaWdodCA9IDQuMGY7Citjb25zdCBmbG9hdCBiYXNlQXJyb3dXaWR0aCA9IDUuMGY7
Citjb25zdCBmbG9hdCBiYXNlU3BhY2VCZXR3ZWVuQXJyb3dzID0gMi4wZjsKIGNvbnN0IGludCBh
cnJvd1BhZGRpbmdMZWZ0ID0gNjsKIGNvbnN0IGludCBhcnJvd1BhZGRpbmdSaWdodCA9IDY7CiBj
b25zdCBpbnQgcGFkZGluZ0JlZm9yZVNlcGFyYXRvciA9IDQ7CkBAIC02OTIsNDQgKzY5Miw0NCBA
QCBjb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCA9IDg7CiBjb25zdCBpbnQgc3R5bGVk
UG9wdXBQYWRkaW5nVG9wID0gMTsKIGNvbnN0IGludCBzdHlsZWRQb3B1cFBhZGRpbmdCb3R0b20g
PSAyOwogCi1zdGF0aWMgdm9pZCBUb3BHcmFkaWVudEludGVycG9sYXRlKCB2b2lkICppbmZvLCBj
b25zdCBDR0Zsb2F0ICppbkRhdGEsIENHRmxvYXQgKm91dERhdGEgKQorc3RhdGljIHZvaWQgVG9w
R3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiBpbmZvLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENH
RmxvYXQqIG91dERhdGEpCiB7Ci0gICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDEsIDEsIDEs
IDAuNCB9OwotICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsgMSwgMSwgMSwgMC4xNSB9Owor
ICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAwLjRmIH07Cisg
ICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAwLjE1ZiB9Owog
ICAgIGZsb2F0IGEgPSBpbkRhdGFbMF07CiAgICAgaW50IGkgPSAwOwotICAgIGZvciggaSA9IDA7
IGkgPCA0OyBpKysgKQotICAgICAgICBvdXREYXRhW2ldID0gKCAxLjAgLSBhICkgKiBkYXJrW2ld
ICsgYSAqIGxpZ2h0W2ldOworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgIG91
dERhdGFbaV0gPSAoMS4wZiAtIGEpICogZGFya1tpXSArIGEgKiBsaWdodFtpXTsKIH0KIAotc3Rh
dGljIHZvaWQgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSggdm9pZCAqaW5mbywgY29uc3QgQ0dG
bG9hdCAqaW5EYXRhLCBDR0Zsb2F0ICpvdXREYXRhICkKK3N0YXRpYyB2b2lkIEJvdHRvbUdyYWRp
ZW50SW50ZXJwb2xhdGUodm9pZCogaW5mbywgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0
KiBvdXREYXRhKQogewotICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAxLCAxLCAxLCAwIH07
Ci0gICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAxLCAxLCAxLCAwLjMgfTsKKyAgICBzdGF0
aWMgZmxvYXQgZGFya1s0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMC4wZiB9OworICAgIHN0YXRp
YyBmbG9hdCBsaWdodFs0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMC4zZiB9OwogICAgIGZsb2F0
IGEgPSBpbkRhdGFbMF07CiAgICAgaW50IGkgPSAwOwotICAgIGZvciggaSA9IDA7IGkgPCA0OyBp
KysgKQotICAgICAgICBvdXREYXRhW2ldID0gKCAxLjAgLSBhICkgKiBkYXJrW2ldICsgYSAqIGxp
Z2h0W2ldOworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgIG91dERhdGFbaV0g
PSAoMS4wZiAtIGEpICogZGFya1tpXSArIGEgKiBsaWdodFtpXTsKIH0KIAotc3RhdGljIHZvaWQg
TWFpbkdyYWRpZW50SW50ZXJwb2xhdGUoIHZvaWQgKmluZm8sIGNvbnN0IENHRmxvYXQgKmluRGF0
YSwgQ0dGbG9hdCAqb3V0RGF0YSApCitzdGF0aWMgdm9pZCBNYWluR3JhZGllbnRJbnRlcnBvbGF0
ZSh2b2lkKiBpbmZvLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCiB7
Ci0gICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDAsIDAsIDAsIDAuMTUgfTsKLSAgICBzdGF0
aWMgZmxvYXQgbGlnaHRbNF0gPSB7IDAsIDAsIDAsIDAgfTsKKyAgICBzdGF0aWMgZmxvYXQgZGFy
a1s0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC4xNWYgfTsKKyAgICBzdGF0aWMgZmxvYXQgbGln
aHRbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYgfTsKICAgICBmbG9hdCBhID0gaW5EYXRh
WzBdOwogICAgIGludCBpID0gMDsKLSAgICBmb3IoIGkgPSAwOyBpIDwgNDsgaSsrICkKLSAgICAg
ICAgb3V0RGF0YVtpXSA9ICggMS4wIC0gYSApICogZGFya1tpXSArIGEgKiBsaWdodFtpXTsKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBh
KSAqIGRhcmtbaV0gKyBhICogbGlnaHRbaV07CiB9CiAKLXN0YXRpYyB2b2lkIFRyYWNrR3JhZGll
bnRJbnRlcnBvbGF0ZSggdm9pZCAqaW5mbywgY29uc3QgQ0dGbG9hdCAqaW5EYXRhLCBDR0Zsb2F0
ICpvdXREYXRhICkKK3N0YXRpYyB2b2lkIFRyYWNrR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiBp
bmZvLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCiB7Ci0gICAgc3Rh
dGljIGZsb2F0IGRhcmtbNF0gPSB7IDAsIDAsIDAsIDAuNjc4IH07Ci0gICAgc3RhdGljIGZsb2F0
IGxpZ2h0WzRdID0geyAwLCAwLCAwLCAwLjEzIH07CisgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0g
PSB7IDAuMGYsIDAuMGYsIDAuMGYsIDAuNjc4ZiB9OworICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0
XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC4xM2YgfTsKICAgICBmbG9hdCBhID0gaW5EYXRhWzBd
OwogICAgIGludCBpID0gMDsKLSAgICBmb3IoIGkgPSAwOyBpIDwgNDsgaSsrICkKLSAgICAgICAg
b3V0RGF0YVtpXSA9ICggMS4wIC0gYSApICogZGFya1tpXSArIGEgKiBsaWdodFtpXTsKKyAgICBm
b3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBhKSAq
IGRhcmtbaV0gKyBhICogbGlnaHRbaV07CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVudUxpc3RCdXR0b25HcmFkaWVudHMoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtNzQwLDE1ICs3
NDAsMTUgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogCiAgICAg
aW50IHJhZGl1cyA9IG8tPnN0eWxlKCktPmJvcmRlclRvcExlZnRSYWRpdXMoKS53aWR0aCgpOwog
Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNzcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJH
QigpOyAgICAKKyAgICBDR0NvbG9yU3BhY2VSZWYgY3NwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRl
RGV2aWNlUkdCKCk7CiAKLSAgICBGbG9hdFJlY3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCBy
LndpZHRoKCksIHIuaGVpZ2h0KCkgLyAyLjApOworICAgIEZsb2F0UmVjdCB0b3BHcmFkaWVudChy
LngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0cnVjdCBD
R0Z1bmN0aW9uQ2FsbGJhY2tzIHRvcENhbGxiYWNrcyA9IHsgMCwgVG9wR3JhZGllbnRJbnRlcnBv
bGF0ZSwgTlVMTCB9OwogICAgIENHRnVuY3Rpb25SZWYgdG9wRnVuY3Rpb24gPSBDR0Z1bmN0aW9u
Q3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZ0b3BDYWxsYmFja3MpOwotICAgIENHU2hh
ZGluZ1JlZiB0b3BTaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50
TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LnkoKSksIAorICAgIENHU2hhZGluZ1Jl
ZiB0b3BTaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZSh0
b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LnkoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCks
IHRvcEdyYWRpZW50LmJvdHRvbSgpKSwgdG9wRnVuY3Rpb24sIGZhbHNlLCBmYWxzZSk7CiAKLSAg
ICBGbG9hdFJlY3QgYm90dG9tR3JhZGllbnQoci54KCkgKyByYWRpdXMsIHIueSgpICsgci5oZWln
aHQoKSAvIDIuMCwgci53aWR0aCgpIC0gMiAqIHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMCk7Cisg
ICAgRmxvYXRSZWN0IGJvdHRvbUdyYWRpZW50KHIueCgpICsgcmFkaXVzLCByLnkoKSArIHIuaGVp
Z2h0KCkgLyAyLjBmLCByLndpZHRoKCkgLSAyLjBmICogcmFkaXVzLCByLmhlaWdodCgpIC8gMi4w
Zik7CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgYm90dG9tQ2FsbGJhY2tzID0geyAw
LCBCb3R0b21HcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAgICAgQ0dGdW5jdGlvblJlZiBi
b3R0b21GdW5jdGlvbiA9IENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwg
JmJvdHRvbUNhbGxiYWNrcyk7CiAgICAgQ0dTaGFkaW5nUmVmIGJvdHRvbVNoYWRpbmcgPSBDR1No
YWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwg
IGJvdHRvbUdyYWRpZW50LnkoKSksCkBAIC03NTYsNDEgKzc1Niw0MSBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxi
YWNrcyBtYWluQ2FsbGJhY2tzID0geyAwLCBNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9
OwogICAgIENHRnVuY3Rpb25SZWYgbWFpbkZ1bmN0aW9uID0gQ0dGdW5jdGlvbkNyZWF0ZShOVUxM
LCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNhbGxiYWNrcyk7Ci0gICAgQ0dTaGFkaW5nUmVmIG1h
aW5TaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLngo
KSwgIHIueSgpKSwgCisgICAgQ0dTaGFkaW5nUmVmIG1haW5TaGFkaW5nID0gQ0dTaGFkaW5nQ3Jl
YXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50TWFrZShyLngo
KSwgci5ib3R0b20oKSksIG1haW5GdW5jdGlvbiwgZmFsc2UsIGZhbHNlKTsKIAotICAgIENHU2hh
ZGluZ1JlZiBsZWZ0U2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2lu
dE1ha2Uoci54KCksICByLnkoKSksIAorICAgIENHU2hhZGluZ1JlZiBsZWZ0U2hhZGluZyA9IENH
U2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2lu
dE1ha2Uoci54KCkgKyByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0aW9uLCBmYWxzZSwgZmFsc2Up
OwogCi0gICAgQ0dTaGFkaW5nUmVmIHJpZ2h0U2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFs
KGNzcGFjZSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpLCAgci55KCkpLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2ludE1ha2Uoci5yaWdo
dCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlvbiwgZmFsc2UsIGZhbHNlICk7ICAgICAg
ICAgICAgCisgICAgQ0dTaGFkaW5nUmVmIHJpZ2h0U2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4
aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpLCAgci55KCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50TWFrZShyLnJp
Z2h0KCkgLSByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0aW9uLCBmYWxzZSwgZmFsc2UgKTsKICAg
ICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29u
dGV4dCwgcik7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChyLCAK
KyAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHIsCiAgICAgICAgIG8t
PnN0eWxlKCktPmJvcmRlclRvcExlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+Ym9yZGVyVG9wUmln
aHRSYWRpdXMoKSwKICAgICAgICAgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygp
LCBvLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpKTsKLSAgICBDR0NvbnRleHRE
cmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hhZGluZyk7ICAKLSAgICBwYWludEluZm8uY29udGV4
dC0+cmVzdG9yZSgpOyAgICAgIAorICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIG1h
aW5TaGFkaW5nKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogCiAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQs
IHRvcEdyYWRpZW50KTsKLSAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlw
KGVuY2xvc2luZ0ludFJlY3QodG9wR3JhZGllbnQpLCAKKyAgICBwYWludEluZm8uY29udGV4dC0+
YWRkUm91bmRlZFJlY3RDbGlwKGVuY2xvc2luZ0ludFJlY3QodG9wR3JhZGllbnQpLAogICAgICAg
ICBvLT5zdHlsZSgpLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCksIG8tPnN0eWxlKCktPmJvcmRlclRv
cFJpZ2h0UmFkaXVzKCksCiAgICAgICAgIEludFNpemUoKSwgSW50U2l6ZSgpKTsKLSAgICBDR0Nv
bnRleHREcmF3U2hhZGluZyhjb250ZXh0LCB0b3BTaGFkaW5nKTsgIAotICAgIHBhaW50SW5mby5j
b250ZXh0LT5yZXN0b3JlKCk7ICAgICAgCisgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4
dCwgdG9wU2hhZGluZyk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIAogICAg
IHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250
ZXh0LCBib3R0b21HcmFkaWVudCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRS
ZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KGJvdHRvbUdyYWRpZW50KSwgCisgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KGJvdHRvbUdyYWRp
ZW50KSwKICAgICAgICAgSW50U2l6ZSgpLCBJbnRTaXplKCksCiAgICAgICAgIG8tPnN0eWxlKCkt
PmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tUmlnaHRS
YWRpdXMoKSk7Ci0gICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgYm90dG9tU2hhZGlu
Zyk7IAorICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIGJvdHRvbVNoYWRpbmcpOwog
ICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAKICAgICBwYWludEluZm8uY29udGV4
dC0+c2F2ZSgpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcik7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChyLCAKKyAgICBwYWludEluZm8uY29u
dGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHIsCiAgICAgICAgIG8tPnN0eWxlKCktPmJvcmRlclRv
cExlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKSwKICAgICAg
ICAgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3Jk
ZXJCb3R0b21SaWdodFJhZGl1cygpKTsKICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0
LCBsZWZ0U2hhZGluZyk7CkBAIC04MTIsNyArODEyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMobywg
cGFpbnRJbmZvLCBib3VuZHMpOwogCiAgICAgZmxvYXQgZm9udFNjYWxlID0gby0+c3R5bGUoKS0+
Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKLSAgICBmbG9hdCBjZW50ZXJZID0gYm91bmRzLnko
KSArIGJvdW5kcy5oZWlnaHQoKSAvIDIuMDsKKyAgICBmbG9hdCBjZW50ZXJZID0gYm91bmRzLnko
KSArIGJvdW5kcy5oZWlnaHQoKSAvIDIuMGY7CiAgICAgZmxvYXQgYXJyb3dIZWlnaHQgPSBiYXNl
QXJyb3dIZWlnaHQgKiBmb250U2NhbGU7CiAgICAgZmxvYXQgYXJyb3dXaWR0aCA9IGJhc2VBcnJv
d1dpZHRoICogZm9udFNjYWxlOwogICAgIGZsb2F0IGxlZnRFZGdlID0gYm91bmRzLnJpZ2h0KCkg
LSBhcnJvd1BhZGRpbmdSaWdodCAtIGFycm93V2lkdGg7CkBAIC04MjIsMTcgKzgyMiwxNyBAQCBi
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNldFBlbihvLT5zdHlsZSgpLT5jb2xvcigpKTsKIAogICAgIEZsb2F0UG9pbnQgYXJy
b3cxWzNdOwotICAgIGFycm93MVswXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UsIGNlbnRlclkgLSBz
cGFjZUJldHdlZW5BcnJvd3MgLyAyLjApOwotICAgIGFycm93MVsxXSA9IEZsb2F0UG9pbnQobGVm
dEVkZ2UgKyBhcnJvd1dpZHRoLCBjZW50ZXJZIC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wKTsK
LSAgICBhcnJvdzFbMl0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMCwg
Y2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMCAtIGFycm93SGVpZ2h0KTsKKyAgICBh
cnJvdzFbMF0gPSBGbG9hdFBvaW50KGxlZnRFZGdlLCBjZW50ZXJZIC0gc3BhY2VCZXR3ZWVuQXJy
b3dzIC8gMi4wZik7CisgICAgYXJyb3cxWzFdID0gRmxvYXRQb2ludChsZWZ0RWRnZSArIGFycm93
V2lkdGgsIGNlbnRlclkgLSBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsKKyAgICBhcnJvdzFb
Ml0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMGYsIGNlbnRlclkgLSBz
cGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmIC0gYXJyb3dIZWlnaHQpOwogCiAgICAgLy8gRHJhdyB0
aGUgdG9wIGFycm93CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMs
IGFycm93MSwgdHJ1ZSk7CiAKICAgICBGbG9hdFBvaW50IGFycm93MlszXTsKLSAgICBhcnJvdzJb
MF0gPSBGbG9hdFBvaW50KGxlZnRFZGdlLCBjZW50ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8g
Mi4wKTsKLSAgICBhcnJvdzJbMV0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCwg
Y2VudGVyWSArIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMCk7Ci0gICAgYXJyb3cyWzJdID0gRmxv
YXRQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGggLyAyLjAsIGNlbnRlclkgKyBzcGFjZUJldHdl
ZW5BcnJvd3MgLyAyLjAgKyBhcnJvd0hlaWdodCk7CisgICAgYXJyb3cyWzBdID0gRmxvYXRQb2lu
dChsZWZ0RWRnZSwgY2VudGVyWSArIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOworICAgIGFy
cm93MlsxXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoLCBjZW50ZXJZICsgc3Bh
Y2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7CisgICAgYXJyb3cyWzJdID0gRmxvYXRQb2ludChsZWZ0
RWRnZSArIGFycm93V2lkdGggLyAyLjBmLCBjZW50ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8g
Mi4wZiArIGFycm93SGVpZ2h0KTsKIAogICAgIC8vIERyYXcgdGhlIGJvdHRvbSBhcnJvdwogICAg
IHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBhcnJvdzIsIHRydWUpOwpA
QCAtODYwLDEwICs4NjAsMTAgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RT
dHlsZQogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQo
c3R5bGUpOwogCiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgCisKICAgICAvLyBIZWln
aHQgaXMgbG9ja2VkIHRvIGF1dG8uCiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykp
OwotICAgIAorCiAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQogICAgIHN0eWxl
LT5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKQEAgLTg4MywxOSArODgzLDE5IEBAIHZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUKIH0KIAogdm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoteyAgICAgICAgCit7CiAgICAgZmxv
YXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7CiAgICAgZmxv
YXQgYXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOwotICAgIAorCiAgICAg
Ly8gV2UncmUgb3ZlcnJpZGluZyB0aGUgcGFkZGluZyB0byBhbGxvdyBmb3IgdGhlIGFycm93IGNv
bnRyb2wuICBXaW5JRSBkb2Vzbid0IGhvbm9yIHBhZGRpbmcgb24gc2VsZWN0cywgc28KICAgICAv
LyB0aGlzIHNob3VsZG4ndCBjYXVzZSBwcm9ibGVtcyBvbiB0aGUgd2ViLiAgSWYgSUU3IGNoYW5n
ZXMgdGhhdCwgd2Ugc2hvdWxkIHJlY29uc2lkZXIgdGhpcy4KICAgICBzdHlsZS0+c2V0UGFkZGlu
Z0xlZnQoTGVuZ3RoKHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQsIEZpeGVkKSk7CiAgICAgc3R5bGUt
PnNldFBhZGRpbmdSaWdodChMZW5ndGgoaW50KGNlaWxmKGFycm93V2lkdGggKyBhcnJvd1BhZGRp
bmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSksIEZp
eGVkKSk7CiAgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHN0eWxlZFBvcHVwUGFkZGlu
Z1RvcCwgRml4ZWQpKTsKICAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoc3R5bGVk
UG9wdXBQYWRkaW5nQm90dG9tLCBGaXhlZCkpOwotICAgIAorCiAgICAgc3R5bGUtPnNldEJvcmRl
clJhZGl1cyhJbnRTaXplKGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSksIGlu
dChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSkpKTsgLy8gRklYTUU6IFJvdW5kIHVw
PwotICAgIAorCiAgICAgY29uc3QgaW50IG1pbkhlaWdodCA9IDE1OwogICAgIHN0eWxlLT5zZXRN
aW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKIH0KQEAgLTkzMyw3ICs5MzMsNyBA
QCBjb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAyOwogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
bGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSBy
OwotICAgIAorCiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9y
aXpvbnRhbEFwcGVhcmFuY2UpIHsKICAgICAgICAgYm91bmRzLnNldEhlaWdodCh0cmFja1dpZHRo
KTsKICAgICAgICAgYm91bmRzLnNldFkoci55KCkgKyByLmhlaWdodCgpIC8gMiAtIHRyYWNrV2lk
dGggLyAyKTsKQEAgLTk0MSw0NSArOTQxLDQ0IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
U2xpZGVyVHJhY2soUmUKICAgICAgICAgYm91bmRzLnNldFdpZHRoKHRyYWNrV2lkdGgpOwogICAg
ICAgICBib3VuZHMuc2V0WChyLngoKSArIHIud2lkdGgoKSAvIDIgLSB0cmFja1dpZHRoIC8gMik7
CiAgICAgfQotICAgIAorCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQ0dD
b2xvclNwYWNlUmVmIGNzcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOyAgICAK
KyAgICBDR0NvbG9yU3BhY2VSZWYgY3NwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdC
KCk7CiAKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIENHQ29udGV4dENsaXBU
b1JlY3QoY29udGV4dCwgYm91bmRzKTsKLSAgICAKKwogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2Fs
bGJhY2tzIG1haW5DYWxsYmFja3MgPSB7IDAsIFRyYWNrR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVM
TCB9OwogICAgIENHRnVuY3Rpb25SZWYgbWFpbkZ1bmN0aW9uID0gQ0dGdW5jdGlvbkNyZWF0ZShO
VUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNhbGxiYWNrcyk7CiAgICAgQ0dTaGFkaW5nUmVm
IG1haW5TaGFkaW5nOwotICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVy
VmVydGljYWxBcHBlYXJhbmNlKSB7Ci0gICAgICAgIG1haW5TaGFkaW5nID0gQ0dTaGFkaW5nQ3Jl
YXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMueCgpLCAgYm91bmRzLmJvdHRvbSgp
KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0dQb2ludE1ha2UoYm91bmRzLnJpZ2h0KCksIGJvdW5kcy5ib3R0b20oKSksIG1haW5GdW5jdGlv
biwgZmFsc2UsIGZhbHNlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtYWluU2hhZGluZyA9IENH
U2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5k
cy55KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDR1BvaW50TWFrZShib3VuZHMueCgpLCBib3VuZHMuYm90dG9tKCkpLCBtYWluRnVuY3Rp
b24sIGZhbHNlLCBmYWxzZSk7Ci0gICAgfQotICAgIAorICAgIGlmIChvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxBcHBlYXJhbmNlKQorICAgICAgICBtYWluU2hhZGlu
ZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwg
IGJvdW5kcy5ib3R0b20oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDR1BvaW50TWFrZShib3VuZHMucmlnaHQoKSwgYm91bmRzLmJvdHRvbSgp
KSwgbWFpbkZ1bmN0aW9uLCBmYWxzZSwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgbWFpblNo
YWRpbmcgPSBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy54
KCksICBib3VuZHMueSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENHUG9pbnRNYWtlKGJvdW5kcy54KCksIGJvdW5kcy5ib3R0b20oKSksIG1h
aW5GdW5jdGlvbiwgZmFsc2UsIGZhbHNlKTsKKwogICAgIEludFNpemUgcmFkaXVzKHRyYWNrUmFk
aXVzLCB0cmFja1JhZGl1cyk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0
Q2xpcChib3VuZHMsIAorICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAo
Ym91bmRzLAogICAgICAgICByYWRpdXMsIHJhZGl1cywKICAgICAgICAgcmFkaXVzLCByYWRpdXMp
OwotICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIG1haW5TaGFkaW5nKTsgIAotICAg
IHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7ICAgICAKKyAgICBDR0NvbnRleHREcmF3U2hh
ZGluZyhjb250ZXh0LCBtYWluU2hhZGluZyk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3Rv
cmUoKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotY29uc3QgZmxvYXQgdmVydGljYWxTbGlk
ZXJIZWlnaHRQYWRkaW5nID0gMC4xOworY29uc3QgZmxvYXQgdmVydGljYWxTbGlkZXJIZWlnaHRQ
YWRkaW5nID0gMC4xZjsKIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCi17ICAgCit7CiAgICAgTlNTbGlkZXJDZWxsKiBzbGlkZXJUaHVt
YkNlbGw7CiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZl
cnRpY2FsQXBwZWFyYW5jZSkKICAgICAgICAgc2xpZGVyVGh1bWJDZWxsID0gc2xpZGVyVGh1bWJW
ZXJ0aWNhbENlbGw7CiAgICAgZWxzZQogICAgICAgICBzbGlkZXJUaHVtYkNlbGwgPSBzbGlkZXJU
aHVtYkhvcml6b250YWxDZWxsOwotICAgCisKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKIAogICAg
IC8vIERldGVybWluZSB0aGUgd2lkdGggYW5kIGhlaWdodCBuZWVkZWQgZm9yIHRoZSBjb250cm9s
IGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBwYWludGluZy4KQEAgLTk5MCwzNSArOTg5LDM1IEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIoUmUKICAgICAgICAgaWYgKG8t
PnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsQXBwZWFyYW5jZSkK
ICAgICAgICAgICAgIHNsaWRlclZlcnRpY2FsQ2VsbElzUHJlc3NlZCA9IGZhbHNlOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzbGlkZXJIb3Jpem9udGFsQ2VsbElzUHJlc3NlZCA9IGZhbHNl
OyAgICAgICAgCisgICAgICAgICAgICBzbGlkZXJIb3Jpem9udGFsQ2VsbElzUHJlc3NlZCA9IGZh
bHNlOwogICAgIH0KICAgICBbc2xpZGVyVGh1bWJDZWxsIHNldENvbnRyb2xTaXplOk5TU21hbGxD
b250cm9sU2l6ZV07CiAKICAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3Bv
bmQgdG8uCiAgICAgdXBkYXRlRW5hYmxlZFN0YXRlKHNsaWRlclRodW1iQ2VsbCwgby0+cGFyZW50
KCkpOwogICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShzbGlkZXJUaHVtYkNlbGwsIG8tPnBhcmVudCgp
KTsKLSAgICAKKwogICAgIC8vIFVwZGF0ZSB0aGUgcHJlc3NlZCBzdGF0ZSB1c2luZyB0aGUgTlND
ZWxsIHRyYWNraW5nIG1ldGhvZHMsIHNpbmNlIHRoYXQncyBob3cgTlNTbGlkZXJDZWxsIGtlZXBz
IHRyYWNrIG9mIGl0LgogICAgIGJvb2wgb2xkUHJlc3NlZDsKICAgICBpZiAoby0+c3R5bGUoKS0+
YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxBcHBlYXJhbmNlKQogICAgICAgICBv
bGRQcmVzc2VkID0gc2xpZGVyVmVydGljYWxDZWxsSXNQcmVzc2VkOwogICAgIGVsc2UKICAgICAg
ICAgb2xkUHJlc3NlZCA9IHNsaWRlckhvcml6b250YWxDZWxsSXNQcmVzc2VkOwotICAgIAorCiAg
ICAgYm9vbCBwcmVzc2VkID0gc3RhdGljX2Nhc3Q8UmVuZGVyU2xpZGVyKj4oby0+cGFyZW50KCkp
LT5pbkRyYWdNb2RlKCk7Ci0gICAgCisKICAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
ID09IFNsaWRlclRodW1iVmVydGljYWxBcHBlYXJhbmNlKQogICAgICAgICBzbGlkZXJWZXJ0aWNh
bENlbGxJc1ByZXNzZWQgPSBwcmVzc2VkOwogICAgIGVsc2UKLSAgICAgICAgc2xpZGVySG9yaXpv
bnRhbENlbGxJc1ByZXNzZWQgPSBwcmVzc2VkOyAKLSAgICAKLSAgICBpZiAocHJlc3NlZCAhPSBv
bGRQcmVzc2VkKSB7IAorICAgICAgICBzbGlkZXJIb3Jpem9udGFsQ2VsbElzUHJlc3NlZCA9IHBy
ZXNzZWQ7CisKKyAgICBpZiAocHJlc3NlZCAhPSBvbGRQcmVzc2VkKSB7CiAgICAgICAgIGlmIChw
cmVzc2VkKQogICAgICAgICAgICAgW3NsaWRlclRodW1iQ2VsbCBzdGFydFRyYWNraW5nQXQ6TlNQ
b2ludCgpIGluVmlldzpuaWxdOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBbc2xpZGVyVGh1
bWJDZWxsIHN0b3BUcmFja2luZzpOU1BvaW50KCkgYXQ6TlNQb2ludCgpIGluVmlldzpuaWwgbW91
c2VJc1VwOllFU107CiAgICAgfQotICAgIAorCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IHI7CiAg
ICAgLy8gTWFrZSB0aGUgaGVpZ2h0IG9mIHRoZSB2ZXJ0aWNhbCBzbGlkZXIgc2xpZ2h0bHkgbGFy
Z2VyIHNvIE5TU2xpZGVyQ2VsbCB3aWxsIGRyYXcgYSB2ZXJ0aWNhbCBzbGlkZXIuCiAgICAgaWYg
KG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsQXBwZWFyYW5j
ZSkKQEAgLTEwNDEsNCArMTA0MCw0IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRl
clRodW1iU2kKICAgICB9CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxODIzNSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
QEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAi
SlNFZGl0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJCUi5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTUyLDIwICs1MiwxOSBAQCB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYs
IGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiwgY29uc3QgSW50UmVj
dCYgcGFpbnREaXJ0eVJlY3QsIGludCBpbmRlbnQgPSAwKTsKIAogI2lmbmRlZiBTVkdfU1VQUE9S
VAotc3RhdGljIFRleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbSAmdHMsIGNvbnN0IElu
dFJlY3QgJnIpCitzdGF0aWMgVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgSW50UmVjdCYgcikKIHsKICAgICByZXR1cm4gdHMgPDwgImF0ICgiIDw8IHIueCgpIDw8
ICIsIiA8PCByLnkoKSA8PCAiKSBzaXplICIgPDwgci53aWR0aCgpIDw8ICJ4IiA8PCByLmhlaWdo
dCgpOwogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0gJnRz
LCBpbnQgaW5kZW50KQorc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGlu
dCBpbmRlbnQpCiB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gaW5kZW50OyArK2kpIHsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSAhPSBpbmRlbnQ7ICsraSkKICAgICAgICAgdHMgPDwgIiAgIjsK
LSAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50Qm9yZGVyU3R5bGUoVGV4dFN0cmVhbSAmdHMs
IGNvbnN0IFJlbmRlck9iamVjdCAmbywgY29uc3QgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxlKQor
c3RhdGljIHZvaWQgcHJpbnRCb3JkZXJTdHlsZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
T2JqZWN0JiBvLCBjb25zdCBFQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUpCiB7CiAgICAgc3dpdGNo
IChib3JkZXJTdHlsZSkgewogICAgICAgICBjYXNlIEJOT05FOgpAQCAtOTksNDMgKzk4LDQyIEBA
IHN0YXRpYyB2b2lkIHByaW50Qm9yZGVyU3R5bGUoVGV4dFN0cmVhbSAKICAgICAgICAgICAgIHRz
IDw8ICJkb3VibGUiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAorCiAgICAgdHMg
PDwgIiAiOwogfQogCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBnZXRUYWdOYW1lKE5vZGUgKm4p
CitzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBnZXRUYWdOYW1lKE5vZGUqIG4pCiB7CiAgICAgaWYg
KG4tPmlzRG9jdW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiAiIjsKICAgICBpZiAobi0+aXND
b21tZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gIkNPTU1FTlQiOwotICAgIHJldHVybiBuLT5u
b2RlTmFtZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKTsgCisgICAgcmV0dXJuIG4tPm5vZGVOYW1lKCku
ZGVwcmVjYXRlZFN0cmluZygpOwogfQogCi1zdGF0aWMgYm9vbCBpc0VtcHR5T3JVbnN0eWxlZEFw
cGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUgKm5vZGUpCitzdGF0aWMgYm9vbCBpc0VtcHR5T3JVbnN0
eWxlZEFwcGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlIHx8
ICFub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW5vZGUtPmhhc1RhZ05hbWUoc3BhblRhZykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IEhUTUxFbGVtZW50ICplbGVtID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQgKj4obm9kZSk7CisgICAgY29uc3QgSFRNTEVsZW1l
bnQqIGVsZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudCo+KG5vZGUpOwogICAgIGlm
IChlbGVtLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSAiQXBwbGUtc3R5bGUtc3BhbiIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmICghbm9kZS0+aGFzQ2hpbGROb2Rl
cygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiAqaW5saW5lU3R5bGVEZWNsID0gZWxlbS0+aW5saW5lU3R5bGVEZWNsKCk7CisKKyAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGVEZWNsID0gZWxlbS0+aW5s
aW5lU3R5bGVEZWNsKCk7CiAgICAgcmV0dXJuICghaW5saW5lU3R5bGVEZWNsIHx8IGlubGluZVN0
eWxlRGVjbC0+bGVuZ3RoKCkgPT0gMCk7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtICZvcGVyYXRv
cjw8KFRleHRTdHJlYW0gJnRzLCBjb25zdCBSZW5kZXJPYmplY3QgJm8pCitzdGF0aWMgVGV4dFN0
cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvKQog
ewogICAgIHRzIDw8IG8ucmVuZGVyTmFtZSgpOwotICAgIAotICAgIGlmIChvLnN0eWxlKCkgJiYg
by5zdHlsZSgpLT56SW5kZXgoKSkgeworCisgICAgaWYgKG8uc3R5bGUoKSAmJiBvLnN0eWxlKCkt
PnpJbmRleCgpKQogICAgICAgICB0cyA8PCAiIHpJOiAiIDw8IG8uc3R5bGUoKS0+ekluZGV4KCk7
Ci0gICAgfQotICAgIAorCiAgICAgaWYgKG8uZWxlbWVudCgpKSB7CiAgICAgICAgIERlcHJlY2F0
ZWRTdHJpbmcgdGFnTmFtZSA9IGdldFRhZ05hbWUoby5lbGVtZW50KCkpOwogICAgICAgICBpZiAo
IXRhZ05hbWUuaXNFbXB0eSgpKSB7CkBAIC0xNDYsMTAgKzE0NCwxMCBAQCBzdGF0aWMgVGV4dFN0
cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtCiAgICAgICAgICAgICAgICAgdHMgPDwgIiAqZW1w
dHkgb3IgdW5zdHlsZWQgQXBwbGVTdHlsZVNwYW4qIjsKICAgICAgICAgfQogICAgIH0KLSAgICAK
KwogICAgIEludFJlY3QgcihvLnhQb3MoKSwgby55UG9zKCksIG8ud2lkdGgoKSwgby5oZWlnaHQo
KSk7CiAgICAgdHMgPDwgIiAiIDw8IHI7Ci0gICAgCisKICAgICBpZiAoIW8uaXNUZXh0KCkpIHsK
ICAgICAgICAgaWYgKG8ucGFyZW50KCkgJiYgKG8ucGFyZW50KCktPnN0eWxlKCktPmNvbG9yKCkg
IT0gby5zdHlsZSgpLT5jb2xvcigpKSkKICAgICAgICAgICAgIHRzIDw8ICIgW2NvbG9yPSIgPDwg
by5zdHlsZSgpLT5jb2xvcigpLm5hbWUoKSA8PCAiXSI7CkBAIC0xNTcsMTAgKzE1NSwxMCBAQCBz
dGF0aWMgVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtCiAgICAgICAgICAgICBvLnN0
eWxlKCktPmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSAmJiBvLnN0eWxlKCktPmJhY2tncm91
bmRDb2xvcigpLnJnYigpKQogICAgICAgICAgICAgLy8gRG8gbm90IGR1bXAgaW52YWxpZCBvciB0
cmFuc3BhcmVudCBiYWNrZ3JvdW5kcywgc2luY2UgdGhhdCBpcyB0aGUgZGVmYXVsdC4KICAgICAg
ICAgICAgIHRzIDw8ICIgW2JnY29sb3I9IiA8PCBvLnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigp
Lm5hbWUoKSA8PCAiXSI7Ci0gICAgCisKICAgICAgICAgaWYgKG8uYm9yZGVyVG9wKCkgfHwgby5i
b3JkZXJSaWdodCgpIHx8IG8uYm9yZGVyQm90dG9tKCkgfHwgby5ib3JkZXJMZWZ0KCkpIHsKICAg
ICAgICAgICAgIHRzIDw8ICIgW2JvcmRlcjoiOwotICAgICAgICAgICAgCisKICAgICAgICAgICAg
IEJvcmRlclZhbHVlIHByZXZCb3JkZXI7CiAgICAgICAgICAgICBpZiAoby5zdHlsZSgpLT5ib3Jk
ZXJUb3AoKSAhPSBwcmV2Qm9yZGVyKSB7CiAgICAgICAgICAgICAgICAgcHJldkJvcmRlciA9IG8u
c3R5bGUoKS0+Ym9yZGVyVG9wKCk7CkBAIC0xNzAsMTEgKzE2OCwxMiBAQCBzdGF0aWMgVGV4dFN0
cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtCiAgICAgICAgICAgICAgICAgICAgIHRzIDw8ICIg
KCIgPDwgby5ib3JkZXJUb3AoKSA8PCAicHggIjsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRC
b3JkZXJTdHlsZSh0cywgbywgby5zdHlsZSgpLT5ib3JkZXJUb3BTdHlsZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgQ29sb3IgY29sID0gby5zdHlsZSgpLT5ib3JkZXJUb3BDb2xvcigpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNvbC5pc1ZhbGlkKCkpIGNvbCA9IG8uc3R5bGUoKS0+Y29s
b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2wuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29sID0gby5zdHlsZSgpLT5jb2xvcigpOwogICAgICAgICAgICAgICAg
ICAgICB0cyA8PCBjb2wubmFtZSgpIDw8ICIpIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKG8uc3R5bGUoKS0+Ym9yZGVy
UmlnaHQoKSAhPSBwcmV2Qm9yZGVyKSB7CiAgICAgICAgICAgICAgICAgcHJldkJvcmRlciA9IG8u
c3R5bGUoKS0+Ym9yZGVyUmlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAoIW8uYm9yZGVyUmln
aHQoKSkKQEAgLTE4MywxMSArMTgyLDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtICZvcGVyYXRvcjw8
KFRleHRTdHJlYW0KICAgICAgICAgICAgICAgICAgICAgdHMgPDwgIiAoIiA8PCBvLmJvcmRlclJp
Z2h0KCkgPDwgInB4ICI7CiAgICAgICAgICAgICAgICAgICAgIHByaW50Qm9yZGVyU3R5bGUodHMs
IG8sIG8uc3R5bGUoKS0+Ym9yZGVyUmlnaHRTdHlsZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
Q29sb3IgY29sID0gby5zdHlsZSgpLT5ib3JkZXJSaWdodENvbG9yKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghY29sLmlzVmFsaWQoKSkgY29sID0gby5zdHlsZSgpLT5jb2xvcigpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNvbC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb2wgPSBvLnN0eWxlKCktPmNvbG9yKCk7CiAgICAgICAgICAgICAgICAgICAgIHRzIDw8
IGNvbC5uYW1lKCkgPDwgIikiOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoby5zdHlsZSgpLT5ib3JkZXJCb3R0b20oKSAh
PSBwcmV2Qm9yZGVyKSB7CiAgICAgICAgICAgICAgICAgcHJldkJvcmRlciA9IG8uc3R5bGUoKS0+
Ym9yZGVyQm90dG9tKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFvLmJvcmRlckJvdHRvbSgpKQpA
QCAtMTk2LDI4ICsxOTYsMzAgQEAgc3RhdGljIFRleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0
cmVhbQogICAgICAgICAgICAgICAgICAgICB0cyA8PCAiICgiIDw8IG8uYm9yZGVyQm90dG9tKCkg
PDwgInB4ICI7CiAgICAgICAgICAgICAgICAgICAgIHByaW50Qm9yZGVyU3R5bGUodHMsIG8sIG8u
c3R5bGUoKS0+Ym9yZGVyQm90dG9tU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIENvbG9y
IGNvbCA9IG8uc3R5bGUoKS0+Ym9yZGVyQm90dG9tQ29sb3IoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb2wuaXNWYWxpZCgpKSBjb2wgPSBvLnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghY29sLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbCA9IG8uc3R5bGUoKS0+Y29sb3IoKTsKICAgICAgICAgICAgICAgICAgICAgdHMgPDwgY29s
Lm5hbWUoKSA8PCAiKSI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCisKICAgICAgICAgICAgIGlmIChvLnN0eWxlKCktPmJvcmRlckxlZnQoKSAhPSBwcmV2
Qm9yZGVyKSB7CiAgICAgICAgICAgICAgICAgcHJldkJvcmRlciA9IG8uc3R5bGUoKS0+Ym9yZGVy
TGVmdCgpOwogICAgICAgICAgICAgICAgIGlmICghby5ib3JkZXJMZWZ0KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHRzIDw8ICIgbm9uZSI7Ci0gICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
dHMgPDwgIiAoIiA8PCBvLmJvcmRlckxlZnQoKSA8PCAicHggIjsKICAgICAgICAgICAgICAgICAg
ICAgcHJpbnRCb3JkZXJTdHlsZSh0cywgbywgby5zdHlsZSgpLT5ib3JkZXJMZWZ0U3R5bGUoKSk7
CiAgICAgICAgICAgICAgICAgICAgIENvbG9yIGNvbCA9IG8uc3R5bGUoKS0+Ym9yZGVyTGVmdENv
bG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29sLmlzVmFsaWQoKSkgY29sID0gby5z
dHlsZSgpLT5jb2xvcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBvLnN0eWxlKCktPmNvbG9yKCk7CiAgICAg
ICAgICAgICAgICAgICAgIHRzIDw8IGNvbC5uYW1lKCkgPDwgIikiOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0cyA8PCAiXSI7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoby5pc1RhYmxlQ2VsbCgpKSB7CiAg
ICAgICAgIGNvbnN0IFJlbmRlclRhYmxlQ2VsbCYgYyA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRl
clRhYmxlQ2VsbCY+KG8pOwogICAgICAgICB0cyA8PCAiIFtyPSIgPDwgYy5yb3coKSA8PCAiIGM9
IiA8PCBjLmNvbCgpIDw8ICIgcnM9IiA8PCBjLnJvd1NwYW4oKSA8PCAiIGNzPSIgPDwgYy5jb2xT
cGFuKCkgPDwgIl0iOwpAQCAtMjYzLDEwICsyNjUsMTAgQEAgc3RhdGljIHZvaWQgd3JpdGVUZXh0
UnVuKFRleHRTdHJlYW0mIHRzLAogICAgIH0KICAgICB0cyA8PCAiOiAiCiAgICAgICAgIDw8IHF1
b3RlQW5kRXNjYXBlTm9uUHJpbnRhYmxlcyhvLmRhdGEoKS5zdWJzdHJpbmcocnVuLm1fc3RhcnQs
IHJ1bi5tX2xlbikpCi0gICAgICAgIDw8ICJcbiI7IAorICAgICAgICA8PCAiXG4iOwogfQogCi12
b2lkIHdyaXRlKFRleHRTdHJlYW0gJnRzLCBjb25zdCBSZW5kZXJPYmplY3QgJm8sIGludCBpbmRl
bnQpCit2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIGlu
dCBpbmRlbnQpCiB7CiAjaWZkZWYgU1ZHX1NVUFBPUlQKICAgICAvLyBGSVhNRTogIEEgaGFja2lz
aCB3YXkgdG8gZG9pbmcgb3VyIG93biAidmlydHVhbCIgZGlzcGF0Y2gKQEAgLTI4MCwxMyArMjgy
LDEzIEBAIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSAmdHMsIGNvbnN0IFJlbmRlck8KICAgICB9CiAj
ZW5kaWYKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICAKKwogICAgIHRzIDw8IG8g
PDwgIlxuIjsKLSAgICAKKwogICAgIGlmIChvLmlzVGV4dCgpICYmICFvLmlzQlIoKSkgewogICAg
ICAgICBjb25zdCBSZW5kZXJUZXh0JiB0ZXh0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyVGV4
dCY+KG8pOwogICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IHRleHQuZmlyc3RUZXh0
Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgICAgICB3cml0
ZUluZGVudCh0cywgaW5kZW50KzEpOworICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVu
dCArIDEpOwogICAgICAgICAgICAgd3JpdGVUZXh0UnVuKHRzLCB0ZXh0LCAqYm94KTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTI5Niw3ICsyOTgsNyBAQCB2b2lkIHdyaXRlKFRleHRTdHJlYW0gJnRz
LCBjb25zdCBSZW5kZXJPCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgd3JpdGUodHMs
ICpjaGlsZCwgaW5kZW50ICsgMSk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKG8uaXNXaWRnZXQo
KSkgewogICAgICAgICBXaWRnZXQqIHdpZGdldCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlcldp
ZGdldCY+KG8pLndpZGdldCgpOwogICAgICAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+aXNGcmFt
ZVZpZXcoKSkgewpAQCAtMzA2LDIwICszMDgsMTkgQEAgdm9pZCB3cml0ZShUZXh0U3RyZWFtICZ0
cywgY29uc3QgUmVuZGVyTwogICAgICAgICAgICAgICAgIHZpZXctPmxheW91dCgpOwogICAgICAg
ICAgICAgICAgIFJlbmRlckxheWVyKiBsID0gcm9vdC0+bGF5ZXIoKTsKICAgICAgICAgICAgICAg
ICBpZiAobCkKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVMYXllcnModHMsIGwsIGwsIEludFJl
Y3QobC0+eFBvcygpLCBsLT55UG9zKCksIGwtPndpZHRoKCksIGwtPmhlaWdodCgpKSwgaW5kZW50
KzEpOworICAgICAgICAgICAgICAgICAgICB3cml0ZUxheWVycyh0cywgbCwgbCwgSW50UmVjdChs
LT54UG9zKCksIGwtPnlQb3MoKSwgbC0+d2lkdGgoKSwgbC0+aGVpZ2h0KCkpLCBpbmRlbnQgKyAx
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgd3Jp
dGUoVGV4dFN0cmVhbSAmdHMsIFJlbmRlckxheWVyICZsLAorc3RhdGljIHZvaWQgd3JpdGUoVGV4
dFN0cmVhbSYgdHMsIFJlbmRlckxheWVyJiBsLAogICAgICAgICAgICAgICAgICAgY29uc3QgSW50
UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEludFJlY3QmIGJhY2tncm91bmRDbGlwUmVjdCwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IEludFJlY3QmIG91dGxpbmVDbGlwUmVjdCwKICAg
ICAgICAgICAgICAgICAgIGludCBsYXllclR5cGUgPSAwLCBpbnQgaW5kZW50ID0gMCkKIHsKICAg
ICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAgICAKLSAgICB0cyA8PCAibGF5ZXIiOwotICAg
IHRzIDw8ICIgIiA8PCBsYXllckJvdW5kczsKKworICAgIHRzIDw8ICJsYXllciIgPDwgIiAiIDw8
IGxheWVyQm91bmRzOwogCiAgICAgaWYgKCFsYXllckJvdW5kcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgaWYgKCFiYWNrZ3JvdW5kQ2xpcFJlY3QuY29udGFpbnMobGF5ZXJCb3VuZHMpKQpAQCAtMzQ1
LDI0ICszNDYsMjQgQEAgc3RhdGljIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSAmdHMsIFJlbmRlcgog
ICAgICAgICB0cyA8PCAiIGxheWVyVHlwZTogYmFja2dyb3VuZCBvbmx5IjsKICAgICBlbHNlIGlm
IChsYXllclR5cGUgPT0gMSkKICAgICAgICAgdHMgPDwgIiBsYXllclR5cGU6IGZvcmVncm91bmQg
b25seSI7Ci0gICAgCisKICAgICB0cyA8PCAiXG4iOwogCiAgICAgaWYgKGxheWVyVHlwZSAhPSAt
MSkKICAgICAgICAgd3JpdGUodHMsICpsLnJlbmRlcmVyKCksIGluZGVudCArIDEpOwogfQotICAg
IAotc3RhdGljIHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSAmdHMsIGNvbnN0IFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBsLAorCitzdGF0aWMgdm9pZCB3cml0ZUxheWVy
cyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5
ZXIqIGwsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5
UmVjdCwgaW50IGluZGVudCkKIHsKICAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ug
c2hvdWxkIHVzZS4KICAgICBJbnRSZWN0IGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVj
dFRvQXBwbHksIG91dGxpbmVSZWN0OwogICAgIGwtPmNhbGN1bGF0ZVJlY3RzKHJvb3RMYXllciwg
cGFpbnREaXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHks
IG91dGxpbmVSZWN0KTsKLSAgICAKKwogICAgIC8vIEVuc3VyZSBvdXIgbGlzdHMgYXJlIHVwLXRv
LWRhdGUuCiAgICAgbC0+dXBkYXRlWk9yZGVyTGlzdHMoKTsKICAgICBsLT51cGRhdGVPdmVyZmxv
d0xpc3QoKTsKLSAgICAKKwogICAgIGJvb2wgc2hvdWxkUGFpbnQgPSBsLT5pbnRlcnNlY3RzRGFt
YWdlUmVjdChsYXllckJvdW5kcywgZGFtYWdlUmVjdCk7CiAgICAgVmVjdG9yPFJlbmRlckxheWVy
Kj4qIG5lZ0xpc3QgPSBsLT5uZWdaT3JkZXJMaXN0KCk7CiAgICAgaWYgKHNob3VsZFBhaW50ICYm
IG5lZ0xpc3QgJiYgbmVnTGlzdC0+c2l6ZSgpID4gMCkKQEAgLTM4OSwxOCArMzkwLDE4IEBAIHN0
YXRpYyB2b2lkIHdyaXRlTGF5ZXJzKFRleHRTdHJlYW0gJnRzLCAKICAgICB9CiB9CiAKLXN0YXRp
YyBEZXByZWNhdGVkU3RyaW5nIG5vZGVQb3NpdGlvbihOb2RlICpub2RlKQorc3RhdGljIERlcHJl
Y2F0ZWRTdHJpbmcgbm9kZVBvc2l0aW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgRGVwcmVjYXRlZFN0
cmluZyByZXN1bHQ7CiAKLSAgICBOb2RlICpwOwotICAgIGZvciAoTm9kZSAqbiA9IG5vZGU7IG47
IG4gPSBwKSB7Ci0gICAgICAgIHAgPSBuLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIGlmICghcCkK
LSAgICAgICAgICAgIHAgPSBuLT5zaGFkb3dQYXJlbnROb2RlKCk7CisgICAgTm9kZSogcGFyZW50
OworICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG47IG4gPSBwYXJlbnQpIHsKKyAgICAgICAgcGFy
ZW50ID0gbi0+cGFyZW50Tm9kZSgpOworICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAg
IHBhcmVudCA9IG4tPnNoYWRvd1BhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKG4gIT0gbm9kZSkK
ICAgICAgICAgICAgIHJlc3VsdCArPSAiIG9mICI7Ci0gICAgICAgIGlmIChwKQorICAgICAgICBp
ZiAocGFyZW50KQogICAgICAgICAgICAgcmVzdWx0ICs9ICJjaGlsZCAiICsgRGVwcmVjYXRlZFN0
cmluZzo6bnVtYmVyKG4tPm5vZGVJbmRleCgpKSArICIgeyIgKyBnZXRUYWdOYW1lKG4pICsgIn0i
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgKz0gImRvY3VtZW50IjsKQEAgLTQw
OSwxNCArNDEwLDE0IEBAIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIG5vZGVQb3NpdGlvbihOb2QK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCB3cml0ZVNlbGVjdGlvbihUZXh0
U3RyZWFtICZ0cywgY29uc3QgUmVuZGVyT2JqZWN0ICpvKQorc3RhdGljIHZvaWQgd3JpdGVTZWxl
Y3Rpb24oVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCogbykKIHsKLSAgICBOb2Rl
ICpuID0gby0+ZWxlbWVudCgpOworICAgIE5vZGUqIG4gPSBvLT5lbGVtZW50KCk7CiAgICAgaWYg
KCFuIHx8ICFuLT5pc0RvY3VtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEb2N1
bWVudCAqZG9jID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihuKTsKLSAgICBGcmFtZSAqZnJhbWUg
PSBkb2MtPmZyYW1lKCk7CisgICAgRG9jdW1lbnQqIGRvYyA9IHN0YXRpY19jYXN0PERvY3VtZW50
Kj4obik7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybjsKIApAQCAtNDI1LDExICs0MjYsMTAgQEAgc3RhdGljIHZvaWQgd3Jp
dGVTZWxlY3Rpb24oVGV4dFN0cmVhbSAmdAogICAgICAgICB0cyA8PCAiY2FyZXQ6IHBvc2l0aW9u
ICIgPDwgc2VsZWN0aW9uLnN0YXJ0KCkub2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlv
bihzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmFmZmlu
aXR5KCkgPT0gVVBTVFJFQU0pCiAgICAgICAgICAgICB0cyA8PCAiICh1cHN0cmVhbSBhZmZpbml0
eSkiOwotICAgICAgICB0cyA8PCAiXG4iOyAKLSAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5pc1Jh
bmdlKCkpIHsKKyAgICAgICAgdHMgPDwgIlxuIjsKKyAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5p
c1JhbmdlKCkpCiAgICAgICAgIHRzIDw8ICJzZWxlY3Rpb24gc3RhcnQ6IHBvc2l0aW9uICIgPDwg
c2VsZWN0aW9uLnN0YXJ0KCkub2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxl
Y3Rpb24uc3RhcnQoKS5ub2RlKCkpIDw8ICJcbiIKLSAgICAgICAgICAgPDwgInNlbGVjdGlvbiBl
bmQ6ICAgcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24uZW5kKCkub2Zmc2V0KCkgPDwgIiBvZiAiIDw8
IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCkubm9kZSgpKSA8PCAiXG4iOyAKLSAgICB9Cisg
ICAgICAgICAgIDw8ICJzZWxlY3Rpb24gZW5kOiAgIHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLmVu
ZCgpLm9mZnNldCgpIDw8ICIgb2YgIiA8PCBub2RlUG9zaXRpb24oc2VsZWN0aW9uLmVuZCgpLm5v
ZGUoKSkgPDwgIlxuIjsKIH0KIAogRGVwcmVjYXRlZFN0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFJlbmRlck9iamVjdCogbykKQEAgLTQ1Myw0ICs0NTMsNCBAQCBEZXByZWNhdGVkU3RyaW5n
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oCiAgICAgcmV0dXJuIHM7CiB9CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHJl
dmlzaW9uIDE4MjM1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMCwxMCArMjAsMTIgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAog
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2lmbmRlZiBSZW5kZXJUcmVlQXNUZXh0X2gKKyNk
ZWZpbmUgUmVuZGVyVHJlZUFzVGV4dF9oCisKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzLDQgKzM1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIERlcHJlY2F0ZWRTdHJpbmcgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihSZW5kZXJPYmplY3Qq
KTsKICAgICB2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJPYmplY3QmLCBpbnQg
aW5kZW50ID0gMCk7CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJl
bmRlclRyZWVBc1RleHRfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9u
IDE4MjM1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDQzICszMCwzNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vI2RlZmlu
ZSBCT1hfREVCVUcKLQotUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2RlLCBGcmFtZVZp
ZXcgKnZpZXcpCitSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZyYW1lVmlldyog
dmlldykKICAgICA6IFJlbmRlckJsb2NrKG5vZGUpCisgICAgLCBtX2ZyYW1lVmlldyh2aWV3KQor
ICAgICwgbV9zZWxlY3Rpb25TdGFydCgwKQorICAgICwgbV9zZWxlY3Rpb25FbmQoMCkKKyAgICAs
IG1fc2VsZWN0aW9uU3RhcnRQb3MoLTEpCisgICAgLCBtX3NlbGVjdGlvbkVuZFBvcygtMSkKKyAg
ICAsIG1fcHJpbnRpbmdNb2RlKGZhbHNlKQorICAgICwgbV9wcmludEltYWdlcyhmYWxzZSkKKyAg
ICAsIG1fbWF4aW1hbE91dGxpbmVTaXplKDApCisgICAgLCBtX2ZsZXhCb3hJbkZpcnN0TGF5b3V0
KDApCiB7CiAgICAgLy8gQ2xlYXIgb3VyIGFub255bW91cyBiaXQsIHNldCBiZWNhdXNlIFJlbmRl
ck9iamVjdCBhc3N1bWVzCiAgICAgLy8gYW55IHJlbmRlcmVyIHdpdGggZG9jdW1lbnQgYXMgdGhl
IG5vZGUgaXMgYW5vbnltb3VzLgogICAgIHNldElzQW5vbnltb3VzKGZhbHNlKTsKLSAgICAgICAg
CisKICAgICAvLyBpbml0IFJlbmRlck9iamVjdCBhdHRyaWJ1dGVzCiAgICAgc2V0SW5saW5lKGZh
bHNlKTsKIAotICAgIG1fZnJhbWVWaWV3ID0gdmlldzsKICAgICAvLyB0cnkgdG8gY29udHJhaW4g
dGhlIHdpZHRoIHRvIHRoZSB2aWV3cyB3aWR0aAotCi0gICAgbV9taW5XaWR0aCA9IDA7CisgICAg
bV93aWR0aCA9IDA7CiAgICAgbV9oZWlnaHQgPSAwOwotCi0gICAgbV93aWR0aCA9IG1fbWluV2lk
dGg7Ci0gICAgbV9tYXhXaWR0aCA9IG1fbWluV2lkdGg7CisgICAgbV9taW5XaWR0aCA9IDA7Cisg
ICAgbV9tYXhXaWR0aCA9IDA7CiAKICAgICBzZXRQb3NpdGlvbmVkKHRydWUpOyAvLyB0byAwLDAg
OikKIAotICAgIG1fcHJpbnRpbmdNb2RlID0gZmFsc2U7Ci0gICAgbV9wcmludEltYWdlcyA9IHRy
dWU7Ci0KLSAgICBtX21heGltYWxPdXRsaW5lU2l6ZSA9IDA7Ci0gICAgCi0gICAgbV9zZWxlY3Rp
b25TdGFydCA9IDA7Ci0gICAgbV9zZWxlY3Rpb25FbmQgPSAwOwotICAgIG1fc2VsZWN0aW9uU3Rh
cnRQb3MgPSAtMTsKLSAgICBtX3NlbGVjdGlvbkVuZFBvcyA9IC0xOwotCiAgICAgLy8gQ3JlYXRl
IGEgbmV3IHJvb3QgbGF5ZXIgZm9yIG91ciBsYXllciBoaWVyYXJjaHkuCiAgICAgbV9sYXllciA9
IG5ldyAobm9kZS0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyTGF5ZXIodGhpcyk7
Ci0gICAgCi0gICAgbV9mbGV4Qm94SW5GaXJzdExheW91dCA9IDA7CiB9CiAKIFJlbmRlclZpZXc6
On5SZW5kZXJWaWV3KCkKQEAgLTg5LDcgKzgxLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpjYWxjV2lk
dGgoKQogCiB2b2lkIFJlbmRlclZpZXc6OmNhbGNNaW5NYXhXaWR0aCgpCiB7Ci0gICAgQVNTRVJU
KCAhbWluTWF4S25vd24oKSApOworICAgIEFTU0VSVCghbWluTWF4S25vd24oKSk7CiAKICAgICBS
ZW5kZXJCbG9jazo6Y2FsY01pbk1heFdpZHRoKCk7CiAKQEAgLTEwMywxMyArOTUsMTMgQEAgdm9p
ZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogICAgIGlmIChtX3ByaW50aW5nTW9kZSkKICAgICAgICAg
bV9taW5XaWR0aCA9IG1fd2lkdGg7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhbGwganVzdCBh
IHRlcnJpYmxlIHdvcmthcm91bmQgZm9yIGJ1Z3MgaW4gbGF5b3V0IHdoZW4gdGhlIHZpZXcgaGVp
Z2h0IGNoYW5nZXMuICAKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhbGwganVzdCBhIHRlcnJpYmxl
IHdvcmthcm91bmQgZm9yIGJ1Z3MgaW4gbGF5b3V0IHdoZW4gdGhlIHZpZXcgaGVpZ2h0IGNoYW5n
ZXMuCiAgICAgLy8gRmluZCBhIGJldHRlciB3YXkgdG8gZGV0ZWN0IHZpZXcgaGVpZ2h0IGNoYW5n
ZXMuICBXZSdyZSBndWVzc2luZyB0aGF0IGlmIHdlIGRvbid0IG5lZWQgbGF5b3V0IHRoYXQgdGhl
IHJlYXNvbgogICAgIC8vIHdlIHdlcmUgY2FsbGVkIGlzIGJlY2F1c2Ugb2YgYSBGcmFtZVZpZXcg
Ym91bmRzIGNoYW5nZS4KICAgICBpZiAoIW5lZWRzTGF5b3V0KCkpIHsKICAgICAgICAgc2V0Q2hp
bGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAgICAgICAgIHNldE1pbk1heEtub3duKGZhbHNl
KTsKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QgKmMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBj
LT5uZXh0U2libGluZygpKQorICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogYyA9IGZpcnN0Q2hp
bGQoKTsgYzsgYyA9IGMtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICBjLT5zZXRDaGlsZE5l
ZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKICAgICB9CiAKQEAgLTEyNiwxOCArMTE4LDE4IEBAIHZv
aWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKICAgICAgICAgc2V0SGVpZ2h0KG1fZnJhbWVWaWV3LT52
aXNpYmxlSGVpZ2h0KCkpOwogICAgIH0KIAotICAgIC8vICMjIyB3ZSBjb3VsZCBtYXliZSBkbyB0
aGUgY2FsbCBiZWxvdyBiZXR0ZXIgYW5kIG9ubHkgcGFzcyB0cnVlIGlmIHRoZSBkb2NzaXplIGNo
YW5nZWQuCi0gICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMoIHRydWUgKTsKKyAgICAvLyBGSVhN
RTogd2UgY291bGQgbWF5YmUgZG8gdGhlIGNhbGwgYmVsb3cgYmV0dGVyIGFuZCBvbmx5IHBhc3Mg
dHJ1ZSBpZiB0aGUgZG9jc2l6ZSBjaGFuZ2VkLgorICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3Rz
KHRydWUpOwogCiAgICAgbGF5ZXIoKS0+c2V0SGVpZ2h0KG1heChkb2NoLCBtX2hlaWdodCkpOwog
ICAgIGxheWVyKCktPnNldFdpZHRoKG1heChkb2N3LCBtX3dpZHRoKSk7Ci0gICAgCisKICAgICBz
ZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKLWJvb2wgUmVuZGVyVmlldzo6YWJzb2x1dGVQb3Np
dGlvbihpbnQgJnhQb3MsIGludCAmeVBvcywgYm9vbCBmKQorYm9vbCBSZW5kZXJWaWV3OjphYnNv
bHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkKQogewotICAgIGlm
ICggZiAmJiBtX2ZyYW1lVmlldykgeworICAgIGlmIChmaXhlZCAmJiBtX2ZyYW1lVmlldykgewog
ICAgICAgICB4UG9zID0gbV9mcmFtZVZpZXctPmNvbnRlbnRzWCgpOwogICAgICAgICB5UG9zID0g
bV9mcmFtZVZpZXctPmNvbnRlbnRzWSgpOwogICAgIH0gZWxzZQpAQCAtMTUwLDcgKzE0Miw3IEBA
IHZvaWQgUmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEkKICAgICAvLyBDYWNoZSB0
aGUgcHJpbnQgcmVjdCBiZWNhdXNlIHRoZSBkaXJ0eSByZWN0IGNvdWxkIGdldCBjaGFuZ2VkIGR1
cmluZyBwYWludGluZy4KICAgICBpZiAobV9wcmludGluZ01vZGUpCiAgICAgICAgIHNldFByaW50
UmVjdChwYWludEluZm8ucmVjdCk7Ci0gICAgCisKICAgICBwYWludE9iamVjdChwYWludEluZm8s
IHR4LCB0eSk7CiB9CiAKQEAgLTE4OSw3ICsxODEsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnJlcGFp
bnRWaWV3UmVjdGFuZ2xlKGNvCiB7CiAgICAgaWYgKG1fcHJpbnRpbmdNb2RlIHx8IHVyLndpZHRo
KCkgPT0gMCB8fCB1ci5oZWlnaHQoKSA9PSAwKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAg
ICBJbnRSZWN0IHZyID0gdmlld1JlY3QoKTsKICAgICBpZiAobV9mcmFtZVZpZXcgJiYgdXIuaW50
ZXJzZWN0cyh2cikpIHsKICAgICAgICAgLy8gV2UgYWx3YXlzIGp1c3QgaW52YWxpZGF0ZSB0aGUg
cm9vdCB2aWV3LCBzaW5jZSB3ZSBjb3VsZCBiZSBhbiBpZnJhbWUgdGhhdCBpcyBjbGlwcGVkIG91
dApAQCAtMjA3LDcgKzE5OSw3IEBAIHZvaWQgUmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5n
bGUoY28KICAgICAgICAgICAgIGludCB5RnJhbWVPZmZzZXQgPSBtX2ZyYW1lVmlldy0+aGFzQm9y
ZGVyKCkgPyAyIDogMDsKICAgICAgICAgICAgIGludCB4RnJhbWVPZmZzZXQgPSBtX2ZyYW1lVmll
dy0+aGFzQm9yZGVyKCkgPyAxIDogMDsKICAgICAgICAgICAgIHIubW92ZShvYmotPmJvcmRlckxl
ZnQoKSArIG9iai0+cGFkZGluZ0xlZnQoKSArIHhGcmFtZU9mZnNldCwKLSAgICAgICAgICAgICAg
ICBvYmotPmJvcmRlclRvcCgpICsgb2JqLT5wYWRkaW5nVG9wKCkgKyB5RnJhbWVPZmZzZXQpOwor
ICAgICAgICAgICAgICAgICAgIG9iai0+Ym9yZGVyVG9wKCkgKyBvYmotPnBhZGRpbmdUb3AoKSAr
IHlGcmFtZU9mZnNldCk7CiAgICAgICAgICAgICBvYmotPnJlcGFpbnRSZWN0YW5nbGUociwgaW1t
ZWRpYXRlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIyMiw2ICsyMTQsNyBAQCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihSZW5kCiB7CiAgICAgaWYgKCFvYmplY3QpCiAgICAg
ICAgIHJldHVybiAwOworCiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVjdC0+Y2hpbGRB
dChvZmZzZXQpOwogICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogb2JqZWN0LT5uZXh0SW5QcmVP
cmRlckFmdGVyQ2hpbGRyZW4oKTsKIH0KQEAgLTIzNCw3ICsyMjcsNiBAQCBJbnRSZWN0IFJlbmRl
clZpZXc6OnNlbGVjdGlvblJlY3QoKSBjb25zCiAgICAgUmVuZGVyT2JqZWN0KiBvcyA9IG1fc2Vs
ZWN0aW9uU3RhcnQ7CiAgICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gcmVuZGVyZXJBZnRlclBvc2l0
aW9uKG1fc2VsZWN0aW9uRW5kLCBtX3NlbGVjdGlvbkVuZFBvcyk7CiAgICAgd2hpbGUgKG9zICYm
IG9zICE9IHN0b3ApIHsKLSAgICAgICAgCiAgICAgICAgIGlmICgob3MtPmNhbkJlU2VsZWN0aW9u
TGVhZigpIHx8IG9zID09IG1fc2VsZWN0aW9uU3RhcnQgfHwgb3MgPT0gbV9zZWxlY3Rpb25FbmQp
ICYmIG9zLT5zZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKICAgICAgICAgICAg
IC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFy
Z2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgogLy8gICAgICAgICAgYXNz
ZXJ0KCFzZWxlY3RlZE9iamVjdHMuZ2V0KG9zKSk7CkBAIC0yNDgsNyArMjQwLDcgQEAgSW50UmVj
dCBSZW5kZXJWaWV3OjpzZWxlY3Rpb25SZWN0KCkgY29ucwogICAgICAgICAgICAgICAgIGNiID0g
Y2ItPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IAorCiAgICAgICAgIG9zID0gb3MtPm5leHRJblByZU9yZGVyKCk7CiAgICAgfQogCkBAIC0yNjMs
MTYgKzI1NSwxNiBAQCBJbnRSZWN0IFJlbmRlclZpZXc6OnNlbGVjdGlvblJlY3QoKSBjb25zCiAg
ICAgcmV0dXJuIHNlbFJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJl
bmRlck9iamVjdCAqcywgaW50IHNwLCBSZW5kZXJPYmplY3QgKmUsIGludCBlcCkKK3ZvaWQgUmVu
ZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywg
UmVuZGVyT2JqZWN0KiBlbmQsIGludCBlbmRQb3MpCiB7Ci0gICAgLy8gTWFrZSBzdXJlIGJvdGgg
b3VyIHN0YXJ0IGFuZCBlbmQgb2JqZWN0cyBhcmUgZGVmaW5lZC4gCisgICAgLy8gTWFrZSBzdXJl
IGJvdGggb3VyIHN0YXJ0IGFuZCBlbmQgb2JqZWN0cyBhcmUgZGVmaW5lZC4KICAgICAvLyBDaGVj
ayB3d3cubXNuYmMuY29tIGFuZCB0cnkgY2xpY2tpbmcgYXJvdW5kIHRvIGZpbmQgdGhlIGNhc2Ug
d2hlcmUgdGhpcyBoYXBwZW5lZC4KLSAgICBpZiAoKHMgJiYgIWUpIHx8IChlICYmICFzKSkKKyAg
ICBpZiAoKHN0YXJ0ICYmICFlbmQpIHx8IChlbmQgJiYgIXN0YXJ0KSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gSnVzdCByZXR1cm4gaWYgdGhlIHNlbGVjdGlvbiBoYXNuJ3QgY2hhbmdlZC4K
LSAgICBpZiAobV9zZWxlY3Rpb25TdGFydCA9PSBzICYmIG1fc2VsZWN0aW9uU3RhcnRQb3MgPT0g
c3AgJiYKLSAgICAgICAgbV9zZWxlY3Rpb25FbmQgPT0gZSAmJiBtX3NlbGVjdGlvbkVuZFBvcyA9
PSBlcCkKKyAgICBpZiAobV9zZWxlY3Rpb25TdGFydCA9PSBzdGFydCAmJiBtX3NlbGVjdGlvblN0
YXJ0UG9zID09IHN0YXJ0UG9zICYmCisgICAgICAgIG1fc2VsZWN0aW9uRW5kID09IGVuZCAmJiBt
X3NlbGVjdGlvbkVuZFBvcyA9PSBlbmRQb3MpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFJl
Y29yZCB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMuICBUaGVzZSB3aWxsIGJlIHVzZWQgbGF0ZXIK
QEAgLTMwNyw3ICsyOTksNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJP
YmplCiAgICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3MgPSBvcy0+bmV4dEluUHJl
T3JkZXIoKTsKICAgICB9CiAKQEAgLTMxNywzNiArMzA5LDM1IEBAIHZvaWQgUmVuZGVyVmlldzo6
c2V0U2VsZWN0aW9uKFJlbmRlck9iamUKICAgICAgICAgaS0+Zmlyc3QtPnNldFNlbGVjdGlvblN0
YXRlKFNlbGVjdGlvbk5vbmUpOwogCiAgICAgLy8gc2V0IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5k
Ci0gICAgbV9zZWxlY3Rpb25TdGFydCA9IHM7Ci0gICAgbV9zZWxlY3Rpb25TdGFydFBvcyA9IHNw
OwotICAgIG1fc2VsZWN0aW9uRW5kID0gZTsKLSAgICBtX3NlbGVjdGlvbkVuZFBvcyA9IGVwOwor
ICAgIG1fc2VsZWN0aW9uU3RhcnQgPSBzdGFydDsKKyAgICBtX3NlbGVjdGlvblN0YXJ0UG9zID0g
c3RhcnRQb3M7CisgICAgbV9zZWxlY3Rpb25FbmQgPSBlbmQ7CisgICAgbV9zZWxlY3Rpb25FbmRQ
b3MgPSBlbmRQb3M7CiAKICAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbiBzdGF0dXMgb2YgYWxs
IG9iamVjdHMgYmV0d2VlbiBtX3NlbGVjdGlvblN0YXJ0IGFuZCBtX3NlbGVjdGlvbkVuZAotICAg
IGlmIChzICYmIHMgPT0gZSkKLSAgICAgICAgcy0+c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9u
Qm90aCk7CisgICAgaWYgKHN0YXJ0ICYmIHN0YXJ0ID09IGVuZCkKKyAgICAgICAgc3RhcnQtPnNl
dFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvbkJvdGgpOwogICAgIGVsc2UgewotICAgICAgICBpZiAo
cykKLSAgICAgICAgICAgIHMtPnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXJ0KTsKLSAg
ICAgICAgaWYgKGUpCi0gICAgICAgICAgICBlLT5zZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25F
bmQpOworICAgICAgICBpZiAoc3RhcnQpCisgICAgICAgICAgICBzdGFydC0+c2V0U2VsZWN0aW9u
U3RhdGUoU2VsZWN0aW9uU3RhcnQpOworICAgICAgICBpZiAoZW5kKQorICAgICAgICAgICAgZW5k
LT5zZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25FbmQpOwogICAgIH0KIAotICAgIFJlbmRlck9i
amVjdCogbyA9IHM7Ci0gICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihlLCBlcCk7Ci0g
ICAgCisgICAgUmVuZGVyT2JqZWN0KiBvID0gc3RhcnQ7CisgICAgc3RvcCA9IHJlbmRlcmVyQWZ0
ZXJQb3NpdGlvbihlbmQsIGVuZFBvcyk7CisKICAgICB3aGlsZSAobyAmJiBvICE9IHN0b3ApIHsK
LSAgICAgICAgaWYgKG8gIT0gcyAmJiBvICE9IGUgJiYgby0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkp
CisgICAgICAgIGlmIChvICE9IHN0YXJ0ICYmIG8gIT0gZW5kICYmIG8tPmNhbkJlU2VsZWN0aW9u
TGVhZigpKQogICAgICAgICAgICAgby0+c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uSW5zaWRl
KTsKICAgICAgICAgbyA9IG8tPm5leHRJblByZU9yZGVyKCk7CiAgICAgfQogCiAgICAgLy8gTm93
IHRoYXQgdGhlIHNlbGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IG9i
amVjdHMsIHdhbGsgdGhlbSBhZ2FpbiBhbmQKICAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9i
amVjdHMgbGlzdC4KLSAgICBvID0gczsKKyAgICBvID0gc3RhcnQ7CiAgICAgd2hpbGUgKG8gJiYg
byAhPSBzdG9wKSB7Ci0gICAgICAgIAotICAgICAgICBpZiAoKG8tPmNhbkJlU2VsZWN0aW9uTGVh
ZigpIHx8IG8gPT0gcyB8fCBvID09IGUpICYmIG8tPnNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0
aW9uTm9uZSkgeworICAgICAgICBpZiAoKG8tPmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8IG8gPT0g
c3RhcnQgfHwgbyA9PSBlbmQpICYmIG8tPnNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9u
ZSkgewogICAgICAgICAgICAgbmV3U2VsZWN0ZWRPYmplY3RzLnNldChvLCBuZXcgU2VsZWN0aW9u
SW5mbyhvKSk7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBvLT5jb250YWluaW5nQmxv
Y2soKTsKICAgICAgICAgICAgIHdoaWxlIChjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpKSB7CkBA
IC0zODgsNyArMzc5LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2Jq
ZQogICAgICAgICB9CiAgICAgICAgIGRlbGV0ZSBvbGRJbmZvOwogICAgIH0KLSAgICAKKwogICAg
IC8vIEFueSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xk
IG9iamVjdHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIFNlbGVj
dGVkT2JqZWN0TWFwOjppdGVyYXRvciBuZXdPYmplY3RzRW5kID0gbmV3U2VsZWN0ZWRPYmplY3Rz
LmVuZCgpOwogICAgIGZvciAoU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxl
Y3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBuZXdPYmplY3RzRW5kOyArK2kpIHsKQEAgLTQxMyw3
ICs0MDQsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplCiAgICAg
ICAgIH0KICAgICAgICAgZGVsZXRlIG9sZEluZm87CiAgICAgfQotICAgIAorCiAgICAgLy8gQW55
IG5ldyBibG9ja3MgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBibG9ja3Mg
ZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIFNlbGVjdGVkQmxvY2tN
YXA6Oml0ZXJhdG9yIG5ld0Jsb2Nrc0VuZCA9IG5ld1NlbGVjdGVkQmxvY2tzLmVuZCgpOwogICAg
IGZvciAoU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3IgaSA9IG5ld1NlbGVjdGVkQmxvY2tzLmJl
Z2luKCk7IGkgIT0gbmV3QmxvY2tzRW5kOyArK2kpIHsKQEAgLTQyOCwyNiArNDE5LDI1IEBAIHZv
aWQgUmVuZGVyVmlldzo6Y2xlYXJTZWxlY3Rpb24oKQogICAgIHNldFNlbGVjdGlvbigwLCAtMSwg
MCwgLTEpOwogfQogCi12b2lkIFJlbmRlclZpZXc6OnNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3Bv
cywgaW50JiBlcG9zKQordm9pZCBSZW5kZXJWaWV3OjpzZWxlY3Rpb25TdGFydEVuZChpbnQmIHN0
YXJ0UG9zLCBpbnQmIGVuZFBvcykKIHsKLSAgICBzcG9zID0gbV9zZWxlY3Rpb25TdGFydFBvczsK
LSAgICBlcG9zID0gbV9zZWxlY3Rpb25FbmRQb3M7CisgICAgc3RhcnRQb3MgPSBtX3NlbGVjdGlv
blN0YXJ0UG9zOworICAgIGVuZFBvcyA9IG1fc2VsZWN0aW9uRW5kUG9zOwogfQogCiB2b2lkIFJl
bmRlclZpZXc6OnVwZGF0ZVdpZGdldFBvc2l0aW9ucygpCiB7CiAgICAgUmVuZGVyT2JqZWN0U2V0
OjppdGVyYXRvciBlbmQgPSBtX3dpZGdldHMuZW5kKCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3RT
ZXQ6Oml0ZXJhdG9yIGl0ID0gbV93aWRnZXRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgIGZvciAoUmVuZGVyT2JqZWN0U2V0OjppdGVyYXRvciBpdCA9IG1fd2lkZ2V0cy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT51cGRhdGVXaWRnZXRQb3NpdGlvbigp
OwotICAgIH0KIH0KIAotdm9pZCBSZW5kZXJWaWV3OjphZGRXaWRnZXQoUmVuZGVyT2JqZWN0ICpv
KQordm9pZCBSZW5kZXJWaWV3OjphZGRXaWRnZXQoUmVuZGVyT2JqZWN0KiBvKQogewogICAgIG1f
d2lkZ2V0cy5hZGQobyk7CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6cmVtb3ZlV2lkZ2V0KFJlbmRl
ck9iamVjdCAqbykKK3ZvaWQgUmVuZGVyVmlldzo6cmVtb3ZlV2lkZ2V0KFJlbmRlck9iamVjdCog
bykKIHsKICAgICBtX3dpZGdldHMucmVtb3ZlKG8pOwogfQpAQCAtNDU4LDkgKzQ0OCw5IEBAIElu
dFJlY3QgUmVuZGVyVmlldzo6dmlld1JlY3QoKSBjb25zdAogICAgICAgICByZXR1cm4gSW50UmVj
dCgwLCAwLCBtX3dpZHRoLCBtX2hlaWdodCk7CiAgICAgaWYgKG1fZnJhbWVWaWV3KQogICAgICAg
ICByZXR1cm4gSW50UmVjdChtX2ZyYW1lVmlldy0+Y29udGVudHNYKCksCi0gICAgICAgICAgICBt
X2ZyYW1lVmlldy0+Y29udGVudHNZKCksCi0gICAgICAgICAgICBtX2ZyYW1lVmlldy0+dmlzaWJs
ZVdpZHRoKCksCi0gICAgICAgICAgICBtX2ZyYW1lVmlldy0+dmlzaWJsZUhlaWdodCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZVZpZXctPmNvbnRlbnRzWSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICBtX2ZyYW1lVmlldy0+dmlzaWJsZVdpZHRoKCksCisgICAgICAgICAgICAg
ICAgICAgICAgIG1fZnJhbWVWaWV3LT52aXNpYmxlSGVpZ2h0KCkpOwogICAgIHJldHVybiBJbnRS
ZWN0KCk7CiB9CiAKQEAgLTQ3MywxNyArNDYzLDE3IEBAIGludCBSZW5kZXJWaWV3Ojpkb2NIZWln
aHQoKSBjb25zdAogICAgICAgICBoID0gbV9mcmFtZVZpZXctPnZpc2libGVIZWlnaHQoKTsKIAog
ICAgIGludCBsb3dlc3RQb3MgPSBsb3dlc3RQb3NpdGlvbigpOwotICAgIGlmKCBsb3dlc3RQb3Mg
PiBoICkKKyAgICBpZiAobG93ZXN0UG9zID4gaCkKICAgICAgICAgaCA9IGxvd2VzdFBvczsKIAog
ICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgZG8gYW55IG1hcmdpbiBjb2xsYXBzaW5nLgogICAg
IC8vIEluc3RlYWQgb2YgdGhpcyBkaCBjb21wdXRhdGlvbiB3ZSBzaG91bGQga2VlcCB0aGUgcmVz
dWx0CiAgICAgLy8gd2hlbiB3ZSBjYWxsIFJlbmRlckJsb2NrOjpsYXlvdXQuCiAgICAgaW50IGRo
ID0gMDsKLSAgICBmb3IgKFJlbmRlck9iamVjdCAqYyA9IGZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMt
Pm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogYyA9IGZpcnN0Q2hpbGQo
KTsgYzsgYyA9IGMtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGRoICs9IGMtPmhlaWdodCgpICsg
Yy0+bWFyZ2luVG9wKCkgKyBjLT5tYXJnaW5Cb3R0b20oKTsKLSAgICB9Ci0gICAgaWYoIGRoID4g
aCApCisKKyAgICBpZiAoZGggPiBoKQogICAgICAgICBoID0gZGg7CiAKICAgICByZXR1cm4gaDsK
QEAgLTQ5OCwzMSArNDg4LDMzIEBAIGludCBSZW5kZXJWaWV3Ojpkb2NXaWR0aCgpIGNvbnN0CiAg
ICAgICAgIHcgPSBtX2ZyYW1lVmlldy0+dmlzaWJsZVdpZHRoKCk7CiAKICAgICBpbnQgcmlnaHRt
b3N0UG9zID0gcmlnaHRtb3N0UG9zaXRpb24oKTsKLSAgICBpZiggcmlnaHRtb3N0UG9zID4gdyAp
CisgICAgaWYgKHJpZ2h0bW9zdFBvcyA+IHcpCiAgICAgICAgIHcgPSByaWdodG1vc3RQb3M7CiAK
ICAgICBmb3IgKFJlbmRlck9iamVjdCAqYyA9IGZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMtPm5leHRT
aWJsaW5nKCkpIHsKICAgICAgICAgaW50IGR3ID0gYy0+d2lkdGgoKSArIGMtPm1hcmdpbkxlZnQo
KSArIGMtPm1hcmdpblJpZ2h0KCk7Ci0gICAgICAgIGlmKCBkdyA+IHcgKQorICAgICAgICBpZiAo
ZHcgPiB3KQogICAgICAgICAgICAgdyA9IGR3OwogICAgIH0KKwogICAgIHJldHVybiB3OwogfQog
CiAvLyBUaGUgaWRlYSBoZXJlIGlzIHRvIHRha2UgaW50byBhY2NvdW50IHdoYXQgb2JqZWN0IGlz
IG1vdmluZyB0aGUgcGFnaW5hdGlvbiBwb2ludCwgYW5kCiAvLyB0aHVzIGNob29zZSB0aGUgYmVz
dCBwbGFjZSB0byBjaG9wIGl0Lgotdm9pZCBSZW5kZXJWaWV3OjpzZXRCZXN0VHJ1bmNhdGVkQXQo
aW50IHksIFJlbmRlck9iamVjdCAqZm9yUmVuZGVyZXIsIGJvb2wgZm9yY2VkQnJlYWspCit2b2lk
IFJlbmRlclZpZXc6OnNldEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyT2JqZWN0KiBmb3JS
ZW5kZXJlciwgYm9vbCBmb3JjZWRCcmVhaykKIHsKICAgICAvLyBOb2JvZHkgZWxzZSBjYW4gc2V0
IGEgcGFnZSBicmVhayBvbmNlIHdlIGhhdmUgYSBmb3JjZWQgYnJlYWsuCi0gICAgaWYgKG1fZm9y
Y2VkUGFnZUJyZWFrKSByZXR1cm47Ci0gICAgCisgICAgaWYgKG1fZm9yY2VkUGFnZUJyZWFrKQor
ICAgICAgICByZXR1cm47CisKICAgICAvLyBGb3JjZWQgYnJlYWtzIGFsd2F5cyB3aW4gb3ZlciB1
bmZvcmNlZCBicmVha3MuCiAgICAgaWYgKGZvcmNlZEJyZWFrKSB7CiAgICAgICAgIG1fZm9yY2Vk
UGFnZUJyZWFrID0gdHJ1ZTsKICAgICAgICAgbV9iZXN0VHJ1bmNhdGVkQXQgPSB5OwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgLy8gcHJlZmVyIHRoZSB3aWRlc3Qgb2JqZWN0
IHdobyB0cmllcyB0byBtb3ZlIHRoZSBwYWdpbmF0aW9uIHBvaW50CiAgICAgaW50IHdpZHRoID0g
Zm9yUmVuZGVyZXItPndpZHRoKCk7CiAgICAgaWYgKHdpZHRoID4gbV90cnVuY2F0b3JXaWR0aCkg
ewpAQCAtNTMxLDQgKzUyMyw0IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0
KGludCAKICAgICB9CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDE4MjM1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw4IEBACiAgKgogICovCiAKLSNp
Zm5kZWYgcmVuZGVyX2NhbnZhc19oCi0jZGVmaW5lIHJlbmRlcl9jYW52YXNfaAorI2lmbmRlZiBS
ZW5kZXJWaWV3X2gKKyNkZWZpbmUgUmVuZGVyVmlld19oCiAKICNpbmNsdWRlICJSZW5kZXJCbG9j
ay5oIgogCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJWaWV3KE5vZGUqLCBG
cmFtZVZpZXcqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJWaWV3KCk7CiAKLSAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyVmlldyI7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
VmlldyI7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclZpZXcoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKQEAgLTQzLDI0ICs0MywyNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGNhbGNXaWR0aCgpOwogICAgIHZpcnR1YWwgdm9pZCBjYWxjSGVpZ2h0KCk7CiAgICAgdmlydHVh
bCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOwotICAgIHZpcnR1YWwgYm9vbCBhYnNvbHV0ZVBvc2l0
aW9uKGludCAmeFBvcywgaW50JiB5UG9zLCBib29sIGYgPSBmYWxzZSk7Ci0gICAgCisgICAgdmly
dHVhbCBib29sIGFic29sdXRlUG9zaXRpb24oaW50JiB4UG9zLCBpbnQmIHlQb3MsIGJvb2wgZiA9
IGZhbHNlKTsKKwogICAgIGludCBkb2NIZWlnaHQoKSBjb25zdDsKICAgICBpbnQgZG9jV2lkdGgo
KSBjb25zdDsKIAogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZVZpZXc7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBoYXNPdmVyaGFuZ2luZ0Zsb2F0cygpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHJlcGFpbnRWaWV3UmVjdGFu
Z2xlKGNvbnN0IEludFJlY3QmIHIsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpOwotICAgIAorCisg
ICAgdmlydHVhbCB2b2lkIHJlcGFpbnRWaWV3UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmLCBib29s
IGltbWVkaWF0ZSA9IGZhbHNlKTsKKwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMo
UGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotICAgIAotICAgIHZvaWQgc2V0U2VsZWN0aW9u
KFJlbmRlck9iamVjdCAqcywgaW50IHNwLCBSZW5kZXJPYmplY3QgKmUsIGludCBlcCk7CisKKyAg
ICB2b2lkIHNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJl
bmRlck9iamVjdCogZW5kLCBpbnQgZW5kUG9zKTsKICAgICB2b2lkIGNsZWFyU2VsZWN0aW9uKCk7
Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKnNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9zZWxlY3Rpb25TdGFydDsgfQotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpzZWxlY3Rp
b25FbmQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZDsgfQorICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3Rh
cnQ7IH0KKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb25FbmQ7IH0KIAogICAgIHZvaWQgc2V0UHJpbnRpbmdNb2RlKGJvb2wg
cHJpbnQpIHsgbV9wcmludGluZ01vZGUgPSBwcmludDsgfQogICAgIGJvb2wgcHJpbnRpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9wcmludGluZ01vZGU7IH0KQEAgLTY5LDM2ICs2OSwzMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRUcnVuY2F0ZWRBdChpbnQgeSkgeyBtX3RydW5jYXRlZEF0ID0g
eTsgbV9iZXN0VHJ1bmNhdGVkQXQgPSBtX3RydW5jYXRvcldpZHRoID0gMDsgbV9mb3JjZWRQYWdl
QnJlYWsgPSBmYWxzZTsgfQogICAgIHZvaWQgc2V0QmVzdFRydW5jYXRlZEF0KGludCB5LCBSZW5k
ZXJPYmplY3QgKmZvclJlbmRlcmVyLCBib29sIGZvcmNlZEJyZWFrID0gZmFsc2UpOwogICAgIGlu
dCBiZXN0VHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Jlc3RUcnVuY2F0ZWRBdDsgfQot
cHJpdmF0ZToKLSAgICBpbnQgbV9iZXN0VHJ1bmNhdGVkQXQ7Ci0gICAgaW50IG1fdHJ1bmNhdG9y
V2lkdGg7Ci0gICAgYm9vbCBtX2ZvcmNlZFBhZ2VCcmVhazsKLXB1YmxpYzoKKwogICAgIGludCB0
cnVuY2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJ1bmNhdGVkQXQ7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsK
LSAgICAKKwogICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdCgpIGNvbnN0OwotICAgIAorCiAgICAg
dm9pZCBzZXRNYXhpbWFsT3V0bGluZVNpemUoaW50IG8pIHsgbV9tYXhpbWFsT3V0bGluZVNpemUg
PSBvOyB9CiAgICAgaW50IG1heGltYWxPdXRsaW5lU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
aW1hbE91dGxpbmVTaXplOyB9CiAKICAgICB2aXJ0dWFsIEludFJlY3Qgdmlld1JlY3QoKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25TdGFydEVuZChpbnQmIHNwb3MsIGludCYg
ZXBvcyk7CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3RhcnRQb3Ms
IGludCYgZW5kUG9zKTsKIAogICAgIEludFJlY3QgcHJpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9wcmludFJlY3Q7IH0KICAgICB2b2lkIHNldFByaW50UmVjdChjb25zdCBJbnRSZWN0JiByKSB7
IG1fcHJpbnRSZWN0ID0gcjsgfQogCiAgICAgdm9pZCB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsK
LSAgICB2b2lkIGFkZFdpZGdldChSZW5kZXJPYmplY3QgKik7Ci0gICAgdm9pZCByZW1vdmVXaWRn
ZXQoUmVuZGVyT2JqZWN0ICopOwotICAgIAorICAgIHZvaWQgYWRkV2lkZ2V0KFJlbmRlck9iamVj
dCopOworICAgIHZvaWQgcmVtb3ZlV2lkZ2V0KFJlbmRlck9iamVjdCopOworCiAgICAgdm9pZCBz
ZXRGbGV4Qm94SW5GaXJzdExheW91dChSZW5kZXJPYmplY3QqIHIpIHsgbV9mbGV4Qm94SW5GaXJz
dExheW91dCA9IHI7IH0KICAgICBSZW5kZXJPYmplY3QqIGZsZXhCb3hJbkZpcnN0TGF5b3V0KCkg
eyByZXR1cm4gbV9mbGV4Qm94SW5GaXJzdExheW91dDsgfQogCiBwcm90ZWN0ZWQ6Ci0KICAgICBG
cmFtZVZpZXcqIG1fZnJhbWVWaWV3OwogCiAgICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvblN0
YXJ0OwpAQCAtMTEwLDE3ICsxMDUsMjIgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9wcmludGlu
Z01vZGU7CiAgICAgYm9vbCBtX3ByaW50SW1hZ2VzOwogICAgIGludCBtX3RydW5jYXRlZEF0Owot
ICAgIAorCiAgICAgaW50IG1fbWF4aW1hbE91dGxpbmVTaXplOyAvLyBVc2VkIHRvIGFwcGx5IGEg
ZnVkZ2UgZmFjdG9yIHRvIGRpcnR5LXJlY3QgY2hlY2tzIG9uIGJsb2Nrcy90YWJsZXMuCiAgICAg
SW50UmVjdCBtX3ByaW50UmVjdDsgLy8gVXNlZCB3aGVuIHByaW50aW5nLgogCi0gICAgdHlwZWRl
ZiBIYXNoU2V0PFJlbmRlck9iamVjdCAqPiBSZW5kZXJPYmplY3RTZXQ7CisgICAgdHlwZWRlZiBI
YXNoU2V0PFJlbmRlck9iamVjdCo+IFJlbmRlck9iamVjdFNldDsKIAogICAgIFJlbmRlck9iamVj
dFNldCBtX3dpZGdldHM7Ci0gICAgCisKICAgICBSZW5kZXJPYmplY3QqIG1fZmxleEJveEluRmly
c3RMYXlvdXQ7CisKK3ByaXZhdGU6CisgICAgaW50IG1fYmVzdFRydW5jYXRlZEF0OworICAgIGlu
dCBtX3RydW5jYXRvcldpZHRoOworICAgIGJvb2wgbV9mb3JjZWRQYWdlQnJlYWs7CiB9OwogCi19
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlclZpZXdf
aApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZpc2lvbiAxODIzNSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDEwICsyMSwxMSBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCisK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKIAotI2luY2x1
ZGUgIkFYT2JqZWN0Q2FjaGUuaCIgCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50Lmgi
CkBAIC02NCw4ICs2NSw4IEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpkZXN0cm95KCkKICAgICAvLyBi
b3RoIFJlbmRlckJveDo6ZGVzdHJveSgpIGFuZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKS4KICAg
ICAvLyBGaXggb3JpZ2luYWxseSBtYWRlIGZvciA8cmRhcjovL3Byb2JsZW0vNDIyODgxOD4uCiAK
LSAgICBpZiAoUmVuZGVyVmlldyAqYyA9IHZpZXcoKSkKLSAgICAgICAgYy0+cmVtb3ZlV2lkZ2V0
KHRoaXMpOworICAgIGlmIChSZW5kZXJWaWV3KiB2ID0gdmlldygpKQorICAgICAgICB2LT5yZW1v
dmVXaWRnZXQodGhpcyk7CiAKICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnJlbW92
ZSh0aGlzKTsKIApAQCAtNzksMTMgKzgwLDEzIEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpkZXN0cm95
KCkKIAogICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fbGF5ZXI7CiAgICAgUmVuZGVyQXJlbmEq
IGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKLSAgICAKKwogICAgIGlmIChsYXllcikKICAgICAgICAg
bGF5ZXItPmNsZWFyQ2xpcFJlY3QoKTsKLSAgICAKKwogICAgIHNldE5vZGUoMCk7CiAgICAgZGVy
ZWYoYXJlbmEpOwotICAgIAorCiAgICAgaWYgKGxheWVyKQogICAgICAgICBsYXllci0+ZGVzdHJv
eShhcmVuYSk7CiB9CkBAIC05OSw3ICsxMDAsNyBAQCBSZW5kZXJXaWRnZXQ6On5SZW5kZXJXaWRn
ZXQoKQogdm9pZCBSZW5kZXJXaWRnZXQ6OnJlc2l6ZVdpZGdldChXaWRnZXQqIHdpZGdldCwgaW50
IHcsIGludCBoKQogewogICAgIGlmIChlbGVtZW50KCkgJiYgKHdpZGdldC0+d2lkdGgoKSAhPSB3
IHx8IHdpZGdldC0+aGVpZ2h0KCkgIT0gaCkpIHsKLSAgICAgICAgUmVuZGVyQXJlbmEgKmFyZW5h
ID0gcmVmKCk7CisgICAgICAgIFJlbmRlckFyZW5hKiBhcmVuYSA9IHJlZigpOwogICAgICAgICBl
bGVtZW50KCktPnJlZigpOwogICAgICAgICB3aWRnZXQtPnJlc2l6ZSh3LCBoKTsKICAgICAgICAg
ZWxlbWVudCgpLT5kZXJlZigpOwpAQCAtMTUwLDkgKzE1MSw5IEBAIHZvaWQgUmVuZGVyV2lkZ2V0
OjpzZW5kQ29uc3VtZWRNb3VzZVVwKFcKICAgICBkZXJlZihhcmVuYSk7CiB9CiAKLXZvaWQgUmVu
ZGVyV2lkZ2V0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqX3N0eWxlKQordm9pZCBSZW5kZXJXaWRn
ZXQ6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsKLSAgICBSZW5kZXJSZXBsYWNl
ZDo6c2V0U3R5bGUoX3N0eWxlKTsKKyAgICBSZW5kZXJSZXBsYWNlZDo6c2V0U3R5bGUobmV3U3R5
bGUpOwogICAgIGlmIChtX3dpZGdldCkgewogICAgICAgICBtX3dpZGdldC0+c2V0Rm9udChzdHls
ZSgpLT5mb250KCkpOwogICAgICAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lC
TEUpCkBAIC0xNzAsNyArMTcxLDcgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5m
byYgcGFpbgogICAgIHR4ICs9IG1feDsKICAgICB0eSArPSBtX3k7CiAKLSAgICBpZiAoc2hvdWxk
UGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZU91dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgCisg
ICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkgJiYgcGFpbnRJbmZvLnBoYXNl
ICE9IFBhaW50UGhhc2VPdXRsaW5lICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2Vs
Zk91dGxpbmUpCiAgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB0eCwgdHkp
OwogCiAgICAgaWYgKCFtX3ZpZXcgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQpAQCAtMjQyLDI2ICsy
NDMsMjkgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnVwZGF0ZVdpZGdldFBvc2l0aW9uKAogewogICAg
IGlmICghbV93aWRnZXQpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpbnQgeCwgeSwgd2lk
dGgsIGhlaWdodDsKKworICAgIGludCB4OworICAgIGludCB5OwogICAgIGFic29sdXRlUG9zaXRp
b24oeCwgeSk7CiAgICAgeCArPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgIHkg
Kz0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7Ci0gICAgd2lkdGggPSBtX3dpZHRoIC0gYm9y
ZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQo
KTsKLSAgICBoZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkg
LSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7Ci0gICAgSW50UmVjdCBuZXdCb3VuZHMo
eCx5LHdpZHRoLGhlaWdodCk7CisKKyAgICBpbnQgd2lkdGggPSBtX3dpZHRoIC0gYm9yZGVyTGVm
dCgpIC0gYm9yZGVyUmlnaHQoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQoKTsKKyAg
ICBpbnQgaGVpZ2h0ID0gbV9oZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0g
cGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgpOworCisgICAgSW50UmVjdCBuZXdCb3VuZHMo
eCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgSW50UmVjdCBvbGRCb3VuZHMobV93aWRnZXQtPmZy
YW1lR2VvbWV0cnkoKSk7CiAgICAgaWYgKG5ld0JvdW5kcyAhPSBvbGRCb3VuZHMpIHsKICAgICAg
ICAgLy8gVGhlIHdpZGdldCBjaGFuZ2VkIHBvc2l0aW9ucy4gIFVwZGF0ZSB0aGUgZnJhbWUgZ2Vv
bWV0cnkuCiAgICAgICAgIGlmIChjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkgewotICAg
ICAgICAgICAgUmVuZGVyVmlldyogYyA9IHZpZXcoKTsKLSAgICAgICAgICAgIGlmICghYy0+cHJp
bnRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBjLT5yZXBhaW50Vmlld1JlY3RhbmdsZShv
bGRCb3VuZHMpOwotICAgICAgICAgICAgICAgIGMtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKG5ld0Jv
dW5kcyk7CisgICAgICAgICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOworICAgICAgICAgICAg
aWYgKCF2LT5wcmludGluZ01vZGUoKSkgeworICAgICAgICAgICAgICAgIHYtPnJlcGFpbnRWaWV3
UmVjdGFuZ2xlKG9sZEJvdW5kcyk7CisgICAgICAgICAgICAgICAgdi0+cmVwYWludFZpZXdSZWN0
YW5nbGUobmV3Qm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIFJl
bmRlckFyZW5hICphcmVuYSA9IHJlZigpOworICAgICAgICBSZW5kZXJBcmVuYSogYXJlbmEgPSBy
ZWYoKTsKICAgICAgICAgZWxlbWVudCgpLT5yZWYoKTsKICAgICAgICAgbV93aWRnZXQtPnNldEZy
YW1lR2VvbWV0cnkobmV3Qm91bmRzKTsKICAgICAgICAgZWxlbWVudCgpLT5kZXJlZigpOwpAQCAt
MjY5LDExICsyNzMsMTEgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnVwZGF0ZVdpZGdldFBvc2l0aW9u
KAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJXaWRnZXQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVj
dGlvblN0YXRlIHMpIAordm9pZCBSZW5kZXJXaWRnZXQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVj
dGlvblN0YXRlIHN0YXRlKQogewotICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IHMpIHsKLSAg
ICAgICAgUmVuZGVyUmVwbGFjZWQ6OnNldFNlbGVjdGlvblN0YXRlKHMpOwotICAgICAgICBtX3Nl
bGVjdGlvblN0YXRlID0gczsKKyAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBzdGF0ZSkgewor
ICAgICAgICBSZW5kZXJSZXBsYWNlZDo6c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOworICAgICAg
ICBtX3NlbGVjdGlvblN0YXRlID0gc3RhdGU7CiAgICAgICAgIGlmIChtX3dpZGdldCkKICAgICAg
ICAgICAgIG1fd2lkZ2V0LT5zZXRJc1NlbGVjdGVkKGlzU2VsZWN0ZWQoKSk7CiAgICAgfQpAQCAt
MjgzLDQgKzI4Nyw1IEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpkZWxldGVXaWRnZXQoKQogewogICAg
IGRlbGV0ZSBtX3dpZGdldDsKIH0KLX0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDE4MjM1KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKioKLSogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGh0bWwgcmVuZGVyZXIgZm9yIEtE
RS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBodG1sIHJlbmRlcmVyIGZvciBLREUuCiAg
KgogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgpA
QCAtMjUsMTIgKzI1LDEyIEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGxp
cHNpc0JveC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogCiAjaWYgUExBVEZPUk0oTUFD
KQogI2luY2x1ZGUgIkZyYW1lTWFjLmgiCiAjZW5kaWYKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBSb290
SW5saW5lQm94OjpwbGFjZUVsbGlwc2lzKGNvbnN0IAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElubGluZUJveCogbWFya3VwQm94KQogewogICAgIC8vIENyZWF0ZSBhbiBlbGxp
cHNpcyBib3guCi0gICAgbV9lbGxpcHNpc0JveCA9IG5ldyAobV9vYmplY3QtPnJlbmRlckFyZW5h
KCkpIEVsbGlwc2lzQm94KG1fb2JqZWN0LCBlbGxpcHNpc1N0ciwgdGhpcywgCisgICAgbV9lbGxp
cHNpc0JveCA9IG5ldyAobV9vYmplY3QtPnJlbmRlckFyZW5hKCkpIEVsbGlwc2lzQm94KG1fb2Jq
ZWN0LCBlbGxpcHNpc1N0ciwgdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXNXaWR0aCAtIChtYXJrdXBCb3gg
PyBtYXJrdXBCb3gtPndpZHRoKCkgOiAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeVBvcygpLCBoZWlnaHQoKSwgYmFzZWxp
bmUoKSwgIXByZXZSb290Qm94KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cEJveCk7CkBAIC0xNzQsMjQgKzE3NCwy
NSBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmNoaWxkUmVtb3ZlZChJbmxpbmVCCiAgICAgfQogfQog
Ci1HYXBSZWN0cyBSb290SW5saW5lQm94OjpmaWxsTGluZVNlbGVjdGlvbkdhcChpbnQgc2VsVG9w
LCBpbnQgc2VsSGVpZ2h0LCBSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgYmxvY2tYLCBpbnQg
YmxvY2tZLCBpbnQgdHgsIGludCB0eSwgCitHYXBSZWN0cyBSb290SW5saW5lQm94OjpmaWxsTGlu
ZVNlbGVjdGlvbkdhcChpbnQgc2VsVG9wLCBpbnQgc2VsSGVpZ2h0LCBSZW5kZXJCbG9jayogcm9v
dEJsb2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGludCB0eSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvKiBwYWludEluZm8pCiB7Ci0gICAgR2FwUmVjdHMgcmVzdWx0OwogICAgIFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgbGluZVN0YXRlID0gc2VsZWN0aW9uU3RhdGUoKTsKIAog
ICAgIGJvb2wgbGVmdEdhcCwgcmlnaHRHYXA7CiAgICAgYmxvY2soKS0+Z2V0SG9yaXpvbnRhbFNl
bGVjdGlvbkdhcEluZm8obGluZVN0YXRlLCBsZWZ0R2FwLCByaWdodEdhcCk7CiAKKyAgICBHYXBS
ZWN0cyByZXN1bHQ7CisKICAgICBJbmxpbmVCb3gqIGZpcnN0Qm94ID0gZmlyc3RTZWxlY3RlZEJv
eCgpOwogICAgIElubGluZUJveCogbGFzdEJveCA9IGxhc3RTZWxlY3RlZEJveCgpOwogICAgIGlm
IChsZWZ0R2FwKQotICAgICAgICByZXN1bHQudW5pdGVMZWZ0KGJsb2NrKCktPmZpbGxMZWZ0U2Vs
ZWN0aW9uR2FwKGZpcnN0Qm94LT5wYXJlbnQoKS0+b2JqZWN0KCksIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Qm94LT54UG9zKCks
IHNlbFRvcCwgc2VsSGVpZ2h0LCAKKyAgICAgICAgcmVzdWx0LnVuaXRlTGVmdChibG9jaygpLT5m
aWxsTGVmdFNlbGVjdGlvbkdhcChmaXJzdEJveC0+cGFyZW50KCktPm9iamVjdCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Qm94
LT54UG9zKCksIHNlbFRvcCwgc2VsSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHR4
LCB0eSwgcGFpbnRJbmZvKSk7CiAgICAgaWYgKHJpZ2h0R2FwKQotICAgICAgICByZXN1bHQudW5p
dGVSaWdodChibG9jaygpLT5maWxsUmlnaHRTZWxlY3Rpb25HYXAobGFzdEJveC0+cGFyZW50KCkt
Pm9iamVjdCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RCb3gtPnhQb3MoKSArIGxhc3RCb3gtPndpZHRoKCksIHNlbFRvcCwg
c2VsSGVpZ2h0LCAKKyAgICAgICAgcmVzdWx0LnVuaXRlUmlnaHQoYmxvY2soKS0+ZmlsbFJpZ2h0
U2VsZWN0aW9uR2FwKGxhc3RCb3gtPnBhcmVudCgpLT5vYmplY3QoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RCb3gtPnhQb3Mo
KSArIGxhc3RCb3gtPndpZHRoKCksIHNlbFRvcCwgc2VsSGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdEJsb2NrLCBibG9j
a1gsIGJsb2NrWSwgdHgsIHR5LCBwYWludEluZm8pKTsKIAogICAgIGlmIChmaXJzdEJveCAmJiBm
aXJzdEJveCAhPSBsYXN0Qm94KSB7CkBAIC0yMzUsMjMgKzIzNiwyNyBAQCBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvblN0YXRlIFJvb3RJbmxpbmVCCiAgICAgICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvbkJvdGgpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCisK
ICAgICByZXR1cm4gc3RhdGU7CiB9CiAKIElubGluZUJveCogUm9vdElubGluZUJveDo6Zmlyc3RT
ZWxlY3RlZEJveCgpCiB7Ci0gICAgZm9yIChJbmxpbmVCb3gqIGJveCA9IGZpcnN0TGVhZkNoaWxk
KCk7IGJveDsgYm94ID0gYm94LT5uZXh0TGVhZkNoaWxkKCkpCisgICAgZm9yIChJbmxpbmVCb3gq
IGJveCA9IGZpcnN0TGVhZkNoaWxkKCk7IGJveDsgYm94ID0gYm94LT5uZXh0TGVhZkNoaWxkKCkp
IHsKICAgICAgICAgaWYgKGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvbk5vbmUpCiAgICAgICAgICAgICByZXR1cm4gYm94OworICAgIH0KKwogICAgIHJldHVy
biAwOwogfQogCiBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6Omxhc3RTZWxlY3RlZEJveCgpCiB7
Ci0gICAgZm9yIChJbmxpbmVCb3gqIGJveCA9IGxhc3RMZWFmQ2hpbGQoKTsgYm94OyBib3ggPSBi
b3gtPnByZXZMZWFmQ2hpbGQoKSkKKyAgICBmb3IgKElubGluZUJveCogYm94ID0gbGFzdExlYWZD
aGlsZCgpOyBib3g7IGJveCA9IGJveC0+cHJldkxlYWZDaGlsZCgpKSB7CiAgICAgICAgIGlmIChi
b3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKQogICAg
ICAgICAgICAgcmV0dXJuIGJveDsKKyAgICB9CisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjU5
LDcgKzI2NCw3IEBAIGludCBSb290SW5saW5lQm94OjpzZWxlY3Rpb25Ub3AoKQogewogICAgIGlm
ICghcHJldlJvb3RCb3goKSkKICAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uVG9wOwotICAgIAor
CiAgICAgaW50IHByZXZCb3R0b20gPSBwcmV2Um9vdEJveCgpLT5zZWxlY3Rpb25Cb3R0b20oKTsK
ICAgICBpZiAocHJldkJvdHRvbSA8IG1fc2VsZWN0aW9uVG9wICYmIGJsb2NrKCktPmNvbnRhaW5z
RmxvYXRzKCkpIHsKICAgICAgICAgLy8gVGhpcyBsaW5lIGhhcyBhY3R1YWxseSBiZWVuIG1vdmVk
IGZ1cnRoZXIgZG93biwgcHJvYmFibHkgZnJvbSBhIGxhcmdlIGxpbmUtaGVpZ2h0LCBidXQgcG9z
c2libHkgYmVjYXVzZSB0aGUKQEAgLTI3Miw3ICsyNzcsNyBAQCBpbnQgUm9vdElubGluZUJveDo6
c2VsZWN0aW9uVG9wKCkKICAgICAgICAgaWYgKHByZXZMZWZ0ID4gbmV3TGVmdCB8fCBwcmV2Umln
aHQgPCBuZXdSaWdodCkKICAgICAgICAgICAgIHJldHVybiBtX3NlbGVjdGlvblRvcDsKICAgICB9
Ci0gICAgCisKICAgICByZXR1cm4gcHJldkJvdHRvbTsKIH0KIApAQCAtMjgxLDI4ICsyODYsMjgg
QEAgUmVuZGVyQmxvY2sqIFJvb3RJbmxpbmVCb3g6OmJsb2NrKCkgY29ucwogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG1fb2JqZWN0KTsKIH0KIAotSW5saW5lQm94KiBSb290
SW5saW5lQm94OjpjbG9zZXN0TGVhZkNoaWxkRm9yWFBvcyhpbnQgX3gsIGludCBfdHgpCitJbmxp
bmVCb3gqIFJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpbGRGb3JYUG9zKGludCB4LCBpbnQg
dHgpCiB7Ci0gICAgSW5saW5lQm94ICpmaXJzdExlYWYgPSBmaXJzdExlYWZDaGlsZEFmdGVyQm94
KCk7Ci0gICAgSW5saW5lQm94ICpsYXN0TGVhZiA9IGxhc3RMZWFmQ2hpbGRCZWZvcmVCb3goKTsK
KyAgICBJbmxpbmVCb3gqIGZpcnN0TGVhZiA9IGZpcnN0TGVhZkNoaWxkQWZ0ZXJCb3goKTsKKyAg
ICBJbmxpbmVCb3gqIGxhc3RMZWFmID0gbGFzdExlYWZDaGlsZEJlZm9yZUJveCgpOwogICAgIGlm
IChmaXJzdExlYWYgPT0gbGFzdExlYWYpCiAgICAgICAgIHJldHVybiBmaXJzdExlYWY7Ci0gICAg
CisKICAgICAvLyBBdm9pZCByZXR1cm5pbmcgYSBsaXN0IG1hcmtlciB3aGVuIHBvc3NpYmxlLgot
ICAgIGlmIChfeCA8PSBfdHggKyBmaXJzdExlYWYtPm1feCAmJiAhZmlyc3RMZWFmLT5vYmplY3Qo
KS0+aXNMaXN0TWFya2VyKCkpCisgICAgaWYgKHggPD0gdHggKyBmaXJzdExlYWYtPm1feCAmJiAh
Zmlyc3RMZWFmLT5vYmplY3QoKS0+aXNMaXN0TWFya2VyKCkpCiAgICAgICAgIC8vIFRoZSB4IGNv
b3JkaW5hdGUgaXMgbGVzcyBvciBlcXVhbCB0byBsZWZ0IGVkZ2Ugb2YgdGhlIGZpcnN0TGVhZi4K
ICAgICAgICAgLy8gUmV0dXJuIGl0LgogICAgICAgICByZXR1cm4gZmlyc3RMZWFmOwotICAgIAot
ICAgIGlmIChfeCA+PSBfdHggKyBsYXN0TGVhZi0+bV94ICsgbGFzdExlYWYtPm1fd2lkdGggJiYg
IWxhc3RMZWFmLT5vYmplY3QoKS0+aXNMaXN0TWFya2VyKCkpCisKKyAgICBpZiAoeCA+PSB0eCAr
IGxhc3RMZWFmLT5tX3ggKyBsYXN0TGVhZi0+bV93aWR0aCAmJiAhbGFzdExlYWYtPm9iamVjdCgp
LT5pc0xpc3RNYXJrZXIoKSkKICAgICAgICAgLy8gVGhlIHggY29vcmRpbmF0ZSBpcyBncmVhdGVy
IG9yIGVxdWFsIHRvIHJpZ2h0IGVkZ2Ugb2YgdGhlIGxhc3RMZWFmLgogICAgICAgICAvLyBSZXR1
cm4gaXQuCiAgICAgICAgIHJldHVybiBsYXN0TGVhZjsKIAotICAgIGZvciAoSW5saW5lQm94ICps
ZWFmID0gZmlyc3RMZWFmOyBsZWFmICYmIGxlYWYgIT0gbGFzdExlYWY7IGxlYWYgPSBsZWFmLT5u
ZXh0TGVhZkNoaWxkKCkpIHsKKyAgICBmb3IgKElubGluZUJveCogbGVhZiA9IGZpcnN0TGVhZjsg
bGVhZiAmJiBsZWFmICE9IGxhc3RMZWFmOyBsZWFmID0gbGVhZi0+bmV4dExlYWZDaGlsZCgpKSB7
CiAgICAgICAgIGlmICghbGVhZi0+b2JqZWN0KCktPmlzTGlzdE1hcmtlcigpKSB7Ci0gICAgICAg
ICAgICBpbnQgbGVhZlggPSBfdHggKyBsZWFmLT5tX3g7Ci0gICAgICAgICAgICBpZiAoX3ggPCBs
ZWFmWCArIGxlYWYtPm1fd2lkdGgpCisgICAgICAgICAgICBpbnQgbGVhZlggPSB0eCArIGxlYWYt
Pm1feDsKKyAgICAgICAgICAgIGlmICh4IDwgbGVhZlggKyBsZWFmLT5tX3dpZHRoKQogICAgICAg
ICAgICAgICAgIC8vIFRoZSB4IGNvb3JkaW5hdGUgaXMgbGVzcyB0aGFuIHRoZSByaWdodCBlZGdl
IG9mIHRoZSBib3guCiAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIGl0LgogICAgICAgICAgICAg
ICAgIHJldHVybiBsZWFmOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNp
b24gMTgyMzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIwLDggKzIwLDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBSb290SW5saW5lQm94
X0gKLSNkZWZpbmUgUm9vdElubGluZUJveF9ICisjaWZuZGVmIFJvb3RJbmxpbmVCb3hfaAorI2Rl
ZmluZSBSb290SW5saW5lQm94X2gKIAogI2luY2x1ZGUgImJpZGkuaCIKICNpbmNsdWRlICJJbmxp
bmVGbG93Qm94LmgiCkBAIC0zMCw3ICszMCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRWxsaXBzaXNCb3g7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwotCiBzdHJ1Y3QgR2FwUmVjdHM7
CiAKIGNsYXNzIFJvb3RJbmxpbmVCb3ggOiBwdWJsaWMgSW5saW5lRmxvd0JveCB7CkBAIC01MCw0
NyArNDksNTIgQEAgcHVibGljOgogICAgICAgICAsIG1fZWxsaXBzaXNCb3goMCkKICAgICB7CiAg
ICAgfQotICAgICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSogcmVu
ZGVyQXJlbmEpOwotICAgIHZvaWQgZGV0YWNoRWxsaXBzaXNCb3goUmVuZGVyQXJlbmEqIHJlbmRl
ckFyZW5hKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Jvb3RJbmxpbmVCb3goKSB7IHJldHVybiB0
cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSopOworICAgIHZv
aWQgZGV0YWNoRWxsaXBzaXNCb3goUmVuZGVyQXJlbmEqKTsKIAogICAgIFJvb3RJbmxpbmVCb3gq
IG5leHRSb290Qm94KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Um9vdElubGluZUJveCo+KG1fbmV4
dExpbmUpOyB9CiAgICAgUm9vdElubGluZUJveCogcHJldlJvb3RCb3goKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxSb290SW5saW5lQm94Kj4obV9wcmV2TGluZSk7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RQb3NpdGlvbihpbnQgZHgsIGludCBkeSk7Ci0gICAgCi0gICAgdmlydHVhbCBib29s
IGlzUm9vdElubGluZUJveCgpIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZpcnR1YWwgaW50IHRv
cE92ZXJmbG93KCkgeyByZXR1cm4gbV90b3BPdmVyZmxvdzsgfQogICAgIHZpcnR1YWwgaW50IGJv
dHRvbU92ZXJmbG93KCkgeyByZXR1cm4gbV9ib3R0b21PdmVyZmxvdzsgfQogICAgIHZpcnR1YWwg
aW50IGxlZnRPdmVyZmxvdygpIHsgcmV0dXJuIG1fbGVmdE92ZXJmbG93OyB9CiAgICAgdmlydHVh
bCBpbnQgcmlnaHRPdmVyZmxvdygpIHsgcmV0dXJuIG1fcmlnaHRPdmVyZmxvdzsgfQorCiAgICAg
dmlydHVhbCB2b2lkIHNldFZlcnRpY2FsT3ZlcmZsb3dQb3NpdGlvbnMoaW50IHRvcCwgaW50IGJv
dHRvbSkgeyBtX3RvcE92ZXJmbG93ID0gdG9wOyBtX2JvdHRvbU92ZXJmbG93ID0gYm90dG9tOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNldFZlcnRpY2FsU2VsZWN0aW9uUG9zaXRpb25zKGludCB0b3As
IGludCBib3R0b20pIHsgbV9zZWxlY3Rpb25Ub3AgPSB0b3A7IG1fc2VsZWN0aW9uQm90dG9tID0g
Ym90dG9tOyB9CiAgICAgdm9pZCBzZXRIb3Jpem9udGFsT3ZlcmZsb3dQb3NpdGlvbnMoaW50IGxl
ZnQsIGludCByaWdodCkgeyBtX2xlZnRPdmVyZmxvdyA9IGxlZnQ7IG1fcmlnaHRPdmVyZmxvdyA9
IHJpZ2h0OyB9Ci0gICAgdm9pZCBzZXRMaW5lQnJlYWtJbmZvKFJlbmRlck9iamVjdCogb2JqLCB1
bnNpZ25lZCBicmVha1BvcywgQmlkaVN0YXR1cyogc3RhdHVzLCBCaWRpQ29udGV4dCogY29udGV4
dCk7Ci0gICAgdm9pZCBzZXRMaW5lQnJlYWtQb3MoaW50IHApIHsgbV9saW5lQnJlYWtQb3MgPSBw
OyB9CiAKLSAgICB2b2lkIHNldEJsb2NrSGVpZ2h0KGludCBoKSB7IG1fYmxvY2tIZWlnaHQgPSBo
OyB9Ci0gICAgdm9pZCBzZXRFbmRzV2l0aEJyZWFrKGJvb2wgYikgeyBtX2VuZHNXaXRoQnJlYWsg
PSBiOyB9Ci0gICAgCi0gICAgaW50IGJsb2NrSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
a0hlaWdodDsgfQotICAgIGJvb2wgZW5kc1dpdGhCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
c1dpdGhCcmVhazsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJ0aWNhbFNlbGVjdGlvblBvc2l0
aW9ucyhpbnQgdG9wLCBpbnQgYm90dG9tKSB7IG1fc2VsZWN0aW9uVG9wID0gdG9wOyBtX3NlbGVj
dGlvbkJvdHRvbSA9IGJvdHRvbTsgfQorCiAgICAgUmVuZGVyT2JqZWN0KiBsaW5lQnJlYWtPYmoo
KSBjb25zdCB7IHJldHVybiBtX2xpbmVCcmVha09iajsgfQotICAgIHVuc2lnbmVkIGxpbmVCcmVh
a1BvcygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJyZWFrUG9zOyB9CiAgICAgQmlkaVN0YXR1cyBs
aW5lQnJlYWtCaWRpU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQnJlYWtCaWRpU3RhdHVz
OyB9CiAgICAgQmlkaUNvbnRleHQqIGxpbmVCcmVha0JpZGlDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9saW5lQnJlYWtDb250ZXh0LmdldCgpOyB9CisgICAgdm9pZCBzZXRMaW5lQnJlYWtJbmZv
KFJlbmRlck9iamVjdCosIHVuc2lnbmVkIGJyZWFrUG9zLCBCaWRpU3RhdHVzKiwgQmlkaUNvbnRl
eHQqKTsKKworICAgIHVuc2lnbmVkIGxpbmVCcmVha1BvcygpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZUJyZWFrUG9zOyB9CisgICAgdm9pZCBzZXRMaW5lQnJlYWtQb3ModW5zaWduZWQgcCkgeyBtX2xp
bmVCcmVha1BvcyA9IHA7IH0KKworICAgIGludCBibG9ja0hlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tIZWlnaHQ7IH0KKyAgICB2b2lkIHNldEJsb2NrSGVpZ2h0KGludCBoKSB7IG1fYmxv
Y2tIZWlnaHQgPSBoOyB9CisKKyAgICBib29sIGVuZHNXaXRoQnJlYWsoKSBjb25zdCB7IHJldHVy
biBtX2VuZHNXaXRoQnJlYWs7IH0KKyAgICB2b2lkIHNldEVuZHNXaXRoQnJlYWsoYm9vbCBiKSB7
IG1fZW5kc1dpdGhCcmVhayA9IGI7IH0KIAogICAgIHZvaWQgY2hpbGRSZW1vdmVkKElubGluZUJv
eCogYm94KTsKIAogICAgIGJvb2wgY2FuQWNjb21tb2RhdGVFbGxpcHNpcyhib29sIGx0ciwgaW50
IGJsb2NrRWRnZSwgaW50IGxpbmVCb3hFZGdlLCBpbnQgZWxsaXBzaXNXaWR0aCk7CiAgICAgdm9p
ZCBwbGFjZUVsbGlwc2lzKGNvbnN0IEF0b21pY1N0cmluZyYgZWxsaXBzaXNTdHIsIGJvb2wgbHRy
LCBpbnQgYmxvY2tFZGdlLCBpbnQgZWxsaXBzaXNXaWR0aCwgSW5saW5lQm94KiBtYXJrdXBCb3gg
PSAwKTsKLSAgICB2aXJ0dWFsIGludCBwbGFjZUVsbGlwc2lzQm94KGJvb2wgbHRyLCBpbnQgYmxv
Y2tFZGdlLCBpbnQgZWxsaXBzaXNXaWR0aCwgYm9vbCYpOworICAgIHZpcnR1YWwgaW50IHBsYWNl
RWxsaXBzaXNCb3goYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGludCBlbGxpcHNpc1dpZHRoLCBi
b29sJiBmb3VuZEJveCk7CiAKICAgICBFbGxpcHNpc0JveCogZWxsaXBzaXNCb3goKSBjb25zdCB7
IHJldHVybiBtX2VsbGlwc2lzQm94OyB9CiAKICAgICB2b2lkIHBhaW50RWxsaXBzaXNCb3goUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSkgY29uc3Q7CiAgICAgYm9vbCBo
aXRUZXN0RWxsaXBzaXNCb3goSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBp
bnQgdHksIEhpdFRlc3RBY3Rpb24sIGJvb2wpOwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyVHJ1bmNhdGlvbigpOwogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTAyLDEzICsxMDYsMTMg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQsIGludCwgaW50LCBpbnQpOwogCiAgICAgYm9vbCBo
YXNTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTZWxlY3RlZENoaWxkcmVu
OyB9Ci0gICAgdm9pZCBzZXRIYXNTZWxlY3RlZENoaWxkcmVuKGJvb2wgYik7CisgICAgdm9pZCBz
ZXRIYXNTZWxlY3RlZENoaWxkcmVuKGJvb2wpOwogCiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCk7CiAgICAgSW5saW5lQm94KiBmaXJzdFNl
bGVjdGVkQm94KCk7CiAgICAgSW5saW5lQm94KiBsYXN0U2VsZWN0ZWRCb3goKTsKIAotICAgIEdh
cFJlY3RzIGZpbGxMaW5lU2VsZWN0aW9uR2FwKGludCBzZWxUb3AsIGludCBzZWxIZWlnaHQsIFJl
bmRlckJsb2NrKiByb290QmxvY2ssIGludCBibG9ja1gsIGludCBibG9ja1ksIAorICAgIEdhcFJl
Y3RzIGZpbGxMaW5lU2VsZWN0aW9uR2FwKGludCBzZWxUb3AsIGludCBzZWxIZWlnaHQsIFJlbmRl
ckJsb2NrKiByb290QmxvY2ssIGludCBibG9ja1gsIGludCBibG9ja1ksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHR4LCBpbnQgdHksIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvKik7CiAKICAgICBSZW5kZXJCbG9jayogYmxvY2soKSBjb25zdDsKQEAgLTExNiw3
ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgaW50IHNlbGVjdGlvblRvcCgpOwogICAgIGludCBzZWxl
Y3Rpb25Cb3R0b20oKSB7IHJldHVybiBtX3NlbGVjdGlvbkJvdHRvbTsgfQogICAgIGludCBzZWxl
Y3Rpb25IZWlnaHQoKSB7IHJldHVybiBtYXgoMCwgc2VsZWN0aW9uQm90dG9tKCkgLSBzZWxlY3Rp
b25Ub3AoKSk7IH0KLSAKKwogICAgIElubGluZUJveCogY2xvc2VzdExlYWZDaGlsZEZvclhQb3Mo
aW50IHgsIGludCB0eCk7CiAKIHByb3RlY3RlZDoKQEAgLTEzNSwxNiArMTM5LDE2IEBAIHByb3Rl
Y3RlZDoKICAgICAvLyB3ZSBjYW4gY3JlYXRlIGEgQmlkaUl0ZXJhdG9yIGJlZ2lubmluZyBqdXN0
IGFmdGVyIHRoZSBlbmQgb2YgdGhpcyBsaW5lLgogICAgIFJlbmRlck9iamVjdCogbV9saW5lQnJl
YWtPYmo7CiAgICAgdW5zaWduZWQgbV9saW5lQnJlYWtQb3M7Ci0gICAgCisKICAgICBCaWRpU3Rh
dHVzIG1fbGluZUJyZWFrQmlkaVN0YXR1czsKICAgICBSZWZQdHI8QmlkaUNvbnRleHQ+IG1fbGlu
ZUJyZWFrQ29udGV4dDsKLSAgICAKKwogICAgIC8vIFRoZSBoZWlnaHQgb2YgdGhlIGJsb2NrIGF0
IHRoZSBlbmQgb2YgdGhpcyBsaW5lLiAgVGhpcyBpcyB3aGVyZSB0aGUgbmV4dCBsaW5lIHN0YXJ0
cy4KICAgICBpbnQgbV9ibG9ja0hlaWdodDsKLSAgICAKKwogICAgIC8vIFdoZXRoZXIgdGhlIGxp
bmUgZW5kcyB3aXRoIGEgPGJyPi4KICAgICBib29sIG1fZW5kc1dpdGhCcmVhayA6IDE7Ci0gICAg
CisKICAgICAvLyBXaGV0aGVyIHdlIGhhdmUgYW55IGNoaWxkcmVuIHNlbGVjdGVkICh0aGlzIGJp
dCB3aWxsIGFsc28gYmUgc2V0IGlmIHRoZSA8YnI+IHRoYXQgdGVybWluYXRlcyBvdXIKICAgICAv
LyBsaW5lIGlzIHNlbGVjdGVkKS4KICAgICBib29sIG1faGFzU2VsZWN0ZWRDaGlsZHJlbiA6IDE7
CkBAIC0xNTUsNCArMTU5LDQgQEAgcHJvdGVjdGVkOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBSb290SW5saW5lQm94X0gKKyNlbmRpZiAvLyBSb290SW5saW5lQm94X2gK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxODIz
NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCwyNCArMjQsMjUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmZGVmIFNW
R19TVVBQT1JUCisKICNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCiAKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAi
U1ZHUmVzb3VyY2VDbGlwcGVyLmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKLSNp
bmNsdWRlICJTVkdSZXNvdXJjZU1hc2tlci5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgi
CiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiUm9vdElubGlu
ZUJveC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKKyNpbmNsdWRlICJTVkdQYWludFNl
cnZlci5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlQ2xpcHBlci5oIgorI2luY2x1ZGUgIlNWR1Jl
c291cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VNYXNrZXIuaCIKICNpbmNsdWRl
ICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBTVkdJbmxpbmVGbG93Qm94OjpwYWludChSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkgCit2b2lkIFNW
R0lubGluZUZsb3dCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGludCB0eCwgaW50IHR5KQogewogICAgIHBhaW50U1ZHSW5saW5lRmxvdyh0aGlzLCBvYmplY3Qo
KSwgcGFpbnRJbmZvLCB0eCwgdHkpOwogfQpAQCAtNjAsNyArNjEsNyBAQCB2b2lkIHBhaW50U1ZH
SW5saW5lRmxvdyhJbmxpbmVGbG93Qm94KiBmCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIHBhaW50
SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShv
YmplY3QtPmxvY2FsVHJhbnNmb3JtKCkpOwogCkBAIC03OCw3ICs3OSw3IEBAIHZvaWQgcGFpbnRT
VkdJbmxpbmVGbG93KElubGluZUZsb3dCb3gqIGYKICAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmls
dGVyKHBhaW50SW5mby5jb250ZXh0LCBib3VuZGluZ0JveCk7CiAKICAgICBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyBwaShwYWludEluZm8pOwotICAgIAorCiAgICAgaWYgKCFmbG93LT5pc1Jvb3RJ
bmxpbmVCb3goKSkKICAgICAgICAgcGkucmVjdCA9IChvYmplY3QtPmxvY2FsVHJhbnNmb3JtKCkp
LmludmVyc2UoKS5tYXBSZWN0KHBpLnJlY3QpOwogCkBAIC04Nyw3ICs4OCw3IEBAIHZvaWQgcGFp
bnRTVkdJbmxpbmVGbG93KElubGluZUZsb3dCb3gqIGYKICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ0JveCkpOwogICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKICAgICB9Ci0gICAg
CisKICAgICBTVkdQYWludFNlcnZlciogZmlsbFBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0
b3J5OjpmaWxsUGFpbnRTZXJ2ZXIob2JqZWN0LT5zdHlsZSgpLCBvYmplY3QpOwogICAgIGlmIChm
aWxsUGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgZmlsbFBhaW50U2VydmVyLT5zZXRQYWludGluZ1Rl
eHQodHJ1ZSk7CkBAIC05Nyw2ICs5OCw3IEBAIHZvaWQgcGFpbnRTVkdJbmxpbmVGbG93KElubGlu
ZUZsb3dCb3gqIGYKICAgICAgICAgfQogICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50
aW5nVGV4dChmYWxzZSk7CiAgICAgfQorCiAgICAgU1ZHUGFpbnRTZXJ2ZXIqIHN0cm9rZVBhaW50
U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihvYmplY3QtPnN0
eWxlKCksIG9iamVjdCk7CiAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7CiAgICAgICAgIHN0
cm9rZVBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQodHJ1ZSk7CkBAIC0xMDcsNyArMTA5LDcg
QEAgdm9pZCBwYWludFNWR0lubGluZUZsb3coSW5saW5lRmxvd0JveCogZgogICAgICAgICBzdHJv
a2VQYWludFNlcnZlci0+c2V0UGFpbnRpbmdUZXh0KGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAo
ZmlsdGVyKSAKKyAgICBpZiAoZmlsdGVyKQogICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKHBh
aW50SW5mby5jb250ZXh0LCBib3VuZGluZ0JveCk7CiAKICAgICBpZiAob3BhY2l0eSA8IDEuMGYp
CkBAIC0xMTcsMjIgKzExOSwyMyBAQCB2b2lkIHBhaW50U1ZHSW5saW5lRmxvdyhJbmxpbmVGbG93
Qm94KiBmCiB9CiAKIHN0YXRpYyBib29sIHRyYW5zbGF0ZUJveChJbmxpbmVCb3gqIGJveCwgaW50
IHgsIGludCB5LCBib29sIHRvcExldmVsID0gdHJ1ZSkKLXsgICAgCit7CiAgICAgaWYgKGJveC0+
b2JqZWN0KCktPmlzVGV4dCgpKSB7CiAgICAgICAgIGJveC0+c2V0WFBvcyhib3gtPnhQb3MoKSAr
IHgpOwogICAgICAgICBib3gtPnNldFlQb3MoYm94LT55UG9zKCkgKyB5KTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBJbmxpbmVGbG93Qm94KiBmbG93ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0Jv
eCo+KGJveCk7CiAgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqIHRleHQgPSBzdGF0
aWNfY2FzdDxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Kj4oYm94LT5vYmplY3QoKS0+ZWxlbWVu
dCgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh0b3BMZXZlbHx8ISh0ZXh0LT54KCktPmdldEZp
cnN0KCkgfHwgdGV4dC0+eSgpLT5nZXRGaXJzdCgpIHx8IAorCisgICAgICAgIGlmICh0b3BMZXZl
bHx8ISh0ZXh0LT54KCktPmdldEZpcnN0KCkgfHwgdGV4dC0+eSgpLT5nZXRGaXJzdCgpIHx8CiAg
ICAgICAgICAgICAgICAgICAgICAgICAodGV4dC0+ZHgoKS0+Z2V0Rmlyc3QoKSAmJiB0ZXh0LT5k
eCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgKHRl
eHQtPmR5KCktPmdldEZpcnN0KCkgJiYgdGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSkp
KSB7CiAgICAgICAgICAgICBib3gtPnNldFhQb3MoYm94LT54UG9zKCkgKyB4KTsKICAgICAgICAg
ICAgIGJveC0+c2V0WVBvcyhib3gtPnlQb3MoKSArIHkpOwotICAgICAgICAgICAgZm9yIChJbmxp
bmVCb3gqIGN1cnIgPSBmbG93LT5maXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0
T25MaW5lKCkpIAorICAgICAgICAgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmbG93LT5maXJz
dENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoIXRyYW5zbGF0ZUJveChjdXJyLCB4LCB5LCBmYWxzZSkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTE0MCw3ICsxNDMsNiBAQCBzdGF0aWMgYm9vbCB0cmFuc2xhdGVC
b3goSW5saW5lQm94KiBib3gsCiAKIHN0YXRpYyBpbnQgcGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jp
em9udGFsbHkoSW5saW5lRmxvd0JveCogZmxvdywgaW50IHgsIGludCYgbGVmdFBvc2l0aW9uLCBp
bnQmIHJpZ2h0UG9zaXRpb24sIGludCYgbGVmdEFsaWduLCBpbnQmIHJpZ2h0QWxpZ24sIGJvb2wm
IG5lZWRzV29yZFNwYWNpbmcsIGludCB4UG9zLCBib29sIHBvc2l0aW9uZWQpCiB7Ci0gICAgLy9p
bnQgc3RhcnR4ID0geDsKICAgICBpbnQgbW4gPSBJTlRfTUFYOwogICAgIGludCBteCA9IElOVF9N
SU47CiAgICAgaW50IGFtbiA9IElOVF9NQVg7CkBAIC0xNDgsOCArMTUwLDcgQEAgc3RhdGljIGlu
dCBwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YQogICAgIGludCBzdGFydHggPSB4OwogICAg
IGJvb2wgc2VlblBvc2l0aW9uZWRFbGVtZW50ID0gZmFsc2U7CiAgICAgZmxvdy0+c2V0WFBvcyh4
KTsKLSAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZsb3ctPmZpcnN0Q2hpbGQoKTsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgCi0gICAgeworICAgIGZvciAoSW5saW5lQm94KiBj
dXJyID0gZmxvdy0+Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgp
KSB7CiAgICAgICAgIGlmIChjdXJyLT5vYmplY3QoKS0+aXNUZXh0KCkpIHsKICAgICAgICAgICAg
IG1uID0gbWluKG1uLCB4KTsKICAgICAgICAgICAgIGFtbiA9IG1pbihhbW4sIHgpOwpAQCAtMTY4
LDEwICsxNjksMTAgQEAgc3RhdGljIGludCBwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YQog
ICAgICAgICAgICAgYXNzZXJ0KGN1cnItPm9iamVjdCgpLT5pc0lubGluZUZsb3coKSk7CiAgICAg
ICAgICAgICBJbmxpbmVGbG93Qm94KiBmbG93ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+
KGN1cnIpOwogICAgICAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCogdGV4dCA9IHN0
YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqPihmbG93LT5vYmplY3QoKS0+ZWxl
bWVudCgpKTsKLSAgICAgICAgICAgIHggKz0gKGludCkodGV4dC0+ZHgoKS0+Z2V0Rmlyc3QoKSA/
IHRleHQtPmR4KCktPmdldEZpcnN0KCktPnZhbHVlKCkgOiAwKTsKKyAgICAgICAgICAgIHggKz0g
dGV4dC0+ZHgoKS0+Z2V0Rmlyc3QoKSA/IHN0YXRpY19jYXN0PGludD4odGV4dC0+ZHgoKS0+Z2V0
Rmlyc3QoKS0+dmFsdWUoKSkgOiAwOwogICAgICAgICAgICAgaWYgKHRleHQtPngoKS0+Z2V0Rmly
c3QoKSkKLSAgICAgICAgICAgICAgICB4ID0gKGludCkodGV4dC0+eCgpLT5nZXRGaXJzdCgpLT52
YWx1ZSgpIC0geFBvcyk7Ci0gICAgICAgICAgICBpZiAodGV4dC0+eCgpLT5nZXRGaXJzdCgpIHx8
IHRleHQtPnkoKS0+Z2V0Rmlyc3QoKSB8fCAKKyAgICAgICAgICAgICAgICB4ID0gc3RhdGljX2Nh
c3Q8aW50Pih0ZXh0LT54KCktPmdldEZpcnN0KCktPnZhbHVlKCkgLSB4UG9zKTsKKyAgICAgICAg
ICAgIGlmICh0ZXh0LT54KCktPmdldEZpcnN0KCkgfHwgdGV4dC0+eSgpLT5nZXRGaXJzdCgpIHx8
CiAgICAgICAgICAgICAgICAgKHRleHQtPmR4KCktPmdldEZpcnN0KCkgJiYgdGV4dC0+ZHgoKS0+
Z2V0Rmlyc3QoKS0+dmFsdWUoKSkgfHwKICAgICAgICAgICAgICAgICAodGV4dC0+ZHkoKS0+Z2V0
Rmlyc3QoKSAmJiB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpKSkgewogICAgICAgICAg
ICAgICAgIHNlZW5Qb3NpdGlvbmVkRWxlbWVudCA9IHRydWU7CkBAIC0xNzksMjYgKzE4MCwyNiBA
QCBzdGF0aWMgaW50IHBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRhCiAgICAgICAgICAgICAg
ICAgaW50IGlnbm9yZVgsIGlnbm9yZVk7CiAgICAgICAgICAgICAgICAgeCA9IHBsYWNlUG9zaXRp
b25lZEJveGVzSG9yaXpvbnRhbGx5KGZsb3csIHgsIG1uLCBteCwgaWdub3JlWCwgaWdub3JlWSwg
bmVlZHNXb3JkU3BhY2luZywgeFBvcywgdHJ1ZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHNl
ZW5Qb3NpdGlvbmVkRWxlbWVudCkgewotICAgICAgICAgICAgICAgIGludCBfYW1uLCBfYW14OyAv
L3Rocm93IGF3YXkgdGhlc2UgdmFsdWVzCi0gICAgICAgICAgICAgICAgeCA9IHBsYWNlUG9zaXRp
b25lZEJveGVzSG9yaXpvbnRhbGx5KGZsb3csIHgsIG1uLCBteCwgX2FtbiwgX2FteCwgbmVlZHNX
b3JkU3BhY2luZywgeFBvcywgZmFsc2UpOworICAgICAgICAgICAgICAgIGludCBpZ25vcmVYLCBp
Z25vcmVZOworICAgICAgICAgICAgICAgIHggPSBwbGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250
YWxseShmbG93LCB4LCBtbiwgbXgsIGlnbm9yZVgsIGlnbm9yZVksIG5lZWRzV29yZFNwYWNpbmcs
IHhQb3MsIGZhbHNlKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHggPSBw
bGFjZVBvc2l0aW9uZWRCb3hlc0hvcml6b250YWxseShmbG93LCB4LCBtbiwgbXgsIGFtbiwgYW14
LCBuZWVkc1dvcmRTcGFjaW5nLCB4UG9zLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CisKICAg
ICBpZiAobW4gPiBteCkKICAgICAgICAgbW4gPSBteCA9IHN0YXJ0eDsKICAgICBpZiAoYW1uID4g
YW14KQogICAgICAgICBhbW4gPSBhbXggPSBzdGFydHg7Ci0gICAgCisKICAgICBpbnQgd2lkdGgg
PSBteCAtIG1uOwogICAgIGZsb3ctPnNldFdpZHRoKHdpZHRoKTsKICAgICBpbnQgYXdpZHRoID0g
YW14IC0gYW1uOwotICAgIGludCBkeD0wOworICAgIGludCBkeCA9IDA7CiAgICAgaWYgKHBvc2l0
aW9uZWQpIHsKLSAgICAgICAgc3dpdGNoIChmbG93LT5vYmplY3QoKS0+c3R5bGUoKS0+c3ZnU3R5
bGUoKS0+dGV4dEFuY2hvcigpKSAKLSAgICAgICAgeworICAgICAgICBzd2l0Y2ggKGZsb3ctPm9i
amVjdCgpLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT50ZXh0QW5jaG9yKCkpIHsKICAgICAgICAgICAg
IGNhc2UgVEFfTUlERExFOgotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUJveChmbG93LCBkeCA9
IC1hd2lkdGgvMiwgMCk7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdHJhbnNsYXRlQm94
KGZsb3csIGR4ID0gLWF3aWR0aCAvIDIsIDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBUQV9FTkQ6CiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlQm94KGZsb3cs
IGR4ID0gLWF3aWR0aCwgMCk7CkBAIC0yMDcsMTcgKzIwOCwxOSBAQCBzdGF0aWMgaW50IHBsYWNl
UG9zaXRpb25lZEJveGVzSG9yaXpvbnRhCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CisKICAgICAgICAgaWYgKGR4KSB7CiAgICAgICAgICAg
ICB4ICs9IGR4OwogICAgICAgICAgICAgbW4gKz0gZHg7CiAgICAgICAgICAgICBteCArPSBkeDsK
ICAgICAgICAgfQogICAgIH0KKwogICAgIGxlZnRQb3NpdGlvbiA9IG1pbihsZWZ0UG9zaXRpb24s
IG1uKTsKICAgICByaWdodFBvc2l0aW9uID0gbWF4KHJpZ2h0UG9zaXRpb24sIG14KTsKICAgICBs
ZWZ0QWxpZ24gPSBtaW4obGVmdEFsaWduLCBhbW4pOwogICAgIHJpZ2h0QWxpZ24gPSBtYXgocmln
aHRBbGlnbiwgYW14KTsKLSAgICAKKwogICAgIHJldHVybiB4OwogfQogCkBAIC0yMzEsMTYgKzIz
NCwxNSBAQCBpbnQgcGxhY2VTVkdGbG93SG9yaXpvbnRhbGx5KElubGluZUZsb3dCCiAgICAgcmV0
dXJuIHg7CiB9CiAKLXN0YXRpYyB2b2lkIHBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFic0Jhc2Vs
aW5lKElubGluZUZsb3dCb3gqIGZsb3csIGludCYgaGVpZ2h0T2ZCbG9jaywgaW50JiBtaW5feSwg
aW50JiBtYXhfeSwgaW50JiBiYXNlbGluZSwgaW50IHlQb3MpCitzdGF0aWMgdm9pZCBwbGFjZUJv
eGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZShJbmxpbmVGbG93Qm94KiBmbG93LCBpbnQmIGhl
aWdodE9mQmxvY2ssIGludCYgbWluWSwgaW50JiBtYXhZLCBpbnQmIGJhc2VsaW5lLCBpbnQgeVBv
cykKIHsKICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZsb3ctPmZpcnN0Q2hpbGQoKTsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgewogICAgICAgICBpZiAoY3Vyci0+aXNJbmxp
bmVGbG93Qm94KCkpIHsKICAgICAgICAgICAgIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqIHRl
eHQgPSBzdGF0aWNfY2FzdDxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Kj4oY3Vyci0+b2JqZWN0
KCktPmVsZW1lbnQoKSk7Ci0gICAgICAgICAgICBiYXNlbGluZSArPSAoaW50KSh0ZXh0LT5keSgp
LT5nZXRGaXJzdCgpID8gdGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDApOwotICAg
ICAgICAgICAgaWYgKHRleHQtPnkoKS0+Z2V0Rmlyc3QoKSkgewotICAgICAgICAgICAgICAgIGJh
c2VsaW5lID0gKGludCkodGV4dC0+eSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIC0geVBvcyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBwbGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNCYXNl
bGluZShzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oY3VyciksIGhlaWdodE9mQmxvY2ssIG1p
bl95LCBtYXhfeSwgYmFzZWxpbmUsIHlQb3MpOworICAgICAgICAgICAgYmFzZWxpbmUgKz0gdGV4
dC0+ZHkoKS0+Z2V0Rmlyc3QoKSA/IHN0YXRpY19jYXN0PGludD4odGV4dC0+ZHkoKS0+Z2V0Rmly
c3QoKS0+dmFsdWUoKSkgOiAwOworICAgICAgICAgICAgaWYgKHRleHQtPnkoKS0+Z2V0Rmlyc3Qo
KSkKKyAgICAgICAgICAgICAgICBiYXNlbGluZSA9IHN0YXRpY19jYXN0PGludD4odGV4dC0+eSgp
LT5nZXRGaXJzdCgpLT52YWx1ZSgpIC0geVBvcyk7CisgICAgICAgICAgICBwbGFjZUJveGVzVmVy
dGljYWxseVdpdGhBYnNCYXNlbGluZShzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oY3Vyciks
IGhlaWdodE9mQmxvY2ssIG1pblksIG1heFksIGJhc2VsaW5lLCB5UG9zKTsKICAgICAgICAgfQog
ICAgICAgICBjb25zdCBGb250JiBmb250ID0gY3Vyci0+b2JqZWN0KCktPmZvbnQodHJ1ZSk7CiAg
ICAgICAgIGludCBhc2NlbnQgPSBmb250LmFzY2VudCgpOwpAQCAtMjQ5LDIzICsyNTEsMjYgQEAg
c3RhdGljIHZvaWQgcGxhY2VCb3hlc1ZlcnRpY2FsbHlXaXRoQWJzQgogICAgICAgICBjdXJyLT5z
ZXRCYXNlbGluZShhc2NlbnQpOwogICAgICAgICBjdXJyLT5zZXRZUG9zKHBvc2l0aW9uKTsKICAg
ICAgICAgY3Vyci0+c2V0SGVpZ2h0KGhlaWdodCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocG9z
aXRpb24gPCBtaW5feSkgCi0gICAgICAgICAgICBtaW5feSA9IHBvc2l0aW9uOwotICAgICAgICBp
ZiAocG9zaXRpb24gKyBoZWlnaHQgPiBtYXhfeSkgCi0gICAgICAgICAgICBtYXhfeSA9IHBvc2l0
aW9uICsgaGVpZ2h0OworCisgICAgICAgIGlmIChwb3NpdGlvbiA8IG1pblkpCisgICAgICAgICAg
ICBtaW5ZID0gcG9zaXRpb247CisgICAgICAgIGlmIChwb3NpdGlvbiArIGhlaWdodCA+IG1heFkp
CisgICAgICAgICAgICBtYXhZID0gcG9zaXRpb24gKyBoZWlnaHQ7CiAgICAgfQorCiAgICAgaWYg
KGZsb3ctPmlzUm9vdElubGluZUJveCgpKSB7Ci0gICAgICAgIGZsb3ctPnNldFlQb3MobWluX3kp
OwotICAgICAgICBmbG93LT5zZXRIZWlnaHQobWF4X3kgLSBtaW5feSk7Ci0gICAgICAgIGZsb3ct
PnNldEJhc2VsaW5lKGJhc2VsaW5lIC0gbWluX3kpOwotICAgICAgICBoZWlnaHRPZkJsb2NrICs9
IG1heF95IC0gbWluX3k7CisgICAgICAgIGZsb3ctPnNldFlQb3MobWluWSk7CisgICAgICAgIGZs
b3ctPnNldEhlaWdodChtYXhZIC0gbWluWSk7CisgICAgICAgIGZsb3ctPnNldEJhc2VsaW5lKGJh
c2VsaW5lIC0gbWluWSk7CisgICAgICAgIGhlaWdodE9mQmxvY2sgKz0gbWF4WSAtIG1pblk7CiAg
ICAgfQogfQogCiB2b2lkIHBsYWNlU1ZHRmxvd1ZlcnRpY2FsbHkoSW5saW5lRmxvd0JveCogZmxv
dywgaW50JiBoZWlnaHRPZkJsb2NrKQogewotICAgIGludCB0b3AgPSBJTlRfTUFYLCBib3R0b20g
PSBJTlRfTUlOLCBiYXNlbGluZSA9IGhlaWdodE9mQmxvY2s7CisgICAgaW50IHRvcCA9IElOVF9N
QVg7CisgICAgaW50IGJvdHRvbSA9IElOVF9NSU47CisgICAgaW50IGJhc2VsaW5lID0gaGVpZ2h0
T2ZCbG9jazsKICAgICBwbGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNCYXNlbGluZShmbG93LCBo
ZWlnaHRPZkJsb2NrLCB0b3AsIGJvdHRvbSwgYmFzZWxpbmUsIGZsb3ctPm9iamVjdCgpLT55UG9z
KCkpOwogICAgIGZsb3ctPnNldFZlcnRpY2FsT3ZlcmZsb3dQb3NpdGlvbnModG9wLCBib3R0b20p
OwogICAgIGZsb3ctPnNldFZlcnRpY2FsU2VsZWN0aW9uUG9zaXRpb25zKHRvcCwgYm90dG9tKTsK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE4MjM1KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw4ICsyMSw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgU1ZHSW5saW5lRmxvd0JveF9ICi0j
ZGVmaW5lIFNWR0lubGluZUZsb3dCb3hfSAorI2lmbmRlZiBTVkdJbmxpbmVGbG93Qm94X2gKKyNk
ZWZpbmUgU1ZHSW5saW5lRmxvd0JveF9oCiAKICNpZmRlZiBTVkdfU1VQUE9SVAogCkBAIC01MCw0
ICs1MCw0IEBAIHB1YmxpYzoKIAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAKLSNlbmRpZiAvLyBT
VkdJbmxpbmVGbG93Qm94X0gKKyNlbmRpZiAvLyBTVkdJbmxpbmVGbG93Qm94X2gKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxODIzNSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiwyMiArMjIsMjQgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgorCiAjaWZkZWYgU1ZHX1NVUFBPUlQKKwogI2luY2x1ZGUgIlNWR1JlbmRlclRy
ZWVBc1RleHQuaCIKIAotI2luY2x1ZGUgIlNWR1Jlc291cmNlQ2xpcHBlci5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUcmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5o
IgogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyR3JhZGllbnQuaCIKICNpbmNsdWRlICJTVkdQYWlu
dFNlcnZlclBhdHRlcm4uaCIKICNpbmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCi0jaW5j
bHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VDbGlw
cGVyLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgPG1hdGguaD4K
IApAQCAtNDUsMzYgKzQ3LDM5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLyoqIGNsYXNzICsg
aW9tYW5pcCB0byBoZWxwIHN0cmVhbWluZyBsaXN0IHNlcGFyYXRvcnMsIGkuZS4gIiwgIiBpbiBz
dHJpbmcgImEsIGIsIGMsIGQiCiAgKiBDYW4gYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSB5b3UgZG9u
J3Qga25vdyB3aGljaCBpdGVtIGluIHRoZSBsaXN0IGlzIHRoZSBmaXJzdAotICogb25lIHRvIGJl
IHByaW50ZWQsIGJ1dCBzdGlsbCB3YW50IHRvIGF2b2lkIHN0cmluZ3MgbGlrZSAiLCBiLCBjIiwg
d29ya3MgbGlrZSAKKyAqIG9uZSB0byBiZSBwcmludGVkLCBidXQgc3RpbGwgd2FudCB0byBhdm9p
ZCBzdHJpbmdzIGxpa2UgIiwgYiwgYyIsIHdvcmtzIGxpa2UKICAqIERlcHJlY2F0ZWRTdHJpbmdM
aXN0Ojpqb2luIGZvciBzdHJlYW1zCiAgKi8KLWNsYXNzIFRleHRTdHJlYW1TZXBhcmF0b3IKLXsK
K2NsYXNzIFRleHRTdHJlYW1TZXBhcmF0b3IgewogcHVibGljOgotICAgIFRleHRTdHJlYW1TZXBh
cmF0b3IoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmcykgOiBtX3NlcGFyYXRvcihzKSwgbV9uZWVk
VG9TZXBhcmF0ZShmYWxzZSkge30KLXByaXZhdGU6Ci0gICAgZnJpZW5kIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFRleHRTdHJlYW1TZXBhcmF0b3IgJnNlcCk7Ci0gICAg
CisgICAgVGV4dFN0cmVhbVNlcGFyYXRvcihjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzKQorICAg
ICAgICA6IG1fc2VwYXJhdG9yKHMpCisgICAgICAgICwgbV9uZWVkVG9TZXBhcmF0ZShmYWxzZSkK
KyAgICB7CisgICAgfQorCiBwcml2YXRlOgorICAgIGZyaWVuZCBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mLCBUZXh0U3RyZWFtU2VwYXJhdG9yJik7CisKICAgICBEZXByZWNhdGVk
U3RyaW5nIG1fc2VwYXJhdG9yOwogICAgIGJvb2wgbV9uZWVkVG9TZXBhcmF0ZTsKIH07CiAKLVRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFRleHRTdHJlYW1TZXBhcmF0b3Ig
JnNlcCkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFRleHRTdHJlYW1T
ZXBhcmF0b3ImIHNlcCkKIHsKICAgICBpZiAoc2VwLm1fbmVlZFRvU2VwYXJhdGUpCiAgICAgICAg
IHRzIDw8IHNlcC5tX3NlcGFyYXRvcjsKLSAgICBlbHNlIAorICAgIGVsc2UKICAgICAgICAgc2Vw
Lm1fbmVlZFRvU2VwYXJhdGUgPSB0cnVlOwogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSW50UG9pbnQgJnApCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJbnRQb2ludCYgcCkKIHsKICAg
ICByZXR1cm4gdHMgPDwgIigiIDw8IHAueCgpIDw8ICIsIiA8PCBwLnkoKSA8PCAiKSI7CiB9CiAK
LVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEludFJlY3QgJnIp
CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJbnRSZWN0JiBy
KQogewogICAgIHJldHVybiB0cyA8PCAiYXQgKCIgPDwgci54KCkgPDwgIiwiIDw8IHIueSgpIDw8
ICIpIHNpemUgIiA8PCByLndpZHRoKCkgPDwgIngiIDw8IHIuaGVpZ2h0KCk7CiB9CkBAIC04Miw5
ICs4Nyw5IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGMKIGJvb2wg
aGFzRnJhY3Rpb25zKGRvdWJsZSB2YWwpCiB7CiAgICAgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7
Ci0gICAgaW50IGl2YWwgPSBpbnQodmFsKTsKLSAgICBkb3VibGUgZHZhbCA9IGRvdWJsZShpdmFs
KTsgICAgCi0gICAgcmV0dXJuIChmYWJzKHZhbC1kdmFsKSA+IGVwc2lsb24pOworICAgIGludCBp
dmFsID0gc3RhdGljX2Nhc3Q8aW50Pih2YWwpOworICAgIGRvdWJsZSBkdmFsID0gc3RhdGljX2Nh
c3Q8ZG91YmxlPihpdmFsKTsKKyAgICByZXR1cm4gZmFicyh2YWwgLSBkdmFsKSA+IGVwc2lsb247
CiB9CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0
UmVjdCAmcikKQEAgLTExMiw3ICsxMTcsNyBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbG9hdFBvaW50ICZwKQorVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKICAgICB0cyA8PCAi
KCI7ICAgIAogICAgIGlmIChoYXNGcmFjdGlvbnMocC54KCkpKQpAQCAtMTI3LDggKzEzMiw4IEBA
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGMKICAgICByZXR1cm4gdHMg
PDwgIikiOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBGbG9hdFNpemUgJnMpCi17ICAgCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGbG9hdFNpemUmIHMpCit7CiAgICAgdHMgPDwgIndpZHRoPSI7CiAgICAgaWYg
KGhhc0ZyYWN0aW9ucyhzLndpZHRoKCkpKQogICAgICAgICB0cyA8PCBzLndpZHRoKCk7CkBAIC0x
MzksMzYgKzE0NCwzOCBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
CiAgICAgICAgIHRzIDw8IHMuaGVpZ2h0KCk7CiAgICAgZWxzZQogICAgICAgICB0cyA8PCBpbnQo
cy5oZWlnaHQoKSk7Ci0gICAgIHJldHVybiB0czsKKyAgICByZXR1cm4gdHM7CiB9CiAKLQotVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
ICZtKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKG0uaXNJZGVudGl0eSgpKQorICAgIGlm
ICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICB0cyA8PCAiaWRlbnRpdHkiOwotICAg
IGVsc2UgewotICAgICAgICB0cyA8PCAie209KCgiIDw8IG0uYSgpIDw8ICIsIiA8PCBtLmIoKSA8
PCAiKSgiIDw8IG0uYygpIDw8ICIsIiA8PCBtLmQoKSA8PCAiKSkiOwotICAgICAgICB0cyA8PCAi
IHQ9KCIgPDwgbS5lKCkgPDwgIiwiIDw8IG0uZigpIDw8ICIpfSI7Ci0gICAgfQorICAgIGVsc2UK
KyAgICAgICAgdHMgPDwgInttPSgoIgorICAgICAgICAgICA8PCB0cmFuc2Zvcm0uYSgpIDw8ICIs
IiA8PCB0cmFuc2Zvcm0uYigpCisgICAgICAgICAgIDw8ICIpKCIKKyAgICAgICAgICAgPDwgdHJh
bnNmb3JtLmMoKSA8PCAiLCIgPDwgdHJhbnNmb3JtLmQoKQorICAgICAgICAgICA8PCAiKSkgdD0o
IgorICAgICAgICAgICA8PCB0cmFuc2Zvcm0uZSgpIDw8ICIsIiA8PCB0cmFuc2Zvcm0uZigpCisg
ICAgICAgICAgIDw8ICIpfSI7CiAKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yICZjKQorVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3ImIGMpCiB7CiAgICAgcmV0dXJuIHRz
IDw8IGMubmFtZSgpOwogfQogCiBzdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCkKIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSAhPSBpbmRlbnQ7ICsraSkg
eworICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQogICAgICAgICB0cyA8PCAi
ICAiOwotICAgIH0KIH0KIAotLy9GSVhNRTogVGhpcyBzaG91bGQgYmUgaW4gS1JlbmRlcmluZ1N0
eWxlLmNwcAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEtDRGFzaEFycmF5ICZhKQorLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGluIEtSZW5kZXJp
bmdTdHlsZS5jcHAKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBLQ0Rhc2hBcnJheSYgYSkKIHsKICAgICB0cyA8PCAieyI7CiAgICAgS0NEYXNoQXJy
YXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGEuZW5kKCk7CkBAIC0xODEsNDQgKzE4OCw0NSBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtCiAgICAgcmV0dXJuIHRzOwog
fQogCi0vL0ZJWE1FOiBUaGlzIHNob3VsZCBiZSBpbiBLUmVuZGVyaW5nU3R5bGUuY3BwCisvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgaW4gS1JlbmRlcmluZ1N0eWxlLmNwcAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVDYXAgc3R5bGUpCiB7CiAgICAg
c3dpdGNoIChzdHlsZSkgewotICAgIGNhc2UgQnV0dENhcDoKLSAgICAgICAgdHMgPDwgIkJVVFQi
OyBicmVhazsKLSAgICBjYXNlIFJvdW5kQ2FwOgotICAgICAgICB0cyA8PCAiUk9VTkQiOyBicmVh
azsKLSAgICBjYXNlIFNxdWFyZUNhcDoKLSAgICAgICAgdHMgPDwgIlNRVUFSRSI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEJ1dHRDYXA6CisgICAgICAgICAgICB0cyA8PCAiQlVUVCI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSb3VuZENhcDoKKyAgICAgICAgICAgIHRzIDw8ICJS
T1VORCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTcXVhcmVDYXA6CisgICAg
ICAgICAgICB0cyA8PCAiU1FVQVJFIjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBy
ZXR1cm4gdHM7CiB9CiAKLS8vRklYTUU6IFRoaXMgc2hvdWxkIGJlIGluIEtSZW5kZXJpbmdTdHls
ZS5jcHAKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBpbiBLUmVuZGVyaW5nU3R5bGUuY3BwCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gc3R5
bGUpCiB7CiAgICAgc3dpdGNoIChzdHlsZSkgewotICAgIGNhc2UgTWl0ZXJKb2luOgotICAgICAg
ICB0cyA8PCAiTUlURVIiOyBicmVhazsKLSAgICBjYXNlIFJvdW5kSm9pbjoKLSAgICAgICAgdHMg
PDwgIlJPVU5EIjsgYnJlYWs7Ci0gICAgY2FzZSBCZXZlbEpvaW46Ci0gICAgICAgIHRzIDw8ICJC
RVZFTCI7IGJyZWFrOworICAgICAgICBjYXNlIE1pdGVySm9pbjoKKyAgICAgICAgICAgIHRzIDw8
ICJNSVRFUiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSb3VuZEpvaW46Cisg
ICAgICAgICAgICB0cyA8PCAiUk9VTkQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQmV2ZWxKb2luOgorICAgICAgICAgICAgdHMgPDwgIkJFVkVMIjsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICByZXR1cm4gdHM7CiB9CiAKLSNkZWZpbmUgRElGRkVSU19GUk9NX1BB
UkVOVChwYXRoKSAoIXBhcmVudFN0eWxlIHx8IChwYXJlbnRTdHlsZS0+cGF0aCAhPSBjaGlsZFN0
eWxlLT5wYXRoKSkKLS8vIGF2b2lkcyB0ZXN0aW5nIHBhdGggaWYgcHJlZCBpcyBmYWxzZS4gVGhp
cyBpcyB1c2VkIHdpdGggdGVzdHMgdGhhdCBoYXZlIHNpZGUtZWZmZWN0cwotLy8gZm9yIHRoZSBw
YXJlbnQgb2JqZWN0Ci0jZGVmaW5lIERJRkZFUlNfRlJPTV9QQVJFTlRfQVZPSURfVEVTVF9JRl9G
QUxTRShwcmVkLCBwYXRoKSAoIXBhcmVudFN0eWxlIHx8ICgoIXBhcmVudFN0eWxlLT5wcmVkKSB8
fCAocGFyZW50U3R5bGUtPnBhdGggIT0gY2hpbGRTdHlsZS0+cGF0aCkpKQotCi1zdGF0aWMgdm9p
ZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QgJm9iamVjdCkK
K3N0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVj
dCYgb2JqZWN0KQogewogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC5zdHls
ZSgpOwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHls
ZSgpOwotICAgIAorCiAgICAgaWYgKCFvYmplY3QubG9jYWxUcmFuc2Zvcm0oKS5pc0lkZW50aXR5
KCkpCiAgICAgICAgIHRzIDw8ICIgW3RyYW5zZm9ybT0iIDw8IG9iamVjdC5sb2NhbFRyYW5zZm9y
bSgpIDw8ICJdIjsKICAgICBpZiAoc3ZnU3R5bGUtPmltYWdlUmVuZGVyaW5nKCkgIT0gU1ZHUmVu
ZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlbmRlcmluZygpKQpAQCAtMjI3LDcgKzIzNSw3IEBAIHN0
YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGMKICAgICAgICAgdHMgPDwgIiBb
b3BhY2l0eT0iIDw8IHN0eWxlLT5vcGFjaXR5KCkgPDwgIl0iOwogICAgIGlmIChvYmplY3QuaXNS
ZW5kZXJQYXRoKCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVyUGF0aCYgcGF0aCA9IHN0YXRpY19j
YXN0PGNvbnN0IFJlbmRlclBhdGgmPihvYmplY3QpOwotICAgICAgICBTVkdQYWludFNlcnZlciAq
c3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVy
KHN0eWxlLCAmcGF0aCk7CisgICAgICAgIFNWR1BhaW50U2VydmVyKiBzdHJva2VQYWludFNlcnZl
ciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUsICZwYXRoKTsK
ICAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFt
U2VwYXJhdG9yIHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIgW3N0cm9rZT17IjsKQEAgLTIz
Nyw3ICsyNDUsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjCiAg
ICAgICAgICAgICBkb3VibGUgZGFzaE9mZnNldCA9IEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJp
bWl0aXZlVG9MZW5ndGgoJnBhdGgsIHN2Z1N0eWxlLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7
CiAgICAgICAgICAgICBjb25zdCBLQ0Rhc2hBcnJheSYgZGFzaEFycmF5ID0gS1NWR1BhaW50ZXJG
YWN0b3J5OjpkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5bGUpOwogICAgICAgICAgICAg
ZG91YmxlIHN0cm9rZVdpZHRoID0gS1NWR1BhaW50ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xl
bmd0aCgmcGF0aCwgc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCksIDEuMCk7Ci0gICAgICAgICAgICAK
KwogICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCkgIT0gMS4wZikKICAg
ICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbb3BhY2l0eT0iIDw8IHN2Z1N0eWxlLT5zdHJva2VP
cGFjaXR5KCkgPDwgIl0iOwogICAgICAgICAgICAgaWYgKHN0cm9rZVdpZHRoICE9IDEuMGYpCkBA
IC0yNTEsMTAgKzI1OSwxMCBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRz
LCBjCiAgICAgICAgICAgICBpZiAoZGFzaE9mZnNldCAhPSAwLjBmKQogICAgICAgICAgICAgICAg
IHRzIDw8IHMgPDwgIltkYXNoIG9mZnNldD0iIDw8IGRhc2hPZmZzZXQgPDwgIl0iOwogICAgICAg
ICAgICAgaWYgKCFkYXNoQXJyYXkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRzIDw8IHMg
PDwgIltkYXNoIGFycmF5PSIgPDwgZGFzaEFycmF5IDw8ICJdIjsgICAgICAgIAorICAgICAgICAg
ICAgICAgIHRzIDw8IHMgPDwgIltkYXNoIGFycmF5PSIgPDwgZGFzaEFycmF5IDw8ICJdIjsKICAg
ICAgICAgICAgIHRzIDw8ICJ9XSI7CiAgICAgICAgIH0KLSAgICAgICAgU1ZHUGFpbnRTZXJ2ZXIg
KmZpbGxQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKHN0
eWxlLCAmcGF0aCk7CisgICAgICAgIFNWR1BhaW50U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIgPSBL
U1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNlcnZlcihzdHlsZSwgJnBhdGgpOwogICAgICAg
ICBpZiAoZmlsbFBhaW50U2VydmVyKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtU2VwYXJhdG9y
IHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIgW2ZpbGw9eyI7CkBAIC0yNzksODQgKzI4Nyw4
MiBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjCiAgICAgaWYgKCFz
dmdTdHlsZS0+ZmlsdGVyKCkuaXNFbXB0eSgpKQogICAgICAgICB0cyA8PCAiIFtmaWx0ZXI9IiA8
PCBzdmdTdHlsZS0+ZmlsdGVyKCkgPDwgIl0iOwogfQotI3VuZGVmIERJRkZFUlNfRlJPTV9QQVJF
TlQKLSN1bmRlZiBESUZGRVJTX0ZST01fUEFSRU5UX0FWT0lEX1RFU1RfSUZfRkFMU0UKIAotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclBh
dGggJm8pCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgUmVuZGVyUGF0aCYgcGF0aCkKIHsKLSAgICB0cyA8PCAiICIgPDwgby5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLm1hcFJlY3Qoby5yZWxhdGl2ZUJCb3goKSk7Ci0gICAgCi0gICAgd3JpdGVTdHlsZSh0
cywgbyk7Ci0gICAgCi0gICAgdHMgPDwgIiBbZGF0YT1cIiIgPDwgby5wYXRoKCkuZGVidWdTdHJp
bmcoKSA8PCAiXCJdIjsKLSAgICAKKyAgICB0cyA8PCAiICIgPDwgcGF0aC5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLm1hcFJlY3QocGF0aC5yZWxhdGl2ZUJCb3goKSk7CisKKyAgICB3cml0ZVN0eWxlKHRz
LCBwYXRoKTsKKworICAgIHRzIDw8ICIgW2RhdGE9XCIiIDw8IHBhdGgucGF0aCgpLmRlYnVnU3Ry
aW5nKCkgPDwgIlwiXSI7CisKICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdDb250YWluZXIgJm8p
CitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyU1ZHQ29udGFpbmVyJiBjb250YWluZXIpCiB7Ci0gICAgdHMgPDwgIiAiIDw8IG8uYWJzb2x1
dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KG8ucmVsYXRpdmVCQm94KCkpOwotICAgIAotICAgIHdyaXRl
U3R5bGUodHMsIG8pOwotICAgIAorICAgIHRzIDw8ICIgIiA8PCBjb250YWluZXIuYWJzb2x1dGVU
cmFuc2Zvcm0oKS5tYXBSZWN0KGNvbnRhaW5lci5yZWxhdGl2ZUJCb3goKSk7CisKKyAgICB3cml0
ZVN0eWxlKHRzLCBjb250YWluZXIpOworCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0aWMgRGVw
cmVjYXRlZFN0cmluZyBnZXRUYWdOYW1lKHZvaWQgKm5vZGUpCitzdGF0aWMgRGVwcmVjYXRlZFN0
cmluZyBnZXRUYWdOYW1lKHZvaWQqIG5vZGUpCiB7Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZWxl
bSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihub2RlKTsKKyAgICBTVkdTdHlsZWRF
bGVtZW50KiBlbGVtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KG5vZGUpOwogICAg
IGlmIChlbGVtKQogICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW0tPm5vZGVOYW1lKCkpLmRlcHJl
Y2F0ZWRTdHJpbmcoKTsKICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOwogfQogCi12b2lk
IHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdDb250YWluZXIgJmNvbnRhaW5l
ciwgaW50IGluZGVudCkKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNW
R0NvbnRhaW5lciYgY29udGFpbmVyLCBpbnQgaW5kZW50KQogewogICAgIHdyaXRlSW5kZW50KHRz
LCBpbmRlbnQpOwogICAgIHRzIDw8IGNvbnRhaW5lci5yZW5kZXJOYW1lKCk7Ci0gICAgCisKICAg
ICBpZiAoY29udGFpbmVyLmVsZW1lbnQoKSkgewogICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHRh
Z05hbWUgPSBnZXRUYWdOYW1lKGNvbnRhaW5lci5lbGVtZW50KCkpOwogICAgICAgICBpZiAoIXRh
Z05hbWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgdHMgPDwgIiB7IiA8PCB0YWdOYW1lIDw8ICJ9
IjsKICAgICB9Ci0gICAgCisKICAgICB0cyA8PCBjb250YWluZXIgPDwgZW5kbDsKLSAgICAKLSAg
ICBmb3IgKFJlbmRlck9iamVjdCAqY2hpbGQgPSBjb250YWluZXIuZmlyc3RDaGlsZCgpOyBjaGls
ZCAhPSBOVUxMOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorCisgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGNoaWxkID0gY29udGFpbmVyLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIHdyaXRlKHRzLCAqY2hpbGQsIGluZGVudCAr
IDEpOwogfQogCi12b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJQYXRoICZw
YXRoLCBpbnQgaW5kZW50KQordm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
UGF0aCYgcGF0aCwgaW50IGluZGVudCkKIHsKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsK
ICAgICB0cyA8PCBwYXRoLnJlbmRlck5hbWUoKTsKLSAgICAKKwogICAgIGlmIChwYXRoLmVsZW1l
bnQoKSkgewogICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHRhZ05hbWUgPSBnZXRUYWdOYW1lKHBh
dGguZWxlbWVudCgpKTsKICAgICAgICAgaWYgKCF0YWdOYW1lLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIHRzIDw8ICIgeyIgPDwgdGFnTmFtZSA8PCAifSI7CiAgICAgfQotICAgIAorCiAgICAgdHMg
PDwgcGF0aCA8PCBlbmRsOwogfQogCi12b2lkIHdyaXRlUmVuZGVyUmVzb3VyY2VzKFRleHRTdHJl
YW0mIHRzLCBOb2RlICpwYXJlbnQpCit2b2lkIHdyaXRlUmVuZGVyUmVzb3VyY2VzKFRleHRTdHJl
YW0mIHRzLCBOb2RlKiBwYXJlbnQpCiB7CiAgICAgQVNTRVJUKHBhcmVudCk7Ci0gICAgTm9kZSAq
bm9kZSA9IHBhcmVudDsKKyAgICBOb2RlKiBub2RlID0gcGFyZW50OwogICAgIGRvIHsKICAgICAg
ICAgaWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBTVkdFbGVtZW50ICpzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5v
ZGUpOworICAgICAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxl
bWVudCo+KG5vZGUpOwogICAgICAgICBpZiAoIXN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTVkdTdHlsZWRFbGVtZW50ICpzdHlsZWQgPSBz
dGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CisgICAgICAgIFNWR1N0
eWxlZEVsZW1lbnQqIHN0eWxlZCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihzdmdF
bGVtZW50KTsKICAgICAgICAgUmVmUHRyPFNWR1Jlc291cmNlPiByZXNvdXJjZShzdHlsZWQtPmNh
bnZhc1Jlc291cmNlKCkpOwogICAgICAgICBpZiAoIXJlc291cmNlKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIAorCiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgZWxlbWVudElkID0g
c3ZnRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKS5kZXByZWNhdGVkU3Ry
aW5nKCk7CiAgICAgICAgIGlmIChyZXNvdXJjZS0+aXNQYWludFNlcnZlcigpKSB7CiAgICAgICAg
ICAgICBSZWZQdHI8U1ZHUGFpbnRTZXJ2ZXI+IHBhaW50U2VydmVyID0gV1RGOjpzdGF0aWNfcG9p
bnRlcl9jYXN0PFNWR1BhaW50U2VydmVyPihyZXNvdXJjZSk7CkBAIC0zNjYsNiArMzcyLDYgQEAg
dm9pZCB3cml0ZVJlbmRlclJlc291cmNlcyhUZXh0U3RyZWFtJiB0cwogICAgIH0gd2hpbGUgKChu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShwYXJlbnQpKSk7CiB9CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lvbiAxODIzNSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsOSAr
MjAsMTQgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBTVkdSZW5kZXJUcmVlQXNU
ZXh0X2gKKyNkZWZpbmUgU1ZHUmVuZGVyVHJlZUFzVGV4dF9oCisKKyNpZmRlZiBTVkdfU1VQUE9S
VAorCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKIApAQCAtMzUsOCArNDAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRmxv
YXRTaXplOwogICAgIGNsYXNzIEludFBvaW50OwogICAgIGNsYXNzIEludFJlY3Q7Ci0gICAgY2xh
c3MgS0NDbGlwRGF0YTsKLSAgICBjbGFzcyBLQ1BhdGhEYXRhOwogICAgIGNsYXNzIE5vZGU7CiAg
ICAgY2xhc3MgUmVuZGVyUGF0aDsKICAgICBjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CkBAIC00
Niw3ICs0OSw3IEBAIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0MKIHZv
aWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclBhdGgmLCBpbnQgaW5kZW50ID0gMCk7
CiB2b2lkIHdyaXRlUmVuZGVyUmVzb3VyY2VzKFRleHRTdHJlYW0mLCBOb2RlKiBwYXJlbnQpOwog
Ci0vLyBoZWxwZXIgb3BlcmF0b3JzIGRlZmluZWQgdXNlZCBpbiB2YXJpb3VzIGNsYXNzZXMgdG8g
ZHVtcCB0aGUgcmVuZGVyIHRyZWUuIAorLy8gaGVscGVyIG9wZXJhdG9ycyBkZWZpbmVkIHVzZWQg
aW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlLgogVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRSZWN0Jik7CiBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwpAQCAtNTcsMTkgKzYwLDE5
IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnMKIAogLy8gaGVscGVy
IG9wZXJhdG9ycyBzcGVjaWZpYyB0byBkdW1waW5nIHRoZSByZW5kZXIgdHJlZS4gdGhlc2UgYXJl
IHVzZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlCiAvLyB0aGVz
ZSBjb3VsZCBiZSBkZWZpbmVkIGluIHNlcGFyYXRlIG5hbWVzcGFjZSB0byBhdm9pZCBtYXRjaGlu
ZyB0aGVzZSBnZW5lcmljIHNpZ25hdHVyZXMgdW5pbnRlbnRpb25hbGx5LgotICAgIAorCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBJdGVtPgogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgVmVjdG9yPEl0ZW0qPiYgdikKIHsKICAgICB0cyA8PCAiWyI7Ci0gICAgCisKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdi5zaXplKCk7IGkrKykgewogICAgICAgICB0cyA8
PCAqdltpXTsKICAgICAgICAgaWYgKGkgPCB2LnNpemUoKSAtIDEpCiAgICAgICAgICAgICB0cyA8
PCAiLCAiOwogICAgIH0KLSAgICAKLSAgICB0cyA8PCAiXSI7ICAgCisKKyAgICB0cyA8PCAiXSI7
CiAgICAgcmV0dXJuIHRzOwogfQogCkBAIC03NywxNSArODAsMTkgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgSXRlbT4KIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFZl
Y3RvcjxJdGVtPiYgdikKIHsKICAgICB0cyA8PCAiWyI7Ci0gICAgCisKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdi5zaXplKCk7IGkrKykgewogICAgICAgICB0cyA8PCB2W2ldOwogICAg
ICAgICBpZiAoaSA8IHYuc2l6ZSgpIC0gMSkKICAgICAgICAgICAgIHRzIDw8ICIsICI7CiAgICAg
fQotICAgIAorCiAgICAgdHMgPDwgIl0iOwogICAgIHJldHVybiB0czsKIH0KIAotfQorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU1ZHX1NVUFBPUlQKKworI2VuZGlmIC8vIFNW
R1JlbmRlclRyZWVBc1RleHRfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGlu
ZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJv
eC5jcHAJKHJldmlzaW9uIDE4MjM1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGlu
ZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwxNCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgU1ZHUm9vdElubGluZUJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKSAKK3ZvaWQgU1ZH
Um9vdElubGluZUJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywg
aW50IHBhcmVudFgsIGludCBwYXJlbnRZKQogewogICAgIHBhaW50U1ZHSW5saW5lRmxvdyh0aGlz
LCBvYmplY3QoKSwgcGFpbnRJbmZvLCBwYXJlbnRYLCBwYXJlbnRZKTsKIH0KIAogaW50IFNWR1Jv
b3RJbmxpbmVCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50IHgsIGludCYgbGVmdFBvc2l0
aW9uLCBpbnQmIHJpZ2h0UG9zaXRpb24sIGJvb2wmIG5lZWRzV29yZFNwYWNpbmcpCiB7Ci0gICAg
Ly9yZW1vdmUgYW55IG9mZnNldHMgY2F1c2VkIGJ5IFJUTCB0ZXh0IGxheW91dAorICAgIC8vIFJl
bW92ZSBhbnkgb2Zmc2V0cyBjYXVzZWQgYnkgUlRMIHRleHQgbGF5b3V0CiAgICAgeCA9IDA7CiAg
ICAgbGVmdFBvc2l0aW9uID0gMDsKICAgICByaWdodFBvc2l0aW9uID0gMDsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdSb290SW5saW5lQm94LmgJKHJldmlzaW9uIDE4MjM1KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxNSArMjEs
MTUgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBTVkdSb290SW5saW5lQm94X0gKLSNkZWZpbmUgU1ZH
Um9vdElubGluZUJveF9ICisjaWZuZGVmIFNWR1Jvb3RJbmxpbmVCb3hfaAorI2RlZmluZSBTVkdS
b290SW5saW5lQm94X2gKIAogI2lmZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlICJSb290SW5s
aW5lQm94LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKKwogY2xhc3MgU1ZHUm9vdElu
bGluZUJveCA6IHB1YmxpYyBSb290SW5saW5lQm94IHsKIHB1YmxpYzoKICAgICBTVkdSb290SW5s
aW5lQm94KFJlbmRlck9iamVjdCogb2JqKQpAQCAtNDYsNCArNDYsNCBAQCBwdWJsaWM6CiAKICNl
bmRpZiAvLyBTVkdfU1VQUE9SVAogCi0jZW5kaWYgLy8gU1ZHUm9vdElubGluZUJveF9ICisjZW5k
aWYgLy8gU1ZHUm9vdElubGluZUJveF9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9UYWJsZUxh
eW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgJKHJl
dmlzaW9uIDE4MjM1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsOCArMjAsOCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CiAgKi8KIAotI2lmbmRlZiBUYWJsZUxheW91dF9ICi0jZGVmaW5lIFRhYmxlTGF5b3V0X0gKKyNp
Zm5kZWYgVGFibGVMYXlvdXRfaAorI2RlZmluZSBUYWJsZUxheW91dF9oCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMzMsNiArMzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV90YWJsZSh0
YWJsZSkKICAgICB7CiAgICAgfQorCiAgICAgdmlydHVhbCB+VGFibGVMYXlvdXQoKSB7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKSA9IDA7CkBAIC00NCw0ICs0NSw0IEBA
IHByb3RlY3RlZDoKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVGFibGVM
YXlvdXRfSAorI2VuZGlmIC8vIFRhYmxlTGF5b3V0X2gK
</data>
<flag name="review"
          id="4326"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11887</attachid>
            <date>2006-12-16 13:39:35 -0800</date>
            <delta_ts>2006-12-16 14:07:14 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>newestCleaning2.diff</filename>
            <type>text/plain</type>
            <size>207493</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODI2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjI4IEBACisyMDA2LTEyLTE2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGF0Y2gg
Zm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODQ0CisgICAgICAg
IENvZGUgQ2xlYW51cCBmb3IgbW9yZSBvZiB0aGUgcmVuZGVyaW5nIGNvZGUKKworICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpjYWxj
TWluTWF4V2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OlJlbmRlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dDo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6ZGVz
dHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjphdHRhY2hUZXh0Qm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmZpbmROZXh0SW5saW5lVGV4dEJveCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvckNvb3JkaW5hdGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpcnN0UmVuZGVyZXJPbk5leHRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
Omxhc3RSZW5kZXJlck9uUHJldkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6
Y2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnBvc09mQ2hhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjphbGxBc2NpaSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0OjpzaG91bGRVc2VNb25vc3BhY2VDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0OjpjYWNoZVdpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Ojp3aWR0aEZyb21DYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp0cmltbWVk
TWluTWF4V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y2FsY01pbk1heFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3BhY2VBY2NvcmRpbmdUb1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bWluWFBvcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUZXh0OjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
OjpzZXRUZXh0V2l0aE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzZXRU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHQ6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHQ6OmdldEFic29sdXRlUmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp2ZXJ0aWNh
bFBvc2l0aW9uSGludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpmb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNhcmV0TWluT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHQ6OmNhcmV0TWF4T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHQ6OnByZXZpb3VzT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6
Om5leHRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6aW5saW5lQm94KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dDo6aXNUZXh0RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6
ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Om5vZGVBdFBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnN0cmlu
Z0xlbmd0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpzZXRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpkaXNhYmxlZFRleHRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbDo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sOjpjcmVhdGVJbm5lclRleHRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlUmVzdWx0c0J1dHRvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjcmVhdGVDYW5jZWxCdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6c2hvd1BsYWNlaG9sZGVySWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmhpZGVQbGFjZWhvbGRlcklm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0
cmVlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnVwZGF0
ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpzZWxl
Y3Rpb25TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6c2V0U2Vs
ZWN0aW9uUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnZpc2li
bGVQb3NpdGlvbkZvckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
OjpzdWJ0cmVlSGFzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bDo6dGV4dFdpdGhIYXJkTGluZUJyZWFrcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbDo6Y2FsY0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6Omxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY01pbk1heFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjphZGRTZWFyY2hSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnNob3dQb3B1cCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6aXRlbVRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6Oml0ZW1Jc0VuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2w6Omxpc3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sOjpzY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnJlbmRlck5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnJlbW92ZUxlZnRvdmVy
QW5vbnltb3VzQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZyYWdtZW50OjpSZW5kZXJUZXh0RnJh
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZyYWdtZW50OjpvcmlnaW5hbFN0
cmluZyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZyYWdtZW50Ojppc1RleHRGcmFnbWVudCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjphZGp1c3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNDb250
cm9sU3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzdGF0ZUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6UmVuZGVy
VGhlbWVNYWMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtQWN0
aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Gb250
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjppc0NvbnRyb2xTdHlsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjp1cGRhdGVDaGVja2VkU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludENoZWNrYm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpjaGVja2JveE1hcmdpbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldENoZWNrYm94Q2VsbFN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OnJhZGlvTWFyZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6c2V0UmFkaW9DZWxsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmJ1dHRv
bk1hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldEJ1dHRvblNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldEJ1dHRvbkNlbGxTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwQnV0dG9uTWFyZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cG9wdXBCdXR0b25QYWRkaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlRvcEdyYWRpZW50SW50ZXJwb2xhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Qm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
YWluR3JhZGllbnRJbnRlcnBvbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0dyYWRpZW50
SW50ZXJwb2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVu
dUxpc3RCdXR0b25HcmFkaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNl
dFNlYXJjaENlbGxTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlSW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OnByaW50Qm9yZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VGFnTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjppc0VtcHR5T3JVbnN0eWxlZEFwcGxlU3R5bGVTcGFuKToKKyAgICAgICAg
KFdlYkNvcmU6OndyaXRlVGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjp3cml0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpub2RlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjYWxjTWluTWF4V2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVmlldzo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmFi
c29sdXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVuZGVyZXJBZnRlclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZXc6OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNlbGVjdGlv
blN0YXJ0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnVwZGF0ZVdpZGdldFBv
c2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjphZGRXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVtb3ZlV2lkZ2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OnZpZXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OmRvY0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojpkb2NXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRCZXN0VHJ1bmNhdGVkQXQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpyZW5kZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNlbGVjdGlvblN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNlbGVjdGlvbkVuZCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJXaWRnZXQ6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpyZXNp
emVXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpzZXRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcldpZGdldDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyV2lkZ2V0OjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6cGxhY2VF
bGxpcHNpcyk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpmaWxsTGluZVNlbGVj
dGlvbkdhcCk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpmaXJzdFNlbGVjdGVkQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6Omxhc3RTZWxlY3RlZEJveCk6CisgICAg
ICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZWxlY3Rpb25Ub3ApOgorICAgICAgICAoV2Vi
Q29yZTo6Um9vdElubGluZUJveDo6Y2xvc2VzdExlYWZDaGlsZEZvclhQb3MpOgorICAgICAgICAq
IHJlbmRlcmluZy9Sb290SW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5l
Qm94Ojppc1Jvb3RJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6
c2V0VmVydGljYWxPdmVyZmxvd1Bvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5s
aW5lQm94OjpzZXRIb3Jpem9udGFsT3ZlcmZsb3dQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Um9vdElubGluZUJveDo6c2V0VmVydGljYWxTZWxlY3Rpb25Qb3NpdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6bGluZUJyZWFrT2JqKToKKyAgICAgICAgKFdlYkNv
cmU6OlJvb3RJbmxpbmVCb3g6OmxpbmVCcmVha1Bvcyk6CisgICAgICAgIChXZWJDb3JlOjpSb290
SW5saW5lQm94OjpzZXRMaW5lQnJlYWtQb3MpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGlu
ZUJveDo6YmxvY2tIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6c2V0
QmxvY2tIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6ZW5kc1dpdGhC
cmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZXRFbmRzV2l0aEJyZWFr
KToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdJbmxpbmVGbG93Qm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpwYWlu
dFNWR0lubGluZUZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNsYXRlQm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OnBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRhbGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OnBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFic0Jhc2VsaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OnBsYWNlU1ZHRmxvd1ZlcnRpY2FsbHkpOgorICAgICAgICAqIHJlbmRlcmluZy9T
VkdJbmxpbmVGbG93Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFN0cmVhbVNlcGFyYXRvcjo6VGV4dFN0cmVh
bVNlcGFyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6Omhhc0ZyYWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUluZGVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjp3cml0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFRhZ05h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVS
ZW5kZXJSZXNvdXJjZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiByZW5kZXJpbmcv
U1ZHUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpwbGFjZUJveGVz
SG9yaXpvbnRhbGx5KToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9UYWJsZUxheW91dC5oOgorCiAyMDA2LTEyLTE2ICBaYWNrIFJ1
c2luICA8emFja0BrZGUub3JnPgogCiAgICAgICAgIEFkZCBhIHN0dWIgZm9yIFNlYXJjaFBvcHVw
TWVudSBmb3IgUXQgY29kZS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxODI2MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05MTAzLDEwICs5MTAzLDYgQEAKIAkJ
RjUyM0QyRjMwMkRFNDQzQjAxODYzNUNBIC8qIHJlbmRlcmluZyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTczNTJDMTcwQjFCQjg5RDAwQTk4NkQwIC8q
IFJlbmRlclNWR0Jsb2NrLmNwcCAqLywKLQkJCQlBNzM1MkMxODBCMUJCODlEMDBBOTg2RDAgLyog
UmVuZGVyU1ZHQmxvY2suaCAqLywKLQkJCQlBQjI0N0E2QTBBRkQ2MzgzMDAzRkE1RkQgLyogUmVu
ZGVyU2xpZGVyLmNwcCAqLywKLQkJCQlBQjI0N0E2QjBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVy
U2xpZGVyLmggKi8sCiAJCQkJQThDRkYwNEIwQTE1NEYwOTAwMEE0MjM0IC8qIEF1dG9UYWJsZUxh
eW91dC5jcHAgKi8sCiAJCQkJQThDRkYwNDkwQTE1NEYwOTAwMEE0MjM0IC8qIEF1dG9UYWJsZUxh
eW91dC5oICovLAogCQkJCUJDRUE0ODEzMDk3RDkzMDIwMDk0QzlFNCAvKiBiaWRpLmNwcCAqLywK
QEAgLTkxOTksOCArOTE5NSwxMiBAQAogCQkJCTg1M0NBOUVGMEFFRUM2NTcwMDIzNzJEQyAvKiBS
ZW5kZXJQYXRoLmggKi8sCiAJCQkJQTg3MURGREUwQTE1Mzc2QjAwQjEyQTY4IC8qIFJlbmRlclJl
cGxhY2VkLmNwcCAqLywKIAkJCQlBODcxREZERjBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyUmVw
bGFjZWQuaCAqLywKKwkJCQlBQjI0N0E2QTBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVy
LmNwcCAqLywKKwkJCQlBQjI0N0E2QjBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmgg
Ki8sCiAJCQkJQkNFQTQ4NDQwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclN0eWxlLmNwcCAqLywK
IAkJCQlCQ0VBNDg0NTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyU3R5bGUuaCAqLywKKwkJCQlB
NzM1MkMxNzBCMUJCODlEMDBBOTg2RDAgLyogUmVuZGVyU1ZHQmxvY2suY3BwICovLAorCQkJCUE3
MzUyQzE4MEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9jay5oICovLAogCQkJCTg1M0NB
OUNBMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIuY3BwICovLAogCQkJCTg1
M0NBOUNCMEFFRUM1RTkwMDIzNzJEQyAvKiBSZW5kZXJTVkdDb250YWluZXIuaCAqLywKIAkJCQk4
NTNDQTlDQzBBRUVDNUU5MDAyMzcyREMgLyogUmVuZGVyU1ZHSW1hZ2UuY3BwICovLApAQCAtOTIz
MSw4ICs5MjMxLDYgQEAKIAkJCQlCQ0VBNDg0RjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGV4
dEZyYWdtZW50LmggKi8sCiAJCQkJQkNFQTQ4NEEwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRo
ZW1lLmNwcCAqLywKIAkJCQlCQ0VBNDg0QjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWUu
aCAqLywKLQkJCQlCMkVCREM5QTBBRjc3RTM0MDBBRTRBNjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAgKi8sCi0JCQkJQjJFQkRDOUIwQUY3N0UzNDAwQUU0QTY4IC8qIFNWR1JlbmRlclRyZWVB
c1RleHQuaCAqLywKIAkJCQlCQ0VBNDg0OTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVN
YWMubW0gKi8sCiAJCQkJQkNFQTQ4NDgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFj
LmggKi8sCiAJCQkJOTM5NTVBNDIwM0Q3MjkzMjAwODYzNUNFIC8qIFJlbmRlclRyZWVBc1RleHQu
Y3BwICovLApAQCAtOTI0NSw2ICs5MjQzLDggQEAKIAkJCQlBOENGRjVEQTBBMTU1QTA1MDAwQTQy
MzQgLyogUm9vdElubGluZUJveC5oICovLAogCQkJCTg1M0NBOUUyMEFFRUM2MDgwMDIzNzJEQyAv
KiBTVkdJbmxpbmVGbG93Qm94LmNwcCAqLywKIAkJCQk4NTNDQTlFMzBBRUVDNjA4MDAyMzcyREMg
LyogU1ZHSW5saW5lRmxvd0JveC5oICovLAorCQkJCUIyRUJEQzlBMEFGNzdFMzQwMEFFNEE2OCAv
KiBTVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCAqLywKKwkJCQlCMkVCREM5QjBBRjc3RTM0MDBBRTRB
NjggLyogU1ZHUmVuZGVyVHJlZUFzVGV4dC5oICovLAogCQkJCTg1M0NBOUU0MEFFRUM2MDgwMDIz
NzJEQyAvKiBTVkdSb290SW5saW5lQm94LmNwcCAqLywKIAkJCQk4NTNDQTlFNTBBRUVDNjA4MDAy
MzcyREMgLyogU1ZHUm9vdElubGluZUJveC5oICovLAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBB
NDIzNCAvKiBUYWJsZUxheW91dC5oICovLApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Q291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRl
ci5jcHAJKHJldmlzaW9uIDE4MjYwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIFJlbmRlckNvdW50
ZXI6OmNhbGNNaW5NYXhXaWR0aCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdHIgPSBuZXcg
U3RyaW5nSW1wbChtX2l0ZW0uY2hhcmFjdGVycygpLCBtX2l0ZW0ubGVuZ3RoKCkpOworICAgIG1f
c3RyID0gbmV3IFN0cmluZ0ltcGwobV9pdGVtLmNoYXJhY3RlcnMoKSwgbV9pdGVtLmxlbmd0aCgp
KTsKIAogICAgIFJlbmRlclRleHQ6OmNhbGNNaW5NYXhXaWR0aCgpOwogfQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDE4MjYwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDczICszMyw1MSBAQAogI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJC
bG9jay5oIgorI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dFN0
eWxlLmgiCiAjaW5jbHVkZSAiYnJlYWtfbGluZXMuaCIKLSNpbmNsdWRlICJUZXh0QnJlYWtJdGVy
YXRvci5oIgogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbnQgUmVuZGVyVGV4dDo6cHJldmlvdXNP
ZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0Ci17Ci0gICAgU3RyaW5nSW1wbCAqc2kgPSBzdHIuZ2V0
KCk7Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yID0gY2hhcmFjdGVyQnJlYWtJdGVy
YXRvcihzaS0+Y2hhcmFjdGVycygpLCBzaS0+bGVuZ3RoKCkpOwotICAgIGlmICghaXRlcmF0b3Ip
Ci0gICAgICAgIHJldHVybiBjdXJyZW50IC0gMTsKLQotICAgIGxvbmcgcmVzdWx0ID0gdGV4dEJy
ZWFrUHJlY2VkaW5nKGl0ZXJhdG9yLCBjdXJyZW50KTsKLSAgICBpZiAocmVzdWx0ID09IFRleHRC
cmVha0RvbmUpCi0gICAgICAgIHJlc3VsdCA9IGN1cnJlbnQgLSAxOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotaW50IFJlbmRlclRleHQ6Om5leHRPZmZzZXQoaW50IGN1cnJlbnQpIGNvbnN0
Ci17Ci0gICAgU3RyaW5nSW1wbCAqc2kgPSBzdHIuZ2V0KCk7Ci0gICAgVGV4dEJyZWFrSXRlcmF0
b3IqIGl0ZXJhdG9yID0gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihzaS0+Y2hhcmFjdGVycygpLCBz
aS0+bGVuZ3RoKCkpOwotICAgIGlmICghaXRlcmF0b3IpCi0gICAgICAgIHJldHVybiBjdXJyZW50
ICsgMTsKLSAgICAKLSAgICBsb25nIHJlc3VsdCA9IHRleHRCcmVha0ZvbGxvd2luZyhpdGVyYXRv
ciwgY3VycmVudCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBUZXh0QnJlYWtEb25lKQotICAgICAgICBy
ZXN1bHQgPSBjdXJyZW50ICsgMTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlbmRlclRl
eHQ6OlJlbmRlclRleHQoTm9kZSogbm9kZSwgU3RyaW5nSW1wbCAqX3N0cikKLSAgICAgOiBSZW5k
ZXJPYmplY3Qobm9kZSksIHN0cihfc3RyKSwgbV9maXJzdFRleHRCb3goMCksIG1fbGFzdFRleHRC
b3goMCkKLSAgICAgLCBtX21pbldpZHRoKC0xKSwgbV9tYXhXaWR0aCgtMSksIG1fc2VsZWN0aW9u
U3RhdGUoU2VsZWN0aW9uTm9uZSkKLSAgICAgLCBtX2xpbmVzRGlydHkoZmFsc2UpLCBtX2NvbnRh
aW5zUmV2ZXJzZWRUZXh0KGZhbHNlKQotICAgICAsIG1fYWxsQXNjaWlDaGVja2VkKGZhbHNlKSwg
bV9hbGxBc2NpaShmYWxzZSkKK1JlbmRlclRleHQ6OlJlbmRlclRleHQoTm9kZSogbm9kZSwgU3Ry
aW5nSW1wbCogc3RyKQorICAgICA6IFJlbmRlck9iamVjdChub2RlKQorICAgICAsIG1fc3RyKHN0
cikKKyAgICAgLCBtX2ZpcnN0VGV4dEJveCgwKQorICAgICAsIG1fbGFzdFRleHRCb3goMCkKKyAg
ICAgLCBtX21pbldpZHRoKC0xKQorICAgICAsIG1fbWF4V2lkdGgoLTEpCisgICAgICwgbV9zZWxl
Y3Rpb25TdGF0ZShTZWxlY3Rpb25Ob25lKQorICAgICAsIG1fbGluZXNEaXJ0eShmYWxzZSkKKyAg
ICAgLCBtX2NvbnRhaW5zUmV2ZXJzZWRUZXh0KGZhbHNlKQorICAgICAsIG1fYWxsQXNjaWlDaGVj
a2VkKGZhbHNlKQorICAgICAsIG1fYWxsQXNjaWkoZmFsc2UpCiAgICAgICwgbV9tb25vc3BhY2VD
aGFyYWN0ZXJXaWR0aCgwKQogewogICAgIHNldFJlbmRlclRleHQoKTsKLSAgICBpZiAoc3RyKQot
ICAgICAgICBzdHIgPSBzdHItPnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJv
bCgpKTsKLSAgICBBU1NFUlQoIXN0ciB8fCAhc3RyLT5sZW5ndGgoKSB8fCBzdHItPmNoYXJhY3Rl
cnMoKSk7CisgICAgaWYgKG1fc3RyKQorICAgICAgICBtX3N0ciA9IG1fc3RyLT5yZXBsYWNlKCdc
XCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CisgICAgQVNTRVJUKCFtX3N0ciB8fCAh
bV9zdHItPmxlbmd0aCgpIHx8IG1fc3RyLT5jaGFyYWN0ZXJzKCkpOwogfQogCi12b2lkIFJlbmRl
clRleHQ6OnNldFN0eWxlKFJlbmRlclN0eWxlICpfc3R5bGUpCit2b2lkIFJlbmRlclRleHQ6OnNl
dFN0eWxlKFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsKLSAgICBpZiAoIHN0eWxlKCkgIT0gX3N0
eWxlICkgewotICAgICAgICBib29sIG5lZWRUb1RyYW5zZm9ybVRleHQgPSAoIXN0eWxlKCkgJiYg
X3N0eWxlLT50ZXh0VHJhbnNmb3JtKCkgIT0gVFROT05FKSB8fAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoc3R5bGUoKSAmJiBzdHlsZSgpLT50ZXh0VHJhbnNmb3JtKCkgIT0g
X3N0eWxlLT50ZXh0VHJhbnNmb3JtKCkpOworICAgIGlmIChzdHlsZSgpICE9IG5ld1N0eWxlKSB7
CisgICAgICAgIGJvb2wgbmVlZFRvVHJhbnNmb3JtVGV4dCA9ICghc3R5bGUoKSAmJiBuZXdTdHls
ZS0+dGV4dFRyYW5zZm9ybSgpICE9IFRUTk9ORSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0eWxlKCkgJiYgc3R5bGUoKS0+dGV4dFRyYW5zZm9ybSgpICE9IG5ld1N0
eWxlLT50ZXh0VHJhbnNmb3JtKCkpOwogCi0gICAgICAgIGJvb2wgbmVlZFRvU2VjdXJlVGV4dCA9
ICghc3R5bGUoKSAmJiBfc3R5bGUtPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORSk7CisgICAgICAg
IGJvb2wgbmVlZFRvU2VjdXJlVGV4dCA9ICghc3R5bGUoKSAmJiBuZXdTdHlsZS0+dGV4dFNlY3Vy
aXR5KCkgIT0gVFNOT05FKTsKIAotICAgICAgICBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKCBfc3R5
bGUgKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZShuZXdTdHlsZSk7CiAKICAgICAg
ICAgaWYgKG5lZWRUb1RyYW5zZm9ybVRleHQgfHwgbmVlZFRvU2VjdXJlVGV4dCkgewogICAgICAg
ICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHRleHRUb1RyYW5zZm9ybSA9IG9yaWdpbmFsU3RyaW5n
KCk7CiAgICAgICAgICAgICBpZiAodGV4dFRvVHJhbnNmb3JtKQorICAgICAgICAgICAgICAgIC8v
IHNldFRleHQgYWxzbyBjYWxscyBjYWNoZVdpZHRocygpLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRv
IGNhbGwgaXQgYWdhaW4gaW4gdGhhdCBjYXNlLgogICAgICAgICAgICAgICAgIHNldFRleHQodGV4
dFRvVHJhbnNmb3JtLmdldCgpLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICAvLyBzZXRUZXh0
IGFsc28gY2FsbHMgY2FjaGVXaWR0aHMoKSwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIGl0
IGFnYWluIGluIHRoYXQgY2FzZS4KLSAgICAgICAgZWxzZQorICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIGNhY2hlV2lkdGhzKCk7CiAgICAgfQogfQpAQCAtMTE1LDggKzkzLDcgQEAgdm9pZCBS
ZW5kZXJUZXh0OjpkZXN0cm95KCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoSW5s
aW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4
dEJveCgpKQogICAgICAgICAgICAgICAgIGJveC0+cmVtb3ZlKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAocGFyZW50KCkpCisgICAgICAgIH0gZWxzZSBpZiAocGFyZW50KCkpCiAgICAg
ICAgICAgICBwYXJlbnQoKS0+ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQodGhpcyk7CiAgICAg
fQogICAgIGRlbGV0ZVRleHRCb3hlcygpOwpAQCAtMTQwLDggKzExNyw3IEBAIHZvaWQgUmVuZGVy
VGV4dDo6YXR0YWNoVGV4dEJveChJbmxpbmVUZXgKICAgICBpZiAobV9sYXN0VGV4dEJveCkgewog
ICAgICAgICBtX2xhc3RUZXh0Qm94LT5zZXROZXh0TGluZUJveChib3gpOwogICAgICAgICBib3gt
PnNldFByZXZpb3VzTGluZUJveChtX2xhc3RUZXh0Qm94KTsKLSAgICB9Ci0gICAgZWxzZQorICAg
IH0gZWxzZQogICAgICAgICBtX2ZpcnN0VGV4dEJveCA9IGJveDsKICAgICBJbmxpbmVUZXh0Qm94
KiBsYXN0ID0gYm94OwogICAgIGZvciAoSW5saW5lVGV4dEJveCogY3VyciA9IGJveDsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRUZXh0Qm94KCkpIHsKQEAgLTE3NywxMSArMTUzLDYgQEAgdm9pZCBS
ZW5kZXJUZXh0OjpkZWxldGVUZXh0Qm94ZXMoKQogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUZXh0
Ojppc1RleHRGcmFnbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclRleHQ6Om9yaWdpbmFsU3RyaW5nKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZWxlbWVudCgpID8gZWxlbWVudCgpLT5zdHJpbmcoKSA6IDA7CkBAIC0yMTMs
MjAgKzE4NCwxOSBAQCB2b2lkIFJlbmRlclRleHQ6OmFkZExpbmVCb3hSZWN0cyhWZWN0b3I8CiAg
ICAgfQogfQogCi1JbmxpbmVUZXh0Qm94KiBSZW5kZXJUZXh0OjpmaW5kTmV4dElubGluZVRleHRC
b3goaW50IG9mZnNldCwgaW50ICZwb3MpIGNvbnN0CitJbmxpbmVUZXh0Qm94KiBSZW5kZXJUZXh0
OjpmaW5kTmV4dElubGluZVRleHRCb3goaW50IG9mZnNldCwgaW50JiBwb3MpIGNvbnN0CiB7Ci0g
ICAgLy8gVGhlIHRleHQgcnVucyBwb2ludCB0byBwYXJ0cyBvZiB0aGUgcmVuZGVydGV4dCdzIHN0
ciBzdHJpbmcKKyAgICAvLyBUaGUgdGV4dCBydW5zIHBvaW50IHRvIHBhcnRzIG9mIHRoZSByZW5k
ZXJ0ZXh0J3MgbV9zdHIKICAgICAvLyAodGhleSBkb24ndCBpbmNsdWRlICdcbicpCi0gICAgLy8g
RmluZCB0aGUgdGV4dCBydW4gdGhhdCBpbmNsdWRlcyB0aGUgY2hhcmFjdGVyIGF0IEBwIG9mZnNl
dAorICAgIC8vIEZpbmQgdGhlIHRleHQgcnVuIHRoYXQgaW5jbHVkZXMgdGhlIGNoYXJhY3RlciBh
dCBvZmZzZXQKICAgICAvLyBhbmQgcmV0dXJuIHBvcywgd2hpY2ggaXMgdGhlIHBvc2l0aW9uIG9m
IHRoZSBjaGFyIGluIHRoZSBydW4uCiAKICAgICBpZiAoIW1fZmlyc3RUZXh0Qm94KQogICAgICAg
ICByZXR1cm4gMDsKLSAgICAKKwogICAgIElubGluZVRleHRCb3gqIHMgPSBtX2ZpcnN0VGV4dEJv
eDsKICAgICBpbnQgb2ZmID0gcy0+bV9sZW47Ci0gICAgd2hpbGUgKG9mZnNldCA+IG9mZiAmJiBz
LT5uZXh0VGV4dEJveCgpKQotICAgIHsKKyAgICB3aGlsZSAob2Zmc2V0ID4gb2ZmICYmIHMtPm5l
eHRUZXh0Qm94KCkpIHsKICAgICAgICAgcyA9IHMtPm5leHRUZXh0Qm94KCk7CiAgICAgICAgIG9m
ZiA9IHMtPm1fc3RhcnQgKyBzLT5tX2xlbjsKICAgICB9CkBAIC0yNDgsNyArMjE4LDcgQEAgVmlz
aWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yQwogCiAgICAgLy8gR2V0IHRoZSBv
ZmZzZXQgZm9yIHRoZSBwb3NpdGlvbiwgc2luY2UgdGhpcyB3aWxsIHRha2UgcnRsIHRleHQgaW50
byBhY2NvdW50LgogICAgIGludCBvZmZzZXQ7Ci0gICAgCisKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGJlIGFibGUgdG8gcm9sbCB0aGVzZSBzcGVjaWFsIGNhc2VzIGludG8gdGhlIGdlbmVyYWwg
Y2FzZXMgaW4gdGhlIGxvb3AgYmVsb3cuCiAgICAgaWYgKGZpcnN0VGV4dEJveCgpICYmIHkgPCBh
YnN5ICsgZmlyc3RUZXh0Qm94KCktPnJvb3QoKS0+Ym90dG9tT3ZlcmZsb3coKSAmJiB4IDwgYWJz
eCArIGZpcnN0VGV4dEJveCgpLT5tX3gpIHsKICAgICAgICAgLy8gYXQgdGhlIHkgY29vcmRpbmF0
ZSBvZiB0aGUgZmlyc3QgbGluZSBvciBhYm92ZQpAQCAtMjkzLDU2ICsyNjMsNTYgQEAgVmlzaWJs
ZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yQwogICAgICAgICAgICAgbGFzdEJveEFi
b3ZlID0gYm94OwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbihlbGVtZW50KCksIGxhc3RCb3hBYm92ZSA/IGxhc3RCb3hBYm92ZS0+bV9zdGFydCAr
IGxhc3RCb3hBYm92ZS0+bV9sZW4gOiAwLCBET1dOU1RSRUFNKTsKIH0KIAogI2lmIF9fR05VQ19f
Ci1zdGF0aWMgUmVuZGVyT2JqZWN0ICpmaXJzdFJlbmRlcmVyT25OZXh0TGluZShJbmxpbmVCb3gg
KmJveCkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworc3RhdGljIFJlbmRlck9iamVjdCogZmly
c3RSZW5kZXJlck9uTmV4dExpbmUoSW5saW5lQm94KiBib3gpIF9fYXR0cmlidXRlX18gKCh1bnVz
ZWQpKTsKICNlbmRpZgotc3RhdGljIFJlbmRlck9iamVjdCAqZmlyc3RSZW5kZXJlck9uTmV4dExp
bmUoSW5saW5lQm94ICpib3gpCitzdGF0aWMgUmVuZGVyT2JqZWN0KiBmaXJzdFJlbmRlcmVyT25O
ZXh0TGluZShJbmxpbmVCb3gqIGJveCkKIHsKICAgICBpZiAoIWJveCkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBSb290SW5saW5lQm94ICpyb290ID0gYm94LT5yb290KCk7CisgICAgUm9vdElu
bGluZUJveCogcm9vdCA9IGJveC0+cm9vdCgpOwogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIAorCiAgICAgaWYgKHJvb3QtPmVuZHNXaXRoQnJlYWsoKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgUm9vdElubGluZUJveCAqbmV4dFJvb3QgPSByb290LT5u
ZXh0Um9vdEJveCgpOworCisgICAgUm9vdElubGluZUJveCogbmV4dFJvb3QgPSByb290LT5uZXh0
Um9vdEJveCgpOwogICAgIGlmICghbmV4dFJvb3QpCiAgICAgICAgIHJldHVybiAwOwotICAgIAot
ICAgIElubGluZUJveCAqZmlyc3RDaGlsZCA9IG5leHRSb290LT5maXJzdENoaWxkKCk7CisKKyAg
ICBJbmxpbmVCb3gqIGZpcnN0Q2hpbGQgPSBuZXh0Um9vdC0+Zmlyc3RDaGlsZCgpOwogICAgIGlm
ICghZmlyc3RDaGlsZCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gZmlyc3RDaGls
ZC0+b2JqZWN0KCk7CiB9CiAKLXN0YXRpYyBSZW5kZXJPYmplY3QgKmxhc3RSZW5kZXJlck9uUHJl
dkxpbmUoSW5saW5lQm94ICpib3gpCitzdGF0aWMgUmVuZGVyT2JqZWN0KiBsYXN0UmVuZGVyZXJP
blByZXZMaW5lKElubGluZUJveCogYm94KQogewogICAgIGlmICghYm94KQogICAgICAgICByZXR1
cm4gMDsKLSAgICAKLSAgICBSb290SW5saW5lQm94ICpyb290ID0gYm94LT5yb290KCk7CisKKyAg
ICBSb290SW5saW5lQm94KiByb290ID0gYm94LT5yb290KCk7CiAgICAgaWYgKCFyb290KQogICAg
ICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIGlmIChyb290LT5lbmRzV2l0aEJyZWFrKCkpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIAotICAgIFJvb3RJbmxpbmVCb3ggKnByZXZSb290ID0gcm9v
dC0+cHJldlJvb3RCb3goKTsKKworICAgIFJvb3RJbmxpbmVCb3gqIHByZXZSb290ID0gcm9vdC0+
cHJldlJvb3RCb3goKTsKICAgICBpZiAoIXByZXZSb290KQogICAgICAgICByZXR1cm4gMDsKLSAg
ICAKLSAgICBJbmxpbmVCb3ggKmxhc3RDaGlsZCA9IHByZXZSb290LT5sYXN0Q2hpbGQoKTsKKwor
ICAgIElubGluZUJveCogbGFzdENoaWxkID0gcHJldlJvb3QtPmxhc3RDaGlsZCgpOwogICAgIGlm
ICghbGFzdENoaWxkKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIHJldHVybiBsYXN0
Q2hpbGQtPm9iamVjdCgpOwogfQogCkBAIC0zNTEsMTMgKzMyMSwxMyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgYXRMaW5lV3JhcChJbmxpbmVUZXh0CiAgICAgcmV0dXJuIGJveC0+bmV4dFRleHRCb3go
KSAmJiAhYm94LT5uZXh0T25MaW5lKCkgJiYgb2Zmc2V0ID09IGJveC0+bV9zdGFydCArIGJveC0+
bV9sZW47CiB9CiAKLUludFJlY3QgUmVuZGVyVGV4dDo6Y2FyZXRSZWN0KGludCBvZmZzZXQsIEVB
ZmZpbml0eSBhZmZpbml0eSwgaW50ICpleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitJbnRSZWN0IFJl
bmRlclRleHQ6OmNhcmV0UmVjdChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHksIGludCog
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewotICAgIGlmICghZmlyc3RUZXh0Qm94KCkgfHwgc3Ry
aW5nTGVuZ3RoKCkgPT0gMCkKKyAgICBpZiAoIWZpcnN0VGV4dEJveCgpIHx8ICFzdHJpbmdMZW5n
dGgoKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAogICAgIC8vIEZpbmQgdGhlIHRleHQg
Ym94IGZvciB0aGUgZ2l2ZW4gb2Zmc2V0Ci0gICAgSW5saW5lVGV4dEJveCAqYm94ID0gMDsKKyAg
ICBJbmxpbmVUZXh0Qm94KiBib3ggPSAwOwogICAgIGZvciAoYm94ID0gZmlyc3RUZXh0Qm94KCk7
IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgIGlmIChib3gtPmNvbnRh
aW5zQ2FyZXRPZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZG93bnN0
cmVhbSBhZmZpbml0eSB3b3VsZCBtYWtlIHVzIG1vdmUgdG8gdGhlIG5leHQgbGluZS4KQEAgLTM2
Niw3ICszMzYsNyBAQCBJbnRSZWN0IFJlbmRlclRleHQ6OmNhcmV0UmVjdChpbnQgb2Zmc2V0CiAg
ICAgICAgICAgICAgICAgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpOwogICAgICAgICAgICAgICAg
IG9mZnNldCA9IGJveC0+bV9zdGFydDsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgSW5saW5lVGV4dEJveCAqcHJldkJveCA9IGJveC0+cHJldlRleHRCb3goKTsKKyAgICAg
ICAgICAgICAgICBJbmxpbmVUZXh0Qm94KiBwcmV2Qm94ID0gYm94LT5wcmV2VGV4dEJveCgpOwog
ICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gYm94LT5tX3N0YXJ0ICYmIGFmZmluaXR5ID09
IFVQU1RSRUFNICYmIHByZXZCb3ggJiYgIWJveC0+cHJldk9uTGluZSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChwcmV2Qm94KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib3ggPSBw
cmV2Qm94OwpAQCAtMzgxLDEwICszNTEsOSBAQCBJbnRSZWN0IFJlbmRlclRleHQ6OmNhcmV0UmVj
dChpbnQgb2Zmc2V0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICAK
LSAgICBpZiAoIWJveCkgeworCisgICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0gICAgfQogCiAgICAgaW50IGhlaWdodCA9IGJveC0+cm9vdCgpLT5ib3R0b21PdmVyZmxv
dygpIC0gYm94LT5yb290KCktPnRvcE92ZXJmbG93KCk7CiAgICAgaW50IHRvcCA9IGJveC0+cm9v
dCgpLT50b3BPdmVyZmxvdygpOwpAQCAtNDAyLDcgKzM3MSw3IEBAIEludFJlY3QgUmVuZGVyVGV4
dDo6Y2FyZXRSZWN0KGludCBvZmZzZXQKICAgICBsZWZ0ICs9IGFic3g7CiAgICAgdG9wICs9IGFi
c3k7CiAKLSAgICBSZW5kZXJCbG9jayAqY2IgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5k
ZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBpZiAoc3R5bGUoKS0+YXV0b1dy
YXAoKSkgewogICAgICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBjYi0+bGluZVdpZHRoKHRvcCk7
CiAgICAgICAgIGlmICghYm94LT5tX3JldmVyc2VkKQpAQCAtNDEwLDExICszNzksMTEgQEAgSW50
UmVjdCBSZW5kZXJUZXh0OjpjYXJldFJlY3QoaW50IG9mZnNldAogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBsZWZ0ID0gbWF4KGxlZnQsIGFic3ggKyByb290TGVmdCk7CiAgICAgfQotICAgICAK
KwogICAgIHJldHVybiBJbnRSZWN0KGxlZnQsIHRvcCwgMSwgaGVpZ2h0KTsKIH0KIAotdm9pZCBS
ZW5kZXJUZXh0Ojpwb3NPZkNoYXIoaW50IGNociwgaW50ICZ4LCBpbnQgJnkpCit2b2lkIFJlbmRl
clRleHQ6OnBvc09mQ2hhcihpbnQgY2hyLCBpbnQmIHgsIGludCYgeSkKIHsKICAgICBhYnNvbHV0
ZVBvc2l0aW9uRm9yQ29udGVudCh4LCB5KTsKIApAQCAtNDMxLDIwICs0MDAsMjEgQEAgYm9vbCBS
ZW5kZXJUZXh0OjphbGxBc2NpaSgpIGNvbnN0CiAgICAgaWYgKG1fYWxsQXNjaWlDaGVja2VkKQog
ICAgICAgICByZXR1cm4gbV9hbGxBc2NpaTsKICAgICBtX2FsbEFzY2lpQ2hlY2tlZCA9IHRydWU7
Ci0gICAgCisKICAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBzdHItPmxlbmd0
aCgpOyBpKyspCi0gICAgICAgIGlmICgoKnN0cilbaV0gPiAweDdmKSB7CisgICAgZm9yIChpID0g
MDsgaSA8IG1fc3RyLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGlmICgoKm1fc3RyKVtpXSA+
IDB4N2YpIHsKICAgICAgICAgICAgIG1fYWxsQXNjaWkgPSBmYWxzZTsKICAgICAgICAgICAgIHJl
dHVybiBtX2FsbEFzY2lpOwogICAgICAgICB9Ci0gICAgCisgICAgfQorCiAgICAgbV9hbGxBc2Np
aSA9IHRydWU7Ci0gICAgCisKICAgICByZXR1cm4gbV9hbGxBc2NpaTsKIH0KIAotYm9vbCBSZW5k
ZXJUZXh0OjpzaG91bGRVc2VNb25vc3BhY2VDYWNoZShjb25zdCBGb250ICpmKSBjb25zdAorYm9v
bCBSZW5kZXJUZXh0OjpzaG91bGRVc2VNb25vc3BhY2VDYWNoZShjb25zdCBGb250KiBmKSBjb25z
dAogewogICAgIHJldHVybiAoZiAmJiBmLT5pc0ZpeGVkUGl0Y2goKSAmJiBhbGxBc2NpaSgpICYm
ICFzdHlsZSgpLT5mb250KCkuaXNTbWFsbENhcHMoKSk7CiB9CkBAIC00NTgsMzYgKzQyOCwzNiBA
QCB2b2lkIFJlbmRlclRleHQ6OmNhY2hlV2lkdGhzKCkKICAgICBpZiAoc2hvdWxkVXNlTW9ub3Nw
YWNlQ2FjaGUoZikpIHsKICAgICAgICAgY29uc3QgVUNoYXIgYyA9ICcgJzsKICAgICAgICAgbV9t
b25vc3BhY2VDaGFyYWN0ZXJXaWR0aCA9IGYtPndpZHRoKFRleHRSdW4oJmMsIDEpKTsKLSAgICB9
IGVsc2UgeworICAgIH0gZWxzZQogICAgICAgICBtX21vbm9zcGFjZUNoYXJhY3RlcldpZHRoID0g
MDsKLSAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IFJlbmRlclRleHQ6OndpZHRoRnJvbUNh
Y2hlKGNvbnN0IEZvbnQqIGYsIGludCBzdGFydCwgaW50IGxlbiwgaW50IHRhYldpZHRoLCBpbnQg
eHBvcykgY29uc3QKK0FMV0FZU19JTkxJTkUgaW50IFJlbmRlclRleHQ6OndpZHRoRnJvbUNhY2hl
KGNvbnN0IEZvbnQqIGYsIGludCBzdGFydCwgaW50IGxlbiwgaW50IHRhYldpZHRoLCBpbnQgeFBv
cykgY29uc3QKIHsKLSAgICBpZiAobV9tb25vc3BhY2VDaGFyYWN0ZXJXaWR0aCAhPSAwKSB7Ci0g
ICAgICAgIGludCBpLCB3ID0gMDsKLSAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBzdGFydCts
ZW47IGkrKykgewotICAgICAgICAgICAgVUNoYXIgYyA9ICgqc3RyKVtpXTsKKyAgICBpZiAobV9t
b25vc3BhY2VDaGFyYWN0ZXJXaWR0aCkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgaW50IHcg
PSAwOworICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgbGVuOyBpKyspIHsKKyAg
ICAgICAgICAgIFVDaGFyIGMgPSAoKm1fc3RyKVtpXTsKICAgICAgICAgICAgIFdURjo6VW5pY29k
ZTo6RGlyZWN0aW9uIGRpciA9IFdURjo6VW5pY29kZTo6ZGlyZWN0aW9uKGMpOwogICAgICAgICAg
ICAgaWYgKGRpciAhPSBXVEY6OlVuaWNvZGU6Ok5vblNwYWNpbmdNYXJrICYmIGRpciAhPSBXVEY6
OlVuaWNvZGU6OkJvdW5kYXJ5TmV1dHJhbCkgewotICAgICAgICAgICAgICAgIGlmIChjID09ICdc
dCcgJiYgdGFiV2lkdGggIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgdyArPSB0YWJXaWR0aCAt
ICgoeHBvcyArIHcpICUgdGFiV2lkdGgpOworICAgICAgICAgICAgICAgIGlmIChjID09ICdcdCcg
JiYgdGFiV2lkdGgpCisgICAgICAgICAgICAgICAgICAgIHcgKz0gdGFiV2lkdGggLSAoKHhQb3Mg
KyB3KSAlIHRhYldpZHRoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIHcgKz0gbV9tb25vc3BhY2VDaGFyYWN0ZXJXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAo
RGVwcmVjYXRlZENoYXIoYykuaXNTcGFjZSgpICYmIGkgPiBzdGFydCAmJiAhRGVwcmVjYXRlZENo
YXIoKCpzdHIpW2kgLSAxXSkuaXNTcGFjZSgpKQotICAgICAgICAgICAgICAgICAgICB3ICs9IGYt
PndvcmRTcGFjaW5nKCk7ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoRGVwcmVjYXRlZENo
YXIoYykuaXNTcGFjZSgpICYmIGkgPiBzdGFydCAmJiAhRGVwcmVjYXRlZENoYXIoKCptX3N0cilb
aSAtIDFdKS5pc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgICAgIHcgKz0gZi0+d29yZFNwYWNp
bmcoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB3OwogICAg
IH0KLSAgICAKLSAgICByZXR1cm4gZi0+d2lkdGgoVGV4dFJ1bihzdHJpbmcoKSwgc3RhcnQsIGxl
biwgMCksIFRleHRTdHlsZSh0YWJXaWR0aCwgeHBvcykpOworCisgICAgcmV0dXJuIGYtPndpZHRo
KFRleHRSdW4oc3RyaW5nKCksIHN0YXJ0LCBsZW4sIDApLCBUZXh0U3R5bGUodGFiV2lkdGgsIHhQ
b3MpKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkTWluTWF4V2lkdGgoaW50IGxlYWRX
aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NaW5X
LCBib29sJiBiZWdpbldTLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgYmVnaW5NaW5XLCBib29sJiBiZWdpbldTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50JiBlbmRNaW5XLCBib29sJiBlbmRXUywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wmIGhhc0JyZWFrYWJsZUNoYXIsIGJvb2wmIGhhc0JyZWFrLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBiZWdpbk1heFcsIGludCYg
ZW5kTWF4VywKQEAgLTQ5Niw1NCArNDY2LDUyIEBAIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZE1p
bk1heFdpZHRoKGludCAKICAgICBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSA9IHN0eWxlKCktPmNv
bGxhcHNlV2hpdGVTcGFjZSgpOwogICAgIGlmICghY29sbGFwc2VXaGl0ZVNwYWNlKQogICAgICAg
ICBzdHJpcEZyb250U3BhY2VzID0gZmFsc2U7Ci0gICAgCi0gICAgaW50IGxlbiA9IHN0ci0+bGVu
Z3RoKCk7Ci0gICAgaWYgKGxlbiA9PSAwIHx8IChzdHJpcEZyb250U3BhY2VzICYmIHN0ci0+Y29u
dGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkgeworCisgICAgaW50IGxlbiA9IG1fc3RyLT5sZW5ndGgo
KTsKKyAgICBpZiAoIWxlbiB8fCAoc3RyaXBGcm9udFNwYWNlcyAmJiBtX3N0ci0+Y29udGFpbnNP
bmx5V2hpdGVzcGFjZSgpKSkgewogICAgICAgICBtYXhXID0gMDsKICAgICAgICAgaGFzQnJlYWsg
PSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICAvLyBpZiB0aGUgdGV4
dCBoYXMgYSB2YXJpYWJsZSB3aWR0aCB0YWIsIHdlIG5lZWQgdG8gY2FsbCAKKwogICAgIGlmICht
X2hhc1RhYikKICAgICAgICAgY2FsY01pbk1heFdpZHRoKGxlYWRXaWR0aCk7Ci0gICAgCisKICAg
ICBtaW5XID0gbV9taW5XaWR0aDsKICAgICBtYXhXID0gbV9tYXhXaWR0aDsKICAgICBiZWdpbldT
ID0gIXN0cmlwRnJvbnRTcGFjZXMgJiYgbV9oYXNCZWdpbldTOwogICAgIGVuZFdTID0gbV9oYXNF
bmRXUzsKLSAgICAKKwogICAgIGJlZ2luTWluVyA9IG1fYmVnaW5NaW5XaWR0aDsKICAgICBlbmRN
aW5XID0gbV9lbmRNaW5XaWR0aDsKLSAgICAKKwogICAgIGhhc0JyZWFrYWJsZUNoYXIgPSBtX2hh
c0JyZWFrYWJsZUNoYXI7CiAgICAgaGFzQnJlYWsgPSBtX2hhc0JyZWFrOwogCi0gICAgaWYgKHN0
cmlwRnJvbnRTcGFjZXMgJiYgKCgqc3RyKVswXSA9PSAnICcgfHwgKCgqc3RyKVswXSA9PSAnXG4n
ICYmICFzdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgfHwgKCpzdHIpWzBdID09ICdcdCcpKSB7
Ci0gICAgICAgIGNvbnN0IEZvbnQgKmYgPSBmb250KGZhbHNlKTsgLy8gRklYTUU6IFdoeSBpcyBp
dCBvayB0byBpZ25vcmUgZmlyc3QtbGluZSBoZXJlPworICAgIGlmIChzdHJpcEZyb250U3BhY2Vz
ICYmICgoKm1fc3RyKVswXSA9PSAnICcgfHwgKCgqbV9zdHIpWzBdID09ICdcbicgJiYgIXN0eWxl
KCktPnByZXNlcnZlTmV3bGluZSgpKSB8fCAoKm1fc3RyKVswXSA9PSAnXHQnKSkgeworICAgICAg
ICBjb25zdCBGb250KiBmID0gZm9udChmYWxzZSk7IC8vIEZJWE1FOiBXaHkgaXMgaXQgb2sgdG8g
aWdub3JlIGZpcnN0LWxpbmUgaGVyZT8KICAgICAgICAgY29uc3QgVUNoYXIgc3BhY2UgPSAnICc7
CiAgICAgICAgIGludCBzcGFjZVdpZHRoID0gZi0+d2lkdGgoVGV4dFJ1bigmc3BhY2UsIDEpKTsK
ICAgICAgICAgbWF4VyAtPSBzcGFjZVdpZHRoICsgZi0+d29yZFNwYWNpbmcoKTsKICAgICB9Ci0g
ICAgCisKICAgICBzdHJpcEZyb250U3BhY2VzID0gY29sbGFwc2VXaGl0ZVNwYWNlICYmIG1faGFz
RW5kV1M7Ci0gICAgCisKICAgICBpZiAoIXN0eWxlKCktPmF1dG9XcmFwKCkgfHwgbWluVyA+IG1h
eFcpCiAgICAgICAgIG1pblcgPSBtYXhXOwogCiAgICAgLy8gQ29tcHV0ZSBvdXIgbWF4IHdpZHRo
cyBieSBzY2FubmluZyB0aGUgc3RyaW5nIGZvciBuZXdsaW5lcy4KICAgICBpZiAoaGFzQnJlYWsp
IHsKLSAgICAgICAgY29uc3QgRm9udCAqZiA9IGZvbnQoZmFsc2UpOworICAgICAgICBjb25zdCBG
b250KiBmID0gZm9udChmYWxzZSk7CiAgICAgICAgIGJvb2wgZmlyc3RMaW5lID0gdHJ1ZTsKLSAg
ICAgICAgYmVnaW5NYXhXID0gZW5kTWF4VyA9IG1heFc7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuOyBpKyspCi0gICAgICAgIHsKKyAgICAgICAgYmVnaW5NYXhXID0gbWF4VzsKKyAg
ICAgICAgZW5kTWF4VyA9IG1heFc7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBp
KyspIHsKICAgICAgICAgICAgIGludCBsaW5lbGVuID0gMDsKLSAgICAgICAgICAgIHdoaWxlIChp
K2xpbmVsZW4gPCBsZW4gJiYgKCpzdHIpW2krbGluZWxlbl0gIT0gJ1xuJykKKyAgICAgICAgICAg
IHdoaWxlIChpICsgbGluZWxlbiA8IGxlbiAmJiAoKm1fc3RyKVtpICsgbGluZWxlbl0gIT0gJ1xu
JykKICAgICAgICAgICAgICAgICBsaW5lbGVuKys7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAobGluZWxlbikKLSAgICAgICAgICAgIHsKKworICAgICAgICAgICAgaWYgKGxpbmVs
ZW4pIHsKICAgICAgICAgICAgICAgICBlbmRNYXhXID0gd2lkdGhGcm9tQ2FjaGUoZiwgaSwgbGlu
ZWxlbiwgdGFiV2lkdGgoKSwgbGVhZFdpZHRoICsgZW5kTWF4Vyk7CiAgICAgICAgICAgICAgICAg
aWYgKGZpcnN0TGluZSkgewogICAgICAgICAgICAgICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsK
QEAgLTU1MSwxNCArNTE5LDEzIEBAIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZE1pbk1heFdpZHRo
KGludCAKICAgICAgICAgICAgICAgICAgICAgYmVnaW5NYXhXID0gZW5kTWF4VzsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgaSArPSBsaW5lbGVuOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RMaW5lKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGZpcnN0TGluZSkgewogICAgICAgICAgICAgICAgIGJlZ2luTWF4VyA9IDA7CiAgICAgICAgICAg
ICAgICAgZmlyc3RMaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgbGVhZFdpZHRoID0gMDsK
ICAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgIGlmIChpID09IGxlbi0xKQorCisgICAg
ICAgICAgICBpZiAoaSA9PSBsZW4gLSAxKQogICAgICAgICAgICAgICAgIC8vIEEgPHByZT4gcnVu
IHRoYXQgZW5kcyB3aXRoIGEgbmV3bGluZSwgYXMgaW4sIGUuZy4sCiAgICAgICAgICAgICAgICAg
Ly8gPHByZT5Tb21lIHRleHRcblxuPHNwYW4+TW9yZSB0ZXh0PC9wcmU+CiAgICAgICAgICAgICAg
ICAgZW5kTWF4VyA9IDA7CkBAIC01NzAsMzMgKzUzNywzOSBAQCB2b2lkIFJlbmRlclRleHQ6OmNh
bGNNaW5NYXhXaWR0aCgpCiB7CiAgICAgLy8gVXNlIDAgZm9yIHRoZSBsZWFkV2lkdGguICAgSWYg
dGhlIHRleHQgY29udGFpbnMgYSB2YXJpYWJsZSB3aWR0aCB0YWIsIHRoZSByZWFsIHdpZHRoCiAg
ICAgLy8gd2lsbCBnZXQgbWVhc3VyZWQgd2hlbiB0cmltbWVkTWluTWF4V2lkdGggY2FsbHMgYWdh
aW4gd2l0aCB0aGUgcmVhbCBsZWFkV2lkdGguCi0gICAgQVNTRVJUKCAhbWluTWF4S25vd24oKSAp
OworICAgIEFTU0VSVCghbWluTWF4S25vd24oKSk7CiAgICAgY2FsY01pbk1heFdpZHRoKDApOwog
fQogCi1pbmxpbmUgYm9vbCBpc1NwYWNlQWNjb3JkaW5nVG9TdHlsZShVQ2hhciBjLCBSZW5kZXJT
dHlsZSogc3R5bGUpIAoraW5saW5lIGJvb2wgaXNTcGFjZUFjY29yZGluZ1RvU3R5bGUoVUNoYXIg
YywgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHJldHVybiBjID09ICcgJyB8fCAoYyA9PSAw
eGEwICYmIHN0eWxlLT5uYnNwTW9kZSgpID09IFNQQUNFKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0
OjpjYWxjTWluTWF4V2lkdGgoaW50IGxlYWRXaWR0aCkKIHsKLSAgICAvLyAjIyMgY2FsYyBNaW4g
YW5kIE1heCB3aWR0aC4uLgotICAgIG1fbWluV2lkdGggPSBtX2JlZ2luTWluV2lkdGggPSBtX2Vu
ZE1pbldpZHRoID0gMDsKKyAgICAvLyBGSVhNRTogY2FsYyBNaW4gYW5kIE1heCB3aWR0aC4uLgor
ICAgIG1fbWluV2lkdGggPSAwOworICAgIG1fYmVnaW5NaW5XaWR0aCA9IDA7CisgICAgbV9lbmRN
aW5XaWR0aCA9IDA7CiAgICAgbV9tYXhXaWR0aCA9IDA7CiAKICAgICBpZiAoaXNCUigpKQogICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgaW50IGN1cnJNaW5XaWR0aCA9IDA7CiAgICAg
aW50IGN1cnJNYXhXaWR0aCA9IDA7Ci0gICAgbV9oYXNCcmVha2FibGVDaGFyID0gbV9oYXNCcmVh
ayA9IG1faGFzVGFiID0gbV9oYXNCZWdpbldTID0gbV9oYXNFbmRXUyA9IGZhbHNlOwotICAgIAor
ICAgIG1faGFzQnJlYWthYmxlQ2hhciA9IGZhbHNlOworICAgIG1faGFzQnJlYWsgPSBmYWxzZTsK
KyAgICBtX2hhc1RhYiA9IGZhbHNlOworICAgIG1faGFzQmVnaW5XUyA9IGZhbHNlOworICAgIG1f
aGFzRW5kV1MgPSBmYWxzZTsKKwogICAgIC8vIEZJWE1FOiBub3QgMTAwJSBjb3JyZWN0IGZvciBm
aXJzdC1saW5lCiAgICAgY29uc3QgRm9udCogZiA9IGZvbnQoZmFsc2UpOwogICAgIGludCB3b3Jk
U3BhY2luZyA9IHN0eWxlKCktPndvcmRTcGFjaW5nKCk7Ci0gICAgaW50IGxlbiA9IHN0ci0+bGVu
Z3RoKCk7Ci0gICAgY29uc3QgVUNoYXIqIHR4dCA9IHN0ci0+Y2hhcmFjdGVycygpOworICAgIGlu
dCBsZW4gPSBtX3N0ci0+bGVuZ3RoKCk7CisgICAgY29uc3QgVUNoYXIqIHR4dCA9IG1fc3RyLT5j
aGFyYWN0ZXJzKCk7CiAgICAgYm9vbCBuZWVkc1dvcmRTcGFjaW5nID0gZmFsc2U7CiAgICAgYm9v
bCBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwogICAgIGJvb2wgaXNTcGFjZSA9IGZhbHNlOwpAQCAt
NjA0LDEyICs1NzcsMTIgQEAgdm9pZCBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgoaW50IGxl
YQogICAgIGJvb2wgZmlyc3RMaW5lID0gdHJ1ZTsKICAgICBpbnQgbmV4dEJyZWFrYWJsZSA9IC0x
OwogICAgIGJvb2wgYnJlYWtOQlNQID0gc3R5bGUoKS0+YXV0b1dyYXAoKSAmJiBzdHlsZSgpLT5u
YnNwTW9kZSgpID09IFNQQUNFOwotICAgIAorCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47
IGkrKykgewogICAgICAgICBVQ2hhciBjID0gdHh0W2ldOwotICAgICAgICAKKwogICAgICAgICBi
b29sIHByZXZpb3VzQ2hhcmFjdGVySXNTcGFjZSA9IGlzU3BhY2U7Ci0gICAgICAgIAorCiAgICAg
ICAgIGJvb2wgaXNOZXdsaW5lID0gZmFsc2U7CiAgICAgICAgIGlmIChjID09ICdcbicpIHsKICAg
ICAgICAgICAgIGlmIChzdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgewpAQCAtNjI0LDI2ICs1
OTcsMjQgQEAgdm9pZCBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgoaW50IGxlYQogICAgICAg
ICAgICAgICAgIGlzU3BhY2UgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIGlzU3BhY2UgPSB0cnVlOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIGlzU3BhY2UgPSBjID09ICcgJzsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKChpc1NwYWNlIHx8IGlzTmV3bGluZSkgJiYgaSA9PSAwKQorCisgICAgICAgIGlm
ICgoaXNTcGFjZSB8fCBpc05ld2xpbmUpICYmICFpKQogICAgICAgICAgICAgbV9oYXNCZWdpbldT
ID0gdHJ1ZTsKLSAgICAgICAgaWYgKChpc1NwYWNlIHx8IGlzTmV3bGluZSkgJiYgaSA9PSBsZW4t
MSkKKyAgICAgICAgaWYgKChpc1NwYWNlIHx8IGlzTmV3bGluZSkgJiYgaSA9PSBsZW4gLSAxKQog
ICAgICAgICAgICAgbV9oYXNFbmRXUyA9IHRydWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICBp
ZiAoIWlnbm9yaW5nU3BhY2VzICYmIHN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHBy
ZXZpb3VzQ2hhcmFjdGVySXNTcGFjZSAmJiBpc1NwYWNlKQogICAgICAgICAgICAgaWdub3JpbmdT
cGFjZXMgPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMgJiYg
IWlzU3BhY2UpCiAgICAgICAgICAgICBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwotICAgICAgICAK
KwogICAgICAgICAvLyBJZ25vcmUgc3BhY2VzIGFuZCBzb2Z0IGh5cGhlbnMKLSAgICAgICAgaWYg
KGlnbm9yaW5nU3BhY2VzIHx8IGMgPT0gU09GVF9IWVBIRU4pIHsKKyAgICAgICAgaWYgKGlnbm9y
aW5nU3BhY2VzIHx8IGMgPT0gU09GVF9IWVBIRU4pCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICAKKwogICAgICAgICBib29sIGhhc0JyZWFrID0gaXNCcmVha2FibGUo
dHh0LCBpLCBsZW4sIG5leHRCcmVha2FibGUsIGJyZWFrTkJTUCk7CiAgICAgICAgIGludCBqID0g
aTsKICAgICAgICAgd2hpbGUgKGMgIT0gJ1xuJyAmJiAhaXNTcGFjZUFjY29yZGluZ1RvU3R5bGUo
Yywgc3R5bGUoKSkgJiYgYyAhPSAnXHQnICYmIGMgIT0gU09GVF9IWVBIRU4pIHsKQEAgLTY1NCwx
OCArNjI1LDE4IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1heFdpZHRoKGludCBsZWEKICAg
ICAgICAgICAgIGlmIChpc0JyZWFrYWJsZSh0eHQsIGosIGxlbiwgbmV4dEJyZWFrYWJsZSwgYnJl
YWtOQlNQKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgIGludCB3b3JkbGVuID0gaiAtIGk7Ci0gICAgICAgIGlmICh3b3JkbGVuKSB7Ci0g
ICAgICAgICAgICBpbnQgdyA9IHdpZHRoRnJvbUNhY2hlKGYsIGksIHdvcmRsZW4sIHRhYldpZHRo
KCksIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0aCk7CisKKyAgICAgICAgaW50IHdvcmRMZW4gPSBq
IC0gaTsKKyAgICAgICAgaWYgKHdvcmRMZW4pIHsKKyAgICAgICAgICAgIGludCB3ID0gd2lkdGhG
cm9tQ2FjaGUoZiwgaSwgd29yZExlbiwgdGFiV2lkdGgoKSwgbGVhZFdpZHRoICsgY3Vyck1heFdp
ZHRoKTsKICAgICAgICAgICAgIGN1cnJNaW5XaWR0aCArPSB3OwogICAgICAgICAgICAgY3Vyck1h
eFdpZHRoICs9IHc7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbCBpc1NwYWNlID0g
KGogPCBsZW4pICYmIGlzU3BhY2VBY2NvcmRpbmdUb1N0eWxlKGMsIHN0eWxlKCkpOwogICAgICAg
ICAgICAgYm9vbCBpc0NvbGxhcHNpYmxlV2hpdGVTcGFjZSA9IChqIDwgbGVuKSAmJiBzdHlsZSgp
LT5pc0NvbGxhcHNpYmxlV2hpdGVTcGFjZShjKTsKICAgICAgICAgICAgIGlmIChqIDwgbGVuICYm
IHN0eWxlKCktPmF1dG9XcmFwKCkpCiAgICAgICAgICAgICAgICAgbV9oYXNCcmVha2FibGVDaGFy
ID0gdHJ1ZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBBZGQgaW4gd29yZFNwYWNp
bmcgdG8gb3VyIGN1cnJNYXhXaWR0aCwgYnV0IG5vdCBpZiB0aGlzIGlzIHRoZSBsYXN0IHdvcmQg
b24gYSBsaW5lIG9yIHRoZQogICAgICAgICAgICAgLy8gbGFzdCB3b3JkIGluIHRoZSBydW4uCiAg
ICAgICAgICAgICBpZiAod29yZFNwYWNpbmcgJiYgKGlzU3BhY2UgfHwgaXNDb2xsYXBzaWJsZVdo
aXRlU3BhY2UpICYmICFjb250YWluc09ubHlXaGl0ZXNwYWNlKGosIGxlbi1qKSkKQEAgLTY4MSw0
NSArNjUyLDQ1IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1heFdpZHRoKGludCBsZWEKICAg
ICAgICAgICAgICAgICBtX2JlZ2luTWluV2lkdGggPSBoYXNCcmVhayA/IDAgOiB3OwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbV9lbmRNaW5XaWR0aCA9IHc7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChjdXJyTWluV2lkdGggPiBtX21pbldpZHRoKSBtX21pbldpZHRoID0gY3Vy
ck1pbldpZHRoOworCisgICAgICAgICAgICBpZiAoY3Vyck1pbldpZHRoID4gbV9taW5XaWR0aCkK
KyAgICAgICAgICAgICAgICBtX21pbldpZHRoID0gY3Vyck1pbldpZHRoOwogICAgICAgICAgICAg
Y3Vyck1pbldpZHRoID0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaSArPSB3b3JkbGVu
LTE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisKKyAgICAgICAgICAgIGkgKz0gd29yZExl
biAtIDE7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBOb3dyYXAgY2FuIG5ldmVy
IGJlIGJyb2tlbiwgc28gZG9uJ3QgYm90aGVyIHNldHRpbmcgdGhlCi0gICAgICAgICAgICAvLyBi
cmVha2FibGUgY2hhcmFjdGVyIGJvb2xlYW4uIFByZSBjYW4gb25seSBiZSBicm9rZW4gaWYgd2Ug
ZW5jb3VudGVyIGEgbmV3bGluZS4gICAgIAorICAgICAgICAgICAgLy8gYnJlYWthYmxlIGNoYXJh
Y3RlciBib29sZWFuLiBQcmUgY2FuIG9ubHkgYmUgYnJva2VuIGlmIHdlIGVuY291bnRlciBhIG5l
d2xpbmUuCiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+YXV0b1dyYXAoKSB8fCBpc05ld2xpbmUp
CiAgICAgICAgICAgICAgICAgbV9oYXNCcmVha2FibGVDaGFyID0gdHJ1ZTsKIAotICAgICAgICAg
ICAgaWYgKGN1cnJNaW5XaWR0aCA+IG1fbWluV2lkdGgpIG1fbWluV2lkdGggPSBjdXJyTWluV2lk
dGg7CisgICAgICAgICAgICBpZiAoY3Vyck1pbldpZHRoID4gbV9taW5XaWR0aCkKKyAgICAgICAg
ICAgICAgICBtX21pbldpZHRoID0gY3Vyck1pbldpZHRoOwogICAgICAgICAgICAgY3Vyck1pbldp
ZHRoID0gMDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoaXNOZXdsaW5lKSB7IC8v
IE9ubHkgc2V0IGlmIHByZXNlcnZlTmV3bGluZSB3YXMgdHJ1ZSBhbmQgd2Ugc2F3IGEgbmV3bGlu
ZS4KICAgICAgICAgICAgICAgICBpZiAoZmlyc3RMaW5lKSB7CiAgICAgICAgICAgICAgICAgICAg
IGZpcnN0TGluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBsZWFkV2lkdGggPSAwOwog
ICAgICAgICAgICAgICAgICAgICBtX2JlZ2luTWluV2lkdGggPSBjdXJyTWF4V2lkdGg7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChjdXJy
TWF4V2lkdGggPiBtX21heFdpZHRoKSBtX21heFdpZHRoID0gY3Vyck1heFdpZHRoOworCisgICAg
ICAgICAgICAgICAgaWYgKGN1cnJNYXhXaWR0aCA+IG1fbWF4V2lkdGgpCisgICAgICAgICAgICAg
ICAgICAgIG1fbWF4V2lkdGggPSBjdXJyTWF4V2lkdGg7CiAgICAgICAgICAgICAgICAgY3Vyck1h
eFdpZHRoID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgY3Vyck1heFdpZHRoICs9
IGYtPndpZHRoKFRleHRSdW4odHh0ICsgaSwgMSksIFRleHRTdHlsZSh0YWJXaWR0aCgpLCBsZWFk
V2lkdGggKyBjdXJyTWF4V2lkdGgpKTsKLSAgICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5n
ID0gaXNTcGFjZSAmJiAhcHJldmlvdXNDaGFyYWN0ZXJJc1NwYWNlICYmIGkgPT0gbGVuLTE7Cisg
ICAgICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9IGlzU3BhY2UgJiYgIXByZXZpb3VzQ2hh
cmFjdGVySXNTcGFjZSAmJiBpID09IGxlbiAtIDE7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAobmVlZHNXb3JkU3BhY2luZyAmJiBsZW4gPiAxKSAKKyAgICBpZiAo
bmVlZHNXb3JkU3BhY2luZyAmJiBsZW4gPiAxKQogICAgICAgICBjdXJyTWF4V2lkdGggKz0gd29y
ZFNwYWNpbmc7Ci0gICAgCisKICAgICBtX21pbldpZHRoID0gbWF4KGN1cnJNaW5XaWR0aCwgbV9t
aW5XaWR0aCk7CiAgICAgbV9tYXhXaWR0aCA9IG1heChjdXJyTWF4V2lkdGgsIG1fbWF4V2lkdGgp
OwotICAgICAgICAKKwogICAgIGlmICghc3R5bGUoKS0+YXV0b1dyYXAoKSkKICAgICAgICAgbV9t
aW5XaWR0aCA9IG1fbWF4V2lkdGg7CiAKQEAgLTczMCwyNyArNzAxLDI5IEBAIHZvaWQgUmVuZGVy
VGV4dDo6Y2FsY01pbk1heFdpZHRoKGludCBsZWEKICAgICAgICAgICAgIG1fYmVnaW5NaW5XaWR0
aCA9IG1fbWF4V2lkdGg7CiAgICAgICAgIG1fZW5kTWluV2lkdGggPSBjdXJyTWF4V2lkdGg7CiAg
ICAgfQotICAgIAorCiAgICAgc2V0TWluTWF4S25vd24oKTsKLSAgICAvL2tkRGVidWcoIDYwNDAg
KSA8PCAiVGV4dDo6Y2FsY01pbk1heFdpZHRoKCk6IG1pbiA9ICIgPDwgbV9taW5XaWR0aCA8PCAi
IG1heCA9ICIgPDwgbV9tYXhXaWR0aCA8PCBlbmRsOwogfQogCiBib29sIFJlbmRlclRleHQ6OmNv
bnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdAog
ewogICAgIHVuc2lnbmVkIGN1cnJQb3M7Ci0gICAgZm9yIChjdXJyUG9zID0gZnJvbTsgCi0gICAg
ICAgICBjdXJyUG9zIDwgZnJvbStsZW4gJiYgKCgqc3RyKVtjdXJyUG9zXSA9PSAnXG4nIHx8ICgq
c3RyKVtjdXJyUG9zXSA9PSAnICcgfHwgKCpzdHIpW2N1cnJQb3NdID09ICdcdCcpOyAKKyAgICBm
b3IgKGN1cnJQb3MgPSBmcm9tOworICAgICAgICAgY3VyclBvcyA8IGZyb20gKyBsZW4gJiYgKCgq
bV9zdHIpW2N1cnJQb3NdID09ICdcbicgfHwgKCptX3N0cilbY3VyclBvc10gPT0gJyAnIHx8ICgq
bV9zdHIpW2N1cnJQb3NdID09ICdcdCcpOwogICAgICAgICAgY3VyclBvcysrKTsKLSAgICByZXR1
cm4gY3VyclBvcyA+PSAoZnJvbStsZW4pOworICAgIHJldHVybiBjdXJyUG9zID49IChmcm9tICsg
bGVuKTsKIH0KIAogaW50IFJlbmRlclRleHQ6Om1pblhQb3MoKSBjb25zdAogewotICAgIGlmICgh
bV9maXJzdFRleHRCb3gpIHJldHVybiAwOwotICAgIGludCByZXR2YWw9NjY2NjY2NjsKKyAgICBp
ZiAoIW1fZmlyc3RUZXh0Qm94KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FOiB3
ZSBzaG91bGQgbm90IHVzZSBhIHJhbmRvbSB2YWx1ZSBsaWtlIHRoaXMuICBQZXJoYXBzIHdlIHNo
b3VsZCB1c2UgSU5UX01BWC4KKyAgICBpbnQgbWluWFBvcyA9IDY2NjY2NjY7CiAgICAgZm9yIChJ
bmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRU
ZXh0Qm94KCkpCi0gICAgICAgIHJldHZhbCA9IG1pbihyZXR2YWwsIChpbnQpYm94LT5tX3gpOwot
ICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIG1pblhQb3MgPSBtaW4obWluWFBvcywgc3RhdGlj
X2Nhc3Q8aW50Pihib3gtPm1feCkpOworICAgIHJldHVybiBtaW5YUG9zOwogfQogCiBpbnQgUmVu
ZGVyVGV4dDo6eFBvcygpIGNvbnN0CkBAIC03NjgsMjQgKzc0MSwyMyBAQCBjb25zdCBGb250JiBS
ZW5kZXJUZXh0Ojpmb250KCkKICAgICByZXR1cm4gc3R5bGUoKS0+Zm9udCgpOwogfQogCi12b2lk
IFJlbmRlclRleHQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHMpCit2b2lkIFJl
bmRlclRleHQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQogewogICAg
IElubGluZVRleHRCb3gqIGJveDsKLSAgICAKLSAgICBtX3NlbGVjdGlvblN0YXRlID0gczsKLSAg
ICBpZiAocyA9PSBTZWxlY3Rpb25TdGFydCB8fCBzID09IFNlbGVjdGlvbkVuZCB8fCBzID09IFNl
bGVjdGlvbkJvdGgpIHsKKworICAgIG1fc2VsZWN0aW9uU3RhdGUgPSBzdGF0ZTsKKyAgICBpZiAo
c3RhdGUgPT0gU2VsZWN0aW9uU3RhcnQgfHwgc3RhdGUgPT0gU2VsZWN0aW9uRW5kIHx8IHN0YXRl
ID09IFNlbGVjdGlvbkJvdGgpIHsKICAgICAgICAgaW50IHN0YXJ0UG9zLCBlbmRQb3M7CiAgICAg
ICAgIHNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0UG9zLCBlbmRQb3MpOwotICAgICAgICBpZihzZWxl
Y3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvblN0YXJ0KSB7Ci0gICAgICAgICAgICBlbmRQb3MgPSBz
dHItPmxlbmd0aCgpOwotICAgICAgICAgICAgCisgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgp
ID09IFNlbGVjdGlvblN0YXJ0KSB7CisgICAgICAgICAgICBlbmRQb3MgPSBtX3N0ci0+bGVuZ3Ro
KCk7CisKICAgICAgICAgICAgIC8vIHRvIGhhbmRsZSBzZWxlY3Rpb24gZnJvbSBlbmQgb2YgdGV4
dCB0byBlbmQgb2YgbGluZQotICAgICAgICAgICAgaWYgKHN0YXJ0UG9zICE9IDAgJiYgc3RhcnRQ
b3MgPT0gZW5kUG9zKSB7CisgICAgICAgICAgICBpZiAoc3RhcnRQb3MgIT0gMCAmJiBzdGFydFBv
cyA9PSBlbmRQb3MpCiAgICAgICAgICAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgLSAxOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rp
b25FbmQpCisgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25F
bmQpCiAgICAgICAgICAgICBzdGFydFBvcyA9IDA7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAo
Ym94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAg
ICAgICAgICAgICBpZiAoYm94LT5pc1NlbGVjdGVkKHN0YXJ0UG9zLCBlbmRQb3MpKSB7CiAgICAg
ICAgICAgICAgICAgUm9vdElubGluZUJveCogbGluZSA9IGJveC0+cm9vdCgpOwpAQCAtNzkzLDYz
ICs3NjUsNjQgQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlYwogICAg
ICAgICAgICAgICAgICAgICBsaW5lLT5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHRydWUpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgeworICAgIH0gZWxzZSB7CiAg
ICAgICAgIGZvciAoYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4
dEJveCgpKSB7CiAgICAgICAgICAgICBSb290SW5saW5lQm94KiBsaW5lID0gYm94LT5yb290KCk7
CiAgICAgICAgICAgICBpZiAobGluZSkKLSAgICAgICAgICAgICAgICBsaW5lLT5zZXRIYXNTZWxl
Y3RlZENoaWxkcmVuKHMgPT0gU2VsZWN0aW9uSW5zaWRlKTsKKyAgICAgICAgICAgICAgICBsaW5l
LT5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRlID09IFNlbGVjdGlvbkluc2lkZSk7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgCi0gICAgY29udGFpbmluZ0Jsb2NrKCktPnNldFNlbGVjdGlvblN0
YXRlKHMpOworCisgICAgY29udGFpbmluZ0Jsb2NrKCktPnNldFNlbGVjdGlvblN0YXRlKHN0YXRl
KTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0V2l0aE9mZnNldChTdHJpbmdJbXBsICp0
ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbiwgYm9vbCBmb3JjZSkKK3ZvaWQgUmVu
ZGVyVGV4dDo6c2V0VGV4dFdpdGhPZmZzZXQoU3RyaW5nSW1wbCogdGV4dCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW4sIGJvb2wgZm9yY2UpCiB7Ci0gICAgdW5zaWduZWQgb2xkTGVuID0g
c3RyID8gc3RyLT5sZW5ndGgoKSA6IDA7CisgICAgdW5zaWduZWQgb2xkTGVuID0gbV9zdHIgPyBt
X3N0ci0+bGVuZ3RoKCkgOiAwOwogICAgIHVuc2lnbmVkIG5ld0xlbiA9IHRleHQgPyB0ZXh0LT5s
ZW5ndGgoKSA6IDA7CiAgICAgaW50IGRlbHRhID0gbmV3TGVuIC0gb2xkTGVuOwotICAgIHVuc2ln
bmVkIGVuZCA9IGxlbiA/IG9mZnNldCtsZW4tMSA6IG9mZnNldDsKKyAgICB1bnNpZ25lZCBlbmQg
PSBsZW4gPyBvZmZzZXQgKyBsZW4gLSAxIDogb2Zmc2V0OwogCiAgICAgUm9vdElubGluZUJveCog
Zmlyc3RSb290Qm94ID0gMDsKICAgICBSb290SW5saW5lQm94KiBsYXN0Um9vdEJveCA9IDA7Ci0g
ICAgCisKICAgICBib29sIGRpcnRpZWRMaW5lcyA9IGZhbHNlOwotICAgIAorCiAgICAgLy8gRGly
dHkgYWxsIHRleHQgYm94ZXMgdGhhdCBpbmNsdWRlIGNoYXJhY3RlcnMgaW4gYmV0d2VlbiBvZmZz
ZXQgYW5kIG9mZnNldCtsZW4uCiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBjdXJyID0gZmlyc3RU
ZXh0Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgIC8v
IFRleHQgcnVuIGlzIGVudGlyZWx5IGJlZm9yZSB0aGUgYWZmZWN0ZWQgcmFuZ2UuCiAgICAgICAg
IGlmIChjdXJyLT5lbmQoKSA8IG9mZnNldCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAKKwogICAgICAgICAvLyBUZXh0IHJ1biBpcyBlbnRpcmVseSBhZnRlciB0aGUgYWZmZWN0ZWQg
cmFuZ2UuCiAgICAgICAgIGlmIChjdXJyLT5zdGFydCgpID4gZW5kKSB7CiAgICAgICAgICAgICBj
dXJyLT5vZmZzZXRSdW4oZGVsdGEpOwogICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdCA9
IGN1cnItPnJvb3QoKTsKICAgICAgICAgICAgIGlmICghZmlyc3RSb290Qm94KSB7CiAgICAgICAg
ICAgICAgICAgZmlyc3RSb290Qm94ID0gcm9vdDsKLSAgICAgICAgICAgICAgICBpZiAoIWRpcnRp
ZWRMaW5lcykgeyAvLyBUaGUgYWZmZWN0ZWQgYXJlYSB3YXMgaW4gYmV0d2VlbiB0d28gcnVucy4g
R28gYWhlYWQgYW5kIG1hcmsgdGhlIHJvb3QgYm94IG9mIHRoZSBydW4gYWZ0ZXIgdGhlIGFmZmVj
dGVkIGFyZWEgYXMgZGlydHkuCisgICAgICAgICAgICAgICAgaWYgKCFkaXJ0aWVkTGluZXMpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFmZmVjdGVkIGFyZWEgd2FzIGluIGJldHdlZW4g
dHdvIHJ1bnMuIEdvIGFoZWFkIGFuZCBtYXJrIHRoZSByb290IGJveCBvZgorICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgcnVuIGFmdGVyIHRoZSBhZmZlY3RlZCBhcmVhIGFzIGRpcnR5LgogICAg
ICAgICAgICAgICAgICAgICBmaXJzdFJvb3RCb3gtPm1hcmtEaXJ0eSgpOwogICAgICAgICAgICAg
ICAgICAgICBkaXJ0aWVkTGluZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGxhc3RSb290Qm94ID0gcm9vdDsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChjdXJyLT5lbmQoKSA+PSBvZmZzZXQgJiYgY3Vyci0+ZW5kKCkgPD0gZW5kKSB7
Ci0gICAgICAgICAgICBjdXJyLT5kaXJ0eUxpbmVCb3hlcygpOyAvLyBUZXh0IHJ1biBvdmVybGFw
cyB3aXRoIHRoZSBsZWZ0IGVuZCBvZiB0aGUgYWZmZWN0ZWQgcmFuZ2UuCisgICAgICAgIH0gZWxz
ZSBpZiAoY3Vyci0+ZW5kKCkgPj0gb2Zmc2V0ICYmIGN1cnItPmVuZCgpIDw9IGVuZCkgeworICAg
ICAgICAgICAgLy8gVGV4dCBydW4gb3ZlcmxhcHMgd2l0aCB0aGUgbGVmdCBlbmQgb2YgdGhlIGFm
ZmVjdGVkIHJhbmdlLgorICAgICAgICAgICAgY3Vyci0+ZGlydHlMaW5lQm94ZXMoKTsKICAgICAg
ICAgICAgIGRpcnRpZWRMaW5lcyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo
Y3Vyci0+c3RhcnQoKSA8PSBvZmZzZXQgJiYgY3Vyci0+ZW5kKCkgPj0gZW5kKSB7Ci0gICAgICAg
ICAgICBjdXJyLT5kaXJ0eUxpbmVCb3hlcygpOyAvLyBUZXh0IHJ1biBzdWJzdW1lcyB0aGUgYWZm
ZWN0ZWQgcmFuZ2UuCisgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+c3RhcnQoKSA8PSBvZmZzZXQg
JiYgY3Vyci0+ZW5kKCkgPj0gZW5kKSB7CisgICAgICAgICAgICAvLyBUZXh0IHJ1biBzdWJzdW1l
cyB0aGUgYWZmZWN0ZWQgcmFuZ2UuCisgICAgICAgICAgICBjdXJyLT5kaXJ0eUxpbmVCb3hlcygp
OwogICAgICAgICAgICAgZGlydGllZExpbmVzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChjdXJyLT5zdGFydCgpIDw9IGVuZCAmJiBjdXJyLT5lbmQoKSA+PSBlbmQpIHsKLSAg
ICAgICAgICAgIGN1cnItPmRpcnR5TGluZUJveGVzKCk7IC8vIFRleHQgcnVuIG92ZXJsYXBzIHdp
dGggcmlnaHQgZW5kIG9mIHRoZSBhZmZlY3RlZCByYW5nZS4KKyAgICAgICAgfSBlbHNlIGlmIChj
dXJyLT5zdGFydCgpIDw9IGVuZCAmJiBjdXJyLT5lbmQoKSA+PSBlbmQpIHsKKyAgICAgICAgICAg
IC8vIFRleHQgcnVuIG92ZXJsYXBzIHdpdGggcmlnaHQgZW5kIG9mIHRoZSBhZmZlY3RlZCByYW5n
ZS4KKyAgICAgICAgICAgIGN1cnItPmRpcnR5TGluZUJveGVzKCk7CiAgICAgICAgICAgICBkaXJ0
aWVkTGluZXMgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gTm93IHdl
IGhhdmUgdG8gd2FsayBhbGwgb2YgdGhlIGNsZWFuIGxpbmVzIGFuZCBhZGp1c3QgdGhlaXIgY2Fj
aGVkIGxpbmUgYnJlYWsgaW5mb3JtYXRpb24KICAgICAvLyB0byByZWZsZWN0IG91ciB1cGRhdGVk
IG9mZnNldHMuCiAgICAgaWYgKGxhc3RSb290Qm94KQpAQCAtODYxLDkgKzgzNCw5IEBAIHZvaWQg
UmVuZGVyVGV4dDo6c2V0VGV4dFdpdGhPZmZzZXQoU3RyaW4KICAgICB9CiAgICAgZm9yIChSb290
SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94OyBjdXJyICYmIGN1cnIgIT0gbGFzdFJvb3RC
b3g7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgIGlmIChjdXJyLT5saW5l
QnJlYWtPYmooKSA9PSB0aGlzICYmIGN1cnItPmxpbmVCcmVha1BvcygpID4gZW5kKQotICAgICAg
ICAgICAgY3Vyci0+c2V0TGluZUJyZWFrUG9zKGN1cnItPmxpbmVCcmVha1BvcygpK2RlbHRhKTsK
KyAgICAgICAgICAgIGN1cnItPnNldExpbmVCcmVha1BvcyhjdXJyLT5saW5lQnJlYWtQb3MoKSAr
IGRlbHRhKTsKICAgICB9Ci0gICAgCisKICAgICBtX2xpbmVzRGlydHkgPSBkaXJ0aWVkTGluZXM7
CiAgICAgc2V0VGV4dCh0ZXh0LCBmb3JjZSk7CiB9CkBAIC04NzIsMTggKzg0NSwxOCBAQCB2b2lk
IFJlbmRlclRleHQ6OnNldFRleHRXaXRoT2Zmc2V0KFN0cmluCiAjZGVmaW5lIFNRVUFSRV9DSEFS
IDB4MjVBQQogI2RlZmluZSBDSVJDTEVfQ0hBUiAweDI1RTYKIAotdm9pZCBSZW5kZXJUZXh0Ojpz
ZXRUZXh0KFN0cmluZ0ltcGwgKnRleHQsIGJvb2wgZm9yY2UpCit2b2lkIFJlbmRlclRleHQ6OnNl
dFRleHQoU3RyaW5nSW1wbCogdGV4dCwgYm9vbCBmb3JjZSkKIHsKICAgICBpZiAoIXRleHQpCiAg
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIWZvcmNlICYmIHN0ciA9PSB0ZXh0KQorICAgIGlmICgh
Zm9yY2UgJiYgbV9zdHIgPT0gdGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9hbGxBc2Np
aUNoZWNrZWQgPSBmYWxzZTsKIAotICAgIHN0ciA9IHRleHQ7Ci0gICAgaWYgKHN0cikgewotICAg
ICAgICBzdHIgPSBzdHItPnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgp
KTsKKyAgICBtX3N0ciA9IHRleHQ7CisgICAgaWYgKG1fc3RyKSB7CisgICAgICAgIG1fc3RyID0g
bV9zdHItPnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKICAgICAg
ICAgaWYgKHN0eWxlKCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUoKS0+dGV4dFRyYW5z
Zm9ybSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDQVBJVEFMSVpFOgpAQCAtODk3LDI0ICs4
NzAsMjkgQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0KFN0cmluZ0ltcGwgKnRleAogICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogcHJldlN0ciA9IHN0YXRpY19jYXN0PFJlbmRl
clRleHQqPihvKS0+c3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9
ICgqcHJldlN0cilbcHJldlN0ci0+bGVuZ3RoKCkgLSAxXTsKICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHItPmNhcGl0YWxpemUocHJldmlvdXMpOwor
ICAgICAgICAgICAgICAgICAgICBtX3N0ciA9IG1fc3RyLT5jYXBpdGFsaXplKHByZXZpb3VzKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgVVBQRVJDQVNFOiAgc3RyID0gc3RyLT51cHBlcigpOyAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIExPV0VSQ0FTRTogIHN0ciA9IHN0ci0+bG93ZXIoKTsgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBVUFBFUkNBU0U6CisgICAgICAgICAgICAg
ICAgICAgIG1fc3RyID0gbV9zdHItPnVwcGVyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgTE9XRVJDQVNFOgorICAgICAgICAgICAgICAgICAgICBt
X3N0ciA9IG1fc3RyLT5sb3dlcigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIE5PTkU6Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDo7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaChzdHlsZSgpLT50ZXh0U2VjdXJp
dHkoKSkgeworCisgICAgICAgICAgICBzd2l0Y2ggKHN0eWxlKCktPnRleHRTZWN1cml0eSgpKSB7
CiAgICAgICAgICAgICAgICAgY2FzZSBUU0RJU0M6Ci0gICAgICAgICAgICAgICAgICAgIHN0ciA9
IHN0ci0+c2VjdXJlKEJVTExFVF9DSEFSKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdHIgPSBt
X3N0ci0+c2VjdXJlKEJVTExFVF9DSEFSKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgY2FzZSBUU0NJUkNMRToKLSAgICAgICAgICAgICAgICAgICAgc3RyID0g
c3RyLT5zZWN1cmUoQ0lSQ0xFX0NIQVIpOworICAgICAgICAgICAgICAgICAgICBtX3N0ciA9IG1f
c3RyLT5zZWN1cmUoQ0lSQ0xFX0NIQVIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBjYXNlIFRTU1FVQVJFOiAKLSAgICAgICAgICAgICAgICAgICAgc3RyID0g
c3RyLT5zZWN1cmUoU1FVQVJFX0NIQVIpOworICAgICAgICAgICAgICAgIGNhc2UgVFNTUVVBUkU6
CisgICAgICAgICAgICAgICAgICAgIG1fc3RyID0gbV9zdHItPnNlY3VyZShTUVVBUkVfQ0hBUik7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgVFNOT05F
OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkyNCwxMCArOTAyLDEwIEBAIHZvaWQg
UmVuZGVyVGV4dDo6c2V0VGV4dChTdHJpbmdJbXBsICp0ZXgKIAogICAgIGNhY2hlV2lkdGhzKCk7
CiAKLSAgICAvLyAjIyMgd2hhdCBzaG91bGQgaGFwcGVuIGlmIHdlIGNoYW5nZSB0aGUgdGV4dCBv
ZiBhCisgICAgLy8gRklYTUU6IHdoYXQgc2hvdWxkIGhhcHBlbiBpZiB3ZSBjaGFuZ2UgdGhlIHRl
eHQgb2YgYQogICAgIC8vIFJlbmRlckJSIG9iamVjdCA/Ci0gICAgQVNTRVJUKCFpc0JSKCkgfHwg
KHN0ci0+bGVuZ3RoKCkgPT0gMSAmJiAoKnN0cilbMF0gPT0gJ1xuJykpOwotICAgIEFTU0VSVCgh
c3RyLT5sZW5ndGgoKSB8fCBzdHItPmNoYXJhY3RlcnMoKSk7CisgICAgQVNTRVJUKCFpc0JSKCkg
fHwgKG1fc3RyLT5sZW5ndGgoKSA9PSAxICYmICgqbV9zdHIpWzBdID09ICdcbicpKTsKKyAgICBB
U1NFUlQoIW1fc3RyLT5sZW5ndGgoKSB8fCBtX3N0ci0+Y2hhcmFjdGVycygpKTsKIAogICAgIHNl
dE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CiB9CkBAIC05NzMsNjcgKzk1MSw3MCBAQCBJ
bmxpbmVCb3gqIFJlbmRlclRleHQ6OmNyZWF0ZUlubGluZUJveChiCiAKIHZvaWQgUmVuZGVyVGV4
dDo6cG9zaXRpb24oSW5saW5lQm94KiBib3gpCiB7Ci0gICAgSW5saW5lVGV4dEJveCAqcyA9IHN0
YXRpY19jYXN0PElubGluZVRleHRCb3gqPihib3gpOwotICAgIAotICAgIC8vICMjIyBzaG91bGQg
bm90IGJlIG5lZWRlZCEhIQotICAgIGlmIChzLT5tX2xlbiA9PSAwKSB7CisgICAgSW5saW5lVGV4
dEJveCogcyA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihib3gpOworCisgICAgLy8gRklY
TUU6IHNob3VsZCBub3QgYmUgbmVlZGVkISEhCisgICAgaWYgKCFzLT5tX2xlbikgewogICAgICAg
ICAvLyBXZSB3YW50IHRoZSBib3ggdG8gYmUgZGVzdHJveWVkLgogICAgICAgICBzLT5yZW1vdmUo
KTsKICAgICAgICAgcy0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKICAgICAgICAgbV9maXJzdFRl
eHRCb3ggPSBtX2xhc3RUZXh0Qm94ID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAK
KwogICAgIG1fY29udGFpbnNSZXZlcnNlZFRleHQgfD0gcy0+bV9yZXZlcnNlZDsKIH0KIAotdW5z
aWduZWQgaW50IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBp
bnQgbGVuLCBpbnQgeHBvcywgYm9vbCBmaXJzdExpbmUpIGNvbnN0Cit1bnNpZ25lZCBpbnQgUmVu
ZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW4sIGludCB4
UG9zLCBib29sIGZpcnN0TGluZSkgY29uc3QKIHsKLSAgICBpZiAoZnJvbSA+PSBzdHItPmxlbmd0
aCgpKQorICAgIGlmIChmcm9tID49IG1fc3RyLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKGZyb20gKyBsZW4gPiBzdHItPmxlbmd0aCgpKQotICAgICAgICBsZW4gPSBzdHIt
Pmxlbmd0aCgpIC0gZnJvbTsKIAotICAgIGNvbnN0IEZvbnQgKmYgPSBmb250KGZpcnN0TGluZSk7
Ci0gICAgcmV0dXJuIHdpZHRoKGZyb20sIGxlbiwgZiwgeHBvcyk7CisgICAgaWYgKGZyb20gKyBs
ZW4gPiBtX3N0ci0+bGVuZ3RoKCkpCisgICAgICAgIGxlbiA9IG1fc3RyLT5sZW5ndGgoKSAtIGZy
b207CisKKyAgICBjb25zdCBGb250KiBmID0gZm9udChmaXJzdExpbmUpOworICAgIHJldHVybiB3
aWR0aChmcm9tLCBsZW4sIGYsIHhQb3MpOwogfQogCi11bnNpZ25lZCBpbnQgUmVuZGVyVGV4dDo6
d2lkdGgodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW4sIGNvbnN0IEZvbnQgKmYs
IGludCB4cG9zKSBjb25zdAordW5zaWduZWQgaW50IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVk
IGludCBmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBGb250KiBmLCBpbnQgeFBvcykgY29u
c3QKIHsKLSAgICBpZiAoIXN0ci0+Y2hhcmFjdGVycygpIHx8IGZyb20gPiBzdHItPmxlbmd0aCgp
KQorICAgIGlmICghbV9zdHItPmNoYXJhY3RlcnMoKSB8fCBmcm9tID4gbV9zdHItPmxlbmd0aCgp
KQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZnJvbSArIGxlbiA+IHN0ci0+bGVuZ3RoKCkp
Ci0gICAgICAgIGxlbiA9IHN0ci0+bGVuZ3RoKCkgLSBmcm9tOworCisgICAgaWYgKGZyb20gKyBs
ZW4gPiBtX3N0ci0+bGVuZ3RoKCkpCisgICAgICAgIGxlbiA9IG1fc3RyLT5sZW5ndGgoKSAtIGZy
b207CiAKICAgICBpbnQgdzsKLSAgICBpZiAoIXN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpICYm
IGYgPT0gJnN0eWxlKCktPmZvbnQoKSAmJiBmcm9tID09IDAgJiYgbGVuID09IHN0ci0+bGVuZ3Ro
KCkpCisgICAgaWYgKCFzdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBmID09ICZzdHlsZSgp
LT5mb250KCkgJiYgIWZyb20gJiYgbGVuID09IG1fc3RyLT5sZW5ndGgoKSkKICAgICAgICAgdyA9
IG1fbWF4V2lkdGg7CiAgICAgZWxzZSBpZiAoZiA9PSAmc3R5bGUoKS0+Zm9udCgpKQotICAgICAg
ICB3ID0gd2lkdGhGcm9tQ2FjaGUoZiwgZnJvbSwgbGVuLCB0YWJXaWR0aCgpLCB4cG9zKTsKKyAg
ICAgICAgdyA9IHdpZHRoRnJvbUNhY2hlKGYsIGZyb20sIGxlbiwgdGFiV2lkdGgoKSwgeFBvcyk7
CiAgICAgZWxzZQotICAgICAgICB3ID0gZi0+d2lkdGgoVGV4dFJ1bihzdHJpbmcoKSwgZnJvbSwg
bGVuLCAwKSwgVGV4dFN0eWxlKHRhYldpZHRoKCksIHhwb3MpKTsKLSAgICAgICAgCisgICAgICAg
IHcgPSBmLT53aWR0aChUZXh0UnVuKHN0cmluZygpLCBmcm9tLCBsZW4sIDApLCBUZXh0U3R5bGUo
dGFiV2lkdGgoKSwgeFBvcykpOworCiAgICAgcmV0dXJuIHc7CiB9CiAKIGludCBSZW5kZXJUZXh0
Ojp3aWR0aCgpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBub3QgdXNlIGEgcmFu
ZG9tIHZhbHVlIGxpa2UgdGhpcy4gIFBlcmhhcHMgd2Ugc2hvdWxkIHVzZSBJTlRfTUFYLgogICAg
IGludCBtaW54ID0gMTAwMDAwMDAwOwogICAgIGludCBtYXh4ID0gMDsKICAgICAvLyBzbG9vb3cK
ICAgICBmb3IgKElubGluZVRleHRCb3gqIHMgPSBmaXJzdFRleHRCb3goKTsgczsgcyA9IHMtPm5l
eHRUZXh0Qm94KCkpIHsKLSAgICAgICAgaWYocy0+bV94IDwgbWlueCkKKyAgICAgICAgaWYgKHMt
Pm1feCA8IG1pbngpCiAgICAgICAgICAgICBtaW54ID0gcy0+bV94OwotICAgICAgICBpZihzLT5t
X3ggKyBzLT5tX3dpZHRoID4gbWF4eCkKKyAgICAgICAgaWYgKHMtPm1feCArIHMtPm1fd2lkdGgg
PiBtYXh4KQogICAgICAgICAgICAgbWF4eCA9IHMtPm1feCArIHMtPm1fd2lkdGg7CiAgICAgfQog
Ci0gICAgcmV0dXJuIG1heCgwLCBtYXh4LW1pbngpOworICAgIHJldHVybiBtYXgoMCwgbWF4eCAt
IG1pbngpOwogfQogCiBJbnRSZWN0IFJlbmRlclRleHQ6OmdldEFic29sdXRlUmVwYWludFJlY3Qo
KQogewotICAgIFJlbmRlck9iamVjdCAqY2IgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5k
ZXJPYmplY3QqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgcmV0dXJuIGNiLT5nZXRBYnNv
bHV0ZVJlcGFpbnRSZWN0KCk7CiB9CiAKQEAgLTEwNDUsMjIgKzEwMjYsMjIgQEAgSW50UmVjdCBS
ZW5kZXJUZXh0OjpzZWxlY3Rpb25SZWN0KCkKICAgICBSZW5kZXJCbG9jayogY2IgPSAgY29udGFp
bmluZ0Jsb2NrKCk7CiAgICAgaWYgKCFjYikKICAgICAgICAgcmV0dXJuIHJlY3Q7Ci0gICAgCisK
ICAgICAvLyBOb3cgY2FsY3VsYXRlIHN0YXJ0UG9zIGFuZCBlbmRQb3MgZm9yIHBhaW50aW5nIHNl
bGVjdGlvbi4KICAgICAvLyBXZSBpbmNsdWRlIGEgc2VsZWN0aW9uIHdoaWxlIGVuZFBvcyA+IDAK
ICAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBT
ZWxlY3Rpb25JbnNpZGUpIHsKICAgICAgICAgLy8gV2UgYXJlIGZ1bGx5IHNlbGVjdGVkLgogICAg
ICAgICBzdGFydFBvcyA9IDA7Ci0gICAgICAgIGVuZFBvcyA9IHN0ci0+bGVuZ3RoKCk7CisgICAg
ICAgIGVuZFBvcyA9IG1fc3RyLT5sZW5ndGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICBzZWxl
Y3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKICAgICAgICAgaWYgKHNlbGVjdGlvblN0
YXRlKCkgPT0gU2VsZWN0aW9uU3RhcnQpCi0gICAgICAgICAgICBlbmRQb3MgPSBzdHItPmxlbmd0
aCgpOworICAgICAgICAgICAgZW5kUG9zID0gbV9zdHItPmxlbmd0aCgpOwogICAgICAgICBlbHNl
IGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbkVuZCkKICAgICAgICAgICAgIHN0YXJ0
UG9zID0gMDsKICAgICB9Ci0gICAgCisKICAgICBpZiAoc3RhcnRQb3MgPT0gZW5kUG9zKQogICAg
ICAgICByZXR1cm4gcmVjdDsKIApAQCAtMTA2OCwyNiArMTA0OSwyNiBAQCBJbnRSZWN0IFJlbmRl
clRleHQ6OnNlbGVjdGlvblJlY3QoKQogICAgIGNiLT5hYnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVu
dChhYnN4LCBhYnN5KTsKICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBjYi0+bGF5ZXIoKTsKICAg
ICBpZiAobGF5ZXIpCi0gICAgICAgbGF5ZXItPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KGFic3gsIGFi
c3kpOyAKKyAgICAgICBsYXllci0+c3VidHJhY3RTY3JvbGxPZmZzZXQoYWJzeCwgYWJzeSk7CiAg
ICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBi
b3gtPm5leHRUZXh0Qm94KCkpCiAgICAgICAgIHJlY3QudW5pdGUoYm94LT5zZWxlY3Rpb25SZWN0
KGFic3gsIGFic3ksIHN0YXJ0UG9zLCBlbmRQb3MpKTsKIAogICAgIHJldHVybiByZWN0OwogfQog
Ci1zaG9ydCBSZW5kZXJUZXh0Ojp2ZXJ0aWNhbFBvc2l0aW9uSGludCggYm9vbCBmaXJzdExpbmUg
KSBjb25zdAorc2hvcnQgUmVuZGVyVGV4dDo6dmVydGljYWxQb3NpdGlvbkhpbnQoYm9vbCBmaXJz
dExpbmUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBhcmVudCgpLT52ZXJ0aWNhbFBvc2l0aW9uSGlu
dCggZmlyc3RMaW5lICk7CisgICAgcmV0dXJuIHBhcmVudCgpLT52ZXJ0aWNhbFBvc2l0aW9uSGlu
dChmaXJzdExpbmUpOwogfQogCi1jb25zdCBGb250ICpSZW5kZXJUZXh0Ojpmb250KGJvb2wgZmly
c3RMaW5lKSBjb25zdAorY29uc3QgRm9udCogUmVuZGVyVGV4dDo6Zm9udChib29sIGZpcnN0TGlu
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gJnN0eWxlKGZpcnN0TGluZSktPmZvbnQoKTsKIH0KIAog
aW50IFJlbmRlclRleHQ6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QKIHsKLSAgICBJbmxpbmVUZXh0
Qm94ICpib3ggPSBmaXJzdFRleHRCb3goKTsKKyAgICBJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJz
dFRleHRCb3goKTsKICAgICBpZiAoIWJveCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaW50IG1p
bk9mZnNldCA9IGJveC0+bV9zdGFydDsKQEAgLTEwOTksMTEgKzEwODAsMTEgQEAgaW50IFJlbmRl
clRleHQ6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QKIGludCBSZW5kZXJUZXh0OjpjYXJldE1heE9m
ZnNldCgpIGNvbnN0CiB7CiAgICAgSW5saW5lVGV4dEJveCogYm94ID0gbGFzdFRleHRCb3goKTsK
LSAgICBpZiAoIWJveCkgCi0gICAgICAgIHJldHVybiBzdHItPmxlbmd0aCgpOworICAgIGlmICgh
Ym94KQorICAgICAgICByZXR1cm4gbV9zdHItPmxlbmd0aCgpOwogICAgIGludCBtYXhPZmZzZXQg
PSBib3gtPm1fc3RhcnQgKyBib3gtPm1fbGVuOwogICAgIGZvciAoYm94ID0gYm94LT5wcmV2VGV4
dEJveCgpOyBib3g7IGJveCA9IGJveC0+cHJldlRleHRCb3goKSkKLSAgICAgICAgbWF4T2Zmc2V0
ID0gbWF4KG1heE9mZnNldCxib3gtPm1fc3RhcnQgKyBib3gtPm1fbGVuKTsKKyAgICAgICAgbWF4
T2Zmc2V0ID0gbWF4KG1heE9mZnNldCwgYm94LT5tX3N0YXJ0ICsgYm94LT5tX2xlbik7CiAgICAg
cmV0dXJuIG1heE9mZnNldDsKIH0KIApAQCAtMTExNSw2ICsxMDk2LDM0IEBAIHVuc2lnbmVkIFJl
bmRlclRleHQ6OmNhcmV0TWF4UmVuZGVyZWRPZmYKICAgICByZXR1cm4gbDsKIH0KIAoraW50IFJl
bmRlclRleHQ6OnByZXZpb3VzT2Zmc2V0KGludCBjdXJyZW50KSBjb25zdAoreworICAgIFN0cmlu
Z0ltcGwqIHNpID0gbV9zdHIuZ2V0KCk7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9y
ID0gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihzaS0+Y2hhcmFjdGVycygpLCBzaS0+bGVuZ3RoKCkp
OworICAgIGlmICghaXRlcmF0b3IpCisgICAgICAgIHJldHVybiBjdXJyZW50IC0gMTsKKworICAg
IGxvbmcgcmVzdWx0ID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0ZXJhdG9yLCBjdXJyZW50KTsKKyAg
ICBpZiAocmVzdWx0ID09IFRleHRCcmVha0RvbmUpCisgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQg
LSAxOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50IFJlbmRlclRleHQ6Om5leHRPZmZz
ZXQoaW50IGN1cnJlbnQpIGNvbnN0Cit7CisgICAgU3RyaW5nSW1wbCogc2kgPSBtX3N0ci5nZXQo
KTsKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSBjaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yKHNpLT5jaGFyYWN0ZXJzKCksIHNpLT5sZW5ndGgoKSk7CisgICAgaWYgKCFpdGVyYXRvcikK
KyAgICAgICAgcmV0dXJuIGN1cnJlbnQgKyAxOworCisgICAgbG9uZyByZXN1bHQgPSB0ZXh0QnJl
YWtGb2xsb3dpbmcoaXRlcmF0b3IsIGN1cnJlbnQpOworICAgIGlmIChyZXN1bHQgPT0gVGV4dEJy
ZWFrRG9uZSkKKyAgICAgICAgcmVzdWx0ID0gY3VycmVudCArIDE7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBJbmxpbmVCb3gqIFJlbmRlclRleHQ6OmlubGluZUJveChpbnQgb2Zmc2V0LCBF
QWZmaW5pdHkgYWZmaW5pdHkpCiB7CiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJz
dFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKQEAgLTExMjksOCAr
MTEzOCw4IEBAIElubGluZUJveCogUmVuZGVyVGV4dDo6aW5saW5lQm94KGludCBvZmYKICAgICAg
ICAgICAgIC8vIG5vdCByZW5kZXJlZC4KICAgICAgICAgICAgIHJldHVybiBib3gtPnByZXZUZXh0
Qm94KCkgPyBib3gtPnByZXZUZXh0Qm94KCkgOiBmaXJzdFRleHRCb3goKTsKICAgICB9Ci0gICAg
CisKICAgICByZXR1cm4gMDsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTgyNjApCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE1ICs0MiwxNSBAQCBjbGFzcyBT
dHJpbmdJbXBsOwogCiBjbGFzcyBSZW5kZXJUZXh0IDogcHVibGljIFJlbmRlck9iamVjdCB7CiAg
ICAgZnJpZW5kIGNsYXNzIElubGluZVRleHRCb3g7Ci0KIHB1YmxpYzoKICAgICBSZW5kZXJUZXh0
KE5vZGUqLCBTdHJpbmdJbXBsKik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RnJhZ21lbnQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJp
bmcoKSBjb25zdDsKLSAgICAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyVGV4dCI7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBpc1RleHRG
cmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogCiAgICAgdm9pZCBleHRyYWN0VGV4dEJveChJbmxp
bmVUZXh0Qm94Kik7CkBAIC01OCwzMCArNTgsMzAgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3Zl
VGV4dEJveChJbmxpbmVUZXh0Qm94Kik7CiAgICAgdm9pZCBkZWxldGVUZXh0Qm94ZXMoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotICAgIAotICAgIFN0cmluZyBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gc3RyLmdldCgpOyB9Ci0gICAgU3RyaW5nSW1wbCogc3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gc3RyLmdldCgpOyB9CisKKyAgICBTdHJpbmcgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyLmdldCgpOyB9CisgICAgU3RyaW5nSW1wbCogc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9z
dHIuZ2V0KCk7IH0KIAogICAgIHZpcnR1YWwgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9v
bCxib29sLCBib29sIGlzT25seVJ1biA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlydHlM
aW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0LCBib29sIGlzUm9vdElubGluZUJveCA9IGZhbHNlKTsK
LSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkp
IHsgYXNzZXJ0KGZhbHNlKTsgfQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IGFzc2VydChm
YWxzZSk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQsIGludCwgaW50LCBpbnQsIEhpdFRlc3RBY3Rpb24p
IHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBpbnQsIGludCwgaW50LCBpbnQsIEhpdFRlc3RBY3Rpb24pIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBh
ZGRMaW5lQm94UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAw
LCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCk7CiAKICAgICB2aXJ0dWFsIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7CiAKLSAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0ci0+bGVuZ3RoKCk7IH0KLSAg
ICBjb25zdCBVQ2hhciogdGV4dCgpIGNvbnN0IHsgcmV0dXJuIHN0ci0+Y2hhcmFjdGVycygpOyB9
Ci0gICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gc3RyLT5sZW5ndGgo
KTsgfSAvLyBub24gdmlydHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBsZW5ndGgoKQorICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHItPmxlbmd0aCgpOyB9Cisg
ICAgY29uc3QgVUNoYXIqIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3N0ci0+Y2hhcmFjdGVycygp
OyB9CisgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHItPmxl
bmd0aCgpOyB9IC8vIG5vbiB2aXJ0dWFsIGltcGxlbWVudGF0aW9uIG9mIGxlbmd0aCgpCiAgICAg
dmlydHVhbCB2b2lkIHBvc2l0aW9uKElubGluZUJveCopOwogCi0gICAgdmlydHVhbCB1bnNpZ25l
ZCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnQqLCBpbnQgeHBv
cykgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBsZW4sIGludCB4cG9zLCBib29sIGZpcnN0TGluZSA9IGZhbHNlKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3Qg
Rm9udCosIGludCB4UG9zKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgaW50IHhQb3MsIGJvb2wgZmlyc3RMaW5lID0gZmFsc2Up
IGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQg
aGVpZ2h0KCkgY29uc3Q7CiAKQEAgLTk1LDEyICs5NSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gd2lk
dGhzCiAgICAgdm9pZCBjYWxjTWluTWF4V2lkdGgoaW50IGxlYWRXaWR0aCk7CiAgICAgdmlydHVh
bCB2b2lkIHRyaW1tZWRNaW5NYXhXaWR0aChpbnQgbGVhZFdpZHRoLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50JiBiZWdpbk1pblcsIGJvb2wmIGJlZ2luV1MsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBiZWdpbk1pblcsIGJvb2wmIGJl
Z2luV1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGVuZE1pblcs
IGJvb2wmIGVuZFdTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYg
aGFzQnJlYWthYmxlQ2hhciwgYm9vbCYgaGFzQnJlYWssCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQmIGJlZ2luTWF4VywgaW50JiBlbmRNYXhXLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtaW5XLCBpbnQmIG1heFcsIGJvb2wmIHN0cmlw
RnJvbnRTcGFjZXMpOwotICAgIAorCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29uc3Q7CiAKICAgICAvLyByZXR1cm5zIHRoZSBt
aW5pbXVtIHggcG9zaXRpb24gb2YgYWxsIHJ1bnMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudC4KQEAg
LTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIElubGluZUJveCogaW5saW5l
Qm94KGludCBvZmZzZXQsIEVBZmZpbml0eSA9IFVQU1RSRUFNKTsKIAotICAgIGludCB3aWR0aEZy
b21DYWNoZShjb25zdCBGb250KiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBpbnQgdGFiV2lkdGgsIGlu
dCB4cG9zKSBjb25zdDsKKyAgICBpbnQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udCosIGludCBz
dGFydCwgaW50IGxlbiwgaW50IHRhYldpZHRoLCBpbnQgeFBvcykgY29uc3Q7CiAgICAgYm9vbCBz
aG91bGRVc2VNb25vc3BhY2VDYWNoZShjb25zdCBGb250KikgY29uc3Q7CiAgICAgdm9pZCBjYWNo
ZVdpZHRocygpOwogICAgIGJvb2wgYWxsQXNjaWkoKSBjb25zdDsKQEAgLTE0OCwxNCArMTQ4LDE0
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgaW50IHByZXZpb3VzT2Zmc2V0KGludCBjdXJyZW50
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBuZXh0T2Zmc2V0KGludCBjdXJyZW50KSBjb25zdDsK
LSAgICAKKwogICAgIGJvb2wgY29udGFpbnNSZXZlcnNlZFRleHQoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRhaW5zUmV2ZXJzZWRUZXh0OyB9Ci0gICAgCisKICAgICBJbmxpbmVUZXh0Qm94KiBmaW5k
TmV4dElubGluZVRleHRCb3goaW50IG9mZnNldCwgaW50JiBwb3MpIGNvbnN0OwogCiBwcm90ZWN0
ZWQ6CiAgICAgLy8gbWVtYmVycwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBzdHI7CisgICAgUmVm
UHRyPFN0cmluZ0ltcGw+IG1fc3RyOwogCiAgICAgSW5saW5lVGV4dEJveCogbV9maXJzdFRleHRC
b3g7CiAgICAgSW5saW5lVGV4dEJveCogbV9sYXN0VGV4dEJveDsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDE4MjYwKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMSAr
NDQsMTIgQEAKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgog
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLXVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKIFJlbmRlclRleHRDb250cm9sOjpSZW5kZXJUZXh0Q29udHJvbChOb2Rl
KiBub2RlLCBib29sIG11bHRpTGluZSkKICAgICA6IFJlbmRlckJsb2NrKG5vZGUpCkBAIC04NSw5
ICs4NiwxMCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRTdHlsZShSZW5kZXJTCiAgICAg
ICAgIFJlbmRlckJsb2NrKiB0ZXh0QmxvY2tSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckJs
b2NrKj4obV9pbm5lclRleHQtPnJlbmRlcmVyKCkpOwogICAgICAgICBSZW5kZXJTdHlsZSogdGV4
dEJsb2NrU3R5bGUgPSBjcmVhdGVJbm5lclRleHRTdHlsZShzdHlsZSk7CiAgICAgICAgIHRleHRC
bG9ja1JlbmRlcmVyLT5zZXRTdHlsZSh0ZXh0QmxvY2tTdHlsZSk7Ci0gICAgICAgIGZvciAoTm9k
ZSAqbiA9IG1faW5uZXJUZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHRO
b2RlKG1faW5uZXJUZXh0LmdldCgpKSkKKyAgICAgICAgZm9yIChOb2RlKiBuID0gbV9pbm5lclRl
eHQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobV9pbm5lclRleHQu
Z2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAobi0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgICAg
ICBuLT5yZW5kZXJlcigpLT5zZXRTdHlsZSh0ZXh0QmxvY2tTdHlsZSk7CisgICAgICAgIH0KICAg
ICB9CiAgICAgaWYgKG1fcmVzdWx0c0J1dHRvbikKICAgICAgICAgbV9yZXN1bHRzQnV0dG9uLT5y
ZW5kZXJlcigpLT5zZXRTdHlsZShjcmVhdGVSZXN1bHRzQnV0dG9uU3R5bGUoc3R5bGUpKTsKQEAg
LTEwMywxNCArMTA1LDEzIEBAIHN0YXRpYyBDb2xvciBkaXNhYmxlZFRleHRDb2xvcihjb25zdCBD
b2wKIHsKICAgICBpZiAoZGlmZmVyZW5jZVNxdWFyZWQodGV4dENvbG9yLCBDb2xvcjo6d2hpdGUp
ID4gZGlmZmVyZW5jZVNxdWFyZWQoYmFja2dyb3VuZENvbG9yLCBDb2xvcjo6d2hpdGUpKQogICAg
ICAgICByZXR1cm4gdGV4dENvbG9yLmxpZ2h0KCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4g
dGV4dENvbG9yLmRhcmsoKTsKKyAgICByZXR1cm4gdGV4dENvbG9yLmRhcmsoKTsKIH0KIAogUmVu
ZGVyU3R5bGUqIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbm5lckJsb2NrU3R5bGUoUmVuZGVy
U3R5bGUqIHN0YXJ0U3R5bGUpCiB7CiAgICAgUmVuZGVyU3R5bGUqIGlubmVyQmxvY2tTdHlsZSA9
IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKLSAgICAKKwogICAgIGlubmVyQmxv
Y2tTdHlsZS0+aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7CiAgICAgaW5uZXJCbG9ja1N0eWxlLT5z
ZXREaXNwbGF5KEJMT0NLKTsKICAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBzaGFkb3cgZG9tIHRv
IGJlIGVkaXRhYmxlLCBzbyB3ZSBzZXQgdGhpcyBibG9jayB0byByZWFkLW9ubHkgaW4gY2FzZSB0
aGUgaW5wdXQgaXRzZWxmIGlzIGVkaXRhYmxlLgpAQCAtMTIzLDE0ICsxMjQsMTQgQEAgUmVuZGVy
U3R5bGUqIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbgogewogICAgIFJlbmRlclN0eWxlKiB0
ZXh0QmxvY2tTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKICAgICBI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNG
b3JtRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgCisKICAgICB0ZXh0QmxvY2tTdHlsZS0+aW5oZXJp
dEZyb20oc3RhcnRTdHlsZSk7CiAgICAgdGV4dEJsb2NrU3R5bGUtPnNldFVzZXJNb2RpZnkoZWxl
bWVudC0+aXNSZWFkT25seUNvbnRyb2woKSB8fCBlbGVtZW50LT5kaXNhYmxlZCgpID8gUkVBRF9P
TkxZIDogUkVBRF9XUklURV9QTEFJTlRFWFRfT05MWSk7CiAgICAgaWYgKG1faW5uZXJCbG9jaykK
ICAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnNldERpc3BsYXkoSU5MSU5FX0JMT0NLKTsKICAgICBl
bHNlCiAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICAKKwog
ICAgIGlmIChtX211bHRpTGluZSkgewogICAgICAgICAvLyBGb3J3YXJkIG92ZXJmbG93IHByb3Bl
cnRpZXMuCiAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRPdmVyZmxvd1goc3RhcnRTdHlsZS0+
b3ZlcmZsb3dYKCkgPT0gT1ZJU0lCTEUgPyBPQVVUTyA6IHN0YXJ0U3R5bGUtPm92ZXJmbG93WCgp
KTsKQEAgLTE0NCw3ICsxNDUsNiBAQCBSZW5kZXJTdHlsZSogUmVuZGVyVGV4dENvbnRyb2w6OmNy
ZWF0ZUluCiAgICAgICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0V2hpdGVTcGFjZShQUkVfV1JB
UCk7CiAgICAgICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0V29yZFdyYXAoQlJFQUtfV09SRCk7
CiAgICAgICAgIH0KLQogICAgIH0gZWxzZSB7CiAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRX
aGl0ZVNwYWNlKFBSRSk7CiAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRPdmVyZmxvd1goT0hJ
RERFTik7CkBAIC0xNzMsNyArMTczLDcgQEAgUmVuZGVyU3R5bGUqIFJlbmRlclRleHRDb250cm9s
OjpjcmVhdGVSZQogICAgIFJlbmRlclN0eWxlKiByZXN1bHRzQmxvY2tTdHlsZTsKICAgICBpZiAo
aW5wdXQtPm1heFJlc3VsdHMoKSA8IDApCiAgICAgICAgIHJlc3VsdHNCbG9ja1N0eWxlID0gZ2V0
UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNFQVJDSF9ERUNPUkFUSU9OKTsKLSAgICBlbHNlIGlm
IChpbnB1dC0+bWF4UmVzdWx0cygpID09IDApCisgICAgZWxzZSBpZiAoIWlucHV0LT5tYXhSZXN1
bHRzKCkpCiAgICAgICAgIHJlc3VsdHNCbG9ja1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVy
U3R5bGU6OlNFQVJDSF9SRVNVTFRTX0RFQ09SQVRJT04pOwogICAgIGVsc2UKICAgICAgICAgcmVz
dWx0c0Jsb2NrU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0VBUkNIX1JFU1VM
VFNfQlVUVE9OKTsKQEAgLTE4Myw5ICsxODMsOSBAQCBSZW5kZXJTdHlsZSogUmVuZGVyVGV4dENv
bnRyb2w6OmNyZWF0ZVJlCiAKICAgICBpZiAoc3RhcnRTdHlsZSkKICAgICAgICAgcmVzdWx0c0Js
b2NrU3R5bGUtPmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwotICAgIAorCiAgICAgcmVzdWx0c0Js
b2NrU3R5bGUtPnNldERpc3BsYXkoSU5MSU5FX0JMT0NLKTsKLSAgICAKKwogICAgIHJldHVybiBy
ZXN1bHRzQmxvY2tTdHlsZTsKIH0KIApAQCAtMTk3LDcgKzE5Nyw3IEBAIFJlbmRlclN0eWxlKiBS
ZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlQ2EKIAogICAgIGlmIChzdGFydFN0eWxlKQogICAgICAg
ICBjYW5jZWxCbG9ja1N0eWxlLT5pbmhlcml0RnJvbShzdGFydFN0eWxlKTsKLSAgICAgICAgCisK
ICAgICBjYW5jZWxCbG9ja1N0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7CiAKICAgICB1
cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KGNhbmNlbEJsb2NrU3R5bGUpOwpAQCAtMjA5LDMy
ICsyMDksMzEgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2hvd1BsYWNlaG9sZGVySQogewog
ICAgIGlmIChtX211bHRpTGluZSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgU3RyaW5n
IHZhbHVlID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSktPnZhbHVlKCku
Y29weSgpOwogICAgIFN0cmluZyBwbGFjZWhvbGRlciA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihub2RlKCkpLT5nZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKTsKIAogICAgIGlm
ICghdmFsdWUuaXNFbXB0eSgpIHx8IHBsYWNlaG9sZGVyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIAorCiAgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gbm9kZSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBtX3BsYWNlaG9sZGVyVmlzaWJsZSA9IHRy
dWU7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgbV9pbm5lclRleHQtPnNldElubmVy
VGV4dChwbGFjZWhvbGRlciwgZWMpOwogICAgIENvbG9yIHBsYWNlaG9sZGVyQ29sb3IoMTI4LCAx
MjgsIDEyOCk7CiAgICAgbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnNldENvbG9y
KHBsYWNlaG9sZGVyQ29sb3IpOwogICAgIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5yZXBhaW50
KCk7Ci0gICAgCiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmhpZGVQbGFjZWhvbGRlcklm
TmVlZGVkKCkKIHsKICAgICBpZiAoIW1fcGxhY2Vob2xkZXJWaXNpYmxlKQogICAgICAgICByZXR1
cm47Ci0gICAgCisKICAgICBtX3BsYWNlaG9sZGVyVmlzaWJsZSA9IGZhbHNlOwotICAgIG1faW5u
ZXJUZXh0LT5yZW1vdmVDaGlsZHJlbigpOyAgICAKKyAgICBtX2lubmVyVGV4dC0+cmVtb3ZlQ2hp
bGRyZW4oKTsKICAgICBpZiAobm9kZSgpLT5pc0VuYWJsZWQoKSkKICAgICAgICAgbV9pbm5lclRl
eHQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnNldENvbG9yKHN0eWxlKCktPmNvbG9yKCkpOwogICAg
IGVsc2UKQEAgLTI1Nyw3ICsyNTYsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVT
dWJ0cmVlSWZOCiAgICAgICAgIG1faW5uZXJCbG9jay0+c2V0QXR0YWNoZWQoKTsKICAgICAgICAg
bV9pbm5lckJsb2NrLT5zZXRJbkRvY3VtZW50KHRydWUpOwogICAgICAgICBpbm5lckJsb2NrUmVu
ZGVyZXItPnNldFN0eWxlKGNyZWF0ZUlubmVyQmxvY2tTdHlsZShzdHlsZSgpKSk7Ci0gICAgICAg
IAorCiAgICAgICAgIC8vIEFkZCBpbm5lciBibG9jayByZW5kZXJlciB0byBSZW5kZXIgdHJlZQog
ICAgICAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoaW5uZXJCbG9ja1JlbmRlcmVyKTsKICAgICB9
CkBAIC0yNjgsMTAgKzI2NywxMCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0
cmVlSWZOCiAgICAgICAgIG1fcmVzdWx0c0J1dHRvbi0+c2V0UmVuZGVyZXIocmVzdWx0c0Jsb2Nr
UmVuZGVyZXIpOwogICAgICAgICBtX3Jlc3VsdHNCdXR0b24tPnNldEF0dGFjaGVkKCk7CiAgICAg
ICAgIG1fcmVzdWx0c0J1dHRvbi0+c2V0SW5Eb2N1bWVudCh0cnVlKTsKLSAgICAgICAgCisKICAg
ICAgICAgUmVuZGVyU3R5bGUqIHJlc3VsdHNCbG9ja1N0eWxlID0gY3JlYXRlUmVzdWx0c0J1dHRv
blN0eWxlKG1faW5uZXJCbG9jay0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAgICAgIHJlc3Vs
dHNCbG9ja1JlbmRlcmVyLT5zZXRTdHlsZShyZXN1bHRzQmxvY2tTdHlsZSk7IAotICAgICAgICAK
KyAgICAgICAgcmVzdWx0c0Jsb2NrUmVuZGVyZXItPnNldFN0eWxlKHJlc3VsdHNCbG9ja1N0eWxl
KTsKKwogICAgICAgICAvLyBBZGQgcmVzdWx0cyByZW5kZXJlciB0byBET00gJiBSZW5kZXIgdHJl
ZQogICAgICAgICBtX2lubmVyQmxvY2stPnJlbmRlcmVyKCktPmFkZENoaWxkKHJlc3VsdHNCbG9j
a1JlbmRlcmVyKTsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0yODAsMjYgKzI3
OSwyNiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0cmVlSWZOCiAgICAgaWYg
KCFtX2lubmVyVGV4dCkgewogICAgICAgICAvLyBDcmVhdGUgdGhlIHRleHQgYmxvY2sgZWxlbWVu
dCBhbmQgZ2l2ZSBpdCBhIHBhcmVudCwgcmVuZGVyZXIsIGFuZCBzdHlsZQogICAgICAgICAvLyBG
b3Igbm9uLXNlYXJjaCBmaWVsZHMsIHRoZXJlIGlzIG5vIGludGVybWVkaWF0ZSBtX2lubmVyQmxv
Y2sgYXMgdGhlIHNoYWRvdyBub2RlLgotICAgICAgICAvLyBtX2lubmVyVGV4dCB3aWxsIGJlIHRo
ZSBzaGFkb3cgbm9kZSBpbiB0aGF0IGNhc2UuIAorICAgICAgICAvLyBtX2lubmVyVGV4dCB3aWxs
IGJlIHRoZSBzaGFkb3cgbm9kZSBpbiB0aGF0IGNhc2UuCiAgICAgICAgIG1faW5uZXJUZXh0ID0g
bmV3IEhUTUxUZXh0RmllbGRJbm5lclRleHRFbGVtZW50KGRvY3VtZW50KCksIG1faW5uZXJCbG9j
ayA/IDAgOiBub2RlKCkpOwogICAgICAgICBSZW5kZXJCbG9jayogdGV4dEJsb2NrUmVuZGVyZXIg
PSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlckJsb2NrKG1faW5uZXJUZXh0LmdldCgpKTsKICAg
ICAgICAgbV9pbm5lclRleHQtPnNldFJlbmRlcmVyKHRleHRCbG9ja1JlbmRlcmVyKTsKICAgICAg
ICAgbV9pbm5lclRleHQtPnNldEF0dGFjaGVkKCk7CiAgICAgICAgIG1faW5uZXJUZXh0LT5zZXRJ
bkRvY3VtZW50KHRydWUpOwotICAgICAgICAKKwogICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBzdHlsZSgpOwogICAgICAgICBpZiAobV9pbm5lckJsb2NrKQogICAgICAgICAgICAg
cGFyZW50U3R5bGUgPSBtX2lubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCk7CiAgICAgICAg
IFJlbmRlclN0eWxlKiB0ZXh0QmxvY2tTdHlsZSA9IGNyZWF0ZUlubmVyVGV4dFN0eWxlKHBhcmVu
dFN0eWxlKTsKLSAgICAgICAgdGV4dEJsb2NrUmVuZGVyZXItPnNldFN0eWxlKHRleHRCbG9ja1N0
eWxlKTsgCi0gICAgICAgIAorICAgICAgICB0ZXh0QmxvY2tSZW5kZXJlci0+c2V0U3R5bGUodGV4
dEJsb2NrU3R5bGUpOworCiAgICAgICAgIC8vIEFkZCB0ZXh0IGJsb2NrIHJlbmRlcmVyIHRvIFJl
bmRlciB0cmVlCiAgICAgICAgIGlmIChtX2lubmVyQmxvY2spIHsKICAgICAgICAgICAgIG1faW5u
ZXJCbG9jay0+cmVuZGVyZXIoKS0+YWRkQ2hpbGQodGV4dEJsb2NrUmVuZGVyZXIpOwogICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgICAgICAvLyBBZGQgdGV4dCBibG9j
ayB0byB0aGUgRE9NCiAgICAgICAgICAgICBtX2lubmVyQmxvY2stPmFwcGVuZENoaWxkKG1faW5u
ZXJUZXh0LCBlYyk7Ci0gICAgICAgIH0gZWxzZSAKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQodGV4dEJsb2NrUmVuZGVyZXIpOwogICAgIH0KICAgICBp
ZiAoaXNTZWFyY2hGaWVsZCAmJiAhbV9jYW5jZWxCdXR0b24pIHsKQEAgLTMwOSwxMCArMzA4LDEw
IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZVN1YnRyZWVJZk4KICAgICAgICAgbV9j
YW5jZWxCdXR0b24tPnNldFJlbmRlcmVyKGNsb3NlQmxvY2tSZW5kZXJlcik7CiAgICAgICAgIG1f
Y2FuY2VsQnV0dG9uLT5zZXRBdHRhY2hlZCgpOwogICAgICAgICBtX2NhbmNlbEJ1dHRvbi0+c2V0
SW5Eb2N1bWVudCh0cnVlKTsKLSAgICAgICAgCisKICAgICAgICAgUmVuZGVyU3R5bGUqIGNsb3Nl
QmxvY2tTdHlsZSA9IGNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKG1faW5uZXJCbG9jay0+cmVuZGVy
ZXIoKS0+c3R5bGUoKSk7Ci0gICAgICAgIGNsb3NlQmxvY2tSZW5kZXJlci0+c2V0U3R5bGUoY2xv
c2VCbG9ja1N0eWxlKTsgCi0gICAgICAgIAorICAgICAgICBjbG9zZUJsb2NrUmVuZGVyZXItPnNl
dFN0eWxlKGNsb3NlQmxvY2tTdHlsZSk7CisKICAgICAgICAgLy8gQWRkIGNsb3NlIGJsb2NrIHJl
bmRlcmVyIHRvIERPTSAmIFJlbmRlciB0cmVlCiAgICAgICAgIG1faW5uZXJCbG9jay0+cmVuZGVy
ZXIoKS0+YWRkQ2hpbGQoY2xvc2VCbG9ja1JlbmRlcmVyKTsKICAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CkBAIC0zMjMsMTUgKzMyMiwxNSBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpj
cmVhdGVTdWJ0cmVlSWZOCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjp1cGRhdGVGcm9tRWxlbWVu
dCgpCiB7CiAgICAgY3JlYXRlU3VidHJlZUlmTmVlZGVkKCk7Ci0gICAgCisKICAgICBpZiAobV9j
YW5jZWxCdXR0b24pCiAgICAgICAgIHVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkobV9jYW5j
ZWxCdXR0b24tPnJlbmRlcmVyKCktPnN0eWxlKCkpOwotICAgICAgICAKKwogICAgIEhUTUxHZW5l
cmljRm9ybUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50Kj4obm9kZSgpKTsKICAgICBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+c2V0
VXNlck1vZGlmeShlbGVtZW50LT5pc1JlYWRPbmx5Q29udHJvbCgpIHx8IGVsZW1lbnQtPmRpc2Fi
bGVkKCkgPyBSRUFEX09OTFkgOiBSRUFEX1dSSVRFX1BMQUlOVEVYVF9PTkxZKTsKICAgICBTdHJp
bmcgdmFsdWU7CiAgICAgaWYgKG1fbXVsdGlMaW5lKQotICAgICAgICB2YWx1ZSA9IHN0YXRpY19j
YXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihlbGVtZW50KS0+dmFsdWUoKS5jb3B5KCk7ICAgIAor
ICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihlbGVtZW50
KS0+dmFsdWUoKS5jb3B5KCk7CiAgICAgZWxzZQogICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KS0+dmFsdWUoKS5jb3B5KCk7CiAKQEAgLTM1MCwx
NyArMzQ5LDE3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnVwZGF0ZUZyb21FbGVtZW4KICAg
ICAgICAgICAgIHNldEVkaXRlZChmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxlbWVudC0+
c2V0VmFsdWVNYXRjaGVzUmVuZGVyZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgc2hvd1BsYWNl
aG9sZGVySWZOZWVkZWQoKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAobV9zZWFyY2hQb3B1cElz
VmlzaWJsZSkKICAgICAgICAgbV9zZWFyY2hQb3B1cC0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0K
IAogaW50IFJlbmRlclRleHRDb250cm9sOjpzZWxlY3Rpb25TdGFydCgpCiB7Ci0gICAgcmV0dXJu
IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbkNv
bnRyb2xsZXIoKS0+c3RhcnQoKSk7ICAgICAgICAKKyAgICByZXR1cm4gaW5kZXhGb3JWaXNpYmxl
UG9zaXRpb24oZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zdGFy
dCgpKTsKIH0KIAogaW50IFJlbmRlclRleHRDb250cm9sOjpzZWxlY3Rpb25FbmQoKQpAQCAtMzcy
LDEyICszNzEsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0U2VsZWN0aW9uU3Rhcgog
ewogICAgIHNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBtYXgoc3RhcnQsIHNlbGVjdGlvbkVuZCgp
KSk7CiB9Ci0gCisKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNldFNlbGVjdGlvbkVuZChpbnQg
ZW5kKQogewogICAgIHNldFNlbGVjdGlvblJhbmdlKG1pbihlbmQsIHNlbGVjdGlvblN0YXJ0KCkp
LCBlbmQpOwogfQotICAgIAorCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzZWxlY3QoKQogewog
ICAgIHNldFNlbGVjdGlvblJhbmdlKDAsIHRleHQoKS5sZW5ndGgoKSk7CkBAIC0zODcsNyArMzg2
LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0U2VsZWN0aW9uUmFuZwogewogICAgIGVu
ZCA9IG1heChlbmQsIDApOwogICAgIHN0YXJ0ID0gbWluKG1heChzdGFydCwgMCksIGVuZCk7Ci0g
ICAgCisKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIAogICAgIGlmIChzdHlsZSgp
LT52aXNpYmlsaXR5KCkgPT0gSElEREVOKSB7CkBAIC00MDMsNyArNDAyLDcgQEAgdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbDo6c2V0U2VsZWN0aW9uUmFuZwogICAgICAgICBlbmRQb3NpdGlvbiA9IHN0
YXJ0UG9zaXRpb247CiAgICAgZWxzZQogICAgICAgICBlbmRQb3NpdGlvbiA9IHZpc2libGVQb3Np
dGlvbkZvckluZGV4KGVuZCk7Ci0gICAgCisKICAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbi5pc05v
dE51bGwoKSAmJiBlbmRQb3NpdGlvbi5pc05vdE51bGwoKSk7CiAgICAgQVNTRVJUKHN0YXJ0UG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5v
ZGUoKSAmJiBlbmRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+c2hhZG93QW5jZXN0
b3JOb2RlKCkgPT0gbm9kZSgpKTsKIApAQCAtNDE1LDcgKzQxNCw3IEBAIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2w6OnNldFNlbGVjdGlvblJhbmcKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRl
eHRDb250cm9sOjp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbnQgaW5kZXgpCi17ICAgIAorewog
ICAgIGlmIChpbmRleCA8PSAwKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG1faW5u
ZXJUZXh0LmdldCgpLCAwLCBET1dOU1RSRUFNKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
QEAgLTQ2MiwxMSArNDYxLDExIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnN1YnRyZWVIYXND
aGFuZ2UKICAgICAgICAgICAgIGlucHV0LT5zZXRWYWx1ZUZyb21SZW5kZXJlcih0ZXh0KCkpOwog
ICAgICAgICAgICAgaWYgKG1fY2FuY2VsQnV0dG9uKQogICAgICAgICAgICAgICAgIHVwZGF0ZUNh
bmNlbEJ1dHRvblZpc2liaWxpdHkobV9jYW5jZWxCdXR0b24tPnJlbmRlcmVyKCktPnN0eWxlKCkp
OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIElmIHRoZSBpbmNyZW1lbnRhbCBhdHRy
aWJ1dGUgaXMgc2V0LCB0aGVuIGRpc3BhdGNoIHRoZSBzZWFyY2ggZXZlbnQKICAgICAgICAgICAg
IGlmICghaW5wdXQtPmdldEF0dHJpYnV0ZShpbmNyZW1lbnRhbEF0dHIpLmlzTnVsbCgpKQogICAg
ICAgICAgICAgICAgIG9uU2VhcmNoKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAg
IGlmICghd2FzUHJldmlvdXNseUVkaXRlZCkKICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5m
cmFtZSgpLT50ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoaW5wdXQpOwogICAgICAgICAgICAgZG9j
dW1lbnQoKS0+ZnJhbWUoKS0+dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKGlucHV0KTsKQEAgLTQ4
NCw3ICs0ODMsNyBAQCBTdHJpbmcgUmVuZGVyVGV4dENvbnRyb2w6OnRleHQoKQogU3RyaW5nIFJl
bmRlclRleHRDb250cm9sOjp0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKCkKIHsKICAgICBTdHJpbmcg
cygiIik7Ci0gICAgCisKICAgICBpZiAoIW1faW5uZXJUZXh0IHx8ICFtX2lubmVyVGV4dC0+Zmly
c3RDaGlsZCgpKQogICAgICAgICByZXR1cm4gczsKIApAQCAtNTE3LDcgKzUxNiw3IEBAIFN0cmlu
ZyBSZW5kZXJUZXh0Q29udHJvbDo6dGV4dFdpdGhIYXJkTGkKICAgICAgICAgfQogICAgIH0KICAg
ICBzLmFwcGVuZChyYW5nZS0+dG9TdHJpbmcodHJ1ZSwgZWMpKTsKLSAgICBBU1NFUlQoZWMgPT0g
MCk7CisgICAgQVNTRVJUKCFlYyk7CiAKICAgICByZXR1cm4gcy5yZXBsYWNlKCdcXCcsIGJhY2tz
bGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CiB9CkBAIC01MjcsMTcgKzUyNiwxNyBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sOjpjYWxjSGVpZ2h0KCkKICAgICBpbnQgcm93cyA9IDE7CiAgICAgaWYg
KG1fbXVsdGlMaW5lKQogICAgICAgICByb3dzID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxl
bWVudCo+KG5vZGUoKSktPnJvd3MoKTsKLSAgICAKKwogICAgIGludCBsaW5lID0gbV9pbm5lclRl
eHQtPnJlbmRlcmVyKCktPmxpbmVIZWlnaHQodHJ1ZSwgdHJ1ZSk7CiAgICAgaW50IHRvQWRkID0g
cGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpICsgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0
b20oKTsKLSAgICAKKwogICAgIGludCBpbm5lclRvQWRkID0gbV9pbm5lclRleHQtPnJlbmRlcmVy
KCktPmJvcmRlclRvcCgpICsgbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPmJvcmRlckJvdHRvbSgp
ICsKICAgICAgICAgICAgICAgICAgICAgIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5wYWRkaW5n
VG9wKCkgKyBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+cGFkZGluZ0JvdHRvbSgpICsKICAgICAg
ICAgICAgICAgICAgICAgIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5tYXJnaW5Ub3AoKSArIG1f
aW5uZXJUZXh0LT5yZW5kZXJlcigpLT5tYXJnaW5Cb3R0b20oKTsKLSAgICAKKwogICAgIGlmICht
X3Jlc3VsdHNCdXR0b24pIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihtX3Jl
c3VsdHNCdXR0b24tPnJlbmRlcmVyKCkpLT5jYWxjSGVpZ2h0KCk7Ci0gICAgICAgIGlubmVyVG9B
ZGQgPSBtYXgoaW5uZXJUb0FkZCwgCisgICAgICAgIGlubmVyVG9BZGQgPSBtYXgoaW5uZXJUb0Fk
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Jlc3VsdHNCdXR0b24tPnJlbmRlcmVyKCkt
PmJvcmRlclRvcCgpICsgbV9yZXN1bHRzQnV0dG9uLT5yZW5kZXJlcigpLT5ib3JkZXJCb3R0b20o
KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHRzQnV0dG9uLT5yZW5kZXJlcigp
LT5wYWRkaW5nVG9wKCkgKyBtX3Jlc3VsdHNCdXR0b24tPnJlbmRlcmVyKCktPnBhZGRpbmdCb3R0
b20oKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHRzQnV0dG9uLT5yZW5kZXJl
cigpLT5tYXJnaW5Ub3AoKSArIG1fcmVzdWx0c0J1dHRvbi0+cmVuZGVyZXIoKS0+bWFyZ2luQm90
dG9tKCkpOwpAQCAtNTQ1LDE0ICs1NDQsMTQgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2Fs
Y0hlaWdodCgpCiAgICAgfQogICAgIGlmIChtX2NhbmNlbEJ1dHRvbikgewogICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJCbG9jayo+KG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpKS0+Y2FsY0hl
aWdodCgpOwotICAgICAgICBpbm5lclRvQWRkID0gbWF4KGlubmVyVG9BZGQsIAorICAgICAgICBp
bm5lclRvQWRkID0gbWF4KGlubmVyVG9BZGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
YW5jZWxCdXR0b24tPnJlbmRlcmVyKCktPmJvcmRlclRvcCgpICsgbV9jYW5jZWxCdXR0b24tPnJl
bmRlcmVyKCktPmJvcmRlckJvdHRvbSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Nh
bmNlbEJ1dHRvbi0+cmVuZGVyZXIoKS0+cGFkZGluZ1RvcCgpICsgbV9jYW5jZWxCdXR0b24tPnJl
bmRlcmVyKCktPnBhZGRpbmdCb3R0b20oKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
YW5jZWxCdXR0b24tPnJlbmRlcmVyKCktPm1hcmdpblRvcCgpICsgbV9jYW5jZWxCdXR0b24tPnJl
bmRlcmVyKCktPm1hcmdpbkJvdHRvbSgpKTsKICAgICAgICAgbGluZSA9IG1heChsaW5lLCBtX2Nh
bmNlbEJ1dHRvbi0+cmVuZGVyZXIoKS0+aGVpZ2h0KCkpOwogICAgIH0KICAgICB0b0FkZCArPSBp
bm5lclRvQWRkOwotICAgIAorCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBnZXQgdGhlIHNpemUg
b2YgdGhlIHNjcm9sbGJhciBmcm9tIHRoZSBSZW5kZXJUaGVtZSBpbnN0ZWFkIG9mIGhhcmQgY29k
aW5nIGl0IGhlcmUuCiAgICAgaW50IHNjcm9sbGJhclNpemUgPSAwOwogICAgIC8vIFdlIGFyZSBh
YmxlIHRvIGhhdmUgYSBob3Jpem9udGFsIHNjcm9sbGJhciBpZiB0aGUgb3ZlcmZsb3cgc3R5bGUg
aXMgc2Nyb2xsLCBvciBpZiBpdHMgYXV0byBhbmQgdGhlcmUncyBubyB3b3JkIHdyYXAuCkBAIC01
NjAsNyArNTU5LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY0hlaWdodCgpCiAgICAg
ICAgIHNjcm9sbGJhclNpemUgPSAxNTsKIAogICAgIG1faGVpZ2h0ID0gbGluZSAqIHJvd3MgKyB0
b0FkZCArIHNjcm9sbGJhclNpemU7Ci0gICAgCisKICAgICBSZW5kZXJCbG9jazo6Y2FsY0hlaWdo
dCgpOwogfQogCkBAIC01NzMsOSArNTcyLDkgQEAgc2hvcnQgUmVuZGVyVGV4dENvbnRyb2w6OmJh
c2VsaW5lUG9zaXRpbwogCiBib29sIFJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwg
aW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7Ci0g
ICAgLy8gSWYgd2UncmUgd2l0aGluIHRoZSB0ZXh0IGNvbnRyb2wsIHdlIHdhbnQgdG8gYWN0IGFz
IGlmIHdlJ3ZlIGhpdCB0aGUgaW5uZXIgdGV4dCBibG9jayBlbGVtZW50LCBpbmNhc2UgdGhlIHBv
aW50IAorICAgIC8vIElmIHdlJ3JlIHdpdGhpbiB0aGUgdGV4dCBjb250cm9sLCB3ZSB3YW50IHRv
IGFjdCBhcyBpZiB3ZSd2ZSBoaXQgdGhlIGlubmVyIHRleHQgYmxvY2sgZWxlbWVudCwgaW4gY2Fz
ZSB0aGUgcG9pbnQKICAgICAvLyB3YXMgb24gdGhlIGNvbnRyb2wgYnV0IG5vdCBvbiB0aGUgaW5u
ZXIgZWxlbWVudCAoc2VlIFJhZGFyIDQ2MTc4NDEpLgotICAgIAorCiAgICAgLy8gSW4gYSBzZWFy
Y2ggZmllbGQsIHdlIHdhbnQgdG8gYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgcmVzdWx0cyBibG9j
ayBpZiB3ZSdyZSB0byB0aGUgbGVmdCBvZiB0aGUgaW5uZXIgdGV4dCBibG9jaywKICAgICAvLyBh
bmQgYWN0IGFzIGlmIHdlJ3ZlIGhpdCB0aGUgY2xvc2UgYmxvY2sgaWYgd2UncmUgdG8gdGhlIHJp
Z2h0IG9mIHRoZSBpbm5lciB0ZXh0IGJsb2NrLgogCkBAIC01ODcsMzEgKzU4NiwzMSBAQCBib29s
IFJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChjb25zCiAgICAgICAgICAgICByaWdodE5v
ZGUgPSBtX2NhbmNlbEJ1dHRvbi5nZXQoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGxlZnROb2RlID0gbV9jYW5jZWxCdXR0b24uZ2V0KCk7Ci0gICAgICAgICAgICByaWdodE5vZGUg
PSBtX3Jlc3VsdHNCdXR0b24uZ2V0KCk7ICAgICAgICAKKyAgICAgICAgICAgIHJpZ2h0Tm9kZSA9
IG1fcmVzdWx0c0J1dHRvbi5nZXQoKTsKICAgICAgICAgfQogICAgICAgICBpZiAobGVmdE5vZGUg
JiYgeCA8IG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgp
LngoKSkKICAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vZGUobGVmdE5vZGUpOwogICAgICAg
ICBlbHNlIGlmIChyaWdodE5vZGUgJiYgeCA+IG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5hYnNv
bHV0ZUJvdW5kaW5nQm94UmVjdCgpLnJpZ2h0KCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0SW5u
ZXJOb2RlKHJpZ2h0Tm9kZSk7Ci0gICAgICAgIGVsc2UgCisgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHJlc3VsdC5zZXRJbm5lck5vZGUobV9pbm5lclRleHQuZ2V0KCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9ICAKKyAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFJl
bmRlclRleHRDb250cm9sOjpsYXlvdXQoKQoteyAgICAKK3sKICAgICBpbnQgb2xkSGVpZ2h0ID0g
bV9oZWlnaHQ7CiAgICAgY2FsY0hlaWdodCgpOwogICAgIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiA9
IG9sZEhlaWdodCAhPSBtX2hlaWdodDsKLSAgICAKKwogICAgIC8vIFNldCB0aGUgdGV4dCBibG9j
aydzIGhlaWdodAogICAgIGludCB0ZXh0QmxvY2tIZWlnaHQgPSBtX2hlaWdodCAtIHBhZGRpbmdU
b3AoKSAtIHBhZGRpbmdCb3R0b20oKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCk7CiAg
ICAgbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgodGV4
dEJsb2NrSGVpZ2h0LCBGaXhlZCkpOwogICAgIGlmIChtX2lubmVyQmxvY2spCiAgICAgICAgIG1f
aW5uZXJCbG9jay0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCh0ZXh0Qmxv
Y2tIZWlnaHQsIEZpeGVkKSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICBpbnQgb2xkV2lkdGgg
PSBtX3dpZHRoOwogICAgIGNhbGNXaWR0aCgpOwogICAgIGlmIChvbGRXaWR0aCAhPSBtX3dpZHRo
KQpAQCAtNjI4LDcgKzYyNyw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmxheW91dCgpCiAg
ICAgfQogCiAgICAgLy8gU2V0IHRoZSB0ZXh0IGJsb2NrJ3Mgd2lkdGgKLSAgICBpbnQgdGV4dEJs
b2NrV2lkdGggPSBtX3dpZHRoIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpIC0gYm9y
ZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSAtIAorICAgIGludCB0ZXh0QmxvY2tXaWR0aCA9IG1f
d2lkdGggLSBwYWRkaW5nTGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSBib3JkZXJMZWZ0KCkgLSBi
b3JkZXJSaWdodCgpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lubmVyVGV4dC0+cmVu
ZGVyZXIoKS0+cGFkZGluZ0xlZnQoKSAtIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5wYWRkaW5n
UmlnaHQoKSAtIHNlYXJjaEV4dHJhc1dpZHRoOwogICAgIG1faW5uZXJUZXh0LT5yZW5kZXJlcigp
LT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgodGV4dEJsb2NrV2lkdGgsIEZpeGVkKSk7CiAgICAg
aWYgKG1faW5uZXJCbG9jaykKQEAgLTY1NiwxNSArNjU1LDE0IEBAIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2w6OmNhbGNNaW5NYXhXaWR0aCgKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
Z2V0IHRoZSBzaXplIG9mIHRoZSBzY3JvbGxiYXIgZnJvbSB0aGUgUmVuZGVyVGhlbWUgaW5zdGVh
ZCBvZiBoYXJkIGNvZGluZyBpdCBoZXJlLgogICAgICAgICAgICAgaWYgKG1faW5uZXJUZXh0LT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT5vdmVyZmxvd1koKSAhPSBPSElEREVOKQogICAgICAgICAgICAg
ICAgIHNjcm9sbGJhclNpemUgPSAxNTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZhY3RvciA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihub2RlKCkpLT5zaXplKCk7CiAgICAgICAgICAgICBpZiAoZmFjdG9yIDw9IDApCiAg
ICAgICAgICAgICAgICAgZmFjdG9yID0gMjA7CiAgICAgICAgIH0KLSAgICAgICAgbV9tYXhXaWR0
aCA9IChpbnQpY2VpbGYoY2hhcldpZHRoICogZmFjdG9yKSArIHNjcm9sbGJhclNpemU7CisgICAg
ICAgIG1fbWF4V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGNoYXJXaWR0aCAqIGZhY3Rv
cikpICsgc2Nyb2xsYmFyU2l6ZTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoc3R5bGUoKS0+bWlu
V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpID4gMCkgewog
ICAgICAgICBtX21heFdpZHRoID0gbWF4KG1fbWF4V2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgo
c3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1fbWluV2lkdGggPSBtYXgo
bV9taW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVl
KCkpKTsKQEAgLTY3MiwyMiArNjcwLDIyIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNhbGNN
aW5NYXhXaWR0aCgKICAgICAgICAgbV9taW5XaWR0aCA9IDA7CiAgICAgZWxzZQogICAgICAgICBt
X21pbldpZHRoID0gbV9tYXhXaWR0aDsKLSAgICAKKwogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0
aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVk
TGVuZ3RoKSB7CiAgICAgICAgIG1fbWF4V2lkdGggPSBtaW4obV9tYXhXaWR0aCwgY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICAgICAgbV9taW5X
aWR0aCA9IG1pbihtX21pbldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdp
ZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAotICAgIGludCB0b0FkZCA9IHBhZGRpbmdMZWZ0KCkg
KyBwYWRkaW5nUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyAKKyAgICBp
bnQgdG9BZGQgPSBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkg
KyBib3JkZXJSaWdodCgpICsKICAgICAgICAgICAgICAgICBtX2lubmVyVGV4dC0+cmVuZGVyZXIo
KS0+cGFkZGluZ0xlZnQoKSArIG1faW5uZXJUZXh0LT5yZW5kZXJlcigpLT5wYWRkaW5nUmlnaHQo
KTsKLSAgICAKKwogICAgIGlmIChtX3Jlc3VsdHNCdXR0b24pCiAgICAgICAgIHRvQWRkICs9IG1f
cmVzdWx0c0J1dHRvbi0+cmVuZGVyZXIoKS0+Ym9yZGVyTGVmdCgpICsgbV9yZXN1bHRzQnV0dG9u
LT5yZW5kZXJlcigpLT5ib3JkZXJSaWdodCgpICsKICAgICAgICAgICAgICAgICAgbV9yZXN1bHRz
QnV0dG9uLT5yZW5kZXJlcigpLT5wYWRkaW5nTGVmdCgpICsgbV9yZXN1bHRzQnV0dG9uLT5yZW5k
ZXJlcigpLT5wYWRkaW5nUmlnaHQoKTsKICAgICBpZiAobV9jYW5jZWxCdXR0b24pCiAgICAgICAg
IHRvQWRkICs9IG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpLT5ib3JkZXJMZWZ0KCkgKyBtX2Nh
bmNlbEJ1dHRvbi0+cmVuZGVyZXIoKS0+Ym9yZGVyUmlnaHQoKSArCiAgICAgICAgICAgICAgICAg
IG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpLT5wYWRkaW5nTGVmdCgpICsgbV9jYW5jZWxCdXR0
b24tPnJlbmRlcmVyKCktPnBhZGRpbmdSaWdodCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
IAorCiAgICAgbV9taW5XaWR0aCArPSB0b0FkZDsKICAgICBtX21heFdpZHRoICs9IHRvQWRkOwog
CkBAIC03ODcsMTcgKzc4NSwxOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjphZGRTZWFyY2hS
ZXN1bHQoCiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4obm9kZSgpKTsKICAgICBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA8PSAwKQog
ICAgICAgICByZXR1cm47CisKICAgICBTdHJpbmcgdiA9IGlucHV0LT52YWx1ZSgpOwogICAgIGlm
ICh2LmlzRW1wdHkoKSB8fCAhZG9jdW1lbnQoKSB8fCAhZG9jdW1lbnQoKS0+ZnJhbWUoKSB8fCBk
b2N1bWVudCgpLT5mcmFtZSgpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBzaXplID0gKGludCltX3JlY2VudFNlYXJjaGVz
LnNpemUoKTsKKyAgICBpbnQgc2l6ZSA9IHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hl
cy5zaXplKCkpOwogICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpCiAgICAg
ICAgIGlmIChtX3JlY2VudFNlYXJjaGVzW2ldID09IHYpCiAgICAgICAgICAgICBtX3JlY2VudFNl
YXJjaGVzLnJlbW92ZShpKTsKIAogICAgIG1fcmVjZW50U2VhcmNoZXMuaW5zZXJ0KDAsIHYpOwot
ICAgIHdoaWxlICgoaW50KW1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpID4gaW5wdXQtPm1heFJlc3Vs
dHMoKSkKKyAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUo
KSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKQogICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJlbW92
ZUxhc3QoKTsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGF1dG9zYXZlTmFtZSgp
OwpAQCAtODI1LDEwICs4MjQsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2hvd1BvcHVw
KCkKIAogICAgIC8vIFRyaW0gdGhlIHJlY2VudCBzZWFyY2hlcyBsaXN0IGlmIHRoZSBtYXhpbXVt
IHNpemUgaGFzIGNoYW5nZWQgc2luY2Ugd2UgbGFzdCBzYXZlZC4KICAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOwotICAg
IGlmICgoaW50KW1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpID4gaW5wdXQtPm1heFJlc3VsdHMoKSkg
eworICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKSA+IGlu
cHV0LT5tYXhSZXN1bHRzKCkpIHsKICAgICAgICAgZG8KICAgICAgICAgICAgIG1fcmVjZW50U2Vh
cmNoZXMucmVtb3ZlTGFzdCgpOwotICAgICAgICB3aGlsZSAoKGludCltX3JlY2VudFNlYXJjaGVz
LnNpemUoKSA+IGlucHV0LT5tYXhSZXN1bHRzKCkpOworICAgICAgICB3aGlsZSAoc3RhdGljX2Nh
c3Q8aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKTsK
ICAgICAgICAgbV9zZWFyY2hQb3B1cC0+c2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50
U2VhcmNoZXMpOwogICAgIH0KIApAQCAtODY4LDEwICs4NjcsMTAgQEAgU3RyaW5nIFJlbmRlclRl
eHRDb250cm9sOjppdGVtVGV4dCh1bnNpZwogewogICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0U2l6
ZSgpOwogICAgIGlmIChzaXplID09IDEpIHsKLSAgICAgICAgQVNTRVJUKGxpc3RJbmRleCA9PSAw
KTsKKyAgICAgICAgQVNTRVJUKCFsaXN0SW5kZXgpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCJO
byByZWNlbnQgc2VhcmNoZXMiKTsKICAgICB9Ci0gICAgaWYgKGxpc3RJbmRleCA9PSAwKQorICAg
IGlmICghbGlzdEluZGV4KQogICAgICAgICByZXR1cm4gU3RyaW5nKCJSZWNlbnQgU2VhcmNoZXMi
KTsKICAgICBpZiAoaXRlbUlzU2VwYXJhdG9yKGxpc3RJbmRleCkpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKQEAgLTg4Miw3ICs4ODEsNyBAQCBTdHJpbmcgUmVuZGVyVGV4dENvbnRyb2w6Oml0
ZW1UZXh0KHVuc2lnCiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2w6Oml0ZW1Jc0VuYWJsZWQodW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdAogewotICAgICBpZiAobGlzdEluZGV4ID09IDAgfHwgaXRl
bUlzU2VwYXJhdG9yKGxpc3RJbmRleCkpCisgICAgIGlmICghbGlzdEluZGV4IHx8IGl0ZW1Jc1Nl
cGFyYXRvcihsaXN0SW5kZXgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC05MTksNyArOTE4LDcgQEAgaW50IFJlbmRlclRleHRDb250cm9sOjpjbGllbnRQ
YWRkaW5nUmlnaAogdW5zaWduZWQgUmVuZGVyVGV4dENvbnRyb2w6Omxpc3RTaXplKCkgY29uc3QK
IHsKICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcmVjZW50IHNlYXJjaGVzLCB0aGVuIG91ciBtZW51
IHdpbGwgaGF2ZSAxICJObyByZWNlbnQgc2VhcmNoZXMiIGl0ZW0uCi0gICAgaWYgKG1fcmVjZW50
U2VhcmNoZXMuc2l6ZSgpID09IDApCisgICAgaWYgKCFtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkK
ICAgICAgICAgcmV0dXJuIDE7CiAgICAgLy8gT3RoZXJ3aXNlLCBsZWF2ZSByb29tIGluIHRoZSBt
ZW51IGZvciBhIGhlYWRlciwgYSBzZXBhcmF0b3IsIGFuZCB0aGUgIkNsZWFyIHJlY2VudCBzZWFy
Y2hlcyIgaXRlbS4KICAgICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkgKyAzOwpAQCAt
OTUzLDEwICs5NTIsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0VGV4dEZyb21JdGVt
KAogCiBib29sIFJlbmRlclRleHRDb250cm9sOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCiB7
Ci0gICAgUmVuZGVyTGF5ZXIgKmwgPSBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsK
LSAgICBpZiAobCAmJiBsLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
cikpCisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPmxh
eWVyKCk7CisgICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgbXVsdGlwbGllcikpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBSZW5k
ZXJPYmplY3Q6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKIH0K
IAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5oCShyZXZpc2lvbiAxODI2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4LDggKzE4LDggQEAKICAqCiAgKi8K
IAotI2lmbmRlZiBSZW5kZXJUZXh0RmllbGRfSAotI2RlZmluZSBSZW5kZXJUZXh0RmllbGRfSAor
I2lmbmRlZiBSZW5kZXJUZXh0Q29udHJvbF9oCisjZGVmaW5lIFJlbmRlclRleHRDb250cm9sX2gK
IAogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgi
CkBAIC0zNywxNCArMzcsMTUgQEAgcHVibGljOgogICAgIFJlbmRlclRleHRDb250cm9sKE5vZGUq
LCBib29sIG11bHRpTGluZSk7CiAgICAgdmlydHVhbCB+UmVuZGVyVGV4dENvbnRyb2woKTsKIAor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5k
ZXJUZXh0RmllbGQiOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgY2FsY0hlaWdodCgpOwogICAgIHZp
cnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJl
bmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyVGV4dEZpZWxkIjsgfQotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVMZWZ0b3ZlckFub255bW91c0JveGVzKCkge30KKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCb3hlcygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRTdHlsZShSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVu
dCgpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3NpdGlvbiggYm9vbCwgYm9vbCAp
IGNvbnN0OworICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGlu
ZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBp
bnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwogICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CkBAIC01MywxMyArNTQsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RWRpdGVkKGJvb2wgaXNF
ZGl0ZWQpIHsgbV9kaXJ0eSA9IGlzRWRpdGVkOyB9OwogICAgIGJvb2wgaXNUZXh0RmllbGQoKSBj
b25zdCB7IHJldHVybiAhbV9tdWx0aUxpbmU7IH0KICAgICBib29sIGlzVGV4dEFyZWEoKSBjb25z
dCB7IHJldHVybiBtX211bHRpTGluZTsgfQotICAgIAorCiAgICAgaW50IHNlbGVjdGlvblN0YXJ0
KCk7CiAgICAgaW50IHNlbGVjdGlvbkVuZCgpOwogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQo
aW50KTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChpbnQpOyAgICAKKyAgICB2b2lkIHNldFNl
bGVjdGlvbkVuZChpbnQpOwogICAgIHZvaWQgc2VsZWN0KCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rp
b25SYW5nZShpbnQsIGludCk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQs
IGludCBlbmQpOwogCiAgICAgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogICAgIFN0cmluZyB0
ZXh0KCk7CkBAIC03NCwxOCArNzUsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHNjcm9s
bEhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1YWwgYm9vbCBzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLjApOworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEuMGYp
OwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCBpbmRl
eCk7CiAgICAgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpOwogCiAgICAgdm9pZCBhZGRTZWFyY2hSZXN1bHQoKTsKICAgICB2b2lkIG9uU2VhcmNoKCkg
Y29uc3Q7Ci0gICAgICAgIAorCiAgICAgYm9vbCBwb3B1cElzVmlzaWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VhcmNoUG9wdXBJc1Zpc2libGU7IH0KICAgICB2b2lkIHNob3dQb3B1cCgpOwogICAg
IHZvaWQgaGlkZVBvcHVwKCk7Ci0gICAgCisKICAgICAvLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9k
cwogICAgIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlT25T
ZWFyY2ggPSB0cnVlKTsKICAgICBTdHJpbmcgaXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdDsKQEAgLTEwMyw5ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0RnJvbUl0
ZW0odW5zaWduZWQgbGlzdEluZGV4KTsKICAgICBib29sIHNob3VsZFBvcE92ZXIoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgdmFsdWVTaG91bGRDaGFuZ2VPbkhvdFRyYWNrKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICBwcml2YXRlOgotICAgCisKK3ByaXZh
dGU6CiAgICAgUmVuZGVyU3R5bGUqIGNyZWF0ZUlubmVyQmxvY2tTdHlsZShSZW5kZXJTdHlsZSog
c3RhcnRTdHlsZSk7CiAgICAgUmVuZGVyU3R5bGUqIGNyZWF0ZUlubmVyVGV4dFN0eWxlKFJlbmRl
clN0eWxlKiBzdGFydFN0eWxlKTsKICAgICBSZW5kZXJTdHlsZSogY3JlYXRlQ2FuY2VsQnV0dG9u
U3R5bGUoUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpOwpAQCAtMTE2LDcgKzExNiw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNyZWF0ZVN1YnRyZWVJZk5lZWRlZCgpOwogICAgIHZvaWQgdXBkYXRlQ2Fu
Y2VsQnV0dG9uVmlzaWJpbGl0eShSZW5kZXJTdHlsZSopOwogICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYXV0b3NhdmVOYW1lKCkgY29uc3Q7Ci0gICAgCisKICAgICBSZWZQdHI8SFRNTFRleHRGaWVs
ZElubmVyRWxlbWVudD4gbV9pbm5lckJsb2NrOwogICAgIFJlZlB0cjxIVE1MVGV4dEZpZWxkSW5u
ZXJUZXh0RWxlbWVudD4gbV9pbm5lclRleHQ7CiAgICAgUmVmUHRyPEhUTUxTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25FbGVtZW50PiBtX3Jlc3VsdHNCdXR0b247CkBAIC0xMjUsMTIgKzEyNSwxMiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBtX2RpcnR5OwogICAgIGJvb2wgbV9tdWx0aUxpbmU7CiAgICAg
Ym9vbCBtX3BsYWNlaG9sZGVyVmlzaWJsZTsKLSAgICAKKwogICAgIFJlZlB0cjxTZWFyY2hQb3B1
cE1lbnU+IG1fc2VhcmNoUG9wdXA7CiAgICAgYm9vbCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlOwog
ICAgIG11dGFibGUgVmVjdG9yPFN0cmluZz4gbV9yZWNlbnRTZWFyY2hlczsKIH07CiAKLX0KK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyVGV4dENvbnRy
b2xfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCShyZXZp
c2lvbiAxODI2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDMyICsyNSwyOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlJlbmRlclRleHRGcmFnbWVudC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJUZXh0RnJhZ21lbnQ6OlJlbmRlclRl
eHRGcmFnbWVudChOb2RlKiBub2RlLCBTdHJpbmdJbXBsKiBzdHIsIGludCBzdGFydE9mZnNldCwg
aW50IGxlbmd0aCwgUmVuZGVyT2JqZWN0KiBmaXJzdExldHRlcikKLSAgICA6IFJlbmRlclRleHQo
bm9kZSwgc3RyID8gc3RyLT5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGxlbmd0aCkgOiAwKSwgbV9z
dGFydChzdGFydE9mZnNldCksIG1fZW5kKGxlbmd0aCksIG1fZmlyc3RMZXR0ZXIoZmlyc3RMZXR0
ZXIpCisgICAgOiBSZW5kZXJUZXh0KG5vZGUsIHN0ciA/IHN0ci0+c3Vic3RyaW5nKHN0YXJ0T2Zm
c2V0LCBsZW5ndGgpIDogMCkKKyAgICAsIG1fc3RhcnQoc3RhcnRPZmZzZXQpCisgICAgLCBtX2Vu
ZChsZW5ndGgpCisgICAgLCBtX2ZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyKQogewogfQogCiBSZW5k
ZXJUZXh0RnJhZ21lbnQ6OlJlbmRlclRleHRGcmFnbWVudChOb2RlKiBub2RlLCBTdHJpbmdJbXBs
KiBzdHIpCi0gICAgOiBSZW5kZXJUZXh0KG5vZGUsIHN0ciksIG1fc3RhcnQoMCksIG1fZW5kKHN0
ciA/IHN0ci0+bGVuZ3RoKCkgOiAwKSwgbV9nZW5lcmF0ZWRDb250ZW50U3RyKHN0ciksIG1fZmly
c3RMZXR0ZXIoMCkKLXsKLX0KLQotYm9vbCBSZW5kZXJUZXh0RnJhZ21lbnQ6OmlzVGV4dEZyYWdt
ZW50KCkgY29uc3QKKyAgICA6IFJlbmRlclRleHQobm9kZSwgc3RyKQorICAgICwgbV9zdGFydCgw
KQorICAgICwgbV9lbmQoc3RyID8gc3RyLT5sZW5ndGgoKSA6IDApCisgICAgLCBtX2dlbmVyYXRl
ZENvbnRlbnRTdHIoc3RyKQorICAgICwgbV9maXJzdExldHRlcigwKQogewotICAgIHJldHVybiB0
cnVlOwogfQogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclRleHRGcmFnbWVudDo6b3Jp
Z2luYWxTdHJpbmcoKSBjb25zdAogewotICAgIFN0cmluZ0ltcGwqIHJlc3VsdCA9IDA7Ci0gICAg
aWYgKGVsZW1lbnQoKSkKLSAgICAgICAgcmVzdWx0ID0gZWxlbWVudCgpLT5zdHJpbmcoKTsKLSAg
ICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGNvbnRlbnRTdHJpbmcoKTsKKyAgICBTdHJpbmdJbXBs
KiByZXN1bHQgPSAoZWxlbWVudCgpID8gZWxlbWVudCgpLT5zdHJpbmcoKSA6IGNvbnRlbnRTdHJp
bmcoKSk7CiAgICAgaWYgKHJlc3VsdCAmJiAoc3RhcnQoKSA+IDAgfHwgc3RhcnQoKSA8IHJlc3Vs
dC0+bGVuZ3RoKCkpKQogICAgICAgICByZXN1bHQgPSByZXN1bHQtPnN1YnN0cmluZyhzdGFydCgp
LCBlbmQoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTYyLDQgKzU4LDUgQEAgdm9pZCBSZW5k
ZXJUZXh0RnJhZ21lbnQ6OmRlc3Ryb3koKQogICAgICAgICBmaXJzdExldHRlcigpLT5kZXN0cm95
KCk7CiAgICAgUmVuZGVyVGV4dDo6ZGVzdHJveSgpOwogfQotfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaAkocmV2aXNp
b24gMTgyNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogICoKICAqLwogCi0jaWZuZGVmIEtIVE1MX1Jl
bmRlclRleHRGcmFnbWVudF9ICi0jZGVmaW5lIEtIVE1MX1JlbmRlclRleHRGcmFnbWVudF9ICisj
aWZuZGVmIFJlbmRlclRleHRGcmFnbWVudF9oCisjZGVmaW5lIFJlbmRlclRleHRGcmFnbWVudF9o
CiAKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAKQEAgLTMzLDIzICszMywyMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAvLyBmaXJzdCBsZXR0ZXIgYW5kIHRoYXQgbXVzdCB0aGVyZWZvcmUgaGF2
ZSBkaWZmZXJlbnQgc3R5bGVzIChhbmQgcG9zaXRpb25zIGluIHRoZSByZW5kZXIgdHJlZSkuCiAv
LyBXZSBjYWNoZSBvZmZzZXRzIHNvIHRoYXQgdGV4dCB0cmFuc2Zvcm1hdGlvbnMgY2FuIGJlIGFw
cGxpZWQgaW4gc3VjaCBhIHdheSB0aGF0IHdlIGNhbiByZWNvdmVyCiAvLyB0aGUgb3JpZ2luYWwg
dW5hbHRlcmVkIHN0cmluZyBmcm9tIG91ciBjb3JyZXNwb25kaW5nIERPTSBub2RlLgotY2xhc3Mg
UmVuZGVyVGV4dEZyYWdtZW50IDogcHVibGljIFJlbmRlclRleHQKLXsKK2NsYXNzIFJlbmRlclRl
eHRGcmFnbWVudCA6IHB1YmxpYyBSZW5kZXJUZXh0IHsKIHB1YmxpYzoKICAgICBSZW5kZXJUZXh0
RnJhZ21lbnQoTm9kZSosIFN0cmluZ0ltcGwqLCBpbnQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgs
IFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXIgPSAwKTsKICAgICBSZW5kZXJUZXh0RnJhZ21lbnQo
Tm9kZSosIFN0cmluZ0ltcGwqKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RnJhZ21l
bnQoKSBjb25zdDsKLSAgICAKKworICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGcmFnbWVudCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKICAg
ICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KICAgICB1bnNpZ25l
ZCBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQogICAgIFJlbmRlck9iamVjdCogZmlyc3RM
ZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0TGV0dGVyOyB9Ci0gICAgCisKICAgICBTdHJp
bmdJbXBsKiBjb250ZW50U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9nZW5lcmF0ZWRDb250ZW50
U3RyLmdldCgpOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFs
U3RyaW5nKCkgY29uc3Q7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zdGFydDsK
ICAgICB1bnNpZ25lZCBtX2VuZDsKQEAgLTU3LDYgKzU2LDYgQEAgcHJpdmF0ZToKICAgICBSZW5k
ZXJPYmplY3QqIG1fZmlyc3RMZXR0ZXI7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlclRleHRGcmFnbWVudF9oCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAxODI2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTkgKzM0LDE4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotdm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZSwgCit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBVQUhhc0FwcGVhcmFuY2UsIGNv
bnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgQmFja2dyb3VuZExheWVyJiBiYWNrZ3JvdW5k
LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogewotCiAgICAgLy8gRm9yY2UgaW5saW5l
IGFuZCB0YWJsZSBkaXNwbGF5IHN0eWxlcyB0byBiZSBpbmxpbmUtYmxvY2sgKGV4Y2VwdCBmb3Ig
dGFibGUtIHdoaWNoIGlzIGJsb2NrKQotICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IElOTElO
RSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9UQUJMRSB8fCBzdHlsZS0+ZGlzcGxheSgp
ID09IFRBQkxFX1JPV19HUk9VUCB8fCAKKyAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJ
TkUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVfVEFCTEUgfHwgc3R5bGUtPmRpc3BsYXko
KSA9PSBUQUJMRV9ST1dfR1JPVVAgfHwKICAgICAgICAgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJM
RV9IRUFERVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9GT09URVJfR1JPVVAg
fHwKLSAgICAgICAgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cgfHwgc3R5bGUtPmRpc3Bs
YXkoKSA9PSBUQUJMRV9DT0xVTU5fR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9D
T0xVTU4gfHwgCisgICAgICAgIHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XIHx8IHN0eWxl
LT5kaXNwbGF5KCkgPT0gVEFCTEVfQ09MVU1OX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0g
VEFCTEVfQ09MVU1OIHx8CiAgICAgICAgIHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfQ0VMTCB8
fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0NBUFRJT04pCiAgICAgICAgIHN0eWxlLT5zZXRE
aXNwbGF5KElOTElORV9CTE9DSyk7CiAgICAgZWxzZSBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBD
T01QQUNUIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gUlVOX0lOIHx8IHN0eWxlLT5kaXNwbGF5KCkg
PT0gTElTVF9JVEVNIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEUpCiAgICAgICAgIHN0eWxl
LT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICAKKwogICAgIGlmIChVQUhhc0FwcGVhcmFuY2UgJiYg
dGhlbWUoKS0+aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tn
cm91bmRDb2xvcikpIHsKICAgICAgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxp
c3RBcHBlYXJhbmNlKQogICAgICAgICAgICAgc3R5bGUtPnNldEFwcGVhcmFuY2UoTWVudWxpc3RC
dXR0b25BcHBlYXJhbmNlKTsKQEAgLTg1LDcgKzg0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0U3R5bGUoQ1NTU3R5bGVTZQogICAgICAgICBjYXNlIFNlYXJjaEZpZWxkRGVjb3JhdGlvbkFw
cGVhcmFuY2U6CiAgICAgICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9u
U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKICAgICAgICAgY2FzZSBTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uQXBwZWFyYW5jZToKLSAgICAgICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsgICAgICAgIAor
ICAgICAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHls
ZShzZWxlY3Rvciwgc3R5bGUsIGUpOwogICAgICAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbkFwcGVhcmFuY2U6CiAgICAgICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKICAgICAgICAgZGVmYXVsdDoKQEAg
LTIzNywxOCArMjM2LDE4IEBAIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGkKICAgICAvLyBVc2UgYSBibHVlIGNvbG9yIGJ5IGRlZmF1bHQgaWYgdGhlIHBsYXRmb3JtIHRo
ZW1lIGRvZXNuJ3QgZGVmaW5lIGFueXRoaW5nLgogICAgIHJldHVybiBDb2xvcigwLCAwLCAyNTUp
OwogfQotICAgIAorCiBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7CiAgICAgLy8gVXNlIGEgZ3JleSBjb2xvciBieSBk
ZWZhdWx0IGlmIHRoZSBwbGF0Zm9ybSB0aGVtZSBkb2Vzbid0IGRlZmluZSBhbnl0aGluZy4KICAg
ICByZXR1cm4gQ29sb3IoMTI4LCAxMjgsIDEyOCk7CiB9Ci0gICAKKwogQ29sb3IgUmVuZGVyVGhl
bWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gQ29sb3IoKTsKIH0KLSAgICAKKwogQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3Jt
SW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBD
b2xvcigpOwpAQCAtMjk4LDE4ICsyOTcsMTcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNDb250cm9s
U3R5bGVkKGNvbnN0IAogICAgICAgICBjYXNlIExpc3Rib3hBcHBlYXJhbmNlOgogICAgICAgICBj
YXNlIE1lbnVsaXN0QXBwZWFyYW5jZToKICAgICAgICAgLy8gRklYTUU6IFVuY29tbWVudCB0aGlz
IHdoZW4gbWFraW5nIHNlYXJjaCBmaWVsZHMgc3R5bGUtYWJsZS4KLSAgICAgICAgLy8gY2FzZSBT
ZWFyY2hGaWVsZEFwcGVhcmFuY2U6IAorICAgICAgICAvLyBjYXNlIFNlYXJjaEZpZWxkQXBwZWFy
YW5jZToKICAgICAgICAgY2FzZSBUZXh0RmllbGRBcHBlYXJhbmNlOgotICAgICAgICBjYXNlIFRl
eHRBcmVhQXBwZWFyYW5jZTogeworICAgICAgICBjYXNlIFRleHRBcmVhQXBwZWFyYW5jZToKICAg
ICAgICAgICAgIC8vIFRlc3QgdGhlIHN0eWxlIHRvIHNlZSBpZiB0aGUgVUEgYm9yZGVyIGFuZCBi
YWNrZ3JvdW5kIG1hdGNoLgogICAgICAgICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0g
Ym9yZGVyIHx8CiAgICAgICAgICAgICAgICAgICAgICpzdHlsZS0+YmFja2dyb3VuZExheWVycygp
ICE9IGJhY2tncm91bmQgfHwKICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJhY2tncm91bmRD
b2xvcigpICE9IGJhY2tncm91bmRDb2xvcik7Ci0gICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKQEAgLTMyMywxMSArMzIxLDExIEBAIGJvb2wgUmVuZGVyVGhlbWU6OnN0YXRlQ2hh
bmdlZChSZW5kZXJPYmoKICAgICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhl
IGNvbnRyb2xzIGRvbnQgcmVzcG9uZCB0byBjaGFuZ2VzIGluIDpob3ZlciBzdGF0ZQogICAgIGlm
IChzdGF0ZSA9PSBIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKG8tPnN0eWxlKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgLy8gQXNzdW1lIHByZXNzZWQgc3Rh
dGUgaXMgb25seSByZXNwb25kZWQgdG8gaWYgdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4KICAgICBp
ZiAoc3RhdGUgPT0gUHJlc3NlZFN0YXRlICYmICFpc0VuYWJsZWQobykpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKwogICAgIC8vIFJlcGFpbnQgdGhlIGNvbnRyb2wuCiAgICAgby0+cmVw
YWludCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzg4LDEwICszODYsMTAgQEAgdm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0Q2hlY2tib3hTdHlsZShDUwogICAgIC8vIHdpZHRoL2hlaWdodCAtIGhv
bm9yZWQgKFdpbklFIGFjdHVhbGx5IHNjYWxlcyBpdHMgY29udHJvbCBmb3Igc21hbGwgd2lkdGhz
LCBidXQgbGV0cyBpdCBvdmVyZmxvdyBmb3Igc21hbGwgaGVpZ2h0cy4pCiAgICAgLy8gZm9udC1z
aXplIC0gbm90IGhvbm9yZWQgKGNvbnRyb2wgaGFzIG5vIHRleHQpLCBidXQgd2UgdXNlIGl0IHRv
IGRlY2lkZSB3aGljaCBjb250cm9sIHNpemUgdG8gdXNlLgogICAgIHNldENoZWNrYm94U2l6ZShz
dHlsZSk7Ci0gICAgCisKICAgICAvLyBwYWRkaW5nIC0gbm90IGhvbm9yZWQgYnkgV2luSUUsIG5l
ZWRzIHRvIGJlIHJlbW92ZWQuCiAgICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOwotICAgIAorCiAg
ICAgLy8gYm9yZGVyIC0gaG9ub3JlZCBieSBXaW5JRSwgYnV0IGxvb2tzIHRlcnJpYmxlIChqdXN0
IHBhaW50cyBpbiB0aGUgY29udHJvbCBib3ggYW5kIHR1cm5zIG9mZiB0aGUgV2luZG93cyBYUCB0
aGVtZSkKICAgICAvLyBmb3Igbm93LCB3ZSB3aWxsIG5vdCBob25vciBpdC4KICAgICBzdHlsZS0+
cmVzZXRCb3JkZXIoKTsKQEAgLTQwMywxMCArNDAxLDEwIEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdFJhZGlvU3R5bGUoQ1NTU3QKICAgICAvLyB3aWR0aC9oZWlnaHQgLSBob25vcmVkIChXaW5J
RSBhY3R1YWxseSBzY2FsZXMgaXRzIGNvbnRyb2wgZm9yIHNtYWxsIHdpZHRocywgYnV0IGxldHMg
aXQgb3ZlcmZsb3cgZm9yIHNtYWxsIGhlaWdodHMuKQogICAgIC8vIGZvbnQtc2l6ZSAtIG5vdCBo
b25vcmVkIChjb250cm9sIGhhcyBubyB0ZXh0KSwgYnV0IHdlIHVzZSBpdCB0byBkZWNpZGUgd2hp
Y2ggY29udHJvbCBzaXplIHRvIHVzZS4KICAgICBzZXRSYWRpb1NpemUoc3R5bGUpOwotICAgIAor
CiAgICAgLy8gcGFkZGluZyAtIG5vdCBob25vcmVkIGJ5IFdpbklFLCBuZWVkcyB0byBiZSByZW1v
dmVkLgogICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKLSAgICAKKwogICAgIC8vIGJvcmRlciAt
IGhvbm9yZWQgYnkgV2luSUUsIGJ1dCBsb29rcyB0ZXJyaWJsZSAoanVzdCBwYWludHMgaW4gdGhl
IGNvbnRyb2wgYm94IGFuZCB0dXJucyBvZmYgdGhlIFdpbmRvd3MgWFAgdGhlbWUpCiAgICAgLy8g
Zm9yIG5vdywgd2Ugd2lsbCBub3QgaG9ub3IgaXQuCiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7
CkBAIC00NjcsNCArNDY1LDQgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bAogewogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmgJKHJldmlzaW9uIDE4MjYwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsMTQgQEAgY2xhc3MgRWxlbWVudDsK
IGNsYXNzIFBvcHVwTWVudTsKIGNsYXNzIFJlbmRlck1lbnVMaXN0OwogCi1lbnVtIENvbnRyb2xT
dGF0ZSB7IEhvdmVyU3RhdGUsIFByZXNzZWRTdGF0ZSwgRm9jdXNTdGF0ZSwgRW5hYmxlZFN0YXRl
LCBDaGVja2VkU3RhdGUsIFJlYWRPbmx5U3RhdGUgfTsKK2VudW0gQ29udHJvbFN0YXRlIHsKKyAg
ICBIb3ZlclN0YXRlLAorICAgIFByZXNzZWRTdGF0ZSwKKyAgICBGb2N1c1N0YXRlLAorICAgIEVu
YWJsZWRTdGF0ZSwKKyAgICBDaGVja2VkU3RhdGUsCisgICAgUmVhZE9ubHlTdGF0ZQorfTsKIAog
Y2xhc3MgUmVuZGVyVGhlbWUgewogcHVibGljOgpAQCAtNDMsNyArNTAsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gbWV0cmljcyBhbmQgZGVmYXVsdHMgZ2l2ZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHls
ZS4gIFRoaXMgaW5jbHVkZXMgc29waGlzdGljYXRlZCBvcGVyYXRpb25zIGxpa2UKICAgICAvLyBz
ZWxlY3Rpb24gb2YgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9udCwgdGhlIGRpc2FibGlu
ZyBvZiBhcHBlYXJhbmNlIHdoZW4gY2VydGFpbiBvdGhlciBwcm9wZXJ0aWVzIGxpa2UKICAgICAv
LyAiYm9yZGVyIiBhcmUgc2V0LCBvciBpZiB0aGUgYXBwZWFyYW5jZSBpcyBub3Qgc3VwcG9ydGVk
IGJ5IHRoZSB0aGVtZS4KLSAgICB2b2lkIGFkanVzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqLCAgYm9vbCBVQUhhc0FwcGVhcmFuY2UsIAorICAgIHZvaWQg
YWRqdXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCosICBi
b29sIFVBSGFzQXBwZWFyYW5jZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJvcmRlckRh
dGEmLCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
KTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBwYWludCB0aGUgd2lkZ2V0IGFz
IGEgYmFja2dyb3VuZCBvZiB0aGUgUmVuZGVyT2JqZWN0LiAgQSB3aWRnZXQncyBmb3JlZ3JvdW5k
LCBlLmcuLCB0aGUKQEAgLTEyOSwxMSArMTM2LDExIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVy
U3R5bGUqKSBjb25zdCB7IH0KLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmly
dHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQotICAgIAorCiAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJl
bmRlclN0eWxlKikgY29uc3QgeyB9CkBAIC0xNTUsMTkgKzE2MiwxOSBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIAorCiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVj
b3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAK
KwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KIH07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHJldmlzaW9uIDE4
MjYwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjAsOCArMjAsOCBAQAogICoKICAqLwogCi0jaWZuZGVmIFJFTkRFUl9USEVNRV9NQUNf
SAotI2RlZmluZSBSRU5ERVJfVEhFTUVfTUFDX0gKKyNpZm5kZWYgUmVuZGVyVGhlbWVNYWNfaAor
I2RlZmluZSBSZW5kZXJUaGVtZU1hY19oCiAKICNpbXBvcnQgIlJlbmRlclRoZW1lLmgiCiAKQEAg
LTQ3LDM0ICs0NywzNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWlu
dFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCBib29s
IGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRh
dGEmIGJvcmRlciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYWNr
Z3JvdW5kTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNv
bnN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICB2aXJ0dWFsIGJvb2wg
aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYWNrZ3JvdW5kTGF5ZXImLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCBw
YWludFJlc2l6ZUNvbnRyb2woR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCiAg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0OwogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpIGNvbnN0OwogICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgIAorCiAgICAgLy8gU3lzdGVtIGZvbnRz
LgogICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlv
biYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0OwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1i
U2l6ZShSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIC8vIE1ldGhvZHMg
Zm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2Jv
eChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikg
Y29uc3Q7Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgCisKICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0OwotICAgIAorCiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKQEAgLTg2LDM1ICs4NiwzNSBAQCBw
cm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgCisKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlk
ZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICAKKwogcHJpdmF0ZToKICAgICBJbnRSZWN0IGlu
ZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgaW50KiBtYXJn
aW5zKSBjb25zdDsKIAogICAgIC8vIEdldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUg
Zm9udC4gIFVzZWQgYnkgc29tZSBvZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCiAgICAg
TlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKICAg
ICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSopIGNv
bnN0OwotICAgIHZvaWQgc2V0Q29udHJvbFNpemUoTlNDZWxsKiwgY29uc3QgSW50U2l6ZSogc2l6
ZXMsIGNvbnN0IEludFNpemUmIG1pblNpemUpOwotICAgIHZvaWQgc2V0U2l6ZUZyb21Gb250KFJl
bmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgIEludFNpemUgc2l6
ZUZvckZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7Ci0gICAg
SW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNp
emVzKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRyb2xTaXplKE5TQ2VsbCosIGNvbnN0IEludFNp
emUqLCBjb25zdCBJbnRTaXplJiBtaW5TaXplKTsKKyAgICB2b2lkIHNldFNpemVGcm9tRm9udChS
ZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JG
b250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSopIGNvbnN0OworICAgIEludFNpemUgc2l6
ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKikgY29uc3Q7CiAgICAg
dm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUo
TlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7CkBAIC0xMzUsNyArMTM1LDcgQEAgcHJpdmF0
ZToKICAgICBjb25zdCBJbnRTaXplKiBidXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IGlu
dCogYnV0dG9uTWFyZ2lucygpIGNvbnN0OwogICAgIHZvaWQgc2V0QnV0dG9uQ2VsbFN0YXRlKGNv
bnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKLSAgICAKKwogICAgIHZvaWQgc2V0
UG9wdXBQYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6ZSkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmpl
Y3QqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50U2l6ZSogcG9wdXBCdXR0b25TaXpl
cygpIGNvbnN0OwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgSW50U2l6
ZSogY2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiByZXN1bHRz
QnV0dG9uU2l6ZXMoKSBjb25zdDsKICAgICB2b2lkIHNldFNlYXJjaENlbGxTdGF0ZShSZW5kZXJP
YmplY3QqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgTlNCdXR0b25D
ZWxsKiBjaGVja2JveDsKICAgICBOU0J1dHRvbkNlbGwqIHJhZGlvOwpAQCAtMTU3LDE1ICsxNTcs
MTUgQEAgcHJpdmF0ZToKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoOwogICAgIE5TQnV0
dG9uQ2VsbCogc2VhcmNoQnV0dG9uOwogICAgIE5TTWVudSogc2VhcmNoTWVudTsKLSAgICAKKwog
ICAgIE5TU2xpZGVyQ2VsbCogc2xpZGVyVGh1bWJIb3Jpem9udGFsQ2VsbDsKICAgICBOU1NsaWRl
ckNlbGwqIHNsaWRlclRodW1iVmVydGljYWxDZWxsOwogICAgIGJvb2wgc2xpZGVySG9yaXpvbnRh
bENlbGxJc1ByZXNzZWQ7CiAgICAgYm9vbCBzbGlkZXJWZXJ0aWNhbENlbGxJc1ByZXNzZWQ7Ci0g
ICAgCisKICAgICBJbWFnZSogcmVzaXplQ29ybmVySW1hZ2U7CiB9OwogCi19Cit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlclRoZW1lTWFjX2gKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxODI2MCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsy
Miw2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlJlbmRlclRoZW1lTWFjLmgiCiAK
LSNpbXBvcnQgImNzc3N0eWxlc2VsZWN0b3IuaCIKICNpbXBvcnQgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJFbGVtZW50LmgiCkBAIC0zNSw2ICsz
NCw3IEBACiAjaW1wb3J0ICJSZW5kZXJTbGlkZXIuaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIK
ICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgImNzc3N0eWxlc2Vs
ZWN0b3IuaCIKIAogI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KIApAQCAtNTUsNyArNTUsNyBAQCBl
bnVtIHsKICAgICBib3R0b21QYWRkaW5nLAogICAgIGxlZnRQYWRkaW5nCiB9OwotICAgIAorCiBS
ZW5kZXJUaGVtZSogdGhlbWUoKQogewogICAgIHN0YXRpYyBSZW5kZXJUaGVtZU1hYyBtYWNUaGVt
ZTsKQEAgLTczLDcgKzczLDcgQEAgUmVuZGVyVGhlbWVNYWM6OlJlbmRlclRoZW1lTWFjKCkKICAg
ICAsIHNsaWRlclRodW1iSG9yaXpvbnRhbENlbGwobmlsKQogICAgICwgc2xpZGVyVGh1bWJWZXJ0
aWNhbENlbGwobmlsKQogICAgICwgc2xpZGVySG9yaXpvbnRhbENlbGxJc1ByZXNzZWQoZmFsc2Up
Ci0gICAgLCBzbGlkZXJWZXJ0aWNhbENlbGxJc1ByZXNzZWQoZmFsc2UpICAgIAorICAgICwgc2xp
ZGVyVmVydGljYWxDZWxsSXNQcmVzc2VkKGZhbHNlKQogICAgICwgcmVzaXplQ29ybmVySW1hZ2Uo
MCkKIHsKIH0KQEAgLTgxLDE5ICs4MSwxOSBAQCBSZW5kZXJUaGVtZU1hYzo6UmVuZGVyVGhlbWVN
YWMoKQogQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkgY29uc3QKIHsKICAgICBOU0NvbG9yKiBjb2xvciA9IFtbTlNDb2xvciBzZWxl
Y3RlZFRleHRCYWNrZ3JvdW5kQ29sb3JdIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0Rldmlj
ZVJHQkNvbG9yU3BhY2VdOwotICAgIHJldHVybiBDb2xvcigoaW50KSgyNTUgKiBbY29sb3IgcmVk
Q29tcG9uZW50XSksIChpbnQpKDI1NSAqIFtjb2xvciBncmVlbkNvbXBvbmVudF0pLCAoaW50KSgy
NTUgKiBbY29sb3IgYmx1ZUNvbXBvbmVudF0pKTsKKyAgICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nh
c3Q8aW50PigyNTUuMCAqIFtjb2xvciByZWRDb21wb25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50Pigy
NTUuMCAqIFtjb2xvciBncmVlbkNvbXBvbmVudF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICog
W2NvbG9yIGJsdWVDb21wb25lbnRdKSk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0
Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICBOU0Nv
bG9yKiBjb2xvciA9IFtbTlNDb2xvciBzZWNvbmRhcnlTZWxlY3RlZENvbnRyb2xDb2xvcl0gY29s
b3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07Ci0gICAgcmV0dXJu
IENvbG9yKChpbnQpKDI1NSAqIFtjb2xvciByZWRDb21wb25lbnRdKSwgKGludCkoMjU1ICogW2Nv
bG9yIGdyZWVuQ29tcG9uZW50XSksIChpbnQpKDI1NSAqIFtjb2xvciBibHVlQ29tcG9uZW50XSkp
OworICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIHJlZENv
bXBvbmVudF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIGdyZWVuQ29tcG9uZW50
XSksIHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3IgYmx1ZUNvbXBvbmVudF0pKTsKIH0K
IAogQ29sb3IgUmVuZGVyVGhlbWVNYWM6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdAogewogICAgIE5TQ29sb3IqIGNvbG9yID0gW1tOU0NvbG9yIGFsdGVybmF0
ZVNlbGVjdGVkQ29udHJvbENvbG9yXSBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VS
R0JDb2xvclNwYWNlXTsKLSAgICByZXR1cm4gQ29sb3IoKGludCkoMjU1ICogW2NvbG9yIHJlZENv
bXBvbmVudF0pLCAoaW50KSgyNTUgKiBbY29sb3IgZ3JlZW5Db21wb25lbnRdKSwgKGludCkoMjU1
ICogW2NvbG9yIGJsdWVDb21wb25lbnRdKSk7CisgICAgcmV0dXJuIENvbG9yKHN0YXRpY19jYXN0
PGludD4oMjU1LjAgKiBbY29sb3IgcmVkQ29tcG9uZW50XSksIHN0YXRpY19jYXN0PGludD4oMjU1
LjAgKiBbY29sb3IgZ3JlZW5Db21wb25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtj
b2xvciBibHVlQ29tcG9uZW50XSkpOwogfQogCiB2b2lkIFJlbmRlclRoZW1lTWFjOjpzeXN0ZW1G
b250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdApA
QCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUZvbnQoaW50IHBy
b3AKICAgICBzdGF0aWMgRm9udERlc2NyaXB0aW9uIG1pbmlDb250cm9sRm9udDsKICAgICBzdGF0
aWMgRm9udERlc2NyaXB0aW9uIHNtYWxsQ29udHJvbEZvbnQ7CiAgICAgc3RhdGljIEZvbnREZXNj
cmlwdGlvbiBjb250cm9sRm9udDsKLSAgICAKKwogICAgIEZvbnREZXNjcmlwdGlvbiogY2FjaGVk
RGVzYzsKICAgICBOU0ZvbnQqIGZvbnQgPSBuaWw7CiAgICAgc3dpdGNoIChwcm9wSWQpIHsKQEAg
LTE0NCw3ICsxNDQsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Gb250KGludCBwcm9w
CiAgICAgICAgICAgICBpZiAoIXN5c3RlbUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKICAgICAgICAg
ICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9u
dFNpemVdXTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoZm9udCkgewogICAgICAgICBjYWNoZWRE
ZXNjLT5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKICAgICAgICAgY2FjaGVkRGVzYy0+c2V0R2Vu
ZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKQEAgLTE1Nyw3ICsxNTcsNyBA
QCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Gb250KGludCBwcm9wCiAgICAgZm9udERlc2Ny
aXB0aW9uID0gKmNhY2hlZERlc2M7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJv
bFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRl
ciwgCitib29sIFJlbmRlclRoZW1lTWFjOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQmFja2dyb3VuZExheWVyJiBiYWNrZ3JvdW5kLCBjb25z
dCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewogICAgIGlmIChzdHlsZS0+YXBwZWFy
YW5jZSgpID09IFRleHRGaWVsZEFwcGVhcmFuY2UgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBU
ZXh0QXJlYUFwcGVhcmFuY2UgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94QXBwZWFy
YW5jZSkKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RSZXBh
aW50UmVjdChjCiAgICAgICAgIGNhc2UgQ2hlY2tib3hBcHBlYXJhbmNlOiB7CiAgICAgICAgICAg
ICAvLyBTaW5jZSB3ZSBxdWVyeSB0aGUgcHJvdG90eXBlIGNlbGwsIHdlIG5lZWQgdG8gdXBkYXRl
IGl0cyBzdGF0ZSB0byBtYXRjaC4KICAgICAgICAgICAgIHNldENoZWNrYm94Q2VsbFN0YXRlKG8s
IHIpOwotICAgICAgICAKKwogICAgICAgICAgICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBu
ZWVkZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0byBhY2Nv
bW1vZGF0ZSB0aGUgY2hlY2tib3gKICAgICAgICAgICAgIC8vIHNoYWRvdyIgYW5kIHRoZSBjaGVj
ay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250
cm9sIGluIFdlYktpdC4KICAgICAgICAgICAgIHIgPSBpbmZsYXRlUmVjdChyLCBjaGVja2JveFNp
emVzKClbW2NoZWNrYm94IGNvbnRyb2xTaXplXV0sIGNoZWNrYm94TWFyZ2lucygpKTsKQEAgLTE4
OSw3ICsxODksNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RSZXBhaW50UmVjdChjCiAg
ICAgICAgIGNhc2UgUmFkaW9BcHBlYXJhbmNlOiB7CiAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBx
dWVyeSB0aGUgcHJvdG90eXBlIGNlbGwsIHdlIG5lZWQgdG8gdXBkYXRlIGl0cyBzdGF0ZSB0byBt
YXRjaC4KICAgICAgICAgICAgIHNldFJhZGlvQ2VsbFN0YXRlKG8sIHIpOwotICAgICAgICAKKwog
ICAgICAgICAgICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBuZWVkZWQgdG8gYWNjb3VudCBm
b3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0byBhY2NvbW1vZGF0ZSB0aGUgY2hlY2ti
b3gKICAgICAgICAgICAgIC8vIHNoYWRvdyIgYW5kIHRoZSBjaGVjay4gIFdlIGRvbid0IGNvbnNp
ZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KICAg
ICAgICAgICAgIHIgPSBpbmZsYXRlUmVjdChyLCByYWRpb1NpemVzKClbW3JhZGlvIGNvbnRyb2xT
aXplXV0sIHJhZGlvTWFyZ2lucygpKTsKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RSZXBhaW50UmVjdChjCiAgICAgICAgIGNhc2UgQnV0dG9uQXBwZWFyYW5j
ZTogewogICAgICAgICAgICAgLy8gU2luY2Ugd2UgcXVlcnkgdGhlIHByb3RvdHlwZSBjZWxsLCB3
ZSBuZWVkIHRvIHVwZGF0ZSBpdHMgc3RhdGUgdG8gbWF0Y2guCiAgICAgICAgICAgICBzZXRCdXR0
b25DZWxsU3RhdGUobywgcik7Ci0gICAgICAgIAorCiAgICAgICAgICAgICAvLyBXZSBpbmZsYXRl
IHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVkIGluIHRo
ZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBjaGVja2JveAogICAgICAgICAgICAgLy8gc2hhZG93
IiBhbmQgdGhlIGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9mIHRoZSBib3Vu
ZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0LgogICAgICAgICAgICAgaWYgKFtidXR0b24gYmV6
ZWxTdHlsZV0gPT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkKQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lk
IFJlbmRlclRoZW1lTWFjOjphZGp1c3RSZXBhaW50UmVjdChjCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIE1lbnVsaXN0QXBwZWFyYW5jZTogewotICAgICAgICAg
ICAgc2V0UG9wdXBCdXR0b25DZWxsU3RhdGUobywgcik7IAorICAgICAgICAgICAgc2V0UG9wdXBC
dXR0b25DZWxsU3RhdGUobywgcik7CiAgICAgICAgICAgICByID0gaW5mbGF0ZVJlY3QociwgcG9w
dXBCdXR0b25TaXplcygpW1twb3B1cEJ1dHRvbiBjb250cm9sU2l6ZV1dLCBwb3B1cEJ1dHRvbk1h
cmdpbnMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjM5LDcgKzIzOSw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZSgKICAgICBib29sIG9s
ZEluZGV0ZXJtaW5hdGUgPSBbY2VsbCBzdGF0ZV0gPT0gTlNNaXhlZFN0YXRlOwogICAgIGJvb2wg
aW5kZXRlcm1pbmF0ZSA9IGlzSW5kZXRlcm1pbmF0ZShvKTsKICAgICBib29sIGNoZWNrZWQgPSBp
c0NoZWNrZWQobyk7Ci0gICAgCisKICAgICBpZiAob2xkSW5kZXRlcm1pbmF0ZSAhPSBpbmRldGVy
bWluYXRlKSB7CiAgICAgICAgIFtjZWxsIHNldFN0YXRlOmluZGV0ZXJtaW5hdGUgPyBOU01peGVk
U3RhdGUgOiAoY2hlY2tlZCA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGUpXTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjg3LDExICsyODcsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFN1
cHBvcnRzVGludAogewogICAgIGlmICghaXNFbmFibGVkKG8pKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCisKICAgICAvLyBDaGVja2JveGVzIG9ubHkgaGF2ZSB0aW50IHdoZW4gY2hlY2tl
ZC4KICAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IENoZWNrYm94QXBwZWFyYW5j
ZSkKICAgICAgICAgcmV0dXJuIGlzQ2hlY2tlZChvKTsKLSAgICAKKwogICAgIC8vIEZvciBub3cg
YXNzdW1lIG90aGVyIGNvbnRyb2xzIGhhdmUgdGludCBpZiBlbmFibGVkLgogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRG
cm9tQ29udHJvbFMKICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKICAgICBmb250RGVzY3JpcHRp
b24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5KTsKLSAgICAK
KwogICAgIE5TRm9udCogZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5
c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6Y29udHJvbFNpemVdXTsKICAgICBmb250RGVzY3Jp
cHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoW2ZvbnQgZmFtaWx5TmFtZV0pOwogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoW2ZvbnQgcG9pbnRTaXplXSk7CkBAIC0zNzAs
MTMgKzM3MCwxMyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENoZWNrYm94KFJlbmRlCiB7
CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG5lZWRlZCBmb3IgdGhlIGNv
bnRyb2wgYW5kIHByZXBhcmUgdGhlIGNlbGwgZm9yIHBhaW50aW5nLgogICAgIHNldENoZWNrYm94
Q2VsbFN0YXRlKG8sIHIpOwotICAgIAorCiAgICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBu
ZWVkZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0byBhY2Nv
bW1vZGF0ZSB0aGUgY2hlY2tib3gKICAgICAvLyBzaGFkb3ciIGFuZCB0aGUgY2hlY2suICBXZSBk
b24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBX
ZWJLaXQuCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChyLCBjaGVja2Jv
eFNpemVzKClbW2NoZWNrYm94IGNvbnRyb2xTaXplXV0sIGNoZWNrYm94TWFyZ2lucygpKTsKICAg
ICBbY2hlY2tib3ggZHJhd1dpdGhGcmFtZTpOU1JlY3QoaW5mbGF0ZWRSZWN0KSBpblZpZXc6by0+
dmlldygpLT5mcmFtZVZpZXcoKS0+Z2V0RG9jdW1lbnRWaWV3KCldOwogICAgIFtjaGVja2JveCBz
ZXRDb250cm9sVmlldzpuaWxdOwotICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0z
ODgsNyArMzg4LDcgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6OmNoZWNrYm94Uwog
CiBjb25zdCBpbnQqIFJlbmRlclRoZW1lTWFjOjpjaGVja2JveE1hcmdpbnMoKSBjb25zdAogewot
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWFyZ2luc1szXVs0XSA9IAorICAgIHN0YXRpYyBjb25zdCBp
bnQgbWFyZ2luc1szXVs0XSA9CiAgICAgewogICAgICAgICB7IDMsIDQsIDQsIDIgfSwKICAgICAg
ICAgeyA0LCAzLCAzLCAzIH0sCkBAIC00MDUsMTAgKzQwNSwxMCBAQCB2b2lkIFJlbmRlclRoZW1l
TWFjOjpzZXRDaGVja2JveENlbGxTdGF0CiAgICAgICAgIFtjaGVja2JveCBzZXRUaXRsZTpuaWxd
OwogICAgICAgICBbY2hlY2tib3ggc2V0QWxsb3dzTWl4ZWRTdGF0ZTpZRVNdOwogICAgIH0KLSAg
ICAKKwogICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgcmVjdGFuZ2xl
IHdlJ3JlIHBhaW50aW5nIGludG8uCiAgICAgc2V0Q29udHJvbFNpemUoY2hlY2tib3gsIGNoZWNr
Ym94U2l6ZXMoKSwgci5zaXplKCkpOwotICAgIAorCiAgICAgLy8gVXBkYXRlIHRoZSB2YXJpb3Vz
IHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVwZGF0ZUNoZWNrZWRTdGF0ZShjaGVja2JveCwg
byk7CiAgICAgdXBkYXRlRW5hYmxlZFN0YXRlKGNoZWNrYm94LCBvKTsKQEAgLTQyMSw3ICs0MjEs
NyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRDaGVja2JveFNpemUoUmVuCiAgICAgLy8gSWYg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90
aGluZyB0byBkby4KICAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAg
ICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGgg
b2YgdGhlIGNvbnRyb2wuCiAgICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBjaGVja2JveFNpemVz
KCkpOwogfQpAQCAtNDMwLDEzICs0MzAsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRS
YWRpbyhSZW5kZXJPYgogewogICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5kIGhlaWdodCBu
ZWVkZWQgZm9yIHRoZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBwYWludGluZy4K
ICAgICBzZXRSYWRpb0NlbGxTdGF0ZShvLCByKTsKLSAgICAKKwogICAgIC8vIFdlIGluZmxhdGUg
dGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVkZWQgaW4gdGhl
IGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGNoZWNrYm94CiAgICAgLy8gc2hhZG93IiBhbmQgdGhl
IGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9mIHRoZSBib3VuZHMgb2YgdGhl
IGNvbnRyb2wgaW4gV2ViS2l0LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJl
Y3QociwgcmFkaW9TaXplcygpW1tyYWRpbyBjb250cm9sU2l6ZV1dLCByYWRpb01hcmdpbnMoKSk7
CiAgICAgW3JhZGlvIGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3Om8t
PnZpZXcoKS0+ZnJhbWVWaWV3KCktPmdldERvY3VtZW50VmlldygpXTsKICAgICBbcmFkaW8gc2V0
Q29udHJvbFZpZXc6bmlsXTsKLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNDQ4
LDcgKzQ0OCw3IEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpyYWRpb1NpemUKIAog
Y29uc3QgaW50KiBSZW5kZXJUaGVtZU1hYzo6cmFkaW9NYXJnaW5zKCkgY29uc3QKIHsKLSAgICBz
dGF0aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0gPSAKKyAgICBzdGF0aWMgY29uc3QgaW50IG1h
cmdpbnNbM11bNF0gPQogICAgIHsKICAgICAgICAgeyAyLCAyLCA0LCAyIH0sCiAgICAgICAgIHsg
MywgMiwgMywgMiB9LApAQCAtNDY0LDEwICs0NjQsMTAgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6
c2V0UmFkaW9DZWxsU3RhdGUoYwogICAgICAgICBbcmFkaW8gc2V0QnV0dG9uVHlwZTpOU1JhZGlv
QnV0dG9uXTsKICAgICAgICAgW3JhZGlvIHNldFRpdGxlOm5pbF07CiAgICAgfQotICAgIAorCiAg
ICAgLy8gU2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUg
cGFpbnRpbmcgaW50by4KICAgICBzZXRDb250cm9sU2l6ZShyYWRpbywgcmFkaW9TaXplcygpLCBy
LnNpemUoKSk7Ci0gICAgCisKICAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJl
c3BvbmQgdG8uCiAgICAgdXBkYXRlQ2hlY2tlZFN0YXRlKHJhZGlvLCBvKTsKICAgICB1cGRhdGVF
bmFibGVkU3RhdGUocmFkaW8sIG8pOwpAQCAtNDgxLDcgKzQ4MSw3IEBAIHZvaWQgUmVuZGVyVGhl
bWVNYWM6OnNldFJhZGlvU2l6ZShSZW5kZXIKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdo
dCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlm
ICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgp
LmlzQXV0bygpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICAvLyBVc2UgdGhlIGZvbnQg
c2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KICAg
ICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIHJhZGlvU2l6ZXMoKSk7CiB9CkBAIC01MTAsNyArNTEw
LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0QnV0dG9uU3R5bGUoQwogICAgIC8vICgz
KSBCdXR0b24gaXMgdGhlIGNvbnN0YW50IHRoYXQgbWVhbnMgInBpY2sgdGhlIGJlc3QgYnV0dG9u
IGFzIGFwcHJvcHJpYXRlLiIgIDxidXR0b24+cyB1c2UgdGhpcyBjb25zdGFudC4gIFRoaXMgYnV0
dG9uIHdpbGwKICAgICAvLyBhbHNvIHNjYWxlIHZlcnRpY2FsbHkgYW5kIGFsbG93IGN1c3RvbSBm
b250cyBhbmQgY29sb3JzLiAgSXQgd2lsbCBhdHRlbXB0IHRvIHVzZSBBcXVhIGlmIHBvc3NpYmxl
IGFuZCB3aWxsIG1ha2UgdGhpcyBkZXRlcm1pbmF0aW9uCiAgICAgLy8gc29sZWx5IG9uIHRoZSBy
ZWN0YW5nbGUgb2YgdGhlIGNvbnRyb2wuCi0gICAgCisKICAgICAvLyBEZXRlcm1pbmUgb3VyIGNv
bnRyb2wgc2l6ZSBiYXNlZCBvZmYgb3VyIGZvbnQuCiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CiAKQEAgLTUyMCw3ICs1MjAsNyBAQCB2
b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RCdXR0b25TdHlsZShDCiAKICAgICAgICAgLy8gSGVp
Z2h0IGlzIGxvY2tlZCB0byBhdXRvLgogICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChB
dXRvKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBw
cmUKICAgICAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKIApAQCAtNTM3LDcgKzUzNyw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdEJ1dHRvblN0eWxlKEMKICAgICB9IGVsc2Ug
ewogICAgICAgICAvLyBTZXQgYSBtaW4taGVpZ2h0IHNvIHRoYXQgd2UgY2FuJ3QgZ2V0IHNtYWxs
ZXIgdGhhbiB0aGUgbWluaSBidXR0b24uCiAgICAgICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVu
Z3RoKDE1LCBGaXhlZCkpOwotICAgICAgICAKKwogICAgICAgICAvLyBSZXNldCB0aGUgdG9wIGFu
ZCBib3R0b20gYm9yZGVycy4KICAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyVG9wKCk7CiAgICAg
ICAgIHN0eWxlLT5yZXNldEJvcmRlckJvdHRvbSgpOwpAQCAtNTUyLDcgKzU1Miw3IEBAIGNvbnN0
IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpidXR0b25TaXoKIAogY29uc3QgaW50KiBSZW5kZXJU
aGVtZU1hYzo6YnV0dG9uTWFyZ2lucygpIGNvbnN0CiB7Ci0gICAgc3RhdGljIGNvbnN0IGludCBt
YXJnaW5zWzNdWzRdID0gCisgICAgc3RhdGljIGNvbnN0IGludCBtYXJnaW5zWzNdWzRdID0KICAg
ICB7CiAgICAgICAgIHsgNCwgNiwgNywgNiB9LAogICAgICAgICB7IDQsIDUsIDYsIDUgfSwKQEAg
LTU2Niw3ICs1NjYsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRCdXR0b25TaXplKFJlbmRl
CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVu
IHdlIGhhdmUgbm90aGluZyB0byBkby4KICAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJu
OwotICAgIAorCiAgICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRy
aW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCiAgICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBi
dXR0b25TaXplcygpKTsKIH0KQEAgLTU4Nyw5ICs1ODcsOSBAQCB2b2lkIFJlbmRlclRoZW1lTWFj
OjpzZXRCdXR0b25DZWxsU3RhdGUoCiAgICAgICAgICAgICBbYnV0dG9uIHNldEJlemVsU3R5bGU6
TlNTaGFkb3dsZXNzU3F1YXJlQmV6ZWxTdHlsZV07CiAgICAgfSBlbHNlIGlmIChbYnV0dG9uIGJl
emVsU3R5bGVdICE9IE5TUm91bmRlZEJlemVsU3R5bGUpCiAgICAgICAgIFtidXR0b24gc2V0QmV6
ZWxTdHlsZTpOU1JvdW5kZWRCZXplbFN0eWxlXTsKLSAgICAgICAgICAgIAorCiAgICAgc2V0Q29u
dHJvbFNpemUoYnV0dG9uLCBidXR0b25TaXplcygpLCByLnNpemUoKSk7Ci0gICAgCisKICAgICAv
LyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlQ2hl
Y2tlZFN0YXRlKGJ1dHRvbiwgbyk7CiAgICAgdXBkYXRlRW5hYmxlZFN0YXRlKGJ1dHRvbiwgbyk7
CkBAIC02MzMsNyArNjMzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQo
UmVuZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRG
aWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dAogewogfQogCkBAIC02NDQsMTMgKzY0NCwxMyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dFRleHRBcmVhKFJlbmRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdAogewogfQogCiBjb25zdCBpbnQqIFJlbmRlclRoZW1lTWFjOjpwb3B1cEJ1dHRv
bk1hcmdpbnMoKSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBpbnQgbWFyZ2luc1szXVs0XSA9
IAorICAgIHN0YXRpYyBjb25zdCBpbnQgbWFyZ2luc1szXVs0XSA9CiAgICAgewogICAgICAgICB7
IDAsIDMsIDEsIDMgfSwKICAgICAgICAgeyAwLCAzLCAyLCAzIH0sCkBAIC02NjcsNyArNjY3LDcg
QEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6OnBvcHVwQnV0dAogCiBjb25zdCBpbnQq
IFJlbmRlclRoZW1lTWFjOjpwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSBzaXplKSBj
b25zdAogewotICAgIHN0YXRpYyBjb25zdCBpbnQgcGFkZGluZ1szXVs0XSA9IAorICAgIHN0YXRp
YyBjb25zdCBpbnQgcGFkZGluZ1szXVs0XSA9CiAgICAgewogICAgICAgICB7IDIsIDI2LCAzLCA4
IH0sCiAgICAgICAgIHsgMiwgMjMsIDMsIDggfSwKQEAgLTcwMCwxMCArNzAwLDEwIEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoUmVuZGUKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWNvbnN0IGZsb2F0IGJhc2VGb250U2l6ZSA9IDExLjA7Ci1jb25zdCBmbG9hdCBiYXNlQXJy
b3dIZWlnaHQgPSA0LjA7Ci1jb25zdCBmbG9hdCBiYXNlQXJyb3dXaWR0aCA9IDUuMDsKLWNvbnN0
IGZsb2F0IGJhc2VTcGFjZUJldHdlZW5BcnJvd3MgPSAyLjA7Citjb25zdCBmbG9hdCBiYXNlRm9u
dFNpemUgPSAxMS4wZjsKK2NvbnN0IGZsb2F0IGJhc2VBcnJvd0hlaWdodCA9IDQuMGY7Citjb25z
dCBmbG9hdCBiYXNlQXJyb3dXaWR0aCA9IDUuMGY7Citjb25zdCBmbG9hdCBiYXNlU3BhY2VCZXR3
ZWVuQXJyb3dzID0gMi4wZjsKIGNvbnN0IGludCBhcnJvd1BhZGRpbmdMZWZ0ID0gNjsKIGNvbnN0
IGludCBhcnJvd1BhZGRpbmdSaWdodCA9IDY7CiBjb25zdCBpbnQgcGFkZGluZ0JlZm9yZVNlcGFy
YXRvciA9IDQ7CkBAIC03MTIsNDQgKzcxMiw0NCBAQCBjb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRk
aW5nTGVmdCA9IDg7CiBjb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5nVG9wID0gMTsKIGNvbnN0
IGludCBzdHlsZWRQb3B1cFBhZGRpbmdCb3R0b20gPSAyOwogCi1zdGF0aWMgdm9pZCBUb3BHcmFk
aWVudEludGVycG9sYXRlKCB2b2lkICppbmZvLCBjb25zdCBDR0Zsb2F0ICppbkRhdGEsIENHRmxv
YXQgKm91dERhdGEgKQorc3RhdGljIHZvaWQgVG9wR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiBp
bmZvLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCiB7Ci0gICAgc3Rh
dGljIGZsb2F0IGRhcmtbNF0gPSB7IDEsIDEsIDEsIDAuNCB9OwotICAgIHN0YXRpYyBmbG9hdCBs
aWdodFs0XSA9IHsgMSwgMSwgMSwgMC4xNSB9OworICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0g
eyAxLjBmLCAxLjBmLCAxLjBmLCAwLjRmIH07CisgICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0g
eyAxLjBmLCAxLjBmLCAxLjBmLCAwLjE1ZiB9OwogICAgIGZsb2F0IGEgPSBpbkRhdGFbMF07CiAg
ICAgaW50IGkgPSAwOwotICAgIGZvciggaSA9IDA7IGkgPCA0OyBpKysgKQotICAgICAgICBvdXRE
YXRhW2ldID0gKCAxLjAgLSBhICkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOworICAgIGZvciAo
aSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAtIGEpICogZGFy
a1tpXSArIGEgKiBsaWdodFtpXTsKIH0KIAotc3RhdGljIHZvaWQgQm90dG9tR3JhZGllbnRJbnRl
cnBvbGF0ZSggdm9pZCAqaW5mbywgY29uc3QgQ0dGbG9hdCAqaW5EYXRhLCBDR0Zsb2F0ICpvdXRE
YXRhICkKK3N0YXRpYyB2b2lkIEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUodm9pZCogaW5mbywg
Y29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQogewotICAgIHN0YXRpYyBm
bG9hdCBkYXJrWzRdID0geyAxLCAxLCAxLCAwIH07Ci0gICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRd
ID0geyAxLCAxLCAxLCAwLjMgfTsKKyAgICBzdGF0aWMgZmxvYXQgZGFya1s0XSA9IHsgMS4wZiwg
MS4wZiwgMS4wZiwgMC4wZiB9OworICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsgMS4wZiwg
MS4wZiwgMS4wZiwgMC4zZiB9OwogICAgIGZsb2F0IGEgPSBpbkRhdGFbMF07CiAgICAgaW50IGkg
PSAwOwotICAgIGZvciggaSA9IDA7IGkgPCA0OyBpKysgKQotICAgICAgICBvdXREYXRhW2ldID0g
KCAxLjAgLSBhICkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOworICAgIGZvciAoaSA9IDA7IGkg
PCA0OyBpKyspCisgICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAtIGEpICogZGFya1tpXSArIGEg
KiBsaWdodFtpXTsKIH0KIAotc3RhdGljIHZvaWQgTWFpbkdyYWRpZW50SW50ZXJwb2xhdGUoIHZv
aWQgKmluZm8sIGNvbnN0IENHRmxvYXQgKmluRGF0YSwgQ0dGbG9hdCAqb3V0RGF0YSApCitzdGF0
aWMgdm9pZCBNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiBpbmZvLCBjb25zdCBDR0Zsb2F0
KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCiB7Ci0gICAgc3RhdGljIGZsb2F0IGRhcmtbNF0g
PSB7IDAsIDAsIDAsIDAuMTUgfTsKLSAgICBzdGF0aWMgZmxvYXQgbGlnaHRbNF0gPSB7IDAsIDAs
IDAsIDAgfTsKKyAgICBzdGF0aWMgZmxvYXQgZGFya1s0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwg
MC4xNWYgfTsKKyAgICBzdGF0aWMgZmxvYXQgbGlnaHRbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYs
IDAuMGYgfTsKICAgICBmbG9hdCBhID0gaW5EYXRhWzBdOwogICAgIGludCBpID0gMDsKLSAgICBm
b3IoIGkgPSAwOyBpIDwgNDsgaSsrICkKLSAgICAgICAgb3V0RGF0YVtpXSA9ICggMS4wIC0gYSAp
ICogZGFya1tpXSArIGEgKiBsaWdodFtpXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQor
ICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBhKSAqIGRhcmtbaV0gKyBhICogbGlnaHRbaV07
CiB9CiAKLXN0YXRpYyB2b2lkIFRyYWNrR3JhZGllbnRJbnRlcnBvbGF0ZSggdm9pZCAqaW5mbywg
Y29uc3QgQ0dGbG9hdCAqaW5EYXRhLCBDR0Zsb2F0ICpvdXREYXRhICkKK3N0YXRpYyB2b2lkIFRy
YWNrR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiBpbmZvLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEs
IENHRmxvYXQqIG91dERhdGEpCiB7Ci0gICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDAsIDAs
IDAsIDAuNjc4IH07Ci0gICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAwLCAwLCAwLCAwLjEz
IH07CisgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDAuNjc4
ZiB9OworICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC4x
M2YgfTsKICAgICBmbG9hdCBhID0gaW5EYXRhWzBdOwogICAgIGludCBpID0gMDsKLSAgICBmb3Io
IGkgPSAwOyBpIDwgNDsgaSsrICkKLSAgICAgICAgb3V0RGF0YVtpXSA9ICggMS4wIC0gYSApICog
ZGFya1tpXSArIGEgKiBsaWdodFtpXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAg
ICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBhKSAqIGRhcmtbaV0gKyBhICogbGlnaHRbaV07CiB9
CiAKIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQpAQCAtNzYwLDE1ICs3NjAsMTUgQEAgdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogCiAgICAgaW50IHJhZGl1cyA9IG8tPnN0eWxlKCktPmJv
cmRlclRvcExlZnRSYWRpdXMoKS53aWR0aCgpOwogCi0gICAgQ0dDb2xvclNwYWNlUmVmIGNzcGFj
ZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOyAgICAKKyAgICBDR0NvbG9yU3BhY2VS
ZWYgY3NwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CiAKLSAgICBGbG9hdFJl
Y3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgLyAyLjAp
OworICAgIEZsb2F0UmVjdCB0b3BHcmFkaWVudChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5o
ZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIHRvcENhbGxi
YWNrcyA9IHsgMCwgVG9wR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwogICAgIENHRnVuY3Rp
b25SZWYgdG9wRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5V
TEwsICZ0b3BDYWxsYmFja3MpOwotICAgIENHU2hhZGluZ1JlZiB0b3BTaGFkaW5nID0gQ0dTaGFk
aW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdy
YWRpZW50LnkoKSksIAorICAgIENHU2hhZGluZ1JlZiB0b3BTaGFkaW5nID0gQ0dTaGFkaW5nQ3Jl
YXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50
LnkoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LmJvdHRvbSgpKSwgdG9w
RnVuY3Rpb24sIGZhbHNlLCBmYWxzZSk7CiAKLSAgICBGbG9hdFJlY3QgYm90dG9tR3JhZGllbnQo
ci54KCkgKyByYWRpdXMsIHIueSgpICsgci5oZWlnaHQoKSAvIDIuMCwgci53aWR0aCgpIC0gMiAq
IHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMCk7CisgICAgRmxvYXRSZWN0IGJvdHRvbUdyYWRpZW50
KHIueCgpICsgcmFkaXVzLCByLnkoKSArIHIuaGVpZ2h0KCkgLyAyLjBmLCByLndpZHRoKCkgLSAy
LjBmICogcmFkaXVzLCByLmhlaWdodCgpIC8gMi4wZik7CiAgICAgc3RydWN0IENHRnVuY3Rpb25D
YWxsYmFja3MgYm90dG9tQ2FsbGJhY2tzID0geyAwLCBCb3R0b21HcmFkaWVudEludGVycG9sYXRl
LCBOVUxMIH07CiAgICAgQ0dGdW5jdGlvblJlZiBib3R0b21GdW5jdGlvbiA9IENHRnVuY3Rpb25D
cmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJmJvdHRvbUNhbGxiYWNrcyk7CiAgICAgQ0dT
aGFkaW5nUmVmIGJvdHRvbVNoYWRpbmcgPSBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENH
UG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgIGJvdHRvbUdyYWRpZW50LnkoKSksCkBAIC03
NzYsNDEgKzc3Niw0MSBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9u
CiAKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBtYWluQ2FsbGJhY2tzID0geyAwLCBN
YWluR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwogICAgIENHRnVuY3Rpb25SZWYgbWFpbkZ1
bmN0aW9uID0gQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNh
bGxiYWNrcyk7Ci0gICAgQ0dTaGFkaW5nUmVmIG1haW5TaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRl
QXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgpKSwgCisgICAgQ0dTaGFkaW5n
UmVmIG1haW5TaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFr
ZShyLngoKSwgIHIueSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDR1BvaW50TWFrZShyLngoKSwgci5ib3R0b20oKSksIG1haW5GdW5jdGlv
biwgZmFsc2UsIGZhbHNlKTsKIAotICAgIENHU2hhZGluZ1JlZiBsZWZ0U2hhZGluZyA9IENHU2hh
ZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIAorICAg
IENHU2hhZGluZ1JlZiBsZWZ0U2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwg
Q0dQb2ludE1ha2Uoci54KCksICByLnkoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2ludE1ha2Uoci54KCkgKyByYWRpdXMsIHIueSgp
KSwgbWFpbkZ1bmN0aW9uLCBmYWxzZSwgZmFsc2UpOwogCi0gICAgQ0dTaGFkaW5nUmVmIHJpZ2h0
U2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci5yaWdo
dCgpLCAgci55KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dQb2ludE1ha2Uoci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5G
dW5jdGlvbiwgZmFsc2UsIGZhbHNlICk7ICAgICAgICAgICAgCisgICAgQ0dTaGFkaW5nUmVmIHJp
Z2h0U2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci5y
aWdodCgpLCAgci55KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDR1BvaW50TWFrZShyLnJpZ2h0KCkgLSByYWRpdXMsIHIueSgpKSwgbWFp
bkZ1bmN0aW9uLCBmYWxzZSwgZmFsc2UgKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgp
OwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcik7Ci0gICAgcGFpbnRJbmZvLmNv
bnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChyLCAKKyAgICBwYWludEluZm8uY29udGV4dC0+YWRk
Um91bmRlZFJlY3RDbGlwKHIsCiAgICAgICAgIG8tPnN0eWxlKCktPmJvcmRlclRvcExlZnRSYWRp
dXMoKSwgby0+c3R5bGUoKS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKSwKICAgICAgICAgby0+c3R5
bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21S
aWdodFJhZGl1cygpKTsKLSAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hh
ZGluZyk7ICAKLSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOyAgICAgIAorICAgIENH
Q29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIG1haW5TaGFkaW5nKTsKKyAgICBwYWludEluZm8u
Y29udGV4dC0+cmVzdG9yZSgpOwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHRvcEdyYWRpZW50KTsKLSAgICBwYWludElu
Zm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGVuY2xvc2luZ0ludFJlY3QodG9wR3JhZGll
bnQpLCAKKyAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGVuY2xvc2lu
Z0ludFJlY3QodG9wR3JhZGllbnQpLAogICAgICAgICBvLT5zdHlsZSgpLT5ib3JkZXJUb3BMZWZ0
UmFkaXVzKCksIG8tPnN0eWxlKCktPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCksCiAgICAgICAgIElu
dFNpemUoKSwgSW50U2l6ZSgpKTsKLSAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCB0
b3BTaGFkaW5nKTsgIAotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7ICAgICAgCisg
ICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgdG9wU2hhZGluZyk7CisgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7
CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBib3R0b21HcmFkaWVudCk7Ci0gICAg
cGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KGJv
dHRvbUdyYWRpZW50KSwgCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xp
cChlbmNsb3NpbmdJbnRSZWN0KGJvdHRvbUdyYWRpZW50KSwKICAgICAgICAgSW50U2l6ZSgpLCBJ
bnRTaXplKCksCiAgICAgICAgIG8tPnN0eWxlKCktPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKSwg
by0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKSk7Ci0gICAgQ0dDb250ZXh0RHJh
d1NoYWRpbmcoY29udGV4dCwgYm90dG9tU2hhZGluZyk7IAorICAgIENHQ29udGV4dERyYXdTaGFk
aW5nKGNvbnRleHQsIGJvdHRvbVNoYWRpbmcpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0
b3JlKCk7CiAKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIENHQ29udGV4dENs
aXBUb1JlY3QoY29udGV4dCwgcik7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRS
ZWN0Q2xpcChyLCAKKyAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHIs
CiAgICAgICAgIG8tPnN0eWxlKCktPmJvcmRlclRvcExlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+
Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKSwKICAgICAgICAgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9t
TGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpKTsKICAg
ICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBsZWZ0U2hhZGluZyk7CkBAIC04MzIsNyAr
ODMyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIHBh
aW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMobywgcGFpbnRJbmZvLCBib3VuZHMpOwogCiAgICAg
ZmxvYXQgZm9udFNjYWxlID0gby0+c3R5bGUoKS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsK
LSAgICBmbG9hdCBjZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDIuMDsK
KyAgICBmbG9hdCBjZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDIuMGY7
CiAgICAgZmxvYXQgYXJyb3dIZWlnaHQgPSBiYXNlQXJyb3dIZWlnaHQgKiBmb250U2NhbGU7CiAg
ICAgZmxvYXQgYXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOwogICAgIGZs
b2F0IGxlZnRFZGdlID0gYm91bmRzLnJpZ2h0KCkgLSBhcnJvd1BhZGRpbmdSaWdodCAtIGFycm93
V2lkdGg7CkBAIC04NDIsMTcgKzg0MiwxNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
bnVMaXN0QnV0dG9uCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFBlbihvLT5zdHlsZSgpLT5j
b2xvcigpKTsKIAogICAgIEZsb2F0UG9pbnQgYXJyb3cxWzNdOwotICAgIGFycm93MVswXSA9IEZs
b2F0UG9pbnQobGVmdEVkZ2UsIGNlbnRlclkgLSBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjApOwot
ICAgIGFycm93MVsxXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoLCBjZW50ZXJZ
IC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wKTsKLSAgICBhcnJvdzFbMl0gPSBGbG9hdFBvaW50
KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMCwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93
cyAvIDIuMCAtIGFycm93SGVpZ2h0KTsKKyAgICBhcnJvdzFbMF0gPSBGbG9hdFBvaW50KGxlZnRF
ZGdlLCBjZW50ZXJZIC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7CisgICAgYXJyb3cxWzFd
ID0gRmxvYXRQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGgsIGNlbnRlclkgLSBzcGFjZUJldHdl
ZW5BcnJvd3MgLyAyLjBmKTsKKyAgICBhcnJvdzFbMl0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsg
YXJyb3dXaWR0aCAvIDIuMGYsIGNlbnRlclkgLSBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmIC0g
YXJyb3dIZWlnaHQpOwogCiAgICAgLy8gRHJhdyB0aGUgdG9wIGFycm93CiAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIGFycm93MSwgdHJ1ZSk7CiAKICAgICBGbG9h
dFBvaW50IGFycm93MlszXTsKLSAgICBhcnJvdzJbMF0gPSBGbG9hdFBvaW50KGxlZnRFZGdlLCBj
ZW50ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wKTsKLSAgICBhcnJvdzJbMV0gPSBGbG9h
dFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCwgY2VudGVyWSArIHNwYWNlQmV0d2VlbkFycm93
cyAvIDIuMCk7Ci0gICAgYXJyb3cyWzJdID0gRmxvYXRQb2ludChsZWZ0RWRnZSArIGFycm93V2lk
dGggLyAyLjAsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjAgKyBhcnJvd0hlaWdo
dCk7CisgICAgYXJyb3cyWzBdID0gRmxvYXRQb2ludChsZWZ0RWRnZSwgY2VudGVyWSArIHNwYWNl
QmV0d2VlbkFycm93cyAvIDIuMGYpOworICAgIGFycm93MlsxXSA9IEZsb2F0UG9pbnQobGVmdEVk
Z2UgKyBhcnJvd1dpZHRoLCBjZW50ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7Cisg
ICAgYXJyb3cyWzJdID0gRmxvYXRQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGggLyAyLjBmLCBj
ZW50ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZiArIGFycm93SGVpZ2h0KTsKIAogICAg
IC8vIERyYXcgdGhlIGJvdHRvbSBhcnJvdwogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29u
dmV4UG9seWdvbigzLCBhcnJvdzIsIHRydWUpOwpAQCAtODgwLDEwICs4ODAsMTAgQEAgdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RTdHlsZQogICAgIE5TQ29udHJvbFNpemUgY29u
dHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwogCiAgICAgc3R5bGUtPnJlc2V0
Qm9yZGVyKCk7Ci0gICAgCisKICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCiAgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOwotICAgIAorCiAgICAgLy8gV2hpdGUtc3Bh
Y2UgaXMgbG9ja2VkIHRvIHByZQogICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKQEAg
LTkwMywxOSArOTAzLDE5IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5
bGUKIH0KIAogdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdAoteyAgICAgICAgCit7CiAgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRT
aXplKCkgLyBiYXNlRm9udFNpemU7CiAgICAgZmxvYXQgYXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dp
ZHRoICogZm9udFNjYWxlOwotICAgIAorCiAgICAgLy8gV2UncmUgb3ZlcnJpZGluZyB0aGUgcGFk
ZGluZyB0byBhbGxvdyBmb3IgdGhlIGFycm93IGNvbnRyb2wuICBXaW5JRSBkb2Vzbid0IGhvbm9y
IHBhZGRpbmcgb24gc2VsZWN0cywgc28KICAgICAvLyB0aGlzIHNob3VsZG4ndCBjYXVzZSBwcm9i
bGVtcyBvbiB0aGUgd2ViLiAgSWYgSUU3IGNoYW5nZXMgdGhhdCwgd2Ugc2hvdWxkIHJlY29uc2lk
ZXIgdGhpcy4KICAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHN0eWxlZFBvcHVwUGFk
ZGluZ0xlZnQsIEZpeGVkKSk7CiAgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoaW50
KGNlaWxmKGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQg
KyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSksIEZpeGVkKSk7CiAgICAgc3R5bGUtPnNldFBhZGRp
bmdUb3AoTGVuZ3RoKHN0eWxlZFBvcHVwUGFkZGluZ1RvcCwgRml4ZWQpKTsKICAgICBzdHlsZS0+
c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoc3R5bGVkUG9wdXBQYWRkaW5nQm90dG9tLCBGaXhlZCkp
OwotICAgIAorCiAgICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhJbnRTaXplKGludChiYXNlQm9y
ZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSksIGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNj
YWxlIC0gMSkpKTsgLy8gRklYTUU6IFJvdW5kIHVwPwotICAgIAorCiAgICAgY29uc3QgaW50IG1p
bkhlaWdodCA9IDE1OwogICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwg
Rml4ZWQpKTsKIH0KQEAgLTk1NCw3ICs5NTQsNyBAQCBjb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAy
OwogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSByOwotICAgIAorCiAgICAgaWYgKG8tPnN0eWxl
KCktPmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbEFwcGVhcmFuY2UpIHsKICAgICAg
ICAgYm91bmRzLnNldEhlaWdodCh0cmFja1dpZHRoKTsKICAgICAgICAgYm91bmRzLnNldFkoci55
KCkgKyByLmhlaWdodCgpIC8gMiAtIHRyYWNrV2lkdGggLyAyKTsKQEAgLTk2Miw0NSArOTYyLDQ0
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soUmUKICAgICAgICAgYm91
bmRzLnNldFdpZHRoKHRyYWNrV2lkdGgpOwogICAgICAgICBib3VuZHMuc2V0WChyLngoKSArIHIu
d2lkdGgoKSAvIDIgLSB0cmFja1dpZHRoIC8gMik7CiAgICAgfQotICAgIAorCiAgICAgTG9jYWxD
dXJyZW50R3JhcGhpY3NDb250ZXh0IExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dChwYWludElu
Zm8uY29udGV4dCk7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNzcGFjZSA9IENHQ29s
b3JTcGFjZUNyZWF0ZURldmljZVJHQigpOyAgICAKKyAgICBDR0NvbG9yU3BhY2VSZWYgY3NwYWNl
ID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CiAKICAgICBwYWludEluZm8uY29udGV4
dC0+c2F2ZSgpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgYm91bmRzKTsKLSAg
ICAKKwogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIG1haW5DYWxsYmFja3MgPSB7IDAs
IFRyYWNrR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwogICAgIENHRnVuY3Rpb25SZWYgbWFp
bkZ1bmN0aW9uID0gQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFp
bkNhbGxiYWNrcyk7CiAgICAgQ0dTaGFkaW5nUmVmIG1haW5TaGFkaW5nOwotICAgIGlmIChvLT5z
dHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxBcHBlYXJhbmNlKSB7Ci0gICAg
ICAgIG1haW5TaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFr
ZShib3VuZHMueCgpLCAgYm91bmRzLmJvdHRvbSgpKSwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2ludE1ha2UoYm91bmRzLnJpZ2h0KCks
IGJvdW5kcy5ib3R0b20oKSksIG1haW5GdW5jdGlvbiwgZmFsc2UsIGZhbHNlKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBtYWluU2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwg
Q0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy55KCkpLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50TWFrZShib3VuZHMueCgp
LCBib3VuZHMuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24sIGZhbHNlLCBmYWxzZSk7Ci0gICAgfQot
ICAgIAorICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxB
cHBlYXJhbmNlKQorICAgICAgICBtYWluU2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNz
cGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy5ib3R0b20oKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50TWFrZShi
b3VuZHMucmlnaHQoKSwgYm91bmRzLmJvdHRvbSgpKSwgbWFpbkZ1bmN0aW9uLCBmYWxzZSwgZmFs
c2UpOworICAgIGVsc2UKKyAgICAgICAgbWFpblNoYWRpbmcgPSBDR1NoYWRpbmdDcmVhdGVBeGlh
bChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy54KCksICBib3VuZHMueSgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHUG9pbnRNYWtlKGJv
dW5kcy54KCksIGJvdW5kcy5ib3R0b20oKSksIG1haW5GdW5jdGlvbiwgZmFsc2UsIGZhbHNlKTsK
KwogICAgIEludFNpemUgcmFkaXVzKHRyYWNrUmFkaXVzLCB0cmFja1JhZGl1cyk7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3VuZHMsIAorICAgIHBhaW50SW5m
by5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm91bmRzLAogICAgICAgICByYWRpdXMsIHJh
ZGl1cywKICAgICAgICAgcmFkaXVzLCByYWRpdXMpOwotICAgIENHQ29udGV4dERyYXdTaGFkaW5n
KGNvbnRleHQsIG1haW5TaGFkaW5nKTsgIAotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3Jl
KCk7ICAgICAKKyAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hhZGluZyk7
CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotY29uc3QgZmxvYXQgdmVydGljYWxTbGlkZXJIZWlnaHRQYWRkaW5nID0gMC4xOworY29u
c3QgZmxvYXQgdmVydGljYWxTbGlkZXJIZWlnaHRQYWRkaW5nID0gMC4xZjsKIAogYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17ICAgCit7
CiAgICAgTlNTbGlkZXJDZWxsKiBzbGlkZXJUaHVtYkNlbGw7CiAgICAgaWYgKG8tPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsQXBwZWFyYW5jZSkKICAgICAgICAg
c2xpZGVyVGh1bWJDZWxsID0gc2xpZGVyVGh1bWJWZXJ0aWNhbENlbGw7CiAgICAgZWxzZQogICAg
ICAgICBzbGlkZXJUaHVtYkNlbGwgPSBzbGlkZXJUaHVtYkhvcml6b250YWxDZWxsOwotICAgCisK
ICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250
ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5k
IGhlaWdodCBuZWVkZWQgZm9yIHRoZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBw
YWludGluZy4KQEAgLTEwMTEsMzUgKzEwMTAsMzUgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTbGlkZXJUaHVtYihSZQogICAgICAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09
IFNsaWRlclRodW1iVmVydGljYWxBcHBlYXJhbmNlKQogICAgICAgICAgICAgc2xpZGVyVmVydGlj
YWxDZWxsSXNQcmVzc2VkID0gZmFsc2U7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNsaWRl
ckhvcml6b250YWxDZWxsSXNQcmVzc2VkID0gZmFsc2U7ICAgICAgICAKKyAgICAgICAgICAgIHNs
aWRlckhvcml6b250YWxDZWxsSXNQcmVzc2VkID0gZmFsc2U7CiAgICAgfQogICAgIFtzbGlkZXJU
aHVtYkNlbGwgc2V0Q29udHJvbFNpemU6TlNTbWFsbENvbnRyb2xTaXplXTsKIAogICAgIC8vIFVw
ZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVFbmFibGVk
U3RhdGUoc2xpZGVyVGh1bWJDZWxsLCBvLT5wYXJlbnQoKSk7CiAgICAgdXBkYXRlRm9jdXNlZFN0
YXRlKHNsaWRlclRodW1iQ2VsbCwgby0+cGFyZW50KCkpOwotICAgIAorCiAgICAgLy8gVXBkYXRl
IHRoZSBwcmVzc2VkIHN0YXRlIHVzaW5nIHRoZSBOU0NlbGwgdHJhY2tpbmcgbWV0aG9kcywgc2lu
Y2UgdGhhdCdzIGhvdyBOU1NsaWRlckNlbGwga2VlcHMgdHJhY2sgb2YgaXQuCiAgICAgYm9vbCBv
bGRQcmVzc2VkOwogICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1
bWJWZXJ0aWNhbEFwcGVhcmFuY2UpCiAgICAgICAgIG9sZFByZXNzZWQgPSBzbGlkZXJWZXJ0aWNh
bENlbGxJc1ByZXNzZWQ7CiAgICAgZWxzZQogICAgICAgICBvbGRQcmVzc2VkID0gc2xpZGVySG9y
aXpvbnRhbENlbGxJc1ByZXNzZWQ7Ci0gICAgCisKICAgICBib29sIHByZXNzZWQgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJTbGlkZXIqPihvLT5wYXJlbnQoKSktPmluRHJhZ01vZGUoKTsKLSAgICAKKwog
ICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbEFw
cGVhcmFuY2UpCiAgICAgICAgIHNsaWRlclZlcnRpY2FsQ2VsbElzUHJlc3NlZCA9IHByZXNzZWQ7
CiAgICAgZWxzZQotICAgICAgICBzbGlkZXJIb3Jpem9udGFsQ2VsbElzUHJlc3NlZCA9IHByZXNz
ZWQ7IAotICAgIAotICAgIGlmIChwcmVzc2VkICE9IG9sZFByZXNzZWQpIHsgCisgICAgICAgIHNs
aWRlckhvcml6b250YWxDZWxsSXNQcmVzc2VkID0gcHJlc3NlZDsKKworICAgIGlmIChwcmVzc2Vk
ICE9IG9sZFByZXNzZWQpIHsKICAgICAgICAgaWYgKHByZXNzZWQpCiAgICAgICAgICAgICBbc2xp
ZGVyVGh1bWJDZWxsIHN0YXJ0VHJhY2tpbmdBdDpOU1BvaW50KCkgaW5WaWV3Om5pbF07CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIFtzbGlkZXJUaHVtYkNlbGwgc3RvcFRyYWNraW5nOk5TUG9p
bnQoKSBhdDpOU1BvaW50KCkgaW5WaWV3Om5pbCBtb3VzZUlzVXA6WUVTXTsKICAgICB9Ci0gICAg
CisKICAgICBGbG9hdFJlY3QgYm91bmRzID0gcjsKICAgICAvLyBNYWtlIHRoZSBoZWlnaHQgb2Yg
dGhlIHZlcnRpY2FsIHNsaWRlciBzbGlnaHRseSBsYXJnZXIgc28gTlNTbGlkZXJDZWxsIHdpbGwg
ZHJhdyBhIHZlcnRpY2FsIHNsaWRlci4KICAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
ID09IFNsaWRlclRodW1iVmVydGljYWxBcHBlYXJhbmNlKQpAQCAtMTA2NSwxOSArMTA2NCwxOSBA
QCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlNpCiBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBMb2Nh
bEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsK
LSAgICAKKwogICAgIHNldFNlYXJjaENlbGxTdGF0ZShvLCByKTsKLSAgICAKKwogICAgIC8vIFNl
dCB0aGUgc2VhcmNoIGJ1dHRvbiB0byBuaWwgYmVmb3JlIGRyYXdpbmcuICBUaGVuIHJlc2V0IGl0
IHNvIHdlIGNhbiBkcmF3IGl0IGxhdGVyLgogICAgIFtzZWFyY2ggc2V0U2VhcmNoQnV0dG9uQ2Vs
bDpuaWxdOwotICAgIAorCiAgICAgW3NlYXJjaCBkcmF3V2l0aEZyYW1lOk5TUmVjdChyKSBpblZp
ZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+Z2V0RG9jdW1lbnRWaWV3KCldOwogICAgIGlmIChb
c2VhcmNoIHNob3dzRmlyc3RSZXNwb25kZXJdKQogICAgICAgICB3a0RyYXdUZXh0RmllbGRDZWxs
Rm9jdXNSaW5nKHNlYXJjaCwgTlNSZWN0KHIpKTsKLSAgICAgCisKICAgICBbc2VhcmNoIHNldENv
bnRyb2xWaWV3Om5pbF07CiAgICAgW3NlYXJjaCByZXNldFNlYXJjaEJ1dHRvbkNlbGxdOwotICAg
IAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMDg4LDEwICsxMDg3LDEwIEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0ZSgKICAgICAgICAgW3NlYXJjaCBzZXRC
ZXplbFN0eWxlOk5TVGV4dEZpZWxkUm91bmRlZEJlemVsXTsKICAgICAgICAgW3NlYXJjaCBzZXRC
ZXplbGVkOllFU107CiAgICAgICAgIFtzZWFyY2ggc2V0RWRpdGFibGU6WUVTXTsKLSAgICAgICAg
CisKICAgICAgICAgc2VhcmNoTWVudSA9IEhhcmRSZXRhaW5XaXRoTlNSZWxlYXNlKFtbTlNNZW51
IGFsbG9jXSBpbml0V2l0aFRpdGxlOkAiIl0pOwogICAgIH0KLSAgICAKKwogICAgIFtzZWFyY2gg
c2V0Q29udHJvbFNpemU6Y29udHJvbFNpemVGb3JGb250KG8tPnN0eWxlKCkpXTsKIAogICAgIC8v
IFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KQEAgLTExMDMsNyArMTEw
Miw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkU3QKIHsKICAgICBO
U0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsKICAg
ICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHNlbGVjdG9yLCBzdHlsZSwgY29udHJvbFNpemUpOwot
ICAgIAorCiAgICAgLy8gT3ZlcnJpZGUgcGFkZGluZyBzaXplIHRvIG1hdGNoIEFwcEtpdCB0ZXh0
IHBvc2l0aW9uaW5nLgogICAgIGNvbnN0IGludCBwYWRkaW5nID0gMTsKICAgICBzdHlsZS0+c2V0
UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CkBAIC0xMTIyLDcgKzExMjEsNyBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAgICAgTlNSZWN0IGJv
dW5kcyA9IFtzZWFyY2ggY2FuY2VsQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJl
bmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpXTsKICAgICBbW3NlYXJjaCBjYW5j
ZWxCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOmJvdW5kcyBpblZpZXc6by0+dmlldygpLT5mcmFt
ZVZpZXcoKS0+Z2V0RG9jdW1lbnRWaWV3KCldOwogICAgIFtbc2VhcmNoIGNhbmNlbEJ1dHRvbkNl
bGxdIHNldENvbnRyb2xWaWV3Om5pbF07Ci0gCisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAg
LTExNTIsMTIgKzExNTEsMTIgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmll
bGREZQogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpIC0gZW1wdHlSZXN1
bHRzT2Zmc2V0LCBGaXhlZCkpOwogICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVp
Z2h0KCksIEZpeGVkKSk7CiB9Ci0gICAgCisKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2Vh
cmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICByZXR1cm4gZmFs
c2U7CiB9Ci0gICAgCisKIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVG
b3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CkBAIC0xMTY5LDcgKzEx
NjgsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiB7CiAgICAg
Tm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwogICAgIHNldFNl
YXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7Ci0gICAgCisKICAgICBbc2VhcmNo
IHNldE1heGltdW1SZWNlbnRzOjBdOwogICAgIGlmIChbc2VhcmNoIHNlYXJjaE1lbnVUZW1wbGF0
ZV0gIT0gbmlsKQogICAgICAgICBbc2VhcmNoIHNldFNlYXJjaE1lbnVUZW1wbGF0ZTpuaWxdOwpA
QCAtMTIwMyw0ICsxMjAyLDQgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVs
ZFJlcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDE4MjYw
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgpAQCAtMzQsOCArMzQsOCBAQAogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNp
bmNsdWRlICJKU0VkaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckJSLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgorI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTIsMjAgKzUyLDE5IEBA
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0
U3RyZWFtJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqLCBjb25z
dCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgaW50IGluZGVudCA9IDApOwogCiAjaWZuZGVmIFNW
R19TVVBQT1JUCi1zdGF0aWMgVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtICZ0cywg
Y29uc3QgSW50UmVjdCAmcikKK3N0YXRpYyBUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIHJldHVybiB0cyA8PCAiYXQgKCIgPDwg
ci54KCkgPDwgIiwiIDw8IHIueSgpIDw8ICIpIHNpemUgIiA8PCByLndpZHRoKCkgPDwgIngiIDw8
IHIuaGVpZ2h0KCk7CiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0
cmVhbSAmdHMsIGludCBpbmRlbnQpCitzdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFt
JiB0cywgaW50IGluZGVudCkKIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSAhPSBpbmRlbnQ7ICsr
aSkgeworICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVudDsgKytpKQogICAgICAgICB0cyA8
PCAiICAiOwotICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcHJpbnRCb3JkZXJTdHlsZShUZXh0U3Ry
ZWFtICZ0cywgY29uc3QgUmVuZGVyT2JqZWN0ICZvLCBjb25zdCBFQm9yZGVyU3R5bGUgYm9yZGVy
U3R5bGUpCitzdGF0aWMgdm9pZCBwcmludEJvcmRlclN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSkKIHsKICAg
ICBzd2l0Y2ggKGJvcmRlclN0eWxlKSB7CiAgICAgICAgIGNhc2UgQk5PTkU6CkBAIC05OSw0MyAr
OTgsNDIgQEAgc3RhdGljIHZvaWQgcHJpbnRCb3JkZXJTdHlsZShUZXh0U3RyZWFtIAogICAgICAg
ICAgICAgdHMgPDwgImRvdWJsZSI7CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCisK
ICAgICB0cyA8PCAiICI7CiB9CiAKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIGdldFRhZ05hbWUo
Tm9kZSAqbikKK3N0YXRpYyBEZXByZWNhdGVkU3RyaW5nIGdldFRhZ05hbWUoTm9kZSogbikKIHsK
ICAgICBpZiAobi0+aXNEb2N1bWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuICIiOwogICAgIGlm
IChuLT5pc0NvbW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiAiQ09NTUVOVCI7Ci0gICAgcmV0
dXJuIG4tPm5vZGVOYW1lKCkuZGVwcmVjYXRlZFN0cmluZygpOyAKKyAgICByZXR1cm4gbi0+bm9k
ZU5hbWUoKS5kZXByZWNhdGVkU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBib29sIGlzRW1wdHlPclVu
c3R5bGVkQXBwbGVTdHlsZVNwYW4oY29uc3QgTm9kZSAqbm9kZSkKK3N0YXRpYyBib29sIGlzRW1w
dHlPclVuc3R5bGVkQXBwbGVTdHlsZVNwYW4oY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAo
IW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAhbm9kZS0+aGFzVGFnTmFtZShzcGFu
VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgSFRNTEVsZW1lbnQgKmVs
ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudCAqPihub2RlKTsKKyAgICBjb25zdCBI
VE1MRWxlbWVudCogZWxlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSk7
CiAgICAgaWYgKGVsZW0tPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9ICJBcHBsZS1zdHlsZS1z
cGFuIikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgaWYgKCFub2RlLT5oYXND
aGlsZE5vZGVzKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uICppbmxpbmVTdHlsZURlY2wgPSBlbGVtLT5pbmxpbmVTdHlsZURlY2wo
KTsKKworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZURlY2wgPSBl
bGVtLT5pbmxpbmVTdHlsZURlY2woKTsKICAgICByZXR1cm4gKCFpbmxpbmVTdHlsZURlY2wgfHwg
aW5saW5lU3R5bGVEZWNsLT5sZW5ndGgoKSA9PSAwKTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0g
Jm9wZXJhdG9yPDwoVGV4dFN0cmVhbSAmdHMsIGNvbnN0IFJlbmRlck9iamVjdCAmbykKK3N0YXRp
YyBUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmpl
Y3QmIG8pCiB7CiAgICAgdHMgPDwgby5yZW5kZXJOYW1lKCk7Ci0gICAgCi0gICAgaWYgKG8uc3R5
bGUoKSAmJiBvLnN0eWxlKCktPnpJbmRleCgpKSB7CisKKyAgICBpZiAoby5zdHlsZSgpICYmIG8u
c3R5bGUoKS0+ekluZGV4KCkpCiAgICAgICAgIHRzIDw8ICIgekk6ICIgPDwgby5zdHlsZSgpLT56
SW5kZXgoKTsKLSAgICB9Ci0gICAgCisKICAgICBpZiAoby5lbGVtZW50KCkpIHsKICAgICAgICAg
RGVwcmVjYXRlZFN0cmluZyB0YWdOYW1lID0gZ2V0VGFnTmFtZShvLmVsZW1lbnQoKSk7CiAgICAg
ICAgIGlmICghdGFnTmFtZS5pc0VtcHR5KCkpIHsKQEAgLTE0NiwxMCArMTQ0LDEwIEBAIHN0YXRp
YyBUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0KICAgICAgICAgICAgICAgICB0cyA8
PCAiICplbXB0eSBvciB1bnN0eWxlZCBBcHBsZVN0eWxlU3BhbioiOwogICAgICAgICB9CiAgICAg
fQotICAgIAorCiAgICAgSW50UmVjdCByKG8ueFBvcygpLCBvLnlQb3MoKSwgby53aWR0aCgpLCBv
LmhlaWdodCgpKTsKICAgICB0cyA8PCAiICIgPDwgcjsKLSAgICAKKwogICAgIGlmICghby5pc1Rl
eHQoKSkgewogICAgICAgICBpZiAoby5wYXJlbnQoKSAmJiAoby5wYXJlbnQoKS0+c3R5bGUoKS0+
Y29sb3IoKSAhPSBvLnN0eWxlKCktPmNvbG9yKCkpKQogICAgICAgICAgICAgdHMgPDwgIiBbY29s
b3I9IiA8PCBvLnN0eWxlKCktPmNvbG9yKCkubmFtZSgpIDw8ICJdIjsKQEAgLTE1NywxMCArMTU1
LDEwIEBAIHN0YXRpYyBUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0KICAgICAgICAg
ICAgIG8uc3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpICYmIG8uc3R5bGUoKS0+
YmFja2dyb3VuZENvbG9yKCkucmdiKCkpCiAgICAgICAgICAgICAvLyBEbyBub3QgZHVtcCBpbnZh
bGlkIG9yIHRyYW5zcGFyZW50IGJhY2tncm91bmRzLCBzaW5jZSB0aGF0IGlzIHRoZSBkZWZhdWx0
LgogICAgICAgICAgICAgdHMgPDwgIiBbYmdjb2xvcj0iIDw8IG8uc3R5bGUoKS0+YmFja2dyb3Vu
ZENvbG9yKCkubmFtZSgpIDw8ICJdIjsKLSAgICAKKwogICAgICAgICBpZiAoby5ib3JkZXJUb3Ao
KSB8fCBvLmJvcmRlclJpZ2h0KCkgfHwgby5ib3JkZXJCb3R0b20oKSB8fCBvLmJvcmRlckxlZnQo
KSkgewogICAgICAgICAgICAgdHMgPDwgIiBbYm9yZGVyOiI7Ci0gICAgICAgICAgICAKKwogICAg
ICAgICAgICAgQm9yZGVyVmFsdWUgcHJldkJvcmRlcjsKICAgICAgICAgICAgIGlmIChvLnN0eWxl
KCktPmJvcmRlclRvcCgpICE9IHByZXZCb3JkZXIpIHsKICAgICAgICAgICAgICAgICBwcmV2Qm9y
ZGVyID0gby5zdHlsZSgpLT5ib3JkZXJUb3AoKTsKQEAgLTE3MCwxMSArMTY4LDEyIEBAIHN0YXRp
YyBUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0KICAgICAgICAgICAgICAgICAgICAg
dHMgPDwgIiAoIiA8PCBvLmJvcmRlclRvcCgpIDw8ICJweCAiOwogICAgICAgICAgICAgICAgICAg
ICBwcmludEJvcmRlclN0eWxlKHRzLCBvLCBvLnN0eWxlKCktPmJvcmRlclRvcFN0eWxlKCkpOwog
ICAgICAgICAgICAgICAgICAgICBDb2xvciBjb2wgPSBvLnN0eWxlKCktPmJvcmRlclRvcENvbG9y
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29sLmlzVmFsaWQoKSkgY29sID0gby5zdHls
ZSgpLT5jb2xvcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbC5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBvLnN0eWxlKCktPmNvbG9yKCk7CiAgICAgICAg
ICAgICAgICAgICAgIHRzIDw8IGNvbC5uYW1lKCkgPDwgIikiOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoby5zdHlsZSgp
LT5ib3JkZXJSaWdodCgpICE9IHByZXZCb3JkZXIpIHsKICAgICAgICAgICAgICAgICBwcmV2Qm9y
ZGVyID0gby5zdHlsZSgpLT5ib3JkZXJSaWdodCgpOwogICAgICAgICAgICAgICAgIGlmICghby5i
b3JkZXJSaWdodCgpKQpAQCAtMTgzLDExICsxODIsMTIgQEAgc3RhdGljIFRleHRTdHJlYW0gJm9w
ZXJhdG9yPDwoVGV4dFN0cmVhbQogICAgICAgICAgICAgICAgICAgICB0cyA8PCAiICgiIDw8IG8u
Ym9yZGVyUmlnaHQoKSA8PCAicHggIjsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRCb3JkZXJT
dHlsZSh0cywgbywgby5zdHlsZSgpLT5ib3JkZXJSaWdodFN0eWxlKCkpOwogICAgICAgICAgICAg
ICAgICAgICBDb2xvciBjb2wgPSBvLnN0eWxlKCktPmJvcmRlclJpZ2h0Q29sb3IoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjb2wuaXNWYWxpZCgpKSBjb2wgPSBvLnN0eWxlKCktPmNvbG9y
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY29sLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbCA9IG8uc3R5bGUoKS0+Y29sb3IoKTsKICAgICAgICAgICAgICAgICAg
ICAgdHMgPDwgY29sLm5hbWUoKSA8PCAiKSI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChvLnN0eWxlKCktPmJvcmRlckJv
dHRvbSgpICE9IHByZXZCb3JkZXIpIHsKICAgICAgICAgICAgICAgICBwcmV2Qm9yZGVyID0gby5z
dHlsZSgpLT5ib3JkZXJCb3R0b20oKTsKICAgICAgICAgICAgICAgICBpZiAoIW8uYm9yZGVyQm90
dG9tKCkpCkBAIC0xOTYsMjggKzE5NiwzMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSAmb3BlcmF0b3I8
PChUZXh0U3RyZWFtCiAgICAgICAgICAgICAgICAgICAgIHRzIDw8ICIgKCIgPDwgby5ib3JkZXJC
b3R0b20oKSA8PCAicHggIjsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRCb3JkZXJTdHlsZSh0
cywgbywgby5zdHlsZSgpLT5ib3JkZXJCb3R0b21TdHlsZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgQ29sb3IgY29sID0gby5zdHlsZSgpLT5ib3JkZXJCb3R0b21Db2xvcigpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbC5pc1ZhbGlkKCkpIGNvbCA9IG8uc3R5bGUoKS0+Y29sb3IoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2wuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29sID0gby5zdHlsZSgpLT5jb2xvcigpOwogICAgICAgICAgICAgICAgICAgICB0
cyA8PCBjb2wubmFtZSgpIDw8ICIpIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKG8uc3R5bGUoKS0+Ym9yZGVyTGVmdCgp
ICE9IHByZXZCb3JkZXIpIHsKICAgICAgICAgICAgICAgICBwcmV2Qm9yZGVyID0gby5zdHlsZSgp
LT5ib3JkZXJMZWZ0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFvLmJvcmRlckxlZnQoKSkKICAg
ICAgICAgICAgICAgICAgICAgdHMgPDwgIiBub25lIjsKLSAgICAgICAgICAgICAgICBlbHNlIHsg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICB0cyA8PCAiICgiIDw8IG8uYm9yZGVyTGVmdCgpIDw8ICJweCAiOwogICAgICAgICAg
ICAgICAgICAgICBwcmludEJvcmRlclN0eWxlKHRzLCBvLCBvLnN0eWxlKCktPmJvcmRlckxlZnRT
dHlsZSgpKTsKICAgICAgICAgICAgICAgICAgICAgQ29sb3IgY29sID0gby5zdHlsZSgpLT5ib3Jk
ZXJMZWZ0Q29sb3IoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2wuaXNWYWxpZCgpKSBj
b2wgPSBvLnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY29sLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IG8uc3R5bGUoKS0+Y29sb3Io
KTsKICAgICAgICAgICAgICAgICAgICAgdHMgPDwgY29sLm5hbWUoKSA8PCAiKSI7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRz
IDw8ICJdIjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmIChvLmlzVGFibGVDZWxs
KCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVyVGFibGVDZWxsJiBjID0gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyVGFibGVDZWxsJj4obyk7CiAgICAgICAgIHRzIDw8ICIgW3I9IiA8PCBjLnJvdygp
IDw8ICIgYz0iIDw8IGMuY29sKCkgPDwgIiBycz0iIDw8IGMucm93U3BhbigpIDw8ICIgY3M9IiA8
PCBjLmNvbFNwYW4oKSA8PCAiXSI7CkBAIC0yNjMsMTAgKzI2NSwxMCBAQCBzdGF0aWMgdm9pZCB3
cml0ZVRleHRSdW4oVGV4dFN0cmVhbSYgdHMsCiAgICAgfQogICAgIHRzIDw8ICI6ICIKICAgICAg
ICAgPDwgcXVvdGVBbmRFc2NhcGVOb25QcmludGFibGVzKG8uZGF0YSgpLnN1YnN0cmluZyhydW4u
bV9zdGFydCwgcnVuLm1fbGVuKSkKLSAgICAgICAgPDwgIlxuIjsgCisgICAgICAgIDw8ICJcbiI7
CiB9CiAKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSAmdHMsIGNvbnN0IFJlbmRlck9iamVjdCAmbywg
aW50IGluZGVudCkKK3ZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVj
dCYgbywgaW50IGluZGVudCkKIHsKICNpZmRlZiBTVkdfU1VQUE9SVAogICAgIC8vIEZJWE1FOiAg
QSBoYWNraXNoIHdheSB0byBkb2luZyBvdXIgb3duICJ2aXJ0dWFsIiBkaXNwYXRjaApAQCAtMjgw
LDEzICsyODIsMTMgQEAgdm9pZCB3cml0ZShUZXh0U3RyZWFtICZ0cywgY29uc3QgUmVuZGVyTwog
ICAgIH0KICNlbmRpZgogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIAorCiAgICAg
dHMgPDwgbyA8PCAiXG4iOwotICAgIAorCiAgICAgaWYgKG8uaXNUZXh0KCkgJiYgIW8uaXNCUigp
KSB7CiAgICAgICAgIGNvbnN0IFJlbmRlclRleHQmIHRleHQgPSBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJUZXh0Jj4obyk7CiAgICAgICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4dC5m
aXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAg
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMSk7CisgICAgICAgICAgICB3cml0ZUluZGVudCh0
cywgaW5kZW50ICsgMSk7CiAgICAgICAgICAgICB3cml0ZVRleHRSdW4odHMsIHRleHQsICpib3gp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjk2LDcgKzI5OCw3IEBAIHZvaWQgd3JpdGUoVGV4dFN0
cmVhbSAmdHMsIGNvbnN0IFJlbmRlck8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB3
cml0ZSh0cywgKmNoaWxkLCBpbmRlbnQgKyAxKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoby5p
c1dpZGdldCgpKSB7CiAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
UmVuZGVyV2lkZ2V0Jj4obykud2lkZ2V0KCk7CiAgICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0
LT5pc0ZyYW1lVmlldygpKSB7CkBAIC0zMDYsMjAgKzMwOCwxOSBAQCB2b2lkIHdyaXRlKFRleHRT
dHJlYW0gJnRzLCBjb25zdCBSZW5kZXJPCiAgICAgICAgICAgICAgICAgdmlldy0+bGF5b3V0KCk7
CiAgICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGwgPSByb290LT5sYXllcigpOwogICAgICAg
ICAgICAgICAgIGlmIChsKQotICAgICAgICAgICAgICAgICAgICB3cml0ZUxheWVycyh0cywgbCwg
bCwgSW50UmVjdChsLT54UG9zKCksIGwtPnlQb3MoKSwgbC0+d2lkdGgoKSwgbC0+aGVpZ2h0KCkp
LCBpbmRlbnQrMSk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlTGF5ZXJzKHRzLCBsLCBsLCBJ
bnRSZWN0KGwtPnhQb3MoKSwgbC0+eVBvcygpLCBsLT53aWR0aCgpLCBsLT5oZWlnaHQoKSksIGlu
ZGVudCArIDEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMg
dm9pZCB3cml0ZShUZXh0U3RyZWFtICZ0cywgUmVuZGVyTGF5ZXIgJmwsCitzdGF0aWMgdm9pZCB3
cml0ZShUZXh0U3RyZWFtJiB0cywgUmVuZGVyTGF5ZXImIGwsCiAgICAgICAgICAgICAgICAgICBj
b25zdCBJbnRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSW50UmVjdCYgYmFja2dyb3VuZENsaXBS
ZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgSW50UmVjdCYgb3V0bGluZUNsaXBS
ZWN0LAogICAgICAgICAgICAgICAgICAgaW50IGxheWVyVHlwZSA9IDAsIGludCBpbmRlbnQgPSAw
KQogewogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIAotICAgIHRzIDw8ICJsYXll
ciI7Ci0gICAgdHMgPDwgIiAiIDw8IGxheWVyQm91bmRzOworCisgICAgdHMgPDwgImxheWVyICIg
PDwgbGF5ZXJCb3VuZHM7CiAKICAgICBpZiAoIWxheWVyQm91bmRzLmlzRW1wdHkoKSkgewogICAg
ICAgICBpZiAoIWJhY2tncm91bmRDbGlwUmVjdC5jb250YWlucyhsYXllckJvdW5kcykpCkBAIC0z
NDUsMjQgKzM0NiwyNCBAQCBzdGF0aWMgdm9pZCB3cml0ZShUZXh0U3RyZWFtICZ0cywgUmVuZGVy
CiAgICAgICAgIHRzIDw8ICIgbGF5ZXJUeXBlOiBiYWNrZ3JvdW5kIG9ubHkiOwogICAgIGVsc2Ug
aWYgKGxheWVyVHlwZSA9PSAxKQogICAgICAgICB0cyA8PCAiIGxheWVyVHlwZTogZm9yZWdyb3Vu
ZCBvbmx5IjsKLSAgICAKKwogICAgIHRzIDw8ICJcbiI7CiAKICAgICBpZiAobGF5ZXJUeXBlICE9
IC0xKQogICAgICAgICB3cml0ZSh0cywgKmwucmVuZGVyZXIoKSwgaW5kZW50ICsgMSk7CiB9Ci0g
ICAgCi1zdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtICZ0cywgY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGwsCisKK3N0YXRpYyB2b2lkIHdyaXRlTGF5
ZXJzKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJM
YXllciogbCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHBhaW50RGly
dHlSZWN0LCBpbnQgaW5kZW50KQogewogICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3
ZSBzaG91bGQgdXNlLgogICAgIEludFJlY3QgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBS
ZWN0VG9BcHBseSwgb3V0bGluZVJlY3Q7CiAgICAgbC0+Y2FsY3VsYXRlUmVjdHMocm9vdExheWVy
LCBwYWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBs
eSwgb3V0bGluZVJlY3QpOwotICAgIAorCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhcmUgdXAt
dG8tZGF0ZS4KICAgICBsLT51cGRhdGVaT3JkZXJMaXN0cygpOwogICAgIGwtPnVwZGF0ZU92ZXJm
bG93TGlzdCgpOwotICAgIAorCiAgICAgYm9vbCBzaG91bGRQYWludCA9IGwtPmludGVyc2VjdHNE
YW1hZ2VSZWN0KGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0KTsKICAgICBWZWN0b3I8UmVuZGVyTGF5
ZXIqPiogbmVnTGlzdCA9IGwtPm5lZ1pPcmRlckxpc3QoKTsKICAgICBpZiAoc2hvdWxkUGFpbnQg
JiYgbmVnTGlzdCAmJiBuZWdMaXN0LT5zaXplKCkgPiAwKQpAQCAtMzg5LDE4ICszOTAsMTggQEAg
c3RhdGljIHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSAmdHMsIAogICAgIH0KIH0KIAotc3Rh
dGljIERlcHJlY2F0ZWRTdHJpbmcgbm9kZVBvc2l0aW9uKE5vZGUgKm5vZGUpCitzdGF0aWMgRGVw
cmVjYXRlZFN0cmluZyBub2RlUG9zaXRpb24oTm9kZSogbm9kZSkKIHsKICAgICBEZXByZWNhdGVk
U3RyaW5nIHJlc3VsdDsKIAotICAgIE5vZGUgKnA7Ci0gICAgZm9yIChOb2RlICpuID0gbm9kZTsg
bjsgbiA9IHApIHsKLSAgICAgICAgcCA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICAgICAgaWYgKCFw
KQotICAgICAgICAgICAgcCA9IG4tPnNoYWRvd1BhcmVudE5vZGUoKTsKKyAgICBOb2RlKiBwYXJl
bnQ7CisgICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbjsgbiA9IHBhcmVudCkgeworICAgICAgICBw
YXJlbnQgPSBuLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAg
ICAgcGFyZW50ID0gbi0+c2hhZG93UGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAobiAhPSBub2Rl
KQogICAgICAgICAgICAgcmVzdWx0ICs9ICIgb2YgIjsKLSAgICAgICAgaWYgKHApCisgICAgICAg
IGlmIChwYXJlbnQpCiAgICAgICAgICAgICByZXN1bHQgKz0gImNoaWxkICIgKyBEZXByZWNhdGVk
U3RyaW5nOjpudW1iZXIobi0+bm9kZUluZGV4KCkpICsgIiB7IiArIGdldFRhZ05hbWUobikgKyAi
fSI7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCArPSAiZG9jdW1lbnQiOwpAQCAt
NDA5LDE0ICs0MTAsMTQgQEAgc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbm9kZVBvc2l0aW9uKE5v
ZAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlU2VsZWN0aW9uKFRl
eHRTdHJlYW0gJnRzLCBjb25zdCBSZW5kZXJPYmplY3QgKm8pCitzdGF0aWMgdm9pZCB3cml0ZVNl
bGVjdGlvbihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQogewotICAgIE5v
ZGUgKm4gPSBvLT5lbGVtZW50KCk7CisgICAgTm9kZSogbiA9IG8tPmVsZW1lbnQoKTsKICAgICBp
ZiAoIW4gfHwgIW4tPmlzRG9jdW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERv
Y3VtZW50ICpkb2MgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG4pOwotICAgIEZyYW1lICpmcmFt
ZSA9IGRvYy0+ZnJhbWUoKTsKKyAgICBEb2N1bWVudCogZG9jID0gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihuKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2MtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MjUsMTEgKzQyNiwxMCBAQCBzdGF0aWMgdm9pZCB3
cml0ZVNlbGVjdGlvbihUZXh0U3RyZWFtICZ0CiAgICAgICAgIHRzIDw8ICJjYXJldDogcG9zaXRp
b24gIiA8PCBzZWxlY3Rpb24uc3RhcnQoKS5vZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0
aW9uKHNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKSk7CiAgICAgICAgIGlmIChzZWxlY3Rpb24uYWZm
aW5pdHkoKSA9PSBVUFNUUkVBTSkKICAgICAgICAgICAgIHRzIDw8ICIgKHVwc3RyZWFtIGFmZmlu
aXR5KSI7Ci0gICAgICAgIHRzIDw8ICJcbiI7IAotICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmlz
UmFuZ2UoKSkgeworICAgICAgICB0cyA8PCAiXG4iOworICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9u
LmlzUmFuZ2UoKSkKICAgICAgICAgdHMgPDwgInNlbGVjdGlvbiBzdGFydDogcG9zaXRpb24gIiA8
PCBzZWxlY3Rpb24uc3RhcnQoKS5vZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNl
bGVjdGlvbi5zdGFydCgpLm5vZGUoKSkgPDwgIlxuIgotICAgICAgICAgICA8PCAic2VsZWN0aW9u
IGVuZDogICBwb3NpdGlvbiAiIDw8IHNlbGVjdGlvbi5lbmQoKS5vZmZzZXQoKSA8PCAiIG9mICIg
PDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5lbmQoKS5ub2RlKCkpIDw8ICJcbiI7IAotICAgIH0K
KyAgICAgICAgICAgPDwgInNlbGVjdGlvbiBlbmQ6ICAgcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24u
ZW5kKCkub2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCku
bm9kZSgpKSA8PCAiXG4iOwogfQogCiBEZXByZWNhdGVkU3RyaW5nIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oUmVuZGVyT2JqZWN0KiBvKQpAQCAtNDUzLDQgKzQ1Myw0IEBAIERlcHJlY2F0ZWRTdHJp
bmcgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbigKICAgICByZXR1cm4gczsKIH0KIAotfQorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAko
cmV2aXNpb24gMTgyNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIwLDEwICsyMCwxMiBAQAogICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaWZuZGVmIFJlbmRlclRyZWVBc1RleHRfaAor
I2RlZmluZSBSZW5kZXJUcmVlQXNUZXh0X2gKKwogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzMsNCArMzUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgRGVwcmVjYXRlZFN0cmluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFJlbmRlck9iamVj
dCopOwogICAgIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlck9iamVjdCYsIGlu
dCBpbmRlbnQgPSAwKTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
UmVuZGVyVHJlZUFzVGV4dF9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNp
b24gMTgyNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNDMgKzMwLDM1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8jZGVm
aW5lIEJPWF9ERUJVRwotCi1SZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZyYW1l
VmlldyAqdmlldykKK1JlbmRlclZpZXc6OlJlbmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWVWaWV3
KiB2aWV3KQogICAgIDogUmVuZGVyQmxvY2sobm9kZSkKKyAgICAsIG1fZnJhbWVWaWV3KHZpZXcp
CisgICAgLCBtX3NlbGVjdGlvblN0YXJ0KDApCisgICAgLCBtX3NlbGVjdGlvbkVuZCgwKQorICAg
ICwgbV9zZWxlY3Rpb25TdGFydFBvcygtMSkKKyAgICAsIG1fc2VsZWN0aW9uRW5kUG9zKC0xKQor
ICAgICwgbV9wcmludGluZ01vZGUoZmFsc2UpCisgICAgLCBtX3ByaW50SW1hZ2VzKHRydWUpCisg
ICAgLCBtX21heGltYWxPdXRsaW5lU2l6ZSgwKQorICAgICwgbV9mbGV4Qm94SW5GaXJzdExheW91
dCgwKQogewogICAgIC8vIENsZWFyIG91ciBhbm9ueW1vdXMgYml0LCBzZXQgYmVjYXVzZSBSZW5k
ZXJPYmplY3QgYXNzdW1lcwogICAgIC8vIGFueSByZW5kZXJlciB3aXRoIGRvY3VtZW50IGFzIHRo
ZSBub2RlIGlzIGFub255bW91cy4KICAgICBzZXRJc0Fub255bW91cyhmYWxzZSk7Ci0gICAgICAg
IAorCiAgICAgLy8gaW5pdCBSZW5kZXJPYmplY3QgYXR0cmlidXRlcwogICAgIHNldElubGluZShm
YWxzZSk7CiAKLSAgICBtX2ZyYW1lVmlldyA9IHZpZXc7CiAgICAgLy8gdHJ5IHRvIGNvbnRyYWlu
IHRoZSB3aWR0aCB0byB0aGUgdmlld3Mgd2lkdGgKLQotICAgIG1fbWluV2lkdGggPSAwOworICAg
IG1fd2lkdGggPSAwOwogICAgIG1faGVpZ2h0ID0gMDsKLQotICAgIG1fd2lkdGggPSBtX21pbldp
ZHRoOwotICAgIG1fbWF4V2lkdGggPSBtX21pbldpZHRoOworICAgIG1fbWluV2lkdGggPSAwOwor
ICAgIG1fbWF4V2lkdGggPSAwOwogCiAgICAgc2V0UG9zaXRpb25lZCh0cnVlKTsgLy8gdG8gMCww
IDopCiAKLSAgICBtX3ByaW50aW5nTW9kZSA9IGZhbHNlOwotICAgIG1fcHJpbnRJbWFnZXMgPSB0
cnVlOwotCi0gICAgbV9tYXhpbWFsT3V0bGluZVNpemUgPSAwOwotICAgIAotICAgIG1fc2VsZWN0
aW9uU3RhcnQgPSAwOwotICAgIG1fc2VsZWN0aW9uRW5kID0gMDsKLSAgICBtX3NlbGVjdGlvblN0
YXJ0UG9zID0gLTE7Ci0gICAgbV9zZWxlY3Rpb25FbmRQb3MgPSAtMTsKLQogICAgIC8vIENyZWF0
ZSBhIG5ldyByb290IGxheWVyIGZvciBvdXIgbGF5ZXIgaGllcmFyY2h5LgogICAgIG1fbGF5ZXIg
PSBuZXcgKG5vZGUtPmRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpIFJlbmRlckxheWVyKHRoaXMp
OwotICAgIAotICAgIG1fZmxleEJveEluRmlyc3RMYXlvdXQgPSAwOwogfQogCiBSZW5kZXJWaWV3
Ojp+UmVuZGVyVmlldygpCkBAIC04OSw3ICs4MSw3IEBAIHZvaWQgUmVuZGVyVmlldzo6Y2FsY1dp
ZHRoKCkKIAogdm9pZCBSZW5kZXJWaWV3OjpjYWxjTWluTWF4V2lkdGgoKQogewotICAgIEFTU0VS
VCggIW1pbk1heEtub3duKCkgKTsKKyAgICBBU1NFUlQoIW1pbk1heEtub3duKCkpOwogCiAgICAg
UmVuZGVyQmxvY2s6OmNhbGNNaW5NYXhXaWR0aCgpOwogCkBAIC0xMDMsMTMgKzk1LDEzIEBAIHZv
aWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKICAgICBpZiAobV9wcmludGluZ01vZGUpCiAgICAgICAg
IG1fbWluV2lkdGggPSBtX3dpZHRoOwogCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYWxsIGp1c3Qg
YSB0ZXJyaWJsZSB3b3JrYXJvdW5kIGZvciBidWdzIGluIGxheW91dCB3aGVuIHRoZSB2aWV3IGhl
aWdodCBjaGFuZ2VzLiAgCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYWxsIGp1c3QgYSB0ZXJyaWJs
ZSB3b3JrYXJvdW5kIGZvciBidWdzIGluIGxheW91dCB3aGVuIHRoZSB2aWV3IGhlaWdodCBjaGFu
Z2VzLgogICAgIC8vIEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGRldGVjdCB2aWV3IGhlaWdodCBjaGFu
Z2VzLiAgV2UncmUgZ3Vlc3NpbmcgdGhhdCBpZiB3ZSBkb24ndCBuZWVkIGxheW91dCB0aGF0IHRo
ZSByZWFzb24KICAgICAvLyB3ZSB3ZXJlIGNhbGxlZCBpcyBiZWNhdXNlIG9mIGEgRnJhbWVWaWV3
IGJvdW5kcyBjaGFuZ2UuCiAgICAgaWYgKCFuZWVkc0xheW91dCgpKSB7CiAgICAgICAgIHNldENo
aWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogICAgICAgICBzZXRNaW5NYXhLbm93bihmYWxz
ZSk7Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjID0gZmlyc3RDaGlsZCgpOyBjOyBjID0g
Yy0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGMgPSBmaXJzdENo
aWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQogICAgICAgICAgICAgYy0+c2V0Q2hpbGRO
ZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAgICAgfQogCkBAIC0xMjYsMTggKzExOCwxOCBAQCB2
b2lkIFJlbmRlclZpZXc6OmxheW91dCgpCiAgICAgICAgIHNldEhlaWdodChtX2ZyYW1lVmlldy0+
dmlzaWJsZUhlaWdodCgpKTsKICAgICB9CiAKLSAgICAvLyAjIyMgd2UgY291bGQgbWF5YmUgZG8g
dGhlIGNhbGwgYmVsb3cgYmV0dGVyIGFuZCBvbmx5IHBhc3MgdHJ1ZSBpZiB0aGUgZG9jc2l6ZSBj
aGFuZ2VkLgotICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKCB0cnVlICk7CisgICAgLy8gRklY
TUU6IHdlIGNvdWxkIG1heWJlIGRvIHRoZSBjYWxsIGJlbG93IGJldHRlciBhbmQgb25seSBwYXNz
IHRydWUgaWYgdGhlIGRvY3NpemUgY2hhbmdlZC4KKyAgICBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0
cyh0cnVlKTsKIAogICAgIGxheWVyKCktPnNldEhlaWdodChtYXgoZG9jaCwgbV9oZWlnaHQpKTsK
ICAgICBsYXllcigpLT5zZXRXaWR0aChtYXgoZG9jdywgbV93aWR0aCkpOwotICAgIAorCiAgICAg
c2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCi1ib29sIFJlbmRlclZpZXc6OmFic29sdXRlUG9z
aXRpb24oaW50ICZ4UG9zLCBpbnQgJnlQb3MsIGJvb2wgZikKK2Jvb2wgUmVuZGVyVmlldzo6YWJz
b2x1dGVQb3NpdGlvbihpbnQmIHhQb3MsIGludCYgeVBvcywgYm9vbCBmaXhlZCkKIHsKLSAgICBp
ZiAoIGYgJiYgbV9mcmFtZVZpZXcpIHsKKyAgICBpZiAoZml4ZWQgJiYgbV9mcmFtZVZpZXcpIHsK
ICAgICAgICAgeFBvcyA9IG1fZnJhbWVWaWV3LT5jb250ZW50c1goKTsKICAgICAgICAgeVBvcyA9
IG1fZnJhbWVWaWV3LT5jb250ZW50c1koKTsKICAgICB9IGVsc2UKQEAgLTE1MCw3ICsxNDIsNyBA
QCB2b2lkIFJlbmRlclZpZXc6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJCiAgICAgLy8gQ2FjaGUg
dGhlIHByaW50IHJlY3QgYmVjYXVzZSB0aGUgZGlydHkgcmVjdCBjb3VsZCBnZXQgY2hhbmdlZCBk
dXJpbmcgcGFpbnRpbmcuCiAgICAgaWYgKG1fcHJpbnRpbmdNb2RlKQogICAgICAgICBzZXRQcmlu
dFJlY3QocGFpbnRJbmZvLnJlY3QpOwotICAgIAorCiAgICAgcGFpbnRPYmplY3QocGFpbnRJbmZv
LCB0eCwgdHkpOwogfQogCkBAIC0xODksNyArMTgxLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpyZXBh
aW50Vmlld1JlY3RhbmdsZShjbwogewogICAgIGlmIChtX3ByaW50aW5nTW9kZSB8fCB1ci53aWR0
aCgpID09IDAgfHwgdXIuaGVpZ2h0KCkgPT0gMCkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAg
ICAgSW50UmVjdCB2ciA9IHZpZXdSZWN0KCk7CiAgICAgaWYgKG1fZnJhbWVWaWV3ICYmIHVyLmlu
dGVyc2VjdHModnIpKSB7CiAgICAgICAgIC8vIFdlIGFsd2F5cyBqdXN0IGludmFsaWRhdGUgdGhl
IHJvb3Qgdmlldywgc2luY2Ugd2UgY291bGQgYmUgYW4gaWZyYW1lIHRoYXQgaXMgY2xpcHBlZCBv
dXQKQEAgLTIwNyw3ICsxOTksNyBAQCB2b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRWaWV3UmVjdGFu
Z2xlKGNvCiAgICAgICAgICAgICBpbnQgeUZyYW1lT2Zmc2V0ID0gbV9mcmFtZVZpZXctPmhhc0Jv
cmRlcigpID8gMiA6IDA7CiAgICAgICAgICAgICBpbnQgeEZyYW1lT2Zmc2V0ID0gbV9mcmFtZVZp
ZXctPmhhc0JvcmRlcigpID8gMSA6IDA7CiAgICAgICAgICAgICByLm1vdmUob2JqLT5ib3JkZXJM
ZWZ0KCkgKyBvYmotPnBhZGRpbmdMZWZ0KCkgKyB4RnJhbWVPZmZzZXQsCi0gICAgICAgICAgICAg
ICAgb2JqLT5ib3JkZXJUb3AoKSArIG9iai0+cGFkZGluZ1RvcCgpICsgeUZyYW1lT2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICAgICBvYmotPmJvcmRlclRvcCgpICsgb2JqLT5wYWRkaW5nVG9wKCkg
KyB5RnJhbWVPZmZzZXQpOwogICAgICAgICAgICAgb2JqLT5yZXBhaW50UmVjdGFuZ2xlKHIsIGlt
bWVkaWF0ZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjIsNiArMjE0LDcgQEAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlckFmdGVyUG9zaXRpb24oUmVuZAogewogICAgIGlmICghb2JqZWN0KQogICAg
ICAgICByZXR1cm4gMDsKKwogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBvYmplY3QtPmNoaWxk
QXQob2Zmc2V0KTsKICAgICByZXR1cm4gY2hpbGQgPyBjaGlsZCA6IG9iamVjdC0+bmV4dEluUHJl
T3JkZXJBZnRlckNoaWxkcmVuKCk7CiB9CkBAIC0yMzQsNyArMjI3LDYgQEAgSW50UmVjdCBSZW5k
ZXJWaWV3OjpzZWxlY3Rpb25SZWN0KCkgY29ucwogICAgIFJlbmRlck9iamVjdCogb3MgPSBtX3Nl
bGVjdGlvblN0YXJ0OwogICAgIFJlbmRlck9iamVjdCogc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3Np
dGlvbihtX3NlbGVjdGlvbkVuZCwgbV9zZWxlY3Rpb25FbmRQb3MpOwogICAgIHdoaWxlIChvcyAm
JiBvcyAhPSBzdG9wKSB7Ci0gICAgICAgIAogICAgICAgICBpZiAoKG9zLT5jYW5CZVNlbGVjdGlv
bkxlYWYoKSB8fCBvcyA9PSBtX3NlbGVjdGlvblN0YXJ0IHx8IG9zID09IG1fc2VsZWN0aW9uRW5k
KSAmJiBvcy0+c2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25lKSB7CiAgICAgICAgICAg
ICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1h
cmdpbiBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KIC8vICAgICAgICAgIGFz
c2VydCghc2VsZWN0ZWRPYmplY3RzLmdldChvcykpOwpAQCAtMjQ4LDcgKzI0MCw3IEBAIEludFJl
Y3QgUmVuZGVyVmlldzo6c2VsZWN0aW9uUmVjdCgpIGNvbnMKICAgICAgICAgICAgICAgICBjYiA9
IGNiLT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICBvcyA9IG9zLT5uZXh0SW5QcmVPcmRlcigpOwogICAgIH0KIApAQCAtMjYz
LDE2ICsyNTUsMTYgQEAgSW50UmVjdCBSZW5kZXJWaWV3OjpzZWxlY3Rpb25SZWN0KCkgY29ucwog
ICAgIHJldHVybiBzZWxSZWN0OwogfQogCi12b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihS
ZW5kZXJPYmplY3QgKnMsIGludCBzcCwgUmVuZGVyT2JqZWN0ICplLCBpbnQgZXApCit2b2lkIFJl
bmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3Ms
IFJlbmRlck9iamVjdCogZW5kLCBpbnQgZW5kUG9zKQogewotICAgIC8vIE1ha2Ugc3VyZSBib3Ro
IG91ciBzdGFydCBhbmQgZW5kIG9iamVjdHMgYXJlIGRlZmluZWQuIAorICAgIC8vIE1ha2Ugc3Vy
ZSBib3RoIG91ciBzdGFydCBhbmQgZW5kIG9iamVjdHMgYXJlIGRlZmluZWQuCiAgICAgLy8gQ2hl
Y2sgd3d3Lm1zbmJjLmNvbSBhbmQgdHJ5IGNsaWNraW5nIGFyb3VuZCB0byBmaW5kIHRoZSBjYXNl
IHdoZXJlIHRoaXMgaGFwcGVuZWQuCi0gICAgaWYgKChzICYmICFlKSB8fCAoZSAmJiAhcykpCisg
ICAgaWYgKChzdGFydCAmJiAhZW5kKSB8fCAoZW5kICYmICFzdGFydCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIEp1c3QgcmV0dXJuIGlmIHRoZSBzZWxlY3Rpb24gaGFzbid0IGNoYW5nZWQu
Ci0gICAgaWYgKG1fc2VsZWN0aW9uU3RhcnQgPT0gcyAmJiBtX3NlbGVjdGlvblN0YXJ0UG9zID09
IHNwICYmCi0gICAgICAgIG1fc2VsZWN0aW9uRW5kID09IGUgJiYgbV9zZWxlY3Rpb25FbmRQb3Mg
PT0gZXApCisgICAgaWYgKG1fc2VsZWN0aW9uU3RhcnQgPT0gc3RhcnQgJiYgbV9zZWxlY3Rpb25T
dGFydFBvcyA9PSBzdGFydFBvcyAmJgorICAgICAgICBtX3NlbGVjdGlvbkVuZCA9PSBlbmQgJiYg
bV9zZWxlY3Rpb25FbmRQb3MgPT0gZW5kUG9zKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBS
ZWNvcmQgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzLiAgVGhlc2Ugd2lsbCBiZSB1c2VkIGxhdGVy
CkBAIC0zMDcsNyArMjk5LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVy
T2JqZQogICAgICAgICAgICAgICAgIGNiID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG9zID0gb3MtPm5leHRJblBy
ZU9yZGVyKCk7CiAgICAgfQogCkBAIC0zMTcsMzYgKzMwOSwzNSBAQCB2b2lkIFJlbmRlclZpZXc6
OnNldFNlbGVjdGlvbihSZW5kZXJPYmplCiAgICAgICAgIGktPmZpcnN0LT5zZXRTZWxlY3Rpb25T
dGF0ZShTZWxlY3Rpb25Ob25lKTsKIAogICAgIC8vIHNldCBzZWxlY3Rpb24gc3RhcnQgYW5kIGVu
ZAotICAgIG1fc2VsZWN0aW9uU3RhcnQgPSBzOwotICAgIG1fc2VsZWN0aW9uU3RhcnRQb3MgPSBz
cDsKLSAgICBtX3NlbGVjdGlvbkVuZCA9IGU7Ci0gICAgbV9zZWxlY3Rpb25FbmRQb3MgPSBlcDsK
KyAgICBtX3NlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7CisgICAgbV9zZWxlY3Rpb25TdGFydFBvcyA9
IHN0YXJ0UG9zOworICAgIG1fc2VsZWN0aW9uRW5kID0gZW5kOworICAgIG1fc2VsZWN0aW9uRW5k
UG9zID0gZW5kUG9zOwogCiAgICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24gc3RhdHVzIG9mIGFs
bCBvYmplY3RzIGJldHdlZW4gbV9zZWxlY3Rpb25TdGFydCBhbmQgbV9zZWxlY3Rpb25FbmQKLSAg
ICBpZiAocyAmJiBzID09IGUpCi0gICAgICAgIHMtPnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlv
bkJvdGgpOworICAgIGlmIChzdGFydCAmJiBzdGFydCA9PSBlbmQpCisgICAgICAgIHN0YXJ0LT5z
ZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25Cb3RoKTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYg
KHMpCi0gICAgICAgICAgICBzLT5zZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGFydCk7Ci0g
ICAgICAgIGlmIChlKQotICAgICAgICAgICAgZS0+c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9u
RW5kKTsKKyAgICAgICAgaWYgKHN0YXJ0KQorICAgICAgICAgICAgc3RhcnQtPnNldFNlbGVjdGlv
blN0YXRlKFNlbGVjdGlvblN0YXJ0KTsKKyAgICAgICAgaWYgKGVuZCkKKyAgICAgICAgICAgIGVu
ZC0+c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uRW5kKTsKICAgICB9CiAKLSAgICBSZW5kZXJP
YmplY3QqIG8gPSBzOwotICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oZSwgZXApOwot
ICAgIAorICAgIFJlbmRlck9iamVjdCogbyA9IHN0YXJ0OworICAgIHN0b3AgPSByZW5kZXJlckFm
dGVyUG9zaXRpb24oZW5kLCBlbmRQb3MpOworCiAgICAgd2hpbGUgKG8gJiYgbyAhPSBzdG9wKSB7
Ci0gICAgICAgIGlmIChvICE9IHMgJiYgbyAhPSBlICYmIG8tPmNhbkJlU2VsZWN0aW9uTGVhZigp
KQorICAgICAgICBpZiAobyAhPSBzdGFydCAmJiBvICE9IGVuZCAmJiBvLT5jYW5CZVNlbGVjdGlv
bkxlYWYoKSkKICAgICAgICAgICAgIG8tPnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvbkluc2lk
ZSk7CiAgICAgICAgIG8gPSBvLT5uZXh0SW5QcmVPcmRlcigpOwogICAgIH0KIAogICAgIC8vIE5v
dyB0aGF0IHRoZSBzZWxlY3Rpb24gc3RhdGUgaGFzIGJlZW4gdXBkYXRlZCBmb3IgdGhlIG5ldyBv
YmplY3RzLCB3YWxrIHRoZW0gYWdhaW4gYW5kCiAgICAgLy8gcHV0IHRoZW0gaW4gdGhlIG5ldyBv
YmplY3RzIGxpc3QuCi0gICAgbyA9IHM7CisgICAgbyA9IHN0YXJ0OwogICAgIHdoaWxlIChvICYm
IG8gIT0gc3RvcCkgewotICAgICAgICAKLSAgICAgICAgaWYgKChvLT5jYW5CZVNlbGVjdGlvbkxl
YWYoKSB8fCBvID09IHMgfHwgbyA9PSBlKSAmJiBvLT5zZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVj
dGlvbk5vbmUpIHsKKyAgICAgICAgaWYgKChvLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSB8fCBvID09
IHN0YXJ0IHx8IG8gPT0gZW5kKSAmJiBvLT5zZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5v
bmUpIHsKICAgICAgICAgICAgIG5ld1NlbGVjdGVkT2JqZWN0cy5zZXQobywgbmV3IFNlbGVjdGlv
bkluZm8obykpOwogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gby0+Y29udGFpbmluZ0Js
b2NrKCk7CiAgICAgICAgICAgICB3aGlsZSAoY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkgewpA
QCAtMzg4LDcgKzM3OSw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9i
amUKICAgICAgICAgfQogICAgICAgICBkZWxldGUgb2xkSW5mbzsKICAgICB9Ci0gICAgCisKICAg
ICAvLyBBbnkgbmV3IG9iamVjdHMgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9s
ZCBvYmplY3RzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KICAgICBTZWxl
Y3RlZE9iamVjdE1hcDo6aXRlcmF0b3IgbmV3T2JqZWN0c0VuZCA9IG5ld1NlbGVjdGVkT2JqZWN0
cy5lbmQoKTsKICAgICBmb3IgKFNlbGVjdGVkT2JqZWN0TWFwOjppdGVyYXRvciBpID0gbmV3U2Vs
ZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gbmV3T2JqZWN0c0VuZDsgKytpKSB7CkBAIC00MTMs
NyArNDA0LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZQogICAg
ICAgICB9CiAgICAgICAgIGRlbGV0ZSBvbGRJbmZvOwogICAgIH0KLSAgICAKKwogICAgIC8vIEFu
eSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tz
IGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KICAgICBTZWxlY3RlZEJsb2Nr
TWFwOjppdGVyYXRvciBuZXdCbG9ja3NFbmQgPSBuZXdTZWxlY3RlZEJsb2Nrcy5lbmQoKTsKICAg
ICBmb3IgKFNlbGVjdGVkQmxvY2tNYXA6Oml0ZXJhdG9yIGkgPSBuZXdTZWxlY3RlZEJsb2Nrcy5i
ZWdpbigpOyBpICE9IG5ld0Jsb2Nrc0VuZDsgKytpKSB7CkBAIC00MjgsMjYgKzQxOSwyNSBAQCB2
b2lkIFJlbmRlclZpZXc6OmNsZWFyU2VsZWN0aW9uKCkKICAgICBzZXRTZWxlY3Rpb24oMCwgLTEs
IDAsIC0xKTsKIH0KIAotdm9pZCBSZW5kZXJWaWV3OjpzZWxlY3Rpb25TdGFydEVuZChpbnQmIHNw
b3MsIGludCYgZXBvcykKK3ZvaWQgUmVuZGVyVmlldzo6c2VsZWN0aW9uU3RhcnRFbmQoaW50JiBz
dGFydFBvcywgaW50JiBlbmRQb3MpCiB7Ci0gICAgc3BvcyA9IG1fc2VsZWN0aW9uU3RhcnRQb3M7
Ci0gICAgZXBvcyA9IG1fc2VsZWN0aW9uRW5kUG9zOworICAgIHN0YXJ0UG9zID0gbV9zZWxlY3Rp
b25TdGFydFBvczsKKyAgICBlbmRQb3MgPSBtX3NlbGVjdGlvbkVuZFBvczsKIH0KIAogdm9pZCBS
ZW5kZXJWaWV3Ojp1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKQogewogICAgIFJlbmRlck9iamVjdFNl
dDo6aXRlcmF0b3IgZW5kID0gbV93aWRnZXRzLmVuZCgpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0
U2V0OjppdGVyYXRvciBpdCA9IG1fd2lkZ2V0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICBmb3IgKFJlbmRlck9iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBtX3dpZGdldHMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAoKml0KS0+dXBkYXRlV2lkZ2V0UG9zaXRpb24o
KTsKLSAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6YWRkV2lkZ2V0KFJlbmRlck9iamVjdCAq
bykKK3ZvaWQgUmVuZGVyVmlldzo6YWRkV2lkZ2V0KFJlbmRlck9iamVjdCogbykKIHsKICAgICBt
X3dpZGdldHMuYWRkKG8pOwogfQogCi12b2lkIFJlbmRlclZpZXc6OnJlbW92ZVdpZGdldChSZW5k
ZXJPYmplY3QgKm8pCit2b2lkIFJlbmRlclZpZXc6OnJlbW92ZVdpZGdldChSZW5kZXJPYmplY3Qq
IG8pCiB7CiAgICAgbV93aWRnZXRzLnJlbW92ZShvKTsKIH0KQEAgLTQ1OCw5ICs0NDgsOSBAQCBJ
bnRSZWN0IFJlbmRlclZpZXc6OnZpZXdSZWN0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIEludFJl
Y3QoMCwgMCwgbV93aWR0aCwgbV9oZWlnaHQpOwogICAgIGlmIChtX2ZyYW1lVmlldykKICAgICAg
ICAgcmV0dXJuIEludFJlY3QobV9mcmFtZVZpZXctPmNvbnRlbnRzWCgpLAotICAgICAgICAgICAg
bV9mcmFtZVZpZXctPmNvbnRlbnRzWSgpLAotICAgICAgICAgICAgbV9mcmFtZVZpZXctPnZpc2li
bGVXaWR0aCgpLAotICAgICAgICAgICAgbV9mcmFtZVZpZXctPnZpc2libGVIZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVWaWV3LT5jb250ZW50c1koKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgbV9mcmFtZVZpZXctPnZpc2libGVXaWR0aCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lVmlldy0+dmlzaWJsZUhlaWdodCgpKTsKICAgICByZXR1cm4gSW50
UmVjdCgpOwogfQogCkBAIC00NzMsMTcgKzQ2MywxNyBAQCBpbnQgUmVuZGVyVmlldzo6ZG9jSGVp
Z2h0KCkgY29uc3QKICAgICAgICAgaCA9IG1fZnJhbWVWaWV3LT52aXNpYmxlSGVpZ2h0KCk7CiAK
ICAgICBpbnQgbG93ZXN0UG9zID0gbG93ZXN0UG9zaXRpb24oKTsKLSAgICBpZiggbG93ZXN0UG9z
ID4gaCApCisgICAgaWYgKGxvd2VzdFBvcyA+IGgpCiAgICAgICAgIGggPSBsb3dlc3RQb3M7CiAK
ICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IGRvIGFueSBtYXJnaW4gY29sbGFwc2luZy4KICAg
ICAvLyBJbnN0ZWFkIG9mIHRoaXMgZGggY29tcHV0YXRpb24gd2Ugc2hvdWxkIGtlZXAgdGhlIHJl
c3VsdAogICAgIC8vIHdoZW4gd2UgY2FsbCBSZW5kZXJCbG9jazo6bGF5b3V0LgogICAgIGludCBk
aCA9IDA7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QgKmMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBj
LT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGMgPSBmaXJzdENoaWxk
KCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQogICAgICAgICBkaCArPSBjLT5oZWlnaHQoKSAr
IGMtPm1hcmdpblRvcCgpICsgYy0+bWFyZ2luQm90dG9tKCk7Ci0gICAgfQotICAgIGlmKCBkaCA+
IGggKQorCisgICAgaWYgKGRoID4gaCkKICAgICAgICAgaCA9IGRoOwogCiAgICAgcmV0dXJuIGg7
CkBAIC00OTgsMzEgKzQ4OCwzMyBAQCBpbnQgUmVuZGVyVmlldzo6ZG9jV2lkdGgoKSBjb25zdAog
ICAgICAgICB3ID0gbV9mcmFtZVZpZXctPnZpc2libGVXaWR0aCgpOwogCiAgICAgaW50IHJpZ2h0
bW9zdFBvcyA9IHJpZ2h0bW9zdFBvc2l0aW9uKCk7Ci0gICAgaWYoIHJpZ2h0bW9zdFBvcyA+IHcg
KQorICAgIGlmIChyaWdodG1vc3RQb3MgPiB3KQogICAgICAgICB3ID0gcmlnaHRtb3N0UG9zOwog
CiAgICAgZm9yIChSZW5kZXJPYmplY3QgKmMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgIGludCBkdyA9IGMtPndpZHRoKCkgKyBjLT5tYXJnaW5MZWZ0
KCkgKyBjLT5tYXJnaW5SaWdodCgpOwotICAgICAgICBpZiggZHcgPiB3ICkKKyAgICAgICAgaWYg
KGR3ID4gdykKICAgICAgICAgICAgIHcgPSBkdzsKICAgICB9CisKICAgICByZXR1cm4gdzsKIH0K
IAogLy8gVGhlIGlkZWEgaGVyZSBpcyB0byB0YWtlIGludG8gYWNjb3VudCB3aGF0IG9iamVjdCBp
cyBtb3ZpbmcgdGhlIHBhZ2luYXRpb24gcG9pbnQsIGFuZAogLy8gdGh1cyBjaG9vc2UgdGhlIGJl
c3QgcGxhY2UgdG8gY2hvcCBpdC4KLXZvaWQgUmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0
KGludCB5LCBSZW5kZXJPYmplY3QgKmZvclJlbmRlcmVyLCBib29sIGZvcmNlZEJyZWFrKQordm9p
ZCBSZW5kZXJWaWV3OjpzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJlbmRlck9iamVjdCogZm9y
UmVuZGVyZXIsIGJvb2wgZm9yY2VkQnJlYWspCiB7CiAgICAgLy8gTm9ib2R5IGVsc2UgY2FuIHNl
dCBhIHBhZ2UgYnJlYWsgb25jZSB3ZSBoYXZlIGEgZm9yY2VkIGJyZWFrLgotICAgIGlmIChtX2Zv
cmNlZFBhZ2VCcmVhaykgcmV0dXJuOwotICAgIAorICAgIGlmIChtX2ZvcmNlZFBhZ2VCcmVhaykK
KyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gRm9yY2VkIGJyZWFrcyBhbHdheXMgd2luIG92ZXIg
dW5mb3JjZWQgYnJlYWtzLgogICAgIGlmIChmb3JjZWRCcmVhaykgewogICAgICAgICBtX2ZvcmNl
ZFBhZ2VCcmVhayA9IHRydWU7CiAgICAgICAgIG1fYmVzdFRydW5jYXRlZEF0ID0geTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIC8vIHByZWZlciB0aGUgd2lkZXN0IG9iamVj
dCB3aG8gdHJpZXMgdG8gbW92ZSB0aGUgcGFnaW5hdGlvbiBwb2ludAogICAgIGludCB3aWR0aCA9
IGZvclJlbmRlcmVyLT53aWR0aCgpOwogICAgIGlmICh3aWR0aCA+IG1fdHJ1bmNhdG9yV2lkdGgp
IHsKQEAgLTUzMSw0ICs1MjMsNCBAQCB2b2lkIFJlbmRlclZpZXc6OnNldEJlc3RUcnVuY2F0ZWRB
dChpbnQgCiAgICAgfQogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiAxODI2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAogICoKICAqLwogCi0j
aWZuZGVmIHJlbmRlcl9jYW52YXNfaAotI2RlZmluZSByZW5kZXJfY2FudmFzX2gKKyNpZm5kZWYg
UmVuZGVyVmlld19oCisjZGVmaW5lIFJlbmRlclZpZXdfaAogCiAjaW5jbHVkZSAiUmVuZGVyQmxv
Y2suaCIKIApAQCAtMzUsNyArMzUsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyVmlldyhOb2RlKiwg
RnJhbWVWaWV3Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyVmlldygpOwogCi0gICAgdmlydHVhbCBj
b25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclZpZXciOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
clZpZXciOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJWaWV3KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogCkBAIC00MywyNCArNDMsMjQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjYWxjV2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FsY0hlaWdodCgpOwogICAgIHZpcnR1
YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWJzb2x1dGVQb3Np
dGlvbihpbnQgJnhQb3MsIGludCYgeVBvcywgYm9vbCBmID0gZmFsc2UpOwotICAgIAorICAgIHZp
cnR1YWwgYm9vbCBhYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZp
eGVkID0gZmFsc2UpOworCiAgICAgaW50IGRvY0hlaWdodCgpIGNvbnN0OwogICAgIGludCBkb2NX
aWR0aCgpIGNvbnN0OwogCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lVmlldzsgfQogCiAgICAgdmlydHVhbCBib29sIGhhc092ZXJoYW5naW5nRmxvYXRz
KCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcmVwYWludFZpZXdS
ZWN0YW5nbGUoY29uc3QgSW50UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSk7Ci0gICAg
CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVwYWludFZpZXdSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYs
IGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpOworCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0
aW9ucyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0gICAgCi0gICAgdm9pZCBzZXRTZWxl
Y3Rpb24oUmVuZGVyT2JqZWN0ICpzLCBpbnQgc3AsIFJlbmRlck9iamVjdCAqZSwgaW50IGVwKTsK
KworICAgIHZvaWQgc2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBv
cywgUmVuZGVyT2JqZWN0KiBlbmQsIGludCBlbmRQb3MpOwogICAgIHZvaWQgY2xlYXJTZWxlY3Rp
b24oKTsKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCAqc2VsZWN0aW9uU3RhcnQoKSBjb25zdCB7
IHJldHVybiBtX3NlbGVjdGlvblN0YXJ0OyB9Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKnNl
bGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uRW5kOyB9CisgICAgdmlydHVh
bCBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rp
b25TdGFydDsgfQorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZDsgfQogCiAgICAgdm9pZCBzZXRQcmludGluZ01vZGUo
Ym9vbCBwcmludCkgeyBtX3ByaW50aW5nTW9kZSA9IHByaW50OyB9CiAgICAgYm9vbCBwcmludGlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nTW9kZTsgfQpAQCAtNjksMzYgKzY5LDMx
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRydW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1bmNhdGVk
QXQgPSB5OyBtX2Jlc3RUcnVuY2F0ZWRBdCA9IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBtX2ZvcmNl
ZFBhZ2VCcmVhayA9IGZhbHNlOyB9CiAgICAgdm9pZCBzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHks
IFJlbmRlck9iamVjdCAqZm9yUmVuZGVyZXIsIGJvb2wgZm9yY2VkQnJlYWsgPSBmYWxzZSk7CiAg
ICAgaW50IGJlc3RUcnVuY2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVzdFRydW5jYXRlZEF0
OyB9Ci1wcml2YXRlOgotICAgIGludCBtX2Jlc3RUcnVuY2F0ZWRBdDsKLSAgICBpbnQgbV90cnVu
Y2F0b3JXaWR0aDsKLSAgICBib29sIG1fZm9yY2VkUGFnZUJyZWFrOwotcHVibGljOgorCiAgICAg
aW50IHRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV90cnVuY2F0ZWRBdDsgfQogCiAgICAg
dmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQg
dHkpOwotICAgIAorCiAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0KCkgY29uc3Q7Ci0gICAgCisK
ICAgICB2b2lkIHNldE1heGltYWxPdXRsaW5lU2l6ZShpbnQgbykgeyBtX21heGltYWxPdXRsaW5l
U2l6ZSA9IG87IH0KICAgICBpbnQgbWF4aW1hbE91dGxpbmVTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhpbWFsT3V0bGluZVNpemU7IH0KIAogICAgIHZpcnR1YWwgSW50UmVjdCB2aWV3UmVjdCgp
IGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3Bvcywg
aW50JiBlcG9zKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQoaW50JiBzdGFy
dFBvcywgaW50JiBlbmRQb3MpOwogCiAgICAgSW50UmVjdCBwcmludFJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3ByaW50UmVjdDsgfQogICAgIHZvaWQgc2V0UHJpbnRSZWN0KGNvbnN0IEludFJlY3Qm
IHIpIHsgbV9wcmludFJlY3QgPSByOyB9CiAKICAgICB2b2lkIHVwZGF0ZVdpZGdldFBvc2l0aW9u
cygpOwotICAgIHZvaWQgYWRkV2lkZ2V0KFJlbmRlck9iamVjdCAqKTsKLSAgICB2b2lkIHJlbW92
ZVdpZGdldChSZW5kZXJPYmplY3QgKik7Ci0gICAgCisgICAgdm9pZCBhZGRXaWRnZXQoUmVuZGVy
T2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVXaWRnZXQoUmVuZGVyT2JqZWN0Kik7CisKICAgICB2
b2lkIHNldEZsZXhCb3hJbkZpcnN0TGF5b3V0KFJlbmRlck9iamVjdCogcikgeyBtX2ZsZXhCb3hJ
bkZpcnN0TGF5b3V0ID0gcjsgfQogICAgIFJlbmRlck9iamVjdCogZmxleEJveEluRmlyc3RMYXlv
dXQoKSB7IHJldHVybiBtX2ZsZXhCb3hJbkZpcnN0TGF5b3V0OyB9CiAKIHByb3RlY3RlZDoKLQog
ICAgIEZyYW1lVmlldyogbV9mcmFtZVZpZXc7CiAKICAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0
aW9uU3RhcnQ7CkBAIC0xMTAsMTcgKzEwNSwyMiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3By
aW50aW5nTW9kZTsKICAgICBib29sIG1fcHJpbnRJbWFnZXM7CiAgICAgaW50IG1fdHJ1bmNhdGVk
QXQ7Ci0gICAgCisKICAgICBpbnQgbV9tYXhpbWFsT3V0bGluZVNpemU7IC8vIFVzZWQgdG8gYXBw
bHkgYSBmdWRnZSBmYWN0b3IgdG8gZGlydHktcmVjdCBjaGVja3Mgb24gYmxvY2tzL3RhYmxlcy4K
ICAgICBJbnRSZWN0IG1fcHJpbnRSZWN0OyAvLyBVc2VkIHdoZW4gcHJpbnRpbmcuCiAKLSAgICB0
eXBlZGVmIEhhc2hTZXQ8UmVuZGVyT2JqZWN0ICo+IFJlbmRlck9iamVjdFNldDsKKyAgICB0eXBl
ZGVmIEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj4gUmVuZGVyT2JqZWN0U2V0OwogCiAgICAgUmVuZGVy
T2JqZWN0U2V0IG1fd2lkZ2V0czsKLSAgICAKKwogICAgIFJlbmRlck9iamVjdCogbV9mbGV4Qm94
SW5GaXJzdExheW91dDsKKworcHJpdmF0ZToKKyAgICBpbnQgbV9iZXN0VHJ1bmNhdGVkQXQ7Cisg
ICAgaW50IG1fdHJ1bmNhdG9yV2lkdGg7CisgICAgYm9vbCBtX2ZvcmNlZFBhZ2VCcmVhazsKIH07
CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVy
Vmlld19oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDE4MjYw
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEsMTAgKzIxLDExIEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCiAg
Ki8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogCi0j
aW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIiAKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnQuaCIKQEAgLTY0LDggKzY1LDggQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OmRlc3Ryb3koKQogICAg
IC8vIGJvdGggUmVuZGVyQm94OjpkZXN0cm95KCkgYW5kIFJlbmRlck9iamVjdDo6ZGVzdHJveSgp
LgogICAgIC8vIEZpeCBvcmlnaW5hbGx5IG1hZGUgZm9yIDxyZGFyOi8vcHJvYmxlbS80MjI4ODE4
Pi4KIAotICAgIGlmIChSZW5kZXJWaWV3ICpjID0gdmlldygpKQotICAgICAgICBjLT5yZW1vdmVX
aWRnZXQodGhpcyk7CisgICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkpCisgICAgICAgIHYt
PnJlbW92ZVdpZGdldCh0aGlzKTsKIAogICAgIGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+
cmVtb3ZlKHRoaXMpOwogCkBAIC03OSwxMyArODAsMTMgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OmRl
c3Ryb3koKQogCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9sYXllcjsKICAgICBSZW5kZXJB
cmVuYSogYXJlbmEgPSByZW5kZXJBcmVuYSgpOwotICAgIAorCiAgICAgaWYgKGxheWVyKQogICAg
ICAgICBsYXllci0+Y2xlYXJDbGlwUmVjdCgpOwotICAgIAorCiAgICAgc2V0Tm9kZSgwKTsKICAg
ICBkZXJlZihhcmVuYSk7Ci0gICAgCisKICAgICBpZiAobGF5ZXIpCiAgICAgICAgIGxheWVyLT5k
ZXN0cm95KGFyZW5hKTsKIH0KQEAgLTk5LDcgKzEwMCw3IEBAIFJlbmRlcldpZGdldDo6flJlbmRl
cldpZGdldCgpCiB2b2lkIFJlbmRlcldpZGdldDo6cmVzaXplV2lkZ2V0KFdpZGdldCogd2lkZ2V0
LCBpbnQgdywgaW50IGgpCiB7CiAgICAgaWYgKGVsZW1lbnQoKSAmJiAod2lkZ2V0LT53aWR0aCgp
ICE9IHcgfHwgd2lkZ2V0LT5oZWlnaHQoKSAhPSBoKSkgewotICAgICAgICBSZW5kZXJBcmVuYSAq
YXJlbmEgPSByZWYoKTsKKyAgICAgICAgUmVuZGVyQXJlbmEqIGFyZW5hID0gcmVmKCk7CiAgICAg
ICAgIGVsZW1lbnQoKS0+cmVmKCk7CiAgICAgICAgIHdpZGdldC0+cmVzaXplKHcsIGgpOwogICAg
ICAgICBlbGVtZW50KCktPmRlcmVmKCk7CkBAIC0xNTAsOSArMTUxLDkgQEAgdm9pZCBSZW5kZXJX
aWRnZXQ6OnNlbmRDb25zdW1lZE1vdXNlVXAoVwogICAgIGRlcmVmKGFyZW5hKTsKIH0KIAotdm9p
ZCBSZW5kZXJXaWRnZXQ6OnNldFN0eWxlKFJlbmRlclN0eWxlICpfc3R5bGUpCit2b2lkIFJlbmRl
cldpZGdldDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQogewotICAgIFJlbmRlclJl
cGxhY2VkOjpzZXRTdHlsZShfc3R5bGUpOworICAgIFJlbmRlclJlcGxhY2VkOjpzZXRTdHlsZShu
ZXdTdHlsZSk7CiAgICAgaWYgKG1fd2lkZ2V0KSB7CiAgICAgICAgIG1fd2lkZ2V0LT5zZXRGb250
KHN0eWxlKCktPmZvbnQoKSk7CiAgICAgICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSkKQEAgLTE3MCw3ICsxNzEsNyBAQCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWluCiAgICAgdHggKz0gbV94OwogICAgIHR5ICs9IG1feTsKIAotICAgIGlmIChz
aG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcigpICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWlu
dFBoYXNlT3V0bGluZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5l
KSAKKyAgICBpZiAoc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiBwYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZU91dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhh
c2VTZWxmT3V0bGluZSkKICAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHR4
LCB0eSk7CiAKICAgICBpZiAoIW1fdmlldyB8fCBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCkBAIC0yNDIs
MjYgKzI0MywyOSBAQCB2b2lkIFJlbmRlcldpZGdldDo6dXBkYXRlV2lkZ2V0UG9zaXRpb24oCiB7
CiAgICAgaWYgKCFtX3dpZGdldCkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGludCB4LCB5
LCB3aWR0aCwgaGVpZ2h0OworCisgICAgaW50IHg7CisgICAgaW50IHk7CiAgICAgYWJzb2x1dGVQ
b3NpdGlvbih4LCB5KTsKICAgICB4ICs9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAg
ICAgeSArPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKLSAgICB3aWR0aCA9IG1fd2lkdGgg
LSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdS
aWdodCgpOwotICAgIGhlaWdodCA9IG1faGVpZ2h0IC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0
b20oKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKTsKLSAgICBJbnRSZWN0IG5ld0Jv
dW5kcyh4LHksd2lkdGgsaGVpZ2h0KTsKKworICAgIGludCB3aWR0aCA9IG1fd2lkdGggLSBib3Jk
ZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFkZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgp
OworICAgIGludCBoZWlnaHQgPSBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9t
KCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7CisKKyAgICBJbnRSZWN0IG5ld0Jv
dW5kcyh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBJbnRSZWN0IG9sZEJvdW5kcyhtX3dpZGdl
dC0+ZnJhbWVHZW9tZXRyeSgpKTsKICAgICBpZiAobmV3Qm91bmRzICE9IG9sZEJvdW5kcykgewog
ICAgICAgICAvLyBUaGUgd2lkZ2V0IGNoYW5nZWQgcG9zaXRpb25zLiAgVXBkYXRlIHRoZSBmcmFt
ZSBnZW9tZXRyeS4KICAgICAgICAgaWYgKGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJWaWV3KiBjID0gdmlldygpOwotICAgICAgICAgICAgaWYgKCFj
LT5wcmludGluZ01vZGUoKSkgewotICAgICAgICAgICAgICAgIGMtPnJlcGFpbnRWaWV3UmVjdGFu
Z2xlKG9sZEJvdW5kcyk7Ci0gICAgICAgICAgICAgICAgYy0+cmVwYWludFZpZXdSZWN0YW5nbGUo
bmV3Qm91bmRzKTsKKyAgICAgICAgICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7CisgICAgICAg
ICAgICBpZiAoIXYtPnByaW50aW5nTW9kZSgpKSB7CisgICAgICAgICAgICAgICAgdi0+cmVwYWlu
dFZpZXdSZWN0YW5nbGUob2xkQm91bmRzKTsKKyAgICAgICAgICAgICAgICB2LT5yZXBhaW50Vmll
d1JlY3RhbmdsZShuZXdCb3VuZHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgUmVuZGVyQXJlbmEgKmFyZW5hID0gcmVmKCk7CisgICAgICAgIFJlbmRlckFyZW5hKiBhcmVu
YSA9IHJlZigpOwogICAgICAgICBlbGVtZW50KCktPnJlZigpOwogICAgICAgICBtX3dpZGdldC0+
c2V0RnJhbWVHZW9tZXRyeShuZXdCb3VuZHMpOwogICAgICAgICBlbGVtZW50KCktPmRlcmVmKCk7
CkBAIC0yNjksMTEgKzI3MywxMSBAQCB2b2lkIFJlbmRlcldpZGdldDo6dXBkYXRlV2lkZ2V0UG9z
aXRpb24oCiAgICAgfQogfQogCi12b2lkIFJlbmRlcldpZGdldDo6c2V0U2VsZWN0aW9uU3RhdGUo
U2VsZWN0aW9uU3RhdGUgcykgCit2b2lkIFJlbmRlcldpZGdldDo6c2V0U2VsZWN0aW9uU3RhdGUo
U2VsZWN0aW9uU3RhdGUgc3RhdGUpCiB7Ci0gICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gcykg
ewotICAgICAgICBSZW5kZXJSZXBsYWNlZDo6c2V0U2VsZWN0aW9uU3RhdGUocyk7Ci0gICAgICAg
IG1fc2VsZWN0aW9uU3RhdGUgPSBzOworICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IHN0YXRl
KSB7CisgICAgICAgIFJlbmRlclJlcGxhY2VkOjpzZXRTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7Cisg
ICAgICAgIG1fc2VsZWN0aW9uU3RhdGUgPSBzdGF0ZTsKICAgICAgICAgaWYgKG1fd2lkZ2V0KQog
ICAgICAgICAgICAgbV93aWRnZXQtPnNldElzU2VsZWN0ZWQoaXNTZWxlY3RlZCgpKTsKICAgICB9
CkBAIC0yODMsNCArMjg3LDUgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OmRlbGV0ZVdpZGdldCgpCiB7
CiAgICAgZGVsZXRlIG1fd2lkZ2V0OwogfQotfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMTgyNjApCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qKgotKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaHRtbCByZW5kZXJlciBm
b3IgS0RFLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGh0bWwgcmVuZGVyZXIgZm9yIEtE
RS4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
ICAqCkBAIC0yNSwxMiArMjUsMTIgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkVsbGlwc2lzQm94LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAKICNpZiBQTEFURk9S
TShNQUMpCiAjaW5jbHVkZSAiRnJhbWVNYWMuaCIKICNlbmRpZgotI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNzQsNyArNzQsNyBAQCB2b2lk
IFJvb3RJbmxpbmVCb3g6OnBsYWNlRWxsaXBzaXMoY29uc3QgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW5saW5lQm94KiBtYXJrdXBCb3gpCiB7CiAgICAgLy8gQ3JlYXRlIGFu
IGVsbGlwc2lzIGJveC4KLSAgICBtX2VsbGlwc2lzQm94ID0gbmV3IChtX29iamVjdC0+cmVuZGVy
QXJlbmEoKSkgRWxsaXBzaXNCb3gobV9vYmplY3QsIGVsbGlwc2lzU3RyLCB0aGlzLCAKKyAgICBt
X2VsbGlwc2lzQm94ID0gbmV3IChtX29iamVjdC0+cmVuZGVyQXJlbmEoKSkgRWxsaXBzaXNCb3go
bV9vYmplY3QsIGVsbGlwc2lzU3RyLCB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpc1dpZHRoIC0gKG1hcmt1
cEJveCA/IG1hcmt1cEJveC0+d2lkdGgoKSA6IDApLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5UG9zKCksIGhlaWdodCgpLCBi
YXNlbGluZSgpLCAhcHJldlJvb3RCb3goKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwQm94KTsKQEAgLTE3NCwyNCAr
MTc0LDI1IEBAIHZvaWQgUm9vdElubGluZUJveDo6Y2hpbGRSZW1vdmVkKElubGluZUIKICAgICB9
CiB9CiAKLUdhcFJlY3RzIFJvb3RJbmxpbmVCb3g6OmZpbGxMaW5lU2VsZWN0aW9uR2FwKGludCBz
ZWxUb3AsIGludCBzZWxIZWlnaHQsIFJlbmRlckJsb2NrKiByb290QmxvY2ssIGludCBibG9ja1gs
IGludCBibG9ja1ksIGludCB0eCwgaW50IHR5LCAKK0dhcFJlY3RzIFJvb3RJbmxpbmVCb3g6OmZp
bGxMaW5lU2VsZWN0aW9uR2FwKGludCBzZWxUb3AsIGludCBzZWxIZWlnaHQsIFJlbmRlckJsb2Nr
KiByb290QmxvY2ssIGludCBibG9ja1gsIGludCBibG9ja1ksIGludCB0eCwgaW50IHR5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8qIHBhaW50SW5mbykKIHsKLSAgICBHYXBSZWN0cyByZXN1bHQ7CiAgICAg
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBsaW5lU3RhdGUgPSBzZWxlY3Rpb25TdGF0ZSgp
OwogCiAgICAgYm9vbCBsZWZ0R2FwLCByaWdodEdhcDsKICAgICBibG9jaygpLT5nZXRIb3Jpem9u
dGFsU2VsZWN0aW9uR2FwSW5mbyhsaW5lU3RhdGUsIGxlZnRHYXAsIHJpZ2h0R2FwKTsKIAorICAg
IEdhcFJlY3RzIHJlc3VsdDsKKwogICAgIElubGluZUJveCogZmlyc3RCb3ggPSBmaXJzdFNlbGVj
dGVkQm94KCk7CiAgICAgSW5saW5lQm94KiBsYXN0Qm94ID0gbGFzdFNlbGVjdGVkQm94KCk7CiAg
ICAgaWYgKGxlZnRHYXApCi0gICAgICAgIHJlc3VsdC51bml0ZUxlZnQoYmxvY2soKS0+ZmlsbExl
ZnRTZWxlY3Rpb25HYXAoZmlyc3RCb3gtPnBhcmVudCgpLT5vYmplY3QoKSwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RCb3gtPnhQ
b3MoKSwgc2VsVG9wLCBzZWxIZWlnaHQsIAorICAgICAgICByZXN1bHQudW5pdGVMZWZ0KGJsb2Nr
KCktPmZpbGxMZWZ0U2VsZWN0aW9uR2FwKGZpcnN0Qm94LT5wYXJlbnQoKS0+b2JqZWN0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmly
c3RCb3gtPnhQb3MoKSwgc2VsVG9wLCBzZWxIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2Nr
WSwgdHgsIHR5LCBwYWludEluZm8pKTsKICAgICBpZiAocmlnaHRHYXApCi0gICAgICAgIHJlc3Vs
dC51bml0ZVJpZ2h0KGJsb2NrKCktPmZpbGxSaWdodFNlbGVjdGlvbkdhcChsYXN0Qm94LT5wYXJl
bnQoKS0+b2JqZWN0KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGFzdEJveC0+eFBvcygpICsgbGFzdEJveC0+d2lkdGgoKSwgc2Vs
VG9wLCBzZWxIZWlnaHQsIAorICAgICAgICByZXN1bHQudW5pdGVSaWdodChibG9jaygpLT5maWxs
UmlnaHRTZWxlY3Rpb25HYXAobGFzdEJveC0+cGFyZW50KCktPm9iamVjdCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEJveC0+
eFBvcygpICsgbGFzdEJveC0+d2lkdGgoKSwgc2VsVG9wLCBzZWxIZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290QmxvY2ss
IGJsb2NrWCwgYmxvY2tZLCB0eCwgdHksIHBhaW50SW5mbykpOwogCiAgICAgaWYgKGZpcnN0Qm94
ICYmIGZpcnN0Qm94ICE9IGxhc3RCb3gpIHsKQEAgLTIzNSwyMyArMjM2LDI3IEBAIFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uU3RhdGUgUm9vdElubGluZUIKICAgICAgICAgaWYgKHN0YXRlID09IFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uQm90aCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICAKKwogICAgIHJldHVybiBzdGF0ZTsKIH0KIAogSW5saW5lQm94KiBSb290SW5saW5lQm94Ojpm
aXJzdFNlbGVjdGVkQm94KCkKIHsKLSAgICBmb3IgKElubGluZUJveCogYm94ID0gZmlyc3RMZWFm
Q2hpbGQoKTsgYm94OyBib3ggPSBib3gtPm5leHRMZWFmQ2hpbGQoKSkKKyAgICBmb3IgKElubGlu
ZUJveCogYm94ID0gZmlyc3RMZWFmQ2hpbGQoKTsgYm94OyBib3ggPSBib3gtPm5leHRMZWFmQ2hp
bGQoKSkgewogICAgICAgICBpZiAoYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uTm9uZSkKICAgICAgICAgICAgIHJldHVybiBib3g7CisgICAgfQorCiAgICAg
cmV0dXJuIDA7CiB9CiAKIElubGluZUJveCogUm9vdElubGluZUJveDo6bGFzdFNlbGVjdGVkQm94
KCkKIHsKLSAgICBmb3IgKElubGluZUJveCogYm94ID0gbGFzdExlYWZDaGlsZCgpOyBib3g7IGJv
eCA9IGJveC0+cHJldkxlYWZDaGlsZCgpKQorICAgIGZvciAoSW5saW5lQm94KiBib3ggPSBsYXN0
TGVhZkNoaWxkKCk7IGJveDsgYm94ID0gYm94LT5wcmV2TGVhZkNoaWxkKCkpIHsKICAgICAgICAg
aWYgKGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUp
CiAgICAgICAgICAgICByZXR1cm4gYm94OworICAgIH0KKwogICAgIHJldHVybiAwOwogfQogCkBA
IC0yNTksNyArMjY0LDcgQEAgaW50IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcCgpCiB7CiAg
ICAgaWYgKCFwcmV2Um9vdEJveCgpKQogICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb25Ub3A7Ci0g
ICAgCisKICAgICBpbnQgcHJldkJvdHRvbSA9IHByZXZSb290Qm94KCktPnNlbGVjdGlvbkJvdHRv
bSgpOwogICAgIGlmIChwcmV2Qm90dG9tIDwgbV9zZWxlY3Rpb25Ub3AgJiYgYmxvY2soKS0+Y29u
dGFpbnNGbG9hdHMoKSkgewogICAgICAgICAvLyBUaGlzIGxpbmUgaGFzIGFjdHVhbGx5IGJlZW4g
bW92ZWQgZnVydGhlciBkb3duLCBwcm9iYWJseSBmcm9tIGEgbGFyZ2UgbGluZS1oZWlnaHQsIGJ1
dCBwb3NzaWJseSBiZWNhdXNlIHRoZQpAQCAtMjcyLDcgKzI3Nyw3IEBAIGludCBSb290SW5saW5l
Qm94OjpzZWxlY3Rpb25Ub3AoKQogICAgICAgICBpZiAocHJldkxlZnQgPiBuZXdMZWZ0IHx8IHBy
ZXZSaWdodCA8IG5ld1JpZ2h0KQogICAgICAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9uVG9wOwog
ICAgIH0KLSAgICAKKwogICAgIHJldHVybiBwcmV2Qm90dG9tOwogfQogCkBAIC0yODEsMjggKzI4
NiwyOCBAQCBSZW5kZXJCbG9jayogUm9vdElubGluZUJveDo6YmxvY2soKSBjb25zCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4obV9vYmplY3QpOwogfQogCi1JbmxpbmVCb3gq
IFJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpbGRGb3JYUG9zKGludCBfeCwgaW50IF90eCkK
K0lubGluZUJveCogUm9vdElubGluZUJveDo6Y2xvc2VzdExlYWZDaGlsZEZvclhQb3MoaW50IHgs
IGludCB0eCkKIHsKLSAgICBJbmxpbmVCb3ggKmZpcnN0TGVhZiA9IGZpcnN0TGVhZkNoaWxkQWZ0
ZXJCb3goKTsKLSAgICBJbmxpbmVCb3ggKmxhc3RMZWFmID0gbGFzdExlYWZDaGlsZEJlZm9yZUJv
eCgpOworICAgIElubGluZUJveCogZmlyc3RMZWFmID0gZmlyc3RMZWFmQ2hpbGRBZnRlckJveCgp
OworICAgIElubGluZUJveCogbGFzdExlYWYgPSBsYXN0TGVhZkNoaWxkQmVmb3JlQm94KCk7CiAg
ICAgaWYgKGZpcnN0TGVhZiA9PSBsYXN0TGVhZikKICAgICAgICAgcmV0dXJuIGZpcnN0TGVhZjsK
LSAgICAKKwogICAgIC8vIEF2b2lkIHJldHVybmluZyBhIGxpc3QgbWFya2VyIHdoZW4gcG9zc2li
bGUuCi0gICAgaWYgKF94IDw9IF90eCArIGZpcnN0TGVhZi0+bV94ICYmICFmaXJzdExlYWYtPm9i
amVjdCgpLT5pc0xpc3RNYXJrZXIoKSkKKyAgICBpZiAoeCA8PSB0eCArIGZpcnN0TGVhZi0+bV94
ICYmICFmaXJzdExlYWYtPm9iamVjdCgpLT5pc0xpc3RNYXJrZXIoKSkKICAgICAgICAgLy8gVGhl
IHggY29vcmRpbmF0ZSBpcyBsZXNzIG9yIGVxdWFsIHRvIGxlZnQgZWRnZSBvZiB0aGUgZmlyc3RM
ZWFmLgogICAgICAgICAvLyBSZXR1cm4gaXQuCiAgICAgICAgIHJldHVybiBmaXJzdExlYWY7Ci0g
ICAgCi0gICAgaWYgKF94ID49IF90eCArIGxhc3RMZWFmLT5tX3ggKyBsYXN0TGVhZi0+bV93aWR0
aCAmJiAhbGFzdExlYWYtPm9iamVjdCgpLT5pc0xpc3RNYXJrZXIoKSkKKworICAgIGlmICh4ID49
IHR4ICsgbGFzdExlYWYtPm1feCArIGxhc3RMZWFmLT5tX3dpZHRoICYmICFsYXN0TGVhZi0+b2Jq
ZWN0KCktPmlzTGlzdE1hcmtlcigpKQogICAgICAgICAvLyBUaGUgeCBjb29yZGluYXRlIGlzIGdy
ZWF0ZXIgb3IgZXF1YWwgdG8gcmlnaHQgZWRnZSBvZiB0aGUgbGFzdExlYWYuCiAgICAgICAgIC8v
IFJldHVybiBpdC4KICAgICAgICAgcmV0dXJuIGxhc3RMZWFmOwogCi0gICAgZm9yIChJbmxpbmVC
b3ggKmxlYWYgPSBmaXJzdExlYWY7IGxlYWYgJiYgbGVhZiAhPSBsYXN0TGVhZjsgbGVhZiA9IGxl
YWYtPm5leHRMZWFmQ2hpbGQoKSkgeworICAgIGZvciAoSW5saW5lQm94KiBsZWFmID0gZmlyc3RM
ZWFmOyBsZWFmICYmIGxlYWYgIT0gbGFzdExlYWY7IGxlYWYgPSBsZWFmLT5uZXh0TGVhZkNoaWxk
KCkpIHsKICAgICAgICAgaWYgKCFsZWFmLT5vYmplY3QoKS0+aXNMaXN0TWFya2VyKCkpIHsKLSAg
ICAgICAgICAgIGludCBsZWFmWCA9IF90eCArIGxlYWYtPm1feDsKLSAgICAgICAgICAgIGlmIChf
eCA8IGxlYWZYICsgbGVhZi0+bV93aWR0aCkKKyAgICAgICAgICAgIGludCBsZWFmWCA9IHR4ICsg
bGVhZi0+bV94OworICAgICAgICAgICAgaWYgKHggPCBsZWFmWCArIGxlYWYtPm1fd2lkdGgpCiAg
ICAgICAgICAgICAgICAgLy8gVGhlIHggY29vcmRpbmF0ZSBpcyBsZXNzIHRoYW4gdGhlIHJpZ2h0
IGVkZ2Ugb2YgdGhlIGJveC4KICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gaXQuCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxlYWY7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCShy
ZXZpc2lvbiAxODI2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtMjAsOCArMjAsOCBAQAogICoKICAqLwogCi0jaWZuZGVmIFJvb3RJbmxp
bmVCb3hfSAotI2RlZmluZSBSb290SW5saW5lQm94X0gKKyNpZm5kZWYgUm9vdElubGluZUJveF9o
CisjZGVmaW5lIFJvb3RJbmxpbmVCb3hfaAogCiAjaW5jbHVkZSAiYmlkaS5oIgogI2luY2x1ZGUg
IklubGluZUZsb3dCb3guaCIKQEAgLTMwLDcgKzMwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBFbGxpcHNpc0JveDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7Ci0KIHN0cnVjdCBHYXBS
ZWN0czsKIAogY2xhc3MgUm9vdElubGluZUJveCA6IHB1YmxpYyBJbmxpbmVGbG93Qm94IHsKQEAg
LTUwLDQ3ICs0OSw1MiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9lbGxpcHNpc0JveCgwKQogICAg
IHsKICAgICB9Ci0gICAgICAgIAotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFJlbmRlckFyZW5h
KiByZW5kZXJBcmVuYSk7Ci0gICAgdm9pZCBkZXRhY2hFbGxpcHNpc0JveChSZW5kZXJBcmVuYSog
cmVuZGVyQXJlbmEpOworCisgICAgdmlydHVhbCBib29sIGlzUm9vdElubGluZUJveCgpIHsgcmV0
dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFJlbmRlckFyZW5hKik7Cisg
ICAgdm9pZCBkZXRhY2hFbGxpcHNpc0JveChSZW5kZXJBcmVuYSopOwogCiAgICAgUm9vdElubGlu
ZUJveCogbmV4dFJvb3RCb3goKSB7IHJldHVybiBzdGF0aWNfY2FzdDxSb290SW5saW5lQm94Kj4o
bV9uZXh0TGluZSk7IH0KICAgICBSb290SW5saW5lQm94KiBwcmV2Um9vdEJveCgpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PFJvb3RJbmxpbmVCb3gqPihtX3ByZXZMaW5lKTsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGFkanVzdFBvc2l0aW9uKGludCBkeCwgaW50IGR5KTsKLSAgICAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNSb290SW5saW5lQm94KCkgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVhbCBp
bnQgdG9wT3ZlcmZsb3coKSB7IHJldHVybiBtX3RvcE92ZXJmbG93OyB9CiAgICAgdmlydHVhbCBp
bnQgYm90dG9tT3ZlcmZsb3coKSB7IHJldHVybiBtX2JvdHRvbU92ZXJmbG93OyB9CiAgICAgdmly
dHVhbCBpbnQgbGVmdE92ZXJmbG93KCkgeyByZXR1cm4gbV9sZWZ0T3ZlcmZsb3c7IH0KICAgICB2
aXJ0dWFsIGludCByaWdodE92ZXJmbG93KCkgeyByZXR1cm4gbV9yaWdodE92ZXJmbG93OyB9CisK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVydGljYWxPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgdG9wLCBp
bnQgYm90dG9tKSB7IG1fdG9wT3ZlcmZsb3cgPSB0b3A7IG1fYm90dG9tT3ZlcmZsb3cgPSBib3R0
b207IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmVydGljYWxTZWxlY3Rpb25Qb3NpdGlvbnMoaW50
IHRvcCwgaW50IGJvdHRvbSkgeyBtX3NlbGVjdGlvblRvcCA9IHRvcDsgbV9zZWxlY3Rpb25Cb3R0
b20gPSBib3R0b207IH0KICAgICB2b2lkIHNldEhvcml6b250YWxPdmVyZmxvd1Bvc2l0aW9ucyhp
bnQgbGVmdCwgaW50IHJpZ2h0KSB7IG1fbGVmdE92ZXJmbG93ID0gbGVmdDsgbV9yaWdodE92ZXJm
bG93ID0gcmlnaHQ7IH0KLSAgICB2b2lkIHNldExpbmVCcmVha0luZm8oUmVuZGVyT2JqZWN0KiBv
YmosIHVuc2lnbmVkIGJyZWFrUG9zLCBCaWRpU3RhdHVzKiBzdGF0dXMsIEJpZGlDb250ZXh0KiBj
b250ZXh0KTsKLSAgICB2b2lkIHNldExpbmVCcmVha1BvcyhpbnQgcCkgeyBtX2xpbmVCcmVha1Bv
cyA9IHA7IH0KIAotICAgIHZvaWQgc2V0QmxvY2tIZWlnaHQoaW50IGgpIHsgbV9ibG9ja0hlaWdo
dCA9IGg7IH0KLSAgICB2b2lkIHNldEVuZHNXaXRoQnJlYWsoYm9vbCBiKSB7IG1fZW5kc1dpdGhC
cmVhayA9IGI7IH0KLSAgICAKLSAgICBpbnQgYmxvY2tIZWlnaHQoKSBjb25zdCB7IHJldHVybiBt
X2Jsb2NrSGVpZ2h0OyB9Ci0gICAgYm9vbCBlbmRzV2l0aEJyZWFrKCkgY29uc3QgeyByZXR1cm4g
bV9lbmRzV2l0aEJyZWFrOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZlcnRpY2FsU2VsZWN0aW9u
UG9zaXRpb25zKGludCB0b3AsIGludCBib3R0b20pIHsgbV9zZWxlY3Rpb25Ub3AgPSB0b3A7IG1f
c2VsZWN0aW9uQm90dG9tID0gYm90dG9tOyB9CisKICAgICBSZW5kZXJPYmplY3QqIGxpbmVCcmVh
a09iaigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJyZWFrT2JqOyB9Ci0gICAgdW5zaWduZWQgbGlu
ZUJyZWFrUG9zKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQnJlYWtQb3M7IH0KICAgICBCaWRpU3Rh
dHVzIGxpbmVCcmVha0JpZGlTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCcmVha0JpZGlT
dGF0dXM7IH0KICAgICBCaWRpQ29udGV4dCogbGluZUJyZWFrQmlkaUNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2xpbmVCcmVha0NvbnRleHQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldExpbmVCcmVh
a0luZm8oUmVuZGVyT2JqZWN0KiwgdW5zaWduZWQgYnJlYWtQb3MsIEJpZGlTdGF0dXMqLCBCaWRp
Q29udGV4dCopOworCisgICAgdW5zaWduZWQgbGluZUJyZWFrUG9zKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lQnJlYWtQb3M7IH0KKyAgICB2b2lkIHNldExpbmVCcmVha1Bvcyh1bnNpZ25lZCBwKSB7
IG1fbGluZUJyZWFrUG9zID0gcDsgfQorCisgICAgaW50IGJsb2NrSGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9ja0hlaWdodDsgfQorICAgIHZvaWQgc2V0QmxvY2tIZWlnaHQoaW50IGgpIHsg
bV9ibG9ja0hlaWdodCA9IGg7IH0KKworICAgIGJvb2wgZW5kc1dpdGhCcmVhaygpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kc1dpdGhCcmVhazsgfQorICAgIHZvaWQgc2V0RW5kc1dpdGhCcmVhayhib29s
IGIpIHsgbV9lbmRzV2l0aEJyZWFrID0gYjsgfQogCiAgICAgdm9pZCBjaGlsZFJlbW92ZWQoSW5s
aW5lQm94KiBib3gpOwogCiAgICAgYm9vbCBjYW5BY2NvbW1vZGF0ZUVsbGlwc2lzKGJvb2wgbHRy
LCBpbnQgYmxvY2tFZGdlLCBpbnQgbGluZUJveEVkZ2UsIGludCBlbGxpcHNpc1dpZHRoKTsKICAg
ICB2b2lkIHBsYWNlRWxsaXBzaXMoY29uc3QgQXRvbWljU3RyaW5nJiBlbGxpcHNpc1N0ciwgYm9v
bCBsdHIsIGludCBibG9ja0VkZ2UsIGludCBlbGxpcHNpc1dpZHRoLCBJbmxpbmVCb3gqIG1hcmt1
cEJveCA9IDApOwotICAgIHZpcnR1YWwgaW50IHBsYWNlRWxsaXBzaXNCb3goYm9vbCBsdHIsIGlu
dCBibG9ja0VkZ2UsIGludCBlbGxpcHNpc1dpZHRoLCBib29sJik7CisgICAgdmlydHVhbCBpbnQg
cGxhY2VFbGxpcHNpc0JveChib29sIGx0ciwgaW50IGJsb2NrRWRnZSwgaW50IGVsbGlwc2lzV2lk
dGgsIGJvb2wmIGZvdW5kQm94KTsKIAogICAgIEVsbGlwc2lzQm94KiBlbGxpcHNpc0JveCgpIGNv
bnN0IHsgcmV0dXJuIG1fZWxsaXBzaXNCb3g7IH0KIAogICAgIHZvaWQgcGFpbnRFbGxpcHNpc0Jv
eChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KSBjb25zdDsKICAgICBi
b29sIGhpdFRlc3RFbGxpcHNpc0JveChIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQg
dHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiwgYm9vbCk7Ci0gICAgCisKICAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJUcnVuY2F0aW9uKCk7CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC0xMDIsMTMgKzEw
NiwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCk7CiAKICAgICBi
b29sIGhhc1NlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2hhc1NlbGVjdGVkQ2hp
bGRyZW47IH0KLSAgICB2b2lkIHNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oYm9vbCBiKTsKKyAgICB2
b2lkIHNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oYm9vbCk7CiAKICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKTsKICAgICBJbmxpbmVCb3gqIGZp
cnN0U2VsZWN0ZWRCb3goKTsKICAgICBJbmxpbmVCb3gqIGxhc3RTZWxlY3RlZEJveCgpOwogCi0g
ICAgR2FwUmVjdHMgZmlsbExpbmVTZWxlY3Rpb25HYXAoaW50IHNlbFRvcCwgaW50IHNlbEhlaWdo
dCwgUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwgCisgICAg
R2FwUmVjdHMgZmlsbExpbmVTZWxlY3Rpb25HYXAoaW50IHNlbFRvcCwgaW50IHNlbEhlaWdodCwg
UmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHgsIGludCB0eSwgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8qKTsKIAogICAgIFJlbmRlckJsb2NrKiBibG9jaygpIGNvbnN0OwpAQCAt
MTE2LDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICBpbnQgc2VsZWN0aW9uVG9wKCk7CiAgICAgaW50
IHNlbGVjdGlvbkJvdHRvbSgpIHsgcmV0dXJuIG1fc2VsZWN0aW9uQm90dG9tOyB9CiAgICAgaW50
IHNlbGVjdGlvbkhlaWdodCgpIHsgcmV0dXJuIG1heCgwLCBzZWxlY3Rpb25Cb3R0b20oKSAtIHNl
bGVjdGlvblRvcCgpKTsgfQotIAorCiAgICAgSW5saW5lQm94KiBjbG9zZXN0TGVhZkNoaWxkRm9y
WFBvcyhpbnQgeCwgaW50IHR4KTsKIAogcHJvdGVjdGVkOgpAQCAtMTM1LDE2ICsxMzksMTYgQEAg
cHJvdGVjdGVkOgogICAgIC8vIHdlIGNhbiBjcmVhdGUgYSBCaWRpSXRlcmF0b3IgYmVnaW5uaW5n
IGp1c3QgYWZ0ZXIgdGhlIGVuZCBvZiB0aGlzIGxpbmUuCiAgICAgUmVuZGVyT2JqZWN0KiBtX2xp
bmVCcmVha09iajsKICAgICB1bnNpZ25lZCBtX2xpbmVCcmVha1BvczsKLSAgICAKKwogICAgIEJp
ZGlTdGF0dXMgbV9saW5lQnJlYWtCaWRpU3RhdHVzOwogICAgIFJlZlB0cjxCaWRpQ29udGV4dD4g
bV9saW5lQnJlYWtDb250ZXh0OwotICAgIAorCiAgICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgYmxv
Y2sgYXQgdGhlIGVuZCBvZiB0aGlzIGxpbmUuICBUaGlzIGlzIHdoZXJlIHRoZSBuZXh0IGxpbmUg
c3RhcnRzLgogICAgIGludCBtX2Jsb2NrSGVpZ2h0OwotICAgIAorCiAgICAgLy8gV2hldGhlciB0
aGUgbGluZSBlbmRzIHdpdGggYSA8YnI+LgogICAgIGJvb2wgbV9lbmRzV2l0aEJyZWFrIDogMTsK
LSAgICAKKwogICAgIC8vIFdoZXRoZXIgd2UgaGF2ZSBhbnkgY2hpbGRyZW4gc2VsZWN0ZWQgKHRo
aXMgYml0IHdpbGwgYWxzbyBiZSBzZXQgaWYgdGhlIDxicj4gdGhhdCB0ZXJtaW5hdGVzIG91cgog
ICAgIC8vIGxpbmUgaXMgc2VsZWN0ZWQpLgogICAgIGJvb2wgbV9oYXNTZWxlY3RlZENoaWxkcmVu
IDogMTsKQEAgLTE1NSw0ICsxNTksNCBAQCBwcm90ZWN0ZWQ6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmIC8vIFJvb3RJbmxpbmVCb3hfSAorI2VuZGlmIC8vIFJvb3RJbmxpbmVC
b3hfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9u
IDE4MjYwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDI0ICsyNCwyNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKKwogI2luY2x1ZGUgIlNWR0lubGluZUZsb3dCb3guaCIKIAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKLSNpbmNs
dWRlICJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZUZpbHRlci5o
IgotI2luY2x1ZGUgIlNWR1Jlc291cmNlTWFza2VyLmgiCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2
ZXIuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJSb290
SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUgIlNWR1Bh
aW50U2VydmVyLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCisjaW5jbHVkZSAi
U1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZU1hc2tlci5oIgogI2lu
Y2x1ZGUgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFNWR0lubGluZUZsb3dCb3g6OnBhaW50
KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KSAKK3Zv
aWQgU1ZHSW5saW5lRmxvd0JveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgcGFpbnRTVkdJbmxpbmVGbG93KHRoaXMsIG9i
amVjdCgpLCBwYWludEluZm8sIHR4LCB0eSk7CiB9CkBAIC02MCw3ICs2MSw3IEBAIHZvaWQgcGFp
bnRTVkdJbmxpbmVGbG93KElubGluZUZsb3dCb3gqIGYKIHsKICAgICBpZiAocGFpbnRJbmZvLmNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0
Q1RNKG9iamVjdC0+bG9jYWxUcmFuc2Zvcm0oKSk7CiAKQEAgLTc4LDcgKzc5LDcgQEAgdm9pZCBw
YWludFNWR0lubGluZUZsb3coSW5saW5lRmxvd0JveCogZgogICAgICAgICBmaWx0ZXItPnByZXBh
cmVGaWx0ZXIocGFpbnRJbmZvLmNvbnRleHQsIGJvdW5kaW5nQm94KTsKIAogICAgIFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvIHBpKHBhaW50SW5mbyk7Ci0gICAgCisKICAgICBpZiAoIWZsb3ctPmlz
Um9vdElubGluZUJveCgpKQogICAgICAgICBwaS5yZWN0ID0gKG9iamVjdC0+bG9jYWxUcmFuc2Zv
cm0oKSkuaW52ZXJzZSgpLm1hcFJlY3QocGkucmVjdCk7CiAKQEAgLTg3LDcgKzg4LDcgQEAgdm9p
ZCBwYWludFNWR0lubGluZUZsb3coSW5saW5lRmxvd0JveCogZgogICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KGJvdW5kaW5nQm94KSk7CiAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogICAgIH0K
LSAgICAKKwogICAgIFNWR1BhaW50U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRl
ckZhY3Rvcnk6OmZpbGxQYWludFNlcnZlcihvYmplY3QtPnN0eWxlKCksIG9iamVjdCk7CiAgICAg
aWYgKGZpbGxQYWludFNlcnZlcikgewogICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50
aW5nVGV4dCh0cnVlKTsKQEAgLTk3LDYgKzk4LDcgQEAgdm9pZCBwYWludFNWR0lubGluZUZsb3co
SW5saW5lRmxvd0JveCogZgogICAgICAgICB9CiAgICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0
UGFpbnRpbmdUZXh0KGZhbHNlKTsKICAgICB9CisKICAgICBTVkdQYWludFNlcnZlciogc3Ryb2tl
UGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKG9iamVj
dC0+c3R5bGUoKSwgb2JqZWN0KTsKICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKICAgICAg
ICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0cnVlKTsKQEAgLTEwNyw3ICsx
MDksNyBAQCB2b2lkIHBhaW50U1ZHSW5saW5lRmxvdyhJbmxpbmVGbG93Qm94KiBmCiAgICAgICAg
IHN0cm9rZVBhaW50U2VydmVyLT5zZXRQYWludGluZ1RleHQoZmFsc2UpOwogICAgIH0KIAotICAg
IGlmIChmaWx0ZXIpIAorICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIGZpbHRlci0+YXBwbHlGaWx0
ZXIocGFpbnRJbmZvLmNvbnRleHQsIGJvdW5kaW5nQm94KTsKIAogICAgIGlmIChvcGFjaXR5IDwg
MS4wZikKQEAgLTExNywyMiArMTE5LDIzIEBAIHZvaWQgcGFpbnRTVkdJbmxpbmVGbG93KElubGlu
ZUZsb3dCb3gqIGYKIH0KIAogc3RhdGljIGJvb2wgdHJhbnNsYXRlQm94KElubGluZUJveCogYm94
LCBpbnQgeCwgaW50IHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKQoteyAgICAKK3sKICAgICBpZiAo
Ym94LT5vYmplY3QoKS0+aXNUZXh0KCkpIHsKICAgICAgICAgYm94LT5zZXRYUG9zKGJveC0+eFBv
cygpICsgeCk7CiAgICAgICAgIGJveC0+c2V0WVBvcyhib3gtPnlQb3MoKSArIHkpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIElubGluZUZsb3dCb3gqIGZsb3cgPSBzdGF0aWNfY2FzdDxJbmxpbmVG
bG93Qm94Kj4oYm94KTsKICAgICAgICAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCogdGV4dCA9
IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQqPihib3gtPm9iamVjdCgpLT5l
bGVtZW50KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHRvcExldmVsfHwhKHRleHQtPngoKS0+
Z2V0Rmlyc3QoKSB8fCB0ZXh0LT55KCktPmdldEZpcnN0KCkgfHwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAodGV4dC0+ZHgoKS0+Z2V0Rmlyc3QoKSAmJiB0ZXh0LT5keCgpLT5nZXRGaXJzdCgp
LT52YWx1ZSgpKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKHRleHQtPmR5KCktPmdldEZp
cnN0KCkgJiYgdGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSkpKSB7CisKKyAgICAgICAg
aWYgKHRvcExldmVsIHx8ICEodGV4dC0+eCgpLT5nZXRGaXJzdCgpIHx8IHRleHQtPnkoKS0+Z2V0
Rmlyc3QoKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAodGV4dC0+ZHgoKS0+Z2V0Rmly
c3QoKSAmJiB0ZXh0LT5keCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpKSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAodGV4dC0+ZHkoKS0+Z2V0Rmlyc3QoKSAmJiB0ZXh0LT5keSgpLT5nZXRG
aXJzdCgpLT52YWx1ZSgpKSkpIHsKICAgICAgICAgICAgIGJveC0+c2V0WFBvcyhib3gtPnhQb3Mo
KSArIHgpOwogICAgICAgICAgICAgYm94LT5zZXRZUG9zKGJveC0+eVBvcygpICsgeSk7Ci0gICAg
ICAgICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZsb3ctPmZpcnN0Q2hpbGQoKTsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgCisgICAgICAgICAgICBmb3IgKElubGluZUJveCog
Y3VyciA9IGZsb3ctPmZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUo
KSkgewogICAgICAgICAgICAgICAgIGlmICghdHJhbnNsYXRlQm94KGN1cnIsIHgsIHksIGZhbHNl
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTQwLDcgKzE0Myw2IEBAIHN0YXRp
YyBib29sIHRyYW5zbGF0ZUJveChJbmxpbmVCb3gqIGJveCwKIAogc3RhdGljIGludCBwbGFjZVBv
c2l0aW9uZWRCb3hlc0hvcml6b250YWxseShJbmxpbmVGbG93Qm94KiBmbG93LCBpbnQgeCwgaW50
JiBsZWZ0UG9zaXRpb24sIGludCYgcmlnaHRQb3NpdGlvbiwgaW50JiBsZWZ0QWxpZ24sIGludCYg
cmlnaHRBbGlnbiwgYm9vbCYgbmVlZHNXb3JkU3BhY2luZywgaW50IHhQb3MsIGJvb2wgcG9zaXRp
b25lZCkKIHsKLSAgICAvL2ludCBzdGFydHggPSB4OwogICAgIGludCBtbiA9IElOVF9NQVg7CiAg
ICAgaW50IG14ID0gSU5UX01JTjsKICAgICBpbnQgYW1uID0gSU5UX01BWDsKQEAgLTE0OCw4ICsx
NTAsNyBAQCBzdGF0aWMgaW50IHBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRhCiAgICAgaW50
IHN0YXJ0eCA9IHg7CiAgICAgYm9vbCBzZWVuUG9zaXRpb25lZEVsZW1lbnQgPSBmYWxzZTsKICAg
ICBmbG93LT5zZXRYUG9zKHgpOwotICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmxvdy0+Zmly
c3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSAKLSAgICB7CisgICAg
Zm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmbG93LT5maXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0T25MaW5lKCkpIHsKICAgICAgICAgaWYgKGN1cnItPm9iamVjdCgpLT5pc1RleHQo
KSkgewogICAgICAgICAgICAgbW4gPSBtaW4obW4sIHgpOwogICAgICAgICAgICAgYW1uID0gbWlu
KGFtbiwgeCk7CkBAIC0xNjgsMTAgKzE2OSwxMCBAQCBzdGF0aWMgaW50IHBsYWNlUG9zaXRpb25l
ZEJveGVzSG9yaXpvbnRhCiAgICAgICAgICAgICBhc3NlcnQoY3Vyci0+b2JqZWN0KCktPmlzSW5s
aW5lRmxvdygpKTsKICAgICAgICAgICAgIElubGluZUZsb3dCb3gqIGZsb3cgPSBzdGF0aWNfY2Fz
dDxJbmxpbmVGbG93Qm94Kj4oY3Vycik7CiAgICAgICAgICAgICBTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCo+KGZs
b3ctPm9iamVjdCgpLT5lbGVtZW50KCkpOwotICAgICAgICAgICAgeCArPSAoaW50KSh0ZXh0LT5k
eCgpLT5nZXRGaXJzdCgpID8gdGV4dC0+ZHgoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDApOwor
ICAgICAgICAgICAgeCArPSB0ZXh0LT5keCgpLT5nZXRGaXJzdCgpID8gc3RhdGljX2Nhc3Q8aW50
Pih0ZXh0LT5keCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpKSA6IDA7CiAgICAgICAgICAgICBpZiAo
dGV4dC0+eCgpLT5nZXRGaXJzdCgpKQotICAgICAgICAgICAgICAgIHggPSAoaW50KSh0ZXh0LT54
KCktPmdldEZpcnN0KCktPnZhbHVlKCkgLSB4UG9zKTsKLSAgICAgICAgICAgIGlmICh0ZXh0LT54
KCktPmdldEZpcnN0KCkgfHwgdGV4dC0+eSgpLT5nZXRGaXJzdCgpIHx8IAorICAgICAgICAgICAg
ICAgIHggPSBzdGF0aWNfY2FzdDxpbnQ+KHRleHQtPngoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSAt
IHhQb3MpOworICAgICAgICAgICAgaWYgKHRleHQtPngoKS0+Z2V0Rmlyc3QoKSB8fCB0ZXh0LT55
KCktPmdldEZpcnN0KCkgfHwKICAgICAgICAgICAgICAgICAodGV4dC0+ZHgoKS0+Z2V0Rmlyc3Qo
KSAmJiB0ZXh0LT5keCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpKSB8fAogICAgICAgICAgICAgICAg
ICh0ZXh0LT5keSgpLT5nZXRGaXJzdCgpICYmIHRleHQtPmR5KCktPmdldEZpcnN0KCktPnZhbHVl
KCkpKSB7CiAgICAgICAgICAgICAgICAgc2VlblBvc2l0aW9uZWRFbGVtZW50ID0gdHJ1ZTsKQEAg
LTE3OSwyNiArMTgwLDI2IEBAIHN0YXRpYyBpbnQgcGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9u
dGEKICAgICAgICAgICAgICAgICBpbnQgaWdub3JlWCwgaWdub3JlWTsKICAgICAgICAgICAgICAg
ICB4ID0gcGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9udGFsbHkoZmxvdywgeCwgbW4sIG14LCBp
Z25vcmVYLCBpZ25vcmVZLCBuZWVkc1dvcmRTcGFjaW5nLCB4UG9zLCB0cnVlKTsKICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc2VlblBvc2l0aW9uZWRFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAg
aW50IF9hbW4sIF9hbXg7IC8vdGhyb3cgYXdheSB0aGVzZSB2YWx1ZXMKLSAgICAgICAgICAgICAg
ICB4ID0gcGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9udGFsbHkoZmxvdywgeCwgbW4sIG14LCBf
YW1uLCBfYW14LCBuZWVkc1dvcmRTcGFjaW5nLCB4UG9zLCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgaW50IGlnbm9yZVgsIGlnbm9yZVk7CisgICAgICAgICAgICAgICAgeCA9IHBsYWNlUG9zaXRp
b25lZEJveGVzSG9yaXpvbnRhbGx5KGZsb3csIHgsIG1uLCBteCwgaWdub3JlWCwgaWdub3JlWSwg
bmVlZHNXb3JkU3BhY2luZywgeFBvcywgZmFsc2UpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgeCA9IHBsYWNlUG9zaXRpb25lZEJveGVzSG9yaXpvbnRhbGx5KGZsb3csIHgs
IG1uLCBteCwgYW1uLCBhbXgsIG5lZWRzV29yZFNwYWNpbmcsIHhQb3MsIGZhbHNlKTsKICAgICAg
ICAgfQogICAgIH0KKwogICAgIGlmIChtbiA+IG14KQogICAgICAgICBtbiA9IG14ID0gc3RhcnR4
OwogICAgIGlmIChhbW4gPiBhbXgpCiAgICAgICAgIGFtbiA9IGFteCA9IHN0YXJ0eDsKLSAgICAK
KwogICAgIGludCB3aWR0aCA9IG14IC0gbW47CiAgICAgZmxvdy0+c2V0V2lkdGgod2lkdGgpOwog
ICAgIGludCBhd2lkdGggPSBhbXggLSBhbW47Ci0gICAgaW50IGR4PTA7CisgICAgaW50IGR4ID0g
MDsKICAgICBpZiAocG9zaXRpb25lZCkgewotICAgICAgICBzd2l0Y2ggKGZsb3ctPm9iamVjdCgp
LT5zdHlsZSgpLT5zdmdTdHlsZSgpLT50ZXh0QW5jaG9yKCkpIAotICAgICAgICB7CisgICAgICAg
IHN3aXRjaCAoZmxvdy0+b2JqZWN0KCktPnN0eWxlKCktPnN2Z1N0eWxlKCktPnRleHRBbmNob3Io
KSkgewogICAgICAgICAgICAgY2FzZSBUQV9NSURETEU6Ci0gICAgICAgICAgICAgICAgdHJhbnNs
YXRlQm94KGZsb3csIGR4ID0gLWF3aWR0aC8yLCAwKTsgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICB0cmFuc2xhdGVCb3goZmxvdywgZHggPSAtYXdpZHRoIC8gMiwgMCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBX0VORDoKICAgICAgICAgICAgICAgICB0
cmFuc2xhdGVCb3goZmxvdywgZHggPSAtYXdpZHRoLCAwKTsKQEAgLTIwNywxNyArMjA4LDE5IEBA
IHN0YXRpYyBpbnQgcGxhY2VQb3NpdGlvbmVkQm94ZXNIb3Jpem9udGEKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKwogICAgICAgICBpZiAo
ZHgpIHsKICAgICAgICAgICAgIHggKz0gZHg7CiAgICAgICAgICAgICBtbiArPSBkeDsKICAgICAg
ICAgICAgIG14ICs9IGR4OwogICAgICAgICB9CiAgICAgfQorCiAgICAgbGVmdFBvc2l0aW9uID0g
bWluKGxlZnRQb3NpdGlvbiwgbW4pOwogICAgIHJpZ2h0UG9zaXRpb24gPSBtYXgocmlnaHRQb3Np
dGlvbiwgbXgpOwogICAgIGxlZnRBbGlnbiA9IG1pbihsZWZ0QWxpZ24sIGFtbik7CiAgICAgcmln
aHRBbGlnbiA9IG1heChyaWdodEFsaWduLCBhbXgpOwotICAgIAorCiAgICAgcmV0dXJuIHg7CiB9
CiAKQEAgLTIzMSwxNiArMjM0LDE1IEBAIGludCBwbGFjZVNWR0Zsb3dIb3Jpem9udGFsbHkoSW5s
aW5lRmxvd0IKICAgICByZXR1cm4geDsKIH0KIAotc3RhdGljIHZvaWQgcGxhY2VCb3hlc1ZlcnRp
Y2FsbHlXaXRoQWJzQmFzZWxpbmUoSW5saW5lRmxvd0JveCogZmxvdywgaW50JiBoZWlnaHRPZkJs
b2NrLCBpbnQmIG1pbl95LCBpbnQmIG1heF95LCBpbnQmIGJhc2VsaW5lLCBpbnQgeVBvcykKK3N0
YXRpYyB2b2lkIHBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFic0Jhc2VsaW5lKElubGluZUZsb3dC
b3gqIGZsb3csIGludCYgaGVpZ2h0T2ZCbG9jaywgaW50JiBtaW5ZLCBpbnQmIG1heFksIGludCYg
YmFzZWxpbmUsIGludCB5UG9zKQogewogICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmxvdy0+
Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7CiAgICAgICAg
IGlmIChjdXJyLT5pc0lubGluZUZsb3dCb3goKSkgewogICAgICAgICAgICAgU1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQqPihjdXJyLT5vYmplY3QoKS0+ZWxlbWVudCgpKTsKLSAgICAgICAgICAgIGJhc2VsaW5lICs9
IChpbnQpKHRleHQtPmR5KCktPmdldEZpcnN0KCkgPyB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpLT52
YWx1ZSgpIDogMCk7Ci0gICAgICAgICAgICBpZiAodGV4dC0+eSgpLT5nZXRGaXJzdCgpKSB7Ci0g
ICAgICAgICAgICAgICAgYmFzZWxpbmUgPSAoaW50KSh0ZXh0LT55KCktPmdldEZpcnN0KCktPnZh
bHVlKCkgLSB5UG9zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBsYWNlQm94ZXNWZXJ0
aWNhbGx5V2l0aEFic0Jhc2VsaW5lKHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKSwg
aGVpZ2h0T2ZCbG9jaywgbWluX3ksIG1heF95LCBiYXNlbGluZSwgeVBvcyk7CisgICAgICAgICAg
ICBiYXNlbGluZSArPSB0ZXh0LT5keSgpLT5nZXRGaXJzdCgpID8gc3RhdGljX2Nhc3Q8aW50Pih0
ZXh0LT5keSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpKSA6IDA7CisgICAgICAgICAgICBpZiAodGV4
dC0+eSgpLT5nZXRGaXJzdCgpKQorICAgICAgICAgICAgICAgIGJhc2VsaW5lID0gc3RhdGljX2Nh
c3Q8aW50Pih0ZXh0LT55KCktPmdldEZpcnN0KCktPnZhbHVlKCkgLSB5UG9zKTsKKyAgICAgICAg
ICAgIHBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFic0Jhc2VsaW5lKHN0YXRpY19jYXN0PElubGlu
ZUZsb3dCb3gqPihjdXJyKSwgaGVpZ2h0T2ZCbG9jaywgbWluWSwgbWF4WSwgYmFzZWxpbmUsIHlQ
b3MpOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBjdXJyLT5vYmplY3Qo
KS0+Zm9udCh0cnVlKTsKICAgICAgICAgaW50IGFzY2VudCA9IGZvbnQuYXNjZW50KCk7CkBAIC0y
NDksMjMgKzI1MSwyNiBAQCBzdGF0aWMgdm9pZCBwbGFjZUJveGVzVmVydGljYWxseVdpdGhBYnNC
CiAgICAgICAgIGN1cnItPnNldEJhc2VsaW5lKGFzY2VudCk7CiAgICAgICAgIGN1cnItPnNldFlQ
b3MocG9zaXRpb24pOwogICAgICAgICBjdXJyLT5zZXRIZWlnaHQoaGVpZ2h0KTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChwb3NpdGlvbiA8IG1pbl95KSAKLSAgICAgICAgICAgIG1pbl95ID0gcG9z
aXRpb247Ci0gICAgICAgIGlmIChwb3NpdGlvbiArIGhlaWdodCA+IG1heF95KSAKLSAgICAgICAg
ICAgIG1heF95ID0gcG9zaXRpb24gKyBoZWlnaHQ7CisKKyAgICAgICAgaWYgKHBvc2l0aW9uIDwg
bWluWSkKKyAgICAgICAgICAgIG1pblkgPSBwb3NpdGlvbjsKKyAgICAgICAgaWYgKHBvc2l0aW9u
ICsgaGVpZ2h0ID4gbWF4WSkKKyAgICAgICAgICAgIG1heFkgPSBwb3NpdGlvbiArIGhlaWdodDsK
ICAgICB9CisKICAgICBpZiAoZmxvdy0+aXNSb290SW5saW5lQm94KCkpIHsKLSAgICAgICAgZmxv
dy0+c2V0WVBvcyhtaW5feSk7Ci0gICAgICAgIGZsb3ctPnNldEhlaWdodChtYXhfeSAtIG1pbl95
KTsKLSAgICAgICAgZmxvdy0+c2V0QmFzZWxpbmUoYmFzZWxpbmUgLSBtaW5feSk7Ci0gICAgICAg
IGhlaWdodE9mQmxvY2sgKz0gbWF4X3kgLSBtaW5feTsKKyAgICAgICAgZmxvdy0+c2V0WVBvcyht
aW5ZKTsKKyAgICAgICAgZmxvdy0+c2V0SGVpZ2h0KG1heFkgLSBtaW5ZKTsKKyAgICAgICAgZmxv
dy0+c2V0QmFzZWxpbmUoYmFzZWxpbmUgLSBtaW5ZKTsKKyAgICAgICAgaGVpZ2h0T2ZCbG9jayAr
PSBtYXhZIC0gbWluWTsKICAgICB9CiB9CiAKIHZvaWQgcGxhY2VTVkdGbG93VmVydGljYWxseShJ
bmxpbmVGbG93Qm94KiBmbG93LCBpbnQmIGhlaWdodE9mQmxvY2spCiB7Ci0gICAgaW50IHRvcCA9
IElOVF9NQVgsIGJvdHRvbSA9IElOVF9NSU4sIGJhc2VsaW5lID0gaGVpZ2h0T2ZCbG9jazsKKyAg
ICBpbnQgdG9wID0gSU5UX01BWDsKKyAgICBpbnQgYm90dG9tID0gSU5UX01JTjsKKyAgICBpbnQg
YmFzZWxpbmUgPSBoZWlnaHRPZkJsb2NrOwogICAgIHBsYWNlQm94ZXNWZXJ0aWNhbGx5V2l0aEFi
c0Jhc2VsaW5lKGZsb3csIGhlaWdodE9mQmxvY2ssIHRvcCwgYm90dG9tLCBiYXNlbGluZSwgZmxv
dy0+b2JqZWN0KCktPnlQb3MoKSk7CiAgICAgZmxvdy0+c2V0VmVydGljYWxPdmVyZmxvd1Bvc2l0
aW9ucyh0b3AsIGJvdHRvbSk7CiAgICAgZmxvdy0+c2V0VmVydGljYWxTZWxlY3Rpb25Qb3NpdGlv
bnModG9wLCBib3R0b20pOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0Jv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZUZsb3dCb3guaAko
cmV2aXNpb24gMTgyNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBTVkdJ
bmxpbmVGbG93Qm94X0gKLSNkZWZpbmUgU1ZHSW5saW5lRmxvd0JveF9ICisjaWZuZGVmIFNWR0lu
bGluZUZsb3dCb3hfaAorI2RlZmluZSBTVkdJbmxpbmVGbG93Qm94X2gKIAogI2lmZGVmIFNWR19T
VVBQT1JUCiAKQEAgLTUwLDQgKzUwLDQgQEAgcHVibGljOgogCiAjZW5kaWYgLy8gU1ZHX1NVUFBP
UlQKIAotI2VuZGlmIC8vIFNWR0lubGluZUZsb3dCb3hfSAorI2VuZGlmIC8vIFNWR0lubGluZUZs
b3dCb3hfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJ
KHJldmlzaW9uIDE4MjYwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDIyICsyMiwyNCBAQAogICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQog
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpZmRlZiBTVkdfU1VQUE9SVAorCiAjaW5j
bHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgogCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VDbGlw
cGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKKyNpbmNsdWRlICJLQ2FudmFzUmVuZGVy
aW5nU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgog
I2luY2x1ZGUgIlNWR1BhaW50U2VydmVyUGF0dGVybi5oIgogI2luY2x1ZGUgIlNWR1BhaW50U2Vy
dmVyU29saWQuaCIKLSNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKKyNpbmNsdWRl
ICJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAj
aW5jbHVkZSA8bWF0aC5oPgogCkBAIC00NSwzNiArNDcsMzkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvKiogY2xhc3MgKyBpb21hbmlwIHRvIGhlbHAgc3RyZWFtaW5nIGxpc3Qgc2VwYXJhdG9y
cywgaS5lLiAiLCAiIGluIHN0cmluZyAiYSwgYiwgYywgZCIKICAqIENhbiBiZSB1c2VkIGluIGNh
c2VzIHdoZXJlIHlvdSBkb24ndCBrbm93IHdoaWNoIGl0ZW0gaW4gdGhlIGxpc3QgaXMgdGhlIGZp
cnN0Ci0gKiBvbmUgdG8gYmUgcHJpbnRlZCwgYnV0IHN0aWxsIHdhbnQgdG8gYXZvaWQgc3RyaW5n
cyBsaWtlICIsIGIsIGMiLCB3b3JrcyBsaWtlIAorICogb25lIHRvIGJlIHByaW50ZWQsIGJ1dCBz
dGlsbCB3YW50IHRvIGF2b2lkIHN0cmluZ3MgbGlrZSAiLCBiLCBjIiwgd29ya3MgbGlrZQogICog
RGVwcmVjYXRlZFN0cmluZ0xpc3Q6OmpvaW4gZm9yIHN0cmVhbXMKICAqLwotY2xhc3MgVGV4dFN0
cmVhbVNlcGFyYXRvcgoteworY2xhc3MgVGV4dFN0cmVhbVNlcGFyYXRvciB7CiBwdWJsaWM6Ci0g
ICAgVGV4dFN0cmVhbVNlcGFyYXRvcihjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzKSA6IG1fc2Vw
YXJhdG9yKHMpLCBtX25lZWRUb1NlcGFyYXRlKGZhbHNlKSB7fQotcHJpdmF0ZToKLSAgICBmcmll
bmQgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVGV4dFN0cmVhbVNlcGFy
YXRvciAmc2VwKTsKLSAgICAKKyAgICBUZXh0U3RyZWFtU2VwYXJhdG9yKGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcmIHMpCisgICAgICAgIDogbV9zZXBhcmF0b3IocykKKyAgICAgICAgLCBtX25lZWRU
b1NlcGFyYXRlKGZhbHNlKQorICAgIHsKKyAgICB9CisKIHByaXZhdGU6CisgICAgZnJpZW5kIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIFRleHRTdHJlYW1TZXBhcmF0b3ImKTsK
KwogICAgIERlcHJlY2F0ZWRTdHJpbmcgbV9zZXBhcmF0b3I7CiAgICAgYm9vbCBtX25lZWRUb1Nl
cGFyYXRlOwogfTsKIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVGV4
dFN0cmVhbVNlcGFyYXRvciAmc2VwKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgVGV4dFN0cmVhbVNlcGFyYXRvciYgc2VwKQogewogICAgIGlmIChzZXAubV9uZWVkVG9T
ZXBhcmF0ZSkKICAgICAgICAgdHMgPDwgc2VwLm1fc2VwYXJhdG9yOwotICAgIGVsc2UgCisgICAg
ZWxzZQogICAgICAgICBzZXAubV9uZWVkVG9TZXBhcmF0ZSA9IHRydWU7CiAgICAgcmV0dXJuIHRz
OwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJbnRQ
b2ludCAmcCkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IElu
dFBvaW50JiBwKQogewogICAgIHJldHVybiB0cyA8PCAiKCIgPDwgcC54KCkgPDwgIiwiIDw8IHAu
eSgpIDw8ICIpIjsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgSW50UmVjdCAmcikKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgcmV0dXJuIHRzIDw8ICJhdCAoIiA8PCByLngoKSA8
PCAiLCIgPDwgci55KCkgPDwgIikgc2l6ZSAiIDw8IHIud2lkdGgoKSA8PCAieCIgPDwgci5oZWln
aHQoKTsKIH0KQEAgLTgyLDkgKzg3LDkgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgYwogYm9vbCBoYXNGcmFjdGlvbnMoZG91YmxlIHZhbCkKIHsKICAgICBkb3VibGUg
ZXBzaWxvbiA9IDAuMDAwMTsKLSAgICBpbnQgaXZhbCA9IGludCh2YWwpOwotICAgIGRvdWJsZSBk
dmFsID0gZG91YmxlKGl2YWwpOyAgICAKLSAgICByZXR1cm4gKGZhYnModmFsLWR2YWwpID4gZXBz
aWxvbik7CisgICAgaW50IGl2YWwgPSBzdGF0aWNfY2FzdDxpbnQ+KHZhbCk7CisgICAgZG91Ymxl
IGR2YWwgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGl2YWwpOworICAgIHJldHVybiBmYWJzKHZhbCAt
IGR2YWwpID4gZXBzaWxvbjsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRmxvYXRSZWN0ICZyKQpAQCAtMTEyLDcgKzExNyw3IEBAIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGMKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0UG9pbnQgJnApCitU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbG9hdFBvaW50JiBw
KQogewogICAgIHRzIDw8ICIoIjsgICAgCiAgICAgaWYgKGhhc0ZyYWN0aW9ucyhwLngoKSkpCkBA
IC0xMjcsOCArMTMyLDggQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
YwogICAgIHJldHVybiB0cyA8PCAiKSI7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0U2l6ZSAmcykKLXsgICAKK1RleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0U2l6ZSYgcykKK3sKICAgICB0cyA8PCAi
d2lkdGg9IjsKICAgICBpZiAoaGFzRnJhY3Rpb25zKHMud2lkdGgoKSkpCiAgICAgICAgIHRzIDw8
IHMud2lkdGgoKTsKQEAgLTEzOSwzNiArMTQ0LDM4IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGMKICAgICAgICAgdHMgPDwgcy5oZWlnaHQoKTsKICAgICBlbHNlCiAg
ICAgICAgIHRzIDw8IGludChzLmhlaWdodCgpKTsKLSAgICAgcmV0dXJuIHRzOworICAgIHJldHVy
biB0czsKIH0KIAotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0gJm0pCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAobS5pc0lk
ZW50aXR5KCkpCisgICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCiAgICAgICAgIHRzIDw8
ICJpZGVudGl0eSI7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHRzIDw8ICJ7bT0oKCIgPDwgbS5hKCkg
PDwgIiwiIDw8IG0uYigpIDw8ICIpKCIgPDwgbS5jKCkgPDwgIiwiIDw8IG0uZCgpIDw8ICIpKSI7
Ci0gICAgICAgIHRzIDw8ICIgdD0oIiA8PCBtLmUoKSA8PCAiLCIgPDwgbS5mKCkgPDwgIil9IjsK
LSAgICB9CisgICAgZWxzZQorICAgICAgICB0cyA8PCAie209KCgiCisgICAgICAgICAgIDw8IHRy
YW5zZm9ybS5hKCkgPDwgIiwiIDw8IHRyYW5zZm9ybS5iKCkKKyAgICAgICAgICAgPDwgIikoIgor
ICAgICAgICAgICA8PCB0cmFuc2Zvcm0uYygpIDw8ICIsIiA8PCB0cmFuc2Zvcm0uZCgpCisgICAg
ICAgICAgIDw8ICIpKSB0PSgiCisgICAgICAgICAgIDw8IHRyYW5zZm9ybS5lKCkgPDwgIiwiIDw8
IHRyYW5zZm9ybS5mKCkKKyAgICAgICAgICAgPDwgIil9IjsKIAogICAgIHJldHVybiB0czsKIH0K
IAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3IgJmMp
CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgYykK
IHsKICAgICByZXR1cm4gdHMgPDwgYy5uYW1lKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlSW5k
ZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQogewotICAgIGZvciAoaW50IGkgPSAwOyBp
ICE9IGluZGVudDsgKytpKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gaW5kZW50OyArK2kp
CiAgICAgICAgIHRzIDw8ICIgICI7Ci0gICAgfQogfQogCi0vL0ZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBpbiBLUmVuZGVyaW5nU3R5bGUuY3BwCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgS0NEYXNoQXJyYXkgJmEpCisvLyBGSVhNRTogTWF5YmUgdGhp
cyBzaG91bGQgYmUgaW4gS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAorc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEtDRGFzaEFycmF5JiBhKQogewog
ICAgIHRzIDw8ICJ7IjsKICAgICBLQ0Rhc2hBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYS5l
bmQoKTsKQEAgLTE4MSw0NCArMTg4LDQ1IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0KICAgICByZXR1cm4gdHM7CiB9CiAKLS8vRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGluIEtSZW5kZXJpbmdTdHlsZS5jcHAKKy8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBiZSBp
biBHcmFwaGljc1R5cGVzLmNwcAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIExpbmVDYXAgc3R5bGUpCiB7CiAgICAgc3dpdGNoIChzdHlsZSkgewotICAgIGNh
c2UgQnV0dENhcDoKLSAgICAgICAgdHMgPDwgIkJVVFQiOyBicmVhazsKLSAgICBjYXNlIFJvdW5k
Q2FwOgotICAgICAgICB0cyA8PCAiUk9VTkQiOyBicmVhazsKLSAgICBjYXNlIFNxdWFyZUNhcDoK
LSAgICAgICAgdHMgPDwgIlNRVUFSRSI7IGJyZWFrOworICAgICAgICBjYXNlIEJ1dHRDYXA6Cisg
ICAgICAgICAgICB0cyA8PCAiQlVUVCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBSb3VuZENhcDoKKyAgICAgICAgICAgIHRzIDw8ICJST1VORCI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAgICAgICB0cyA8PCAiU1FVQVJFIjsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gdHM7CiB9CiAKLS8vRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGluIEtSZW5kZXJpbmdTdHlsZS5jcHAKKy8vIEZJWE1FOiBNYXliZSB0
aGlzIHNob3VsZCBiZSBpbiBHcmFwaGljc1R5cGVzLmNwcAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVKb2luIHN0eWxlKQogewogICAgIHN3aXRjaCAo
c3R5bGUpIHsKLSAgICBjYXNlIE1pdGVySm9pbjoKLSAgICAgICAgdHMgPDwgIk1JVEVSIjsgYnJl
YWs7Ci0gICAgY2FzZSBSb3VuZEpvaW46Ci0gICAgICAgIHRzIDw8ICJST1VORCI7IGJyZWFrOwot
ICAgIGNhc2UgQmV2ZWxKb2luOgotICAgICAgICB0cyA8PCAiQkVWRUwiOyBicmVhazsKKyAgICAg
ICAgY2FzZSBNaXRlckpvaW46CisgICAgICAgICAgICB0cyA8PCAiTUlURVIiOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUm91bmRKb2luOgorICAgICAgICAgICAgdHMgPDwgIlJP
VU5EIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJldmVsSm9pbjoKKyAgICAg
ICAgICAgIHRzIDw8ICJCRVZFTCI7CisgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0
dXJuIHRzOwogfQogCi0jZGVmaW5lIERJRkZFUlNfRlJPTV9QQVJFTlQocGF0aCkgKCFwYXJlbnRT
dHlsZSB8fCAocGFyZW50U3R5bGUtPnBhdGggIT0gY2hpbGRTdHlsZS0+cGF0aCkpCi0vLyBhdm9p
ZHMgdGVzdGluZyBwYXRoIGlmIHByZWQgaXMgZmFsc2UuIFRoaXMgaXMgdXNlZCB3aXRoIHRlc3Rz
IHRoYXQgaGF2ZSBzaWRlLWVmZmVjdHMKLS8vIGZvciB0aGUgcGFyZW50IG9iamVjdAotI2RlZmlu
ZSBESUZGRVJTX0ZST01fUEFSRU5UX0FWT0lEX1RFU1RfSUZfRkFMU0UocHJlZCwgcGF0aCkgKCFw
YXJlbnRTdHlsZSB8fCAoKCFwYXJlbnRTdHlsZS0+cHJlZCkgfHwgKHBhcmVudFN0eWxlLT5wYXRo
ICE9IGNoaWxkU3R5bGUtPnBhdGgpKSkKLQotc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0ICZvYmplY3QpCitzdGF0aWMgdm9pZCB3cml0ZVN0
eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKIHsKICAgICBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3Quc3R5bGUoKTsKICAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICAKKwogICAgIGlm
ICghb2JqZWN0LmxvY2FsVHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpKQogICAgICAgICB0cyA8PCAi
IFt0cmFuc2Zvcm09IiA8PCBvYmplY3QubG9jYWxUcmFuc2Zvcm0oKSA8PCAiXSI7CiAgICAgaWYg
KHN2Z1N0eWxlLT5pbWFnZVJlbmRlcmluZygpICE9IFNWR1JlbmRlclN0eWxlOjppbml0aWFsSW1h
Z2VSZW5kZXJpbmcoKSkKQEAgLTIyNyw3ICsyMzUsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxl
KFRleHRTdHJlYW0mIHRzLCBjCiAgICAgICAgIHRzIDw8ICIgW29wYWNpdHk9IiA8PCBzdHlsZS0+
b3BhY2l0eSgpIDw8ICJdIjsKICAgICBpZiAob2JqZWN0LmlzUmVuZGVyUGF0aCgpKSB7CiAgICAg
ICAgIGNvbnN0IFJlbmRlclBhdGgmIHBhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJQYXRo
Jj4ob2JqZWN0KTsKLSAgICAgICAgU1ZHUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVyID0g
S1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSwgJnBhdGgpOworICAg
ICAgICBTVkdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rv
cnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlLCAmcGF0aCk7CiAgICAgICAgIGlmIChzdHJva2VQ
YWludFNlcnZlcikgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAg
ICAgICAgICAgICB0cyA8PCAiIFtzdHJva2U9eyI7CkBAIC0yMzcsNyArMjQ1LDcgQEAgc3RhdGlj
IHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgYwogICAgICAgICAgICAgZG91YmxlIGRh
c2hPZmZzZXQgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKCZwYXRo
LCBzdmdTdHlsZS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOwogICAgICAgICAgICAgY29uc3Qg
S0NEYXNoQXJyYXkmIGRhc2hBcnJheSA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZGFzaEFycmF5RnJv
bVJlbmRlcmluZ1N0eWxlKHN0eWxlKTsKICAgICAgICAgICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9
IEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoJnBhdGgsIHN2Z1N0eWxl
LT5zdHJva2VXaWR0aCgpLCAxLjApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChz
dmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpICE9IDEuMGYpCiAgICAgICAgICAgICAgICAgdHMgPDwg
cyA8PCAiW29wYWNpdHk9IiA8PCBzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0eSgpIDw8ICJdIjsKICAg
ICAgICAgICAgIGlmIChzdHJva2VXaWR0aCAhPSAxLjBmKQpAQCAtMjUxLDEwICsyNTksMTAgQEAg
c3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgYwogICAgICAgICAgICAgaWYg
KGRhc2hPZmZzZXQgIT0gMC4wZikKICAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbZGFzaCBv
ZmZzZXQ9IiA8PCBkYXNoT2Zmc2V0IDw8ICJdIjsKICAgICAgICAgICAgIGlmICghZGFzaEFycmF5
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJbZGFzaCBhcnJheT0iIDw8
IGRhc2hBcnJheSA8PCAiXSI7ICAgICAgICAKKyAgICAgICAgICAgICAgICB0cyA8PCBzIDw8ICJb
ZGFzaCBhcnJheT0iIDw8IGRhc2hBcnJheSA8PCAiXSI7CiAgICAgICAgICAgICB0cyA8PCAifV0i
OwogICAgICAgICB9Ci0gICAgICAgIFNWR1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBL
U1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNlcnZlcihzdHlsZSwgJnBhdGgpOworICAgICAg
ICBTVkdQYWludFNlcnZlciogZmlsbFBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5Ojpm
aWxsUGFpbnRTZXJ2ZXIoc3R5bGUsICZwYXRoKTsKICAgICAgICAgaWYgKGZpbGxQYWludFNlcnZl
cikgewogICAgICAgICAgICAgVGV4dFN0cmVhbVNlcGFyYXRvciBzKCIgIik7CiAgICAgICAgICAg
ICB0cyA8PCAiIFtmaWxsPXsiOwpAQCAtMjc5LDg0ICsyODcsODIgQEAgc3RhdGljIHZvaWQgd3Jp
dGVTdHlsZShUZXh0U3RyZWFtJiB0cywgYwogICAgIGlmICghc3ZnU3R5bGUtPmZpbHRlcigpLmlz
RW1wdHkoKSkKICAgICAgICAgdHMgPDwgIiBbZmlsdGVyPSIgPDwgc3ZnU3R5bGUtPmZpbHRlcigp
IDw8ICJdIjsKIH0KLSN1bmRlZiBESUZGRVJTX0ZST01fUEFSRU5UCi0jdW5kZWYgRElGRkVSU19G
Uk9NX1BBUkVOVF9BVk9JRF9URVNUX0lGX0ZBTFNFCiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJQYXRoICZvKQorc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclBhdGgmIHBhdGgp
CiB7Ci0gICAgdHMgPDwgIiAiIDw8IG8uYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KG8ucmVs
YXRpdmVCQm94KCkpOwotICAgIAotICAgIHdyaXRlU3R5bGUodHMsIG8pOwotICAgIAotICAgIHRz
IDw8ICIgW2RhdGE9XCIiIDw8IG8ucGF0aCgpLmRlYnVnU3RyaW5nKCkgPDwgIlwiXSI7Ci0gICAg
CisgICAgdHMgPDwgIiAiIDw8IHBhdGguYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHBhdGgu
cmVsYXRpdmVCQm94KCkpOworCisgICAgd3JpdGVTdHlsZSh0cywgcGF0aCk7CisKKyAgICB0cyA8
PCAiIFtkYXRhPVwiIiA8PCBwYXRoLnBhdGgoKS5kZWJ1Z1N0cmluZygpIDw8ICJcIl0iOworCiAg
ICAgcmV0dXJuIHRzOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyICZvKQorc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0NvbnRhaW5lciYgY29u
dGFpbmVyKQogewotICAgIHRzIDw8ICIgIiA8PCBvLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVj
dChvLnJlbGF0aXZlQkJveCgpKTsKLSAgICAKLSAgICB3cml0ZVN0eWxlKHRzLCBvKTsKLSAgICAK
KyAgICB0cyA8PCAiICIgPDwgY29udGFpbmVyLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChj
b250YWluZXIucmVsYXRpdmVCQm94KCkpOworCisgICAgd3JpdGVTdHlsZSh0cywgY29udGFpbmVy
KTsKKwogICAgIHJldHVybiB0czsKIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgZ2V0VGFn
TmFtZSh2b2lkICpub2RlKQorc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgZ2V0VGFnTmFtZSh2b2lk
KiBub2RlKQogewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmVsZW0gPSBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRFbGVtZW50Kj4obm9kZSk7CisgICAgU1ZHU3R5bGVkRWxlbWVudCogZWxlbSA9IHN0YXRp
Y19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihub2RlKTsKICAgICBpZiAoZWxlbSkKICAgICAgICAg
cmV0dXJuIFN0cmluZyhlbGVtLT5ub2RlTmFtZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAg
cmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsKIH0KIAotdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyICZjb250YWluZXIsIGludCBpbmRlbnQpCit2b2lk
IHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdDb250YWluZXImIGNvbnRhaW5l
ciwgaW50IGluZGVudCkKIHsKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKICAgICB0cyA8
PCBjb250YWluZXIucmVuZGVyTmFtZSgpOwotICAgIAorCiAgICAgaWYgKGNvbnRhaW5lci5lbGVt
ZW50KCkpIHsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0YWdOYW1lID0gZ2V0VGFnTmFtZShj
b250YWluZXIuZWxlbWVudCgpKTsKICAgICAgICAgaWYgKCF0YWdOYW1lLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIHRzIDw8ICIgeyIgPDwgdGFnTmFtZSA8PCAifSI7CiAgICAgfQotICAgIAorCiAg
ICAgdHMgPDwgY29udGFpbmVyIDw8IGVuZGw7Ci0gICAgCi0gICAgZm9yIChSZW5kZXJPYmplY3Qg
KmNoaWxkID0gY29udGFpbmVyLmZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gTlVMTDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKKworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGNv
bnRhaW5lci5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KQogICAgICAgICB3cml0ZSh0cywgKmNoaWxkLCBpbmRlbnQgKyAxKTsKIH0KIAotdm9pZCB3cml0
ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyUGF0aCAmcGF0aCwgaW50IGluZGVudCkKK3Zv
aWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclBhdGgmIHBhdGgsIGludCBpbmRl
bnQpCiB7CiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAgICAgdHMgPDwgcGF0aC5yZW5k
ZXJOYW1lKCk7Ci0gICAgCisKICAgICBpZiAocGF0aC5lbGVtZW50KCkpIHsKICAgICAgICAgRGVw
cmVjYXRlZFN0cmluZyB0YWdOYW1lID0gZ2V0VGFnTmFtZShwYXRoLmVsZW1lbnQoKSk7CiAgICAg
ICAgIGlmICghdGFnTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICB0cyA8PCAiIHsiIDw8IHRh
Z05hbWUgPDwgIn0iOwogICAgIH0KLSAgICAKKwogICAgIHRzIDw8IHBhdGggPDwgZW5kbDsKIH0K
IAotdm9pZCB3cml0ZVJlbmRlclJlc291cmNlcyhUZXh0U3RyZWFtJiB0cywgTm9kZSAqcGFyZW50
KQordm9pZCB3cml0ZVJlbmRlclJlc291cmNlcyhUZXh0U3RyZWFtJiB0cywgTm9kZSogcGFyZW50
KQogewogICAgIEFTU0VSVChwYXJlbnQpOwotICAgIE5vZGUgKm5vZGUgPSBwYXJlbnQ7CisgICAg
Tm9kZSogbm9kZSA9IHBhcmVudDsKICAgICBkbyB7CiAgICAgICAgIGlmICghbm9kZS0+aXNTVkdF
bGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgU1ZHRWxlbWVudCAqc3Zn
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKTsKKyAgICAgICAgU1ZHRWxl
bWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKTsKICAgICAg
ICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxlZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCAqc3R5bGVkID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVk
RWxlbWVudCo+KHN2Z0VsZW1lbnQpOworICAgICAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWQg
PSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CiAgICAgICAgIFJl
ZlB0cjxTVkdSZXNvdXJjZT4gcmVzb3VyY2Uoc3R5bGVkLT5jYW52YXNSZXNvdXJjZSgpKTsKICAg
ICAgICAgaWYgKCFyZXNvdXJjZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKKwog
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGVsZW1lbnRJZCA9IHN2Z0VsZW1lbnQtPmdldEF0dHJp
YnV0ZShIVE1MTmFtZXM6OmlkQXR0cikuZGVwcmVjYXRlZFN0cmluZygpOwogICAgICAgICBpZiAo
cmVzb3VyY2UtPmlzUGFpbnRTZXJ2ZXIoKSkgewogICAgICAgICAgICAgUmVmUHRyPFNWR1BhaW50
U2VydmVyPiBwYWludFNlcnZlciA9IFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDxTVkdQYWludFNl
cnZlcj4ocmVzb3VyY2UpOwpAQCAtMzY2LDYgKzM3Miw2IEBAIHZvaWQgd3JpdGVSZW5kZXJSZXNv
dXJjZXMoVGV4dFN0cmVhbSYgdHMKICAgICB9IHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUocGFyZW50KSkpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVB
c1RleHQuaAkocmV2aXNpb24gMTgyNjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDkgKzIwLDE0IEBACiAgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKKyNpZm5kZWYgU1ZHUmVuZGVyVHJlZUFzVGV4dF9oCisjZGVmaW5lIFNWR1Jl
bmRlclRyZWVBc1RleHRfaAorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKwogI2luY2x1ZGUgIkRlcHJl
Y2F0ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKQEAgLTM1LDggKzQwLDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZsb2F0U2l6ZTsKICAgICBjbGFzcyBJ
bnRQb2ludDsKICAgICBjbGFzcyBJbnRSZWN0OwotICAgIGNsYXNzIEtDQ2xpcERhdGE7Ci0gICAg
Y2xhc3MgS0NQYXRoRGF0YTsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFJlbmRlclBhdGg7
CiAgICAgY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwpAQCAtNDYsNyArNDksNyBAQCB2b2lkIHdy
aXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdDCiB2b2lkIHdyaXRlKFRleHRTdHJlYW0m
LCBjb25zdCBSZW5kZXJQYXRoJiwgaW50IGluZGVudCA9IDApOwogdm9pZCB3cml0ZVJlbmRlclJl
c291cmNlcyhUZXh0U3RyZWFtJiwgTm9kZSogcGFyZW50KTsKIAotLy8gaGVscGVyIG9wZXJhdG9y
cyBkZWZpbmVkIHVzZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVl
LiAKKy8vIGhlbHBlciBvcGVyYXRvcnMgZGVmaW5lZCB1c2VkIGluIHZhcmlvdXMgY2xhc3NlcyB0
byBkdW1wIHRoZSByZW5kZXIgdHJlZS4KIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiwgY29uc3QgSW50UmVjdCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiwgY29uc3QgQ29sb3ImKTsKQEAgLTU3LDE5ICs2MCwxOSBAQCBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mLCBjb25zCiAKIC8vIGhlbHBlciBvcGVyYXRvcnMgc3BlY2lmaWMg
dG8gZHVtcGluZyB0aGUgcmVuZGVyIHRyZWUuIHRoZXNlIGFyZSB1c2VkIGluIHZhcmlvdXMgY2xh
c3NlcyB0byBkdW1wIHRoZSByZW5kZXIgdHJlZQogLy8gdGhlc2UgY291bGQgYmUgZGVmaW5lZCBp
biBzZXBhcmF0ZSBuYW1lc3BhY2UgdG8gYXZvaWQgbWF0Y2hpbmcgdGhlc2UgZ2VuZXJpYyBzaWdu
YXR1cmVzIHVuaW50ZW50aW9uYWxseS4KLSAgICAKKwogdGVtcGxhdGU8dHlwZW5hbWUgSXRlbT4K
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFZlY3RvcjxJdGVt
Kj4mIHYpCiB7CiAgICAgdHMgPDwgIlsiOwotICAgIAorCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgdHMgPDwgKnZbaV07CiAgICAgICAgIGlm
IChpIDwgdi5zaXplKCkgLSAxKQogICAgICAgICAgICAgdHMgPDwgIiwgIjsKICAgICB9Ci0gICAg
Ci0gICAgdHMgPDwgIl0iOyAgIAorCisgICAgdHMgPDwgIl0iOwogICAgIHJldHVybiB0czsKIH0K
IApAQCAtNzcsMTUgKzgwLDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZW0+CiBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBWZWN0b3I8SXRlbT4mIHYpCiB7CiAg
ICAgdHMgPDwgIlsiOwotICAgIAorCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHYuc2l6
ZSgpOyBpKyspIHsKICAgICAgICAgdHMgPDwgdltpXTsKICAgICAgICAgaWYgKGkgPCB2LnNpemUo
KSAtIDEpCiAgICAgICAgICAgICB0cyA8PCAiLCAiOwogICAgIH0KLSAgICAKKwogICAgIHRzIDw8
ICJdIjsKICAgICByZXR1cm4gdHM7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFNWR19TVVBQT1JUCisKKyNlbmRpZiAvLyBTVkdSZW5kZXJUcmVlQXNUZXh0X2gK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxODI2
MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwxNCArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFNW
R1Jvb3RJbmxpbmVCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkgCit2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50
KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFy
ZW50WSkKIHsKICAgICBwYWludFNWR0lubGluZUZsb3codGhpcywgb2JqZWN0KCksIHBhaW50SW5m
bywgcGFyZW50WCwgcGFyZW50WSk7CiB9CiAKIGludCBTVkdSb290SW5saW5lQm94OjpwbGFjZUJv
eGVzSG9yaXpvbnRhbGx5KGludCB4LCBpbnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0
aW9uLCBib29sJiBuZWVkc1dvcmRTcGFjaW5nKQogewotICAgIC8vcmVtb3ZlIGFueSBvZmZzZXRz
IGNhdXNlZCBieSBSVEwgdGV4dCBsYXlvdXQKKyAgICAvLyBSZW1vdmUgYW55IG9mZnNldHMgY2F1
c2VkIGJ5IFJUTCB0ZXh0IGxheW91dAogICAgIHggPSAwOwogICAgIGxlZnRQb3NpdGlvbiA9IDA7
CiAgICAgcmlnaHRQb3NpdGlvbiA9IDA7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSb290
SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGlu
ZUJveC5oCShyZXZpc2lvbiAxODI2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxp
bmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTUgKzIxLDE1IEBACiAgKgogICovCiAKLSNp
Zm5kZWYgU1ZHUm9vdElubGluZUJveF9ICi0jZGVmaW5lIFNWR1Jvb3RJbmxpbmVCb3hfSAorI2lm
bmRlZiBTVkdSb290SW5saW5lQm94X2gKKyNkZWZpbmUgU1ZHUm9vdElubGluZUJveF9oCiAKICNp
ZmRlZiBTVkdfU1VQUE9SVAogCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgCisKIGNsYXNzIFNWR1Jvb3RJbmxpbmVCb3ggOiBwdWJsaWMgUm9v
dElubGluZUJveCB7CiBwdWJsaWM6CiAgICAgU1ZHUm9vdElubGluZUJveChSZW5kZXJPYmplY3Qq
IG9iaikKQEAgLTQ2LDQgKzQ2LDQgQEAgcHVibGljOgogCiAjZW5kaWYgLy8gU1ZHX1NVUFBPUlQK
IAotI2VuZGlmIC8vIFNWR1Jvb3RJbmxpbmVCb3hfSAorI2VuZGlmIC8vIFNWR1Jvb3RJbmxpbmVC
b3hfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9UYWJsZUxheW91dC5oCShyZXZpc2lvbiAxODI2MCkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDggKzIw
LDggQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCiAKLSNpZm5kZWYgVGFi
bGVMYXlvdXRfSAotI2RlZmluZSBUYWJsZUxheW91dF9ICisjaWZuZGVmIFRhYmxlTGF5b3V0X2gK
KyNkZWZpbmUgVGFibGVMYXlvdXRfaAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMzLDYg
KzMzLDcgQEAgcHVibGljOgogICAgICAgICA6IG1fdGFibGUodGFibGUpCiAgICAgewogICAgIH0K
KwogICAgIHZpcnR1YWwgflRhYmxlTGF5b3V0KCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY2Fs
Y01pbk1heFdpZHRoKCkgPSAwOwpAQCAtNDQsNCArNDUsNCBAQCBwcm90ZWN0ZWQ6CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFRhYmxlTGF5b3V0X0gKKyNlbmRpZiAvLyBU
YWJsZUxheW91dF9oCg==
</data>
<flag name="review"
          id="4337"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>