<?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>48821</bug_id>
          
          <creation_ts>2010-11-01 23:53:01 -0700</creation_ts>
          <short_desc>Let HTMLObjectElement be a form associated element</short_desc>
          <delta_ts>2010-12-08 15:28:10 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.w3.org/TR/html5/forms.html#category-listed</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>13061</blocked>
    
    <blocked>50662</blocked>
    
    <blocked>50663</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>hamaji</cc>
    
    <cc>hayato</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
    
    <cc>yuzo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>303241</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-01 23:53:01 -0700</bug_when>
    <thetext>This issue comes from https://bugs.webkit.org/show_bug.cgi?id=29363#c17.

The draft of HTML5 spec &lt;http://www.w3.org/TR/html5/forms.html#category-listed&gt; says following form associated elements are listed in the form.elements:  &lt;button&gt;, &lt;fieldset&gt;, &lt;input&gt;, &lt;keygen&gt;, &lt;object&gt;, &lt;output&gt;, &lt;select&gt;, and &lt;textarea&gt;. But in WebKit, &lt;fieldset&gt;, &lt;keygen&gt; and &lt;object&gt; are not appeared in the form.elements property. We might need to discuss what we should do on this difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303249</commentid>
    <comment_count>1</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-11-02 00:31:32 -0700</bug_when>
    <thetext>I checked behaviors of IE, Firefox, and Opera.

IE8:
 fieldset and object were listed.  keygen is not supported.

Firefox 3.6:
 fieldset and object were listed.  keygen is not supported.

Opera 10.36:
 fieldset, object, and keygen were listed.

So, the specification looks reasonable and we should fix WebKit behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304461</commentid>
    <comment_count>2</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-03 20:41:34 -0700</bug_when>
    <thetext>Kent-san,

(In reply to comment #1)
&gt; So, the specification looks reasonable and we should fix WebKit behavior.

Thank you for the investigation. I&apos;d like to write a patch for this. I looked briefly at the code and found that HTMLObjectElement class is not a subclass of HTMLFormControlElement so far, that means we need to change its class inheritance to list HTMLObjectElement in form.elements. I&apos;m not sure whether it is worth to put an effort to follow the spec so I&apos;d like to ask your opinion.

Thanks,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304467</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-11-03 21:14:23 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I looked briefly at the code and found that HTMLObjectElement class is not a subclass of HTMLFormControlElement so far, that means we need to change its class inheritance to list HTMLObjectElement in form.elements. I&apos;m not sure whether it is worth to put an effort to follow the spec so I&apos;d like to ask your opinion.

We need to add validation properties to HTMLObjectElement.  So making HTMObjectElement a subclass of HTMLFormControlElement is needed.
Could you try it please?  If the change was very complex and large, we would give it up, leave FIXME comments, and fix only for &lt;fieldset&gt; and &lt;keygen&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304472</commentid>
    <comment_count>4</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-03 21:35:31 -0700</bug_when>
    <thetext>Kent-san,

(In reply to comment #3)
&gt; We need to add validation properties to HTMLObjectElement.  So making HTMObjectElement a subclass of HTMLFormControlElement is needed.
&gt; Could you try it please?  If the change was very complex and large, we would give it up, leave FIXME comments, and fix only for &lt;fieldset&gt; and &lt;keygen&gt;.

I would be happy to try it. Thank you for your advice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310033</commentid>
    <comment_count>5</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-16 16:52:44 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I would be happy to try it.

I&apos;ve tried to make HTMLObjectElement to be a subclass of HTMLFormControlElement but gave it up so far.

One of the major difficulties is its class hierarchy. The easiest way to do that is inserting HTMLFormControlElement class in the class hierarchy. But HTMLFrameOwnerElement, which is the class to be a subclass of HTMLFormControlElement in that way, is the super class of other non-form associated elements. So it wouldn&apos;t be good idea. The second idea came up with me is using multiple inheritance. It might not be good idea as well because it will make diamond class inheritance, which is never used in WebKit AFAIK and I guess it is not allowed to use. Another possible workaround is introducing an interface class which represents a form associated element but is not a subclass of HTMLElement. This approach also doesn&apos;t work. checkValidity() of HTMLFormControlElement takes a vector of RefPtr of form associated elements as an argument. RefPtr requires its object to have ref() and deref(), so we need to define these function to the interface but they are also defined in HTMLElement and it will also bring the diamond inheritance problem. I couldn&apos;t figure out other convenient way to make HTMLObjectElement be a subclass of HTMLFormControlElement.

Do you have any suggestion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310083</commentid>
    <comment_count>6</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-11-16 18:46:38 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Another possible workaround is introducing an interface class which represents a form associated element but is not a subclass of HTMLElement. This approach also doesn&apos;t work. checkValidity() of HTMLFormControlElement takes a vector of RefPtr of form associated elements as an argument. RefPtr requires its object to have ref() and deref(), so we need to define these function to the interface but they are also defined in HTMLElement and it will also bring the diamond inheritance problem.

I think it&apos;s doable.  Did you try it and have problems?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310132</commentid>
    <comment_count>7</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-16 23:02:21 -0800</bug_when>
    <thetext>Kent-san,

(In reply to comment #6)
&gt; I think it&apos;s doable.  Did you try it and have problems?

I tried introducing the interface class, say FormAssociatedElementInterface, and changed the argument of checkValidity from Vector&lt;RefPtr&lt;HTMLFormControlElement&gt; to Vector&lt;RefPtr&lt;FormAssociatedElementInterface&gt;. Since RefPtr requires ref() and deref(), I needed to define these functions, but they are also defined in EventTarget class, which is a superclass of HTMLElement subclasses. I think, in this case, virtual inheritance is needed to make both HTMLFormControlElement and HTMLObjectElement to be a subclass of not only HTMLElement but also FormAssociatedElementInterface. I can&apos;t come up with a workaround to avoid it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310138</commentid>
    <comment_count>8</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-11-16 23:19:49 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Kent-san,
&gt; 
&gt; (In reply to comment #6)
&gt; &gt; I think it&apos;s doable.  Did you try it and have problems?
&gt; 
&gt; I tried introducing the interface class, say FormAssociatedElementInterface, and changed the argument of checkValidity from Vector&lt;RefPtr&lt;HTMLFormControlElement&gt; to Vector&lt;RefPtr&lt;FormAssociatedElementInterface&gt;. Since RefPtr requires ref() and deref(), I needed to define these functions, but they are also defined in EventTarget class, which is a superclass of HTMLElement subclasses. I think, in this case, virtual inheritance is needed to make both HTMLFormControlElement and HTMLObjectElement to be a subclass of not only HTMLElement but also FormAssociatedElementInterface. I can&apos;t come up with a workaround to avoid it.

Could you show me the patch please?
WebCore::Node inherits EventTarget, TreeShared, and ScriptWrappable.  Both of EventTarget and TreeShared have ref() and deref().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310159</commentid>
    <comment_count>9</comment_count>
      <attachid>74088</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-17 01:06:47 -0800</bug_when>
    <thetext>Created attachment 74088
A minimum diff

Thank you for your help. With attached a minimum patch, I got following errors:

In file included from /Users/bashi/webkit/work/WebCore/html/HTMLFormControlElement.cpp:49:
/Users/bashi/webkit/work/WebCore/html/ValidityState.h: In member function ‘void WebCore::ValidityState::ref()’:
/Users/bashi/webkit/work/WebCore/html/ValidityState.h:39: error: request for member ‘ref’ is ambiguous
/Users/bashi/webkit/work/WebCore/html/HTMLFormControlElement.h:41: error: candidates are: virtual void WebCore::FormAssociatedElementInterface::ref()
/Users/bashi/webkit/work/WebCore/platform/TreeShared.h:58: error:                 void WebCore::TreeShared&lt;T&gt;::ref() [with T = WebCore::ContainerNode]
/Users/bashi/webkit/work/WebCore/html/ValidityState.h: In member function ‘void WebCore::ValidityState::deref()’:
/Users/bashi/webkit/work/WebCore/html/ValidityState.h:40: error: request for member ‘deref’ is ambiguous
/Users/bashi/webkit/work/WebCore/html/HTMLFormControlElement.h:42: error: candidates are: virtual void WebCore::FormAssociatedElementInterface::deref()
/Users/bashi/webkit/work/WebCore/platform/TreeShared.h:67: error:                 void WebCore::TreeShared&lt;T&gt;::deref() [with T = WebCore::ContainerNode]
/Users/bashi/webkit/work/WebKitBuild/Debug/JavaScriptCore.framework/PrivateHeaders/PassRefPtr.h: In function ‘void WTF::refIfNotNull(T*) [with T = WebCore::HTMLFormControlElement]’:
/Users/bashi/webkit/work/WebKitBuild/Debug/JavaScriptCore.framework/PrivateHeaders/RefPtr.h:42:   instantiated from ‘WTF::RefPtr&lt;T&gt;::RefPtr(T*) [with T = WebCore::HTMLFormControlElement]’
/Users/bashi/webkit/work/WebCore/html/HTMLFormControlElement.cpp:374:   instantiated from here
/Users/bashi/webkit/work/WebKitBuild/Debug/JavaScriptCore.framework/PrivateHeaders/PassRefPtr.h:53: error: request for member ‘ref’ is ambiguous
/Users/bashi/webkit/work/WebCore/html/HTMLFormControlElement.h:41: error: candidates are: virtual void WebCore::FormAssociatedElementInterface::ref()
/Users/bashi/webkit/work/WebCore/platform/TreeShared.h:58: error:                 void WebCore::TreeShared&lt;T&gt;::ref() [with T = WebCore::ContainerNode]
/Users/bashi/webkit/work/WebKitBuild/Debug/JavaScriptCore.framework/PrivateHeaders/PassRefPtr.h: In function ‘void WTF::derefIfNotNull(T*) [with T = WebCore::HTMLFormControlElement]’:
/Users/bashi/webkit/work/WebKitBuild/Debug/JavaScriptCore.framework/PrivateHeaders/RefPtr.h:57:   instantiated from ‘WTF::RefPtr&lt;T&gt;::~RefPtr() [with T = WebCore::HTMLFormControlElement]’
/Users/bashi/webkit/work/WebCore/html/HTMLFormControlElement.cpp:374:   instantiated from here/Users/bashi/webkit/work/WebKitBuild/Debug/JavaScriptCore.framework/PrivateHeaders/PassRefPtr.h:59: error: request for member ‘deref’ is ambiguous
/Users/bashi/webkit/work/WebCore/html/HTMLFormControlElement.h:42: error: candidates are: virtual void WebCore::FormAssociatedElementInterface::deref()/Users/bashi/webkit/work/WebCore/platform/TreeShared.h:67: error:                 void WebCore::TreeShared&lt;T&gt;::deref() [with T = WebCore::ContainerNode]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310166</commentid>
    <comment_count>10</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-11-17 01:27:04 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=74088) [details]
&gt; A minimum diff
&gt; 
&gt; Thank you for your help. With attached a minimum patch, I got following errors:
&gt; 
&gt; In file included from /Users/bashi/webkit/work/WebCore/html/HTMLFormControlElement.cpp:49:
&gt; /Users/bashi/webkit/work/WebCore/html/ValidityState.h: In member function ‘void WebCore::ValidityState::ref()’:
&gt; /Users/bashi/webkit/work/WebCore/html/ValidityState.h:39: error: request for member ‘ref’ is ambiguous

This ambiguity can be avoided by adding

    using TreeShared&lt;ContainerNode&gt;::ref;
    using TreeShared&lt;ContainerNode&gt;::deref;

to HTMLFormControlElement declaration.  See Node.h.

Having non-virtual ref()/deref() and virtual def()/deref() is confusing.  So FormAssociatedElementInterface (I don&apos;t like to add &quot;Interface&quot; to the name) definition should be similar to EventTarget.

class FormAssociatedElement {
    void ref() { refFormAssociatedElement(); }
    void deref() { derefFormAssociatedElement(); }
    virtual void refFormAssociatedElement() = 0;
    virtual void derefFormAssociatedElement() = 0;
};

HTMLFormControlElement should have:
void HTMLFormControlElement::refFormAssociatedElement() { ref(); }
void HTMLFormControlElement::derefFormAssociatedElement() { deref(); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310310</commentid>
    <comment_count>11</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-17 08:43:27 -0800</bug_when>
    <thetext>Kent-san,

Thank you for the solution! This is what I&apos;m looking for. I&apos;m going to try it again.

Regards,

(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Created an attachment (id=74088) [details] [details]
&gt; &gt; A minimum diff
&gt; &gt; 
&gt; &gt; Thank you for your help. With attached a minimum patch, I got following errors:
&gt; &gt; 
&gt; &gt; In file included from /Users/bashi/webkit/work/WebCore/html/HTMLFormControlElement.cpp:49:
&gt; &gt; /Users/bashi/webkit/work/WebCore/html/ValidityState.h: In member function ‘void WebCore::ValidityState::ref()’:
&gt; &gt; /Users/bashi/webkit/work/WebCore/html/ValidityState.h:39: error: request for member ‘ref’ is ambiguous
&gt; 
&gt; This ambiguity can be avoided by adding
&gt; 
&gt;     using TreeShared&lt;ContainerNode&gt;::ref;
&gt;     using TreeShared&lt;ContainerNode&gt;::deref;
&gt; 
&gt; to HTMLFormControlElement declaration.  See Node.h.
&gt; 
&gt; Having non-virtual ref()/deref() and virtual def()/deref() is confusing.  So FormAssociatedElementInterface (I don&apos;t like to add &quot;Interface&quot; to the name) definition should be similar to EventTarget.
&gt; 
&gt; class FormAssociatedElement {
&gt;     void ref() { refFormAssociatedElement(); }
&gt;     void deref() { derefFormAssociatedElement(); }
&gt;     virtual void refFormAssociatedElement() = 0;
&gt;     virtual void derefFormAssociatedElement() = 0;
&gt; };
&gt; 
&gt; HTMLFormControlElement should have:
&gt; void HTMLFormControlElement::refFormAssociatedElement() { ref(); }
&gt; void HTMLFormControlElement::derefFormAssociatedElement() { deref(); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315237</commentid>
    <comment_count>12</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-11-30 12:21:40 -0800</bug_when>
    <thetext>*** Bug 50179 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315321</commentid>
    <comment_count>13</comment_count>
      <attachid>75205</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-30 14:32:31 -0800</bug_when>
    <thetext>Created attachment 75205
Patch V0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315324</commentid>
    <comment_count>14</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-30 14:37:59 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=75205) [details]
&gt; Patch V0

Changeset http://trac.webkit.org/changeset/72835 made both &lt;fieldset&gt; and &lt;keygen&gt; to be enumerable so this patch trying to make HTMLObjectElement to be a form associated element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315335</commentid>
    <comment_count>15</comment_count>
      <attachid>75205</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-30 15:03:43 -0800</bug_when>
    <thetext>Comment on attachment 75205
Patch V0

We don’t want to lose all the history for all the functions in HTMLFormControlElement that you moved to FormAssociatedElement. So what you want to do is use svn copy to make copies of the source files and then delete what you are not keeping.

You can do this after the fact by moving the files aside, doing the svn copy, then overwriting with your new files. This way we retain the past history of the functions in that file, and can see the changes you made instead of the whole file looking like new code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315464</commentid>
    <comment_count>16</comment_count>
      <attachid>75205</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-11-30 18:11:13 -0800</bug_when>
    <thetext>Comment on attachment 75205
Patch V0

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

&gt; LayoutTests/fast/forms/script-tests/form-collection-elements-order.js:14
&gt; +    if (owner.elements.length != victims.length)
&gt; +      return &apos;length mismatch, elements.length = &apos; +
&gt; +             owner.elements.length + &apos;, expected length = &apos; + victims.length;
&gt; +    for (var i = 0; i &lt; victims.length; ++i)
&gt; +      if (owner.elements[i] != victims[i])
&gt; +        return &apos;element mismatch at index &apos; + i;
&gt; +    return &apos;OK&apos;;

Indentation is inconsistent.

&gt; WebCore/ChangeLog:6
&gt; +        &quot;elements&quot; for form and fieldsset don&apos;t conform to the HTML5 spec
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=48821

We had better change the summary (and the bug title) because we address only &lt;object&gt;.

&gt; WebCore/WebCore.xcodeproj/project.pbxproj:-21495
&gt; -			developmentRegion = English;

Do not remove this line.  You need the latest Xcode.

&gt; WebCore/html/FormAssociatedElement.cpp:2
&gt; + * Copyright (c) 2010 Google Inc. All rights reserved.

This file contains a lot of code witten by non-Google. Please respect the original copyright header.

&gt; WebCore/html/FormAssociatedElement.h:2
&gt; + * Copyright (c) 2010 Google Inc. All rights reserved.

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315470</commentid>
    <comment_count>17</comment_count>
      <attachid>75205</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-11-30 18:16:56 -0800</bug_when>
    <thetext>Comment on attachment 75205
Patch V0

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

&gt; WebCore/html/HTMLFormControlElement.h:41
&gt;  // FIXME: The HTML5 specification calls these form-associated elements.
&gt;  // So consider renaming this to HTMLFormAssociatedElement.
&gt; -class HTMLFormControlElement : public HTMLElement {
&gt; +class HTMLFormControlElement : public HTMLElement, public FormAssociatedElement {

Need to update the comment.  You had better explain what&apos;s the new role of HTMLFormControlElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315476</commentid>
    <comment_count>18</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-30 18:50:09 -0800</bug_when>
    <thetext>Hi Darin,

(In reply to comment #15)
&gt; (From update of attachment 75205 [details])
&gt; We don’t want to lose all the history for all the functions in HTMLFormControlElement that you moved to FormAssociatedElement. So what you want to do is use svn copy to make copies of the source files and then delete what you are not keeping.

Thank you for suggestions. I didn&apos;t aware of the history and you are absolutely right. I&apos;ll do this over.

Regards,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315478</commentid>
    <comment_count>19</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-30 18:54:11 -0800</bug_when>
    <thetext>Kent-san,

Thank you for your prompt review. I&apos;ll apply all your comment in the next patch.

(In reply to comment #17)
&gt; (From update of attachment 75205 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75205&amp;action=review
&gt; 
&gt; &gt; WebCore/html/HTMLFormControlElement.h:41
&gt; &gt;  // FIXME: The HTML5 specification calls these form-associated elements.
&gt; &gt;  // So consider renaming this to HTMLFormAssociatedElement.
&gt; &gt; -class HTMLFormControlElement : public HTMLElement {
&gt; &gt; +class HTMLFormControlElement : public HTMLElement, public FormAssociatedElement {
&gt; 
&gt; Need to update the comment.  You had better explain what&apos;s the new role of HTMLFormControlElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315527</commentid>
    <comment_count>20</comment_count>
      <attachid>75250</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-11-30 22:12:15 -0800</bug_when>
    <thetext>Created attachment 75250
Patch V1

Used svn copy to generate FormAssociatedElement.{cpp,h} and followed kent-san&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315572</commentid>
    <comment_count>21</comment_count>
      <attachid>75250</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-12-01 01:43:16 -0800</bug_when>
    <thetext>Comment on attachment 75250
Patch V1

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

&gt; WebCore/WebCore.xcodeproj/project.pbxproj:14746
&gt; +				4A0DA2FC129B241900AB61E1 /* FormAssociatedElement.cpp */,
&gt; +				4A0DA2FD129B241900AB61E1 /* FormAssociatedElement.h */,
&gt;  				49484FAE102CF01E00187DD3 /* canvas */,
&gt;  				97C1F5511228558800EDE616 /* parser */,
&gt;  				B0149E7911A4B21500196A7B /* AsyncImageResizer.cpp */,

Should be sorted.

&gt; WebCore/WebCore.xcodeproj/project.pbxproj:21442
&gt; +				4A0DA2FF129B241900AB61E1 /* FormAssociatedElement.h in Headers */,

ditto.
Appending new entry at the last causes patch-conflict easily.

&gt; WebCore/WebCore.xcodeproj/project.pbxproj:24022
&gt; +				4A0DA2FE129B241900AB61E1 /* FormAssociatedElement.cpp in Sources */,

ditto.

&gt; WebCore/html/FormAssociatedElement.h:62
&gt; +    virtual bool disabled() const { return m_disabled; }
&gt; +    virtual void setDisabled(bool value) { m_disabled = value; }
&gt; +    bool required() const { return m_required; }
&gt; +    void setRequired(bool value) { m_required = value; }
&gt; +    bool readOnly() const { return m_readOnly; }
&gt; +    void setReadOnly(bool value) { m_readOnly = value; }

Do we need them in FormAssociatedElement?
&lt;object&gt; doesn&apos;t have such properties.

&gt; WebCore/html/HTMLFormControlElement.h:42
&gt; +// The HTML5 specification calls these control elements and object element as
&gt; +// form-associated elements. So we introduce FormAssoiatedElement class as a
&gt; +// superclass of those elements to handle these in much the same manner.
&gt; +class HTMLFormControlElement : public HTMLElement, public FormAssociatedElement {

This comment doesn&apos;t explain difference between FormAssociatedElement and HTMLFormControlElement.
I think what we should write is &quot;HTMLFormControlElement is the default implementation of FormAssociatedElement, and form-associated element implmeentations should use HTMLFormControlElement unless there is a special reason.&quot; or something like that.

&gt; WebCore/html/HTMLFormElement.cpp:478
&gt; +    // FIXME: Removes later
&gt; +    for (unsigned i = 0; i &lt; m_associatedElements.size(); ++i)
&gt; +        ASSERT(e != m_associatedElements[i]);

Do you still need this?

&gt; WebCore/html/HTMLObjectElement.cpp:496
&gt; +    const AtomicString&amp; name(m_name);
&gt; +    return name.isNull() ? emptyAtom : name;

The variable &quot;name&quot; looks redundant.

&gt; WebCore/html/HTMLObjectElement.cpp:502
&gt; +    const AtomicString&amp; serviceType(m_serviceType);
&gt; +    return serviceType.isNull() ? emptyAtom : serviceType;

This function returns an address of a temporal object on the stack.
Anyway, is returning m_serviceType correct?  m_serviceType is not compatible with other form control types, It&apos;s a MIME type. Do we need formControlType() in FormAssociatedElement?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315748</commentid>
    <comment_count>22</comment_count>
      <attachid>75250</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-01 11:03:15 -0800</bug_when>
    <thetext>Comment on attachment 75250
Patch V1

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

Kent-san,

Thank you for review. I&apos;ll post revised patch soon.

Two comments are not yet applied to ask your opinion:
- Flag variables and their setter/getter still remain in FormAssociatedElement.
- The return value of HTMLObjectElement::formControlType() is not changed.

I&apos;ll revise the patch again when I get your feedback.

Thanks,

&gt;&gt; WebCore/WebCore.xcodeproj/project.pbxproj:14746
&gt;&gt;  				B0149E7911A4B21500196A7B /* AsyncImageResizer.cpp */,
&gt; 
&gt; Should be sorted.

Done.

&gt;&gt; WebCore/WebCore.xcodeproj/project.pbxproj:21442
&gt;&gt; +				4A0DA2FF129B241900AB61E1 /* FormAssociatedElement.h in Headers */,
&gt; 
&gt; ditto.
&gt; Appending new entry at the last causes patch-conflict easily.

Done.

&gt;&gt; WebCore/WebCore.xcodeproj/project.pbxproj:24022
&gt;&gt; +				4A0DA2FE129B241900AB61E1 /* FormAssociatedElement.cpp in Sources */,
&gt; 
&gt; ditto.

Done.

&gt;&gt; WebCore/html/FormAssociatedElement.h:62
&gt;&gt; +    void setReadOnly(bool value) { m_readOnly = value; }
&gt; 
&gt; Do we need them in FormAssociatedElement?
&gt; &lt;object&gt; doesn&apos;t have such properties.

Actually they are not required for &lt;object&gt;, but these flags are bit fields and would be stored into the same place(byte) of validation related bit fields so I thought it might be better putting these flags in FormAssociatedElement for memory consuming. Would it be better keeping these in HTMLFormControlElement?

&gt;&gt; WebCore/html/HTMLFormControlElement.h:42
&gt;&gt; +class HTMLFormControlElement : public HTMLElement, public FormAssociatedElement {
&gt; 
&gt; This comment doesn&apos;t explain difference between FormAssociatedElement and HTMLFormControlElement.
&gt; I think what we should write is &quot;HTMLFormControlElement is the default implementation of FormAssociatedElement, and form-associated element implmeentations should use HTMLFormControlElement unless there is a special reason.&quot; or something like that.

Thank you for suggestion. Revised as you suggested.

&gt;&gt; WebCore/html/HTMLFormElement.cpp:478
&gt;&gt; +        ASSERT(e != m_associatedElements[i]);
&gt; 
&gt; Do you still need this?

Sorry, I forgot to remove it. Removed.

&gt;&gt; WebCore/html/HTMLObjectElement.cpp:496
&gt;&gt; +    return name.isNull() ? emptyAtom : name;
&gt; 
&gt; The variable &quot;name&quot; looks redundant.

Removed the temporal variable and just returning m_name.

&gt;&gt; WebCore/html/HTMLObjectElement.cpp:502
&gt;&gt; +    return serviceType.isNull() ? emptyAtom : serviceType;
&gt; 
&gt; This function returns an address of a temporal object on the stack.
&gt; Anyway, is returning m_serviceType correct?  m_serviceType is not compatible with other form control types, It&apos;s a MIME type. Do we need formControlType() in FormAssociatedElement?

Thank you for warning. Removed temporal object and added a member variables for it. As for the return value, HTML5 spec says the type attribute must be a valid MIME type (http://dev.w3.org/html5/spec/the-iframe-element.html#attr-object-type). That&apos;s why I tried to return m_serviceType here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315751</commentid>
    <comment_count>23</comment_count>
      <attachid>75293</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-01 11:05:42 -0800</bug_when>
    <thetext>Created attachment 75293
Patch V2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316052</commentid>
    <comment_count>24</comment_count>
      <attachid>75250</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-12-02 02:20:37 -0800</bug_when>
    <thetext>Comment on attachment 75250
Patch V1

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

&gt;&gt;&gt; WebCore/html/FormAssociatedElement.h:62
&gt;&gt;&gt; +    void setReadOnly(bool value) { m_readOnly = value; }
&gt;&gt; 
&gt;&gt; Do we need them in FormAssociatedElement?
&gt;&gt; &lt;object&gt; doesn&apos;t have such properties.
&gt; 
&gt; Actually they are not required for &lt;object&gt;, but these flags are bit fields and would be stored into the same place(byte) of validation related bit fields so I thought it might be better putting these flags in FormAssociatedElement for memory consuming. Would it be better keeping these in HTMLFormControlElement?

IMO, it&apos;s ok to split these flags into two classes.
BTW, do we really need to put validation members to FormAssociatedElement? &lt;object&gt; needs to have a ValidityState object, but other validation flags should be constant in &lt;object&gt;.

&gt;&gt;&gt; WebCore/html/HTMLObjectElement.cpp:502
&gt;&gt;&gt; +    return serviceType.isNull() ? emptyAtom : serviceType;
&gt;&gt; 
&gt;&gt; This function returns an address of a temporal object on the stack.
&gt;&gt; Anyway, is returning m_serviceType correct?  m_serviceType is not compatible with other form control types, It&apos;s a MIME type. Do we need formControlType() in FormAssociatedElement?
&gt; 
&gt; Thank you for warning. Removed temporal object and added a member variables for it. As for the return value, HTML5 spec says the type attribute must be a valid MIME type (http://dev.w3.org/html5/spec/the-iframe-element.html#attr-object-type). That&apos;s why I tried to return m_serviceType here.

Do we need formControlType() in FormAssociatedElement?  I think we can remove type() and formControlType() from FormAssociatedElement.  We had better minimize the number of methods of FormAssociatedElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316315</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-02 11:58:21 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; IMO, it&apos;s ok to split these flags into two classes.

I agree, but also, if we do decide to put all the flags in one class to try to save memory, we should use the pattern from Node/Element and not expose the public access to the flags until the class they belong on.

&gt; BTW, do we really need to put validation members to FormAssociatedElement? &lt;object&gt; needs to have a ValidityState object, but other validation flags should be constant in &lt;object&gt;.

It’s useful to keep the FormAssociatedElement class minimal.

&gt; HTML5 spec says the type attribute must be a valid MIME type (http://dev.w3.org/html5/spec/the-iframe-element.html#attr-object-type). That&apos;s why I tried to return m_serviceType here.

Sure, that’s the type attribute of HTMLObjectElement. I’m not sure FormAssociatedElement needs a type attribute at all.

&gt; Do we need formControlType() in FormAssociatedElement?  I think we can remove type() and formControlType() from FormAssociatedElement.  We had better minimize the number of methods of FormAssociatedElement.

I agree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317218</commentid>
    <comment_count>26</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-03 19:39:38 -0800</bug_when>
    <thetext>Kent-san, Darin,

Thank you for your suggestions and comments. I&apos;ll update the patch following your comments.

(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; IMO, it&apos;s ok to split these flags into two classes.
&gt; 
&gt; I agree, but also, if we do decide to put all the flags in one class to try to save memory, we should use the pattern from Node/Element and not expose the public access to the flags until the class they belong on.
&gt; 
&gt; &gt; BTW, do we really need to put validation members to FormAssociatedElement? &lt;object&gt; needs to have a ValidityState object, but other validation flags should be constant in &lt;object&gt;.
&gt; 
&gt; It’s useful to keep the FormAssociatedElement class minimal.
&gt; 
&gt; &gt; HTML5 spec says the type attribute must be a valid MIME type (http://dev.w3.org/html5/spec/the-iframe-element.html#attr-object-type). That&apos;s why I tried to return m_serviceType here.
&gt; 
&gt; Sure, that’s the type attribute of HTMLObjectElement. I’m not sure FormAssociatedElement needs a type attribute at all.
&gt; 
&gt; &gt; Do we need formControlType() in FormAssociatedElement?  I think we can remove type() and formControlType() from FormAssociatedElement.  We had better minimize the number of methods of FormAssociatedElement.
&gt; 
&gt; I agree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317221</commentid>
    <comment_count>27</comment_count>
      <attachid>75593</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-03 20:23:24 -0800</bug_when>
    <thetext>Created attachment 75593
Patch V3

Tried to keep the FormAssociatedElement minimal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317446</commentid>
    <comment_count>28</comment_count>
      <attachid>75593</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-12-05 21:37:25 -0800</bug_when>
    <thetext>Comment on attachment 75593
Patch V3

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

Looks almost ok.  r- for minor issues and patch conflict.

We should address the FIXME in HTMLObjectElement::appendFormData(), and adding validation properties of HTMLObjectElement.idl later.

&gt; WebCore/html/FormAssociatedElement.cpp:55
&gt; +static HTMLFormElement* findFormOwner(HTMLElement* element)

This function is very similar to HTMLElement::findFormAncestor().  We had better unify them, or should name this findFormAncestor() too.

&gt; WebCore/html/HTMLFormCollection.cpp:116
&gt; +        if (associatedElement-&gt;isEnumeratable()
&gt; +            &amp;&amp; element-&gt;getAttribute(attrName) == name) {

You don&apos;t need to wrap the line.

&gt; WebCore/html/HTMLFormControlElement.h:58
&gt; +    virtual void setDisabled(bool);

Do we need to add &quot;virtual&quot;?

&gt; WebCore/html/HTMLFormElement.cpp:221
&gt;      for (unsigned i = 0; i &lt; m_associatedElements.size(); ++i)
&gt; -        m_associatedElements[i]-&gt;hideVisibleValidationMessage();
&gt; +        if (m_associatedElements[i]-&gt;isFormControlElement())
&gt; +            static_cast&lt;HTMLFormControlElement*&gt;(m_associatedElements[i])-&gt;hideVisibleValidationMessage();

We should add { } to the &quot;for&quot; because the content has two physical lines.

&gt; WebCore/html/HTMLFormElement.cpp:357
&gt;      for (unsigned i = 0; i &lt; m_associatedElements.size(); ++i)
&gt; -        m_associatedElements[i]-&gt;reset();
&gt; +        if (m_associatedElements[i]-&gt;isFormControlElement())
&gt; +            static_cast&lt;HTMLFormControlElement*&gt;(m_associatedElements[i])-&gt;reset();

ditto.

&gt; WebCore/html/HTMLFormElement.cpp:652
&gt;      for (unsigned i = 0; i &lt; m_associatedElements.size(); ++i)
&gt; -        m_associatedElements[i]-&gt;reset();
&gt; +        if (m_associatedElements[i]-&gt;isFormControlElement())
&gt; +            static_cast&lt;HTMLFormControlElement*&gt;(m_associatedElements[i])-&gt;reset();

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317451</commentid>
    <comment_count>29</comment_count>
      <attachid>75593</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-05 22:54:38 -0800</bug_when>
    <thetext>Comment on attachment 75593
Patch V3

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

Kent-san,

Thank you for review. I&apos;ll post revised patch in a minute.

&gt;&gt; WebCore/html/FormAssociatedElement.cpp:55
&gt;&gt; +static HTMLFormElement* findFormOwner(HTMLElement* element)
&gt; 
&gt; This function is very similar to HTMLElement::findFormAncestor().  We had better unify them, or should name this findFormAncestor() too.

To unify them, I removed findFormOwner() and changed the access level of HTMLElement::findFormAncestor() from protected to public. Exposing findFormAncestor() might be controversial so please r- if you have objections.

&gt;&gt; WebCore/html/HTMLFormCollection.cpp:116
&gt;&gt; +            &amp;&amp; element-&gt;getAttribute(attrName) == name) {
&gt; 
&gt; You don&apos;t need to wrap the line.

Done.

&gt;&gt; WebCore/html/HTMLFormControlElement.h:58
&gt;&gt; +    virtual void setDisabled(bool);
&gt; 
&gt; Do we need to add &quot;virtual&quot;?

Removed.

&gt;&gt; WebCore/html/HTMLFormElement.cpp:221
&gt;&gt; +            static_cast&lt;HTMLFormControlElement*&gt;(m_associatedElements[i])-&gt;hideVisibleValidationMessage();
&gt; 
&gt; We should add { } to the &quot;for&quot; because the content has two physical lines.

Done.

&gt;&gt; WebCore/html/HTMLFormElement.cpp:357
&gt;&gt; +            static_cast&lt;HTMLFormControlElement*&gt;(m_associatedElements[i])-&gt;reset();
&gt; 
&gt; ditto.

Done.

&gt;&gt; WebCore/html/HTMLFormElement.cpp:652
&gt;&gt; +            static_cast&lt;HTMLFormControlElement*&gt;(m_associatedElements[i])-&gt;reset();
&gt; 
&gt; ditto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317453</commentid>
    <comment_count>30</comment_count>
      <attachid>75648</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-05 22:56:05 -0800</bug_when>
    <thetext>Created attachment 75648
Patch V4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317459</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-05 23:27:55 -0800</bug_when>
    <thetext>Attachment 75648 did not build on chromium:
Build output: http://queues.webkit.org/results/6739053</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317470</commentid>
    <comment_count>32</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-05 23:54:22 -0800</bug_when>
    <thetext>Attachment 75648 did not build on win:
Build output: http://queues.webkit.org/results/6855041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317494</commentid>
    <comment_count>33</comment_count>
      <attachid>75648</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-12-06 01:36:07 -0800</bug_when>
    <thetext>Comment on attachment 75648
Patch V4

Please update the ChangeLog entry, and fix build errors.
I have no other comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317521</commentid>
    <comment_count>34</comment_count>
      <attachid>75663</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-06 03:26:22 -0800</bug_when>
    <thetext>Created attachment 75663
Patch V5

Updated ChangeLogs and fixed build errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317896</commentid>
    <comment_count>35</comment_count>
      <attachid>75663</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-12-06 15:59:32 -0800</bug_when>
    <thetext>Comment on attachment 75663
Patch V5

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

&gt; WebKit/win/WebFrame.cpp:1144
&gt; +            HTMLFormControlElement *elt = static_cast&lt;HTMLFormControlElement*&gt;(elements[i]);

It should be &quot;HTMLFormControlElement* elt&quot; (no space, *, space)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317949</commentid>
    <comment_count>36</comment_count>
      <attachid>75756</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-06 17:05:02 -0800</bug_when>
    <thetext>Created attachment 75756
Patch V6

Fixed style issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317956</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-06 17:10:58 -0800</bug_when>
    <thetext>Attachment 75756 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;HEAD&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;HEAD&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317957</commentid>
    <comment_count>38</comment_count>
      <attachid>75756</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-12-06 17:12:10 -0800</bug_when>
    <thetext>Comment on attachment 75756
Patch V6

Looks good.  Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317985</commentid>
    <comment_count>39</comment_count>
      <attachid>75756</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-06 18:09:54 -0800</bug_when>
    <thetext>Comment on attachment 75756
Patch V6

Rejecting patch 75756 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sl&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, 75756]&quot; exit_code: 2
Last 500 characters of output:
LayoutTests/fast/forms/form-collection-elements-order-expected.txt
patching file LayoutTests/fast/forms/form-collection-elements-order.html
patching file LayoutTests/fast/forms/script-tests/form-attribute.js
patching file LayoutTests/fast/forms/script-tests/form-collection-elements-order.js
patching file LayoutTests/fast/forms/script-tests/form-collection-elements.js

Failed to run &quot;[u&apos;/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Kent Tamura&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/6748089</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318010</commentid>
    <comment_count>40</comment_count>
      <attachid>75772</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-06 19:25:27 -0800</bug_when>
    <thetext>Created attachment 75772
Patch V7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318091</commentid>
    <comment_count>41</comment_count>
      <attachid>75772</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-12-07 01:40:08 -0800</bug_when>
    <thetext>Comment on attachment 75772
Patch V7

I&apos;ll commit manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318092</commentid>
    <comment_count>42</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-12-07 01:41:33 -0800</bug_when>
    <thetext>Landed: http://trac.webkit.org/changeset/73430</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318095</commentid>
    <comment_count>43</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2010-12-07 01:47:08 -0800</bug_when>
    <thetext>Kent-san,

Thank you very much for taking a lot of time for this patch. I&apos;m grateful to you.

(In reply to comment #42)
&gt; Landed: http://trac.webkit.org/changeset/73430</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>74088</attachid>
            <date>2010-11-17 01:06:47 -0800</date>
            <delta_ts>2010-11-17 01:06:47 -0800</delta_ts>
            <desc>A minimum diff</desc>
            <filename>form-associated-element-interface.diff</filename>
            <type>text/plain</type>
            <size>2001</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCAyZjVkNDE0Li41NWU0
ZjEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAK
KysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0zNjYsNyAr
MzY2LDcgQEAgU3RyaW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpc2libGVWYWxpZGF0aW9u
TWVzc2FnZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdmFsaWRhdGlvbk1lc3NhZ2UgPyBtX3ZhbGlk
YXRpb25NZXNzYWdlLT5tZXNzYWdlKCkgOiBTdHJpbmcoKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQorYm9vbCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50SW50ZXJmYWNlPiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCiB7CiAgICAgaWYgKCF3
aWxsVmFsaWRhdGUoKSB8fCBpc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKaW5kZXggNTY4ZjYz
ZS4uYjBlMWY3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCkBAIC0zNSw5
ICszNSwxNiBAQCBjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZTsKIGNsYXNzIFZhbGlkaXR5U3RhdGU7
CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCitjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnRJ
bnRlcmZhY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgfkZvcm1Bc3NvY2lhdGVkRWxlbWVudElu
dGVyZmFjZSgpIHt9CisgICAgdmlydHVhbCB2b2lkIHJlZigpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZGVyZWYoKSA9IDA7Cit9OworCiAvLyBGSVhNRTogVGhlIEhUTUw1IHNwZWNpZmljYXRpb24g
Y2FsbHMgdGhlc2UgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzLgogLy8gU28gY29uc2lkZXIgcmVu
YW1pbmcgdGhpcyB0byBIVE1MRm9ybUFzc29jaWF0ZWRFbGVtZW50LgotY2xhc3MgSFRNTEZvcm1D
b250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CitjbGFzcyBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgRm9ybUFzc29jaWF0ZWRFbGVt
ZW50SW50ZXJmYWNlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50KCk7CiAKQEAgLTg3LDcgKzk0LDcgQEAgcHVibGljOgogICAgIFN0cmluZyB2YWxpZGF0aW9u
TWVzc2FnZSgpOwogICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7CiAg
ICAgdm9pZCBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgYm9vbCBjaGVja1Zh
bGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVk
SW52YWxpZENvbnRyb2xzID0gMCk7CisgICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQ
dHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50SW50ZXJmYWNlPiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29u
dHJvbHMgPSAwKTsKICAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdoZW4gYSB2YWxpZGF0aW9u
IGNvbnN0cmFpbnQgb3IgY29udHJvbCB2YWx1ZSBpcyBjaGFuZ2VkLgogICAgIHZvaWQgc2V0TmVl
ZHNWYWxpZGl0eUNoZWNrKCk7CiAgICAgdm9pZCBzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJp
bmcmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75205</attachid>
            <date>2010-11-30 14:32:31 -0800</date>
            <delta_ts>2010-11-30 22:12:15 -0800</delta_ts>
            <desc>Patch V0</desc>
            <filename>bug-48821-20101130143229.patch</filename>
            <type>text/plain</type>
            <size>111410</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjNWZmYTgwNDA4MTdiMDBjMmEyMWFmYTZiYjI3NzhiZjU5YjQ4ODZiLi5mYzc0YzYy
N2ZhNTg1YWNmMTExNzQzY2UxMWUzY2I4NDhmZGY3ZTdiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAK
KzIwMTAtMTEtMzAgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAiZWxlbWVudHMiIGZv
ciBmb3JtIGFuZCBmaWVsZHNzZXQgZG9uJ3QgY29uZm9ybSB0byB0aGUgSFRNTDUgc3BlYworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MjEKKworICAg
ICAgICBBZGRzIGEgdGVzdCB0byBlbnN1cmUgdGhlIG9yZGVyIG9mIGZvcm0uZWxlbWVudHMgYXR0
cmlidXRlLgorICAgICAgICBVcGRhdGVzIHR3byB0ZXN0cyB0byBjaGVjayB3aGV0aGVyIG9iamVj
dCBlbGVtZW50cyBhcmUgaGFuZGxlZAorICAgICAgICBjb3JyZWN0bHkgaW4gZm9ybS5lbGVtZW50
cyBhdHRyaWJ1dGUuCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2Zvcm0tYXR0cmlidXRlLWV4cGVj
dGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1l
bGVtZW50cy1vcmRlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMv
Zm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tYXR0cmlidXRlLmpzOiBVcGRhdGVkLgorICAgICAg
ICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRl
ci5qczogQWRkZWQuCisgICAgICAgIChjaGVja09yZGVyKToKKyAgICAgICAgKiBmYXN0L2Zvcm1z
L3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMuanM6IFVwZGF0ZWQuCisKIDIw
MTAtMTEtMzAgIFNhdGlzaCBTYW1wYXRoICA8c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCB1cGRhdGluZyBhIHNwZWVjaCBpbnB1dCBwaXhlbCB0ZXN0IGV4cGVjdGF0
aW9ucyB3aXRoIG5ldyBiYXNlbGluZXMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2Zvcm0tYXR0cmlidXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
Zm9ybS1hdHRyaWJ1dGUtZXhwZWN0ZWQudHh0CmluZGV4IDdmMjA5NjdiM2NlMWUxNWNlNjUwYjEy
NDk4MTIzYTAyMTQwZDc0MGQuLjUyY2IyNTIxMDQ2ZDk2MjQ4ODAyZWNjMTQ2NjQ1YTNjNWM2NDc2
MGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1hdHRyaWJ1dGUtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1hdHRyaWJ1dGUtZXhw
ZWN0ZWQudHh0CkBAIC00LDE0ICs0LDE0IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiAKIAog
LSBDaGVja3MgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZm9ybSBhdHRyaWJ1dGUgZm9yIGVhY2ggZm9y
bS1hc3NvY2lhdGVkIGVsZW1lbnRzLgotRklYTUU6IDxsYWJlbD4gYW5kIDxvYmplY3Q+IGRvbid0
IHN1cHBvcnQgdGhlIGZvcm0gYXR0cmlidXRlIGZvciBub3cuCitGSVhNRTogPGxhYmVsPiBkb2Vz
bid0IHN1cHBvcnQgdGhlIGZvcm0gYXR0cmlidXRlIGZvciBub3cuCiBQQVNTIGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJidXR0b24iKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmaWVsZHNldCIpWzBdLmZvcm0gaXMgb3duZXIKIFBB
U1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0uZm9ybSBpcyBvd25l
cgogUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgia2V5Z2VuIilbMF0uZm9ybSBp
cyBvd25lcgogRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGFiZWwiKVswXS5m
b3JtIHNob3VsZCBiZSBbb2JqZWN0IEhUTUxGb3JtRWxlbWVudF0uIFdhcyBudWxsLgogUEFTUyBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibWV0ZXIiKVswXS5mb3JtIGlzIG93bmVyCi1G
QUlMIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXS5mb3JtIHNob3Vs
ZCBiZSBbb2JqZWN0IEhUTUxGb3JtRWxlbWVudF0uIFdhcyBudWxsLgorUEFTUyBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0IilbMF0uZm9ybSBpcyBvd25lcgogUEFTUyBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgib3V0cHV0IilbMF0uZm9ybSBpcyBvd25lcgogUEFT
UyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJvZ3Jlc3MiKVswXS5mb3JtIGlzIG93
bmVyCiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKVswXS5mb3Jt
IGlzIG93bmVyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVj
dGlvbi1lbGVtZW50cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0t
Y29sbGVjdGlvbi1lbGVtZW50cy1leHBlY3RlZC50eHQKaW5kZXggOTU3N2E0NGFkMjE3YzY5NTBm
NjdjZmM5NzM0MDJlMmU5ZDZkZTVlMC4uYzBjNDlhNjQ2YjY1ODVjMmZjMzFlNTg1MGUwZDUxNzgz
MzA2NzE4NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rp
b24tZWxlbWVudHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9y
bS1jb2xsZWN0aW9uLWVsZW1lbnRzLWV4cGVjdGVkLnR4dApAQCAtNCw3ICs0LDcgQEAgT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUKIAogCiBUaGlzIHRlc3QgZG9lcyBub3QgYWRkIG9iamVjdCBlbGVt
ZW50IGFzIGEgbGlzdGVkIGVsZW1lbnQuIFNlcGFyYXRlIHRlc3Qgd2lsbCBjb3ZlciB0aGF0Lgot
UEFTUyBvd25lci5lbGVtZW50cy5sZW5ndGggaXMgMjIKK1BBU1Mgb3duZXIuZWxlbWVudHMubGVu
Z3RoIGlzIDIzCiBQQVNTIG93bmVyLmVsZW1lbnRzWzBdLmlkIGlzICdidXR0b24xJwogUEFTUyBv
d25lci5lbGVtZW50c1sxXS5pZCBpcyAnZmllbGRzZXQxJwogUEFTUyBvd25lci5lbGVtZW50c1sy
XS5pZCBpcyAnaW5wdXRoaWRkZW4nCkBAIC0yNCw5ICsyNCwxMCBAQCBQQVNTIG93bmVyLmVsZW1l
bnRzWzE1XS5pZCBpcyAnaW5wdXRzdWJtaXQnCiBQQVNTIG93bmVyLmVsZW1lbnRzWzE2XS5pZCBp
cyAnaW5wdXRyZXNldCcKIFBBU1Mgb3duZXIuZWxlbWVudHNbMTddLmlkIGlzICdpbnB1dGJ1dHRv
bicKIFBBU1Mgb3duZXIuZWxlbWVudHNbMThdLmlkIGlzICdrZXlnZW4xJwotUEFTUyBvd25lci5l
bGVtZW50c1sxOV0uaWQgaXMgJ291dHB1dDEnCi1QQVNTIG93bmVyLmVsZW1lbnRzWzIwXS5pZCBp
cyAnc2VsZWN0MScKLVBBU1Mgb3duZXIuZWxlbWVudHNbMjFdLmlkIGlzICd0ZXh0YXJlYTEnCitQ
QVNTIG93bmVyLmVsZW1lbnRzWzE5XS5pZCBpcyAnb2JqZWN0MScKK1BBU1Mgb3duZXIuZWxlbWVu
dHNbMjBdLmlkIGlzICdvdXRwdXQxJworUEFTUyBvd25lci5lbGVtZW50c1syMV0uaWQgaXMgJ3Nl
bGVjdDEnCitQQVNTIG93bmVyLmVsZW1lbnRzWzIyXS5pZCBpcyAndGV4dGFyZWExJwogUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50
cy1vcmRlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE4N2FjN2I0MmZjM2IyMzA4M2Y5M2Y4
YmQ3MTVmOWUzZDc0ZDcxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDMxIEBACitUaGlzIHRlc3QgZXhhbWluZXMgdGhlIG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBl
bGVtZW50cyB3aGljaCBhcmUgY2xhc3NpZmllZCBhcyAnbGlzdGVkJy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKKy0gQ2hlY2tzIHRoZSBvcmRlciBvZiBmb3JtIGFzc29jaWF0ZWQg
ZWxlbWVudHMuCitQQVNTIGNoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0LCBrZXln
ZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorCistIENoZWNr
cyB0aGUgb3JkZXIgYWZ0ZXIgc29tZSBlbGVtZW50cyByZW1vdmVkL2luc2VydGVkLgorUEFTUyBj
aGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVj
dCwgdGV4dGFyZWFdKSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwg
a2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKSBpcyAiT0siCitQQVNTIGNoZWNrT3Jk
ZXIoW29iamVjdCwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0
YXJlYV0pIGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbb2JqZWN0LCBmaWVsZHNldCwgaW5wdXQs
IGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhLCBidXR0b25dKSBpcyAiT0siCisKKy0g
Q2hlY2tzIHRoZSBvcmRlciBvZiBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudHMgd2l0aCBmb3JtIGF0
dHJpYnV0ZS4KK1BBU1MgY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdl
biwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKSBpcyAiT0siCisKKy0gQ2hlY2tz
IHRoZSBvcmRlciBhZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQgd2l0aCBmb3Jt
IGF0dHJpYnV0ZS4KK1BBU1MgY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtl
eWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVy
KFtmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMg
Ik9LIgorUEFTUyBjaGVja09yZGVyKFtmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBz
ZWxlY3RdKSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2Vu
LCBvYmplY3QsIG91dHB1dCwgc2VsZWN0XSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFt0ZXh0
YXJlYSwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3RdKSBp
cyAiT0siCitQQVNTIGNoZWNrT3JkZXIoW3RleHRhcmVhLCBmaWVsZHNldCwgaW5wdXQsIGtleWdl
biwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdCwgYnV0dG9uXSkgaXMgIk9LIgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitUZXN0CisKKworCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRl
ci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMt
b3JkZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTc1YzYyMjdhY2Q0NmM4YWZkNDJiZGQ0OGE4MDc3NjM3
ZmRmZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNv
bGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0
cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3Njcmlw
dC10ZXN0cy9mb3JtLWF0dHJpYnV0ZS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0
LXRlc3RzL2Zvcm0tYXR0cmlidXRlLmpzCmluZGV4IDA4MmFmZTZmYmNlNGVhMmEwYjVkMGZiYTBj
MjA4NDE0MDMwY2RlMDIuLmUzNGVjNDYwODA3MjgxNzBiNjFmODZkMmRjZTczNWQ0ZTRmYTc5ODcg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tYXR0
cmlidXRlLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0t
YXR0cmlidXRlLmpzCkBAIC00LDcgKzQsNyBAQCB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2Jyk7CiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7
CiAKIGRlYnVnKCctIENoZWNrcyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmb3JtIGF0dHJpYnV0ZSBm
b3IgZWFjaCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMuJyk7Ci1kZWJ1ZygnRklYTUU6ICZsdDts
YWJlbCZndDsgYW5kICZsdDtvYmplY3QmZ3Q7IGRvblwndCBzdXBwb3J0IHRoZSBmb3JtIGF0dHJp
YnV0ZSBmb3Igbm93LicpOworZGVidWcoJ0ZJWE1FOiAmbHQ7bGFiZWwmZ3Q7IGRvZXNuXCd0IHN1
cHBvcnQgdGhlIGZvcm0gYXR0cmlidXRlIGZvciBub3cuJyk7CiBjb250YWluZXIuaW5uZXJIVE1M
ID0gJzxmb3JtIGlkPW93bmVyPjwvZm9ybT4nICsKICAgICAnPGJ1dHRvbiBuYW1lPXZpY3RpbSBm
b3JtPW93bmVyIC8+JyArCiAgICAgJzxmaWVsZHNldCBuYW1lPXZpY3RpbSBmb3JtPW93bmVyIC8+
JyArCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3Jt
LWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3Nj
cmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzRlYWUwZmZjMDQ5ZWEzZDVlYWE1MTU3NThhZWU3OThkNzI4MzlmMQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1l
bGVtZW50cy1vcmRlci5qcwpAQCAtMCwwICsxLDEwMCBAQAorZGVzY3JpcHRpb24oIlRoaXMgdGVz
dCBleGFtaW5lcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnRzIHdoaWNoIGFy
ZSBjbGFzc2lmaWVkIGFzICdsaXN0ZWQnLiIpOworCit2YXIgY29udGFpbmVyID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5l
cik7Cit2YXIgb3duZXI7CisKK2Z1bmN0aW9uIGNoZWNrT3JkZXIodmljdGltcykgeworICAgIGlm
IChvd25lci5lbGVtZW50cy5sZW5ndGggIT0gdmljdGltcy5sZW5ndGgpCisgICAgICByZXR1cm4g
J2xlbmd0aCBtaXNtYXRjaCwgZWxlbWVudHMubGVuZ3RoID0gJyArCisgICAgICAgICAgICAgb3du
ZXIuZWxlbWVudHMubGVuZ3RoICsgJywgZXhwZWN0ZWQgbGVuZ3RoID0gJyArIHZpY3RpbXMubGVu
Z3RoOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmljdGltcy5sZW5ndGg7ICsraSkKKyAgICAg
IGlmIChvd25lci5lbGVtZW50c1tpXSAhPSB2aWN0aW1zW2ldKQorICAgICAgICByZXR1cm4gJ2Vs
ZW1lbnQgbWlzbWF0Y2ggYXQgaW5kZXggJyArIGk7CisgICAgcmV0dXJuICdPSyc7Cit9CisKK2Rl
YnVnKCctIENoZWNrcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnRzLicpOwor
Y29udGFpbmVyLmlubmVySFRNTCA9ICc8Zm9ybSBpZD1vd25lcj4nICsKKyAgICAnPGJ1dHRvbiBu
YW1lPXZpY3RpbT48L2J1dHRvbj4nICsKKyAgICAnPGZpZWxkc2V0IG5hbWU9dmljdGltPlRlc3Q8
L2ZpZWxkc2V0PicgKworICAgICc8aW5wdXQgbmFtZT12aWN0aW0vPicgKworICAgICc8a2V5Z2Vu
IG5hbWU9dmljdGltPjwva2V5Z2VuPicgKworICAgICc8bGFiZWwgbmFtZT12aWN0aW0+PC9sYWJl
bD4nICsKKyAgICAnPG1ldGVyIG5hbWU9dmljdGltPjwvbWV0ZXI+JyArCisgICAgJzxvYmplY3Qg
bmFtZT12aWN0aW0+PC9vYmplY3Q+JyArCisgICAgJzxvdXRwdXQgbmFtZT12aWN0aW0+PC9vdXRw
dXQ+JyArCisgICAgJzxwcm9ncmVzcyBuYW1lPXZpY3RpbT48L3Byb2dyZXNzPicgKworICAgICc8
c2VsZWN0IG5hbWU9dmljdGltPjwvc2VsZWN0PicgKworICAgICc8dGV4dGFyZWEgbmFtZT12aWN0
aW0+PC90ZXh0YXJlYT4nKworICAgICc8L2Zvcm0+JzsKK293bmVyID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ293bmVyJyk7Cit2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJ2J1dHRvbicpWzBdOwordmFyIGZpZWxkc2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ2ZpZWxkc2V0JylbMF07Cit2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnaW5wdXQnKVswXTsKK3ZhciBrZXlnZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgna2V5Z2VuJylbMF07Cit2YXIgbGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnbGFiZWwnKVswXTsKK3ZhciBtZXRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCdtZXRlcicpWzBdOwordmFyIG9iamVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCdvYmplY3QnKVswXTsKK3ZhciBvdXRwdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnb3V0cHV0JylbMF07Cit2YXIgcHJvZ3Jlc3MgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgncHJvZ3Jlc3MnKVswXTsKK3ZhciBzZWxlY3QgPSBkb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0JylbMF07Cit2YXIgdGV4dGFyZWEgPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKVswXTsKK3Nob3VsZEJlKCdjaGVja09yZGVy
KFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0
LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWcoJy0gQ2hlY2tzIHRo
ZSBvcmRlciBhZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQuJyk7Citvd25lci5y
ZW1vdmVDaGlsZChvYmplY3QpOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRz
ZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsK
K293bmVyLnJlbW92ZUNoaWxkKGJ1dHRvbik7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbZmllbGRz
ZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsK
K293bmVyLmluc2VydEJlZm9yZShvYmplY3QsIGZpZWxkc2V0KTsKK3Nob3VsZEJlKCdjaGVja09y
ZGVyKFtvYmplY3QsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4
dGFyZWFdKScsICciT0siJyk7Citvd25lci5hcHBlbmRDaGlsZChidXR0b24pOworc2hvdWxkQmUo
J2NoZWNrT3JkZXIoW29iamVjdCwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2Vs
ZWN0LCB0ZXh0YXJlYSwgYnV0dG9uXSknLCAnIk9LIicpOworCitkZWJ1ZygnJyk7CitkZWJ1Zygn
LSBDaGVja3MgdGhlIG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50cyB3aXRoIGZvcm0g
YXR0cmlidXRlLicpOworY29udGFpbmVyLmlubmVySFRNTCA9ICc8YnV0dG9uIG5hbWU9dmljdGlt
IGZvcm09b3duZXI+PC9idXR0b24+JyArCisgICAgJzxmaWVsZHNldCBuYW1lPXZpY3RpbSBmb3Jt
PW93bmVyPlRlc3Q8L2ZpZWxkc2V0PicgKworICAgICc8aW5wdXQgbmFtZT12aWN0aW0gZm9ybT1v
d25lci8+JyArCisgICAgJzxrZXlnZW4gbmFtZT12aWN0aW0gZm9ybT1vd25lcj48L2tleWdlbj4n
ICsKKyAgICAnPGZvcm0gaWQ9b3duZXI+JyArCisgICAgJzxsYWJlbCBuYW1lPXZpY3RpbT48L2xh
YmVsPicgKworICAgICc8bWV0ZXIgbmFtZT12aWN0aW0+PC9tZXRlcj4nICsKKyAgICAnPG9iamVj
dCBuYW1lPXZpY3RpbT48L29iamVjdD4nICsKKyAgICAnPC9mb3JtPicgKworICAgICc8b3V0cHV0
IG5hbWU9dmljdGltIGZvcm09b3duZXI+PC9vdXRwdXQ+JyArCisgICAgJzxwcm9ncmVzcyBuYW1l
PXZpY3RpbSBmb3JtPW93bmVyPjwvcHJvZ3Jlc3M+JyArCisgICAgJzxzZWxlY3QgbmFtZT12aWN0
aW0gZm9ybT1vd25lcj48L3NlbGVjdD4nICsKKyAgICAnPHRleHRhcmVhIG5hbWU9dmljdGltIGZv
cm09b3duZXI+PC90ZXh0YXJlYT4nOworb3duZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
b3duZXInKTsKK2J1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24n
KVswXTsKK2ZpZWxkc2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ZpZWxkc2V0
JylbMF07CitpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBd
Owora2V5Z2VuID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tleWdlbicpWzBdOwor
bGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGFiZWwnKVswXTsKK21ldGVy
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21ldGVyJylbMF07CitvYmplY3QgPSBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JylbMF07CitvdXRwdXQgPSBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3V0cHV0JylbMF07Citwcm9ncmVzcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwcm9ncmVzcycpWzBdOworc2VsZWN0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NlbGVjdCcpWzBdOwordGV4dGFyZWEgPSBkb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKVswXTsKK3Nob3VsZEJlKCdjaGVja09y
ZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2Vs
ZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWcoJy0gQ2hlY2tz
IHRoZSBvcmRlciBhZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQgd2l0aCBmb3Jt
IGF0dHJpYnV0ZS4nKTsKK293bmVyLnJlbW92ZUNoaWxkKG9iamVjdCk7CitzaG91bGRCZSgnY2hl
Y2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3Qs
IHRleHRhcmVhXSknLCAnIk9LIicpOworY29udGFpbmVyLnJlbW92ZUNoaWxkKGJ1dHRvbik7Citz
aG91bGRCZSgnY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2Vs
ZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKK2NvbnRhaW5lci5yZW1vdmVDaGlsZCh0ZXh0YXJl
YSk7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1
dCwgc2VsZWN0XSknLCAnIk9LIicpOworb3duZXIuYXBwZW5kQ2hpbGQob2JqZWN0KTsKK3Nob3Vs
ZEJlKCdjaGVja09yZGVyKFtmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQs
IHNlbGVjdF0pJywgJyJPSyInKTsKK2NvbnRhaW5lci5pbnNlcnRCZWZvcmUodGV4dGFyZWEsIGZp
ZWxkc2V0KTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmllbGRzZXQsIGlucHV0
LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3RdKScsICciT0siJyk7Citjb250YWluZXIu
YXBwZW5kQ2hpbGQoYnV0dG9uKTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmll
bGRzZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIGJ1dHRvbl0pJywg
JyJPSyInKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVu
dHMuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rp
b24tZWxlbWVudHMuanMKaW5kZXggM2I3ZWI2OTlhOWJmMjZlM2QxMTU4YTFiMDNhNWY1YTUxMTMx
ZDhiNy4uN2ZiOWFiODY3NzMwZjdmZDNmOWNhYzM0NTE4OGNlY2MwMWNhMzRkYyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVs
ZW1lbnRzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0t
Y29sbGVjdGlvbi1lbGVtZW50cy5qcwpAQCAtMjcsNiArMjcsNyBAQCBjb250YWluZXIuaW5uZXJI
VE1MID0gJzxmb3JtIGlkPSJmb3JtMSI+JyArCiAgICAgJzxrZXlnZW4gaWQ9a2V5Z2VuMT48L2tl
eWdlbj4nICsKICAgICAnPGxhYmVsIGlkPWxhYmVsMT48L2xhYmVsPicgKwogICAgICc8bWV0ZXIg
aWQ9bWV0ZXIxPjwvbWV0ZXI+JyArCisgICAgJzxvYmplY3QgaWQ9b2JqZWN0MT48L29iamVjdD4n
ICsKICAgICAnPG91dHB1dCBpZD1vdXRwdXQxPjwvb3V0cHV0PicgKwogICAgICc8cHJvZ3Jlc3Mg
aWQ9cHJvZ3Jlc3MxPjwvcHJvZ3Jlc3M+JyArCiAgICAgJzxzZWxlY3QgaWQ9c2VsZWN0MT4nICsK
QEAgLTM4LDcgKzM5LDcgQEAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8Zm9ybSBpZD0iZm9ybTEi
PicgKwogCiB2YXIgb3duZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTEnKTsKIAot
c2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzLmxlbmd0aCcsICcyMicpOworc2hvdWxkQmUoJ293bmVy
LmVsZW1lbnRzLmxlbmd0aCcsICcyMycpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzBdLmlk
JywgIididXR0b24xJyIpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzFdLmlkJywgIidmaWVs
ZHNldDEnIik7CiBzaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMl0uaWQnLCAiJ2lucHV0aGlkZGVu
JyIpOwpAQCAtNTgsOSArNTksMTAgQEAgc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzE1XS5pZCcs
ICInaW5wdXRzdWJtaXQnIik7CiBzaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMTZdLmlkJywgIidp
bnB1dHJlc2V0JyIpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzE3XS5pZCcsICInaW5wdXRi
dXR0b24nIik7CiBzaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMThdLmlkJywgIidrZXlnZW4xJyIp
Owotc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzE5XS5pZCcsICInb3V0cHV0MSciKTsKLXNob3Vs
ZEJlKCdvd25lci5lbGVtZW50c1syMF0uaWQnLCAiJ3NlbGVjdDEnIik7Ci1zaG91bGRCZSgnb3du
ZXIuZWxlbWVudHNbMjFdLmlkJywgIid0ZXh0YXJlYTEnIik7CitzaG91bGRCZSgnb3duZXIuZWxl
bWVudHNbMTldLmlkJywgIidvYmplY3QxJyIpOworc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzIw
XS5pZCcsICInb3V0cHV0MSciKTsKK3Nob3VsZEJlKCdvd25lci5lbGVtZW50c1syMV0uaWQnLCAi
J3NlbGVjdDEnIik7CitzaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMjJdLmlkJywgIid0ZXh0YXJl
YTEnIik7CiAKIAogdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0FuZHJvaWQubWsgYi9XZWJDb3JlL0FuZHJvaWQubWsKaW5kZXggMTU0NDY3OTQ2MTE1
MTZiMjVkMzdhMzhlNDQ2YWE3YzIxMTQwYmI1ZS4uMDkxNmVkYjZhYTRiNjc1ZWVmNWUwYjg1M2U0
NjJkOTBjMDAxMDRmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9BbmRyb2lkLm1rCisrKyBiL1dlYkNv
cmUvQW5kcm9pZC5tawpAQCAtMjc3LDYgKzI3Nyw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExP
Q0FMX1NSQ19GSUxFUykgXAogCWh0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAgXAogCWh0
bWwvRW1haWxJbnB1dFR5cGUuY3BwIFwKIAlodG1sL0ZpbGVJbnB1dFR5cGUuY3BwIFwKKwlodG1s
L0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgXAogCWh0bWwvRm9ybURhdGFMaXN0LmNwcCBcCiAJ
aHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXAogCWh0bWwvSFRNTENvbGxlY3Rpb24uY3BwIFwK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGM3ZjFkMTZhMzFiYThmYzc5OTY1OTk4MDY4ODc2NGE1ZTIzODgzODAuLjQ5MjU0
YzU1ODZkY2M2ZjZjN2E3NTFhZTUyZTUwMDk3NzcwNWZiODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTg2LDYgKzk4
Niw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL0VtYWlsSW5wdXRUeXBlLmNwcAog
ICAgIGh0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwCiAgICAgaHRtbC9GaWxlSW5wdXRUeXBl
LmNwcAorICAgIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAogICAgIGh0bWwvRm9ybURh
dGFMaXN0LmNwcAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwCiAgICAgaHRtbC9IVE1M
QW5jaG9yRWxlbWVudC5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggNjg0YTQ4Y2FmZDRiMjk0ZGI5NGVhMDQ4MjEyNTZmYmI0M2UyMzNi
Yy4uM2RkZDE3NDQ3MWEwZDU3MjI5ZGQyYmMwMWUwMzVkN2RkOTA4OTQ1NyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjQg
QEAKKzIwMTAtMTEtMzAgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAiZWxlbWVudHMi
IGZvciBmb3JtIGFuZCBmaWVsZHNzZXQgZG9uJ3QgY29uZm9ybSB0byB0aGUgSFRNTDUgc3BlYwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MjEKKwor
ICAgICAgICBJbnRyb2R1Y2VzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCBjbGFzcyB3aGljaCB3b3Vs
ZCBiZSBhIHN1cGVyIGNsYXNzCisgICAgICAgIG9mIGZvcm0gYXNzb2NhdGVkIGVsZW1lbnRzLiBT
b21lIG9mIG1lbWJlciBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBvZgorICAgICAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50IGFyZSBtaWdyYXRlZCBpbnRvIHRoaXMgY2xhc3MuCisgICAgICAgIEZv
bGxvd2luZyB0aGUgSFRNTDUgc3BlYywgSFRNTEZvcm1Db250cm9sRWxlbWVudCBjbGFzcyBhbmQK
KyAgICAgICAgSFRNTE9iamVjdEVsZW1lbnQgY2xhc3MgYXJlIHN1YmNsYXNzZXMgb2YgaXQgZm9y
IG5vdy4KKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50
cy1vcmRlci5odG1sCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOiBBZGRlZCBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuY3BwCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IERpdHRvLgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOiBBZGRlZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQue2NwcCxofQorICAg
ICAgICAqIFdlYkNvcmUuZXhwLmluOiBBZGRlZCB0aGUgc3ltYm9sIGZvciB0b0hUTUxFbGVtZW50
KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopCisgICAgICAgICogV2ViQ29yZS5neXBpOiBBZGRlZCBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQue2NwcCxofQorICAgICAgICAqIFdlYkNvcmUucHJvOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogRGl0dG8uCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAg
KiBkb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oOiBGaXhlZCBjbGFzcyBmb3J3YXJkIGRlY2xhcmF0
aW9uIG9yZGVyLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKTogTW9kaWZp
ZWQgdG8KKyAgICAgICAgdXNlIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCBpbnN0ZWFkIG9mIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1bnJlZ2lzdGVy
Rm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlc2V0Rm9ybUVsZW1lbnRzT3duZXIpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0RPTUZvcm1EYXRhLmNwcDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpET01Gb3JtRGF0YTo6RE9NRm9ybURhdGEpOgorICAgICAgICAqIGh0bWwv
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDogQWRkZWQuIE1pZ3JhdGVkIHNvbWUgbWVtYmVyIGZ1
bmN0aW9ucyBhbmQgdmFyaWFibGVzIGZyb20gSFRNTEZvcm1Db250cm9sRWxlbWVudCBjbGFzcy4K
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Rm9ybUFzc29jaWF0ZWRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6fkZvcm1B
c3NvY2lhdGVkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1l
bnQ6OnJlbW92ZUZyb21Gb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRGb3JtT3duZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1Pd25lcik6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1Ob1ZhbGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6dmFsaWRpdHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZWNhbGNXaWxsVmFsaWRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp3aWxsVmFsaWRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXROZWVkc1dpbGxWYWxpZGF0ZUNo
ZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6dmFsaWRhdGlv
bk1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp1cGRh
dGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29j
aWF0ZWRFbGVtZW50OjpoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6dmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29u
dHJvbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpz
ZXROZWVkc1ZhbGlkaXR5Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRF
bGVtZW50OjpzZXRDdXN0b21WYWxpZGl0eSk6CisgICAgICAgIChXZWJDb3JlOjp0b0hUTUxFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVmKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6ZGVyZWYpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNz
b2NpYXRlZEVsZW1lbnQ6OmZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXRGb3JtQ29udHJvbFZhbHVlTWF0
Y2hlc1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6
dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Om5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpkaXNhYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldERpc2FibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVxdWlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXRSZXF1aXJlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6Zm9ybURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ6OnNldEZvcm0pOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db2xs
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbjo6aXRlbSk6
IE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQKKyAgICAgICAgaW5zdGVhZCBv
ZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xs
ZWN0aW9uOjpnZXROYW1lZEZvcm1JdGVtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6IERpdHRvLgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KTogTW9kaWZpZWQgcmVnYXJkaW5n
CisgICAgICAgIHdpdGggdGhlIGNoYW5nZSBvZiBjbGFzcyBoaWVyYXJjaHkuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVudCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlydHVhbEZvcm0pOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRGVmYXVsdEJ1dHRvbkZv
ckZvcm0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmF0dHJpYnV0ZUNoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZv
cm0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZv
cm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVy
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRp
c2FibGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpyZXF1aXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxl
bWVudDo6c2V0UmVxdWlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnJlYWRPbmx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpzZXRSZWFkT25seSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6d2lsbFZhbGlkYXRlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRlcmVm
Rm9ybUFzc29jaWF0ZWRFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KTogRGl0dG8uCisgICAg
ICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KTogTW9kaWZpZWQgdG8gdXNlCisgICAgICAgIEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCBpbnN0ZWFkIG9mIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdmVseSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleFdp
dGhGb3JtQXR0cmlidXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQ6OmZvcm1FbGVtZW50SW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3JtRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50OjpkZWZhdWx0QnV0dG9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9s
cyk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmFzc29jaWF0ZWRFbGVtZW50cyk6IERpdHRvLgorICAg
ICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp1cGRhdGVDaGVja2VkUmFkaW9CdXR0b25zKTogRGl0dG8uCisgICAgICAg
ICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2Jq
ZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQpOiBNb2RpZmllZCByZWdhcmRpbmcKKyAgICAg
ICAgd2l0aCB0aGUgY2hhbmdlIG9mIGNsYXNzIGhpZXJhcmNoeS4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50Ojp+SFRNTE9iamVjdEVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1E
YXRhKTogQWRkZWQKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpmb3JtQ29u
dHJvbE5hbWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpm
b3JtQ29udHJvbFR5cGUpOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Zm9ybSk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmZvcm1Db250cm9sVmFsdWVNYXRj
aGVzUmVuZGVyZXIpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50
OjpzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6aXNGb3JtQ29udHJvbEVsZW1lbnQpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojp3aWxsVmFsaWRhdGUpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpkaXNhYmxlZCk6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnNldERpc2FibGVkKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6aXNFbnVtZXJhdGFibGUp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZWZGb3JtQXNz
b2NpYXRlZEVsZW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVt
ZW50OjpkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQpOiBBZGRlZC4K
KyAgICAgICAgKiBodG1sL0hUTUxUYWdOYW1lcy5pbjogQWRkZWQgY29uc3RydWN0b3JOZWVkc0Zv
cm1FbGVtZW50IHRvIG9iamVjdCB0YWcuCisgICAgICAgICogaHRtbC9WYWxpZGF0aW9uTWVzc2Fn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0aW9uTWVzc2FnZTo6VmFsaWRhdGlvbk1l
c3NhZ2UpOiBNb2RpZmllZCB0byB1c2UKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50IGlu
c3RlYWQgb2YgSFRNTEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlZhbGlk
YXRpb25NZXNzYWdlOjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL1ZhbGlkYXRpb25N
ZXNzYWdlLmg6CisgICAgICAgICogaHRtbC9WYWxpZGl0eVN0YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlZhbGlkaXR5U3RhdGU6OnZhbGlkYXRpb25NZXNzYWdlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjp2YWx1ZU1pc3NpbmcpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6OnR5cGVNaXNtYXRjaCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6cGF0dGVybk1pc21hdGNoKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjp0b29Mb25nKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpWYWxpZGl0eVN0YXRlOjpyYW5nZVVuZGVyZmxvdyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6VmFsaWRpdHlTdGF0ZTo6cmFuZ2VPdmVyZmxvdyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6VmFsaWRpdHlTdGF0ZTo6c3RlcE1pc21hdGNoKTogRGl0dG8uCisgICAgICAgICogaHRt
bC9WYWxpZGl0eVN0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpjcmVh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6OlZhbGlkaXR5U3Rh
dGUpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybVN1Ym1pc3Npb246OmNyZWF0ZSk6IERpdHRvLgorCiAyMDEwLTExLTMw
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyIGFuZCBHZW9mZiBHYXJlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDJkNzFiMTFlMDk1OWEx
OTFjYjM3NWU2OGJkN2NlM2ViOGE5ZmNlYmEuLmI3MjgxOWJjYjU4ODA1YjE5ZGM3MDk1MTY3NGM3
ZjE4MWIwMGQxZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTU3Nyw2ICsxNTc3LDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuaCBcCiAJV2ViQ29yZS9odG1sL0Zp
bGVJbnB1dFR5cGUuY3BwIFwKIAlXZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oIFwKKwlXZWJD
b3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBcCisJV2ViQ29yZS9odG1sL0Zvcm1B
c3NvY2lhdGVkRWxlbWVudC5oIFwKIAlXZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcCBcCiAJ
V2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIFwKIAlXZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5
RG9jdW1lbnQuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGY0MDBjMDZlYjJmNGRhZGYxMjYyZmEyMTlmZmE4MTk2
OTg1ZjNiMjUuLmI5ODMwNzc3YzE5Nzk0NmY3MmQ1MDM1ODI0YjRmNzNjMmQ0YTk3YjEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgpAQCAtMjk0LDYgKzI5NCw3IEBAIF9fWk43V2ViQ29yZTEzS2V5Ym9hcmRFdmVudEMxRVJLTjNX
VEYxMkF0b21pY1N0cmluZ0ViYlBOU185RE9NV2luZG93RVJLTlMxXzZTdHJpCiBfX1pON1dlYkNv
cmUxM1R5cGluZ0NvbW1hbmQzOWluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVu
dEVQTlNfOERvY3VtZW50RQogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVyRVBOM0pTQzlFeGVj
U3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzROb2RlRQogX19aTjdXZWJDb3JlMTN0
b0RldmljZVNwYWNlRVJLTlNfOUZsb2F0UmVjdEVQOE5TV2luZG93CitfX1pON1dlYkNvcmUxM3Rv
SFRNTEVsZW1lbnRFUE5TXzIxRm9ybUFzc29jaWF0ZWRFbGVtZW50RQogX19aTjdXZWJDb3JlMTN0
b0pTRE9NV2luZG93RU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNl
MTJyZW1vdmVDbGllbnRFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRFCiBfX1pON1dlYkNvcmUx
NENhY2hlZFJlc291cmNlOWFkZENsaWVudEVQTlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggYjkxOGJlMDkxYmQ0NDc2NDRlZTg2Zjg1ZmZmMzI2NjJkZDVlYzAzNS4uMDA4ZmM2ODQ0OWQz
YzBiYmJkMDdlZmFmODkwYTljNjA3OTc1MDkxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE2MTgsNiArMTYxOCw4IEBACiAg
ICAgICAgICAgICAnaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5oJywKICAgICAgICAgICAgICdo
dG1sL0ZpbGVJbnB1dFR5cGUuY3BwJywKICAgICAgICAgICAgICdodG1sL0ZpbGVJbnB1dFR5cGUu
aCcsCisgICAgICAgICAgICAnaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwJywKKyAgICAg
ICAgICAgICdodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oJywKICAgICAgICAgICAgICdodG1s
L0Zvcm1EYXRhTGlzdC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRm9ybURhdGFMaXN0LmgnLAog
ICAgICAgICAgICAgJ2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwJywKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDE5M2RmODA4NDc0
ZjRjZDYxMDc3NDlhYTc1M2JmNTFiMzJlNzUxZTUuLmIyOGU4NTQ2NWVkZjg3ZWVhZjU4YjQ1ZDIy
MDc3N2VkMWM4YzkzNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLnBybwpAQCAtODc1LDYgKzg3NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGh0
bWwvRW1haWxJbnB1dFR5cGUuY3BwIFwKICAgICBodG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNw
cCBcCiAgICAgaHRtbC9GaWxlSW5wdXRUeXBlLmNwcCBcCisgICAgaHRtbC9Gb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogICAgIGh0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwIFwKICAgICBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcCBcCkBA
IC0xNzg1LDYgKzE3ODYsNyBAQCBIRUFERVJTICs9IFwKICAgICBodG1sL0RPTUZvcm1EYXRhLmgg
XAogICAgIGh0bWwvRE9NU2V0dGFibGVUb2tlbkxpc3QuaCBcCiAgICAgaHRtbC9ET01Ub2tlbkxp
c3QuaCBcCisgICAgaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCBcCiAgICAgaHRtbC9Gb3Jt
RGF0YUxpc3QuaCBcCiAgICAgaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5oIFwKICAgICBodG1s
L0hUTUxBbGxDb2xsZWN0aW9uLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggMjg4YmI4MGFhOTI1OThmZmIyYzZmMjE5N2U4NjFlZmUwOTdiNzZmMS4uNWJmZDU5ODZl
YTM2YzAyMTA5ZTJjZDU1ZjhjOTIxOTNlMGZiMDg4MCAxMDA3NTUKLS0tIGEvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCkBAIC00OTE4Myw2ICs0OTE4MywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZvcm1Bc3NvY2lhdGVkRWxl
bWVudC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxodG1sXEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGb3JtRGF0YUxpc3QuY3Bw
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggZWFmZWJiNDA1MjRlODY3NjMzZjM2NGU2M2MxNjQ5Yzc1MGVkY2QzMC4u
YzA3ZmI4NzNmYThlNGVjMDBhMGU5MmQ3NGZlZjNhNmM3NTM3MTA5YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExNTksNiArMTE1OSw4IEBACiAJCTQ5
RkZCRjFEMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RkZCRjFDMTFDODU1MEUw
MDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSAqLzsgfTsKIAkJNDlGRkJGM0YxMUM5
M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RkZCRjNEMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVy
LmggKi87IH07CiAJCTQ5RkZCRjQwMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGRkJGM0UxMUM5
M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0gKi87IH07CisJCTRBMERBMkZFMTI5QjI0MTkw
MEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEEwREEyRkMxMjlCMjQxOTAwQUI2MUUxIC8qIEZv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgKi87IH07CisJCTRBMERBMkZGMTI5QjI0MTkwMEFCNjFF
MSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRBMERBMkZEMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk0QThDOTZFQjBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBOEM5
NkVBMEJFNjkwMzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tICovOyB9Owog
CQk0QUNCQzBCRTEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBQ0JDMEJDMTI3MTNDQkQwMDk0RjlC
MiAvKiBDbGFzc0xpc3QuY3BwICovOyB9OwogCQk0QUNCQzBCRjEyNzEzQ0JEMDA5NEY5QjIgLyog
Q2xhc3NMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QUNCQzBCRDEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmggKi87IH07CkBAIC03Mjk4
LDYgKzczMDAsOCBAQAogCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250
ZXh0M0RNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFw
aGljc0NvbnRleHQzRE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGRkJG
M0QxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViR0xMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
OUZGQkYzRTExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkdMTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTRBMERBMkZDMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEEwREEyRkQx
MjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlvbkNv
bnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
U2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbTsgcGF0aCA9IG1hYy9TZWxlY3Rpb25Db250cm9sbGVy
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QUNCQzBCQzEyNzEzQ0JEMDA5
NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENsYXNzTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBQ0JDMEJE
MTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFzc0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2xhc3NMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDcz
NSw2ICsxNDczOSw4IEBACiAJCTkzRUVDMUVDMDlDMjg3NzcwMEM1MTVEMSAvKiBodG1sICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0QTBEQTJGQzEyOUIy
NDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCAqLywKKwkJCQk0QTBEQTJG
RDEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggKi8sCiAJCQkJNDk0
ODRGQUUxMDJDRjAxRTAwMTg3REQzIC8qIGNhbnZhcyAqLywKIAkJCQk5N0MxRjU1MTEyMjg1NTg4
MDBFREU2MTYgLyogcGFyc2VyICovLAogCQkJCUIwMTQ5RTc5MTFBNEIyMTUwMDE5NkE3QiAvKiBB
c3luY0ltYWdlUmVzaXplci5jcHAgKi8sCkBAIC0yMTQzMyw2ICsyMTQzOSw3IEBACiAJCQkJNzU0
MTVENUExMjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRTk3Q0NFQjEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJFOTdDRTcwMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0QTBEQTJGRjEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIxNDkyLDcgKzIxNDk5LDYgQEAKIAkJ
CWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMw
ODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwot
CQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5n
cyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTI0MDEyLDYgKzI0
MDE4LDcgQEAKIAkJCQkyRTk3Q0NFQTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkU5N0NDRjcxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0YVZpZXdD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU5N0NFNkYxMjkzQUQ2QjAwQzVDOEZGIC8q
IEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEEwREEyRkUxMjlCMjQxOTAwQUI2
MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaCBiL1dlYkNvcmUvZG9tL0NoZWNr
ZWRSYWRpb0J1dHRvbnMuaAppbmRleCBkZTdiNzEyY2YwNjc0MzVlYTMyODM3YjJmOWQ2NmYxMzcw
ZGI2NWJhLi4wZmE0NTdhY2I0NjJkN2ViZTFhY2M1YTdlOWE5ZjAzY2YzOGU5ZTgxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgKKysrIGIvV2ViQ29yZS9kb20v
Q2hlY2tlZFJhZGlvQnV0dG9ucy5oCkBAIC0yNyw4ICsyNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ7CitjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogCiBjbGFzcyBDaGVja2VkUmFkaW9CdXR0
b25zIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAxNjk0YTM3NzU1OTQwNTYwYzdhMGVkZTM4MzE1
OGRkMDUwY2I5NzJlLi40NTUzMzlkMDNhYjA0NTQ3MzAxODUyYjBhZGUzMjk1OTQzNzU0NDY1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAg
LTQzODUsMjMgKzQzODYsMjMgQEAgdm9pZCBEb2N1bWVudDo6c2V0SWNvblVSTChjb25zdCBTdHJp
bmcmIGljb25VUkwsIGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICAgICAgZi0+bG9hZGVyKCktPnNl
dEljb25VUkwobV9pY29uVVJMKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JtRWxl
bWVudFdpdGhGb3JtQXR0cmlidXRlKEVsZW1lbnQqIGNvbnRyb2wpCit2b2lkIERvY3VtZW50Ojpy
ZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50
KiBlbGVtZW50KQogewotICAgIEFTU0VSVChjb250cm9sLT5mYXN0SGFzQXR0cmlidXRlKGZvcm1B
dHRyKSk7Ci0gICAgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZS5hZGQoY29udHJvbCk7
CisgICAgQVNTRVJUKHRvSFRNTEVsZW1lbnQoZWxlbWVudCktPmZhc3RIYXNBdHRyaWJ1dGUoZm9y
bUF0dHIpKTsKKyAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLmFkZChlbGVtZW50
KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRy
aWJ1dGUoRWxlbWVudCogY29udHJvbCkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JtRWxl
bWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLnJlbW92ZShjb250cm9sKTsKKyAg
ICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLnJlbW92ZShlbGVtZW50KTsKIH0KIAog
dm9pZCBEb2N1bWVudDo6cmVzZXRGb3JtRWxlbWVudHNPd25lcihIVE1MRm9ybUVsZW1lbnQqIGZv
cm0pCiB7Ci0gICAgdHlwZWRlZiBGb3JtRWxlbWVudExpc3RIYXNoU2V0OjppdGVyYXRvciBJdGVy
YXRvcjsKKyAgICB0eXBlZGVmIEZvcm1Bc3NvY2lhdGVkRWxlbWVudExpc3RIYXNoU2V0OjppdGVy
YXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQgPSBtX2Zvcm1FbGVtZW50c1dpdGhGb3Jt
QXR0cmlidXRlLmVuZCgpOwogICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX2Zvcm1FbGVtZW50c1dp
dGhGb3JtQXR0cmlidXRlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KCppdCktPnJlc2V0Rm9ybU93bmVyKGZvcm0p
OworICAgICAgICAoKml0KS0+cmVzZXRGb3JtT3duZXIoZm9ybSk7CiB9CiAKIHZvaWQgRG9jdW1l
bnQ6OnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKGJvb2wgdXNlc1NlY3VyZUtl
eWJvYXJkKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKaW5kZXggNDc2ZTI1YjFkYTdjZDZiMTcxYTAxMTYxZWVjZWRkOTAwYTEzYmIx
My4uMmQ2MDdjOWY2OGI0MDRkMzg3NjdmMTUzNzNjZDM3MGJlNmNiNTNiOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC03
Niw2ICs3Niw3IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFbnRpdHlSZWZlcmVuY2U7CiBjbGFz
cyBFdmVudDsKIGNsYXNzIEV2ZW50TGlzdGVuZXI7CitjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEhUTUxDYW52YXNFbGVt
ZW50OwpAQCAtNDkwLDggKzQ5MSw4IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1N0YXRlRm9yTmV3
Rm9ybUVsZW1lbnRzKCkgY29uc3Q7CiAgICAgYm9vbCB0YWtlU3RhdGVGb3JGb3JtRWxlbWVudChB
dG9taWNTdHJpbmdJbXBsKiBuYW1lLCBBdG9taWNTdHJpbmdJbXBsKiB0eXBlLCBTdHJpbmcmIHN0
YXRlKTsKIAotICAgIHZvaWQgcmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEVs
ZW1lbnQqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRl
KEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0
ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJGb3JtRWxlbWVu
dFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOwogICAgIHZvaWQgcmVz
ZXRGb3JtRWxlbWVudHNPd25lcihIVE1MRm9ybUVsZW1lbnQqKTsKIAogICAgIEZyYW1lVmlldyog
dmlldygpIGNvbnN0OyAvLyBjYW4gYmUgTlVMTApAQCAtMTIxMSw3ICsxMjEyLDggQEAgcHJpdmF0
ZToKIAogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8RWxlbWVudCosIDY0PiBGb3JtRWxlbWVudExp
c3RIYXNoU2V0OwogICAgIEZvcm1FbGVtZW50TGlzdEhhc2hTZXQgbV9mb3JtRWxlbWVudHNXaXRo
U3RhdGU7Ci0gICAgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCBtX2Zvcm1FbGVtZW50c1dpdGhGb3Jt
QXR0cmlidXRlOworICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8Rm9ybUFzc29jaWF0ZWRFbGVtZW50
KiwgMzI+IEZvcm1Bc3NvY2lhdGVkRWxlbWVudExpc3RIYXNoU2V0OworICAgIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudExpc3RIYXNoU2V0IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGU7CiAK
ICAgICB0eXBlZGVmIEhhc2hNYXA8Rm9ybUVsZW1lbnRLZXksIFZlY3RvcjxTdHJpbmc+LCBGb3Jt
RWxlbWVudEtleUhhc2gsIEZvcm1FbGVtZW50S2V5SGFzaFRyYWl0cz4gRm9ybUVsZW1lbnRTdGF0
ZU1hcDsKICAgICBGb3JtRWxlbWVudFN0YXRlTWFwIG1fc3RhdGVGb3JOZXdGb3JtRWxlbWVudHM7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuY3BwIGIvV2ViQ29yZS9odG1s
L0RPTUZvcm1EYXRhLmNwcAppbmRleCAwZWNlNjM3YmNhZTFiMWRjZjRiM2RlYmMwZGQ3YTAwZmI1
ZTEzYWM2Li43MTNlYTQ5ODNkNjI1NTFlNjJhMjUyMmVmNGVlNmYxMWE3YWZlNjkyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9ET01G
b3JtRGF0YS5jcHAKQEAgLTUxLDkgKzUxLDkgQEAgRE9NRm9ybURhdGE6OkRPTUZvcm1EYXRhKEhU
TUxGb3JtRWxlbWVudCogZm9ybSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtLT5hc3NvY2lhdGVk
RWxlbWVudHMoKVtpXTsKLSAgICAgICAgaWYgKCFjb250cm9sLT5kaXNhYmxlZCgpKQotICAgICAg
ICAgICAgY29udHJvbC0+YXBwZW5kRm9ybURhdGEoKnRoaXMsIHRydWUpOworICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQgPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtp
XTsKKyAgICAgICAgaWYgKCFlbGVtZW50LT5kaXNhYmxlZCgpKQorICAgICAgICAgICAgZWxlbWVu
dC0+YXBwZW5kRm9ybURhdGEoKnRoaXMsIHRydWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvRm9y
bUFzc29jaWF0ZWRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZTI5MGJhMGFhNGUxMWU4MDgzYjdi
Mzk2YjkxMjdmZTc0MzZjNzY4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0Zvcm1B
c3NvY2lhdGVkRWxlbWVudC5jcHAKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCisKKyNpbmNsdWRlICJFdmVudC5o
IgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNp
bmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJWYWxpZGF0aW9uTWVzc2FnZS5oIgorI2luY2x1ZGUgIlZhbGlkaXR5
U3RhdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOworCitGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudChIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0pCisgICAgOiBtX2Zvcm0oZm9ybSkKKyAgICAsIG1fZGlzYWJsZWQo
ZmFsc2UpCisgICAgLCBtX3JlYWRPbmx5KGZhbHNlKQorICAgICwgbV9yZXF1aXJlZChmYWxzZSkK
KyAgICAsIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCisgICAgLCBtX3dpbGxWYWxpZGF0
ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV93aWxsVmFsaWRhdGUodHJ1ZSkKKyAgICAsIG1f
aXNWYWxpZCh0cnVlKQoreworfQorCitGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6On5Gb3JtQXNzb2Np
YXRlZEVsZW1lbnQoKQoreworfQorCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3Zl
RnJvbUZvcm0oKQoreworICAgIGlmICghbV9mb3JtKQorICAgICAgICByZXR1cm47CisgICAgbV9m
b3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICBtX2Zvcm0gPSAwOworfQorCitzdGF0
aWMgSFRNTEZvcm1FbGVtZW50KiBmaW5kRm9ybU93bmVyKEhUTUxFbGVtZW50KiBlbGVtZW50KQor
eworICAgIGZvciAoTm9kZSogbm9kZSA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShm
b3JtVGFnKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQq
Pihub2RlKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjpyZXNldEZvcm1Pd25lcihIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCit7CisgICAgSFRN
TEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KHRoaXMpOworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgZm9ybUlkKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKKyAg
ICBpZiAobV9mb3JtKSB7CisgICAgICAgIGlmIChmb3JtSWQuaXNOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAg
fQorICAgIG1fZm9ybSA9IDA7CisgICAgaWYgKCFmb3JtSWQuaXNOdWxsKCkpIHsKKyAgICAgICAg
Ly8gVGhlIEhUTUw1IHNwZWMgc2F5cyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBhc3NvY2lh
dGVkIHdpdGgKKyAgICAgICAgLy8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IHRv
IGhhdmUgYW4gSUQgdGhhdCBlcXVhbCB0bworICAgICAgICAvLyB0aGUgdmFsdWUgb2YgZm9ybSBh
dHRyaWJ1dGUsIHNvIHdlIHB1dCB0aGUgcmVzdWx0IG9mCisgICAgICAgIC8vIGRvY3VtZW50KCkt
PmdldEVsZW1lbnRCeUlkKCkgb3ZlciB0aGUgZ2l2ZW4gZWxlbWVudC4KKyAgICAgICAgRWxlbWVu
dCogZmlyc3RFbGVtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZm9y
bUlkKTsKKyAgICAgICAgaWYgKGZpcnN0RWxlbWVudCAmJiBmaXJzdEVsZW1lbnQtPmhhc1RhZ05h
bWUoZm9ybVRhZykpCisgICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVs
ZW1lbnQqPihmaXJzdEVsZW1lbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Zvcm0g
PSBmb3JtOworICAgIH0gZWxzZQorICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybU93bmVyKGVsZW1l
bnQpOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVu
dCh0aGlzKTsKK30KKwordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1Ry
ZWUoKQoreworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsK
KyAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKKyAgICAgICAg
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRl
KHRoaXMpOworICAgICAgICBFbGVtZW50KiBmb3JtRWxlbWVudCA9IGVsZW1lbnQtPmRvY3VtZW50
KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsK
KyAgICAgICAgaWYgKGZvcm1FbGVtZW50ICYmIGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1U
YWcpKSB7CisgICAgICAgICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAgICAgIG1fZm9ybS0+
cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnQqPihmb3JtRWxlbWVudCk7CisgICAgICAgICAgICBtX2Zvcm0tPnJl
Z2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFtX2Zv
cm0pIHsKKyAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIGEgbmV3IGZvcm0gZWxl
bWVudCBiZWluZyBjcmVhdGVkIGJ5CisgICAgICAgIC8vIEphdmFTY3JpcHQgYW5kIGluc2VydGVk
IGluc2lkZSBhIGZvcm0uICBJbiB0aGUgY2FzZSBvZiB0aGUgcGFyc2VyCisgICAgICAgIC8vIHNl
dHRpbmcgYSBmb3JtLCB3ZSB3aWxsIGFscmVhZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBt
X2Zvcm0sCisgICAgICAgIC8vIGFuZCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgor
ICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybU93bmVyKGVsZW1lbnQpOworICAgICAgICBpZiAobV9m
b3JtKQorICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAg
IH0KK30KKworc3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9vdChOb2RlKiBuKQoreworICAgIE5v
ZGUqIHJvb3QgPSBuOworICAgIGZvciAoOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKQorICAgICAg
ICByb290ID0gbjsKKyAgICByZXR1cm4gcm9vdDsKK30KKwordm9pZCBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSgpCit7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0
b0hUTUxFbGVtZW50KHRoaXMpOworICAgIGlmIChlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZv
cm1BdHRyKSkKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVt
ZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CisKKyAgICAvLyBJZiB0aGUgZm9ybSBhbmQgZWxl
bWVudCBhcmUgYm90aCBpbiB0aGUgc2FtZSB0cmVlLCBwcmVzZXJ2ZSB0aGUgY29ubmVjdGlvbiB0
byB0aGUgZm9ybS4KKyAgICAvLyBPdGhlcndpc2UsIG51bGwgb3V0IG91ciBmb3JtIGFuZCByZW1v
dmUgb3Vyc2VsdmVzIGZyb20gdGhlIGZvcm0ncyBsaXN0IG9mIGVsZW1lbnRzLgorICAgIGlmICht
X2Zvcm0gJiYgZmluZFJvb3QoZWxlbWVudCkgIT0gZmluZFJvb3QobV9mb3JtKSkKKyAgICAgICAg
cmVtb3ZlRnJvbUZvcm0oKTsKK30KKwordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1B
dHRyaWJ1dGVDaGFuZ2VkKCkKK3sKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVs
ZW1lbnQodGhpcyk7CisgICAgaWYgKCFlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRy
KSkgeworICAgICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byBy
ZXNldCBmb3JtIG93bmVyIGhlcmUuCisgICAgICAgIGlmIChtX2Zvcm0pCisgICAgICAgICAgICBt
X2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICBtX2Zvcm0gPSBmaW5kRm9y
bU93bmVyKGVsZW1lbnQpOworICAgICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAgZm9ybSgp
LT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICByZXNldEZv
cm1Pd25lcigwKTsKK30KKworYm9vbCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1Ob1ZhbGlk
YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIXRvSFRNTEVsZW1lbnQodGhpcyktPmdldEF0dHJp
YnV0ZShmb3Jtbm92YWxpZGF0ZUF0dHIpLmlzTnVsbCgpOworfQorCitWYWxpZGl0eVN0YXRlKiBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkaXR5KCkKK3sKKyAgICBpZiAoIW1fdmFsaWRpdHlT
dGF0ZSkKKyAgICAgICAgbV92YWxpZGl0eVN0YXRlID0gVmFsaWRpdHlTdGF0ZTo6Y3JlYXRlKHRo
aXMpOworCisgICAgcmV0dXJuIG1fdmFsaWRpdHlTdGF0ZS5nZXQoKTsKK30KKworYm9vbCBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ6OnJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IFNob3VsZCByZXR1cm4gZmFsc2UgaWYgdGhpcyBlbGVtZW50IGhhcyBhIGRhdGFsaXN0
IGVsZW1lbnQgYXMgYW4KKyAgICAvLyBhbmNlc3Rvci4gU2VlIEhUTUw1IDQuMTAuMTAgJ1RoZSBk
YXRhbGlzdCBlbGVtZW50LicKKyAgICByZXR1cm4gIW1fZGlzYWJsZWQgJiYgIW1fcmVhZE9ubHk7
Cit9CisKK2Jvb2wgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp3aWxsVmFsaWRhdGUoKSBjb25zdAor
eworICAgIGlmICghbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCkgeworICAgICAgICBtX3dpbGxW
YWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgbV93aWxsVmFsaWRhdGUgPSByZWNh
bGNXaWxsVmFsaWRhdGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB0aGUgZm9sbG93
aW5nIGFzc2VydGlvbiBmYWlscywgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpIGlzIG5vdAor
ICAgICAgICAvLyBjYWxsZWQgY29ycmVjdGx5IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMg
cmVjYWxjV2lsbFZhbGlkYXRlKCkgcmVzdWx0CisgICAgICAgIC8vIGlzIHVwZGF0ZWQuCisgICAg
ICAgIEFTU0VSVChtX3dpbGxWYWxpZGF0ZSA9PSByZWNhbGNXaWxsVmFsaWRhdGUoKSk7CisgICAg
fQorICAgIHJldHVybiBtX3dpbGxWYWxpZGF0ZTsKK30KKwordm9pZCBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKQoreworICAgIC8vIFdlIG5lZWQgdG8g
cmVjYWxjdWxhdGUgd2lsbFZhbGlkdGUgaW1tZWRpYXRlbHkgYmVjYXVzZSB3aWxsVmFsaWRhdGUK
KyAgICAvLyBjaGFuZ2UgY2FuIGNhdXNlcyBzdHlsZSBjaGFuZ2UuCisgICAgYm9vbCBuZXdXaWxs
VmFsaWRhdGUgPSByZWNhbGNXaWxsVmFsaWRhdGUoKTsKKyAgICBpZiAobV93aWxsVmFsaWRhdGVJ
bml0aWFsaXplZCAmJiBtX3dpbGxWYWxpZGF0ZSA9PSBuZXdXaWxsVmFsaWRhdGUpCisgICAgICAg
IHJldHVybjsKKyAgICBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBtX3dp
bGxWYWxpZGF0ZSA9IG5ld1dpbGxWYWxpZGF0ZTsKKyAgICB0b0hUTUxFbGVtZW50KHRoaXMpLT5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaWYgKCFtX3dpbGxWYWxpZGF0ZSkKKyAgICAgICAg
aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworfQorCitTdHJpbmcgRm9ybUFzc29jaWF0
ZWRFbGVtZW50Ojp2YWxpZGF0aW9uTWVzc2FnZSgpCit7CisgICAgcmV0dXJuIHZhbGlkaXR5KCkt
PnZhbGlkYXRpb25NZXNzYWdlKCk7Cit9CisKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp1
cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQoreworICAgIEhUTUxFbGVtZW50KiBlbGVt
ZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKKyAgICBQYWdlKiBwYWdlID0gZWxlbWVudC0+ZG9j
dW1lbnQoKS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIFN0
cmluZyBtZXNzYWdlOworICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigpICYmIHdpbGxWYWxpZGF0
ZSgpKSB7CisgICAgICAgIG1lc3NhZ2UgPSB2YWxpZGF0aW9uTWVzc2FnZSgpLnN0cmlwV2hpdGVT
cGFjZSgpOworICAgICAgICAvLyBIVE1MNSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgYXNrIFVBIHRv
IHNob3cgdGhlIHRpdGxlIGF0dHJpYnV0ZSB2YWx1ZQorICAgICAgICAvLyB3aXRoIHRoZSB2YWxp
ZGF0aW9uTWVzc2FnZS4gIEhvd2V2ZXIsIHRoaXMgYmVoYXZpb3IgaXMgc2FtZSBhcyBPcGVyYQor
ICAgICAgICAvLyBhbmQgdGhlIHNwZWNpZmljYXRpb24gZGVzY3JpYmVzIHN1Y2ggYmVoYXZpb3Ig
YXMgYW4gZXhhbXBsZS4KKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGVsZW1l
bnQtPmdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOworICAgICAgICBpZiAoIW1lc3NhZ2UuaXNFbXB0
eSgpICYmICF0aXRsZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCdc
bicpOworICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQodGl0bGUpOworICAgICAgICB9CisgICAg
fQorICAgIGlmICghbV92YWxpZGF0aW9uTWVzc2FnZSkgeworICAgICAgICBtX3ZhbGlkYXRpb25N
ZXNzYWdlID0gVmFsaWRhdGlvbk1lc3NhZ2U6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgbV92YWxp
ZGF0aW9uTWVzc2FnZS0+c2V0TWVzc2FnZShtZXNzYWdlKTsKKyAgICB9IGVsc2UgaWYgKG1lc3Nh
Z2UuaXNFbXB0eSgpKQorICAgICAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Cisg
ICAgZWxzZSBpZiAobV92YWxpZGF0aW9uTWVzc2FnZS0+bWVzc2FnZSgpICE9IG1lc3NhZ2UpCisg
ICAgICAgIG1fdmFsaWRhdGlvbk1lc3NhZ2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3Zv
aWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkK
K3sKKyAgICBtX3ZhbGlkYXRpb25NZXNzYWdlID0gMDsKK30KKworU3RyaW5nIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudDo6dmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV92YWxpZGF0aW9uTWVzc2FnZSA/IG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSA6
IFN0cmluZygpOworfQorCitib29sIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Y2hlY2tWYWxpZGl0
eShWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxp
ZENvbnRyb2xzKQoreworICAgIGlmICghd2lsbFZhbGlkYXRlKCkgfHwgaXNWYWxpZEZvcm1Db250
cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBBbiBldmVudCBoYW5k
bGVyIGNhbiBkZXJlZiB0aGlzIG9iamVjdC4KKyAgICBSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50PiBwcm90ZWN0b3IodGhpcyk7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxF
bGVtZW50KHRoaXMpOworICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2luYWxEb2N1bWVudChlbGVt
ZW50LT5kb2N1bWVudCgpKTsKKyAgICBib29sIG5lZWRzRGVmYXVsdEFjdGlvbiA9IGVsZW1lbnQt
PmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBm
YWxzZSwgdHJ1ZSkpOworICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52
YWxpZENvbnRyb2xzICYmIGVsZW1lbnQtPmluRG9jdW1lbnQoKSAmJiBvcmlnaW5hbERvY3VtZW50
ID09IGVsZW1lbnQtPmRvY3VtZW50KCkpCisgICAgICAgIHVuaGFuZGxlZEludmFsaWRDb250cm9s
cy0+YXBwZW5kKHRoaXMpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKQoreworICAgIC8vIElmIHRo
ZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZhaWxzLCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKSBpcyBu
b3QgY2FsbGVkCisgICAgLy8gY29ycmVjdGx5IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMg
dmFsaWRpdHkgaXMgdXBkYXRlZC4KKyAgICBBU1NFUlQobV9pc1ZhbGlkID09IHZhbGlkaXR5KCkt
PnZhbGlkKCkpOworICAgIHJldHVybiBtX2lzVmFsaWQ7Cit9CisKK3ZvaWQgRm9ybUFzc29jaWF0
ZWRFbGVtZW50OjpzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKQoreworICAgIGJvb2wgbmV3SXNWYWxp
ZCA9IHZhbGlkaXR5KCktPnZhbGlkKCk7CisgICAgaWYgKHdpbGxWYWxpZGF0ZSgpICYmIG5ld0lz
VmFsaWQgIT0gbV9pc1ZhbGlkKSB7CisgICAgICAgIC8vIFVwZGF0ZSBzdHlsZSBmb3IgcHNldWRv
IGNsYXNzZXMgc3VjaCBhcyA6dmFsaWQgOmludmFsaWQuCisgICAgICAgIHRvSFRNTEVsZW1lbnQo
dGhpcyktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICB9CisgICAgbV9pc1ZhbGlkID0gbmV3
SXNWYWxpZDsKKworICAgIC8vIFVwZGF0ZXMgb25seSBpZiB0aGlzIGNvbnRyb2wgYWxyZWFkeSBo
YXMgYSB2YWxpZHRpb24gbWVzc2FnZS4KKyAgICBpZiAoIXZpc2libGVWYWxpZGF0aW9uTWVzc2Fn
ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBDYWxscyB1cGRhdGVWaXNpYmxlVmFsaWRhdGlv
bk1lc3NhZ2UoKSBldmVuIGlmIG1faXNWYWxpZCBpcyBub3QKKyAgICAgICAgLy8gY2hhbmdlZCBi
ZWNhdXNlIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGNhbiBiZSBjaGFnbmVkLgorICAgICAgICB1cGRh
dGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICB9Cit9CisKK3ZvaWQgRm9ybUFzc29j
aWF0ZWRFbGVtZW50OjpzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJpbmcmIGVycm9yKQorewor
ICAgIHZhbGlkaXR5KCktPnNldEN1c3RvbUVycm9yTWVzc2FnZShlcnJvcik7Cit9CisKK2NvbnN0
IEhUTUxFbGVtZW50KiB0b0hUTUxFbGVtZW50KGNvbnN0IEZvcm1Bc3NvY2lhdGVkRWxlbWVudCog
YXNzb2NpYXRlZEVsZW1lbnQpCit7CisgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5pc0Zvcm1D
b250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KGFzc29jaWF0ZWRFbGVtZW50KTsKKyAgICAvLyBBc3N1bWVzIHRo
ZSBlbGVtZW50IGlzIGFuIEhUTUxPYmplY3RFbGVtZW50CisgICAgY29uc3QgSFRNTEVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MT2JqZWN0RWxlbWVudCo+KGFzc29jaWF0
ZWRFbGVtZW50KTsKKyAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKTsK
KyAgICByZXR1cm4gZWxlbWVudDsKK30KKworSFRNTEVsZW1lbnQqIHRvSFRNTEVsZW1lbnQoRm9y
bUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVudCkKK3sKKyAgICByZXR1cm4gY29u
c3RfY2FzdDxIVE1MRWxlbWVudCo+KHRvSFRNTEVsZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3QgRm9y
bUFzc29jaWF0ZWRFbGVtZW50Kj4oYXNzb2NpYXRlZEVsZW1lbnQpKSk7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCBiL1dlYkNvcmUvaHRt
bC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2I4Y2E0YTkwMTY3NzFhYzky
MmVjNTI0ODdhNTgyMDM3YTFiMDA0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5oCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGb3JtQXNzb2Np
YXRlZEVsZW1lbnRfaAorI2RlZmluZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnRfaAorCisjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb3JtQXNz
b2NpYXRlZEVsZW1lbnREYXRhOworY2xhc3MgRm9ybURhdGFMaXN0OworY2xhc3MgSFRNTEZvcm1F
bGVtZW50OworY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2U7CitjbGFzcyBWYWxpZGl0eVN0YXRlOwor
Y2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKKworY2xhc3MgRm9ybUFzc29jaWF0ZWRFbGVtZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Gb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsKKworICAgIHZv
aWQgcmVmKCkgeyByZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsgfQorICAgIHZvaWQgZGVyZWYo
KSB7IGRlcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCk7IH0KKworICAgIGJvb2wgZm9ybU5vVmFs
aWRhdGUoKSBjb25zdDsKKyAgICBWYWxpZGl0eVN0YXRlKiB2YWxpZGl0eSgpOworCisgICAgdmly
dHVhbCB2b2lkIHJlc2V0KCkgeyB9CisKKyAgICBib29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVz
UmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOyB9CisgICAg
dm9pZCBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVl
TWF0Y2hlc1JlbmRlcmVyID0gYjsgfQorCisgICAgdmlydHVhbCBib29sIGlzRm9ybUNvbnRyb2xF
bGVtZW50KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgpIGNv
bnN0OworICAgIFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpOworICAgIHZvaWQgdXBkYXRlVmlz
aWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7CisgICAgdm9pZCBoaWRlVmlzaWJsZVZhbGlkYXRpb25N
ZXNzYWdlKCk7CisgICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29j
aWF0ZWRFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMgPSAwKTsKKyAgICAvLyBU
aGlzIG11c3QgYmUgY2FsbGVkIHdoZW4gYSB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgb3IgY29udHJv
bCB2YWx1ZSBpcyBjaGFuZ2VkLgorICAgIHZvaWQgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Cisg
ICAgdm9pZCBzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJpbmcmKTsKKworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1Db250cm9sVHlwZSgpOyB9Cisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gZm9ybUNvbnRyb2xO
YW1lKCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzYWJsZWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCB2YWx1ZSkgeyBt
X2Rpc2FibGVkID0gdmFsdWU7IH0KKyAgICBib29sIHJlcXVpcmVkKCkgY29uc3QgeyByZXR1cm4g
bV9yZXF1aXJlZDsgfQorICAgIHZvaWQgc2V0UmVxdWlyZWQoYm9vbCB2YWx1ZSkgeyBtX3JlcXVp
cmVkID0gdmFsdWU7IH0KKyAgICBib29sIHJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9yZWFk
T25seTsgfQorICAgIHZvaWQgc2V0UmVhZE9ubHkoYm9vbCB2YWx1ZSkgeyBtX3JlYWRPbmx5ID0g
dmFsdWU7IH0KKworICAgIHZpcnR1YWwgSFRNTEZvcm1FbGVtZW50KiBmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV9mb3JtOyB9CisgICAgdmlydHVhbCB2b2lkIGZvcm1EZXN0cm95ZWQoKSB7IG1fZm9y
bSA9IDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGFibGUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpID0gMDsK
KworICAgIHZvaWQgcmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50Kik7CisKK3Byb3RlY3Rl
ZDoKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQoSFRNTEZvcm1FbGVtZW50Kik7CisKKyAgICAv
LyBUaGlzIG11c3QgYmUgY2FsbGVkIGFueSB0aW1lIHRoZSByZXN1bHQgb2Ygd2lsbFZhbGlkYXRl
KCkgaGFzIGNoYW5nZWQuCisgICAgdm9pZCBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7Cisg
ICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBpc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7CisKKyAgICB2b2lkIGluc2VydGVkSW50
b1RyZWUoKTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tVHJlZSgpOworICAgIHZvaWQgc2V0Rm9ybShI
VE1MRm9ybUVsZW1lbnQqIGZvcm0pIHsgbV9mb3JtID0gZm9ybTsgfQorICAgIHZvaWQgcmVtb3Zl
RnJvbUZvcm0oKTsKKyAgICB2b2lkIGZvcm1BdHRyaWJ1dGVDaGFuZ2VkKCk7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkg
Y29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSA9IDA7
CisKKyAgICBTdHJpbmcgdmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3Q7CisKKyAgICBI
VE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKKyAgICBPd25QdHI8VmFsaWRpdHlTdGF0ZT4gbV92YWxp
ZGl0eVN0YXRlOworICAgIE93blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gbV92YWxpZGF0aW9uTWVz
c2FnZTsKKworICAgIGJvb2wgbV9kaXNhYmxlZCA6IDE7CisgICAgYm9vbCBtX3JlYWRPbmx5IDog
MTsKKyAgICBib29sIG1fcmVxdWlyZWQgOiAxOworICAgIGJvb2wgbV92YWx1ZU1hdGNoZXNSZW5k
ZXJlciA6IDE7CisKKyAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBvZiBtX3dpbGxWYWxpZGF0ZSBk
ZXBlbmRzIG9uIHRoZSBkZXJpdmVkIGNsYXNzLiBXZSBjYW4ndAorICAgIC8vIGluaXRpYWxpemUg
aXQgd2l0aCBhIHZpcnR1YWwgZnVuY3Rpb24gaW4gdGhlIGNvbnN0cnVjdG9yLiBtX3dpbGxWYWxp
ZGF0ZQorICAgIC8vIGlzIG5vdCBkZXRlcm1pbmlzdGljIGFzIGxvbmcgYXMgbV93aWxsVmFsaWRh
dGVJbml0aWFsaXplZCBpcyBmYWxzZS4KKyAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGVJ
bml0aWFsaXplZDogMTsKKyAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGUgOiAxOworCisg
ICAgLy8gQ2FjaGUgb2YgdmFsaWRpdHkoKS0+dmFsaWQoKS4KKyAgICAvLyBCdXQgImNhbmRpZGF0
ZSBmb3IgY29uc3RyYWludCB2YWxpZGF0aW9uIiBkb2Vzbid0IGFmZmVjdCBtX2lzVmFsaWQuCisg
ICAgYm9vbCBtX2lzVmFsaWQgOiAxOworfTsKKworSFRNTEVsZW1lbnQqIHRvSFRNTEVsZW1lbnQo
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7Citjb25zdCBIVE1MRWxlbWVudCogdG9IVE1MRWxlbWVu
dChjb25zdCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsKKworfQorCisjZW5kaWYgLy8gRm9ybUFz
c29jaWF0ZWRFbGVtZW50X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxl
Y3Rpb24uY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAKaW5kZXggNDE0
N2YyOWM1ZTJjYmMzNzZlNzA0MGY1MDkxYjdiNmE2OTRhYmM0ZC4uOWZkOWRlZjMwMDgzNWI2M2Qx
OTZiZTZlODQ4N2FhNmNjNTgzOTQxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29sbGVjdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAK
QEAgLTc4LDEyICs3OCwxMiBAQCBOb2RlKiBIVE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CiAgICAgICAgIGluZm8oKS0+ZWxlbWVudHNBcnJheVBvc2l0aW9uID0g
MDsKICAgICB9CiAKLSAgICBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBlbGVtZW50
c0FycmF5ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYmFzZSgpKS0+bV9hc3NvY2lh
dGVkRWxlbWVudHM7CisgICAgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVtZW50
c0FycmF5ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYmFzZSgpKS0+bV9hc3NvY2lh
dGVkRWxlbWVudHM7CiAgICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gaW5mbygpLT5wb3NpdGlv
bjsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmZvKCktPmVsZW1lbnRzQXJyYXlQb3Np
dGlvbjsgaSA8IGVsZW1lbnRzQXJyYXkuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRzQXJyYXlbaV07Ci0gICAgICAgIGlmIChl
bGVtZW50LT5pc0VudW1lcmF0YWJsZSgpKSB7CisgICAgICAgIGlmIChlbGVtZW50c0FycmF5W2ld
LT5pc0VudW1lcmF0YWJsZSgpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9
IHRvSFRNTEVsZW1lbnQoZWxlbWVudHNBcnJheVtpXSk7CiAgICAgICAgICAgICBpZiAoaW5kZXgg
PT0gY3VycmVudEluZGV4KSB7CiAgICAgICAgICAgICAgICAgaW5mbygpLT5wb3NpdGlvbiA9IGlu
ZGV4OwogICAgICAgICAgICAgICAgIGluZm8oKS0+Y3VycmVudCA9IGVsZW1lbnQ7CkBAIC0xMTAs
MjEgKzExMCwyMyBAQCBFbGVtZW50KiBIVE1MRm9ybUNvbGxlY3Rpb246OmdldE5hbWVkRm9ybUl0
ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbgogCiAgICAgYm9vbCBmb3VuZElu
cHV0RWxlbWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+
bV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudCogZSA9IGZvcm0tPm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwotICAgICAgICBp
ZiAoZS0+aXNFbnVtZXJhdGFibGUoKSAmJiBlLT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5h
bWUpIHsKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVudCA9
IGZvcm0tPm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IHRvSFRNTEVsZW1lbnQoYXNzb2NpYXRlZEVsZW1lbnQpOworICAgICAgICBpZiAoYXNz
b2NpYXRlZEVsZW1lbnQtPmlzRW51bWVyYXRhYmxlKCkKKyAgICAgICAgICAgICYmIGVsZW1lbnQt
PmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgewogICAgICAgICAgICAgZm91bmRJbnB1
dEVsZW1lbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICghZHVwbGljYXRlTnVtYmVyKQotICAg
ICAgICAgICAgICAgIHJldHVybiBlOworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50Owog
ICAgICAgICAgICAgLS1kdXBsaWNhdGVOdW1iZXI7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAoIWZvdW5kSW5wdXRFbGVtZW50cykgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZm9ybS0+bV9pbWFnZUVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBIVE1M
SW1hZ2VFbGVtZW50KiBlID0gZm9ybS0+bV9pbWFnZUVsZW1lbnRzW2ldOwotICAgICAgICAgICAg
aWYgKGUtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgeworICAgICAgICAgICAgSFRN
TEltYWdlRWxlbWVudCogZWxlbWVudCA9IGZvcm0tPm1faW1hZ2VFbGVtZW50c1tpXTsKKyAgICAg
ICAgICAgIGlmIChlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZU51bWJlcikKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICAg
ICAgICAgIC0tZHVwbGljYXRlTnVtYmVyOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0x
OTEsMTAgKzE5MywxMSBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hl
KCkgY29uc3QKICAgICBIVE1MRm9ybUVsZW1lbnQqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVs
ZW1lbnQqPihiYXNlKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPm1fYXNz
b2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIGUgPSBmLT5tX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGUtPmlz
RW51bWVyYXRhYmxlKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRy
VmFsID0gZS0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZUF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOworICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gZi0+bV9hc3NvY2lhdGVkRWxl
bWVudHNbaV07CisgICAgICAgIGlmIChhc3NvY2lhdGVkRWxlbWVudC0+aXNFbnVtZXJhdGFibGUo
KSkgeworICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGFz
c29jaWF0ZWRFbGVtZW50KTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRy
VmFsID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwog
ICAgICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gYWRkIHRvIGlkIGNhY2hlCiAgICAgICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiogaWRW
ZWN0b3IgPSBpbmZvKCktPmlkQ2FjaGUuZ2V0KGlkQXR0clZhbC5pbXBsKCkpOwpAQCAtMjAyLDcg
KzIwNSw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBjb25z
dAogICAgICAgICAgICAgICAgICAgICBpZFZlY3RvciA9IG5ldyBWZWN0b3I8RWxlbWVudCo+Owog
ICAgICAgICAgICAgICAgICAgICBpbmZvKCktPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5pbXBsKCks
IGlkVmVjdG9yKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWRWZWN0b3It
PmFwcGVuZChlKTsKKyAgICAgICAgICAgICAgICBpZFZlY3Rvci0+YXBwZW5kKGVsZW1lbnQpOwog
ICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cy5hZGQoaWRBdHRyVmFsLmltcGwoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAm
JiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwpIHsKQEAgLTIxMiwxNiArMjE1LDE2IEBAIHZvaWQg
SFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdAogICAgICAgICAgICAg
ICAgICAgICBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcjxFbGVtZW50Kj47CiAgICAgICAgICAgICAg
ICAgICAgIGluZm8oKS0+bmFtZUNhY2hlLmFkZChuYW1lQXR0clZhbC5pbXBsKCksIG5hbWVWZWN0
b3IpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lVmVjdG9yLT5hcHBl
bmQoZSk7CisgICAgICAgICAgICAgICAgbmFtZVZlY3Rvci0+YXBwZW5kKGVsZW1lbnQpOwogICAg
ICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cy5hZGQobmFtZUF0dHJWYWwuaW1wbCgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmLT5tX2ltYWdlRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTElt
YWdlRWxlbWVudCogZSA9IGYtPm1faW1hZ2VFbGVtZW50c1tpXTsKLSAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsK
KyAgICAgICAgSFRNTEltYWdlRWxlbWVudCogZWxlbWVudCA9IGYtPm1faW1hZ2VFbGVtZW50c1tp
XTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlbGVtZW50LT5nZXRJ
ZEF0dHJpYnV0ZSgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0g
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKICAgICAgICAgaWYgKCFpZEF0dHJWYWwu
aXNFbXB0eSgpICYmICFmb3VuZElucHV0RWxlbWVudHMuY29udGFpbnMoaWRBdHRyVmFsLmltcGwo
KSkpIHsKICAgICAgICAgICAgIC8vIGFkZCB0byBpZCBjYWNoZQogICAgICAgICAgICAgVmVjdG9y
PEVsZW1lbnQqPiogaWRWZWN0b3IgPSBpbmZvKCktPmlkQ2FjaGUuZ2V0KGlkQXR0clZhbC5pbXBs
KCkpOwpAQCAtMjI5LDcgKzIzMiw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVO
YW1lQ2FjaGUoKSBjb25zdAogICAgICAgICAgICAgICAgIGlkVmVjdG9yID0gbmV3IFZlY3RvcjxF
bGVtZW50Kj47CiAgICAgICAgICAgICAgICAgaW5mbygpLT5pZENhY2hlLmFkZChpZEF0dHJWYWwu
aW1wbCgpLCBpZFZlY3Rvcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZFZlY3Rvci0+
YXBwZW5kKGUpOworICAgICAgICAgICAgaWRWZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0g
bmFtZUF0dHJWYWwgJiYgIWZvdW5kSW5wdXRFbGVtZW50cy5jb250YWlucyhuYW1lQXR0clZhbC5p
bXBsKCkpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gbmFtZSBjYWNoZQpAQCAtMjM4LDcgKzI0
MSw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdAog
ICAgICAgICAgICAgICAgIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsKICAgICAg
ICAgICAgICAgICBpbmZvKCktPm5hbWVDYWNoZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBuYW1l
VmVjdG9yKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5hbWVWZWN0b3ItPmFwcGVuZChl
KTsKKyAgICAgICAgICAgIG5hbWVWZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgfQog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDJmNWQ0
MTRmM2I0ZDg4MWQ3ZmNlNmRiNzgwYmE5MWNiYzViMWQwZTcuLmE2ZjE3NzZjOGVjOGE2ZDA0ZTU0
OTNlY2FmMTY2ZmJiZDZhOGY2ODQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKQEAgLTQ1LDggKzQ1LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5o
IgotI2luY2x1ZGUgIlZhbGlkYXRpb25NZXNzYWdlLmgiCi0jaW5jbHVkZSAiVmFsaWRpdHlTdGF0
ZS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTU3
LDI1ICs1NSwxOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogICAgIDogSFRNTEVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2Zvcm0oZm9ybSkKLSAgICAsIG1fZGlz
YWJsZWQoZmFsc2UpCi0gICAgLCBtX3JlYWRPbmx5KGZhbHNlKQotICAgICwgbV9yZXF1aXJlZChm
YWxzZSkKLSAgICAsIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCi0gICAgLCBtX3dpbGxW
YWxpZGF0ZUluaXRpYWxpemVkKGZhbHNlKQotICAgICwgbV93aWxsVmFsaWRhdGUodHJ1ZSkKLSAg
ICAsIG1faXNWYWxpZCh0cnVlKQorICAgICwgRm9ybUFzc29jaWF0ZWRFbGVtZW50KGZvcm0pCiB7
Ci0gICAgaWYgKCFtX2Zvcm0pCi0gICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsK
LSAgICBpZiAobV9mb3JtKQotICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhp
cyk7CisgICAgaWYgKCF0aGlzLT5mb3JtKCkpCisgICAgICAgIHNldEZvcm0oZmluZEZvcm1BbmNl
c3RvcigpKTsKKyAgICBpZiAodGhpcy0+Zm9ybSgpKQorICAgICAgICB0aGlzLT5mb3JtKCktPnJl
Z2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CiB9CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5I
VE1MRm9ybUNvbnRyb2xFbGVtZW50KCkKIHsKLSAgICBpZiAobV9mb3JtKQotICAgICAgICBtX2Zv
cm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgIGlmIChmb3JtKCkpCisgICAgICAgIGZv
cm0oKS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6ZGV0YWNoKCkKQEAgLTg0LDQxICs3NSwyOCBAQCB2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRldGFjaCgpCiAgICAgSFRNTEVsZW1lbnQ6OmRldGFjaCgpOwogfQogCi1ib29s
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1Ob1ZhbGlkYXRlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gIWdldEF0dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0dHIpLmlzTnVsbCgpOwotfQotCi1W
YWxpZGl0eVN0YXRlKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2YWxpZGl0eSgpCi17Ci0gICAg
aWYgKCFtX3ZhbGlkaXR5U3RhdGUpCi0gICAgICAgIG1fdmFsaWRpdHlTdGF0ZSA9IFZhbGlkaXR5
U3RhdGU6OmNyZWF0ZSh0aGlzKTsKLQotICAgIHJldHVybiBtX3ZhbGlkaXR5U3RhdGUuZ2V0KCk7
Ci19Ci0KIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
QXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZGlzYWJsZWRBdHRy
KSB7Ci0gICAgICAgIGJvb2wgb2xkRGlzYWJsZWQgPSBtX2Rpc2FibGVkOwotICAgICAgICBtX2Rp
c2FibGVkID0gIWF0dHItPmlzTnVsbCgpOwotICAgICAgICBpZiAob2xkRGlzYWJsZWQgIT0gbV9k
aXNhYmxlZCkgeworICAgICAgICBib29sIG9sZERpc2FibGVkID0gZGlzYWJsZWQoKTsKKyAgICAg
ICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXREaXNhYmxlZCghYXR0ci0+aXNOdWxsKCkpOwor
ICAgICAgICBpZiAob2xkRGlzYWJsZWQgIT0gZGlzYWJsZWQoKSkgewogICAgICAgICAgICAgc2V0
TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVy
ZXIoKS0+c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgICAgIHJlbmRlcmVy
KCktPnRoZW1lKCktPnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBFbmFibGVkU3RhdGUpOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVhZG9ubHlBdHRyKSB7Ci0g
ICAgICAgIGJvb2wgb2xkUmVhZE9ubHkgPSBtX3JlYWRPbmx5OwotICAgICAgICBtX3JlYWRPbmx5
ID0gIWF0dHItPmlzTnVsbCgpOwotICAgICAgICBpZiAob2xkUmVhZE9ubHkgIT0gbV9yZWFkT25s
eSkgeworICAgICAgICBib29sIG9sZFJlYWRPbmx5ID0gcmVhZE9ubHkoKTsKKyAgICAgICAgRm9y
bUFzc29jaWF0ZWRFbGVtZW50OjpzZXRSZWFkT25seSghYXR0ci0+aXNOdWxsKCkpOworICAgICAg
ICBpZiAob2xkUmVhZE9ubHkgIT0gcmVhZE9ubHkoKSkgewogICAgICAgICAgICAgc2V0TmVlZHNT
dHlsZVJlY2FsYygpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+
c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnRo
ZW1lKCktPnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBSZWFkT25seVN0YXRlKTsKICAgICAgICAg
fQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHJlcXVpcmVkQXR0cikgewotICAgICAg
ICBib29sIG9sZFJlcXVpcmVkID0gbV9yZXF1aXJlZDsKLSAgICAgICAgbV9yZXF1aXJlZCA9ICFh
dHRyLT5pc051bGwoKTsKLSAgICAgICAgaWYgKG9sZFJlcXVpcmVkICE9IG1fcmVxdWlyZWQpIHsK
KyAgICAgICAgYm9vbCBvbGRSZXF1aXJlZCA9IHJlcXVpcmVkKCk7CisgICAgICAgIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudDo6c2V0UmVxdWlyZWQoIWF0dHItPmlzTnVsbCgpKTsKKyAgICAgICAgaWYg
KG9sZFJlcXVpcmVkICE9IHJlcXVpcmVkKCkpIHsKICAgICAgICAgICAgIHNldE5lZWRzVmFsaWRp
dHlDaGVjaygpOwogICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOyAvLyBVcGRhdGVz
IGZvciA6cmVxdWlyZWQgOm9wdGlvbmFsIGNsYXNzZXMuCiAgICAgICAgIH0KQEAgLTE1NCw1MSAr
MTMyLDE2IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKIAogdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKIHsKLSAg
ICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOwotICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZmFzdEdldEF0dHJpYnV0
ZShmb3JtQXR0cikpOwotICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5oYXNUYWdOYW1l
KGZvcm1UYWcpKSB7Ci0gICAgICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAgICAgIG1f
Zm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBtX2Zvcm0gPSBzdGF0
aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihlbGVtZW50KTsKLSAgICAgICAgICAgIG1fZm9ybS0+
cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIW1f
Zm9ybSkgewotICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgYSBuZXcgZm9ybSBl
bGVtZW50IGJlaW5nIGNyZWF0ZWQgYnkKLSAgICAgICAgLy8gSmF2YVNjcmlwdCBhbmQgaW5zZXJ0
ZWQgaW5zaWRlIGEgZm9ybS4gIEluIHRoZSBjYXNlIG9mIHRoZSBwYXJzZXIKLSAgICAgICAgLy8g
c2V0dGluZyBhIGZvcm0sIHdlIHdpbGwgYWxyZWFkeSBoYXZlIGEgbm9uLW51bGwgdmFsdWUgZm9y
IG1fZm9ybSwgCi0gICAgICAgIC8vIGFuZCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5n
LgotICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgICAgIGlmIChtX2Zv
cm0pCi0gICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5h
ZGRCdXR0b24odGhpcyk7Ci0gICAgfQorICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZSgpOworICAgIGlmICghZm9ybSgpKQorICAgICAgICBkb2N1bWVudCgpLT5jaGVj
a2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogCiAgICAgSFRNTEVsZW1lbnQ6Omlu
c2VydGVkSW50b1RyZWUoZGVlcCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgTm9kZSogZmluZFJvb3Qo
Tm9kZSogbikKLXsKLSAgICBOb2RlKiByb290ID0gbjsKLSAgICBmb3IgKDsgbjsgbiA9IG4tPnBh
cmVudE5vZGUoKSkKLSAgICAgICAgcm9vdCA9IG47Ci0gICAgcmV0dXJuIHJvb3Q7Ci19Ci0KIHZv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkKIHsK
LSAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCi0gICAgICAgIGRvY3VtZW50KCkt
PnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOwotCi0gICAgLy8g
SWYgdGhlIGZvcm0gYW5kIGVsZW1lbnQgYXJlIGJvdGggaW4gdGhlIHNhbWUgdHJlZSwgcHJlc2Vy
dmUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGZvcm0uCi0gICAgLy8gT3RoZXJ3aXNlLCBudWxsIG91
dCBvdXIgZm9ybSBhbmQgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBmb3JtJ3MgbGlzdCBvZiBl
bGVtZW50cy4KLSAgICBpZiAobV9mb3JtICYmIGZpbmRSb290KHRoaXMpICE9IGZpbmRSb290KG1f
Zm9ybSkpIHsKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAg
ICAgbV9mb3JtID0gMDsKLSAgICB9Ci0KKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92
ZWRGcm9tVHJlZSgpOwogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoZGVlcCk7CiB9
CiAKQEAgLTIyOCwxMSArMTcxLDYgQEAgYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdXRv
Zm9jdXMoKSBjb25zdAogICAgIHJldHVybiBoYXNBdHRyaWJ1dGUoYXV0b2ZvY3VzQXR0cik7CiB9
CiAKLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3JlcXVpcmVkOwotfQotCiBzdGF0aWMgdm9pZCB1cGRhdGVGcm9tRWxlbWVudENh
bGxiYWNrKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUX0FSRyhub2RlLCBub2RlLT5pc0VsZW1l
bnROb2RlKCkpOwpAQCAtMjkwLDEyNSArMjI4LDYgQEAgc2hvcnQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6dGFiSW5kZXgoKSBjb25zdAogICAgIHJldHVybiBFbGVtZW50Ojp0YWJJbmRleCgpOwog
fQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNv
bnN0Ci17Ci0gICAgLy8gRklYTUU6IFNob3VsZCByZXR1cm4gZmFsc2UgaWYgdGhpcyBlbGVtZW50
IGhhcyBhIGRhdGFsaXN0IGVsZW1lbnQgYXMgYW4KLSAgICAvLyBhbmNlc3Rvci4gU2VlIEhUTUw1
IDQuMTAuMTAgJ1RoZSBkYXRhbGlzdCBlbGVtZW50LicKLSAgICByZXR1cm4gIW1fZGlzYWJsZWQg
JiYgIW1fcmVhZE9ubHk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6d2lsbFZh
bGlkYXRlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQpIHsK
LSAgICAgICAgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIG1fd2ls
bFZhbGlkYXRlID0gcmVjYWxjV2lsbFZhbGlkYXRlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmFpbHMsIHNldE5lZWRzV2lsbFZhbGlkYXRl
Q2hlY2soKSBpcyBub3QKLSAgICAgICAgLy8gY2FsbGVkIGNvcnJlY3RseSB3aGVuIHNvbWV0aGlu
ZyB3aGljaCBjaGFuZ2VzIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIHJlc3VsdAotICAgICAgICAvLyBp
cyB1cGRhdGVkLgotICAgICAgICBBU1NFUlQobV93aWxsVmFsaWRhdGUgPT0gcmVjYWxjV2lsbFZh
bGlkYXRlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV93aWxsVmFsaWRhdGU7Ci19Ci0KLXZvaWQg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpCi17Ci0g
ICAgLy8gV2UgbmVlZCB0byByZWNhbGN1bGF0ZSB3aWxsVmFsaWR0ZSBpbW1lZGlhdGVseSBiZWNh
dXNlIHdpbGxWYWxpZGF0ZQotICAgIC8vIGNoYW5nZSBjYW4gY2F1c2VzIHN0eWxlIGNoYW5nZS4K
LSAgICBib29sIG5ld1dpbGxWYWxpZGF0ZSA9IHJlY2FsY1dpbGxWYWxpZGF0ZSgpOwotICAgIGlm
IChtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkICYmIG1fd2lsbFZhbGlkYXRlID09IG5ld1dpbGxW
YWxpZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQg
PSB0cnVlOwotICAgIG1fd2lsbFZhbGlkYXRlID0gbmV3V2lsbFZhbGlkYXRlOwotICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKLSAgICBpZiAoIW1fd2lsbFZhbGlkYXRlKQotICAgICAgICBoaWRl
VmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci19Ci0KLVN0cmluZyBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Ojp2YWxpZGF0aW9uTWVzc2FnZSgpCi17Ci0gICAgcmV0dXJuIHZhbGlkaXR5KCktPnZh
bGlkYXRpb25NZXNzYWdlKCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dXBk
YXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkKLXsKLSAgICBQYWdlKiBwYWdlID0gZG9jdW1l
bnQoKS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFN0cmlu
ZyBtZXNzYWdlOwotICAgIGlmIChyZW5kZXJlcigpICYmIHdpbGxWYWxpZGF0ZSgpKSB7Ci0gICAg
ICAgIG1lc3NhZ2UgPSB2YWxpZGF0aW9uTWVzc2FnZSgpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAg
ICAgICAvLyBIVE1MNSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgYXNrIFVBIHRvIHNob3cgdGhlIHRp
dGxlIGF0dHJpYnV0ZSB2YWx1ZQotICAgICAgICAvLyB3aXRoIHRoZSB2YWxpZGF0aW9uTWVzc2Fn
ZS4gIEhvd2V2ZXIsIHRoaXMgYmVoYXZpb3IgaXMgc2FtZSBhcyBPcGVyYQotICAgICAgICAvLyBh
bmQgdGhlIHNwZWNpZmljYXRpb24gZGVzY3JpYmVzIHN1Y2ggYmVoYXZpb3IgYXMgYW4gZXhhbXBs
ZS4KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGdldEF0dHJpYnV0ZSh0aXRs
ZUF0dHIpOwotICAgICAgICBpZiAoIW1lc3NhZ2UuaXNFbXB0eSgpICYmICF0aXRsZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCdcbicpOwotICAgICAgICAgICAgbWVz
c2FnZS5hcHBlbmQodGl0bGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghbV92YWxpZGF0
aW9uTWVzc2FnZSkgewotICAgICAgICBtX3ZhbGlkYXRpb25NZXNzYWdlID0gVmFsaWRhdGlvbk1l
c3NhZ2U6OmNyZWF0ZSh0aGlzKTsKLSAgICAgICAgbV92YWxpZGF0aW9uTWVzc2FnZS0+c2V0TWVz
c2FnZShtZXNzYWdlKTsKLSAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaXNFbXB0eSgpKQotICAgICAg
ICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgZWxzZSBpZiAobV92YWxpZGF0
aW9uTWVzc2FnZS0+bWVzc2FnZSgpICE9IG1lc3NhZ2UpCi0gICAgICAgIG1fdmFsaWRhdGlvbk1l
c3NhZ2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCi17Ci0gICAgbV92YWxpZGF0aW9u
TWVzc2FnZSA9IDA7Ci19Ci0KLVN0cmluZyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2aXNpYmxl
VmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX3ZhbGlkYXRpb25NZXNz
YWdlID8gbV92YWxpZGF0aW9uTWVzc2FnZS0+bWVzc2FnZSgpIDogU3RyaW5nKCk7Ci19Ci0KLWJv
b2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRyPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKLXsKLSAg
ICBpZiAoIXdpbGxWYWxpZGF0ZSgpIHx8IGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gZGVyZWYgdGhp
cyBvYmplY3QuCi0gICAgUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+IHByb3RlY3Rvcih0
aGlzKTsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG9yaWdpbmFsRG9jdW1lbnQoZG9jdW1lbnQoKSk7
Ci0gICAgYm9vbCBuZWVkc0RlZmF1bHRBY3Rpb24gPSBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLmludmFsaWRFdmVudCwgZmFsc2UsIHRydWUpKTsKLSAgICBpZiAobmVl
ZHNEZWZhdWx0QWN0aW9uICYmIHVuaGFuZGxlZEludmFsaWRDb250cm9scyAmJiBpbkRvY3VtZW50
KCkgJiYgb3JpZ2luYWxEb2N1bWVudCA9PSBkb2N1bWVudCgpKQotICAgICAgICB1bmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHMtPmFwcGVuZCh0aGlzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpCi17
Ci0gICAgLy8gSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmFpbHMsIHNldE5lZWRzVmFsaWRp
dHlDaGVjaygpIGlzIG5vdCBjYWxsZWQKLSAgICAvLyBjb3JyZWN0bHkgd2hlbiBzb21ldGhpbmcg
d2hpY2ggY2hhbmdlcyB2YWxpZGl0eSBpcyB1cGRhdGVkLgotICAgIEFTU0VSVChtX2lzVmFsaWQg
PT0gdmFsaWRpdHkoKS0+dmFsaWQoKSk7Ci0gICAgcmV0dXJuIG1faXNWYWxpZDsKLX0KLQotdm9p
ZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKQotewotICAg
IGJvb2wgbmV3SXNWYWxpZCA9IHZhbGlkaXR5KCktPnZhbGlkKCk7Ci0gICAgaWYgKHdpbGxWYWxp
ZGF0ZSgpICYmIG5ld0lzVmFsaWQgIT0gbV9pc1ZhbGlkKSB7Ci0gICAgICAgIC8vIFVwZGF0ZSBz
dHlsZSBmb3IgcHNldWRvIGNsYXNzZXMgc3VjaCBhcyA6dmFsaWQgOmludmFsaWQuCi0gICAgICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9Ci0gICAgbV9pc1ZhbGlkID0gbmV3SXNWYWxp
ZDsKLQotICAgIC8vIFVwZGF0ZXMgb25seSBpZiB0aGlzIGNvbnRyb2wgYWxyZWFkeSBoYXMgYSB2
YWxpZHRpb24gbWVzc2FnZS4KLSAgICBpZiAoIXZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpLmlz
RW1wdHkoKSkgewotICAgICAgICAvLyBDYWxscyB1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3Nh
Z2UoKSBldmVuIGlmIG1faXNWYWxpZCBpcyBub3QKLSAgICAgICAgLy8gY2hhbmdlZCBiZWNhdXNl
IGEgdmFsaWRhdGlvbiBtZXNzYWdlIGNhbiBiZSBjaGFnbmVkLgotICAgICAgICB1cGRhdGVWaXNp
YmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6c2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJiBlcnJvcikKLXsKLSAgICB2
YWxpZGl0eSgpLT5zZXRDdXN0b21FcnJvck1lc3NhZ2UoZXJyb3IpOwotfQotICAgIAogdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKQogewogICAgIGlmIChk
b2N1bWVudCgpLT5wYWdlKCkpCkBAIC00MjgsNjQgKzI0NywyMiBAQCB2b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKIAogSFRNTEZvcm1FbGVtZW50KiBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojp2aXJ0dWFsRm9ybSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
Zm9ybTsKKyAgICByZXR1cm4gRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtKCk7CiB9CiAKIGJv
b2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpICYmIG1fZm9ybSAmJiBt
X2Zvcm0tPmRlZmF1bHRCdXR0b24oKSA9PSB0aGlzOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnJlbW92ZUZyb21Gb3JtKCkKLXsKLSAgICBpZiAoIW1fZm9ybSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgbV9mb3Jt
ID0gMDsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXNldEZvcm1Pd25lcihI
VE1MRm9ybUVsZW1lbnQqIGZvcm0pCi17Ci0gICAgaWYgKG1fZm9ybSkgewotICAgICAgICBpZiAo
IWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwotICAgIH0KLSAgICBtX2Zvcm0gPSAw
OwotICAgIGlmIChmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgewotICAgICAgICAvLyBUaGUg
SFRNTDUgc3BlYyBzYXlzIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0
aAotICAgICAgICAvLyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQgdG8gaGF2ZSBh
biBJRCB0aGF0IGVxdWFsIHRvCi0gICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBmb3JtIGF0dHJpYnV0
ZSwgc28gd2UgcHV0IHRoZSByZXN1bHQgb2YKLSAgICAgICAgLy8gZG9jdW1lbnQoKS0+Z2V0RWxl
bWVudEJ5SWQoKSBvdmVyIHRoZSBnaXZlbiBlbGVtZW50LgotICAgICAgICBFbGVtZW50KiBmaXJz
dEVsZW1lbnQgPSBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGZv
cm1BdHRyKSk7Ci0gICAgICAgIGlmIChmaXJzdEVsZW1lbnQgJiYgZmlyc3RFbGVtZW50LT5oYXNU
YWdOYW1lKGZvcm1UYWcpKQotICAgICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1FbGVtZW50Kj4oZmlyc3RFbGVtZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9m
b3JtID0gZm9ybTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3Rv
cigpOwotICAgIGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVu
dCh0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRv
bnMoKS5hZGRCdXR0b24odGhpcyk7CisgICAgcmV0dXJuIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bigpICYmIGZvcm0oKSAmJiBmb3JtKCktPmRlZmF1bHRCdXR0b24oKSA9PSB0aGlzOwogfQogCiB2
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBh
dHRyLCBib29sIHByZXNlcnZlRGVjbHMpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBmb3Jt
QXR0cikgewotICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7Ci0gICAg
ICAgICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBm
b3JtIG93bmVyIGhlcmUuCi0gICAgICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAgICAg
IG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBtX2Zvcm0gPSBm
aW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAg
ICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0
dG9uKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc2V0Rm9ybU93bmVyKDAp
OwotICAgIH0KLSAgICBIVE1MRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2
ZURlY2xzKTsKKyAgICAgICAgZm9ybUF0dHJpYnV0ZUNoYW5nZWQoKTsKKyAgICAgICAgaWYgKCFm
b3JtKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRk
QnV0dG9uKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBIVE1MRWxlbWVudDo6YXR0cmlidXRl
Q2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Ojppc0xhYmVsYWJsZSgpIGNvbnN0CkBAIC01MTYsNyArMjkzLDcgQEAgUGFzc1JlZlB0
cjxOb2RlTGlzdD4gSFRNTEZvcm1Db250cm9sRWxlbWVudDo6bGFiZWxzKCkKICAgICAKICAgICBy
ZXR1cm4gTGFiZWxzTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzKTsKIH0KLSAgICAKKwogSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1l
bnQqIGYpCiAgICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvYywgZikKIHsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmggYi9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IDU2OGY2M2UxZTk4MjZiOTcw
YTI4NWNhMjZjMTJiODk4ZTU3NjEwZGUuLjU4NjhjODU1M2JkZDE0NjFhYTYxM2Q2NTQ3MjRhZjg4
MTg4YTBlNTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaApAQCAtMjQsNiAr
MjQsNyBAQAogI2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKICNkZWZpbmUgSFRNTEZv
cm1Db250cm9sRWxlbWVudF9oCiAKKyNpbmNsdWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNywy
NCArMzgsMjcgQEAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAogLy8gRklYTUU6IFRoZSBIVE1M
NSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoZXNlIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cy4KIC8v
IFNvIGNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgdG8gSFRNTEZvcm1Bc3NvY2lhdGVkRWxlbWVudC4K
LWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeworY2xh
c3MgSFRNTEZvcm1Db250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SFRNTEZvcm1Db250
cm9sRWxlbWVudCgpOwogCi0gICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9mb3JtOyB9Ci0gICAgVmFsaWRpdHlTdGF0ZSogdmFsaWRpdHkoKTsKLQotICAgIGJvb2wg
Zm9ybU5vVmFsaWRhdGUoKSBjb25zdDsKKyAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0oKSBjb25z
dCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm0oKTsgfQogCiAgICAgdmlydHVh
bCB2b2lkIHJlc2V0KCkgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRyb2xWYWx1ZU1h
dGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihib29s
IGIpIHsgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZm9y
bUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudDo6Zm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiKSB7IEZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihi
KTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgp
OwogCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KLSAg
ICB2b2lkIHNldERpc2FibGVkKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6ZGlzYWJsZWQoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sKTsKKworICAgIGJvb2wgcmVxdWlyZWQoKSBjb25z
dCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlcXVpcmVkKCk7IH0KKyAgICB2b2lk
IHNldFJlcXVpcmVkKGJvb2wgdmFsdWUpIHsgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXRSZXF1
aXJlZCh2YWx1ZSk7IH0KKworICAgIGJvb2wgcmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ6OnJlYWRPbmx5KCk7IH0KKyAgICB2b2lkIHNldFJlYWRPbmx5KGJv
b2wgdmFsdWUpIHsgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXRSZWFkT25seSh2YWx1ZSk7IH0K
IAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC02MiwxMSArNjYs
NiBAQCBwdWJsaWM6CiAgICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIGNvbnRyb2wg
d2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQuCiAgICAgdmlydHVhbCBib29sIGF1dG9mb2N1
cygpIGNvbnN0OwogCi0gICAgYm9vbCByZXF1aXJlZCgpIGNvbnN0OwotCi0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gZm9ybUNvbnRyb2xUeXBlKCk7IH0KLSAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBmb3JtQ29udHJvbE5h
bWUoKTsgfQotCiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkRm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiAh
ZGlzYWJsZWQoKTsgfQpAQCAtODMsMjUgKzgyLDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNBY3RpdmF0ZWRTdWJtaXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgdm9pZCBzZXRBY3RpdmF0ZWRTdWJtaXQoYm9vbCkgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wg
d2lsbFZhbGlkYXRlKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCk7Ci0g
ICAgdm9pZCB1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICB2b2lkIGhpZGVW
aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICBib29sIGNoZWNrVmFsaWRpdHkoVmVjdG9y
PFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJv
bHMgPSAwKTsKLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdoZW4gYSB2YWxpZGF0aW9uIGNv
bnN0cmFpbnQgb3IgY29udHJvbCB2YWx1ZSBpcyBjaGFuZ2VkLgotICAgIHZvaWQgc2V0TmVlZHNW
YWxpZGl0eUNoZWNrKCk7Ci0gICAgdm9pZCBzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJpbmcm
KTsKLQotICAgIHZvaWQgZm9ybURlc3Ryb3llZCgpIHsgbV9mb3JtID0gMDsgfQorICAgIHZpcnR1
YWwgYm9vbCB3aWxsVmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQ6OndpbGxWYWxpZGF0ZSgpOyB9CiAKICAgICBib29sIGlzTGFiZWxhYmxlKCkgY29uc3Q7CiAg
ICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbGFiZWxzKCk7Ci0gICAgCi0gICAgYm9vbCByZWFkT25s
eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KIAotICAgIHZvaWQgcmVzZXRGb3JtT3du
ZXIoSFRNTEZvcm1FbGVtZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQo
QXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOwogCisgICAgdXNpbmcgVHJl
ZVNoYXJlZDxDb250YWluZXJOb2RlPjo6cmVmOworICAgIHVzaW5nIFRyZWVTaGFyZWQ8Q29udGFp
bmVyTm9kZT46OmRlcmVmOworCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVu
dCopOwogCkBAIC0xMTksMTcgKzEwOSwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoQmx1ckV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogCi0gICAg
dm9pZCByZW1vdmVGcm9tRm9ybSgpOwotCi0gICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhbnkg
dGltZSB0aGUgcmVzdWx0IG9mIHdpbGxWYWxpZGF0ZSgpIGhhcyBjaGFuZ2VkLgotICAgIHZvaWQg
c2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwotICAgIHZpcnR1YWwgYm9vbCByZWNhbGNXaWxs
VmFsaWRhdGUoKSBjb25zdDsKLQogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0ID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBy
ZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRl
cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgeyBkZXJlZigpOyB9CisKICAgICB2aXJ0dWFsIGJv
b2wgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSB7IHJldHVybiBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKTsgfQogCiAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKIApAQCAtMTM3LDI2ICsxMjUsNyBAQCBwcml2
YXRlOgogCiAgICAgdmlydHVhbCBIVE1MRm9ybUVsZW1lbnQqIHZpcnR1YWxGb3JtKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpOwotICAgIFN0cmluZyB2aXNp
YmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKLQotICAgIEhUTUxGb3JtRWxlbWVudCogbV9m
b3JtOwotICAgIE93blB0cjxWYWxpZGl0eVN0YXRlPiBtX3ZhbGlkaXR5U3RhdGU7Ci0gICAgT3du
UHRyPFZhbGlkYXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRpb25NZXNzYWdlOwotICAgIGJvb2wgbV9k
aXNhYmxlZCA6IDE7Ci0gICAgYm9vbCBtX3JlYWRPbmx5IDogMTsKLSAgICBib29sIG1fcmVxdWly
ZWQgOiAxOwotICAgIGJvb2wgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA6IDE7Ci0KLSAgICAvLyBU
aGUgaW5pdGlhbCB2YWx1ZSBvZiBtX3dpbGxWYWxpZGF0ZSBkZXBlbmRzIG9uIHRoZSBkZXJpdmVk
IGNsYXNzLiBXZSBjYW4ndAotICAgIC8vIGluaXRpYWxpemUgaXQgd2l0aCBhIHZpcnR1YWwgZnVu
Y3Rpb24gaW4gdGhlIGNvbnN0cnVjdG9yLiBtX3dpbGxWYWxpZGF0ZQotICAgIC8vIGlzIG5vdCBk
ZXRlcm1pbmlzdGljIGFzIGxvbmcgYXMgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCBpcyBmYWxz
ZS4KLSAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZDogMTsKLSAgICBt
dXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGUgOiAxOwotCi0gICAgLy8gQ2FjaGUgb2YgdmFsaWRp
dHkoKS0+dmFsaWQoKS4KLSAgICAvLyBCdXQgImNhbmRpZGF0ZSBmb3IgY29uc3RyYWludCB2YWxp
ZGF0aW9uIiBkb2Vzbid0IGFmZmVjdCBtX2lzVmFsaWQuCi0gICAgYm9vbCBtX2lzVmFsaWQgOiAx
OworCiB9OwogCiAvLyBGSVhNRTogR2l2ZSB0aGlzIGNsYXNzIGl0cyBvd24gaGVhZGVyIGZpbGUu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IDFhZWIzNjAzYjg5Nzc1ZGJhYzc0ZGZmNDQz
ZmQ4OGU3ZjExMTIwYmYuLmJiYzhhZTAyOGQyNWJkZGNhM2UxOGY0NzI4MzU0MzM4Mzc0NmIxY2Ug
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC0xNzksNyArMTc5LDEwIEBAIHZvaWQgSFRN
TEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVudCwgYm9vbCBmcm9tSW1w
bGljaXRTdWJtaXNzaW9uCiB7CiAgICAgaW50IHN1Ym1pc3Npb25UcmlnZ2VyQ291bnQgPSAwOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7
ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9IG1f
YXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGZv
cm1Bc3NvY2lhdGVkRWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBp
ZiAoIWZvcm1Bc3NvY2lhdGVkRWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihmb3JtQXNzb2NpYXRl
ZEVsZW1lbnQpOwogICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1
dHRvbigpKSB7CiAgICAgICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAg
ICAgICAgICAgICAgICBmb3JtRWxlbWVudC0+ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhldmVudCk7
CkBAIC0yMTYsNyArMjE5LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJh
Y3RpdmVseShFdmVudCogZXZlbnQpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNz
b2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50
c1tpXS0+aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0
cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+IHVuaGFuZGxlZEludmFsaWRDb250cm9sczsKKyAg
ICBWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiB1bmhhbmRsZWRJbnZhbGlk
Q29udHJvbHM7CiAgICAgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyh1bmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHMpOwogICAgIGlmICh1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIyNSw3ICsyMjgsOCBAQCBib29sIEhUTUxG
b3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KEV2ZW50KiBldmVudCkKICAgICBSZWZQ
dHI8SFRNTEZvcm1FbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CiAgICAgLy8gRm9jdXMgb24gdGhl
IGZpcnN0IGZvY3VzYWJsZSBjb250cm9sIGFuZCBzaG93IGEgdmFsaWRhdGlvbiBtZXNzYWdlLgog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogdW5oYW5kbGVkID0g
dW5oYW5kbGVkSW52YWxpZENvbnRyb2xzW2ldLmdldCgpOworICAgICAgICBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQqIHVuaGFuZGxlZEFzc29jaWF0ZWRFbGVtZW50ID0gdW5oYW5kbGVkSW52YWxpZENv
bnRyb2xzW2ldLmdldCgpOworICAgICAgICBIVE1MRWxlbWVudCogdW5oYW5kbGVkID0gdG9IVE1M
RWxlbWVudCh1bmhhbmRsZWRBc3NvY2lhdGVkRWxlbWVudCk7CiAgICAgICAgIGlmICh1bmhhbmRs
ZWQtPmlzRm9jdXNhYmxlKCkgJiYgdW5oYW5kbGVkLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAg
ICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2luYWxEb2N1bWVudCh1bmhhbmRsZWQtPmRvY3VtZW50
KCkpOwogICAgICAgICAgICAgdW5oYW5kbGVkLT5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNl
KTsKQEAgLTIzNCw3ICsyMzgsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRl
cmFjdGl2ZWx5KEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIC8vIG1vdmVkIHRvIGFub3RoZXIg
ZG9jdW1lbnQuCiAgICAgICAgICAgICBpZiAodW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgpICYmIHVu
aGFuZGxlZC0+aW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0gdW5oYW5kbGVkLT5k
b2N1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgdW5oYW5kbGVkLT5mb2N1cygpOwotICAgICAg
ICAgICAgICAgIHVuaGFuZGxlZC0+dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Cisg
ICAgICAgICAgICAgICAgdW5oYW5kbGVkQXNzb2NpYXRlZEVsZW1lbnQtPnVwZGF0ZVZpc2libGVW
YWxpZGF0aW9uTWVzc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0yNDIsMTEgKzI0NiwxMiBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6
dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KEV2ZW50KiBldmVudCkKICAgICAvLyBXYXJuIGFib3V0IGFs
bCBvZiB1bmZvY3VzYWJsZSBjb250cm9scy4KICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQoKS0+ZnJhbWUoKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdW5oYW5k
bGVkSW52YWxpZENvbnRyb2xzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiB1bmhhbmRsZWQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0
KCk7CisgICAgICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIHVuaGFuZGxlZEFzc29jaWF0
ZWRFbGVtZW50ID0gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzW2ldLmdldCgpOworICAgICAgICAg
ICAgSFRNTEVsZW1lbnQqIHVuaGFuZGxlZCA9IHRvSFRNTEVsZW1lbnQodW5oYW5kbGVkQXNzb2Np
YXRlZEVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb2N1c2FibGUoKSAm
JiB1bmhhbmRsZWQtPmluRG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIFN0cmluZyBtZXNzYWdlKCJBbiBpbnZhbGlkIGZvcm0gY29udHJvbCB3aXRoIG5h
bWU9JyVuYW1lJyBpcyBub3QgZm9jdXNhYmxlLiIpOwotICAgICAgICAgICAgbWVzc2FnZS5yZXBs
YWNlKCIlbmFtZSIsIHVuaGFuZGxlZC0+bmFtZSgpKTsKKyAgICAgICAgICAgIG1lc3NhZ2UucmVw
bGFjZSgiJW5hbWUiLCB1bmhhbmRsZWRBc3NvY2lhdGVkRWxlbWVudC0+bmFtZSgpKTsKICAgICAg
ICAgICAgIGZyYW1lLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5hZGRNZXNzYWdlKEhUTUxNZXNz
YWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIDAs
IGRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwNyw4
ICszMTIsMTEgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJv
b2wgYWN0aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgcHJvY2UKICAgICBib29sIG5lZWRCdXR0b25B
Y3RpdmF0aW9uID0gYWN0aXZhdGVTdWJtaXRCdXR0b247IC8vIGRvIHdlIG5lZWQgdG8gYWN0aXZh
dGUgYSBzdWJtaXQgYnV0dG9uPwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNz
b2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIGNvbnRyb2wgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgRm9ybUFz
c29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRz
W2ldOworICAgICAgICBpZiAoIWFzc29jaWF0ZWRFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVu
dCgpKQorICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChuZWVkQnV0dG9uQWN0aXZh
dGlvbikgeworICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IHN0
YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihhc3NvY2lhdGVkRWxlbWVudCk7CiAg
ICAgICAgICAgICBpZiAoY29udHJvbC0+aXNBY3RpdmF0ZWRTdWJtaXQoKSkKICAgICAgICAgICAg
ICAgICBuZWVkQnV0dG9uQWN0aXZhdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgZWxzZSBpZiAo
Zmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID09IDAgJiYgY29udHJvbC0+aXNTdWNjZXNzZnVs
U3VibWl0QnV0dG9uKCkpCkBAIC0zOTYsNyArNDA0LDcgQEAgdGVtcGxhdGU8Y2xhc3MgVCwgc2l6
ZV90IG4+IHN0YXRpYyB2b2lkIHJlbW92ZUZyb21WZWN0b3IoVmVjdG9yPFQqLCBuPiAmIHZlYywg
VCoKICAgICAgICAgfQogfQogCi11bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50
SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQor
dW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1
dGUoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICAvLyBDb21wYXJlcyB0aGUgcG9zaXRpb24gb2Yg
dGhlIGZvcm0gZWxlbWVudCBhbmQgdGhlIGluc2VydGVkIGVsZW1lbnQuCiAgICAgLy8gVXBkYXRl
cyB0aGUgaW5kZWNlcyBpbiBvcmRlciB0byB0aGUgcmVsYXRpb24gb2YgdGhlIHBvc2l0aW9uOgpA
QCAtNDE2LDU3ICs0MjQsNjcgQEAgdW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVu
dEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUoSFRNTEZvcm1Db250cm9sRWxlbWUKICAgICB1bnNpZ25l
ZCBsZWZ0ID0gMCwgcmlnaHQgPSBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCkgLSAxOwogICAg
IHdoaWxlIChsZWZ0ICE9IHJpZ2h0KSB7CiAgICAgICAgIHVuc2lnbmVkIG1pZGRsZSA9IGxlZnQg
KyAoKHJpZ2h0IC0gbGVmdCkgLyAyKTsKLSAgICAgICAgcG9zaXRpb24gPSBlbGVtZW50LT5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbihtX2Fzc29jaWF0ZWRFbGVtZW50c1ttaWRkbGVdKTsKKyAgICAg
ICAgcG9zaXRpb24gPSBlbGVtZW50LT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0b0hUTUxFbGVt
ZW50KG1fYXNzb2NpYXRlZEVsZW1lbnRzW21pZGRsZV0pKTsKICAgICAgICAgaWYgKHBvc2l0aW9u
ICYgRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKQogICAgICAgICAgICAgcmlnaHQgPSBtaWRk
bGU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxlZnQgPSBtaWRkbGUgKyAxOwogICAgIH0K
IAotICAgIHBvc2l0aW9uID0gZWxlbWVudC0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24obV9hc3Nv
Y2lhdGVkRWxlbWVudHNbbGVmdF0pOworICAgIHBvc2l0aW9uID0gZWxlbWVudC0+Y29tcGFyZURv
Y3VtZW50UG9zaXRpb24odG9IVE1MRWxlbWVudChtX2Fzc29jaWF0ZWRFbGVtZW50c1tsZWZ0XSkp
OwogICAgIGlmIChwb3NpdGlvbiAmIERPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORykKICAgICAg
ICAgcmV0dXJuIGxlZnQ7CiAgICAgcmV0dXJuIGxlZnQgKyAxOwogfQogCi11bnNpZ25lZCBIVE1M
Rm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXgoSFRNTEZvcm1Db250cm9sRWxlbWVudCogZSkK
K3Vuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleChGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50KQogeworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50
ID0gdG9IVE1MRWxlbWVudChhc3NvY2lhdGVkRWxlbWVudCk7CiAgICAgLy8gVHJlYXRzIHNlcGFy
YXRlbHkgdGhlIGNhc2Ugd2hlcmUgdGhpcyBlbGVtZW50IGhhcyB0aGUgZm9ybSBhdHRyaWJ1dGUK
ICAgICAvLyBmb3IgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbi4KLSAgICBpZiAoZS0+ZmFzdEhh
c0F0dHJpYnV0ZShmb3JtQXR0cikpCi0gICAgICAgIHJldHVybiBmb3JtRWxlbWVudEluZGV4V2l0
aEZvcm1BdHRyaWJ1dGUoZSk7CisgICAgaWYgKGVsZW1lbnQtPmZhc3RIYXNBdHRyaWJ1dGUoZm9y
bUF0dHIpKQorICAgICAgICByZXR1cm4gZm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmlidXRl
KGVsZW1lbnQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhp
cyBlbGVtZW50IGlzIHRoZSB2ZXJ5IGxhc3QgdGhpbmcgaW4KICAgICAvLyB0aGUgZm9ybSdzIHRy
ZWUgb2YgY2hpbGRyZW47IHdlIGRvbid0IHdhbnQgdG8gd2FsayB0aGUgZW50aXJlIHRyZWUgaW4g
dGhhdAogICAgIC8vIGNvbW1vbiBjYXNlIHRoYXQgb2NjdXJzIGR1cmluZyBwYXJzaW5nOyBpbnN0
ZWFkIHdlJ2xsIGp1c3QgcmV0dXJuIGEgdmFsdWUKICAgICAvLyB0aGF0IHNheXMgImFkZCB0aGlz
IGZvcm0gZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBhcnJheSIuCi0gICAgaWYgKGUtPnRyYXZl
cnNlTmV4dE5vZGUodGhpcykpIHsKKyAgICBpZiAoZWxlbWVudC0+dHJhdmVyc2VOZXh0Tm9kZSh0
aGlzKSkgewogICAgICAgICB1bnNpZ25lZCBpID0gbV9hc3NvY2lhdGVkRWxlbWVudHNCZWZvcmVJ
bmRleDsKICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUodGhpcykpIHsKLSAgICAgICAgICAgIGlmIChub2RlID09IGUpIHsK
KyAgICAgICAgICAgIGlmIChub2RlID09IGVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICArK21f
YXNzb2NpYXRlZEVsZW1lbnRzQWZ0ZXJJbmRleDsKICAgICAgICAgICAgICAgICByZXR1cm4gaTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pc0Zvcm1D
b250cm9sRWxlbWVudCgpCi0gICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqPihub2RlKS0+Zm9ybSgpID09IHRoaXMpCisgICAgICAgICAgICAg
ICAgICAgICYmIChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihu
b2RlKS0+Zm9ybSgpID09IHRoaXMpCiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBtX2Fzc29jaWF0ZWRFbGVtZW50c0FmdGVySW5kZXgrKzsKIH0KIAot
dm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnQoSFRNTEZvcm1Db250cm9s
RWxlbWVudCogZSkKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50KEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCogZSkKIHsKLSAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9C
dXR0b25zKCkucmVtb3ZlQnV0dG9uKGUpOwotICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5hZGRC
dXR0b24oZSk7CisgICAgaWYgKGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpIHsKKyAgICAgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqPihlKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9u
cygpLnJlbW92ZUJ1dHRvbihlbGVtZW50KTsKKyAgICAgICAgbV9jaGVja2VkUmFkaW9CdXR0b25z
LmFkZEJ1dHRvbihlbGVtZW50KTsKKyAgICB9CisgICAgLy8gRklYTUU6IFJlbW92ZXMgbGF0ZXIK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgp
OyArK2kpCisgICAgICAgIEFTU0VSVChlICE9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKTsKICAg
ICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5pbnNlcnQoZm9ybUVsZW1lbnRJbmRleChlKSwgZSk7CiB9
CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3JtRWxlbWVudChIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiBlKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUZvcm1FbGVtZW50KEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCogZSkKIHsKLSAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMucmVt
b3ZlQnV0dG9uKGUpOwotICAgIGlmIChlLT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgewor
ICAgIGlmIChlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICBtX2NoZWNrZWRSYWRp
b0J1dHRvbnMucmVtb3ZlQnV0dG9uKHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
PihlKSk7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGUpOworICAg
IGlmIChlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgewogICAgICAgICB1bnNp
Z25lZCBpbmRleDsKICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbV9hc3NvY2lhdGVk
RWxlbWVudHMuc2l6ZSgpOyArK2luZGV4KQogICAgICAgICAgICAgaWYgKG1fYXNzb2NpYXRlZEVs
ZW1lbnRzW2luZGV4XSA9PSBlKQpAQCAtNTU0LDcgKzU3Miw5IEBAIGJvb2wgSFRNTEZvcm1FbGVt
ZW50Ojp3YXNVc2VyU3VibWl0dGVkKCkgY29uc3QKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIEhU
TUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbigpIGNvbnN0CiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c1tp
XTsKKyAgICAgICAgaWYgKCFtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KiBjb250cm9sID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG1f
YXNzb2NpYXRlZEVsZW1lbnRzW2ldKTsKICAgICAgICAgaWYgKGNvbnRyb2wtPmlzU3VjY2Vzc2Z1
bFN1Ym1pdEJ1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7CiAgICAgfQpAQCAt
NTY0LDE3ICs1ODQsMTcgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1FbGVtZW50
OjpkZWZhdWx0QnV0dG9uKCkgY29uc3QKIAogYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmNoZWNrVmFs
aWRpdHkoKQogewotICAgIFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiBj
b250cm9sczsKKyAgICBWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiBjb250
cm9sczsKICAgICBjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKGNvbnRyb2xzKTsKICAg
ICByZXR1cm4gY29udHJvbHMuaXNFbXB0eSgpOwogfQogCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6
Y29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyhWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+ID4mIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKK3ZvaWQgSFRNTEZvcm1F
bGVtZW50Ojpjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKFZlY3RvcjxSZWZQdHI8Rm9y
bUFzc29jaWF0ZWRFbGVtZW50PiA+JiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCiB7CiAgICAg
UmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOwogICAgIC8vIENvcHkgbV9h
c3NvY2lhdGVkRWxlbWVudHMgYmVjYXVzZSBldmVudCBoYW5kbGVycyBjYWxsZWQgZnJvbQogICAg
IC8vIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoKSBtaWdodCBjaGFuZ2Ug
bV9hc3NvY2lhdGVkRWxlbWVudHMuCi0gICAgVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50PiA+IGVsZW1lbnRzOworICAgIFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50PiA+IGVsZW1lbnRzOwogICAgIGVsZW1lbnRzLnJlc2VydmVDYXBhY2l0eShtX2Fzc29jaWF0
ZWRFbGVtZW50cy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29j
aWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkKICAgICAgICAgZWxlbWVudHMuYXBwZW5kKG1fYXNz
b2NpYXRlZEVsZW1lbnRzW2ldKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAppbmRleCA0ZTA2YmVjMDk5
YzYzYzRmYzM1ZDU5M2EwNWEzZTMzNWYwMDJmMTBmLi5lMThiNTI0MDhhNDJjYWRmMjI5MWMxMjlh
MTZlMWU0NTgxNWQwY2NhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCkBAIC0zMyw2ICszMyw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OworY2xhc3MgRm9ybUFzc29jaWF0
ZWRFbGVtZW50OwogY2xhc3MgRm9ybURhdGE7CiBjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OwogY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKQEAgLTY0LDggKzY1LDggQEAgcHVibGljOgogCiAg
ICAgLy8gRklYTUU6IFNob3VsZCByZW5hbWUgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byBzYXkgImZv
cm0gY29udHJvbCIKICAgICAvLyBvciAiZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnQiIGluc3RlYWQg
b2YgImZvcm0gZWxlbWVudCIuCi0gICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50KEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUZvcm1FbGVtZW50KEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0
ZWRFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVGb3JtRWxlbWVudChGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQqKTsKICAgICB2b2lkIHJlZ2lzdGVySW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50Kik7
CiAgICAgdm9pZCByZW1vdmVJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqKTsKIApAQCAtMTA5
LDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAgIENoZWNrZWRSYWRpb0J1dHRvbnMmIGNoZWNrZWRS
YWRpb0J1dHRvbnMoKSB7IHJldHVybiBtX2NoZWNrZWRSYWRpb0J1dHRvbnM7IH0KIAotICAgIGNv
bnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGFzc29jaWF0ZWRFbGVtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fYXNzb2NpYXRlZEVsZW1lbnRzOyB9CisgICAgY29uc3QgVmVjdG9y
PEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBhc3NvY2lhdGVkRWxlbWVudHMoKSBjb25zdCB7IHJl
dHVybiBtX2Fzc29jaWF0ZWRFbGVtZW50czsgfQogCiBwcml2YXRlOgogICAgIEhUTUxGb3JtRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTEzMSwxMyArMTMyLDEz
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHN1Ym1pdChFdmVudCosIGJvb2wgYWN0aXZhdGVTdWJt
aXRCdXR0b24sIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBGb3JtU3VibWlzc2lvblRyaWdn
ZXIpOwogCi0gICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmlidXRlKEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKLSAgICB1bnNpZ25lZCBmb3JtRWxlbWVudEluZGV4KEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKKyAgICB1bnNpZ25lZCBmb3JtRWxlbWVudEluZGV4V2l0
aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCopOworICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50SW5kZXgo
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzdWJt
aXNzaW9uIHNob3VsZCBiZSBwcm9jZWVkZWQuCiAgICAgYm9vbCB2YWxpZGF0ZUludGVyYWN0aXZl
bHkoRXZlbnQqKTsKICAgICAvLyBWYWxpZGF0ZXMgZWFjaCBvZiB0aGUgY29udHJvbHMsIGFuZCBz
dG9yZXMgY29udHJvbHMgb2Ygd2hpY2ggJ2ludmFsaWQnCiAgICAgLy8gZXZlbnQgd2FzIG5vdCBj
YW5jZWxlZCB0byB0aGUgc3BlY2lmaWVkIHZlY3Rvci4KLSAgICB2b2lkIGNvbGxlY3RVbmhhbmRs
ZWRJbnZhbGlkQ29udHJvbHMoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+
Jik7CisgICAgdm9pZCBjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKFZlY3RvcjxSZWZQ
dHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50PiA+Jik7CiAKICAgICBmcmllbmQgY2xhc3MgSFRNTEZv
cm1Db2xsZWN0aW9uOwogCkBAIC0xNTEsNyArMTUyLDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2ln
bmVkIG1fYXNzb2NpYXRlZEVsZW1lbnRzQmVmb3JlSW5kZXg7CiAgICAgdW5zaWduZWQgbV9hc3Nv
Y2lhdGVkRWxlbWVudHNBZnRlckluZGV4OwotICAgIFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Kj4gbV9hc3NvY2lhdGVkRWxlbWVudHM7CisgICAgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxl
bWVudCo+IG1fYXNzb2NpYXRlZEVsZW1lbnRzOwogICAgIFZlY3RvcjxIVE1MSW1hZ2VFbGVtZW50
Kj4gbV9pbWFnZUVsZW1lbnRzOwogCiAgICAgYm9vbCBtX3dhc1VzZXJTdWJtaXR0ZWQ7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggZTQ3NDc3M2I0ODJmZTEzY2Y3NDMzYmI3ZTNlNDFj
NzIyMGJhYjI0OS4uZmU2NTZjMGFjMzM3Njg2ZDljYTc4YzExZDM0Njk0ODY2NjVjMjlhZiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMTM5LDkgKzEzOSwxMSBAQCB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnVwZGF0ZUNoZWNrZWRSYWRpb0J1dHRvbnMoKQogICAgICAgICBjaGVja2Vk
UmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogCiAgICAgaWYgKGZvcm0oKSkgewotICAg
ICAgICBjb25zdCBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBjb250cm9scyA9IGZv
cm0oKS0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxGb3JtQXNz
b2NpYXRlZEVsZW1lbnQqPiYgY29udHJvbHMgPSBmb3JtKCktPmFzc29jaWF0ZWRFbGVtZW50cygp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29udHJvbHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBjb250cm9s
c1tpXTsKKyAgICAgICAgICAgIGlmICghY29udHJvbHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiBjb250cm9sID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+
KGNvbnRyb2xzW2ldKTsKICAgICAgICAgICAgIGlmIChjb250cm9sLT5uYW1lKCkgIT0gbmFtZSgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGNvbnRyb2wtPnR5
cGUoKSAhPSB0eXBlKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1l
bnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAppbmRleCA2OTk3NGE4
MGM0Y2Q2ZGU2ZWMzNTFhMGY5ZGRjM2E2NzMzZjAwYWZlLi5lZjhhZWY3NjYxNTNkODA4MzlhYmUx
MDMzNWUxNmM4YWE3MTJlZGNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVs
ZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKQEAgLTQ2
LDE3ICs0NiwyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKLWlubGluZSBIVE1MT2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0
ZWRCeVBhcnNlcikgCitpbmxpbmUgSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZv
cm1FbGVtZW50KiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikgCiAgICAgOiBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpCisgICAgLCBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQoZm9ybSkKICAgICAsIG1fZG9jTmFtZWRJdGVtKHRydWUpCiAg
ICAgLCBtX3VzZUZhbGxiYWNrQ29udGVudChmYWxzZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFt
ZShvYmplY3RUYWcpKTsKKyAgICBpZiAoIXRoaXMtPmZvcm0oKSkKKyAgICAgICAgc2V0Rm9ybShm
aW5kRm9ybUFuY2VzdG9yKCkpOworICAgIGlmICh0aGlzLT5mb3JtKCkpCisgICAgICAgIHRoaXMt
PmZvcm0oKS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxIVE1M
T2JqZWN0RWxlbWVudD4gSFRNTE9iamVjdEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQor
aW5saW5lIEhUTUxPYmplY3RFbGVtZW50Ojp+SFRNTE9iamVjdEVsZW1lbnQoKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSFRNTE9iamVjdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGNy
ZWF0ZWRCeVBhcnNlcikpOworICAgIGlmIChmb3JtKCkpCisgICAgICAgIGZvcm0oKS0+cmVtb3Zl
Rm9ybUVsZW1lbnQodGhpcyk7Cit9CisKK1Bhc3NSZWZQdHI8SFRNTE9iamVjdEVsZW1lbnQ+IEhU
TUxPYmplY3RFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTE9iamVjdEVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQsIGZvcm0sIGNyZWF0ZWRCeVBhcnNlcikpOwogfQogCiBSZW5kZXJXaWRnZXQq
IEhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKQEAg
LTMxMyw2ICszMjQsMTQgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1
bWVudCgpCiAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgp
OwogfQogCit2b2lkIEhUTUxPYmplY3RFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0
ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
Zm9ybUF0dHIpCisgICAgICAgIGZvcm1BdHRyaWJ1dGVDaGFuZ2VkKCk7CisgICAgZWxzZQorICAg
ICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHByZXNl
cnZlRGVjbHMpOworfQorCiB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQo
Ym9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFu
Z2UsIGludCBjaGlsZENvdW50RGVsdGEpCiB7CiAgICAgdXBkYXRlRG9jTmFtZWRJdGVtKCk7CkBA
IC00NTMsNCArNDcyLDM0IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmFkZFN1YnJlc291cmNl
QXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29uCiAgICAgICAgIGFkZFN1
YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVzZU1hcCkpOwogfQog
Cit2b2lkIEhUTUxPYmplY3RFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKK3sK
KyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKTsKKyAgICBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOworfQorCit2b2lkIEhU
TUxPYmplY3RFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKQoreworICAgIEZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKCk7CisgICAgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGRlZXApOworfQorCitib29sIEhUTUxPYmplY3RFbGVt
ZW50OjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnRzIHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCitjb25z
dCBBdG9taWNTdHJpbmcmIEhUTUxPYmplY3RFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUoKSBjb25z
dAoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZShtX25hbWUpOworICAgIHJldHVybiBu
YW1lLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogbmFtZTsKK30KKworY29uc3QgQXRvbWljU3RyaW5n
JiBIVE1MT2JqZWN0RWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKK3sKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHNlcnZpY2VUeXBlKG1fc2VydmljZVR5cGUpOworICAgIHJldHVybiBz
ZXJ2aWNlVHlwZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHNlcnZpY2VUeXBlOworfQorCiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaCBiL1dlYkNvcmUvaHRt
bC9IVE1MT2JqZWN0RWxlbWVudC5oCmluZGV4IGE0NjA5Y2I4ODI4MjQyMmFjMmZjNzhkNTFjZmMw
ZGM3OTdkM2U5YjYuLjk3N2E3ODU3YTMxMzhkYTA1ZGNmYmRhMGY3ODFlNTU2NzA5MGM5OTEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCkBAIC0yMywxMyArMjMsMTcgQEAKICNpZm5kZWYgSFRN
TE9iamVjdEVsZW1lbnRfaAogI2RlZmluZSBIVE1MT2JqZWN0RWxlbWVudF9oCiAKKyNpbmNsdWRl
ICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTE9iamVjdEVsZW1lbnQg
OiBwdWJsaWMgSFRNTFBsdWdJbkltYWdlRWxlbWVudCB7CitjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7
CisKK2NsYXNzIEhUTUxPYmplY3RFbGVtZW50IDogcHVibGljIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQsIHB1YmxpYyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEhUTUxPYmplY3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
KiwgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworICAgIHZpcnR1YWwg
fkhUTUxPYmplY3RFbGVtZW50KCk7CiAKICAgICBib29sIGlzRG9jTmFtZWRJdGVtKCkgY29uc3Qg
eyByZXR1cm4gbV9kb2NOYW1lZEl0ZW07IH0KIApAQCAtNDAsMTAgKzQ0LDMyIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgdXNlRmFsbGJhY2tDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV91
c2VGYWxsYmFja0NvbnRlbnQ7IH0KICAgICB2b2lkIHJlbmRlckZhbGxiYWNrQ29udGVudCgpOwog
CisgICAgLy8gSW1wbGVtZW50YXRpb25zIG9mIEZvcm1Bc3NvY2lhdGVkRWxlbWVudAorICAgIEhU
TUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dDo6Zm9ybSgpOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNS
ZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUNvbnRy
b2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZvcm1Db250
cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiKSB7IEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6
c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihiKTsgfQorCisgICAgdmlydHVhbCBi
b29sIGlzRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IHZpcnR1YWwgYm9vbCB3aWxsVmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQ6OndpbGxWYWxpZGF0ZSgpOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWQo
KSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmRpc2FibGVkKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCB2YWx1ZSkgeyBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ6OnNldERpc2FibGVkKHZhbHVlKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9y
bURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRl
Q2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CisKKyAgICB1
c2luZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+OjpyZWY7CisgICAgdXNpbmcgVHJlZVNoYXJl
ZDxDb250YWluZXJOb2RlPjo6ZGVyZWY7CisKIHByaXZhdGU6Ci0gICAgSFRNTE9iamVjdEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
OworICAgIEhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCos
IEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bVRyZWUoYm9vbCBkZWVwKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJl
bmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CkBA
IC02OSw2ICs5NSwxNCBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDbGFzc0lk
KCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgeyByZWYo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpIHsgZGVy
ZWYoKTsgfQorCisgICAgdmlydHVhbCBib29sIGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSB7
IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQo
KTsgfQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUo
KSBjb25zdDsKKwogICAgIEF0b21pY1N0cmluZyBtX2lkOwogICAgIFN0cmluZyBtX2NsYXNzSWQ7
CiAgICAgYm9vbCBtX2RvY05hbWVkSXRlbSA6IDE7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
SFRNTFRhZ05hbWVzLmluIGIvV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgppbmRleCBiZTJj
ZjkwMDI2YTAxNDU1YWY5MGM3NzA3NGJiNzdlYTQyODMyZDdhLi44ZGQwNzdkNDEwYzE5YTkxZjYx
NjVhYzZjOThhNzcxYzMzNzQ4NzhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRhZ05h
bWVzLmluCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4KQEAgLTg5LDcgKzg5LDcg
QEAgbm9iciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBub2VtYmVkIGludGVyZmFjZU5hbWU9
SFRNTEVsZW1lbnQKIG5vZnJhbWVzIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIG5vbGF5ZXIg
aW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotb2JqZWN0IGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVk
QnlQYXJzZXIKK29iamVjdCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNvbnN0cnVjdG9y
TmVlZHNDcmVhdGVkQnlQYXJzZXIKIG9sIGludGVyZmFjZU5hbWU9SFRNTE9MaXN0RWxlbWVudAog
b3B0Z3JvdXAgaW50ZXJmYWNlTmFtZT1IVE1MT3B0R3JvdXBFbGVtZW50LCBjb25zdHJ1Y3Rvck5l
ZWRzRm9ybUVsZW1lbnQKIG9wdGlvbiBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAgYi9XZWJDb3JlL2h0bWwv
VmFsaWRhdGlvbk1lc3NhZ2UuY3BwCmluZGV4IGQzMjkxN2VmOWNhNjUwMmI4OWEzMGYwN2U2ZWEy
ZjJmNmNmMGJlOTQuLjQ0MTgyMzU0ZDQ2NjVlNjQ4M2Q5NWEwYzkzMGYzYjIwZmZmNTZmMjkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcApAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUFMV0FZU19JTkxJTkUgVmFsaWRhdGlvbk1lc3NhZ2U6OlZhbGlkYXRp
b25NZXNzYWdlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCitBTFdBWVNfSU5MSU5F
IFZhbGlkYXRpb25NZXNzYWdlOjpWYWxpZGF0aW9uTWVzc2FnZShGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqIGVsZW1lbnQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKIHsKIH0KQEAgLTQ1LDcgKzQ1
LDcgQEAgVmFsaWRhdGlvbk1lc3NhZ2U6On5WYWxpZGF0aW9uTWVzc2FnZSgpCiAgICAgaGlkZU1l
c3NhZ2UoKTsKIH0KIAotUGFzc093blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gVmFsaWRhdGlvbk1l
c3NhZ2U6OmNyZWF0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQorUGFzc093blB0
cjxWYWxpZGF0aW9uTWVzc2FnZT4gVmFsaWRhdGlvbk1lc3NhZ2U6OmNyZWF0ZShGb3JtQXNzb2Np
YXRlZEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWYWxpZGF0
aW9uTWVzc2FnZShlbGVtZW50KSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvVmFsaWRh
dGlvbk1lc3NhZ2UuaCBiL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5oCmluZGV4IGZl
MThiNmI4M2E4ZjllZWY1Njc2ODI0ZDNiMGQ5MmQ3MDE3NDg3ZmMuLmQ3OGUzZjMzNDQ2MzZlOTIz
YThiZTdiNjY4ODQ3Y2M5ZmMyNDZkY2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9WYWxpZGF0
aW9uTWVzc2FnZS5oCisrKyBiL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5oCkBAIC0z
OCwyMCArMzgsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OworY2xhc3MgRm9ybUFzc29jaWF0ZWRFbGVtZW50OwogCiBjbGFzcyBWYWxp
ZGF0aW9uTWVzc2FnZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+IGNyZWF0ZShIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+IGNyZWF0ZShG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsKICAgICB+VmFsaWRhdGlvbk1lc3NhZ2UoKTsKICAgICBT
dHJpbmcgbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZTsgfQogICAgIHZvaWQgc2V0
TWVzc2FnZShjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKLSAgICBWYWxpZGF0aW9uTWVzc2Fn
ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgVmFsaWRhdGlvbk1lc3NhZ2UoRm9ybUFz
c29jaWF0ZWRFbGVtZW50Kik7CiAgICAgdm9pZCBoaWRlTWVzc2FnZShUaW1lcjxWYWxpZGF0aW9u
TWVzc2FnZT4qID0gMCk7CiAKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBtX2VsZW1lbnQ7
CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgU3RyaW5nIG1fbWVz
c2FnZTsKICAgICBPd25QdHI8VGltZXI8VmFsaWRhdGlvbk1lc3NhZ2U+ID4gbV90aW1lcjsKIH07
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAgYi9XZWJDb3JlL2h0
bWwvVmFsaWRpdHlTdGF0ZS5jcHAKaW5kZXggZWYzZGU2NmJiNjQzOTBlNWMyODc3NWRlZTQwMjUy
NmU2MjA2YjFkNS4uNDc3YmI4YjJlMDY4OTMwNGViODE3NjE2NWI2ZjAwNDk0MmZiMDNmYSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuY3BwCisrKyBiL1dlYkNvcmUvaHRt
bC9WYWxpZGl0eVN0YXRlLmNwcApAQCAtNDIsMjAgKzQyLDIxIEBAIFN0cmluZyBWYWxpZGl0eVN0
YXRlOjp2YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0CiAKICAgICBpZiAoY3VzdG9tRXJyb3IoKSkK
ICAgICAgICAgcmV0dXJuIG1fY3VzdG9tRXJyb3JNZXNzYWdlOwotICAgIGJvb2wgaXNJbnB1dEVs
ZW1lbnQgPSBtX2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpOwotICAgIGJvb2wgaXNUZXh0
QXJlYUVsZW1lbnQgPSBtX2NvbnRyb2wtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpOworICAgIEhU
TUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChtX2NvbnRyb2wpOworICAgIGJvb2wg
aXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIGVsZW1l
bnQtPmhhc1RhZ05hbWUoaW5wdXRUYWcpOworICAgIGJvb2wgaXNUZXh0QXJlYUVsZW1lbnQgPSBl
bGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUodGV4
dGFyZWFUYWcpOwogICAgIC8vIFRoZSBvcmRlciBvZiB0aGUgZm9sbG93aW5nIGNoZWNrcyBpcyBt
ZWFuaW5nZnVsLiBlLmcuIFdlJ2QgbGlrZSB0byBzaG93IHRoZQogICAgIC8vIHZhbHVlTWlzc2lu
ZyBtZXNzYWdlIGV2ZW4gaWYgdGhlIGNvbnRyb2wgaGFzIG90aGVyIHZhbGlkYXRpb24gZXJyb3Jz
LgogICAgIGlmICh2YWx1ZU1pc3NpbmcoKSkgewotICAgICAgICBpZiAobV9jb250cm9sLT5oYXNU
YWdOYW1lKHNlbGVjdFRhZykpCisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHNlbGVj
dFRhZykpCiAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdG
b3JTZWxlY3RUZXh0KCk7CiAgICAgICAgIGlmIChpc0lucHV0RWxlbWVudCkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKS0+dmFsdWVN
aXNzaW5nVGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihlbGVtZW50KS0+dmFsdWVNaXNzaW5nVGV4dCgpOwogICAgICAgICByZXR1cm4gdmFs
aWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7CiAgICAgfQogICAgIGlmICh0eXBlTWlz
bWF0Y2goKSkgewogICAgICAgICBpZiAoaXNJbnB1dEVsZW1lbnQpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCktPnR5cGVNaXNtYXRj
aFRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4oZWxlbWVudCktPnR5cGVNaXNtYXRjaFRleHQoKTsKICAgICAgICAgcmV0dXJuIHZhbGlkYXRp
b25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpOwogICAgIH0KICAgICBpZiAocGF0dGVybk1pc21h
dGNoKCkpCkBAIC02NSw3ICs2Niw3IEBAIFN0cmluZyBWYWxpZGl0eVN0YXRlOjp2YWxpZGF0aW9u
TWVzc2FnZSgpIGNvbnN0CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50Kj4obV9jb250cm9sKTsKKyAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRl
eHQgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCo+KGVsZW1lbnQpOwog
ICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUb29Mb25nVGV4dChudW1HcmFwaGVtZUNs
dXN0ZXJzKHRleHQtPnZhbHVlKCkpLCB0ZXh0LT5tYXhMZW5ndGgoKSk7CiAgICAgfQogICAgIGlm
IChyYW5nZVVuZGVyZmxvdygpKSB7CkBAIC03MywyMSArNzQsMjEgQEAgU3RyaW5nIFZhbGlkaXR5
U3RhdGU6OnZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlVW5kZXJmbG93VGV4dChzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKS0+bWluaW11bVN0cmluZygpKTsKKyAgICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VVbmRlcmZsb3dUZXh0KHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KS0+bWluaW11bVN0cmluZygpKTsKICAgICB9CiAg
ICAgaWYgKHJhbmdlT3ZlcmZsb3coKSkgewogICAgICAgICBpZiAoIWlzSW5wdXRFbGVtZW50KSB7
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VSYW5n
ZU92ZXJmbG93VGV4dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKS0+
bWF4aW11bVN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VP
dmVyZmxvd1RleHQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpLT5tYXhp
bXVtU3RyaW5nKCkpOwogICAgIH0KICAgICBpZiAoc3RlcE1pc21hdGNoKCkpIHsKICAgICAgICAg
aWYgKCFpc0lucHV0RWxlbWVudCkgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250
cm9sKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2Fn
ZVN0ZXBNaXNtYXRjaFRleHQoaW5wdXQtPnN0ZXBCYXNlU3RyaW5nKCksIGlucHV0LT5zdGVwU3Ry
aW5nKCkpOwogICAgIH0KIApAQCAtMTAyLDEyICsxMDMsMTMgQEAgdm9pZCBWYWxpZGl0eVN0YXRl
OjpzZXRDdXN0b21FcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogCiBib29sIFZh
bGlkaXR5U3RhdGU6OnZhbHVlTWlzc2luZygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fY29udHJvbC0+
aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQg
PSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKTsKKyAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQobV9jb250cm9sKTsKKyAgICBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAgICAgIHJl
dHVybiBpbnB1dC0+dmFsdWVNaXNzaW5nKGlucHV0LT52YWx1ZSgpKTsKICAgICB9Ci0gICAgaWYg
KG1fY29udHJvbC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsKLSAgICAgICAgSFRNTFRleHRB
cmVhRWxlbWVudCogdGV4dEFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4o
bV9jb250cm9sKTsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsK
KyAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCogdGV4dEFyZWEgPSBzdGF0aWNfY2FzdDxIVE1M
VGV4dEFyZWFFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAgICAgIHJldHVybiB0ZXh0QXJlYS0+dmFs
dWVNaXNzaW5nKHRleHRBcmVhLT52YWx1ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTE1LDE0ICsxMTcsMTQgQEAgYm9vbCBWYWxpZGl0eVN0YXRlOjp2YWx1ZU1pc3NpbmcoKSBj
b25zdAogCiBib29sIFZhbGlkaXR5U3RhdGU6OnR5cGVNaXNtYXRjaCgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgIGlmICghdG9IVE1MRWxl
bWVudChtX2NvbnRyb2wpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9s
KS0+dHlwZU1pc21hdGNoKCk7CiB9CiAKIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cGF0dGVybk1pc21h
dGNoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZykp
CisgICAgaWYgKCF0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUoaW5wdXRUYWcp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKTsKICAgICByZXR1cm4gaW5w
dXQtPnBhdHRlcm5NaXNtYXRjaChpbnB1dC0+dmFsdWUoKSk7CkBAIC0xMzAsMTEgKzEzMiwxMSBA
QCBib29sIFZhbGlkaXR5U3RhdGU6OnBhdHRlcm5NaXNtYXRjaCgpIGNvbnN0CiAKIGJvb2wgVmFs
aWRpdHlTdGF0ZTo6dG9vTG9uZygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fY29udHJvbC0+aGFzVGFn
TmFtZShpbnB1dFRhZykpIHsKKyAgICBpZiAodG9IVE1MRWxlbWVudChtX2NvbnRyb2wpLT5oYXNU
YWdOYW1lKGlucHV0VGFnKSkgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgICAgICByZXR1cm4g
aW5wdXQtPnRvb0xvbmcoaW5wdXQtPnZhbHVlKCksIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjpDaGVja0RpcnR5RmxhZyk7CiAgICAgfQotICAgIGlmIChtX2NvbnRyb2wtPmhhc1RhZ05hbWUo
dGV4dGFyZWFUYWcpKSB7CisgICAgaWYgKHRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFn
TmFtZSh0ZXh0YXJlYVRhZykpIHsKICAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCogdGV4dEFy
ZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4obV9jb250cm9sKTsKICAgICAg
ICAgcmV0dXJuIHRleHRBcmVhLT50b29Mb25nKHRleHRBcmVhLT52YWx1ZSgpLCBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDo6Q2hlY2tEaXJ0eUZsYWcpOwogICAgIH0KQEAgLTE0Myw3ICsxNDUs
NyBAQCBib29sIFZhbGlkaXR5U3RhdGU6OnRvb0xvbmcoKSBjb25zdAogCiBib29sIFZhbGlkaXR5
U3RhdGU6OnJhbmdlVW5kZXJmbG93KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29udHJvbC0+aGFz
VGFnTmFtZShpbnB1dFRhZykpCisgICAgaWYgKCF0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPmhh
c1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9s
KTsKICAgICByZXR1cm4gaW5wdXQtPnJhbmdlVW5kZXJmbG93KGlucHV0LT52YWx1ZSgpKTsKQEAg
LTE1MSw3ICsxNTMsNyBAQCBib29sIFZhbGlkaXR5U3RhdGU6OnJhbmdlVW5kZXJmbG93KCkgY29u
c3QKIAogYm9vbCBWYWxpZGl0eVN0YXRlOjpyYW5nZU92ZXJmbG93KCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fY29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgaWYgKCF0b0hUTUxFbGVt
ZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Kj4obV9jb250cm9sKTsKICAgICByZXR1cm4gaW5wdXQtPnJhbmdlT3ZlcmZsb3coaW5w
dXQtPnZhbHVlKCkpOwpAQCAtMTU5LDcgKzE2MSw3IEBAIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cmFu
Z2VPdmVyZmxvdygpIGNvbnN0CiAKIGJvb2wgVmFsaWRpdHlTdGF0ZTo6c3RlcE1pc21hdGNoKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fY29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAg
aWYgKCF0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKTsKICAgICByZXR1cm4gaW5wdXQtPnN0
ZXBNaXNtYXRjaChpbnB1dC0+dmFsdWUoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvVmFs
aWRpdHlTdGF0ZS5oIGIvV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuaAppbmRleCA1MzJkZGIy
NDlhN2FjNGM5OGM0OTkzZTZlNTAwMjA1ODJmYThkYWUyLi4wMWMyNmQxOTVjOTc3NThkYzZmOTkz
YTQ2YjEwNDRiZTI2MTM4MTViIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0
ZS5oCisrKyBiL1dlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmgKQEAgLTI0LDE0ICsyNCwxNCBA
QAogI2lmbmRlZiBWYWxpZGl0eVN0YXRlX2gKICNkZWZpbmUgVmFsaWRpdHlTdGF0ZV9oCiAKLSNp
bmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiRm9ybUFzc29jaWF0
ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBWYWxpZGl0eVN0YXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxWYWxpZGl0eVN0YXRlPiBjcmVhdGUoSFRNTEZv
cm1Db250cm9sRWxlbWVudCogY29udHJvbCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxWYWxpZGl0
eVN0YXRlPiBjcmVhdGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBjb250cm9sKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWYWxpZGl0eVN0YXRlKGNvbnRyb2wpKTsKICAgICB9
CkBAIC01NCwxMiArNTQsMTIgQEAgcHVibGljOgogICAgIGJvb2wgdmFsaWQoKSBjb25zdDsKIAog
cHJpdmF0ZToKLSAgICBWYWxpZGl0eVN0YXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRy
b2wpIDogbV9jb250cm9sKGNvbnRyb2wpIHsgfQorICAgIFZhbGlkaXR5U3RhdGUoRm9ybUFzc29j
aWF0ZWRFbGVtZW50KiBjb250cm9sKSA6IG1fY29udHJvbChjb250cm9sKSB7IH0KIAogICAgIHN0
YXRpYyBib29sIGlzVmFsaWRDb2xvclN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkRW1haWxBZGRyZXNzKGNvbnN0IFN0cmluZyYpOwogCi0gICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCogbV9jb250cm9sOworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogbV9j
b250cm9sOwogICAgIFN0cmluZyBtX2N1c3RvbUVycm9yTWVzc2FnZTsKIH07CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0Zv
cm1TdWJtaXNzaW9uLmNwcAppbmRleCBhOWYyNjgwM2YwMmRmNDg4MjZhYTg4Nzc3MzZmZGJmMTky
ZmZlZWJhLi5iZGY5MWUxZjI5MTg3N2IwNTY0NTNkYTMzNDIxZWNmMDE0MzdiNjExIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKKysrIGIvV2ViQ29yZS9sb2Fk
ZXIvRm9ybVN1Ym1pc3Npb24uY3BwCkBAIC0xNzUsMTAgKzE3NSwxMSBAQCBQYXNzUmVmUHRyPEZv
cm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKEhUTUxGb3JtRWxlbWVudCogZm9y
bSwgY29uc3QgQQogICAgIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5nPiA+IGZvcm1WYWx1ZXM7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRz
KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJv
bCA9IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpW2ldOworICAgICAgICBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXTsKICAgICAg
ICAgaWYgKCFjb250cm9sLT5kaXNhYmxlZCgpKQogICAgICAgICAgICAgY29udHJvbC0+YXBwZW5k
Rm9ybURhdGEoKmRvbUZvcm1EYXRhLCBpc011bHRpUGFydEZvcm0pOwotICAgICAgICBpZiAoY29u
dHJvbC0+aGFzTG9jYWxOYW1lKGlucHV0VGFnKSkgeworICAgICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IHRvSFRNTEVsZW1lbnQoY29udHJvbCk7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNM
b2NhbE5hbWUoaW5wdXRUYWcpKSB7CiAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihjb250cm9sKTsKICAgICAgICAgICAg
IGlmIChpbnB1dC0+aXNUZXh0RmllbGQoKSkgewogICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXMu
YXBwZW5kKHBhaXI8U3RyaW5nLCBTdHJpbmc+KGlucHV0LT5uYW1lKCksIGlucHV0LT52YWx1ZSgp
KSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCmluZGV4IGQwYzdhNjQ3N2Q4ZDZhNmM5ODNhMTNjZTcyMzBmYWMwNGZhNmI3ZjQuLmYxOWRm
ZjRkM2E3ZjgyZGZhMDA0ODhkOGQ5ODk2OGM3OWZlYjMwNGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMTEtMzAgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAiZWxlbWVudHMiIGZv
ciBmb3JtIGFuZCBmaWVsZHNzZXQgZG9uJ3QgY29uZm9ybSB0byB0aGUgSFRNTDUgc3BlYworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MjEKKworICAg
ICAgICBNb2RpZmllZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50IGluc3RlYWQgb2YgSFRN
TEZvcm1Db250cm9sRWxlbWVudC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLm1tOgorICAgICAgICAoLVtXZWJIVE1MUmVwcmVzZW50YXRpb24gZWxlbWVudFdpdGhO
YW1lOmluRm9ybTpdKTogTW9kaWZpZWQgdG8gdXNlCisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudCBpbnN0ZWFkIG9mIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQuCisgICAgICAgICgtW1dlYkhU
TUxSZXByZXNlbnRhdGlvbiBjb250cm9sc0luRm9ybTpdKTogRGl0dG8uCisKIDIwMTAtMTEtMjkg
IERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVz
ZW50YXRpb24ubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1t
CmluZGV4IDI2OTk0NzIyZjJmNzA2NDcyMzU0Yjg2MDYzM2Y1YWQxYWNhM2RlZWQuLmZhZDBhNGE0
MmMzNGEzZjk5NjZlNjM0YzFhMDI1MGFmOTJlZjA0ZjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQpAQCAtMjg1LDEyICsyODUsMTIgQEAgc3RhdGljIEhU
TUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50ICplbGVt
ZW50KQogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudEZyb21E
T01FbGVtZW50KGZvcm0pOwogICAgIGlmICghZm9ybUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZWxlbWVudHMg
PSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgY29uc3QgVmVjdG9yPEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5hc3NvY2lhdGVk
RWxlbWVudHMoKTsKICAgICBBdG9taWNTdHJpbmcgdGFyZ2V0TmFtZSA9IG5hbWU7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsdCA9IGVsZW1lbnRzW2ldOworICAgICAgICBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQqIGVsdCA9IGVsZW1lbnRzW2ldOwogICAgICAgICBpZiAoZWx0LT5uYW1l
KCkgPT0gdGFyZ2V0TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBraXQoZWx0KTsKKyAgICAgICAg
ICAgIHJldHVybiBraXQodG9IVE1MRWxlbWVudChlbHQpKTsKICAgICB9CiAgICAgcmV0dXJuIG5p
bDsKIH0KQEAgLTMzMywxMCArMzMzLDEwIEBAIHN0YXRpYyBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50KiBlbGVtZW50KQogICAgIGlmICghZm9y
bUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgTlNNdXRhYmxlQXJyYXkgKnJlc3Vs
dHMgPSBuaWw7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZWxl
bWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgY29uc3QgVmVj
dG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5hc3Nv
Y2lhdGVkRWxlbWVudHMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHMu
c2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLT5pc0VudW1lcmF0YWJsZSgp
KSB7IC8vIFNraXAgb3B0aW9uIGVsZW1lbnRzLCBvdGhlciBkdWRzCi0gICAgICAgICAgICBET01F
bGVtZW50KiBkZSA9IGtpdChlbGVtZW50c1tpXSk7CisgICAgICAgICAgICBET01FbGVtZW50KiBk
ZSA9IGtpdCh0b0hUTUxFbGVtZW50KGVsZW1lbnRzW2ldKSk7CiAgICAgICAgICAgICBpZiAoIXJl
c3VsdHMpCiAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdp
dGhPYmplY3Q6ZGVdOwogICAgICAgICAgICAgZWxzZQo=
</data>
<flag name="review"
          id="65971"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75250</attachid>
            <date>2010-11-30 22:12:15 -0800</date>
            <delta_ts>2010-12-02 02:20:37 -0800</delta_ts>
            <desc>Patch V1</desc>
            <filename>formassociatedelementV1.patch</filename>
            <type>text/plain</type>
            <size>158728</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTY0IEBACisyMDEwLTExLTMwICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTGV0IEhUTUxPYmplY3RFbGVtZW50IGJlIGEgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4ODIxCisKKyAg
ICAgICAgSW50cm9kdWNlcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgY2xhc3Mgd2hpY2ggd291bGQg
YmUgYSBzdXBlciBjbGFzcworICAgICAgICBvZiBmb3JtIGFzc29jYXRlZCBlbGVtZW50cy4gU29t
ZSBvZiBtZW1iZXIgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgb2YKKyAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCBhcmUgbWlncmF0ZWQgaW50byB0aGlzIGNsYXNzLgorICAgICAgICBGb2xs
b3dpbmcgdGhlIEhUTUw1IHNwZWMsIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgY2xhc3MgYW5kCisg
ICAgICAgIEhUTUxPYmplY3RFbGVtZW50IGNsYXNzIGFyZSBzdWJjbGFzc2VzIG9mIGl0IGZvciBu
b3cuCisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMt
b3JkZXIuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazogQWRkZWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmNwcAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogQWRkZWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkZWQgdGhlIHN5bWJvbCBmb3IgdG9IVE1MRWxlbWVudChG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqKQorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8u
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaDogRml4ZWQgY2xhc3MgZm9yd2FyZCBkZWNsYXJhdGlv
biBvcmRlci4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSk6IE1vZGlmaWVk
IHRvCisgICAgICAgIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZXNldEZvcm1FbGVtZW50c093bmVyKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
aDogRGl0dG8uCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OkRPTUZvcm1EYXRhKToKKyAgICAgICAgKiBodG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6IEFkZGVkLiBNaWdyYXRlZCBzb21lIG1lbWJlciBmdW5j
dGlvbnMgYW5kIHZhcmlhYmxlcyBmcm9tIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgY2xhc3MuCisg
ICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6On5Gb3JtQXNz
b2NpYXRlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpyZW1vdmVGcm9tRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRm9ybU93bmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXRGb3JtT3duZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG9UcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSb290KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtTm9WYWxpZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVjYWxjV2lsbFZhbGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6d2lsbFZhbGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVj
ayk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkYXRpb25N
ZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6dXBkYXRl
VmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lh
dGVkRWxlbWVudDo6aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRy
b2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0
TmVlZHNWYWxpZGl0eUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6c2V0Q3VzdG9tVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6dG9IVE1MRWxlbWVu
dCk6CisgICAgICAgICogaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlZik6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29j
aWF0ZWRFbGVtZW50Ojpmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNo
ZXNSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpuYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6ZGlzYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXREaXNhYmxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlcXVpcmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0UmVxdWlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldFJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNz
b2NpYXRlZEVsZW1lbnQ6OmZvcm1EZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFz
c29jaWF0ZWRFbGVtZW50OjpzZXRGb3JtKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0pOiBN
b2RpZmllZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50CisgICAgICAgIGluc3RlYWQgb2Yg
SFRNTEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVj
dGlvbjo6Z2V0TmFtZWRGb3JtSXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250
cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudCk6IE1vZGlmaWVkIHJlZ2FyZGluZwor
ICAgICAgICB3aXRoIHRoZSBjaGFuZ2Ugb2YgY2xhc3MgaGllcmFyY2h5LgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjppbnNlcnRlZEludG9UcmVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3JtKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0RlZmF1bHRCdXR0b25Gb3JG
b3JtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojph
dHRyaWJ1dGVDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3Jt
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3Jt
Q29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVy
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNh
YmxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
cmVxdWlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnNldFJlcXVpcmVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZWFkT25seSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1D
b250cm9sRWxlbWVudDo6c2V0UmVhZE9ubHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0ZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXJlZkZv
cm1Bc3NvY2lhdGVkRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1D
b250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCk6IERpdHRvLgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudDo6c3VibWl0SW1wbGljaXRseSk6IE1vZGlmaWVkIHRvIHVzZQorICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZlbHkpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXhXaXRo
Rm9ybUF0dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
Ojpmb3JtRWxlbWVudEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6cmVtb3ZlRm9ybUVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50OjpjaGVja1ZhbGlkaXR5KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMp
OiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50Ojphc3NvY2lhdGVkRWxlbWVudHMpOiBEaXR0by4KKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6dXBkYXRlQ2hlY2tlZFJhZGlvQnV0dG9ucyk6IERpdHRvLgorICAgICAgICAq
IGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVj
dEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KTogTW9kaWZpZWQgcmVnYXJkaW5nCisgICAgICAg
IHdpdGggdGhlIGNoYW5nZSBvZiBjbGFzcyBoaWVyYXJjaHkuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MT2JqZWN0RWxlbWVudDo6fkhUTUxPYmplY3RFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0
YSk6IEFkZGVkCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Zm9ybUNvbnRy
b2xOYW1lKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Zm9y
bUNvbnRyb2xUeXBlKTogQWRkZWQuCisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmZvcm0pOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpmb3JtQ29udHJvbFZhbHVlTWF0Y2hl
c1JlbmRlcmVyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6
c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcik6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmlzRm9ybUNvbnRyb2xFbGVtZW50KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6d2lsbFZhbGlkYXRlKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6ZGlzYWJsZWQpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpzZXREaXNhYmxlZCk6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmlzRW51bWVyYXRhYmxlKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6cmVmRm9ybUFzc29j
aWF0ZWRFbGVtZW50KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVu
dDo6ZGVyZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KTogQWRkZWQuCisg
ICAgICAgICogaHRtbC9IVE1MVGFnTmFtZXMuaW46IEFkZGVkIGNvbnN0cnVjdG9yTmVlZHNGb3Jt
RWxlbWVudCB0byBvYmplY3QgdGFnLgorICAgICAgICAqIGh0bWwvVmFsaWRhdGlvbk1lc3NhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRhdGlvbk1lc3NhZ2U6OlZhbGlkYXRpb25NZXNz
YWdlKTogTW9kaWZpZWQgdG8gdXNlCisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCBpbnN0
ZWFkIG9mIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0
aW9uTWVzc2FnZTo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgICogaHRtbC9WYWxpZGF0aW9uTWVz
c2FnZS5oOgorICAgICAgICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWYWxpZGl0eVN0YXRlOjp2YWxpZGF0aW9uTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6dmFsdWVNaXNzaW5nKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjp0eXBlTWlzbWF0Y2gpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlZhbGlkaXR5U3RhdGU6OnBhdHRlcm5NaXNtYXRjaCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6dG9vTG9uZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6VmFsaWRpdHlTdGF0ZTo6cmFuZ2VVbmRlcmZsb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlZhbGlkaXR5U3RhdGU6OnJhbmdlT3ZlcmZsb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlZhbGlkaXR5U3RhdGU6OnN0ZXBNaXNtYXRjaCk6IERpdHRvLgorICAgICAgICAqIGh0bWwv
VmFsaWRpdHlTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6Y3JlYXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpWYWxpZGl0eVN0YXRl
KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpjcmVhdGUpOiBEaXR0by4KKwogMjAxMC0xMS0zMCAg
UGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRyZWFzIEtsaW5nLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL0FuZHJv
aWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw2ICsyNzcsNyBAQCBMT0NBTF9TUkNfRklMRVMg
Oj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlodG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3Bw
IFwKIAlodG1sL0VtYWlsSW5wdXRUeXBlLmNwcCBcCiAJaHRtbC9GaWxlSW5wdXRUeXBlLmNwcCBc
CisJaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIFwKIAlodG1sL0Zvcm1EYXRhTGlzdC5j
cHAgXAogCWh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwIFwKIAlodG1sL0hUTUxDb2xsZWN0aW9u
LmNwcCBcCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTg0LDYgKzk4NCw3IEBAIFNFVChXZWJDb3JlX1NPVVJD
RVMKICAgICBodG1sL0VtYWlsSW5wdXRUeXBlLmNwcAogICAgIGh0bWwvRlRQRGlyZWN0b3J5RG9j
dW1lbnQuY3BwCiAgICAgaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAorICAgIGh0bWwvRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmNwcAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmNwcAogICAgIGh0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKSW5kZXg6
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTc3LDYgKzE1NzcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvaHRtbC9FbWFpbElucHV0VHlwZS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5j
cHAgXAogCVdlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmggXAorCVdlYkNvcmUvaHRtbC9Gb3Jt
QXNzb2NpYXRlZEVsZW1lbnQuY3BwIFwKKwlXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmggXAogCVdlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwIFwKIAlXZWJDb3JlL2h0bWwv
Rm9ybURhdGFMaXN0LmggXAogCVdlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAg
XApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTI5NCw2ICsyOTQsNyBAQCBfX1pON1dlYkNvcmUxM0tleWJvYXJk
RXZlbnRDMUVSS04zV1RGMTJBCiBfX1pON1dlYkNvcmUxM1R5cGluZ0NvbW1hbmQzOWluc2VydFBh
cmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudEVQTlNfOERvY3VtZW50RQogX19aTjdXZWJD
b3JlMTNjcmVhdGVXcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmpl
Y3RFUE5TXzROb2RlRQogX19aTjdXZWJDb3JlMTN0b0RldmljZVNwYWNlRVJLTlNfOUZsb2F0UmVj
dEVQOE5TV2luZG93CitfX1pON1dlYkNvcmUxM3RvSFRNTEVsZW1lbnRFUE5TXzIxRm9ybUFzc29j
aWF0ZWRFbGVtZW50RQogX19aTjdXZWJDb3JlMTN0b0pTRE9NV2luZG93RU4zSlNDN0pTVmFsdWVF
CiBfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlMTJyZW1vdmVDbGllbnRFUE5TXzIwQ2FjaGVk
UmVzb3VyY2VDbGllbnRFCiBfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlOWFkZENsaWVudEVQ
TlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MzAwNykKKysrIFdl
YkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xNjE4LDYgKzE2MTgsOCBAQAog
ICAgICAgICAgICAgJ2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCcsCiAgICAgICAgICAgICAn
aHRtbC9GaWxlSW5wdXRUeXBlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxlSW5wdXRUeXBl
LmgnLAorICAgICAgICAgICAgJ2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCcsCisgICAg
ICAgICAgICAnaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnaHRt
bC9Gb3JtRGF0YUxpc3QuY3BwJywKICAgICAgICAgICAgICdodG1sL0Zvcm1EYXRhTGlzdC5oJywK
ICAgICAgICAgICAgICdodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCcsCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9u
IDczMDA3KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtODc5LDYg
Kzg3OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGh0bWwvRW1haWxJbnB1dFR5cGUuY3BwIFwKICAg
ICBodG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBcCiAgICAgaHRtbC9GaWxlSW5wdXRUeXBl
LmNwcCBcCisgICAgaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0Zv
cm1EYXRhTGlzdC5jcHAgXAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwIFwKICAgICBo
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcCBcCkBAIC0xNzg5LDYgKzE3OTAsNyBAQCBIRUFERVJT
ICs9IFwKICAgICBodG1sL0RPTUZvcm1EYXRhLmggXAogICAgIGh0bWwvRE9NU2V0dGFibGVUb2tl
bkxpc3QuaCBcCiAgICAgaHRtbC9ET01Ub2tlbkxpc3QuaCBcCisgICAgaHRtbC9Gb3JtQXNzb2Np
YXRlZEVsZW1lbnQuaCBcCiAgICAgaHRtbC9Gb3JtRGF0YUxpc3QuaCBcCiAgICAgaHRtbC9GVFBE
aXJlY3RvcnlEb2N1bWVudC5oIFwKICAgICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmggXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MzAwNykKKysr
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTUwMTQzLDYgKzUwMTQzLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRm9y
bUFzc29jaWF0ZWRFbGVtZW50LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZvcm1EYXRhTGlzdC5jcHAiDQogCQkJCT4NCiAJCQk8
L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNTksNiArMTE1OSw4IEBACiAJCTQ5RkZCRjFEMTFD
ODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAv
KiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSAqLzsgfTsKIAkJNDlGRkJGM0YxMUM5M0VFMzAwNkE3
MTE4IC8qIFdlYkdMTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RkZCRjNEMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggKi87IH07
CiAJCTQ5RkZCRjQwMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGRkJGM0UxMUM5M0VFMzAwNkE3
MTE4IC8qIFdlYkdMTGF5ZXIubW0gKi87IH07CisJCTRBMERBMkZFMTI5QjI0MTkwMEFCNjFFMSAv
KiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEEwREEyRkMxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudC5jcHAgKi87IH07CisJCTRBMERBMkZGMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRBMERBMkZEMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0
QThDOTZFQjBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBOEM5NkVBMEJFNjkw
MzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tICovOyB9OwogCQk0QUNCQzBC
RTEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBQ0JDMEJDMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFz
c0xpc3QuY3BwICovOyB9OwogCQk0QUNCQzBCRjEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUNCQzBC
RDEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmggKi87IH07CkBAIC03Mjk4LDYgKzczMDAs
OCBAQAogCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHQzRE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGRkJGM0QxMUM5M0VF
MzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViR0xMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZGQkYzRTEx
QzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYkdMTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTRBMERBMkZDMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEEwREEyRkQxMjlCMjQxOTAw
QUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXJN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gU2VsZWN0aW9u
Q29udHJvbGxlck1hYy5tbTsgcGF0aCA9IG1hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QUNCQzBCQzEyNzEzQ0JEMDA5NEY5QjIgLyog
Q2xhc3NMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsYXNz
TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBQ0JDMEJEMTI3MTNDQkQw
MDk0RjlCMiAvKiBDbGFzc0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2xhc3NMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDczNSw2ICsxNDcz
OSw4IEBACiAJCTkzRUVDMUVDMDlDMjg3NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0QTBEQTJGQzEyOUIyNDE5MDBBQjYx
RTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCAqLywKKwkJCQk0QTBEQTJGRDEyOUIyNDE5
MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggKi8sCiAJCQkJNDk0ODRGQUUxMDJD
RjAxRTAwMTg3REQzIC8qIGNhbnZhcyAqLywKIAkJCQk5N0MxRjU1MTEyMjg1NTg4MDBFREU2MTYg
LyogcGFyc2VyICovLAogCQkJCUIwMTQ5RTc5MTFBNEIyMTUwMDE5NkE3QiAvKiBBc3luY0ltYWdl
UmVzaXplci5jcHAgKi8sCkBAIC0yMTQzMyw2ICsyMTQzOSw3IEBACiAJCQkJNzU0MTVENUExMjlB
QjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRTk3Q0NFQjEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJFOTdDRTcwMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk0QTBEQTJGRjEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI0MDEyLDYgKzI0MDE5LDcgQEAKIAkJCQkyRTk3Q0NF
QTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU5
N0NDRjcxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0YVZpZXdDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkU5N0NFNkYxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNEEwREEyRkUxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvZG9tL0NoZWNrZWRSYWRp
b0J1dHRvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25z
LmgJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ7
CitjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogCiBjbGFzcyBDaGVja2VkUmFkaW9CdXR0b25zIHsK
IHB1YmxpYzoKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGb2N1
c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKQEAgLTQzODgsMjMgKzQzODksMjMgQEAgdm9pZCBEb2N1bWVudDo6c2V0
SWNvblVSTChjb25zdCBTdHJpbmcmIAogICAgICAgICBmLT5sb2FkZXIoKS0+c2V0SWNvblVSTCht
X2ljb25VUkwpOwogfQogCi12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50V2l0aEZv
cm1BdHRyaWJ1dGUoRWxlbWVudCogY29udHJvbCkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9y
bUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQp
CiB7Ci0gICAgQVNTRVJUKGNvbnRyb2wtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAg
ICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLmFkZChjb250cm9sKTsKKyAgICBBU1NF
UlQodG9IVE1MRWxlbWVudChlbGVtZW50KS0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpOwor
ICAgIG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUuYWRkKGVsZW1lbnQpOwogfQogCi12
b2lkIERvY3VtZW50Ojp1bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZShFbGVt
ZW50KiBjb250cm9sKQordm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZv
cm1BdHRyaWJ1dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlbGVtZW50KQogewotICAgIG1fZm9y
bUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUucmVtb3ZlKGNvbnRyb2wpOworICAgIG1fZm9ybUVs
ZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUucmVtb3ZlKGVsZW1lbnQpOwogfQogCiB2b2lkIERvY3Vt
ZW50OjpyZXNldEZvcm1FbGVtZW50c093bmVyKEhUTUxGb3JtRWxlbWVudCogZm9ybSkKIHsKLSAg
ICB0eXBlZGVmIEZvcm1FbGVtZW50TGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOworICAg
IHR5cGVkZWYgRm9ybUFzc29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIEl0ZXJh
dG9yOwogICAgIEl0ZXJhdG9yIGVuZCA9IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUu
ZW5kKCk7CiAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRy
aWJ1dGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Kj4oKml0KS0+cmVzZXRGb3JtT3duZXIoZm9ybSk7CisgICAgICAg
ICgqaXQpLT5yZXNldEZvcm1Pd25lcihmb3JtKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0VXNl
U2VjdXJlS2V5Ym9hcmRFbnRyeVdoZW5BY3RpdmUoYm9vbCB1c2VzU2VjdXJlS2V5Ym9hcmQpCklu
ZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRW50aXR5
UmVmZXJlbmNlOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOworY2xhc3MgRm9y
bUFzc29jaWF0ZWRFbGVtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFz
cyBIVE1MQ2FudmFzRWxlbWVudDsKQEAgLTQ5MCw4ICs0OTEsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygpIGNvbnN0OwogICAgIGJvb2wgdGFrZVN0YXRl
Rm9yRm9ybUVsZW1lbnQoQXRvbWljU3RyaW5nSW1wbCogbmFtZSwgQXRvbWljU3RyaW5nSW1wbCog
dHlwZSwgU3RyaW5nJiBzdGF0ZSk7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRo
Rm9ybUF0dHJpYnV0ZShFbGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9ybUVsZW1lbnRX
aXRoRm9ybUF0dHJpYnV0ZShFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50
V2l0aEZvcm1BdHRyaWJ1dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQq
KTsKICAgICB2b2lkIHJlc2V0Rm9ybUVsZW1lbnRzT3duZXIoSFRNTEZvcm1FbGVtZW50Kik7CiAK
ICAgICBGcmFtZVZpZXcqIHZpZXcoKSBjb25zdDsgLy8gY2FuIGJlIE5VTEwKQEAgLTEyMTEsNyAr
MTIxMiw4IEBAIHByaXZhdGU6CiAKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEVsZW1lbnQqLCA2
ND4gRm9ybUVsZW1lbnRMaXN0SGFzaFNldDsKICAgICBGb3JtRWxlbWVudExpc3RIYXNoU2V0IG1f
Zm9ybUVsZW1lbnRzV2l0aFN0YXRlOwotICAgIEZvcm1FbGVtZW50TGlzdEhhc2hTZXQgbV9mb3Jt
RWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZTsKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEZvcm1B
c3NvY2lhdGVkRWxlbWVudCosIDMyPiBGb3JtQXNzb2NpYXRlZEVsZW1lbnRMaXN0SGFzaFNldDsK
KyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnRMaXN0SGFzaFNldCBtX2Zvcm1FbGVtZW50c1dpdGhG
b3JtQXR0cmlidXRlOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPEZvcm1FbGVtZW50S2V5LCBWZWN0
b3I8U3RyaW5nPiwgRm9ybUVsZW1lbnRLZXlIYXNoLCBGb3JtRWxlbWVudEtleUhhc2hUcmFpdHM+
IEZvcm1FbGVtZW50U3RhdGVNYXA7CiAgICAgRm9ybUVsZW1lbnRTdGF0ZU1hcCBtX3N0YXRlRm9y
TmV3Rm9ybUVsZW1lbnRzOwpJbmRleDogV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuY3BwCShyZXZpc2lvbiA3MzAwNykK
KysrIFdlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkg
KzUxLDkgQEAgRE9NRm9ybURhdGE6OkRPTUZvcm1EYXRhKEhUTUxGb3JtRWxlbWVudAogICAgICAg
ICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+YXNzb2NpYXRl
ZEVsZW1lbnRzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dCogY29udHJvbCA9IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpW2ldOwotICAgICAgICBpZiAo
IWNvbnRyb2wtPmRpc2FibGVkKCkpCi0gICAgICAgICAgICBjb250cm9sLT5hcHBlbmRGb3JtRGF0
YSgqdGhpcywgdHJ1ZSk7CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZWxlbWVudCA9
IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpW2ldOworICAgICAgICBpZiAoIWVsZW1lbnQtPmRp
c2FibGVkKCkpCisgICAgICAgICAgICBlbGVtZW50LT5hcHBlbmRGb3JtRGF0YSgqdGhpcywgdHJ1
ZSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNw
cAkocmV2aXNpb24gNzMwMDcpCShmcm9tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDo3MzAwNykKKysrIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAg
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCisKKyNpbmNs
dWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgorI2luY2x1ZGUg
IkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50UmFyZURh
dGEuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJMYWJlbHNOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5o
IgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgIlZhbGlkYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiVmFsaWRpdHlT
dGF0ZS5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKK3VzaW5nIG5h
bWVzcGFjZSBzdGQ7CisKK0hUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBI
VE1MRm9ybUVsZW1lbnQqIGZvcm0pCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCkKKyAgICAsIG1fZm9ybShmb3JtKQorICAgICwgbV9kaXNhYmxlZChmYWxzZSkKKyAgICAsIG1f
cmVhZE9ubHkoZmFsc2UpCisgICAgLCBtX3JlcXVpcmVkKGZhbHNlKQorICAgICwgbV92YWx1ZU1h
dGNoZXNSZW5kZXJlcihmYWxzZSkKKyAgICAsIG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQoZmFs
c2UpCisgICAgLCBtX3dpbGxWYWxpZGF0ZSh0cnVlKQorICAgICwgbV9pc1ZhbGlkKHRydWUpCit7
CisgICAgaWYgKCFtX2Zvcm0pCisgICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsK
KyAgICBpZiAobV9mb3JtKQorICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhp
cyk7Cit9CisKK0hUTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50
KCkKK3sKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50
KHRoaXMpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRldGFjaCgpCit7Cisg
ICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgIEhUTUxFbGVtZW50OjpkZXRh
Y2goKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtTm9WYWxpZGF0ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZm9ybW5vdmFsaWRhdGVBdHRyKS5p
c051bGwoKTsKK30KKworVmFsaWRpdHlTdGF0ZSogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFs
aWRpdHkoKQoreworICAgIGlmICghbV92YWxpZGl0eVN0YXRlKQorICAgICAgICBtX3ZhbGlkaXR5
U3RhdGUgPSBWYWxpZGl0eVN0YXRlOjpjcmVhdGUodGhpcyk7CisKKyAgICByZXR1cm4gbV92YWxp
ZGl0eVN0YXRlLmdldCgpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IGRpc2FibGVkQXR0cikgeworICAgICAgICBib29sIG9sZERpc2FibGVkID0gbV9kaXNhYmxl
ZDsKKyAgICAgICAgbV9kaXNhYmxlZCA9ICFhdHRyLT5pc051bGwoKTsKKyAgICAgICAgaWYgKG9s
ZERpc2FibGVkICE9IG1fZGlzYWJsZWQpIHsKKyAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCkt
Pmhhc0FwcGVhcmFuY2UoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5z
dGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgRW5hYmxlZFN0YXRlKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHJlYWRvbmx5QXR0cikgeworICAgICAgICBib29sIG9s
ZFJlYWRPbmx5ID0gbV9yZWFkT25seTsKKyAgICAgICAgbV9yZWFkT25seSA9ICFhdHRyLT5pc051
bGwoKTsKKyAgICAgICAgaWYgKG9sZFJlYWRPbmx5ICE9IG1fcmVhZE9ubHkpIHsKKyAgICAgICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYm
IHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKKyAgICAgICAgICAgICAgICBy
ZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgUmVhZE9ubHlTdGF0
ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSByZXF1aXJlZEF0
dHIpIHsKKyAgICAgICAgYm9vbCBvbGRSZXF1aXJlZCA9IG1fcmVxdWlyZWQ7CisgICAgICAgIG1f
cmVxdWlyZWQgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAgICAgIGlmIChvbGRSZXF1aXJlZCAhPSBt
X3JlcXVpcmVkKSB7CisgICAgICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKKyAgICAg
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsgLy8gVXBkYXRlcyBmb3IgOnJlcXVpcmVkIDpv
cHRpb25hbCBjbGFzc2VzLgorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIEhUTUxFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBzZXROZWVkc1dpbGxWYWxpZGF0
ZUNoZWNrKCk7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKK3sK
KyAgICBBU1NFUlQoIWF0dGFjaGVkKCkpOworCisgICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwor
CisgICAgLy8gVGhlIGNhbGwgdG8gdXBkYXRlRnJvbUVsZW1lbnQoKSBuZWVkcyB0byBnbyBhZnRl
ciB0aGUgY2FsbCB0aHJvdWdoCisgICAgLy8gdG8gdGhlIGJhc2UgY2xhc3MncyBhdHRhY2goKSBi
ZWNhdXNlIHRoYXQgY2FuIHNvbWV0aW1lcyBkbyBhIGNsb3NlCisgICAgLy8gb24gdGhlIHJlbmRl
cmVyLgorICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9t
RWxlbWVudCgpOworICAgICAgICAKKyAgICAvLyBGb2N1cyB0aGUgZWxlbWVudCBpZiBpdCBzaG91
bGQgaG9ub3VyIGl0cyBhdXRvZm9jdXMgYXR0cmlidXRlLgorICAgIC8vIFdlIGhhdmUgdG8gZGV0
ZXJtaW5lIGlmIHRoZSBlbGVtZW50IGlzIGEgVGV4dEFyZWEvSW5wdXQvQnV0dG9uL1NlbGVjdCwK
KyAgICAvLyBpZiBpbnB1dCB0eXBlIGhpZGRlbiBpZ25vcmUgYXV0b2ZvY3VzLiBTbyBpZiBkaXNh
YmxlZCBvciByZWFkb25seS4KKyAgICBib29sIGlzSW5wdXRUeXBlSGlkZGVuID0gZmFsc2U7Cisg
ICAgaWYgKGhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICBpc0lucHV0VHlwZUhpZGRlbiA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPih0aGlzKS0+aXNJbnB1dFR5cGVIaWRkZW4o
KTsKKworICAgIGlmIChhdXRvZm9jdXMoKSAmJiByZW5kZXJlcigpICYmICFkb2N1bWVudCgpLT5p
Z25vcmVBdXRvZm9jdXMoKSAmJiAhaXNSZWFkT25seUZvcm1Db250cm9sKCkgJiYKKyAgICAgICAg
ICAgICgoaGFzVGFnTmFtZShpbnB1dFRhZykgJiYgIWlzSW5wdXRUeXBlSGlkZGVuKSB8fCBoYXNU
YWdOYW1lKHNlbGVjdFRhZykgfHwKKyAgICAgICAgICAgICAgaGFzVGFnTmFtZShidXR0b25UYWcp
IHx8IGhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKSkKKyAgICAgICAgIGZvY3VzKCk7Cit9CisKK3Zv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCit7
CisgICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgICAgIGRvY3VtZW50
KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKKyAgICAgICAg
RWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRy
aWJ1dGUoZm9ybUF0dHIpKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFn
TmFtZShmb3JtVGFnKSkgeworICAgICAgICAgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgICAgICAg
ICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICAgICAgbV9mb3JtID0g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBtX2Zv
cm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KCFtX2Zvcm0pIHsKKyAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIGEgbmV3IGZv
cm0gZWxlbWVudCBiZWluZyBjcmVhdGVkIGJ5CisgICAgICAgIC8vIEphdmFTY3JpcHQgYW5kIGlu
c2VydGVkIGluc2lkZSBhIGZvcm0uICBJbiB0aGUgY2FzZSBvZiB0aGUgcGFyc2VyCisgICAgICAg
IC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3aWxsIGFscmVhZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVl
IGZvciBtX2Zvcm0sIAorICAgICAgICAvLyBhbmQgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0
aGluZy4KKyAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOworICAgICAgICBpZiAo
bV9mb3JtKQorICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25z
KCkuYWRkQnV0dG9uKHRoaXMpOworICAgIH0KKworICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZElu
dG9UcmVlKGRlZXApOworfQorCitzdGF0aWMgaW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4p
Cit7CisgICAgTm9kZSogcm9vdCA9IG47CisgICAgZm9yICg7IG47IG4gPSBuLT5wYXJlbnROb2Rl
KCkpCisgICAgICAgIHJvb3QgPSBuOworICAgIHJldHVybiByb290OworfQorCit2b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApCit7CisgICAgaWYg
KGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKQorICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lz
dGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKKworICAgIC8vIElmIHRoZSBm
b3JtIGFuZCBlbGVtZW50IGFyZSBib3RoIGluIHRoZSBzYW1lIHRyZWUsIHByZXNlcnZlIHRoZSBj
b25uZWN0aW9uIHRvIHRoZSBmb3JtLgorICAgIC8vIE90aGVyd2lzZSwgbnVsbCBvdXQgb3VyIGZv
cm0gYW5kIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZm9ybSdzIGxpc3Qgb2YgZWxlbWVudHMu
CisgICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9vdCh0aGlzKSAhPSBmaW5kUm9vdChtX2Zvcm0pKSB7
CisgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgIG1fZm9y
bSA9IDA7CisgICAgfQorCisgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShkZWVwKTsK
K30KKworY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtQ29u
dHJvbE5hbWUoKSBjb25zdAoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGZhc3RH
ZXRBdHRyaWJ1dGUobmFtZUF0dHIpOworICAgIHJldHVybiBuYW1lLmlzTnVsbCgpID8gZW1wdHlB
dG9tIDogbmFtZTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCit7CisgICAgc2V0QXR0cmlidXRlKG5hbWVBdHRyLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb3JtQ29u
dHJvbENoYW5nZUV2ZW50KCkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSkpOworfQorCit2b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnNldERpc2FibGVkKGJvb2wgYikKK3sKKyAgICBzZXRBdHRyaWJ1dGUo
ZGlzYWJsZWRBdHRyLCBiID8gIiIgOiAwKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjphdXRvZm9jdXMoKSBjb25zdAoreworICAgIHJldHVybiBoYXNBdHRyaWJ1dGUoYXV0b2Zv
Y3VzQXR0cik7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX3JlcXVpcmVkOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVG
cm9tRWxlbWVudENhbGxiYWNrKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUX0FSRyhub2RlLCBu
b2RlLT5pc0VsZW1lbnROb2RlKCkpOworICAgIEFTU0VSVF9BUkcobm9kZSwgc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKTsKKyAgICBBU1NFUlQobm9k
ZS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpKQorICAgICAgICByZW5kZXJlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKK30KKwor
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFu
Z2UpCit7CisgICAgSFRNTEVsZW1lbnQ6OnJlY2FsY1N0eWxlKGNoYW5nZSk7CisKKyAgICAvLyB1
cGRhdGVGcm9tRWxlbWVudCgpIGNhbiBjYXVzZSB0aGUgc2VsZWN0aW9uIHRvIGNoYW5nZSwgYW5k
IGluIHR1cm4KKyAgICAvLyB0cmlnZ2VyIHN5bmNocm9ub3VzIGxheW91dCwgc28gaXQgbXVzdCBu
b3QgYmUgY2FsbGVkIGR1cmluZyBzdHlsZSByZWNhbGMuCisgICAgaWYgKHJlbmRlcmVyKCkpCisg
ICAgICAgIHF1ZXVlUG9zdEF0dGFjaENhbGxiYWNrKHVwZGF0ZUZyb21FbGVtZW50Q2FsbGJhY2ss
IHRoaXMpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMo
KSBjb25zdAoreworICAgIHJldHVybiAhZGlzYWJsZWQoKTsKK30KKworYm9vbCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFyZW5kZXJlcigp
IHx8IAorICAgICAgICAhcmVuZGVyZXIoKS0+aXNCb3goKSB8fCB0b1JlbmRlckJveChyZW5kZXJl
cigpKS0+c2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEhU
TUxFbGVtZW50Ojppc0ZvY3VzYWJsZSBoYW5kbGVzIHZpc2liaWxpdHkgYW5kIGNhbGxzIHN1cG9y
dHNGb2N1cyB3aGljaAorICAgIC8vIHdpbGwgY292ZXIgdGhlIGRpc2FibGVkIGNhc2UuCisgICAg
cmV0dXJuIEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOworfQorCitib29sIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNv
bnN0Cit7CisgICAgaWYgKGlzRm9jdXNhYmxlKCkpCisgICAgICAgIGlmIChkb2N1bWVudCgpLT5m
cmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFu
ZGxlcigpLT50YWJzVG9BbGxDb250cm9scyhldmVudCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAor
eworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCisgICAgcmV0dXJuIEhUTUxFbGVt
ZW50Ojppc01vdXNlRm9jdXNhYmxlKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCitzaG9ydCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0Cit7
CisgICAgLy8gU2tpcCB0aGUgc3VwcG9ydHNGb2N1cyBjaGVjayBpbiBIVE1MRWxlbWVudC4KKyAg
ICByZXR1cm4gRWxlbWVudDo6dGFiSW5kZXgoKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpyZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBTaG91
bGQgcmV0dXJuIGZhbHNlIGlmIHRoaXMgZWxlbWVudCBoYXMgYSBkYXRhbGlzdCBlbGVtZW50IGFz
IGFuCisgICAgLy8gYW5jZXN0b3IuIFNlZSBIVE1MNSA0LjEwLjEwICdUaGUgZGF0YWxpc3QgZWxl
bWVudC4nCisgICAgcmV0dXJuICFtX2Rpc2FibGVkICYmICFtX3JlYWRPbmx5OworfQorCitib29s
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0ZSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkKSB7CisgICAgICAgIG1fd2lsbFZhbGlkYXRlSW5p
dGlhbGl6ZWQgPSB0cnVlOworICAgICAgICBtX3dpbGxWYWxpZGF0ZSA9IHJlY2FsY1dpbGxWYWxp
ZGF0ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0
aW9uIGZhaWxzLCBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCkgaXMgbm90CisgICAgICAgIC8v
IGNhbGxlZCBjb3JyZWN0bHkgd2hlbiBzb21ldGhpbmcgd2hpY2ggY2hhbmdlcyByZWNhbGNXaWxs
VmFsaWRhdGUoKSByZXN1bHQKKyAgICAgICAgLy8gaXMgdXBkYXRlZC4KKyAgICAgICAgQVNTRVJU
KG1fd2lsbFZhbGlkYXRlID09IHJlY2FsY1dpbGxWYWxpZGF0ZSgpKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fd2lsbFZhbGlkYXRlOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNl
dE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKQoreworICAgIC8vIFdlIG5lZWQgdG8gcmVjYWxjdWxh
dGUgd2lsbFZhbGlkdGUgaW1tZWRpYXRlbHkgYmVjYXVzZSB3aWxsVmFsaWRhdGUKKyAgICAvLyBj
aGFuZ2UgY2FuIGNhdXNlcyBzdHlsZSBjaGFuZ2UuCisgICAgYm9vbCBuZXdXaWxsVmFsaWRhdGUg
PSByZWNhbGNXaWxsVmFsaWRhdGUoKTsKKyAgICBpZiAobV93aWxsVmFsaWRhdGVJbml0aWFsaXpl
ZCAmJiBtX3dpbGxWYWxpZGF0ZSA9PSBuZXdXaWxsVmFsaWRhdGUpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBtX3dpbGxWYWxpZGF0
ZSA9IG5ld1dpbGxWYWxpZGF0ZTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaWYg
KCFtX3dpbGxWYWxpZGF0ZSkKKyAgICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgp
OworfQorCitTdHJpbmcgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRhdGlvbk1lc3NhZ2Uo
KQoreworICAgIHJldHVybiB2YWxpZGl0eSgpLT52YWxpZGF0aW9uTWVzc2FnZSgpOworfQorCit2
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2Fn
ZSgpCit7CisgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKKyAgICBpZiAoIXBh
Z2UpCisgICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpZiAocmVuZGVy
ZXIoKSAmJiB3aWxsVmFsaWRhdGUoKSkgeworICAgICAgICBtZXNzYWdlID0gdmFsaWRhdGlvbk1l
c3NhZ2UoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgLy8gSFRNTDUgc3BlY2lmaWNhdGlv
biBkb2Vzbid0IGFzayBVQSB0byBzaG93IHRoZSB0aXRsZSBhdHRyaWJ1dGUgdmFsdWUKKyAgICAg
ICAgLy8gd2l0aCB0aGUgdmFsaWRhdGlvbk1lc3NhZ2UuICBIb3dldmVyLCB0aGlzIGJlaGF2aW9y
IGlzIHNhbWUgYXMgT3BlcmEKKyAgICAgICAgLy8gYW5kIHRoZSBzcGVjaWZpY2F0aW9uIGRlc2Ny
aWJlcyBzdWNoIGJlaGF2aW9yIGFzIGFuIGV4YW1wbGUuCisgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdGl0bGUgPSBnZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICAgICAgaWYgKCFtZXNz
YWdlLmlzRW1wdHkoKSAmJiAhdGl0bGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtZXNzYWdl
LmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKHRpdGxlKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAoIW1fdmFsaWRhdGlvbk1lc3NhZ2UpIHsKKyAgICAgICAgbV92
YWxpZGF0aW9uTWVzc2FnZSA9IFZhbGlkYXRpb25NZXNzYWdlOjpjcmVhdGUodGhpcyk7CisgICAg
ICAgIG1fdmFsaWRhdGlvbk1lc3NhZ2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7CisgICAgfSBlbHNl
IGlmIChtZXNzYWdlLmlzRW1wdHkoKSkKKyAgICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVz
c2FnZSgpOworICAgIGVsc2UgaWYgKG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSAhPSBt
ZXNzYWdlKQorICAgICAgICBtX3ZhbGlkYXRpb25NZXNzYWdlLT5zZXRNZXNzYWdlKG1lc3NhZ2Up
OworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmhpZGVWaXNpYmxlVmFsaWRhdGlv
bk1lc3NhZ2UoKQoreworICAgIG1fdmFsaWRhdGlvbk1lc3NhZ2UgPSAwOworfQorCitTdHJpbmcg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV92YWxpZGF0aW9uTWVzc2FnZSA/IG1fdmFsaWRhdGlvbk1lc3NhZ2Ut
Pm1lc3NhZ2UoKSA6IFN0cmluZygpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1
bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCit7CisgICAgaWYgKCF3aWxsVmFsaWRhdGUoKSB8fCBp
c1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8v
IEFuIGV2ZW50IGhhbmRsZXIgY2FuIGRlcmVmIHRoaXMgb2JqZWN0LgorICAgIFJlZlB0cjxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmUHRyPERvY3VtZW50
PiBvcmlnaW5hbERvY3VtZW50KGRvY3VtZW50KCkpOworICAgIGJvb2wgbmVlZHNEZWZhdWx0QWN0
aW9uID0gZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlkRXZl
bnQsIGZhbHNlLCB0cnVlKSk7CisgICAgaWYgKG5lZWRzRGVmYXVsdEFjdGlvbiAmJiB1bmhhbmRs
ZWRJbnZhbGlkQ29udHJvbHMgJiYgaW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0g
ZG9jdW1lbnQoKSkKKyAgICAgICAgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLT5hcHBlbmQodGhp
cyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKQoreworICAgIC8vIElmIHRoZSBmb2xsb3dpbmcg
YXNzZXJ0aW9uIGZhaWxzLCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKSBpcyBub3QgY2FsbGVkCisg
ICAgLy8gY29ycmVjdGx5IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMgdmFsaWRpdHkgaXMg
dXBkYXRlZC4KKyAgICBBU1NFUlQobV9pc1ZhbGlkID09IHZhbGlkaXR5KCktPnZhbGlkKCkpOwor
ICAgIHJldHVybiBtX2lzVmFsaWQ7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCkKK3sKKyAgICBib29sIG5ld0lzVmFsaWQgPSB2YWxpZGl0
eSgpLT52YWxpZCgpOworICAgIGlmICh3aWxsVmFsaWRhdGUoKSAmJiBuZXdJc1ZhbGlkICE9IG1f
aXNWYWxpZCkgeworICAgICAgICAvLyBVcGRhdGUgc3R5bGUgZm9yIHBzZXVkbyBjbGFzc2VzIHN1
Y2ggYXMgOnZhbGlkIDppbnZhbGlkLgorICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cisg
ICAgfQorICAgIG1faXNWYWxpZCA9IG5ld0lzVmFsaWQ7CisKKyAgICAvLyBVcGRhdGVzIG9ubHkg
aWYgdGhpcyBjb250cm9sIGFscmVhZHkgaGFzIGEgdmFsaWR0aW9uIG1lc3NhZ2UuCisgICAgaWYg
KCF2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQ2Fs
bHMgdXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgZXZlbiBpZiBtX2lzVmFsaWQgaXMg
bm90CisgICAgICAgIC8vIGNoYW5nZWQgYmVjYXVzZSBhIHZhbGlkYXRpb24gbWVzc2FnZSBjYW4g
YmUgY2hhZ25lZC4KKyAgICAgICAgdXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Cisg
ICAgfQorfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEN1c3RvbVZhbGlkaXR5
KGNvbnN0IFN0cmluZyYgZXJyb3IpCit7CisgICAgdmFsaWRpdHkoKS0+c2V0Q3VzdG9tRXJyb3JN
ZXNzYWdlKGVycm9yKTsKK30KKyAgICAKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlz
cGF0Y2hGb2N1c0V2ZW50KCkKK3sKKyAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAg
ICBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+Zm9ybURpZEZvY3VzKHRo
aXMpOworCisgICAgSFRNTEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCgpOworfQorCit2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKK3sKKyAgICBpZiAo
ZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgp
LT5jbGllbnQoKS0+Zm9ybURpZEJsdXIodGhpcyk7CisKKyAgICBIVE1MRWxlbWVudDo6ZGlzcGF0
Y2hCbHVyRXZlbnQoKTsKKyAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Cit9CisK
K0hUTUxGb3JtRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlydHVhbEZvcm0oKSBj
b25zdAoreworICAgIHJldHVybiBtX2Zvcm07Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzU3Vj
Y2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpICYmIG1fZm9ybSAmJiBtX2Zvcm0tPmRlZmF1bHRCdXR0b24o
KSA9PSB0aGlzOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZUZyb21G
b3JtKCkKK3sKKyAgICBpZiAoIW1fZm9ybSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZm9ybS0+
cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAgbV9mb3JtID0gMDsKK30KKwordm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpyZXNldEZvcm1Pd25lcihIVE1MRm9ybUVsZW1lbnQqIGZvcm0p
Cit7CisgICAgaWYgKG1fZm9ybSkgeworICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9y
bUF0dHIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1F
bGVtZW50KHRoaXMpOworICAgIH0KKyAgICBtX2Zvcm0gPSAwOworICAgIGlmIChmYXN0SGFzQXR0
cmlidXRlKGZvcm1BdHRyKSkgeworICAgICAgICAvLyBUaGUgSFRNTDUgc3BlYyBzYXlzIHRoYXQg
dGhlIGVsZW1lbnQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAvLyB0aGUgZmly
c3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQgdG8gaGF2ZSBhbiBJRCB0aGF0IGVxdWFsIHRvCisg
ICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBmb3JtIGF0dHJpYnV0ZSwgc28gd2UgcHV0IHRoZSByZXN1
bHQgb2YKKyAgICAgICAgLy8gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoKSBvdmVyIHRoZSBn
aXZlbiBlbGVtZW50LgorICAgICAgICBFbGVtZW50KiBmaXJzdEVsZW1lbnQgPSBkb2N1bWVudCgp
LT5nZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7CisgICAgICAgIGlm
IChmaXJzdEVsZW1lbnQgJiYgZmlyc3RFbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpKQorICAg
ICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZmlyc3RFbGVt
ZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9mb3JtID0gZm9ybTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOworICAgIGlmIChtX2Zvcm0p
CisgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICBlbHNlCisg
ICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7
Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRy
aWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IGZvcm1BdHRyKSB7CisgICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikp
IHsKKyAgICAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1vdmVkLiBXZSBuZWVkIHRv
IHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KKyAgICAgICAgICAgIGlmIChtX2Zvcm0pCisgICAgICAg
ICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1f
Zm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0pCisgICAg
ICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMo
KS5hZGRCdXR0b24odGhpcyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzZXRGb3Jt
T3duZXIoMCk7CisgICAgfQorICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIs
IHByZXNlcnZlRGVjbHMpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzTGFi
ZWxhYmxlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQWRkIG1ldGVyVGFnIGFuZCBvdXRwdXRU
YWcgdG8gdGhlIGxpc3Qgb25jZSB3ZSBzdXBwb3J0IHRoZW0uCisgICAgcmV0dXJuIGhhc1RhZ05h
bWUoYnV0dG9uVGFnKSB8fCBoYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBoYXNUYWdOYW1lKGtleWdl
blRhZykKKyNpZiBFTkFCTEUoTUVURVJfVEFHKQorICAgICAgICB8fCBoYXNUYWdOYW1lKG1ldGVy
VGFnKQorI2VuZGlmCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKKyAgICAgICAgfHwgaGFzVGFn
TmFtZShwcm9ncmVzc1RhZykKKyNlbmRpZgorICAgICAgICB8fCBoYXNUYWdOYW1lKHNlbGVjdFRh
ZykgfHwgaGFzVGFnTmFtZSh0ZXh0YXJlYVRhZyk7Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZUxpc3Q+
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmxhYmVscygpCit7CisgICAgaWYgKCFpc0xhYmVsYWJs
ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWRvY3VtZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IE5vZGU6OmVuc3VyZVJhcmVE
YXRhKCk7CisgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkgeworICAgICAgICBkYXRhLT5zZXRO
b2RlTGlzdHMoTm9kZUxpc3RzTm9kZURhdGE6OmNyZWF0ZSgpKTsKKyAgICAgICAgZG9jdW1lbnQo
KS0+YWRkTm9kZUxpc3RDYWNoZSgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gTGFiZWxzTm9k
ZUxpc3Q6OmNyZWF0ZSh0aGlzKTsKK30KKyAgICAKK0hUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQorICAgIDogSFRN
TEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2MsIGYpCit7CisgICAgZG9jdW1lbnQoKS0+
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKK30KKworSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZTo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoKQorewor
ICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKK30K
Kwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp3aWxsTW92ZVRvTmV3T3du
ZXJEb2N1bWVudCgpCit7CisgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0
aFN0YXRlKHRoaXMpOworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdP
d25lckRvY3VtZW50KCk7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZTo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpCit7CisgICAgZG9jdW1lbnQoKS0+cmVnaXN0
ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZTo6YXV0b0NvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIWZvcm0o
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZvcm0oKS0+YXV0b0NvbXBsZXRl
KCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6c2hvdWxkU2F2
ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QKK3sKKyAgICAvLyBXZSBkb24ndCBz
YXZlL3Jlc3RvcmUgY29udHJvbCBzdGF0ZSBpbiBhIGZvcm0gd2l0aCBhdXRvY29tcGxldGU9b2Zm
LgorICAgIHJldHVybiBhdHRhY2hlZCgpICYmIGF1dG9Db21wbGV0ZSgpOworfQorCit2b2lkIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCit7
CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisK
KyAgICAvLyBXZSBkb24ndCBzYXZlIHN0YXRlIG9mIGEgY29udHJvbCB3aXRoIHNob3VsZFNhdmVB
bmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpPWZhbHNlLgorICAgIC8vIEJ1dCB3ZSBuZWVkIHRv
IHNraXAgcmVzdG9yaW5nIHByb2Nlc3MgdG9vIGJlY2F1c2UgYSBjb250cm9sIGluIGFub3RoZXIK
KyAgICAvLyBmb3JtIG1pZ2h0IGhhdmUgdGhlIHNhbWUgcGFpciBvZiBuYW1lIGFuZCB0eXBlIGFu
ZCBzYXZlZCBpdHMgc3RhdGUuCisgICAgaWYgKCFzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250
cm9sU3RhdGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3Vt
ZW50KCk7CisgICAgaWYgKGRvYy0+aGFzU3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoKSkgeworICAg
ICAgICBTdHJpbmcgc3RhdGU7CisgICAgICAgIGlmIChkb2MtPnRha2VTdGF0ZUZvckZvcm1FbGVt
ZW50KG5hbWUoKS5pbXBsKCksIHR5cGUoKS5pbXBsKCksIHN0YXRlKSkKKyAgICAgICAgICAgIHJl
c3RvcmVGb3JtQ29udHJvbFN0YXRlKHN0YXRlKTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
Cit7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxl
Q29udGVudENoYW5nZWRFdmVudCAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzVGV4dENv
bnRyb2woKSkgeworICAgICAgICB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zdWJ0
cmVlSGFzQ2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0p
CisgICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRhZ05hbWUsIGRvYywgZm9y
bSkKK3sKK30KKworSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRp
c3BhdGNoRm9jdXNFdmVudCgpCit7CisgICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIoKSkKKyAg
ICAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKKyAgICBoYW5kbGVGb2N1
c0V2ZW50KCk7CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hG
b2N1c0V2ZW50KCk7Cit9CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3Bh
dGNoQmx1ckV2ZW50KCkKK3sKKyAgICBpZiAoc3VwcG9ydHNQbGFjZWhvbGRlcigpKQorICAgICAg
ICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOworICAgIGhhbmRsZUJsdXJFdmVu
dCgpOworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNoQmx1ckV2
ZW50KCk7Cit9CisKK1N0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c3RyaXBwZWRQ
bGFjZWhvbGRlcigpIGNvbnN0Cit7CisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVE1MNSBzcGVj
aWZpY2F0aW9uLCB3ZSBuZWVkIHRvIHJlbW92ZSBDUiBhbmQgTEYgZnJvbQorICAgIC8vIHRoZSBh
dHRyaWJ1dGUgdmFsdWUuCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9
IGdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpOworICAgIGlmICghYXR0cmlidXRlVmFsdWUu
Y29udGFpbnMobmV3bGluZUNoYXJhY3RlcikgJiYgIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKGNh
cnJpYWdlUmV0dXJuKSkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlOworCisgICAgVmVj
dG9yPFVDaGFyPiBzdHJpcHBlZDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVWYWx1
ZS5sZW5ndGgoKTsKKyAgICBzdHJpcHBlZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgY2hh
cmFjdGVyID0gYXR0cmlidXRlVmFsdWVbaV07CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gbmV3
bGluZUNoYXJhY3RlciB8fCBjaGFyYWN0ZXIgPT0gY2FycmlhZ2VSZXR1cm4pCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgc3RyaXBwZWQuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgfQor
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHN0cmlwcGVkKTsKK30KKworc3RhdGljIGJvb2wgaXNO
b3RMaW5lQnJlYWsoVUNoYXIgY2gpIHsgcmV0dXJuIGNoICE9IG5ld2xpbmVDaGFyYWN0ZXIgJiYg
Y2ggIT0gY2FycmlhZ2VSZXR1cm47IH0KKworYm9vbCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6aXNQbGFjZWhvbGRlckVtcHR5KCkgY29uc3QKK3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0cik7CisgICAgcmV0
dXJuIGF0dHJpYnV0ZVZhbHVlLnN0cmluZygpLmZpbmQoaXNOb3RMaW5lQnJlYWspID09IG5vdEZv
dW5kOworfQorCitib29sIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpwbGFjZWhvbGRlclNo
b3VsZEJlVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1cHBvcnRzUGxhY2Vob2xkZXIo
KQorICAgICAgICAmJiBpc0VtcHR5VmFsdWUoKQorICAgICAgICAmJiBkb2N1bWVudCgpLT5mb2N1
c2VkTm9kZSgpICE9IHRoaXMKKyAgICAgICAgJiYgIWlzUGxhY2Vob2xkZXJFbXB0eSgpOworfQor
Cit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVQbGFjZWhvbGRlclZpc2li
aWxpdHkoYm9vbCBwbGFjZWhvbGRlclZhbHVlQ2hhbmdlZCkKK3sKKyAgICBpZiAoc3VwcG9ydHNQ
bGFjZWhvbGRlcigpICYmIHJlbmRlcmVyKCkpCisgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2wo
cmVuZGVyZXIoKSktPnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShwbGFjZWhvbGRlclNob3Vs
ZEJlVmlzaWJsZSgpLCBwbGFjZWhvbGRlclZhbHVlQ2hhbmdlZCk7Cit9CisKK1JlbmRlclRleHRD
b250cm9sKiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dGV4dFJlbmRlcmVyQWZ0ZXJVcGRh
dGVMYXlvdXQoKQoreworICAgIGlmICghaXNUZXh0Rm9ybUNvbnRyb2woKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CisgICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSk7Cit9CisK
K3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblN0YXJ0KGludCBz
dGFydCkKK3sKKyAgICBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgbWF4KHN0YXJ0LCBzZWxlY3Rp
b25FbmQoKSkpOworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxl
Y3Rpb25FbmQoaW50IGVuZCkKK3sKKyAgICBzZXRTZWxlY3Rpb25SYW5nZShtaW4oZW5kLCBzZWxl
Y3Rpb25TdGFydCgpKSwgZW5kKTsKK30KKwordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6c2VsZWN0KCkKK3sKKyAgICBzZXRTZWxlY3Rpb25SYW5nZSgwLCBudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSk7Cit9CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNl
bGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCkKK3sKKyAgICBXZWJDb3JlOjpzZXRTZWxl
Y3Rpb25SYW5nZSh0aGlzLCBzdGFydCwgZW5kKTsKK30KKworaW50IEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50OjpzZWxlY3Rpb25TdGFydCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1RleHRGb3Jt
Q29udHJvbCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNl
ZE5vZGUoKSAhPSB0aGlzICYmIGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPj0gMCkKKyAgICAgICAg
cmV0dXJuIGNhY2hlZFNlbGVjdGlvblN0YXJ0KCk7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigp
KS0+c2VsZWN0aW9uU3RhcnQoKTsKK30KKworaW50IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjpzZWxlY3Rpb25FbmQoKSBjb25zdAoreworICAgIGlmICghaXNUZXh0Rm9ybUNvbnRyb2woKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0g
dGhpcyAmJiBjYWNoZWRTZWxlY3Rpb25FbmQoKSA+PSAwKQorICAgICAgICByZXR1cm4gY2FjaGVk
U2VsZWN0aW9uRW5kKCk7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uRW5k
KCk7Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpz
ZWxlY3Rpb24oKSBjb25zdAoreworICAgIGlmICghcmVuZGVyZXIoKSB8fCAhaXNUZXh0Rm9ybUNv
bnRyb2woKSB8fCBjYWNoZWRTZWxlY3Rpb25TdGFydCgpIDwgMCB8fCBjYWNoZWRTZWxlY3Rpb25F
bmQoKSA8IDApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0b1JlbmRlclRleHRDb250
cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rpb24oY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSwgY2FjaGVk
U2VsZWN0aW9uRW5kKCkpOworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBwbGFjZWhvbGRlckF0dHIpCisgICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJp
bGl0eSh0cnVlKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxlY3RBdHRyKQor
ICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVu
dCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CisgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG9uY2hhbmdlQXR0cikKKyAgICAgICAgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIodGhpcywgYXR0cikpOworICAgIGVsc2UKKyAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYmNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw0MSArMjMsMjUgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1
ZGUgIkZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0j
aW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRl
ICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50UGFyc2VyLmgiCi0jaW5jbHVkZSAiRWxlbWVudFJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiRXZl
bnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkxhYmVsc05vZGVMaXN0Lmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJl
bmRlclRleHRDb250cm9sLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRlICJT
Y3JpcHRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKICNp
bmNsdWRlICJWYWxpZGF0aW9uTWVzc2FnZS5oIgogI2luY2x1ZGUgIlZhbGlkaXR5U3RhdGUuaCIK
LSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2Ug
c3RkOwogCi1IVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1F
bGVtZW50KiBmb3JtKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAg
LCBtX2Zvcm0oZm9ybSkKK0Zvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50KEhUTUxGb3JtRWxlbWVudCogZm9ybSkKKyAgICA6IG1fZm9ybShmb3JtKQogICAgICwgbV9k
aXNhYmxlZChmYWxzZSkKICAgICAsIG1fcmVhZE9ubHkoZmFsc2UpCiAgICAgLCBtX3JlcXVpcmVk
KGZhbHNlKQpAQCAtNjYsMzAgKzUwLDE4IEBAIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxG
b3JtQ29udHJvbEUKICAgICAsIG1fd2lsbFZhbGlkYXRlKHRydWUpCiAgICAgLCBtX2lzVmFsaWQo
dHJ1ZSkKIHsKLSAgICBpZiAoIW1fZm9ybSkKLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNl
c3RvcigpOwotICAgIGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxl
bWVudCh0aGlzKTsKIH0KIAotSFRNTEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQoKQorRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50
KCkKIHsKLSAgICBpZiAobV9mb3JtKQotICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50
KHRoaXMpOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRldGFjaCgpCitib29s
IEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybU5vVmFsaWRhdGUoKSBjb25zdAogewotICAgIGhp
ZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICBIVE1MRWxlbWVudDo6ZGV0YWNoKCk7
CisgICAgcmV0dXJuICF0b0hUTUxFbGVtZW50KHRoaXMpLT5nZXRBdHRyaWJ1dGUoZm9ybW5vdmFs
aWRhdGVBdHRyKS5pc051bGwoKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpm
b3JtTm9WYWxpZGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZm9ybW5v
dmFsaWRhdGVBdHRyKS5pc051bGwoKTsKLX0KLQotVmFsaWRpdHlTdGF0ZSogSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6dmFsaWRpdHkoKQorVmFsaWRpdHlTdGF0ZSogRm9ybUFzc29jaWF0ZWRFbGVt
ZW50Ojp2YWxpZGl0eSgpCiB7CiAgICAgaWYgKCFtX3ZhbGlkaXR5U3RhdGUpCiAgICAgICAgIG1f
dmFsaWRpdHlTdGF0ZSA9IFZhbGlkaXR5U3RhdGU6OmNyZWF0ZSh0aGlzKTsKQEAgLTk3LDg2ICs2
OSwzNyBAQCBWYWxpZGl0eVN0YXRlKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2CiAgICAgcmV0
dXJuIG1fdmFsaWRpdHlTdGF0ZS5nZXQoKTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCi17Ci0gICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIpIHsKLSAgICAgICAgYm9vbCBvbGREaXNhYmxlZCA9
IG1fZGlzYWJsZWQ7Ci0gICAgICAgIG1fZGlzYWJsZWQgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAg
ICAgIGlmIChvbGREaXNhYmxlZCAhPSBtX2Rpc2FibGVkKSB7Ci0gICAgICAgICAgICBzZXROZWVk
c1N0eWxlUmVjYWxjKCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigp
LT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+
dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIEVuYWJsZWRTdGF0ZSk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSByZWFkb25seUF0dHIpIHsKLSAgICAg
ICAgYm9vbCBvbGRSZWFkT25seSA9IG1fcmVhZE9ubHk7Ci0gICAgICAgIG1fcmVhZE9ubHkgPSAh
YXR0ci0+aXNOdWxsKCk7Ci0gICAgICAgIGlmIChvbGRSZWFkT25seSAhPSBtX3JlYWRPbmx5KSB7
Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgICAgICAgICBpZiAocmVu
ZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIFJl
YWRPbmx5U3RhdGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
cmVxdWlyZWRBdHRyKSB7Ci0gICAgICAgIGJvb2wgb2xkUmVxdWlyZWQgPSBtX3JlcXVpcmVkOwot
ICAgICAgICBtX3JlcXVpcmVkID0gIWF0dHItPmlzTnVsbCgpOwotICAgICAgICBpZiAob2xkUmVx
dWlyZWQgIT0gbV9yZXF1aXJlZCkgewotICAgICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNr
KCk7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7IC8vIFVwZGF0ZXMgZm9yIDpy
ZXF1aXJlZCA6b3B0aW9uYWwgY2xhc3Nlcy4KLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAg
ICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci0gICAgc2V0TmVlZHNX
aWxsVmFsaWRhdGVDaGVjaygpOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0
dGFjaCgpCitzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBmaW5kRm9ybU93bmVyKEhUTUxFbGVtZW50
KiBlbGVtZW50KQogewotICAgIEFTU0VSVCghYXR0YWNoZWQoKSk7Ci0KLSAgICBIVE1MRWxlbWVu
dDo6YXR0YWNoKCk7Ci0KLSAgICAvLyBUaGUgY2FsbCB0byB1cGRhdGVGcm9tRWxlbWVudCgpIG5l
ZWRzIHRvIGdvIGFmdGVyIHRoZSBjYWxsIHRocm91Z2gKLSAgICAvLyB0byB0aGUgYmFzZSBjbGFz
cydzIGF0dGFjaCgpIGJlY2F1c2UgdGhhdCBjYW4gc29tZXRpbWVzIGRvIGEgY2xvc2UKLSAgICAv
LyBvbiB0aGUgcmVuZGVyZXIuCi0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVy
KCktPnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgICAgIAotICAgIC8vIEZvY3VzIHRoZSBlbGVt
ZW50IGlmIGl0IHNob3VsZCBob25vdXIgaXRzIGF1dG9mb2N1cyBhdHRyaWJ1dGUuCi0gICAgLy8g
V2UgaGF2ZSB0byBkZXRlcm1pbmUgaWYgdGhlIGVsZW1lbnQgaXMgYSBUZXh0QXJlYS9JbnB1dC9C
dXR0b24vU2VsZWN0LAotICAgIC8vIGlmIGlucHV0IHR5cGUgaGlkZGVuIGlnbm9yZSBhdXRvZm9j
dXMuIFNvIGlmIGRpc2FibGVkIG9yIHJlYWRvbmx5LgotICAgIGJvb2wgaXNJbnB1dFR5cGVIaWRk
ZW4gPSBmYWxzZTsKLSAgICBpZiAoaGFzVGFnTmFtZShpbnB1dFRhZykpCi0gICAgICAgIGlzSW5w
dXRUeXBlSGlkZGVuID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHRoaXMpLT5pc0lu
cHV0VHlwZUhpZGRlbigpOwotCi0gICAgaWYgKGF1dG9mb2N1cygpICYmIHJlbmRlcmVyKCkgJiYg
IWRvY3VtZW50KCktPmlnbm9yZUF1dG9mb2N1cygpICYmICFpc1JlYWRPbmx5Rm9ybUNvbnRyb2wo
KSAmJgotICAgICAgICAgICAgKChoYXNUYWdOYW1lKGlucHV0VGFnKSAmJiAhaXNJbnB1dFR5cGVI
aWRkZW4pIHx8IGhhc1RhZ05hbWUoc2VsZWN0VGFnKSB8fAotICAgICAgICAgICAgICBoYXNUYWdO
YW1lKGJ1dHRvblRhZykgfHwgaGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpKQotICAgICAgICAgZm9j
dXMoKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7IG5vZGU7
IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05h
bWUoZm9ybVRhZykpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50Kj4obm9kZSk7CisgICAgfQorICAgIHJldHVybiAwOwogfQogCi12b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQordm9pZCBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKQogewotICAgIGlmIChmYXN0SGFzQXR0cmli
dXRlKGZvcm1BdHRyKSkgewotICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50
V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1
bWVudCgpLT5nZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7Ci0gICAg
ICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpIHsKKyAgICBI
VE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQodGhpcyk7CisgICAgaWYgKGVsZW1l
bnQtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgICAgIGVsZW1lbnQtPmRvY3Vt
ZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKKyAgICAg
ICAgRWxlbWVudCogZm9ybUVsZW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5nZXRFbGVtZW50
QnlJZChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7CisgICAgICAgIGlmIChm
b3JtRWxlbWVudCAmJiBmb3JtRWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewogICAgICAg
ICAgICAgaWYgKG1fZm9ybSkKICAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVt
ZW50KHRoaXMpOwotICAgICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9y
bUVsZW1lbnQqPihmb3JtRWxlbWVudCk7CiAgICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9y
bUVsZW1lbnQodGhpcyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFtX2Zvcm0pIHsKICAg
ICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIGEgbmV3IGZvcm0gZWxlbWVudCBiZWlu
ZyBjcmVhdGVkIGJ5CiAgICAgICAgIC8vIEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBh
IGZvcm0uICBJbiB0aGUgY2FzZSBvZiB0aGUgcGFyc2VyCi0gICAgICAgIC8vIHNldHRpbmcgYSBm
b3JtLCB3ZSB3aWxsIGFscmVhZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sIAor
ICAgICAgICAvLyBzZXR0aW5nIGEgZm9ybSwgd2Ugd2lsbCBhbHJlYWR5IGhhdmUgYSBub24tbnVs
bCB2YWx1ZSBmb3IgbV9mb3JtLAogICAgICAgICAvLyBhbmQgc28gd2UgZG9uJ3QgbmVlZCB0byBk
byBhbnl0aGluZy4KLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOworICAgICAg
ICBtX2Zvcm0gPSBmaW5kRm9ybU93bmVyKGVsZW1lbnQpOwogICAgICAgICBpZiAobV9mb3JtKQog
ICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0
dG9uKHRoaXMpOwogICAgIH0KLQotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRl
ZXApOwogfQogCiBzdGF0aWMgaW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4pCkBAIC0xODcs
MTE3ICsxMTAsMjYgQEAgc3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9vdChOb2RlKiBuKQogICAg
IHJldHVybiByb290OwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRG
cm9tVHJlZShib29sIGRlZXApCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZy
b21UcmVlKCkKIHsKLSAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCi0gICAgICAg
IGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMp
OworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKKyAgICBp
ZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCisgICAgICAgIGVsZW1lbnQt
PmRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMp
OwogCiAgICAgLy8gSWYgdGhlIGZvcm0gYW5kIGVsZW1lbnQgYXJlIGJvdGggaW4gdGhlIHNhbWUg
dHJlZSwgcHJlc2VydmUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGZvcm0uCiAgICAgLy8gT3RoZXJ3
aXNlLCBudWxsIG91dCBvdXIgZm9ybSBhbmQgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBmb3Jt
J3MgbGlzdCBvZiBlbGVtZW50cy4KLSAgICBpZiAobV9mb3JtICYmIGZpbmRSb290KHRoaXMpICE9
IGZpbmRSb290KG1fZm9ybSkpIHsKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0
aGlzKTsKLSAgICAgICAgbV9mb3JtID0gMDsKLSAgICB9Ci0KLSAgICBIVE1MRWxlbWVudDo6cmVt
b3ZlZEZyb21UcmVlKGRlZXApOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmZvcm1Db250cm9sTmFtZSgpIGNvbnN0Ci17Ci0gICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lID0gZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci0gICAgcmV0dXJuIG5h
bWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiBuYW1lOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKQotewotICAgIGRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIHRydWUsIGZhbHNlKSk7
Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0RGlzYWJsZWQoYm9vbCBiKQot
ewotICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGIgPyAiIiA6IDApOwotfQotCi1ib29s
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF1dG9mb2N1cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGhhc0F0dHJpYnV0ZShhdXRvZm9jdXNBdHRyKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpyZXF1aXJlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVxdWlyZWQ7Ci19Ci0K
LXN0YXRpYyB2b2lkIHVwZGF0ZUZyb21FbGVtZW50Q2FsbGJhY2soTm9kZSogbm9kZSkKLXsKLSAg
ICBBU1NFUlRfQVJHKG5vZGUsIG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgQVNTRVJUX0FS
Ryhub2RlLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkpOwotICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcigpKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT51cGRhdGVG
cm9tRWxlbWVudCgpOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlY2FsY1N0
eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKLXsKLSAgICBIVE1MRWxlbWVudDo6cmVjYWxjU3R5bGUo
Y2hhbmdlKTsKLQotICAgIC8vIHVwZGF0ZUZyb21FbGVtZW50KCkgY2FuIGNhdXNlIHRoZSBzZWxl
Y3Rpb24gdG8gY2hhbmdlLCBhbmQgaW4gdHVybgotICAgIC8vIHRyaWdnZXIgc3luY2hyb25vdXMg
bGF5b3V0LCBzbyBpdCBtdXN0IG5vdCBiZSBjYWxsZWQgZHVyaW5nIHN0eWxlIHJlY2FsYy4KLSAg
ICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcXVldWVQb3N0QXR0YWNoQ2FsbGJhY2sodXBkYXRl
RnJvbUVsZW1lbnRDYWxsYmFjaywgdGhpcyk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFkaXNhYmxlZCgpOwot
fQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKLXsK
LSAgICBpZiAoIXJlbmRlcmVyKCkgfHwgCi0gICAgICAgICFyZW5kZXJlcigpLT5pc0JveCgpIHx8
IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5zaXplKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgLy8gSFRNTEVsZW1lbnQ6OmlzRm9jdXNhYmxlIGhhbmRsZXMgdmlzaWJp
bGl0eSBhbmQgY2FsbHMgc3Vwb3J0c0ZvY3VzIHdoaWNoCi0gICAgLy8gd2lsbCBjb3ZlciB0aGUg
ZGlzYWJsZWQgY2FzZS4KLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCk7Ci19
Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXli
b2FyZEV2ZW50KiBldmVudCkgY29uc3QKLXsKLSAgICBpZiAoaXNGb2N1c2FibGUoKSkKLSAgICAg
ICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnRhYnNUb0FsbENvbnRyb2xzKGV2ZW50KTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNNb3Vz
ZUZvY3VzYWJsZSgpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkK
LSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKTsKLSNlbHNlCi0gICAg
cmV0dXJuIGZhbHNlOwotI2VuZGlmCisgICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9vdChlbGVtZW50
KSAhPSBmaW5kUm9vdChtX2Zvcm0pKQorICAgICAgICByZW1vdmVGcm9tRm9ybSgpOwogfQogCi1z
aG9ydCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0Ci17Ci0gICAgLy8g
U2tpcCB0aGUgc3VwcG9ydHNGb2N1cyBjaGVjayBpbiBIVE1MRWxlbWVudC4KLSAgICByZXR1cm4g
RWxlbWVudDo6dGFiSW5kZXgoKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpy
ZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdAorYm9vbCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJl
Y2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCByZXR1cm4g
ZmFsc2UgaWYgdGhpcyBlbGVtZW50IGhhcyBhIGRhdGFsaXN0IGVsZW1lbnQgYXMgYW4KICAgICAv
LyBhbmNlc3Rvci4gU2VlIEhUTUw1IDQuMTAuMTAgJ1RoZSBkYXRhbGlzdCBlbGVtZW50LicKICAg
ICByZXR1cm4gIW1fZGlzYWJsZWQgJiYgIW1fcmVhZE9ubHk7CiB9CiAKLWJvb2wgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6d2lsbFZhbGlkYXRlKCkgY29uc3QKK2Jvb2wgRm9ybUFzc29jaWF0ZWRF
bGVtZW50Ojp3aWxsVmFsaWRhdGUoKSBjb25zdAogewogICAgIGlmICghbV93aWxsVmFsaWRhdGVJ
bml0aWFsaXplZCkgewogICAgICAgICBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsK
QEAgLTMxMSw3ICsxNDMsNyBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxWYWxp
ZGF0CiAgICAgcmV0dXJuIG1fd2lsbFZhbGlkYXRlOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKQordm9pZCBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKQogewogICAgIC8vIFdlIG5lZWQg
dG8gcmVjYWxjdWxhdGUgd2lsbFZhbGlkdGUgaW1tZWRpYXRlbHkgYmVjYXVzZSB3aWxsVmFsaWRh
dGUKICAgICAvLyBjaGFuZ2UgY2FuIGNhdXNlcyBzdHlsZSBjaGFuZ2UuCkBAIC0zMjAsMjggKzE1
MiwyOSBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsCiAgICAgICAg
IHJldHVybjsKICAgICBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsKICAgICBtX3dp
bGxWYWxpZGF0ZSA9IG5ld1dpbGxWYWxpZGF0ZTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7
CisgICAgdG9IVE1MRWxlbWVudCh0aGlzKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIGlm
ICghbV93aWxsVmFsaWRhdGUpCiAgICAgICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2Uo
KTsKIH0KIAotU3RyaW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdl
KCkKK1N0cmluZyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkKIHsK
ICAgICByZXR1cm4gdmFsaWRpdHkoKS0+dmFsaWRhdGlvbk1lc3NhZ2UoKTsKIH0KIAotdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQor
dm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2Fn
ZSgpCiB7Ci0gICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKKyAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQodGhpcyk7CisgICAgUGFnZSogcGFnZSA9IGVs
ZW1lbnQtPmRvY3VtZW50KCktPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVy
bjsKICAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiB3aWxsVmFsaWRh
dGUoKSkgeworICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigpICYmIHdpbGxWYWxpZGF0ZSgpKSB7
CiAgICAgICAgIG1lc3NhZ2UgPSB2YWxpZGF0aW9uTWVzc2FnZSgpLnN0cmlwV2hpdGVTcGFjZSgp
OwogICAgICAgICAvLyBIVE1MNSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgYXNrIFVBIHRvIHNob3cg
dGhlIHRpdGxlIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAgICAvLyB3aXRoIHRoZSB2YWxpZGF0aW9u
TWVzc2FnZS4gIEhvd2V2ZXIsIHRoaXMgYmVoYXZpb3IgaXMgc2FtZSBhcyBPcGVyYQogICAgICAg
ICAvLyBhbmQgdGhlIHNwZWNpZmljYXRpb24gZGVzY3JpYmVzIHN1Y2ggYmVoYXZpb3IgYXMgYW4g
ZXhhbXBsZS4KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGdldEF0dHJpYnV0
ZSh0aXRsZUF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZWxlbWVu
dC0+Z2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiAgICAgICAgIGlmICghbWVzc2FnZS5pc0VtcHR5
KCkgJiYgIXRpdGxlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ1xu
Jyk7CiAgICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCh0aXRsZSk7CkBAIC0zNTYsMzAgKzE4OSwz
MSBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVZpc2liCiAgICAgICAgIG1f
dmFsaWRhdGlvbk1lc3NhZ2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKLXZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCit2b2lkIEZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCiB7CiAg
ICAgbV92YWxpZGF0aW9uTWVzc2FnZSA9IDA7CiB9CiAKLVN0cmluZyBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Ojp2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdAorU3RyaW5nIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudDo6dmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV92YWxpZGF0aW9uTWVzc2FnZSA/IG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2Uo
KSA6IFN0cmluZygpOwogfQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFs
aWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHMpCitib29sIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Y2hlY2tWYWxpZGl0
eShWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxp
ZENvbnRyb2xzKQogewogICAgIGlmICghd2lsbFZhbGlkYXRlKCkgfHwgaXNWYWxpZEZvcm1Db250
cm9sRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAvLyBBbiBldmVudCBoYW5k
bGVyIGNhbiBkZXJlZiB0aGlzIG9iamVjdC4KLSAgICBSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxl
bWVudD4gcHJvdGVjdG9yKHRoaXMpOwotICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2luYWxEb2N1
bWVudChkb2N1bWVudCgpKTsKLSAgICBib29sIG5lZWRzRGVmYXVsdEFjdGlvbiA9IGRpc3BhdGNo
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxzZSwgdHJ1
ZSkpOwotICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52YWxpZENvbnRy
b2xzICYmIGluRG9jdW1lbnQoKSAmJiBvcmlnaW5hbERvY3VtZW50ID09IGRvY3VtZW50KCkpCisg
ICAgUmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOworICAgIEhU
TUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKKyAgICBSZWZQdHI8RG9j
dW1lbnQ+IG9yaWdpbmFsRG9jdW1lbnQoZWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgYm9vbCBu
ZWVkc0RlZmF1bHRBY3Rpb24gPSBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmludmFsaWRFdmVudCwgZmFsc2UsIHRydWUpKTsKKyAgICBpZiAobmVlZHNE
ZWZhdWx0QWN0aW9uICYmIHVuaGFuZGxlZEludmFsaWRDb250cm9scyAmJiBlbGVtZW50LT5pbkRv
Y3VtZW50KCkgJiYgb3JpZ2luYWxEb2N1bWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpKQogICAg
ICAgICB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMtPmFwcGVuZCh0aGlzKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250
cm9sRWxlbWVudCgpCitib29sIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aXNWYWxpZEZvcm1Db250
cm9sRWxlbWVudCgpCiB7CiAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmFpbHMs
IHNldE5lZWRzVmFsaWRpdHlDaGVjaygpIGlzIG5vdCBjYWxsZWQKICAgICAvLyBjb3JyZWN0bHkg
d2hlbiBzb21ldGhpbmcgd2hpY2ggY2hhbmdlcyB2YWxpZGl0eSBpcyB1cGRhdGVkLgpAQCAtMzg3
LDEyICsyMjEsMTIgQEAgYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlkRm9ybQog
ICAgIHJldHVybiBtX2lzVmFsaWQ7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCkKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXRO
ZWVkc1ZhbGlkaXR5Q2hlY2soKQogewogICAgIGJvb2wgbmV3SXNWYWxpZCA9IHZhbGlkaXR5KCkt
PnZhbGlkKCk7CiAgICAgaWYgKHdpbGxWYWxpZGF0ZSgpICYmIG5ld0lzVmFsaWQgIT0gbV9pc1Zh
bGlkKSB7CiAgICAgICAgIC8vIFVwZGF0ZSBzdHlsZSBmb3IgcHNldWRvIGNsYXNzZXMgc3VjaCBh
cyA6dmFsaWQgOmludmFsaWQuCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAg
ICAgdG9IVE1MRWxlbWVudCh0aGlzKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0KICAg
ICBtX2lzVmFsaWQgPSBuZXdJc1ZhbGlkOwogCkBAIC00MDQsMzkgKzIzOCwxMiBAQCB2b2lkIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzVmFsCiAgICAgfQogfQogCi12b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmluZyYgZXJyb3Ip
Cit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3Ry
aW5nJiBlcnJvcikKIHsKICAgICB2YWxpZGl0eSgpLT5zZXRDdXN0b21FcnJvck1lc3NhZ2UoZXJy
b3IpOwogfQotICAgIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvY3Vz
RXZlbnQoKQotewotICAgIGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCi0gICAgICAgIGRvY3VtZW50
KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtRGlkRm9jdXModGhpcyk7Ci0KLSAg
ICBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Ci19CiAKLXZvaWQgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKQotewotICAgIGlmIChkb2N1bWVudCgp
LT5wYWdlKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgp
LT5mb3JtRGlkQmx1cih0aGlzKTsKLQotICAgIEhUTUxFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVu
dCgpOwotICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLX0KLQotSFRNTEZvcm1F
bGVtZW50KiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2aXJ0dWFsRm9ybSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fZm9ybTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0Rl
ZmF1bHRCdXR0b25Gb3JGb3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNTdWNjZXNzZnVsU3Vi
bWl0QnV0dG9uKCkgJiYgbV9mb3JtICYmIG1fZm9ybS0+ZGVmYXVsdEJ1dHRvbigpID09IHRoaXM7
Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0oKQordm9p
ZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZUZyb21Gb3JtKCkKIHsKICAgICBpZiAoIW1f
Zm9ybSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ0LDI3NyArMjUxLDU5IEBAIHZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVtb3ZlRnJvbUYKICAgICBtX2Zvcm0gPSAwOwogfQogCi12b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlc2V0Rm9ybU93bmVyKEhUTUxGb3JtRWxlbWVudCog
Zm9ybSkKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1Pd25lcihIVE1MRm9y
bUVsZW1lbnQqIGZvcm0pCiB7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVt
ZW50KHRoaXMpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUlkKGVsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKICAgICBpZiAobV9mb3JtKSB7Ci0gICAgICAgIGlmICgh
ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCisgICAgICAgIGlmIChmb3JtSWQuaXNOdWxsKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQo
dGhpcyk7CiAgICAgfQogICAgIG1fZm9ybSA9IDA7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUo
Zm9ybUF0dHIpKSB7CisgICAgaWYgKCFmb3JtSWQuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gVGhl
IEhUTUw1IHNwZWMgc2F5cyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdp
dGgKICAgICAgICAgLy8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IHRvIGhhdmUg
YW4gSUQgdGhhdCBlcXVhbCB0bwogICAgICAgICAvLyB0aGUgdmFsdWUgb2YgZm9ybSBhdHRyaWJ1
dGUsIHNvIHdlIHB1dCB0aGUgcmVzdWx0IG9mCiAgICAgICAgIC8vIGRvY3VtZW50KCktPmdldEVs
ZW1lbnRCeUlkKCkgb3ZlciB0aGUgZ2l2ZW4gZWxlbWVudC4KLSAgICAgICAgRWxlbWVudCogZmly
c3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZmFzdEdldEF0dHJpYnV0ZShm
b3JtQXR0cikpOworICAgICAgICBFbGVtZW50KiBmaXJzdEVsZW1lbnQgPSBlbGVtZW50LT5kb2N1
bWVudCgpLT5nZXRFbGVtZW50QnlJZChmb3JtSWQpOwogICAgICAgICBpZiAoZmlyc3RFbGVtZW50
ICYmIGZpcnN0RWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKICAgICAgICAgICAgIG1fZm9y
bSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVudCk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIG1fZm9ybSA9IGZvcm07CiAgICAgfSBlbHNlCi0gICAgICAgIG1f
Zm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICAgICAgbV9mb3JtID0gZmluZEZvcm1Pd25l
cihlbGVtZW50KTsKICAgICBpZiAobV9mb3JtKQogICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9y
bUVsZW1lbnQodGhpcyk7Ci0gICAgZWxzZQotICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFk
aW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVj
bHMpCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQoKQog
ewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybUF0dHIpIHsKLSAgICAgICAgaWYgKCFmYXN0
SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgewotICAgICAgICAgICAgLy8gVGhlIGZvcm0gYXR0cmli
dXRlIHJlbW92ZWQuIFdlIG5lZWQgdG8gcmVzZXQgZm9ybSBvd25lciBoZXJlLgotICAgICAgICAg
ICAgaWYgKG1fZm9ybSkKLSAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50
KHRoaXMpOwotICAgICAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwotICAgICAg
ICAgICAgaWYgKG1fZm9ybSkKLSAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVs
ZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQo
KS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICByZXNldEZvcm1Pd25lcigwKTsKLSAgICB9Ci0gICAgSFRNTEVsZW1lbnQ6
OmF0dHJpYnV0ZUNoYW5nZWQoYXR0ciwgcHJlc2VydmVEZWNscyk7Ci19Ci0KLWJvb2wgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aXNMYWJlbGFibGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBB
ZGQgbWV0ZXJUYWcgYW5kIG91dHB1dFRhZyB0byB0aGUgbGlzdCBvbmNlIHdlIHN1cHBvcnQgdGhl
bS4KLSAgICByZXR1cm4gaGFzVGFnTmFtZShidXR0b25UYWcpIHx8IGhhc1RhZ05hbWUoaW5wdXRU
YWcpIHx8IGhhc1RhZ05hbWUoa2V5Z2VuVGFnKQotI2lmIEVOQUJMRShNRVRFUl9UQUcpCi0gICAg
ICAgIHx8IGhhc1RhZ05hbWUobWV0ZXJUYWcpCi0jZW5kaWYKLSNpZiBFTkFCTEUoUFJPR1JFU1Nf
VEFHKQotICAgICAgICB8fCBoYXNUYWdOYW1lKHByb2dyZXNzVGFnKQotI2VuZGlmCi0gICAgICAg
IHx8IGhhc1RhZ05hbWUoc2VsZWN0VGFnKSB8fCBoYXNUYWdOYW1lKHRleHRhcmVhVGFnKTsKLX0K
LQotUGFzc1JlZlB0cjxOb2RlTGlzdD4gSFRNTEZvcm1Db250cm9sRWxlbWVudDo6bGFiZWxzKCkK
LXsKLSAgICBpZiAoIWlzTGFiZWxhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICgh
ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgTm9kZVJhcmVEYXRhKiBk
YXRhID0gTm9kZTo6ZW5zdXJlUmFyZURhdGEoKTsKLSAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygp
KSB7Ci0gICAgICAgIGRhdGEtPnNldE5vZGVMaXN0cyhOb2RlTGlzdHNOb2RlRGF0YTo6Y3JlYXRl
KCkpOwotICAgICAgICBkb2N1bWVudCgpLT5hZGROb2RlTGlzdENhY2hlKCk7Ci0gICAgfQotICAg
IAotICAgIHJldHVybiBMYWJlbHNOb2RlTGlzdDo6Y3JlYXRlKHRoaXMpOwotfQotICAgIAotSFRN
TEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9y
bUVsZW1lbnQqIGYpCi0gICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvYywg
ZikKLXsKLSAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKHRoaXMp
OwotfQotCi1IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp+SFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZSgpCi17Ci0gICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVt
ZW50V2l0aFN0YXRlKHRoaXMpOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKLXsKLSAgICBkb2N1bWVudCgpLT51
bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Ci0gICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKLX0KLQotdm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKLXsK
LSAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKHRoaXMpOwotICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKLX0K
LQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjphdXRvQ29tcGxldGUoKSBj
b25zdAotewotICAgIGlmICghZm9ybSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1
cm4gZm9ybSgpLT5hdXRvQ29tcGxldGUoKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjpzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9sU3RhdGUoKSBjb25z
dAotewotICAgIC8vIFdlIGRvbid0IHNhdmUvcmVzdG9yZSBjb250cm9sIHN0YXRlIGluIGEgZm9y
bSB3aXRoIGF1dG9jb21wbGV0ZT1vZmYuCi0gICAgcmV0dXJuIGF0dGFjaGVkKCkgJiYgYXV0b0Nv
bXBsZXRlKCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6Zmlu
aXNoUGFyc2luZ0NoaWxkcmVuKCkKLXsKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpmaW5p
c2hQYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAgIC8vIFdlIGRvbid0IHNhdmUgc3RhdGUgb2YgYSBj
b250cm9sIHdpdGggc2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCk9ZmFsc2Uu
Ci0gICAgLy8gQnV0IHdlIG5lZWQgdG8gc2tpcCByZXN0b3JpbmcgcHJvY2VzcyB0b28gYmVjYXVz
ZSBhIGNvbnRyb2wgaW4gYW5vdGhlcgotICAgIC8vIGZvcm0gbWlnaHQgaGF2ZSB0aGUgc2FtZSBw
YWlyIG9mIG5hbWUgYW5kIHR5cGUgYW5kIHNhdmVkIGl0cyBzdGF0ZS4KLSAgICBpZiAoIXNob3Vs
ZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jLT5oYXNTdGF0ZUZvck5l
d0Zvcm1FbGVtZW50cygpKSB7Ci0gICAgICAgIFN0cmluZyBzdGF0ZTsKLSAgICAgICAgaWYgKGRv
Yy0+dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQobmFtZSgpLmltcGwoKSwgdHlwZSgpLmltcGwoKSwg
c3RhdGUpKQotICAgICAgICAgICAgcmVzdG9yZUZvcm1Db250cm9sU3RhdGUoc3RhdGUpOwotICAg
IH0KLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50ICYmIHJlbmRlcmVyKCkg
JiYgcmVuZGVyZXIoKS0+aXNUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgIHRvUmVuZGVyVGV4dENv
bnRyb2wocmVuZGVyZXIoKSktPnN1YnRyZWVIYXNDaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKLX0KLQotSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2Ms
IEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLSAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGUodGFnTmFtZSwgZG9jLCBmb3JtKQotewotfQotCi1IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6fkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkKLXsKLX0KLQotdm9pZCBIVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCkKLXsKLSAgICBpZiAoc3Vw
cG9ydHNQbGFjZWhvbGRlcigpKQotICAgICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHko
ZmFsc2UpOwotICAgIGhhbmRsZUZvY3VzRXZlbnQoKTsKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjpkaXNwYXRjaEZvY3VzRXZlbnQoKTsKLX0KLQotdm9pZCBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKQotewotICAgIGlmIChzdXBwb3J0
c1BsYWNlaG9sZGVyKCkpCi0gICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxz
ZSk7Ci0gICAgaGFuZGxlQmx1ckV2ZW50KCk7Ci0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZTo6ZGlzcGF0Y2hCbHVyRXZlbnQoKTsKLX0KLQotU3RyaW5nIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjpzdHJpcHBlZFBsYWNlaG9sZGVyKCkgY29uc3QKLXsKLSAgICAvLyBBY2Nv
cmRpbmcgdG8gdGhlIEhUTUw1IHNwZWNpZmljYXRpb24sIHdlIG5lZWQgdG8gcmVtb3ZlIENSIGFu
ZCBMRiBmcm9tCi0gICAgLy8gdGhlIGF0dHJpYnV0ZSB2YWx1ZS4KLSAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0cik7Ci0g
ICAgaWYgKCFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhuZXdsaW5lQ2hhcmFjdGVyKSAmJiAhYXR0
cmlidXRlVmFsdWUuY29udGFpbnMoY2FycmlhZ2VSZXR1cm4pKQotICAgICAgICByZXR1cm4gYXR0
cmlidXRlVmFsdWU7Ci0KLSAgICBWZWN0b3I8VUNoYXI+IHN0cmlwcGVkOwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCgpOwotICAgIHN0cmlwcGVkLnJlc2VydmVD
YXBhY2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBhdHRyaWJ1dGVWYWx1ZVtpXTsKLSAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PSBuZXdsaW5lQ2hhcmFjdGVyIHx8IGNoYXJhY3RlciA9PSBjYXJy
aWFnZVJldHVybikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdHJpcHBlZC5hcHBl
bmQoY2hhcmFjdGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoc3RyaXBwZWQp
OwotfQotCi1zdGF0aWMgYm9vbCBpc05vdExpbmVCcmVhayhVQ2hhciBjaCkgeyByZXR1cm4gY2gg
IT0gbmV3bGluZUNoYXJhY3RlciAmJiBjaCAhPSBjYXJyaWFnZVJldHVybjsgfQotCi1ib29sIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppc1BsYWNlaG9sZGVyRW1wdHkoKSBjb25zdAotewot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGUocGxh
Y2Vob2xkZXJBdHRyKTsKLSAgICByZXR1cm4gYXR0cmlidXRlVmFsdWUuc3RyaW5nKCkuZmluZChp
c05vdExpbmVCcmVhaykgPT0gbm90Rm91bmQ7Ci19Ci0KLWJvb2wgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc3VwcG9ydHNQbGFjZWhvbGRlcigpCi0gICAgICAgICYmIGlzRW1wdHlWYWx1ZSgpCi0gICAg
ICAgICYmIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcwotICAgICAgICAmJiAhaXNQ
bGFjZWhvbGRlckVtcHR5KCk7Ci19Ci0KLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShib29sIHBsYWNlaG9sZGVyVmFsdWVDaGFuZ2Vk
KQotewotICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVyKCkgJiYgcmVuZGVyZXIoKSkKLSAgICAg
ICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+dXBkYXRlUGxhY2Vob2xkZXJWaXNp
YmlsaXR5KHBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxlKCksIHBsYWNlaG9sZGVyVmFsdWVDaGFu
Z2VkKTsKLX0KLQotUmVuZGVyVGV4dENvbnRyb2wqIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
Ojp0ZXh0UmVuZGVyZXJBZnRlclVwZGF0ZUxheW91dCgpCi17Ci0gICAgaWYgKCFpc1RleHRGb3Jt
Q29udHJvbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29u
dHJvbChyZW5kZXJlcigpKTsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c2V0U2VsZWN0aW9uU3RhcnQoaW50IHN0YXJ0KQotewotICAgIHNldFNlbGVjdGlvblJhbmdlKHN0
YXJ0LCBtYXgoc3RhcnQsIHNlbGVjdGlvbkVuZCgpKSk7Ci19Ci0KLXZvaWQgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZChpbnQgZW5kKQotewotICAgIHNldFNlbGVj
dGlvblJhbmdlKG1pbihlbmQsIHNlbGVjdGlvblN0YXJ0KCkpLCBlbmQpOwotfQotCi12b2lkIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3QoKQotewotICAgIHNldFNlbGVjdGlvblJh
bmdlKDAsIG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLX0KLQotdm9pZCBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQot
ewotICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdlKHRoaXMsIHN0YXJ0LCBlbmQpOwotfQot
Ci1pbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QK
LXsKLSAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYgY2FjaGVkU2VsZWN0aW9u
U3RhcnQoKSA+PSAwKQotICAgICAgICByZXR1cm4gY2FjaGVkU2VsZWN0aW9uU3RhcnQoKTsKLSAg
ICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b1JlbmRl
clRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rpb25TdGFydCgpOwotfQotCi1pbnQgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFpc1RleHRGb3JtQ29udHJvbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZG9jdW1l
bnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIGNhY2hlZFNlbGVjdGlvbkVuZCgpID49IDAp
Ci0gICAgICAgIHJldHVybiBjYWNoZWRTZWxlY3Rpb25FbmQoKTsKLSAgICBpZiAoIXJlbmRlcmVy
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJl
bmRlcmVyKCkpLT5zZWxlY3Rpb25FbmQoKTsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRv
SFRNTEVsZW1lbnQodGhpcyk7CisgICAgaWYgKCFlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZv
cm1BdHRyKSkgeworICAgICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVl
ZCB0byByZXNldCBmb3JtIG93bmVyIGhlcmUuCisgICAgICAgIGlmIChtX2Zvcm0pCisgICAgICAg
ICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICBtX2Zvcm0gPSBm
aW5kRm9ybU93bmVyKGVsZW1lbnQpOworICAgICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAg
Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBy
ZXNldEZvcm1Pd25lcigwKTsKIH0KIAotUGFzc1JlZlB0cjxSYW5nZT4gSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ6OnNlbGVjdGlvbigpIGNvbnN0Citjb25zdCBIVE1MRWxlbWVudCogdG9IVE1M
RWxlbWVudChjb25zdCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50KQog
ewotICAgIGlmICghcmVuZGVyZXIoKSB8fCAhaXNUZXh0Rm9ybUNvbnRyb2woKSB8fCBjYWNoZWRT
ZWxlY3Rpb25TdGFydCgpIDwgMCB8fCBjYWNoZWRTZWxlY3Rpb25FbmQoKSA8IDApCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5z
ZWxlY3Rpb24oY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSwgY2FjaGVkU2VsZWN0aW9uRW5kKCkpOwor
ICAgIGlmIChhc3NvY2lhdGVkRWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihhc3Nv
Y2lhdGVkRWxlbWVudCk7CisgICAgLy8gQXNzdW1lcyB0aGUgZWxlbWVudCBpcyBhbiBIVE1MT2Jq
ZWN0RWxlbWVudAorICAgIGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
Y29uc3QgSFRNTE9iamVjdEVsZW1lbnQqPihhc3NvY2lhdGVkRWxlbWVudCk7CisgICAgQVNTRVJU
KGVsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7CiB9
CiAKLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSogYXR0cikKK0hUTUxFbGVtZW50KiB0b0hUTUxFbGVtZW50KEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW1lbnQpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBwbGFjZWhvbGRlckF0dHIpCi0gICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSh0
cnVlKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxlY3RBdHRyKQotICAgICAg
ICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCwgY3Jl
YXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7Ci0gICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uY2hhbmdlQXR0cikKLSAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIodGhpcywgYXR0cikpOwotICAgIGVsc2UKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8SFRNTEVsZW1lbnQqPih0b0hUTUxFbGVtZW50KHN0YXRpY19jYXN0PGNvbnN0IEZvcm1B
c3NvY2lhdGVkRWxlbWVudCo+KGFzc29jaWF0ZWRFbGVtZW50KSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJjb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCShyZXZp
c2lvbiA3MzAwNykJKGZyb20gV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaDo3
MzAwNykKKysrIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
Zm5kZWYgSFRNTEZvcm1Db250cm9sRWxlbWVudF9oCisjZGVmaW5lIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnRfaAorCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBGb3JtRGF0YUxpc3Q7CitjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CitjbGFzcyBS
ZW5kZXJUZXh0Q29udHJvbDsKK2NsYXNzIFZhbGlkYXRpb25NZXNzYWdlOworY2xhc3MgVmFsaWRp
dHlTdGF0ZTsKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CisKKy8vIEZJWE1FOiBUaGUgSFRNTDUg
c3BlY2lmaWNhdGlvbiBjYWxscyB0aGVzZSBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMuCisvLyBT
byBjb25zaWRlciByZW5hbWluZyB0aGlzIHRvIEhUTUxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuCitj
bGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50KCk7CisKKyAgICBIVE1MRm9y
bUVsZW1lbnQqIGZvcm0oKSBjb25zdCB7IHJldHVybiBtX2Zvcm07IH0KKyAgICBWYWxpZGl0eVN0
YXRlKiB2YWxpZGl0eSgpOworCisgICAgYm9vbCBmb3JtTm9WYWxpZGF0ZSgpIGNvbnN0OworCisg
ICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRy
b2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVu
ZGVyZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5k
ZXJlcihib29sIGIpIHsgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGI7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKKworICAgIGJvb2wgZGlz
YWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkOyB9CisgICAgdm9pZCBzZXREaXNhYmxl
ZChib29sKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAg
ICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgY29udHJvbCB3aWxsIGJlIGF1dG9tYXRp
Y2FsbHkgZm9jdXNlZC4KKyAgICB2aXJ0dWFsIGJvb2wgYXV0b2ZvY3VzKCkgY29uc3Q7CisKKyAg
ICBib29sIHJlcXVpcmVkKCkgY29uc3Q7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUo
KSBjb25zdCB7IHJldHVybiBmb3JtQ29udHJvbFR5cGUoKTsgfQorICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1Db250cm9sTmFtZSgpOyB9CisKKyAgICB2
b2lkIHNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKKworICAgIHZpcnR1YWwgYm9v
bCBpc0VuYWJsZWRGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuICFkaXNhYmxlZCgpOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzUmVhZE9ubHlGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHJl
YWRPbmx5KCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuVHJpZ2dlckltcGxpY2l0U3VibWlz
c2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAvLyBPdmVycmlkZSBpbiBkZXJp
dmVkIGNsYXNzZXMgdG8gZ2V0IHRoZSBlbmNvZGVkIG5hbWU9dmFsdWUgcGFpciBmb3Igc3VibWl0
dGluZy4KKyAgICAvLyBSZXR1cm4gdHJ1ZSBmb3IgYSBzdWNjZXNzZnVsIGNvbnRyb2wgKHNlZSBI
VE1MNC0xNy4xMy4yKS4KKyAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFM
aXN0JiwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1N1Y2Nl
c3NmdWxTdWJtaXRCdXR0b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc0FjdGl2YXRlZFN1Ym1pdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldEFjdGl2YXRlZFN1Ym1pdChib29sKSB7IH0KKworICAgIHZpcnR1YWwgYm9v
bCB3aWxsVmFsaWRhdGUoKSBjb25zdDsKKyAgICBTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2UoKTsK
KyAgICB2b2lkIHVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgIHZvaWQgaGlk
ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgIGJvb2wgY2hlY2tWYWxpZGl0eShWZWN0
b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250
cm9scyA9IDApOworICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBhIHZhbGlkYXRpb24g
Y29uc3RyYWludCBvciBjb250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCisgICAgdm9pZCBzZXROZWVk
c1ZhbGlkaXR5Q2hlY2soKTsKKyAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmlu
ZyYpOworCisgICAgdm9pZCBmb3JtRGVzdHJveWVkKCkgeyBtX2Zvcm0gPSAwOyB9CisKKyAgICBi
b29sIGlzTGFiZWxhYmxlKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbGFiZWxz
KCk7CisgICAgCisgICAgYm9vbCByZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZE9ubHk7
IH0KKworICAgIHZvaWQgcmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50Kik7CisgICAgdmly
dHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xz
ID0gZmFsc2UpOworCitwcm90ZWN0ZWQ6CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwor
CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOworICAg
IHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJl
ZShib29sIGRlZXApOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVw
KTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OworCisg
ICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKTsKKworICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaEZvY3VzRXZlbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hCbHVy
RXZlbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisKKyAgICB2b2lkIHJlbW92ZUZy
b21Gb3JtKCk7CisKKyAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFueSB0aW1lIHRoZSByZXN1
bHQgb2Ygd2lsbFZhbGlkYXRlKCkgaGFzIGNoYW5nZWQuCisgICAgdm9pZCBzZXROZWVkc1dpbGxW
YWxpZGF0ZUNoZWNrKCk7CisgICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29u
dHJvbE5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNv
bnRyb2xUeXBlKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzRm9ybUNvbnRyb2xF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzRm9jdXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgSFRNTEZvcm1FbGVtZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBpc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICBTdHJpbmcgdmlzaWJsZVZh
bGlkYXRpb25NZXNzYWdlKCkgY29uc3Q7CisKKyAgICBIVE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsK
KyAgICBPd25QdHI8VmFsaWRpdHlTdGF0ZT4gbV92YWxpZGl0eVN0YXRlOworICAgIE93blB0cjxW
YWxpZGF0aW9uTWVzc2FnZT4gbV92YWxpZGF0aW9uTWVzc2FnZTsKKyAgICBib29sIG1fZGlzYWJs
ZWQgOiAxOworICAgIGJvb2wgbV9yZWFkT25seSA6IDE7CisgICAgYm9vbCBtX3JlcXVpcmVkIDog
MTsKKyAgICBib29sIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgOiAxOworCisgICAgLy8gVGhlIGlu
aXRpYWwgdmFsdWUgb2YgbV93aWxsVmFsaWRhdGUgZGVwZW5kcyBvbiB0aGUgZGVyaXZlZCBjbGFz
cy4gV2UgY2FuJ3QKKyAgICAvLyBpbml0aWFsaXplIGl0IHdpdGggYSB2aXJ0dWFsIGZ1bmN0aW9u
IGluIHRoZSBjb25zdHJ1Y3Rvci4gbV93aWxsVmFsaWRhdGUKKyAgICAvLyBpcyBub3QgZGV0ZXJt
aW5pc3RpYyBhcyBsb25nIGFzIG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQgaXMgZmFsc2UuCisg
ICAgbXV0YWJsZSBib29sIG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQ6IDE7CisgICAgbXV0YWJs
ZSBib29sIG1fd2lsbFZhbGlkYXRlIDogMTsKKworICAgIC8vIENhY2hlIG9mIHZhbGlkaXR5KCkt
PnZhbGlkKCkuCisgICAgLy8gQnV0ICJjYW5kaWRhdGUgZm9yIGNvbnN0cmFpbnQgdmFsaWRhdGlv
biIgZG9lc24ndCBhZmZlY3QgbV9pc1ZhbGlkLgorICAgIGJvb2wgbV9pc1ZhbGlkIDogMTsKK307
CisKKy8vIEZJWE1FOiBHaXZlIHRoaXMgY2xhc3MgaXRzIG93biBoZWFkZXIgZmlsZS4KK2NsYXNz
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9s
RWxlbWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZSgpOworCitwcm90ZWN0ZWQ6CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxl
bWVudCopOworCisgICAgdmlydHVhbCBib29sIGF1dG9Db21wbGV0ZSgpIGNvbnN0OworCisgICAg
dmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CisgICAgdmlydHVhbCB2
b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Cit9OworCisvLyBGSVhNRTogR2l2ZSB0aGlzIGNs
YXNzIGl0cyBvd24gaGVhZGVyIGZpbGUuCitjbGFzcyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlIHsKK3B1YmxpYzoKKyAg
ICAvLyBDb21tb24gZmxhZyBmb3IgSFRNTElucHV0RWxlbWVudDo6dG9vTG9uZygpIGFuZCBIVE1M
VGV4dEFyZWFFbGVtZW50Ojp0b29Mb25nKCkuCisgICAgZW51bSBOZWVkc1RvQ2hlY2tEaXJ0eUZs
YWcge0NoZWNrRGlydHlGbGFnLCBJZ25vcmVEaXJ0eUZsYWd9OworCisgICAgdmlydHVhbCB+SFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKTsKKworICAgIC8vIFRoZSBkZXJpdmVkIGNsYXNzIHNo
b3VsZCByZXR1cm4gdHJ1ZSBpZiBwbGFjZWhvbGRlciBwcm9jZXNzaW5nIGlzIG5lZWRlZC4KKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQbGFjZWhvbGRlcigpIGNvbnN0ID0gMDsKKyAgICBTdHJp
bmcgc3RyaXBwZWRQbGFjZWhvbGRlcigpIGNvbnN0OworICAgIGJvb2wgcGxhY2Vob2xkZXJTaG91
bGRCZVZpc2libGUoKSBjb25zdDsKKworICAgIGludCBzZWxlY3Rpb25TdGFydCgpIGNvbnN0Owor
ICAgIGludCBzZWxlY3Rpb25FbmQoKSBjb25zdDsKKyAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0
KGludCk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQoaW50KTsKKyAgICB2b2lkIHNlbGVjdCgp
OworICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKTsKKyAgICBQ
YXNzUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24oKSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IG1h
eExlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0g
MDsKKworcHJvdGVjdGVkOgorICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOworCisgICAgdm9pZCB1
cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJF
dmVudCgpOworCisgICAgYm9vbCBpc1BsYWNlaG9sZGVyRW1wdHkoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
aW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0ID0gMDsKKworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB1c2VyLWVkaXRhYmxlIHZhbHVlIGlzIGVtcHR5LiBVc2VkIHRvIGNoZWNrIHBsYWNlaG9s
ZGVyIHZpc2liaWxpdHkuCisgICAgdmlydHVhbCBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0ID0g
MDsKKyAgICAvLyBDYWxsZWQgaW4gZGlzcGF0Y2hGb2N1c0V2ZW50KCksIGFmdGVyIHBsYWNlaG9s
ZGVyIHByb2Nlc3MsIGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGRpc3BhdGNoRm9jdXNFdmVudCgp
LgorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVGb2N1c0V2ZW50KCkgeyB9CisgICAgLy8gQ2FsbGVk
IGluIGRpc3BhdGNoQmx1ckV2ZW50KCksIGFmdGVyIHBsYWNlaG9sZGVyIHByb2Nlc3MsIGJlZm9y
ZSBjYWxsaW5nIHBhcmVudCdzIGRpc3BhdGNoQmx1ckV2ZW50KCkuCisgICAgdmlydHVhbCB2b2lk
IGhhbmRsZUJsdXJFdmVudCgpIHsgfQorCisgICAgUmVuZGVyVGV4dENvbnRyb2wqIHRleHRSZW5k
ZXJlckFmdGVyVXBkYXRlTGF5b3V0KCk7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgJKHJldmlzaW9uIDczMDA3KQor
KysgV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw4ICsyMSw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgSFRNTEZvcm1Db250cm9sRWxlbWVu
dF9oCi0jZGVmaW5lIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRfaAorI2lmbmRlZiBGb3JtQXNzb2Np
YXRlZEVsZW1lbnRfaAorI2RlZmluZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnRfaAogCiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKIApAQCAtMzAsMTYgKzMwLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRm9ybURhdGFMaXN0OwogY2xhc3MgSFRNTEZvcm1FbGVtZW50OwotY2xhc3Mg
UmVuZGVyVGV4dENvbnRyb2w7CiBjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZTsKIGNsYXNzIFZhbGlk
aXR5U3RhdGU7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCi0vLyBGSVhNRTogVGhlIEhUTUw1
IHNwZWNpZmljYXRpb24gY2FsbHMgdGhlc2UgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzLgotLy8g
U28gY29uc2lkZXIgcmVuYW1pbmcgdGhpcyB0byBIVE1MRm9ybUFzc29jaWF0ZWRFbGVtZW50Lgot
Y2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CitjbGFz
cyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgfkhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIH5Gb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsK
KworICAgIHZvaWQgcmVmKCkgeyByZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsgfQorICAgIHZv
aWQgZGVyZWYoKSB7IGRlcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCk7IH0KIAogICAgIEhUTUxG
b3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybTsgfQogICAgIFZhbGlkaXR5
U3RhdGUqIHZhbGlkaXR5KCk7CkBAIC01MSw5NSArNTEsNjAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JtQ29udHJv
bFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0g
YjsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgp
OwotCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KLSAg
ICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwotCi0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxl
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgPSAwOwogCi0g
ICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIGNvbnRyb2wgd2lsbCBiZSBhdXRvbWF0
aWNhbGx5IGZvY3VzZWQuCi0gICAgdmlydHVhbCBib29sIGF1dG9mb2N1cygpIGNvbnN0OwotCi0g
ICAgYm9vbCByZXF1aXJlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGlzYWJsZWQo
Ym9vbCB2YWx1ZSkgeyBtX2Rpc2FibGVkID0gdmFsdWU7IH0KKyAgICBib29sIHJlcXVpcmVkKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXF1aXJlZDsgfQorICAgIHZvaWQgc2V0UmVxdWlyZWQoYm9vbCB2
YWx1ZSkgeyBtX3JlcXVpcmVkID0gdmFsdWU7IH0KKyAgICBib29sIHJlYWRPbmx5KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWFkT25seTsgfQorICAgIHZvaWQgc2V0UmVhZE9ubHkoYm9vbCB2YWx1ZSkg
eyBtX3JlYWRPbmx5ID0gdmFsdWU7IH0KIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIGZvcm1Db250cm9sVHlwZSgpOyB9CiAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gZm9ybUNvbnRyb2xOYW1lKCk7IH0KIAotICAgIHZv
aWQgc2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpOwotCi0gICAgdmlydHVhbCBib29s
IGlzRW5hYmxlZEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gIWRpc2FibGVkKCk7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNSZWFkT25seUZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gcmVh
ZE9ubHkoKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBjYW5UcmlnZ2VySW1wbGljaXRTdWJtaXNz
aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQogICAgIC8vIE92ZXJyaWRlIGluIGRlcml2
ZWQgY2xhc3NlcyB0byBnZXQgdGhlIGVuY29kZWQgbmFtZT12YWx1ZSBwYWlyIGZvciBzdWJtaXR0
aW5nLgogICAgIC8vIFJldHVybiB0cnVlIGZvciBhIHN1Y2Nlc3NmdWwgY29udHJvbCAoc2VlIEhU
TUw0LTE3LjEzLjIpLgogICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxp
c3QmLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBib29sIGlzU3VjY2Vz
c2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGlzQWN0aXZhdGVkU3VibWl0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0QWN0aXZhdGVkU3VibWl0KGJvb2wpIHsgfQotCiAgICAgdmlydHVhbCBib29s
IHdpbGxWYWxpZGF0ZSgpIGNvbnN0OwogICAgIFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpOwog
ICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAgdm9pZCBoaWRl
VmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3Rv
cjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRy
b2xzID0gMCk7CisgICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29j
aWF0ZWRFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMgPSAwKTsKICAgICAvLyBU
aGlzIG11c3QgYmUgY2FsbGVkIHdoZW4gYSB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgb3IgY29udHJv
bCB2YWx1ZSBpcyBjaGFuZ2VkLgogICAgIHZvaWQgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiAg
ICAgdm9pZCBzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJpbmcmKTsKIAotICAgIHZvaWQgZm9y
bURlc3Ryb3llZCgpIHsgbV9mb3JtID0gMDsgfQotCi0gICAgYm9vbCBpc0xhYmVsYWJsZSgpIGNv
bnN0OwotICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGxhYmVscygpOwotICAgIAotICAgIGJvb2wg
cmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5OyB9CisgICAgdmlydHVhbCB2b2lk
IGZvcm1EZXN0cm95ZWQoKSB7IG1fZm9ybSA9IDA7IH0KIAogICAgIHZvaWQgcmVzZXRGb3JtT3du
ZXIoSFRNTEZvcm1FbGVtZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQo
QXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOwogCiBwcm90ZWN0ZWQ6Ci0g
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChI
VE1MRm9ybUVsZW1lbnQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShBdHRyaWJ1dGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
ZEZyb21UcmVlKGJvb2wgZGVlcCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3Vz
YWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1
c2FibGUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5n
ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwor
ICAgIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZSgpOworICAgIHZvaWQgcmVtb3ZlZEZyb21UcmVlKCk7
CiAKKyAgICB2b2lkIHNldEZvcm0oSFRNTEZvcm1FbGVtZW50KiBmb3JtKSB7IG1fZm9ybSA9IGZv
cm07IH0KICAgICB2b2lkIHJlbW92ZUZyb21Gb3JtKCk7CisgICAgdm9pZCBmb3JtQXR0cmlidXRl
Q2hhbmdlZCgpOwogCiAgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhbnkgdGltZSB0aGUgcmVz
dWx0IG9mIHdpbGxWYWxpZGF0ZSgpIGhhcyBjaGFuZ2VkLgogICAgIHZvaWQgc2V0TmVlZHNXaWxs
VmFsaWRhdGVDaGVjaygpOwogICAgIHZpcnR1YWwgYm9vbCByZWNhbGNXaWxsVmFsaWRhdGUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpOwogCiBw
cml2YXRlOgotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1l
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJv
bFR5cGUoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNG
b2N1cygpIGNvbnN0OwotCi0gICAgdmlydHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0OwotCi0g
ICAgdmlydHVhbCBIVE1MRm9ybUVsZW1lbnQqIHZpcnR1YWxGb3JtKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpOwogICAgIFN0cmluZyB2aXNpYmxlVmFsaWRh
dGlvbk1lc3NhZ2UoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCByZWZGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRm9ybUFzc29jaWF0ZWRFbGVt
ZW50KCkgPSAwOworCiAgICAgSFRNTEZvcm1FbGVtZW50KiBtX2Zvcm07CiAgICAgT3duUHRyPFZh
bGlkaXR5U3RhdGU+IG1fdmFsaWRpdHlTdGF0ZTsKICAgICBPd25QdHI8VmFsaWRhdGlvbk1lc3Nh
Z2U+IG1fdmFsaWRhdGlvbk1lc3NhZ2U7CkBAIC0xNTksNzUgKzEyNCw5IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2lzVmFsaWQgOiAxOwogfTsKIAotLy8gRklYTUU6IEdpdmUgdGhpcyBjbGFzcyBp
dHMgb3duIGhlYWRlciBmaWxlLgotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZSA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCk7Ci0KLXByb3RlY3RlZDoKLSAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXV0
b0NvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVy
RG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgp
OwotICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0KLXByaXZh
dGU6Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLX07
Ci0KLS8vIEZJWE1FOiBHaXZlIHRoaXMgY2xhc3MgaXRzIG93biBoZWFkZXIgZmlsZS4KLWNsYXNz
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGUgewotcHVibGljOgotICAgIC8vIENvbW1vbiBmbGFnIGZvciBIVE1MSW5wdXRF
bGVtZW50Ojp0b29Mb25nKCkgYW5kIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnRvb0xvbmcoKS4KLSAg
ICBlbnVtIE5lZWRzVG9DaGVja0RpcnR5RmxhZyB7Q2hlY2tEaXJ0eUZsYWcsIElnbm9yZURpcnR5
RmxhZ307Ci0KLSAgICB2aXJ0dWFsIH5IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgpOwotCi0g
ICAgLy8gVGhlIGRlcml2ZWQgY2xhc3Mgc2hvdWxkIHJldHVybiB0cnVlIGlmIHBsYWNlaG9sZGVy
IHByb2Nlc3NpbmcgaXMgbmVlZGVkLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1BsYWNlaG9s
ZGVyKCkgY29uc3QgPSAwOwotICAgIFN0cmluZyBzdHJpcHBlZFBsYWNlaG9sZGVyKCkgY29uc3Q7
Ci0gICAgYm9vbCBwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpIGNvbnN0OwotCi0gICAgaW50
IHNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7Ci0gICAgaW50IHNlbGVjdGlvbkVuZCgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50KTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbkVu
ZChpbnQpOwotICAgIHZvaWQgc2VsZWN0KCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShp
bnQgc3RhcnQsIGludCBlbmQpOwotICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbigpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBpbnQgbWF4TGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZv
cm1FbGVtZW50Kik7Ci0KLSAgICB2b2lkIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShib29s
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsK
LQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7Ci0KLSAgICBib29sIGlzUGxhY2Vob2xk
ZXJFbXB0eSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uU3RhcnQo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkgY29uc3Qg
PSAwOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHVzZXItZWRpdGFibGUgdmFsdWUgaXMgZW1w
dHkuIFVzZWQgdG8gY2hlY2sgcGxhY2Vob2xkZXIgdmlzaWJpbGl0eS4KLSAgICB2aXJ0dWFsIGJv
b2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgPSAwOwotICAgIC8vIENhbGxlZCBpbiBkaXNwYXRjaEZv
Y3VzRXZlbnQoKSwgYWZ0ZXIgcGxhY2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcgcGFy
ZW50J3MgZGlzcGF0Y2hGb2N1c0V2ZW50KCkuCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUZvY3Vz
RXZlbnQoKSB7IH0KLSAgICAvLyBDYWxsZWQgaW4gZGlzcGF0Y2hCbHVyRXZlbnQoKSwgYWZ0ZXIg
cGxhY2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZGlzcGF0Y2hCbHVy
RXZlbnQoKS4KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQmx1ckV2ZW50KCkgeyB9Ci0KLSAgICBS
ZW5kZXJUZXh0Q29udHJvbCogdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQoKTsKLX07CitI
VE1MRWxlbWVudCogdG9IVE1MRWxlbWVudChGb3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsKK2NvbnN0
IEhUTUxFbGVtZW50KiB0b0hUTUxFbGVtZW50KGNvbnN0IEZvcm1Bc3NvY2lhdGVkRWxlbWVudCop
OwogCiB9IC8vIG5hbWVzcGFjZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnRfaApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDcz
MDA3KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDEyICs3OCwxMiBAQCBOb2RlKiBIVE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0odW5z
aWduZWQgCiAgICAgICAgIGluZm8oKS0+ZWxlbWVudHNBcnJheVBvc2l0aW9uID0gMDsKICAgICB9
CiAKLSAgICBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBlbGVtZW50c0FycmF5ID0g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYmFzZSgpKS0+bV9hc3NvY2lhdGVkRWxlbWVu
dHM7CisgICAgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVtZW50c0FycmF5ID0g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYmFzZSgpKS0+bV9hc3NvY2lhdGVkRWxlbWVu
dHM7CiAgICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gaW5mbygpLT5wb3NpdGlvbjsKICAgICAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmZvKCktPmVsZW1lbnRzQXJyYXlQb3NpdGlvbjsgaSA8
IGVsZW1lbnRzQXJyYXkuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxl
bWVudCogZWxlbWVudCA9IGVsZW1lbnRzQXJyYXlbaV07Ci0gICAgICAgIGlmIChlbGVtZW50LT5p
c0VudW1lcmF0YWJsZSgpKSB7CisgICAgICAgIGlmIChlbGVtZW50c0FycmF5W2ldLT5pc0VudW1l
cmF0YWJsZSgpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVs
ZW1lbnQoZWxlbWVudHNBcnJheVtpXSk7CiAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY3VycmVu
dEluZGV4KSB7CiAgICAgICAgICAgICAgICAgaW5mbygpLT5wb3NpdGlvbiA9IGluZGV4OwogICAg
ICAgICAgICAgICAgIGluZm8oKS0+Y3VycmVudCA9IGVsZW1lbnQ7CkBAIC0xMTAsMjEgKzExMCwy
MyBAQCBFbGVtZW50KiBIVE1MRm9ybUNvbGxlY3Rpb246OmdldE5hbWVkRm9yCiAKICAgICBib29s
IGZvdW5kSW5wdXRFbGVtZW50cyA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmb3JtLT5tX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KiBlID0gZm9ybS0+bV9hc3NvY2lhdGVkRWxlbWVudHNbaV07Ci0g
ICAgICAgIGlmIChlLT5pc0VudW1lcmF0YWJsZSgpICYmIGUtPmdldEF0dHJpYnV0ZShhdHRyTmFt
ZSkgPT0gbmFtZSkgeworICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRF
bGVtZW50ID0gZm9ybS0+bV9hc3NvY2lhdGVkRWxlbWVudHNbaV07CisgICAgICAgIEhUTUxFbGVt
ZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChhc3NvY2lhdGVkRWxlbWVudCk7CisgICAgICAg
IGlmIChhc3NvY2lhdGVkRWxlbWVudC0+aXNFbnVtZXJhdGFibGUoKQorICAgICAgICAgICAgJiYg
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7CiAgICAgICAgICAgICBm
b3VuZElucHV0RWxlbWVudHMgPSB0cnVlOwogICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1i
ZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVs
ZW1lbnQ7CiAgICAgICAgICAgICAtLWR1cGxpY2F0ZU51bWJlcjsKICAgICAgICAgfQogICAgIH0K
IAogICAgIGlmICghZm91bmRJbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmb3JtLT5tX2ltYWdlRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIEhUTUxJbWFnZUVsZW1lbnQqIGUgPSBmb3JtLT5tX2ltYWdlRWxlbWVudHNbaV07Ci0gICAg
ICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7CisgICAgICAg
ICAgICBIVE1MSW1hZ2VFbGVtZW50KiBlbGVtZW50ID0gZm9ybS0+bV9pbWFnZUVsZW1lbnRzW2ld
OworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFt
ZSkgewogICAgICAgICAgICAgICAgIGlmICghZHVwbGljYXRlTnVtYmVyKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAg
ICAgICAgICAgICAgICAgLS1kdXBsaWNhdGVOdW1iZXI7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTE5MSwxMCArMTkzLDExIEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVO
YW1lQ2FjaGUKICAgICBIVE1MRm9ybUVsZW1lbnQqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVs
ZW1lbnQqPihiYXNlKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPm1fYXNz
b2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIGUgPSBmLT5tX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGUtPmlz
RW51bWVyYXRhYmxlKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRy
VmFsID0gZS0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZUF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOworICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gZi0+bV9hc3NvY2lhdGVkRWxl
bWVudHNbaV07CisgICAgICAgIGlmIChhc3NvY2lhdGVkRWxlbWVudC0+aXNFbnVtZXJhdGFibGUo
KSkgeworICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGFz
c29jaWF0ZWRFbGVtZW50KTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRy
VmFsID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwog
ICAgICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gYWRkIHRvIGlkIGNhY2hlCiAgICAgICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiogaWRW
ZWN0b3IgPSBpbmZvKCktPmlkQ2FjaGUuZ2V0KGlkQXR0clZhbC5pbXBsKCkpOwpAQCAtMjAyLDcg
KzIwNSw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAg
ICAgICAgICAgICAgICAgaWRWZWN0b3IgPSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsKICAgICAgICAg
ICAgICAgICAgICAgaW5mbygpLT5pZENhY2hlLmFkZChpZEF0dHJWYWwuaW1wbCgpLCBpZFZlY3Rv
cik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlkVmVjdG9yLT5hcHBlbmQo
ZSk7CisgICAgICAgICAgICAgICAgaWRWZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAgICAg
ICAgICAgICBmb3VuZElucHV0RWxlbWVudHMuYWRkKGlkQXR0clZhbC5pbXBsKCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRy
VmFsICE9IG5hbWVBdHRyVmFsKSB7CkBAIC0yMTIsMTYgKzIxNSwxNiBAQCB2b2lkIEhUTUxGb3Jt
Q29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAgICAgICAgICAgICAgIG5hbWVWZWN0
b3IgPSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsKICAgICAgICAgICAgICAgICAgICAgaW5mbygpLT5u
YW1lQ2FjaGUuYWRkKG5hbWVBdHRyVmFsLmltcGwoKSwgbmFtZVZlY3Rvcik7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIG5hbWVWZWN0b3ItPmFwcGVuZChlKTsKKyAgICAgICAg
ICAgICAgICBuYW1lVmVjdG9yLT5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgZm91
bmRJbnB1dEVsZW1lbnRzLmFkZChuYW1lQXR0clZhbC5pbXBsKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPm1faW1h
Z2VFbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBlID0g
Zi0+bV9pbWFnZUVsZW1lbnRzW2ldOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0
clZhbCA9IGUtPmdldElkQXR0cmlidXRlKCk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZUF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOworICAgICAgICBIVE1MSW1h
Z2VFbGVtZW50KiBlbGVtZW50ID0gZi0+bV9pbWFnZUVsZW1lbnRzW2ldOworICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7Cisg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5nZXRBdHRy
aWJ1dGUobmFtZUF0dHIpOwogICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkgJiYgIWZv
dW5kSW5wdXRFbGVtZW50cy5jb250YWlucyhpZEF0dHJWYWwuaW1wbCgpKSkgewogICAgICAgICAg
ICAgLy8gYWRkIHRvIGlkIGNhY2hlCiAgICAgICAgICAgICBWZWN0b3I8RWxlbWVudCo+KiBpZFZl
Y3RvciA9IGluZm8oKS0+aWRDYWNoZS5nZXQoaWRBdHRyVmFsLmltcGwoKSk7CkBAIC0yMjksNyAr
MjMyLDcgQEAgdm9pZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAgICAg
ICAgICAgICAgIGlkVmVjdG9yID0gbmV3IFZlY3RvcjxFbGVtZW50Kj47CiAgICAgICAgICAgICAg
ICAgaW5mbygpLT5pZENhY2hlLmFkZChpZEF0dHJWYWwuaW1wbCgpLCBpZFZlY3Rvcik7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZFZlY3Rvci0+YXBwZW5kKGUpOworICAgICAgICAgICAg
aWRWZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgfQogICAgICAgICBpZiAoIW5hbWVB
dHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYgIWZvdW5kSW5w
dXRFbGVtZW50cy5jb250YWlucyhuYW1lQXR0clZhbC5pbXBsKCkpKSB7CiAgICAgICAgICAgICAv
LyBhZGQgdG8gbmFtZSBjYWNoZQpAQCAtMjM4LDcgKzI0MSw3IEBAIHZvaWQgSFRNTEZvcm1Db2xs
ZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgICAgICAgICBuYW1lVmVjdG9yID0gbmV3
IFZlY3RvcjxFbGVtZW50Kj47CiAgICAgICAgICAgICAgICAgaW5mbygpLT5uYW1lQ2FjaGUuYWRk
KG5hbWVBdHRyVmFsLmltcGwoKSwgbmFtZVZlY3Rvcik7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBuYW1lVmVjdG9yLT5hcHBlbmQoZSk7CisgICAgICAgICAgICBuYW1lVmVjdG9yLT5hcHBl
bmQoZWxlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw2IEBA
CiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJWYWxpZGF0aW9u
TWVzc2FnZS5oIgotI2luY2x1ZGUgIlZhbGlkaXR5U3RhdGUuaCIKICNpbmNsdWRlIDxsaW1pdHM+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC01NywyNSArNTUsMTggQEAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhU
TUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KQotICAgICwgbV9mb3JtKGZvcm0pCi0gICAgLCBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwgbV9y
ZWFkT25seShmYWxzZSkKLSAgICAsIG1fcmVxdWlyZWQoZmFsc2UpCi0gICAgLCBtX3ZhbHVlTWF0
Y2hlc1JlbmRlcmVyKGZhbHNlKQotICAgICwgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZChmYWxz
ZSkKLSAgICAsIG1fd2lsbFZhbGlkYXRlKHRydWUpCi0gICAgLCBtX2lzVmFsaWQodHJ1ZSkKLXsK
LSAgICBpZiAoIW1fZm9ybSkKLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwot
ICAgIGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlz
KTsKKyAgICAsIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChmb3JtKQoreworICAgIGlmICghdGhpcy0+
Zm9ybSgpKQorICAgICAgICBzZXRGb3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7CisgICAgaWYgKHRo
aXMtPmZvcm0oKSkKKyAgICAgICAgdGhpcy0+Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVtZW50KHRo
aXMpOwogfQogCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVu
dCgpCiB7Ci0gICAgaWYgKG1fZm9ybSkKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVu
dCh0aGlzKTsKKyAgICBpZiAoZm9ybSgpKQorICAgICAgICBmb3JtKCktPnJlbW92ZUZvcm1FbGVt
ZW50KHRoaXMpOwogfQogCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRldGFjaCgpCkBA
IC04NCw0MSArNzUsMjggQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKQog
ICAgIEhUTUxFbGVtZW50OjpkZXRhY2goKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Ojpmb3JtTm9WYWxpZGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUo
Zm9ybW5vdmFsaWRhdGVBdHRyKS5pc051bGwoKTsKLX0KLQotVmFsaWRpdHlTdGF0ZSogSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6dmFsaWRpdHkoKQotewotICAgIGlmICghbV92YWxpZGl0eVN0YXRl
KQotICAgICAgICBtX3ZhbGlkaXR5U3RhdGUgPSBWYWxpZGl0eVN0YXRlOjpjcmVhdGUodGhpcyk7
Ci0KLSAgICByZXR1cm4gbV92YWxpZGl0eVN0YXRlLmdldCgpOwotfQotCiB2b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsK
ICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGRpc2FibGVkQXR0cikgewotICAgICAgICBib29sIG9s
ZERpc2FibGVkID0gbV9kaXNhYmxlZDsKLSAgICAgICAgbV9kaXNhYmxlZCA9ICFhdHRyLT5pc051
bGwoKTsKLSAgICAgICAgaWYgKG9sZERpc2FibGVkICE9IG1fZGlzYWJsZWQpIHsKKyAgICAgICAg
Ym9vbCBvbGREaXNhYmxlZCA9IGRpc2FibGVkKCk7CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6c2V0RGlzYWJsZWQoIWF0dHItPmlzTnVsbCgpKTsKKyAgICAgICAgaWYgKG9sZERpc2Fi
bGVkICE9IGRpc2FibGVkKCkpIHsKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
ICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0Fw
cGVhcmFuY2UoKSkKICAgICAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNo
YW5nZWQocmVuZGVyZXIoKSwgRW5hYmxlZFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IHJlYWRvbmx5QXR0cikgewotICAgICAgICBib29sIG9sZFJlYWRP
bmx5ID0gbV9yZWFkT25seTsKLSAgICAgICAgbV9yZWFkT25seSA9ICFhdHRyLT5pc051bGwoKTsK
LSAgICAgICAgaWYgKG9sZFJlYWRPbmx5ICE9IG1fcmVhZE9ubHkpIHsKKyAgICAgICAgYm9vbCBv
bGRSZWFkT25seSA9IHJlYWRPbmx5KCk7CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6
c2V0UmVhZE9ubHkoIWF0dHItPmlzTnVsbCgpKTsKKyAgICAgICAgaWYgKG9sZFJlYWRPbmx5ICE9
IHJlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAg
ICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFu
Y2UoKSkKICAgICAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNoYW5nZWQo
cmVuZGVyZXIoKSwgUmVhZE9ubHlTdGF0ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSByZXF1aXJlZEF0dHIpIHsKLSAgICAgICAgYm9vbCBvbGRSZXF1aXJlZCA9
IG1fcmVxdWlyZWQ7Ci0gICAgICAgIG1fcmVxdWlyZWQgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAg
ICAgIGlmIChvbGRSZXF1aXJlZCAhPSBtX3JlcXVpcmVkKSB7CisgICAgICAgIGJvb2wgb2xkUmVx
dWlyZWQgPSByZXF1aXJlZCgpOworICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldFJl
cXVpcmVkKCFhdHRyLT5pc051bGwoKSk7CisgICAgICAgIGlmIChvbGRSZXF1aXJlZCAhPSByZXF1
aXJlZCgpKSB7CiAgICAgICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKICAgICAgICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsgLy8gVXBkYXRlcyBmb3IgOnJlcXVpcmVkIDpvcHRp
b25hbCBjbGFzc2VzLgogICAgICAgICB9CkBAIC0xNTQsNTEgKzEzMiwxNiBAQCB2b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCgpCiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1
dGUoZm9ybUF0dHIpKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRX
aXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3Vt
ZW50KCktPmdldEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICAg
ICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewotICAgICAg
ICAgICAgaWYgKG1fZm9ybSkKLSAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVt
ZW50KHRoaXMpOwotICAgICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50Kj4oZWxlbWVudCk7Ci0gICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQo
dGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFtX2Zvcm0pIHsKLSAgICAgICAgLy8g
VGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIGEgbmV3IGZvcm0gZWxlbWVudCBiZWluZyBjcmVhdGVk
IGJ5Ci0gICAgICAgIC8vIEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBhIGZvcm0uICBJ
biB0aGUgY2FzZSBvZiB0aGUgcGFyc2VyCi0gICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3
aWxsIGFscmVhZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sIAotICAgICAgICAv
LyBhbmQgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICAgICAgbV9mb3JtID0g
ZmluZEZvcm1BbmNlc3RvcigpOwotICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAgbV9m
b3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwotICAg
IH0KKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKTsKKyAgICBp
ZiAoIWZvcm0oKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFk
ZEJ1dHRvbih0aGlzKTsKIAogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXAp
OwogfQogCi1zdGF0aWMgaW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4pCi17Ci0gICAgTm9k
ZSogcm9vdCA9IG47Ci0gICAgZm9yICg7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAgICAg
IHJvb3QgPSBuOwotICAgIHJldHVybiByb290OwotfQotCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApCiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRy
aWJ1dGUoZm9ybUF0dHIpKQotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1l
bnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKLQotICAgIC8vIElmIHRoZSBmb3JtIGFuZCBlbGVt
ZW50IGFyZSBib3RoIGluIHRoZSBzYW1lIHRyZWUsIHByZXNlcnZlIHRoZSBjb25uZWN0aW9uIHRv
IHRoZSBmb3JtLgotICAgIC8vIE90aGVyd2lzZSwgbnVsbCBvdXQgb3VyIGZvcm0gYW5kIHJlbW92
ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZm9ybSdzIGxpc3Qgb2YgZWxlbWVudHMuCi0gICAgaWYgKG1f
Zm9ybSAmJiBmaW5kUm9vdCh0aGlzKSAhPSBmaW5kUm9vdChtX2Zvcm0pKSB7Ci0gICAgICAgIG1f
Zm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgIG1fZm9ybSA9IDA7Ci0gICAg
fQotCisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoKTsKICAgICBI
VE1MRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGRlZXApOwogfQogCkBAIC0yMjgsMTEgKzE3MSw2
IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXV0b2ZvY3VzKCkKICAgICByZXR1cm4g
aGFzQXR0cmlidXRlKGF1dG9mb2N1c0F0dHIpOwogfQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnJlcXVpcmVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXF1aXJlZDsKLX0KLQog
c3RhdGljIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnRDYWxsYmFjayhOb2RlKiBub2RlKQogewogICAg
IEFTU0VSVF9BUkcobm9kZSwgbm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKQEAgLTI5MCwxMjUgKzIy
OCw2IEBAIHNob3J0IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnRhYkluZGV4KCkKICAgICByZXR1
cm4gRWxlbWVudDo6dGFiSW5kZXgoKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpyZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBTaG91bGQgcmV0
dXJuIGZhbHNlIGlmIHRoaXMgZWxlbWVudCBoYXMgYSBkYXRhbGlzdCBlbGVtZW50IGFzIGFuCi0g
ICAgLy8gYW5jZXN0b3IuIFNlZSBIVE1MNSA0LjEwLjEwICdUaGUgZGF0YWxpc3QgZWxlbWVudC4n
Ci0gICAgcmV0dXJuICFtX2Rpc2FibGVkICYmICFtX3JlYWRPbmx5OwotfQotCi1ib29sIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3dp
bGxWYWxpZGF0ZUluaXRpYWxpemVkKSB7Ci0gICAgICAgIG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6
ZWQgPSB0cnVlOwotICAgICAgICBtX3dpbGxWYWxpZGF0ZSA9IHJlY2FsY1dpbGxWYWxpZGF0ZSgp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZh
aWxzLCBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCkgaXMgbm90Ci0gICAgICAgIC8vIGNhbGxl
ZCBjb3JyZWN0bHkgd2hlbiBzb21ldGhpbmcgd2hpY2ggY2hhbmdlcyByZWNhbGNXaWxsVmFsaWRh
dGUoKSByZXN1bHQKLSAgICAgICAgLy8gaXMgdXBkYXRlZC4KLSAgICAgICAgQVNTRVJUKG1fd2ls
bFZhbGlkYXRlID09IHJlY2FsY1dpbGxWYWxpZGF0ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1f
d2lsbFZhbGlkYXRlOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRz
V2lsbFZhbGlkYXRlQ2hlY2soKQotewotICAgIC8vIFdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgd2ls
bFZhbGlkdGUgaW1tZWRpYXRlbHkgYmVjYXVzZSB3aWxsVmFsaWRhdGUKLSAgICAvLyBjaGFuZ2Ug
Y2FuIGNhdXNlcyBzdHlsZSBjaGFuZ2UuCi0gICAgYm9vbCBuZXdXaWxsVmFsaWRhdGUgPSByZWNh
bGNXaWxsVmFsaWRhdGUoKTsKLSAgICBpZiAobV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCAmJiBt
X3dpbGxWYWxpZGF0ZSA9PSBuZXdXaWxsVmFsaWRhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICBtX3dpbGxWYWxpZGF0ZSA9IG5l
d1dpbGxWYWxpZGF0ZTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgaWYgKCFtX3dp
bGxWYWxpZGF0ZSkKLSAgICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwotfQot
Ci1TdHJpbmcgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRhdGlvbk1lc3NhZ2UoKQotewot
ICAgIHJldHVybiB2YWxpZGl0eSgpLT52YWxpZGF0aW9uTWVzc2FnZSgpOwotfQotCi12b2lkIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCi17
Ci0gICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpZiAocmVuZGVyZXIoKSAm
JiB3aWxsVmFsaWRhdGUoKSkgewotICAgICAgICBtZXNzYWdlID0gdmFsaWRhdGlvbk1lc3NhZ2Uo
KS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgLy8gSFRNTDUgc3BlY2lmaWNhdGlvbiBkb2Vz
bid0IGFzayBVQSB0byBzaG93IHRoZSB0aXRsZSBhdHRyaWJ1dGUgdmFsdWUKLSAgICAgICAgLy8g
d2l0aCB0aGUgdmFsaWRhdGlvbk1lc3NhZ2UuICBIb3dldmVyLCB0aGlzIGJlaGF2aW9yIGlzIHNh
bWUgYXMgT3BlcmEKLSAgICAgICAgLy8gYW5kIHRoZSBzcGVjaWZpY2F0aW9uIGRlc2NyaWJlcyBz
dWNoIGJlaGF2aW9yIGFzIGFuIGV4YW1wbGUuCi0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dGl0bGUgPSBnZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKLSAgICAgICAgaWYgKCFtZXNzYWdlLmlz
RW1wdHkoKSAmJiAhdGl0bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVu
ZCgnXG4nKTsKLSAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKHRpdGxlKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBpZiAoIW1fdmFsaWRhdGlvbk1lc3NhZ2UpIHsKLSAgICAgICAgbV92YWxpZGF0
aW9uTWVzc2FnZSA9IFZhbGlkYXRpb25NZXNzYWdlOjpjcmVhdGUodGhpcyk7Ci0gICAgICAgIG1f
dmFsaWRhdGlvbk1lc3NhZ2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfSBlbHNlIGlmICht
ZXNzYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgp
OwotICAgIGVsc2UgaWYgKG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSAhPSBtZXNzYWdl
KQotICAgICAgICBtX3ZhbGlkYXRpb25NZXNzYWdlLT5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotfQot
Ci12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3Nh
Z2UoKQotewotICAgIG1fdmFsaWRhdGlvbk1lc3NhZ2UgPSAwOwotfQotCi1TdHJpbmcgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6dmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV92YWxpZGF0aW9uTWVzc2FnZSA/IG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3Nh
Z2UoKSA6IFN0cmluZygpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNr
VmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRs
ZWRJbnZhbGlkQ29udHJvbHMpCi17Ci0gICAgaWYgKCF3aWxsVmFsaWRhdGUoKSB8fCBpc1ZhbGlk
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIEFuIGV2
ZW50IGhhbmRsZXIgY2FuIGRlcmVmIHRoaXMgb2JqZWN0LgotICAgIFJlZlB0cjxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7Ci0gICAgUmVmUHRyPERvY3VtZW50PiBvcmln
aW5hbERvY3VtZW50KGRvY3VtZW50KCkpOwotICAgIGJvb2wgbmVlZHNEZWZhdWx0QWN0aW9uID0g
ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlkRXZlbnQsIGZh
bHNlLCB0cnVlKSk7Ci0gICAgaWYgKG5lZWRzRGVmYXVsdEFjdGlvbiAmJiB1bmhhbmRsZWRJbnZh
bGlkQ29udHJvbHMgJiYgaW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0gZG9jdW1l
bnQoKSkKLSAgICAgICAgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLT5hcHBlbmQodGhpcyk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzVmFs
aWRGb3JtQ29udHJvbEVsZW1lbnQoKQotewotICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0
aW9uIGZhaWxzLCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKSBpcyBub3QgY2FsbGVkCi0gICAgLy8g
Y29ycmVjdGx5IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMgdmFsaWRpdHkgaXMgdXBkYXRl
ZC4KLSAgICBBU1NFUlQobV9pc1ZhbGlkID09IHZhbGlkaXR5KCktPnZhbGlkKCkpOwotICAgIHJl
dHVybiBtX2lzVmFsaWQ7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmVl
ZHNWYWxpZGl0eUNoZWNrKCkKLXsKLSAgICBib29sIG5ld0lzVmFsaWQgPSB2YWxpZGl0eSgpLT52
YWxpZCgpOwotICAgIGlmICh3aWxsVmFsaWRhdGUoKSAmJiBuZXdJc1ZhbGlkICE9IG1faXNWYWxp
ZCkgewotICAgICAgICAvLyBVcGRhdGUgc3R5bGUgZm9yIHBzZXVkbyBjbGFzc2VzIHN1Y2ggYXMg
OnZhbGlkIDppbnZhbGlkLgotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfQot
ICAgIG1faXNWYWxpZCA9IG5ld0lzVmFsaWQ7Ci0KLSAgICAvLyBVcGRhdGVzIG9ubHkgaWYgdGhp
cyBjb250cm9sIGFscmVhZHkgaGFzIGEgdmFsaWR0aW9uIG1lc3NhZ2UuCi0gICAgaWYgKCF2aXNp
YmxlVmFsaWRhdGlvbk1lc3NhZ2UoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQ2FsbHMgdXBk
YXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgZXZlbiBpZiBtX2lzVmFsaWQgaXMgbm90Ci0g
ICAgICAgIC8vIGNoYW5nZWQgYmVjYXVzZSBhIHZhbGlkYXRpb24gbWVzc2FnZSBjYW4gYmUgY2hh
Z25lZC4KLSAgICAgICAgdXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgfQot
fQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEN1c3RvbVZhbGlkaXR5KGNvbnN0
IFN0cmluZyYgZXJyb3IpCi17Ci0gICAgdmFsaWRpdHkoKS0+c2V0Q3VzdG9tRXJyb3JNZXNzYWdl
KGVycm9yKTsKLX0KLSAgICAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hG
b2N1c0V2ZW50KCkKIHsKICAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQpAQCAtNDI4LDY0ICsy
NDcsMjIgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEJsdQogCiBIVE1M
Rm9ybUVsZW1lbnQqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9mb3JtOworICAgIHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6
OmZvcm0oKTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0RlZmF1bHRCdXR0
b25Gb3JGb3JtKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9u
KCkgJiYgbV9mb3JtICYmIG1fZm9ybS0+ZGVmYXVsdEJ1dHRvbigpID09IHRoaXM7Ci19Ci0KLXZv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0oKQotewotICAgIGlmICgh
bV9mb3JtKQotICAgICAgICByZXR1cm47Ci0gICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0
aGlzKTsKLSAgICBtX2Zvcm0gPSAwOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OnJlc2V0Rm9ybU93bmVyKEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLXsKLSAgICBpZiAobV9mb3Jt
KSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAg
fQotICAgIG1fZm9ybSA9IDA7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7
Ci0gICAgICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNheXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQg
YmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBk
b2N1bWVudCB0byBoYXZlIGFuIElEIHRoYXQgZXF1YWwgdG8KLSAgICAgICAgLy8gdGhlIHZhbHVl
IG9mIGZvcm0gYXR0cmlidXRlLCBzbyB3ZSBwdXQgdGhlIHJlc3VsdCBvZgotICAgICAgICAvLyBk
b2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAg
ICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZh
c3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICAgICAgaWYgKGZpcnN0RWxlbWVudCAmJiBm
aXJzdEVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpCi0gICAgICAgICAgICBtX2Zvcm0gPSBz
dGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihmaXJzdEVsZW1lbnQpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtX2Zvcm0gPSBmb3JtOwotICAgIH0gZWxzZQotICAgICAgICBtX2Zvcm0g
PSBmaW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgaWYgKG1fZm9ybSkKLSAgICAgICAgbV9mb3JtLT5y
ZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQoKS0+
Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICByZXR1cm4gaXNTdWNj
ZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgZm9ybSgpICYmIGZvcm0oKS0+ZGVmYXVsdEJ1dHRvbigp
ID09IHRoaXM7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0cmlidXRlQ2hh
bmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKIHsKICAgICBpZiAoYXR0
ci0+bmFtZSgpID09IGZvcm1BdHRyKSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShm
b3JtQXR0cikpIHsKLSAgICAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1vdmVkLiBX
ZSBuZWVkIHRvIHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KLSAgICAgICAgICAgIGlmIChtX2Zvcm0p
Ci0gICAgICAgICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAg
ICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICAgICAgICAgIGlmIChtX2Zv
cm0pCi0gICAgICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRp
b0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
cmVzZXRGb3JtT3duZXIoMCk7Ci0gICAgfQotICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFu
Z2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOworICAgICAgICBmb3JtQXR0cmlidXRlQ2hhbmdlZCgp
OworICAgICAgICBpZiAoIWZvcm0oKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRS
YWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIEhUTUxF
bGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOwogfQogCiBib29s
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzTGFiZWxhYmxlKCkgY29uc3QKQEAgLTUxNiw3ICsy
OTMsNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MRm9ybUNvbnRyb2xFbGVtCiAgICAgCiAg
ICAgcmV0dXJuIExhYmVsc05vZGVMaXN0OjpjcmVhdGUodGhpcyk7CiB9Ci0gICAgCisKIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1F
bGVtZW50KiBmKQogICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2MsIGYp
CiB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJldmlzaW9uIDcz
MDA3KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gK
ICNkZWZpbmUgSFRNTEZvcm1Db250cm9sRWxlbWVudF9oCiAKKyNpbmNsdWRlICJGb3JtQXNzb2Np
YXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zNSwyNiArMzYsMzAgQEAgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2U7CiBjbGFz
cyBWYWxpZGl0eVN0YXRlOwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAotLy8gRklYTUU6IFRo
ZSBIVE1MNSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoZXNlIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50
cy4KLS8vIFNvIGNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgdG8gSFRNTEZvcm1Bc3NvY2lhdGVkRWxl
bWVudC4KLWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQg
eworLy8gVGhlIEhUTUw1IHNwZWNpZmljYXRpb24gY2FsbHMgdGhlc2UgY29udHJvbCBlbGVtZW50
cyBhbmQgb2JqZWN0IGVsZW1lbnQgYXMKKy8vIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cy4gU28g
d2UgaW50cm9kdWNlIEZvcm1Bc3NvaWF0ZWRFbGVtZW50IGNsYXNzIGFzIGEKKy8vIHN1cGVyY2xh
c3Mgb2YgdGhvc2UgZWxlbWVudHMgdG8gaGFuZGxlIHRoZXNlIGluIG11Y2ggdGhlIHNhbWUgbWFu
bmVyLgorY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwg
cHVibGljIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SFRN
TEZvcm1Db250cm9sRWxlbWVudCgpOwogCi0gICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9mb3JtOyB9Ci0gICAgVmFsaWRpdHlTdGF0ZSogdmFsaWRpdHkoKTsKLQot
ICAgIGJvb2wgZm9ybU5vVmFsaWRhdGUoKSBjb25zdDsKKyAgICBIVE1MRm9ybUVsZW1lbnQqIGZv
cm0oKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm0oKTsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRy
b2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVu
ZGVyZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5k
ZXJlcihib29sIGIpIHsgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGI7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIEZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9v
bCBiKSB7IEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNS
ZW5kZXJlcihiKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFu
Z2VFdmVudCgpOwogCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJs
ZWQ7IH0KLSAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBkaXNh
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6ZGlzYWJsZWQoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sKTsKKworICAgIGJvb2wgcmVxdWly
ZWQoKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlcXVpcmVkKCk7IH0K
KyAgICB2b2lkIHNldFJlcXVpcmVkKGJvb2wgdmFsdWUpIHsgRm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpzZXRSZXF1aXJlZCh2YWx1ZSk7IH0KKworICAgIGJvb2wgcmVhZE9ubHkoKSBjb25zdCB7IHJl
dHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlYWRPbmx5KCk7IH0KKyAgICB2b2lkIHNldFJl
YWRPbmx5KGJvb2wgdmFsdWUpIHsgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXRSZWFkT25seSh2
YWx1ZSk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC02
MiwxMSArNjcsNiBAQCBwdWJsaWM6CiAgICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBh
IGNvbnRyb2wgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQuCiAgICAgdmlydHVhbCBib29s
IGF1dG9mb2N1cygpIGNvbnN0OwogCi0gICAgYm9vbCByZXF1aXJlZCgpIGNvbnN0OwotCi0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gZm9ybUNvbnRyb2xUeXBl
KCk7IH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBmb3Jt
Q29udHJvbE5hbWUoKTsgfQotCiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkRm9ybUNvbnRyb2woKSBjb25zdCB7
IHJldHVybiAhZGlzYWJsZWQoKTsgfQpAQCAtODMsMjUgKzgzLDE2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgaXNBY3RpdmF0ZWRTdWJtaXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmF0ZWRTdWJtaXQoYm9vbCkgeyB9CiAKLSAgICB2aXJ0
dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHZhbGlkYXRpb25NZXNz
YWdlKCk7Ci0gICAgdm9pZCB1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICB2
b2lkIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICBib29sIGNoZWNrVmFsaWRp
dHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZh
bGlkQ29udHJvbHMgPSAwKTsKLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdoZW4gYSB2YWxp
ZGF0aW9uIGNvbnN0cmFpbnQgb3IgY29udHJvbCB2YWx1ZSBpcyBjaGFuZ2VkLgotICAgIHZvaWQg
c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci0gICAgdm9pZCBzZXRDdXN0b21WYWxpZGl0eShjb25z
dCBTdHJpbmcmKTsKLQotICAgIHZvaWQgZm9ybURlc3Ryb3llZCgpIHsgbV9mb3JtID0gMDsgfQor
ICAgIHZpcnR1YWwgYm9vbCB3aWxsVmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ6OndpbGxWYWxpZGF0ZSgpOyB9CiAKICAgICBib29sIGlzTGFiZWxhYmxlKCkg
Y29uc3Q7CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbGFiZWxzKCk7Ci0gICAgCi0gICAgYm9v
bCByZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KIAotICAgIHZvaWQgcmVz
ZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0
ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOwogCisgICAg
dXNpbmcgVHJlZVNoYXJlZDxDb250YWluZXJOb2RlPjo6cmVmOworICAgIHVzaW5nIFRyZWVTaGFy
ZWQ8Q29udGFpbmVyTm9kZT46OmRlcmVmOworCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxG
b3JtRWxlbWVudCopOwogCkBAIC0xMTksMTcgKzExMCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgp
OwogCi0gICAgdm9pZCByZW1vdmVGcm9tRm9ybSgpOwotCi0gICAgLy8gVGhpcyBtdXN0IGJlIGNh
bGxlZCBhbnkgdGltZSB0aGUgcmVzdWx0IG9mIHdpbGxWYWxpZGF0ZSgpIGhhcyBjaGFuZ2VkLgot
ICAgIHZvaWQgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwotICAgIHZpcnR1YWwgYm9vbCBy
ZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdDsKLQogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0ID0gMDsKIAorICAgIHZpcnR1
YWwgdm9pZCByZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSB7IHJlZigpOyB9CisgICAgdmlydHVh
bCB2b2lkIGRlcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgeyBkZXJlZigpOyB9CisKICAgICB2
aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSB7IHJldHVybiBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKTsgfQogCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKIApAQCAtMTM3LDI2ICsxMjYs
NyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBIVE1MRm9ybUVsZW1lbnQqIHZpcnR1YWxGb3Jt
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpOwotICAgIFN0
cmluZyB2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKIAotICAgIEhUTUxGb3JtRWxl
bWVudCogbV9mb3JtOwotICAgIE93blB0cjxWYWxpZGl0eVN0YXRlPiBtX3ZhbGlkaXR5U3RhdGU7
Ci0gICAgT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRpb25NZXNzYWdlOwotICAg
IGJvb2wgbV9kaXNhYmxlZCA6IDE7Ci0gICAgYm9vbCBtX3JlYWRPbmx5IDogMTsKLSAgICBib29s
IG1fcmVxdWlyZWQgOiAxOwotICAgIGJvb2wgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA6IDE7Ci0K
LSAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBvZiBtX3dpbGxWYWxpZGF0ZSBkZXBlbmRzIG9uIHRo
ZSBkZXJpdmVkIGNsYXNzLiBXZSBjYW4ndAotICAgIC8vIGluaXRpYWxpemUgaXQgd2l0aCBhIHZp
cnR1YWwgZnVuY3Rpb24gaW4gdGhlIGNvbnN0cnVjdG9yLiBtX3dpbGxWYWxpZGF0ZQotICAgIC8v
IGlzIG5vdCBkZXRlcm1pbmlzdGljIGFzIGxvbmcgYXMgbV93aWxsVmFsaWRhdGVJbml0aWFsaXpl
ZCBpcyBmYWxzZS4KLSAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZDog
MTsKLSAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGUgOiAxOwotCi0gICAgLy8gQ2FjaGUg
b2YgdmFsaWRpdHkoKS0+dmFsaWQoKS4KLSAgICAvLyBCdXQgImNhbmRpZGF0ZSBmb3IgY29uc3Ry
YWludCB2YWxpZGF0aW9uIiBkb2Vzbid0IGFmZmVjdCBtX2lzVmFsaWQuCi0gICAgYm9vbCBtX2lz
VmFsaWQgOiAxOwogfTsKIAogLy8gRklYTUU6IEdpdmUgdGhpcyBjbGFzcyBpdHMgb3duIGhlYWRl
ciBmaWxlLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDczMDA3KQor
KysgV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
OSw3ICsxNzksMTAgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkoRQog
ewogICAgIGludCBzdWJtaXNzaW9uVHJpZ2dlckNvdW50ID0gMDsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBtX2Fzc29jaWF0ZWRFbGVtZW50
c1tpXTsKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBmb3JtQXNzb2NpYXRlZEVsZW1l
bnQgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFmb3JtQXNzb2NpYXRl
ZEVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZm9ybUFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAg
ICAgaWYgKGZvcm1FbGVtZW50LT5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSkgewogICAgICAg
ICAgICAgaWYgKGZvcm1FbGVtZW50LT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAgICAgZm9y
bUVsZW1lbnQtPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZlbnQpOwpAQCAtMjE2LDcgKzIxOSw3
IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXYKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5oaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdl
KCk7CiAKLSAgICBWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4gdW5oYW5k
bGVkSW52YWxpZENvbnRyb2xzOworICAgIFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50PiA+IHVuaGFuZGxlZEludmFsaWRDb250cm9sczsKICAgICBjb2xsZWN0VW5oYW5kbGVkSW52
YWxpZENvbnRyb2xzKHVuaGFuZGxlZEludmFsaWRDb250cm9scyk7CiAgICAgaWYgKHVuaGFuZGxl
ZEludmFsaWRDb250cm9scy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI1
LDcgKzIyOCw4IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXYKICAg
ICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CiAgICAgLy8gRm9jdXMg
b24gdGhlIGZpcnN0IGZvY3VzYWJsZSBjb250cm9sIGFuZCBzaG93IGEgdmFsaWRhdGlvbiBtZXNz
YWdlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1bmhhbmRsZWRJbnZhbGlkQ29udHJv
bHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogdW5oYW5k
bGVkID0gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzW2ldLmdldCgpOworICAgICAgICBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQqIHVuaGFuZGxlZEFzc29jaWF0ZWRFbGVtZW50ID0gdW5oYW5kbGVkSW52
YWxpZENvbnRyb2xzW2ldLmdldCgpOworICAgICAgICBIVE1MRWxlbWVudCogdW5oYW5kbGVkID0g
dG9IVE1MRWxlbWVudCh1bmhhbmRsZWRBc3NvY2lhdGVkRWxlbWVudCk7CiAgICAgICAgIGlmICh1
bmhhbmRsZWQtPmlzRm9jdXNhYmxlKCkgJiYgdW5oYW5kbGVkLT5pbkRvY3VtZW50KCkpIHsKICAg
ICAgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2luYWxEb2N1bWVudCh1bmhhbmRsZWQtPmRv
Y3VtZW50KCkpOwogICAgICAgICAgICAgdW5oYW5kbGVkLT5zY3JvbGxJbnRvVmlld0lmTmVlZGVk
KGZhbHNlKTsKQEAgLTIzNCw3ICsyMzgsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6dmFsaWRh
dGVJbnRlcmFjdGl2CiAgICAgICAgICAgICAvLyBtb3ZlZCB0byBhbm90aGVyIGRvY3VtZW50Lgog
ICAgICAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb2N1c2FibGUoKSAmJiB1bmhhbmRsZWQtPmlu
RG9jdW1lbnQoKSAmJiBvcmlnaW5hbERvY3VtZW50ID09IHVuaGFuZGxlZC0+ZG9jdW1lbnQoKSkg
ewogICAgICAgICAgICAgICAgIHVuaGFuZGxlZC0+Zm9jdXMoKTsKLSAgICAgICAgICAgICAgICB1
bmhhbmRsZWQtPnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgICAgICAgICAg
ICAgIHVuaGFuZGxlZEFzc29jaWF0ZWRFbGVtZW50LT51cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1l
c3NhZ2UoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtMjQyLDExICsyNDYsMTIgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50
ZXJhY3RpdgogICAgIC8vIFdhcm4gYWJvdXQgYWxsIG9mIHVuZm9jdXNhYmxlIGNvbnRyb2xzLgog
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIHVuaGFuZGxlZCA9IHVu
aGFuZGxlZEludmFsaWRDb250cm9sc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCogdW5oYW5kbGVkQXNzb2NpYXRlZEVsZW1lbnQgPSB1bmhhbmRsZWRJbnZhbGlk
Q29udHJvbHNbaV0uZ2V0KCk7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogdW5oYW5kbGVkID0g
dG9IVE1MRWxlbWVudCh1bmhhbmRsZWRBc3NvY2lhdGVkRWxlbWVudCk7CiAgICAgICAgICAgICBp
ZiAodW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgpICYmIHVuaGFuZGxlZC0+aW5Eb2N1bWVudCgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UoIkFu
IGludmFsaWQgZm9ybSBjb250cm9sIHdpdGggbmFtZT0nJW5hbWUnIGlzIG5vdCBmb2N1c2FibGUu
Iik7Ci0gICAgICAgICAgICBtZXNzYWdlLnJlcGxhY2UoIiVuYW1lIiwgdW5oYW5kbGVkLT5uYW1l
KCkpOworICAgICAgICAgICAgbWVzc2FnZS5yZXBsYWNlKCIlbmFtZSIsIHVuaGFuZGxlZEFzc29j
aWF0ZWRFbGVtZW50LT5uYW1lKCkpOwogICAgICAgICAgICAgZnJhbWUtPmRvbVdpbmRvdygpLT5j
b25zb2xlKCktPmFkZE1lc3NhZ2UoSFRNTE1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBF
cnJvck1lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgMCwgZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMzA3LDggKzMxMiwxMSBAQCB2b2lkIEhUTUxGb3JtRWxl
bWVudDo6c3VibWl0KEV2ZW50KiBldmVuCiAgICAgYm9vbCBuZWVkQnV0dG9uQWN0aXZhdGlvbiA9
IGFjdGl2YXRlU3VibWl0QnV0dG9uOyAvLyBkbyB3ZSBuZWVkIHRvIGFjdGl2YXRlIGEgc3VibWl0
IGJ1dHRvbj8KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVt
ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250
cm9sID0gbV9hc3NvY2lhdGVkRWxlbWVudHNbaV07CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudCogYXNzb2NpYXRlZEVsZW1lbnQgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAg
ICAgaWYgKCFhc3NvY2lhdGVkRWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24pIHsKKyAg
ICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBzdGF0aWNfY2FzdDxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oYXNzb2NpYXRlZEVsZW1lbnQpOwogICAgICAgICAgICAg
aWYgKGNvbnRyb2wtPmlzQWN0aXZhdGVkU3VibWl0KCkpCiAgICAgICAgICAgICAgICAgbmVlZEJ1
dHRvbkFjdGl2YXRpb24gPSBmYWxzZTsKICAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0U3VjY2Vz
c2Z1bFN1Ym1pdEJ1dHRvbiA9PSAwICYmIGNvbnRyb2wtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bigpKQpAQCAtMzk2LDcgKzQwNCw3IEBAIHRlbXBsYXRlPGNsYXNzIFQsIHNpemVfdCBuPiBzdGF0
aWMgdm9pZCAKICAgICAgICAgfQogfQogCi11bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1F
bGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVt
ZW50KQordW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4V2l0aEZvcm1B
dHRyaWJ1dGUoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICAvLyBDb21wYXJlcyB0aGUgcG9zaXRp
b24gb2YgdGhlIGZvcm0gZWxlbWVudCBhbmQgdGhlIGluc2VydGVkIGVsZW1lbnQuCiAgICAgLy8g
VXBkYXRlcyB0aGUgaW5kZWNlcyBpbiBvcmRlciB0byB0aGUgcmVsYXRpb24gb2YgdGhlIHBvc2l0
aW9uOgpAQCAtNDE2LDU3ICs0MjQsNjcgQEAgdW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3Jt
RWxlbWVudEluZAogICAgIHVuc2lnbmVkIGxlZnQgPSAwLCByaWdodCA9IG1fYXNzb2NpYXRlZEVs
ZW1lbnRzLnNpemUoKSAtIDE7CiAgICAgd2hpbGUgKGxlZnQgIT0gcmlnaHQpIHsKICAgICAgICAg
dW5zaWduZWQgbWlkZGxlID0gbGVmdCArICgocmlnaHQgLSBsZWZ0KSAvIDIpOwotICAgICAgICBw
b3NpdGlvbiA9IGVsZW1lbnQtPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG1fYXNzb2NpYXRlZEVs
ZW1lbnRzW21pZGRsZV0pOworICAgICAgICBwb3NpdGlvbiA9IGVsZW1lbnQtPmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uKHRvSFRNTEVsZW1lbnQobV9hc3NvY2lhdGVkRWxlbWVudHNbbWlkZGxlXSkp
OwogICAgICAgICBpZiAocG9zaXRpb24gJiBET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcpCiAg
ICAgICAgICAgICByaWdodCA9IG1pZGRsZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbGVm
dCA9IG1pZGRsZSArIDE7CiAgICAgfQogCi0gICAgcG9zaXRpb24gPSBlbGVtZW50LT5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbihtX2Fzc29jaWF0ZWRFbGVtZW50c1tsZWZ0XSk7CisgICAgcG9zaXRp
b24gPSBlbGVtZW50LT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0b0hUTUxFbGVtZW50KG1fYXNz
b2NpYXRlZEVsZW1lbnRzW2xlZnRdKSk7CiAgICAgaWYgKHBvc2l0aW9uICYgRE9DVU1FTlRfUE9T
SVRJT05fRk9MTE9XSU5HKQogICAgICAgICByZXR1cm4gbGVmdDsKICAgICByZXR1cm4gbGVmdCAr
IDE7CiB9CiAKLXVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleChIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KiBlKQordW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxl
bWVudEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW1lbnQpCiB7Cisg
ICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGFzc29jaWF0ZWRFbGVtZW50
KTsKICAgICAvLyBUcmVhdHMgc2VwYXJhdGVseSB0aGUgY2FzZSB3aGVyZSB0aGlzIGVsZW1lbnQg
aGFzIHRoZSBmb3JtIGF0dHJpYnV0ZQogICAgIC8vIGZvciBwZXJmb3JtYW5jZSBjb25zaWRlcmF0
aW9uLgotICAgIGlmIChlLT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkKLSAgICAgICAgcmV0
dXJuIGZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShlKTsKKyAgICBpZiAoZWxlbWVu
dC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCisgICAgICAgIHJldHVybiBmb3JtRWxlbWVu
dEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUoZWxlbWVudCk7CiAKICAgICAvLyBDaGVjayBmb3IgdGhl
IHNwZWNpYWwgY2FzZSB3aGVyZSB0aGlzIGVsZW1lbnQgaXMgdGhlIHZlcnkgbGFzdCB0aGluZyBp
bgogICAgIC8vIHRoZSBmb3JtJ3MgdHJlZSBvZiBjaGlsZHJlbjsgd2UgZG9uJ3Qgd2FudCB0byB3
YWxrIHRoZSBlbnRpcmUgdHJlZSBpbiB0aGF0CiAgICAgLy8gY29tbW9uIGNhc2UgdGhhdCBvY2N1
cnMgZHVyaW5nIHBhcnNpbmc7IGluc3RlYWQgd2UnbGwganVzdCByZXR1cm4gYSB2YWx1ZQogICAg
IC8vIHRoYXQgc2F5cyAiYWRkIHRoaXMgZm9ybSBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGFy
cmF5Ii4KLSAgICBpZiAoZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgeworICAgIGlmIChlbGVt
ZW50LT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CiAgICAgICAgIHVuc2lnbmVkIGkgPSBtX2Fz
c29jaWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4OwogICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0
aGlzOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgewotICAgICAg
ICAgICAgaWYgKG5vZGUgPT0gZSkgeworICAgICAgICAgICAgaWYgKG5vZGUgPT0gZWxlbWVudCkg
ewogICAgICAgICAgICAgICAgICsrbV9hc3NvY2lhdGVkRWxlbWVudHNBZnRlckluZGV4OwogICAg
ICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5v
ZGUtPmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkKLSAgICAgICAgICAgICAgICAg
ICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG5vZGUpLT5mb3JtKCkg
PT0gdGhpcykKKyAgICAgICAgICAgICAgICAgICAgJiYgKHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
b2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwg
bm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgICAgICAgICAmJiBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpLT5mb3JtKCkgPT0gdGhpcykKICAgICAgICAgICAg
ICAgICArK2k7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG1fYXNzb2NpYXRlZEVsZW1l
bnRzQWZ0ZXJJbmRleCsrOwogfQogCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3Jt
RWxlbWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnJlZ2lzdGVyRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlKQogewotICAgIGRv
Y3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24oZSk7Ci0gICAgbV9j
aGVja2VkUmFkaW9CdXR0b25zLmFkZEJ1dHRvbihlKTsKKyAgICBpZiAoZS0+aXNGb3JtQ29udHJv
bEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGUpOworICAgICAgICBkb2N1bWVu
dCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKGVsZW1lbnQpOworICAgICAg
ICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMuYWRkQnV0dG9uKGVsZW1lbnQpOworICAgIH0KKyAgICAv
LyBGSVhNRTogUmVtb3ZlcyBsYXRlcgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fz
c29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgQVNTRVJUKGUgIT0gbV9hc3Nv
Y2lhdGVkRWxlbWVudHNbaV0pOwogICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmluc2VydChmb3Jt
RWxlbWVudEluZGV4KGUpLCBlKTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUZv
cm1FbGVtZW50KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUpCit2b2lkIEhUTUxGb3JtRWxlbWVu
dDo6cmVtb3ZlRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlKQogewotICAgIG1f
Y2hlY2tlZFJhZGlvQnV0dG9ucy5yZW1vdmVCdXR0b24oZSk7Ci0gICAgaWYgKGUtPmZhc3RIYXNB
dHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgaWYgKGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkp
CisgICAgICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5yZW1vdmVCdXR0b24oc3RhdGljX2Nhc3Q8
SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGUpKTsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9
IHRvSFRNTEVsZW1lbnQoZSk7CisgICAgaWYgKGVsZW1lbnQtPmZhc3RIYXNBdHRyaWJ1dGUoZm9y
bUF0dHIpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4OwogICAgICAgICBmb3IgKGluZGV4ID0g
MDsgaW5kZXggPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraW5kZXgpCiAgICAgICAg
ICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVudHNbaW5kZXhdID09IGUpCkBAIC01NTQsNyArNTcy
LDkgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6Ondhc1VzZXJTdWJtaXR0ZWQoKQogSFRNTEZvcm1D
b250cm9sRWxlbWVudCogSFRNTEZvcm1FbGVtZW50OjpkZWZhdWx0QnV0dG9uKCkgY29uc3QKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IG1fYXNz
b2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBpZiAoIW1fYXNzb2NpYXRlZEVsZW1lbnRzW2ld
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pOwogICAgICAgICBpZiAoY29u
dHJvbC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpCiAgICAgICAgICAgICByZXR1cm4gY29u
dHJvbDsKICAgICB9CkBAIC01NjQsMTcgKzU4NCwxNyBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBIVE1MRm9ybUVsZW1lbnQ6CiAKIGJvb2wgSFRNTEZvcm1FbGVtZW50OjpjaGVja1ZhbGlkaXR5
KCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4gY29udHJv
bHM7CisgICAgVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4gY29udHJvbHM7
CiAgICAgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyhjb250cm9scyk7CiAgICAgcmV0
dXJuIGNvbnRyb2xzLmlzRW1wdHkoKTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmNvbGxl
Y3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50PiA+JiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCit2b2lkIEhUTUxGb3JtRWxlbWVu
dDo6Y29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyhWZWN0b3I8UmVmUHRyPEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudD4gPiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQogewogICAgIFJlZlB0
cjxIVE1MRm9ybUVsZW1lbnQ+IHByb3RlY3Rvcih0aGlzKTsKICAgICAvLyBDb3B5IG1fYXNzb2Np
YXRlZEVsZW1lbnRzIGJlY2F1c2UgZXZlbnQgaGFuZGxlcnMgY2FsbGVkIGZyb20KICAgICAvLyBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkgbWlnaHQgY2hhbmdlIG1fYXNz
b2NpYXRlZEVsZW1lbnRzLgotICAgIFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4gPiBlbGVtZW50czsKKyAgICBWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4g
PiBlbGVtZW50czsKICAgICBlbGVtZW50cy5yZXNlcnZlQ2FwYWNpdHkobV9hc3NvY2lhdGVkRWxl
bWVudHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVk
RWxlbWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChtX2Fzc29jaWF0
ZWRFbGVtZW50c1tpXSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCShyZXZpc2lvbiA3MzAw
NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudDsKK2NsYXNz
IEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKIGNsYXNzIEZvcm1EYXRhOwogY2xhc3MgSFRNTEZvcm1D
b250cm9sRWxlbWVudDsKIGNsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7CkBAIC02NCw4ICs2NSw4IEBA
IHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgcmVuYW1lIHRoZXNlIHR3byBmdW5jdGlv
bnMgdG8gc2F5ICJmb3JtIGNvbnRyb2wiCiAgICAgLy8gb3IgImZvcm0tYXNzb2NpYXRlZCBlbGVt
ZW50IiBpbnN0ZWFkIG9mICJmb3JtIGVsZW1lbnQiLgotICAgIHZvaWQgcmVnaXN0ZXJGb3JtRWxl
bWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVGb3JtRWxlbWVu
dChIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50
KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlRm9ybUVsZW1lbnQoRm9y
bUFzc29jaWF0ZWRFbGVtZW50Kik7CiAgICAgdm9pZCByZWdpc3RlckltZ0VsZW1lbnQoSFRNTElt
YWdlRWxlbWVudCopOwogICAgIHZvaWQgcmVtb3ZlSW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50
Kik7CiAKQEAgLTEwOSw3ICsxMTAsNyBAQCBwdWJsaWM6CiAKICAgICBDaGVja2VkUmFkaW9CdXR0
b25zJiBjaGVja2VkUmFkaW9CdXR0b25zKCkgeyByZXR1cm4gbV9jaGVja2VkUmFkaW9CdXR0b25z
OyB9CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBhc3NvY2lh
dGVkRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Fzc29jaWF0ZWRFbGVtZW50czsgfQorICAg
IGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgYXNzb2NpYXRlZEVsZW1lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9hc3NvY2lhdGVkRWxlbWVudHM7IH0KIAogcHJpdmF0ZToKICAg
ICBIVE1MRm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC0x
MzEsMTMgKzEzMiwxMyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzdWJtaXQoRXZlbnQqLCBib29s
IGFjdGl2YXRlU3VibWl0QnV0dG9uLCBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgRm9ybVN1
Ym1pc3Npb25UcmlnZ2VyKTsKIAotICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50SW5kZXhXaXRoRm9y
bUF0dHJpYnV0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7Ci0gICAgdW5zaWduZWQgZm9ybUVs
ZW1lbnRJbmRleChIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgdW5zaWduZWQgZm9ybUVs
ZW1lbnRJbmRleFdpdGhGb3JtQXR0cmlidXRlKEVsZW1lbnQqKTsKKyAgICB1bnNpZ25lZCBmb3Jt
RWxlbWVudEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOwogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgc3VibWlzc2lvbiBzaG91bGQgYmUgcHJvY2VlZGVkLgogICAgIGJvb2wgdmFsaWRh
dGVJbnRlcmFjdGl2ZWx5KEV2ZW50Kik7CiAgICAgLy8gVmFsaWRhdGVzIGVhY2ggb2YgdGhlIGNv
bnRyb2xzLCBhbmQgc3RvcmVzIGNvbnRyb2xzIG9mIHdoaWNoICdpbnZhbGlkJwogICAgIC8vIGV2
ZW50IHdhcyBub3QgY2FuY2VsZWQgdG8gdGhlIHNwZWNpZmllZCB2ZWN0b3IuCi0gICAgdm9pZCBj
b2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4gPiYpOworICAgIHZvaWQgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9s
cyhWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiYpOwogCiAgICAgZnJpZW5k
IGNsYXNzIEhUTUxGb3JtQ29sbGVjdGlvbjsKIApAQCAtMTUxLDcgKzE1Miw3IEBAIHByaXZhdGU6
CiAKICAgICB1bnNpZ25lZCBtX2Fzc29jaWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4OwogICAgIHVu
c2lnbmVkIG1fYXNzb2NpYXRlZEVsZW1lbnRzQWZ0ZXJJbmRleDsKLSAgICBWZWN0b3I8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+IG1fYXNzb2NpYXRlZEVsZW1lbnRzOworICAgIFZlY3RvcjxGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQqPiBtX2Fzc29jaWF0ZWRFbGVtZW50czsKICAgICBWZWN0b3I8SFRN
TEltYWdlRWxlbWVudCo+IG1faW1hZ2VFbGVtZW50czsKIAogICAgIGJvb2wgbV93YXNVc2VyU3Vi
bWl0dGVkOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNzMwMDcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOSw5ICsxMzksMTEgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVDaGVja2VkUmFk
aQogICAgICAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogCiAgICAg
aWYgKGZvcm0oKSkgewotICAgICAgICBjb25zdCBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+JiBjb250cm9scyA9IGZvcm0oKS0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgICAgIGNv
bnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgY29udHJvbHMgPSBmb3JtKCktPmFz
c29jaWF0ZWRFbGVtZW50cygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29u
dHJvbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
IGNvbnRyb2wgPSBjb250cm9sc1tpXTsKKyAgICAgICAgICAgIGlmICghY29udHJvbHNbaV0tPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KGNvbnRyb2xzW2ldKTsKICAgICAgICAgICAgIGlmIChjb250cm9s
LT5uYW1lKCkgIT0gbmFtZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgaWYgKGNvbnRyb2wtPnR5cGUoKSAhPSB0eXBlKCkpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmplY3RF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTcgKzQ2LDI4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxPYmpl
Y3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSAKK2lubGluZSBIVE1M
T2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wgY3Jl
YXRlZEJ5UGFyc2VyKSAKICAgICA6IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9j
dW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikKKyAgICAsIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChmb3Jt
KQogICAgICwgbV9kb2NOYW1lZEl0ZW0odHJ1ZSkKICAgICAsIG1fdXNlRmFsbGJhY2tDb250ZW50
KGZhbHNlKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKG9iamVjdFRhZykpOworICAgIGlmICgh
dGhpcy0+Zm9ybSgpKQorICAgICAgICBzZXRGb3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7CisgICAg
aWYgKHRoaXMtPmZvcm0oKSkKKyAgICAgICAgdGhpcy0+Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVt
ZW50KHRoaXMpOwogfQogCi1QYXNzUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBIVE1MT2JqZWN0
RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCitpbmxpbmUgSFRNTE9iamVjdEVsZW1lbnQ6
On5IVE1MT2JqZWN0RWxlbWVudCgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MT2Jq
ZWN0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyKSk7CisgICAgaWYg
KGZvcm0oKSkKKyAgICAgICAgZm9ybSgpLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKK30KKwor
UGFzc1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gSFRNTE9iamVjdEVsZW1lbnQ6OmNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3Jt
RWxlbWVudCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBIVE1MT2JqZWN0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSwgY3JlYXRl
ZEJ5UGFyc2VyKSk7CiB9CiAKIFJlbmRlcldpZGdldCogSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRl
cldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdApAQCAtMzEzLDYgKzMyNCwxNCBAQCB2b2lkIEhU
TUxPYmplY3RFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtCiAgICAgSFRNTFBsdWdJbkltYWdlRWxl
bWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogfQogCit2b2lkIEhUTUxPYmplY3RFbGVtZW50
OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKQor
eworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybUF0dHIpCisgICAgICAgIGZvcm1BdHRyaWJ1
dGVDaGFuZ2VkKCk7CisgICAgZWxzZQorICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojph
dHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOworfQorCiB2b2lkIEhUTUxPYmpl
Y3RFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJl
Zm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCiB7CiAg
ICAgdXBkYXRlRG9jTmFtZWRJdGVtKCk7CkBAIC00NTMsNCArNDcyLDM0IEBAIHZvaWQgSFRNTE9i
amVjdEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXQKICAgICAgICAgYWRkU3VicmVzb3VyY2VVUkwo
dXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXNlTWFwKSk7CiB9CiAKK3ZvaWQgSFRNTE9i
amVjdEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSgpOworICAgIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoZGVlcCk7Cit9CisKK3ZvaWQgSFRNTE9iamVjdEVsZW1l
bnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApCit7CisgICAgRm9ybUFzc29jaWF0ZWRFbGVt
ZW50OjpyZW1vdmVkRnJvbVRyZWUoKTsKKyAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW1v
dmVkRnJvbVRyZWUoZGVlcCk7Cit9CisKK2Jvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OmFwcGVuZEZv
cm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudHMg
dGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IEF0b21pY1N0cmlu
ZyYgSFRNTE9iamVjdEVsZW1lbnQ6OmZvcm1Db250cm9sTmFtZSgpIGNvbnN0Cit7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKG1fbmFtZSk7CisgICAgcmV0dXJuIG5hbWUuaXNOdWxsKCkg
PyBlbXB0eUF0b20gOiBuYW1lOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxPYmplY3RF
bGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAoreworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2VydmljZVR5cGUobV9zZXJ2aWNlVHlwZSk7CisgICAgcmV0dXJuIHNlcnZpY2VUeXBlLmlz
TnVsbCgpID8gZW1wdHlBdG9tIDogc2VydmljZVR5cGU7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5oCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMyArMjMsMTcgQEAKICNpZm5kZWYg
SFRNTE9iamVjdEVsZW1lbnRfaAogI2RlZmluZSBIVE1MT2JqZWN0RWxlbWVudF9oCiAKKyNpbmNs
dWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTE9iamVjdEVsZW1l
bnQgOiBwdWJsaWMgSFRNTFBsdWdJbkltYWdlRWxlbWVudCB7CitjbGFzcyBIVE1MRm9ybUVsZW1l
bnQ7CisKK2NsYXNzIEhUTUxPYmplY3RFbGVtZW50IDogcHVibGljIEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQsIHB1YmxpYyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhUTUxPYmplY3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50KiwgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworICAgIHZpcnR1
YWwgfkhUTUxPYmplY3RFbGVtZW50KCk7CiAKICAgICBib29sIGlzRG9jTmFtZWRJdGVtKCkgY29u
c3QgeyByZXR1cm4gbV9kb2NOYW1lZEl0ZW07IH0KIApAQCAtNDAsMTAgKzQ0LDMyIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgdXNlRmFsbGJhY2tDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
bV91c2VGYWxsYmFja0NvbnRlbnQ7IH0KICAgICB2b2lkIHJlbmRlckZhbGxiYWNrQ29udGVudCgp
OwogCisgICAgLy8gSW1wbGVtZW50YXRpb25zIG9mIEZvcm1Bc3NvY2lhdGVkRWxlbWVudAorICAg
IEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6Zm9ybSgpOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRyb2xWYWx1ZU1hdGNo
ZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUNv
bnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZvcm1D
b250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiKSB7IEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dDo6c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihiKTsgfQorCisgICAgdmlydHVh
bCBib29sIGlzRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCB3aWxsVmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ6OndpbGxWYWxpZGF0ZSgpOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlzYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmRpc2FibGVkKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCB2YWx1ZSkgeyBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQ6OnNldERpc2FibGVkKHZhbHVlKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VudW1l
cmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYXBwZW5k
Rm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmli
dXRlQ2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CisKKyAg
ICB1c2luZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+OjpyZWY7CisgICAgdXNpbmcgVHJlZVNo
YXJlZDxDb250YWluZXJOb2RlPjo6ZGVyZWY7CisKIHByaXZhdGU6Ci0gICAgSFRNTE9iamVjdEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJz
ZXIpOworICAgIEhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCosIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVk
RnJvbVRyZWUoYm9vbCBkZWVwKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7
CkBAIC02OSw2ICs5NSwxNCBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDbGFz
c0lkKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgeyBy
ZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpIHsg
ZGVyZWYoKTsgfQorCisgICAgdmlydHVhbCBib29sIGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQo
KSB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1l
bnQoKTsgfQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFt
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5
cGUoKSBjb25zdDsKKwogICAgIEF0b21pY1N0cmluZyBtX2lkOwogICAgIFN0cmluZyBtX2NsYXNz
SWQ7CiAgICAgYm9vbCBtX2RvY05hbWVkSXRlbSA6IDE7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TFRhZ05hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4J
KHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBub2JyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQK
IG5vZW1iZWQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogbm9mcmFtZXMgaW50ZXJmYWNlTmFt
ZT1IVE1MRWxlbWVudAogbm9sYXllciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1vYmplY3Qg
Y29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgorb2JqZWN0IGNvbnN0cnVjdG9yTmVlZHNG
b3JtRWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgogb2wgaW50ZXJmYWNl
TmFtZT1IVE1MT0xpc3RFbGVtZW50CiBvcHRncm91cCBpbnRlcmZhY2VOYW1lPUhUTUxPcHRHcm91
cEVsZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAogb3B0aW9uIGNvbnN0cnVjdG9y
TmVlZHNGb3JtRWxlbWVudApJbmRleDogV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCShyZXZp
c2lvbiA3MzAwNykKKysrIFdlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1BTFdB
WVNfSU5MSU5FIFZhbGlkYXRpb25NZXNzYWdlOjpWYWxpZGF0aW9uTWVzc2FnZShIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBlbGVtZW50KQorQUxXQVlTX0lOTElORSBWYWxpZGF0aW9uTWVzc2FnZTo6
VmFsaWRhdGlvbk1lc3NhZ2UoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlbGVtZW50KQogICAgIDog
bV9lbGVtZW50KGVsZW1lbnQpCiB7CiB9CkBAIC00NSw3ICs0NSw3IEBAIFZhbGlkYXRpb25NZXNz
YWdlOjp+VmFsaWRhdGlvbk1lc3NhZ2UoKQogICAgIGhpZGVNZXNzYWdlKCk7CiB9CiAKLVBhc3NP
d25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+IFZhbGlkYXRpb25NZXNzYWdlOjpjcmVhdGUoSFRNTEZv
cm1Db250cm9sRWxlbWVudCogZWxlbWVudCkKK1Bhc3NPd25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+
IFZhbGlkYXRpb25NZXNzYWdlOjpjcmVhdGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlbGVtZW50
KQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoZWxlbWVudCkp
OwogfQpJbmRleDogV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmgJKHJldmlzaW9uIDczMDA3KQorKysg
V2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDIw
ICszOCwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ7CitjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ7CiAKIGNsYXNzIFZhbGlkYXRp
b25NZXNzYWdlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gY3JlYXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gY3JlYXRlKEZvcm1B
c3NvY2lhdGVkRWxlbWVudCopOwogICAgIH5WYWxpZGF0aW9uTWVzc2FnZSgpOwogICAgIFN0cmlu
ZyBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CiAgICAgdm9pZCBzZXRNZXNz
YWdlKGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRlOgotICAgIFZhbGlkYXRpb25NZXNzYWdlKEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKKyAgICBWYWxpZGF0aW9uTWVzc2FnZShGb3JtQXNzb2Np
YXRlZEVsZW1lbnQqKTsKICAgICB2b2lkIGhpZGVNZXNzYWdlKFRpbWVyPFZhbGlkYXRpb25NZXNz
YWdlPiogPSAwKTsKIAotICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIG1fZWxlbWVudDsKKyAg
ICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIG1fZWxlbWVudDsKICAgICBTdHJpbmcgbV9tZXNzYWdl
OwogICAgIE93blB0cjxUaW1lcjxWYWxpZGF0aW9uTWVzc2FnZT4gPiBtX3RpbWVyOwogfTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9odG1s
L1ZhbGlkaXR5U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwyMCArNDIsMjEgQEAgU3Ry
aW5nIFZhbGlkaXR5U3RhdGU6OnZhbGlkYXRpb25NZXNzYWdlKAogCiAgICAgaWYgKGN1c3RvbUVy
cm9yKCkpCiAgICAgICAgIHJldHVybiBtX2N1c3RvbUVycm9yTWVzc2FnZTsKLSAgICBib29sIGlz
SW5wdXRFbGVtZW50ID0gbV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKTsKLSAgICBib29s
IGlzVGV4dEFyZWFFbGVtZW50ID0gbV9jb250cm9sLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKTsK
KyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQobV9jb250cm9sKTsKKyAg
ICBib29sIGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSAm
JiBlbGVtZW50LT5oYXNUYWdOYW1lKGlucHV0VGFnKTsKKyAgICBib29sIGlzVGV4dEFyZWFFbGVt
ZW50ID0gZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSAmJiBlbGVtZW50LT5oYXNUYWdO
YW1lKHRleHRhcmVhVGFnKTsKICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIGZvbGxvd2luZyBjaGVj
a3MgaXMgbWVhbmluZ2Z1bC4gZS5nLiBXZSdkIGxpa2UgdG8gc2hvdyB0aGUKICAgICAvLyB2YWx1
ZU1pc3NpbmcgbWVzc2FnZSBldmVuIGlmIHRoZSBjb250cm9sIGhhcyBvdGhlciB2YWxpZGF0aW9u
IGVycm9ycy4KICAgICBpZiAodmFsdWVNaXNzaW5nKCkpIHsKLSAgICAgICAgaWYgKG1fY29udHJv
bC0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShzZWxlY3RUYWcpKQogICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVN
aXNzaW5nRm9yU2VsZWN0VGV4dCgpOwogICAgICAgICBpZiAoaXNJbnB1dEVsZW1lbnQpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCkt
PnZhbHVlTWlzc2luZ1RleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4oZWxlbWVudCktPnZhbHVlTWlzc2luZ1RleHQoKTsKICAgICAgICAgcmV0
dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwogICAgIH0KICAgICBpZiAo
dHlwZU1pc21hdGNoKCkpIHsKICAgICAgICAgaWYgKGlzSW5wdXRFbGVtZW50KQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpLT50eXBl
TWlzbWF0Y2hUZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KGVsZW1lbnQpLT50eXBlTWlzbWF0Y2hUZXh0KCk7CiAgICAgICAgIHJldHVybiB2
YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKICAgICB9CiAgICAgaWYgKHBhdHRl
cm5NaXNtYXRjaCgpKQpAQCAtNjUsNyArNjYsNyBAQCBTdHJpbmcgVmFsaWRpdHlTdGF0ZTo6dmFs
aWRhdGlvbk1lc3NhZ2UoCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50Kj4obV9jb250cm9sKTsKKyAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRl
eHQgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCo+KGVsZW1lbnQpOwog
ICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUb29Mb25nVGV4dChudW1HcmFwaGVtZUNs
dXN0ZXJzKHRleHQtPnZhbHVlKCkpLCB0ZXh0LT5tYXhMZW5ndGgoKSk7CiAgICAgfQogICAgIGlm
IChyYW5nZVVuZGVyZmxvdygpKSB7CkBAIC03MywyMSArNzQsMjEgQEAgU3RyaW5nIFZhbGlkaXR5
U3RhdGU6OnZhbGlkYXRpb25NZXNzYWdlKAogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VVbmRlcmZsb3dUZXh0KHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpLT5taW5pbXVtU3RyaW5nKCkpOworICAgICAgICByZXR1
cm4gdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZVVuZGVyZmxvd1RleHQoc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KGVsZW1lbnQpLT5taW5pbXVtU3RyaW5nKCkpOwogICAgIH0KICAgICBpZiAo
cmFuZ2VPdmVyZmxvdygpKSB7CiAgICAgICAgIGlmICghaXNJbnB1dEVsZW1lbnQpIHsKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlT3ZlcmZs
b3dUZXh0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpLT5tYXhpbXVt
U3RyaW5nKCkpOworICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZU92ZXJmbG93
VGV4dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCktPm1heGltdW1TdHJp
bmcoKSk7CiAgICAgfQogICAgIGlmIChzdGVwTWlzbWF0Y2goKSkgewogICAgICAgICBpZiAoIWlz
SW5wdXRFbGVtZW50KSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwor
ICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlU3RlcE1p
c21hdGNoVGV4dChpbnB1dC0+c3RlcEJhc2VTdHJpbmcoKSwgaW5wdXQtPnN0ZXBTdHJpbmcoKSk7
CiAgICAgfQogCkBAIC0xMDIsMTIgKzEwMywxMyBAQCB2b2lkIFZhbGlkaXR5U3RhdGU6OnNldEN1
c3RvbUVycm9yTWVzc2FnCiAKIGJvb2wgVmFsaWRpdHlTdGF0ZTo6dmFsdWVNaXNzaW5nKCkgY29u
c3QKIHsKLSAgICBpZiAobV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewotICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
PihtX2NvbnRyb2wpOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCht
X2NvbnRyb2wpOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgeworICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnQqPihlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIGlucHV0LT52YWx1ZU1pc3NpbmcoaW5wdXQt
PnZhbHVlKCkpOwogICAgIH0KLSAgICBpZiAobV9jb250cm9sLT5oYXNUYWdOYW1lKHRleHRhcmVh
VGFnKSkgewotICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYSA9IHN0YXRpY19j
YXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihtX2NvbnRyb2wpOworICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgeworICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0
ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihlbGVtZW50KTsKICAg
ICAgICAgcmV0dXJuIHRleHRBcmVhLT52YWx1ZU1pc3NpbmcodGV4dEFyZWEtPnZhbHVlKCkpOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTUsMTQgKzExNywxNCBAQCBib29sIFZhbGlk
aXR5U3RhdGU6OnZhbHVlTWlzc2luZygpIGNvbnN0CiAKIGJvb2wgVmFsaWRpdHlTdGF0ZTo6dHlw
ZU1pc21hdGNoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29udHJvbC0+aGFzVGFnTmFtZShpbnB1
dFRhZykpCisgICAgaWYgKCF0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUoaW5w
dXRUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpLT50eXBlTWlzbWF0Y2goKTsKIH0KIAogYm9vbCBW
YWxpZGl0eVN0YXRlOjpwYXR0ZXJuTWlzbWF0Y2goKSBjb25zdAogewotICAgIGlmICghbV9jb250
cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICBpZiAoIXRvSFRNTEVsZW1lbnQobV9jb250
cm9sKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPiht
X2NvbnRyb2wpOwogICAgIHJldHVybiBpbnB1dC0+cGF0dGVybk1pc21hdGNoKGlucHV0LT52YWx1
ZSgpKTsKQEAgLTEzMCwxMSArMTMyLDExIEBAIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cGF0dGVybk1p
c21hdGNoKCkgY28KIAogYm9vbCBWYWxpZGl0eVN0YXRlOjp0b29Mb25nKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgeworICAgIGlmICh0b0hUTUxF
bGVtZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CiAgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29u
dHJvbCk7CiAgICAgICAgIHJldHVybiBpbnB1dC0+dG9vTG9uZyhpbnB1dC0+dmFsdWUoKSwgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OkNoZWNrRGlydHlGbGFnKTsKICAgICB9Ci0gICAgaWYg
KG1fY29udHJvbC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsKKyAgICBpZiAodG9IVE1MRWxl
bWVudChtX2NvbnRyb2wpLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgewogICAgICAgICBIVE1M
VGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1l
bnQqPihtX2NvbnRyb2wpOwogICAgICAgICByZXR1cm4gdGV4dEFyZWEtPnRvb0xvbmcodGV4dEFy
ZWEtPnZhbHVlKCksIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpDaGVja0RpcnR5RmxhZyk7
CiAgICAgfQpAQCAtMTQzLDcgKzE0NSw3IEBAIGJvb2wgVmFsaWRpdHlTdGF0ZTo6dG9vTG9uZygp
IGNvbnN0CiAKIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cmFuZ2VVbmRlcmZsb3coKSBjb25zdAogewot
ICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICBpZiAoIXRvSFRN
TEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgIHJldHVybiBpbnB1dC0+cmFuZ2VVbmRlcmZs
b3coaW5wdXQtPnZhbHVlKCkpOwpAQCAtMTUxLDcgKzE1Myw3IEBAIGJvb2wgVmFsaWRpdHlTdGF0
ZTo6cmFuZ2VVbmRlcmZsb3coKSBjb24KIAogYm9vbCBWYWxpZGl0eVN0YXRlOjpyYW5nZU92ZXJm
bG93KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZykp
CisgICAgaWYgKCF0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUoaW5wdXRUYWcp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKTsKICAgICByZXR1cm4gaW5w
dXQtPnJhbmdlT3ZlcmZsb3coaW5wdXQtPnZhbHVlKCkpOwpAQCAtMTU5LDcgKzE2MSw3IEBAIGJv
b2wgVmFsaWRpdHlTdGF0ZTo6cmFuZ2VPdmVyZmxvdygpIGNvbnMKIAogYm9vbCBWYWxpZGl0eVN0
YXRlOjpzdGVwTWlzbWF0Y2goKSBjb25zdAogewotICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdO
YW1lKGlucHV0VGFnKSkKKyAgICBpZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFn
TmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwog
ICAgIHJldHVybiBpbnB1dC0+c3RlcE1pc21hdGNoKGlucHV0LT52YWx1ZSgpKTsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1Zh
bGlkaXR5U3RhdGUuaAkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvVmFsaWRpdHlT
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNCArMjQsMTQgQEAKICNpZm5kZWYgVmFsaWRp
dHlTdGF0ZV9oCiAjZGVmaW5lIFZhbGlkaXR5U3RhdGVfaAogCi0jaW5jbHVkZSAiSFRNTEZvcm1D
b250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIkZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
VmFsaWRpdHlTdGF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8VmFsaWRpdHlTdGF0ZT4gY3JlYXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
IGNvbnRyb2wpCisgICAgc3RhdGljIFBhc3NPd25QdHI8VmFsaWRpdHlTdGF0ZT4gY3JlYXRlKEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCogY29udHJvbCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgVmFsaWRpdHlTdGF0ZShjb250cm9sKSk7CiAgICAgfQpAQCAtNTQsMTIgKzU0LDEy
IEBAIHB1YmxpYzoKICAgICBib29sIHZhbGlkKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgVmFs
aWRpdHlTdGF0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sKSA6IG1fY29udHJvbChj
b250cm9sKSB7IH0KKyAgICBWYWxpZGl0eVN0YXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogY29u
dHJvbCkgOiBtX2NvbnRyb2woY29udHJvbCkgeyB9CiAKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlk
Q29sb3JTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZEVtYWls
QWRkcmVzcyhjb25zdCBTdHJpbmcmKTsKIAotICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIG1f
Y29udHJvbDsKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIG1fY29udHJvbDsKICAgICBTdHJp
bmcgbV9jdXN0b21FcnJvck1lc3NhZ2U7CiB9OwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Gb3Jt
U3VibWlzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Np
b24uY3BwCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDEwICsxNzUsMTEgQEAgUGFzc1JlZlB0cjxGb3Jt
U3VibWlzc2lvbj4gRm9ybVN1Ym1pc3NpbwogICAgIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5n
PiA+IGZvcm1WYWx1ZXM7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+YXNz
b2NpYXRlZEVsZW1lbnRzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogY29udHJvbCA9IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpW2ldOworICAgICAg
ICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVu
dHMoKVtpXTsKICAgICAgICAgaWYgKCFjb250cm9sLT5kaXNhYmxlZCgpKQogICAgICAgICAgICAg
Y29udHJvbC0+YXBwZW5kRm9ybURhdGEoKmRvbUZvcm1EYXRhLCBpc011bHRpUGFydEZvcm0pOwot
ICAgICAgICBpZiAoY29udHJvbC0+aGFzTG9jYWxOYW1lKGlucHV0VGFnKSkgeworICAgICAgICBI
VE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoY29udHJvbCk7CisgICAgICAgIGlm
IChlbGVtZW50LT5oYXNMb2NhbE5hbWUoaW5wdXRUYWcpKSB7CiAgICAgICAgICAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihjb250cm9s
KTsKICAgICAgICAgICAgIGlmIChpbnB1dC0+aXNUZXh0RmllbGQoKSkgewogICAgICAgICAgICAg
ICAgIGZvcm1WYWx1ZXMuYXBwZW5kKHBhaXI8U3RyaW5nLCBTdHJpbmc+KGlucHV0LT5uYW1lKCks
IGlucHV0LT52YWx1ZSgpKSk7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTExLTMwICBL
ZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV0IEhUTUxPYmplY3RFbGVtZW50IGJlIGEg
Zm9ybSBhc3NvY2lhdGVkIGVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ4ODIxCisKKyAgICAgICAgTW9kaWZpZWQgdG8gdXNlIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudCBpbnN0ZWFkIG9mIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQuCisKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAgKC1bV2ViSFRN
TFJlcHJlc2VudGF0aW9uIGVsZW1lbnRXaXRoTmFtZTppbkZvcm06XSk6IE1vZGlmaWVkIHRvIHVz
ZQorICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50LgorICAgICAgICAoLVtXZWJIVE1MUmVwcmVzZW50YXRpb24gY29udHJvbHNJbkZv
cm06XSk6IERpdHRvLgorCiAyMDEwLTExLTI5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0JKHJldmlzaW9uIDczMDA3KQorKysg
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjg1LDEyICsyODUsMTIgQEAgLSAoRE9NRWxlbWVudCAqKWVsZW1lbnRXaXRoTmFtZToo
TlNTdHJpbgogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudEZy
b21ET01FbGVtZW50KGZvcm0pOwogICAgIGlmICghZm9ybUVsZW1lbnQpCiAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZWxlbWVu
dHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgY29uc3QgVmVjdG9y
PEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5hc3NvY2lh
dGVkRWxlbWVudHMoKTsKICAgICBBdG9taWNTdHJpbmcgdGFyZ2V0TmFtZSA9IG5hbWU7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsdCA9IGVsZW1lbnRzW2ldOworICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQqIGVsdCA9IGVsZW1lbnRzW2ldOwogICAgICAgICBpZiAoZWx0LT5u
YW1lKCkgPT0gdGFyZ2V0TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBraXQoZWx0KTsKKyAgICAg
ICAgICAgIHJldHVybiBraXQodG9IVE1MRWxlbWVudChlbHQpKTsKICAgICB9CiAgICAgcmV0dXJu
IG5pbDsKIH0KQEAgLTMzMywxMCArMzMzLDEwIEBAIC0gKE5TQXJyYXkgKiljb250cm9sc0luRm9y
bTooRE9NRWxlbWVudCAKICAgICBpZiAoIWZvcm1FbGVtZW50KQogICAgICAgICByZXR1cm4gbmls
OwogICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHRzID0gbmlsOwotICAgIGNvbnN0IFZlY3RvcjxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0
ZWRFbGVtZW50cygpOworICAgIGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYg
ZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChl
bGVtZW50c1tpXS0+aXNFbnVtZXJhdGFibGUoKSkgeyAvLyBTa2lwIG9wdGlvbiBlbGVtZW50cywg
b3RoZXIgZHVkcwotICAgICAgICAgICAgRE9NRWxlbWVudCogZGUgPSBraXQoZWxlbWVudHNbaV0p
OworICAgICAgICAgICAgRE9NRWxlbWVudCogZGUgPSBraXQodG9IVE1MRWxlbWVudChlbGVtZW50
c1tpXSkpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHRzKQogICAgICAgICAgICAgICAgIHJlc3Vs
dHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmRlXTsKICAgICAgICAgICAgIGVs
c2UKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczMDA3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMTEtMzAgIEtlbmljaGkgSXNoaWJh
c2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBMZXQgSFRNTE9iamVjdEVsZW1lbnQgYmUgYSBmb3JtIGFzc29jaWF0
ZWQgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDg4MjEKKworICAgICAgICBBZGRzIGEgdGVzdCB0byBlbnN1cmUgdGhlIG9yZGVyIG9mIGZv
cm0uZWxlbWVudHMgYXR0cmlidXRlLgorICAgICAgICBVcGRhdGVzIHR3byB0ZXN0cyB0byBjaGVj
ayB3aGV0aGVyIG9iamVjdCBlbGVtZW50cyBhcmUgaGFuZGxlZAorICAgICAgICBjb3JyZWN0bHkg
aW4gZm9ybS5lbGVtZW50cyBhdHRyaWJ1dGUuCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2Zvcm0t
YXR0cmlidXRlLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2Zv
cm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tYXR0cmlidXRlLmpzOiBV
cGRhdGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlv
bi1lbGVtZW50cy1vcmRlci5qczogQWRkZWQuCisgICAgICAgIChjaGVja09yZGVyKToKKyAgICAg
ICAgKiBmYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMuanM6
IFVwZGF0ZWQuCisKIDIwMTAtMTEtMzAgIFJvYiBCdWlzICA8cndsYnVpc0BnbWFpbC5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9mb3JtLWF0dHJpYnV0ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9mb3JtLWF0dHJpYnV0ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDczMDA3
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWF0dHJpYnV0ZS1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTQsMTQgKzQsMTQgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQQogCiAKIC0gQ2hlY2tzIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZvcm0g
YXR0cmlidXRlIGZvciBlYWNoIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cy4KLUZJWE1FOiA8bGFi
ZWw+IGFuZCA8b2JqZWN0PiBkb24ndCBzdXBwb3J0IHRoZSBmb3JtIGF0dHJpYnV0ZSBmb3Igbm93
LgorRklYTUU6IDxsYWJlbD4gZG9lc24ndCBzdXBwb3J0IHRoZSBmb3JtIGF0dHJpYnV0ZSBmb3Ig
bm93LgogUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYnV0dG9uIilbMF0uZm9y
bSBpcyBvd25lcgogUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZmllbGRzZXQi
KVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJp
bnB1dCIpWzBdLmZvcm0gaXMgb3duZXIKIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoImtleWdlbiIpWzBdLmZvcm0gaXMgb3duZXIKIEZBSUwgZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImxhYmVsIilbMF0uZm9ybSBzaG91bGQgYmUgW29iamVjdCBIVE1MRm9ybUVsZW1l
bnRdLiBXYXMgbnVsbC4KIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm1ldGVy
IilbMF0uZm9ybSBpcyBvd25lcgotRkFJTCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
b2JqZWN0IilbMF0uZm9ybSBzaG91bGQgYmUgW29iamVjdCBIVE1MRm9ybUVsZW1lbnRdLiBXYXMg
bnVsbC4KK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdLmZv
cm0gaXMgb3duZXIKIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm91dHB1dCIp
WzBdLmZvcm0gaXMgb3duZXIKIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBy
b2dyZXNzIilbMF0uZm9ybSBpcyBvd25lcgogUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgic2VsZWN0IilbMF0uZm9ybSBpcyBvd25lcgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gNzMwMDcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29s
bGVjdGlvbi1lbGVtZW50cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3
IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiBUaGlzIHRl
c3QgZG9lcyBub3QgYWRkIG9iamVjdCBlbGVtZW50IGFzIGEgbGlzdGVkIGVsZW1lbnQuIFNlcGFy
YXRlIHRlc3Qgd2lsbCBjb3ZlciB0aGF0LgotUEFTUyBvd25lci5lbGVtZW50cy5sZW5ndGggaXMg
MjIKK1BBU1Mgb3duZXIuZWxlbWVudHMubGVuZ3RoIGlzIDIzCiBQQVNTIG93bmVyLmVsZW1lbnRz
WzBdLmlkIGlzICdidXR0b24xJwogUEFTUyBvd25lci5lbGVtZW50c1sxXS5pZCBpcyAnZmllbGRz
ZXQxJwogUEFTUyBvd25lci5lbGVtZW50c1syXS5pZCBpcyAnaW5wdXRoaWRkZW4nCkBAIC0yNCw5
ICsyNCwxMCBAQCBQQVNTIG93bmVyLmVsZW1lbnRzWzE1XS5pZCBpcyAnaW5wdXRzdWJtCiBQQVNT
IG93bmVyLmVsZW1lbnRzWzE2XS5pZCBpcyAnaW5wdXRyZXNldCcKIFBBU1Mgb3duZXIuZWxlbWVu
dHNbMTddLmlkIGlzICdpbnB1dGJ1dHRvbicKIFBBU1Mgb3duZXIuZWxlbWVudHNbMThdLmlkIGlz
ICdrZXlnZW4xJwotUEFTUyBvd25lci5lbGVtZW50c1sxOV0uaWQgaXMgJ291dHB1dDEnCi1QQVNT
IG93bmVyLmVsZW1lbnRzWzIwXS5pZCBpcyAnc2VsZWN0MScKLVBBU1Mgb3duZXIuZWxlbWVudHNb
MjFdLmlkIGlzICd0ZXh0YXJlYTEnCitQQVNTIG93bmVyLmVsZW1lbnRzWzE5XS5pZCBpcyAnb2Jq
ZWN0MScKK1BBU1Mgb3duZXIuZWxlbWVudHNbMjBdLmlkIGlzICdvdXRwdXQxJworUEFTUyBvd25l
ci5lbGVtZW50c1syMV0uaWQgaXMgJ3NlbGVjdDEnCitQQVNTIG93bmVyLmVsZW1lbnRzWzIyXS5p
ZCBpcyAndGV4dGFyZWExJwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNU
IENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1l
bGVtZW50cy1vcmRlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVu
dHMtb3JkZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACitUaGlz
IHRlc3QgZXhhbWluZXMgdGhlIG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50cyB3aGlj
aCBhcmUgY2xhc3NpZmllZCBhcyAnbGlzdGVkJy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKKy0gQ2hlY2tzIHRoZSBvcmRlciBvZiBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudHMuCitQ
QVNTIGNoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwg
b3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorCistIENoZWNrcyB0aGUgb3JkZXIg
YWZ0ZXIgc29tZSBlbGVtZW50cyByZW1vdmVkL2luc2VydGVkLgorUEFTUyBjaGVja09yZGVyKFti
dXR0b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFd
KSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRw
dXQsIHNlbGVjdCwgdGV4dGFyZWFdKSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIoW29iamVjdCwg
ZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJP
SyIKK1BBU1MgY2hlY2tPcmRlcihbb2JqZWN0LCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0
cHV0LCBzZWxlY3QsIHRleHRhcmVhLCBidXR0b25dKSBpcyAiT0siCisKKy0gQ2hlY2tzIHRoZSBv
cmRlciBvZiBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudHMgd2l0aCBmb3JtIGF0dHJpYnV0ZS4KK1BB
U1MgY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBv
dXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKSBpcyAiT0siCisKKy0gQ2hlY2tzIHRoZSBvcmRlciBh
ZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQgd2l0aCBmb3JtIGF0dHJpYnV0ZS4K
K1BBU1MgY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0
LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFtmaWVsZHNldCwg
aW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorUEFTUyBj
aGVja09yZGVyKFtmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3RdKSBpcyAi
T0siCitQQVNTIGNoZWNrT3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91
dHB1dCwgc2VsZWN0XSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmllbGRz
ZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3RdKSBpcyAiT0siCitQQVNT
IGNoZWNrT3JkZXIoW3RleHRhcmVhLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBv
dXRwdXQsIHNlbGVjdCwgYnV0dG9uXSkgaXMgIk9LIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitUZXN0CisKKworCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVy
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVj
dGlvbi1lbGVtZW50cy1vcmRlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNj
cmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3Nj
cmlwdC10ZXN0cy9mb3JtLWF0dHJpYnV0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWF0dHJpYnV0ZS5qcwkocmV2aXNpb24gNzMwMDcp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWF0dHJpYnV0ZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJwogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpOwog
CiBkZWJ1ZygnLSBDaGVja3MgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZm9ybSBhdHRyaWJ1dGUgZm9y
IGVhY2ggZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzLicpOwotZGVidWcoJ0ZJWE1FOiAmbHQ7bGFi
ZWwmZ3Q7IGFuZCAmbHQ7b2JqZWN0Jmd0OyBkb25cJ3Qgc3VwcG9ydCB0aGUgZm9ybSBhdHRyaWJ1
dGUgZm9yIG5vdy4nKTsKK2RlYnVnKCdGSVhNRTogJmx0O2xhYmVsJmd0OyBkb2VzblwndCBzdXBw
b3J0IHRoZSBmb3JtIGF0dHJpYnV0ZSBmb3Igbm93LicpOwogY29udGFpbmVyLmlubmVySFRNTCA9
ICc8Zm9ybSBpZD1vd25lcj48L2Zvcm0+JyArCiAgICAgJzxidXR0b24gbmFtZT12aWN0aW0gZm9y
bT1vd25lciAvPicgKwogICAgICc8ZmllbGRzZXQgbmFtZT12aWN0aW0gZm9ybT1vd25lciAvPicg
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0
aW9uLWVsZW1lbnRzLW9yZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9y
bXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVj
dGlvbi1lbGVtZW50cy1vcmRlci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDAgQEAKK2Rl
c2NyaXB0aW9uKCJUaGlzIHRlc3QgZXhhbWluZXMgdGhlIG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRl
ZCBlbGVtZW50cyB3aGljaCBhcmUgY2xhc3NpZmllZCBhcyAnbGlzdGVkJy4iKTsKKwordmFyIGNv
bnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChjb250YWluZXIpOwordmFyIG93bmVyOworCitmdW5jdGlvbiBjaGVja09yZGVy
KHZpY3RpbXMpIHsKKyAgICBpZiAob3duZXIuZWxlbWVudHMubGVuZ3RoICE9IHZpY3RpbXMubGVu
Z3RoKQorICAgICAgICByZXR1cm4gJ2xlbmd0aCBtaXNtYXRjaCwgZWxlbWVudHMubGVuZ3RoID0g
JyArIG93bmVyLmVsZW1lbnRzLmxlbmd0aCArCisgICAgICAgICAgICAgICAnLCBleHBlY3RlZCBs
ZW5ndGggPSAnICsgdmljdGltcy5sZW5ndGg7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWN0
aW1zLmxlbmd0aDsgKytpKQorICAgICAgICBpZiAob3duZXIuZWxlbWVudHNbaV0gIT0gdmljdGlt
c1tpXSkKKyAgICAgICAgICAgIHJldHVybiAnZWxlbWVudCBtaXNtYXRjaCBhdCBpbmRleCAnICsg
aTsKKyAgICByZXR1cm4gJ09LJzsKK30KKworZGVidWcoJy0gQ2hlY2tzIHRoZSBvcmRlciBvZiBm
b3JtIGFzc29jaWF0ZWQgZWxlbWVudHMuJyk7Citjb250YWluZXIuaW5uZXJIVE1MID0gJzxmb3Jt
IGlkPW93bmVyPicgKworICAgICc8YnV0dG9uIG5hbWU9dmljdGltPjwvYnV0dG9uPicgKworICAg
ICc8ZmllbGRzZXQgbmFtZT12aWN0aW0+VGVzdDwvZmllbGRzZXQ+JyArCisgICAgJzxpbnB1dCBu
YW1lPXZpY3RpbS8+JyArCisgICAgJzxrZXlnZW4gbmFtZT12aWN0aW0+PC9rZXlnZW4+JyArCisg
ICAgJzxsYWJlbCBuYW1lPXZpY3RpbT48L2xhYmVsPicgKworICAgICc8bWV0ZXIgbmFtZT12aWN0
aW0+PC9tZXRlcj4nICsKKyAgICAnPG9iamVjdCBuYW1lPXZpY3RpbT48L29iamVjdD4nICsKKyAg
ICAnPG91dHB1dCBuYW1lPXZpY3RpbT48L291dHB1dD4nICsKKyAgICAnPHByb2dyZXNzIG5hbWU9
dmljdGltPjwvcHJvZ3Jlc3M+JyArCisgICAgJzxzZWxlY3QgbmFtZT12aWN0aW0+PC9zZWxlY3Q+
JyArCisgICAgJzx0ZXh0YXJlYSBuYW1lPXZpY3RpbT48L3RleHRhcmVhPicrCisgICAgJzwvZm9y
bT4nOworb3duZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXInKTsKK3ZhciBidXR0
b24gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMF07Cit2YXIgZmll
bGRzZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZmllbGRzZXQnKVswXTsKK3Zh
ciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdOwordmFy
IGtleWdlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXlnZW4nKVswXTsKK3Zh
ciBsYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsYWJlbCcpWzBdOwordmFy
IG1ldGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21ldGVyJylbMF07Cit2YXIg
b2JqZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpWzBdOwordmFy
IG91dHB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvdXRwdXQnKVswXTsKK3Zh
ciBwcm9ncmVzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwcm9ncmVzcycpWzBd
OwordmFyIHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKVsw
XTsKK3ZhciB0ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJl
YScpWzBdOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSknLCAnIk9LIicpOworCitk
ZWJ1ZygnJyk7CitkZWJ1ZygnLSBDaGVja3MgdGhlIG9yZGVyIGFmdGVyIHNvbWUgZWxlbWVudHMg
cmVtb3ZlZC9pbnNlcnRlZC4nKTsKK293bmVyLnJlbW92ZUNoaWxkKG9iamVjdCk7CitzaG91bGRC
ZSgnY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBz
ZWxlY3QsIHRleHRhcmVhXSknLCAnIk9LIicpOworb3duZXIucmVtb3ZlQ2hpbGQoYnV0dG9uKTsK
K3Nob3VsZEJlKCdjaGVja09yZGVyKFtmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBz
ZWxlY3QsIHRleHRhcmVhXSknLCAnIk9LIicpOworb3duZXIuaW5zZXJ0QmVmb3JlKG9iamVjdCwg
ZmllbGRzZXQpOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW29iamVjdCwgZmllbGRzZXQsIGlucHV0
LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKK293bmVyLmFw
cGVuZENoaWxkKGJ1dHRvbik7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbb2JqZWN0LCBmaWVsZHNl
dCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhLCBidXR0b25dKScsICci
T0siJyk7CisKK2RlYnVnKCcnKTsKK2RlYnVnKCctIENoZWNrcyB0aGUgb3JkZXIgb2YgZm9ybSBh
c3NvY2lhdGVkIGVsZW1lbnRzIHdpdGggZm9ybSBhdHRyaWJ1dGUuJyk7Citjb250YWluZXIuaW5u
ZXJIVE1MID0gJzxidXR0b24gbmFtZT12aWN0aW0gZm9ybT1vd25lcj48L2J1dHRvbj4nICsKKyAg
ICAnPGZpZWxkc2V0IG5hbWU9dmljdGltIGZvcm09b3duZXI+VGVzdDwvZmllbGRzZXQ+JyArCisg
ICAgJzxpbnB1dCBuYW1lPXZpY3RpbSBmb3JtPW93bmVyLz4nICsKKyAgICAnPGtleWdlbiBuYW1l
PXZpY3RpbSBmb3JtPW93bmVyPjwva2V5Z2VuPicgKworICAgICc8Zm9ybSBpZD1vd25lcj4nICsK
KyAgICAnPGxhYmVsIG5hbWU9dmljdGltPjwvbGFiZWw+JyArCisgICAgJzxtZXRlciBuYW1lPXZp
Y3RpbT48L21ldGVyPicgKworICAgICc8b2JqZWN0IG5hbWU9dmljdGltPjwvb2JqZWN0PicgKwor
ICAgICc8L2Zvcm0+JyArCisgICAgJzxvdXRwdXQgbmFtZT12aWN0aW0gZm9ybT1vd25lcj48L291
dHB1dD4nICsKKyAgICAnPHByb2dyZXNzIG5hbWU9dmljdGltIGZvcm09b3duZXI+PC9wcm9ncmVz
cz4nICsKKyAgICAnPHNlbGVjdCBuYW1lPXZpY3RpbSBmb3JtPW93bmVyPjwvc2VsZWN0PicgKwor
ICAgICc8dGV4dGFyZWEgbmFtZT12aWN0aW0gZm9ybT1vd25lcj48L3RleHRhcmVhPic7Citvd25l
ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lcicpOworYnV0dG9uID0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpWzBdOworZmllbGRzZXQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgnZmllbGRzZXQnKVswXTsKK2lucHV0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF07CitrZXlnZW4gPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgna2V5Z2VuJylbMF07CitsYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCdsYWJlbCcpWzBdOworbWV0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnbWV0ZXInKVswXTsKK29iamVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdvYmplY3QnKVswXTsKK291dHB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdv
dXRwdXQnKVswXTsKK3Byb2dyZXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3By
b2dyZXNzJylbMF07CitzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2Vs
ZWN0JylbMF07Cit0ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0
YXJlYScpWzBdOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0
LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSknLCAnIk9LIicpOwor
CitkZWJ1ZygnJyk7CitkZWJ1ZygnLSBDaGVja3MgdGhlIG9yZGVyIGFmdGVyIHNvbWUgZWxlbWVu
dHMgcmVtb3ZlZC9pbnNlcnRlZCB3aXRoIGZvcm0gYXR0cmlidXRlLicpOworb3duZXIucmVtb3Zl
Q2hpbGQob2JqZWN0KTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBp
bnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKScsICciT0siJyk7Citjb250
YWluZXIucmVtb3ZlQ2hpbGQoYnV0dG9uKTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtmaWVsZHNl
dCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSknLCAnIk9LIicpOwor
Y29udGFpbmVyLnJlbW92ZUNoaWxkKHRleHRhcmVhKTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtm
aWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3RdKScsICciT0siJyk7Citvd25l
ci5hcHBlbmRDaGlsZChvYmplY3QpOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2ZpZWxkc2V0LCBp
bnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0XSknLCAnIk9LIicpOworY29udGFp
bmVyLmluc2VydEJlZm9yZSh0ZXh0YXJlYSwgZmllbGRzZXQpOworc2hvdWxkQmUoJ2NoZWNrT3Jk
ZXIoW3RleHRhcmVhLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNl
bGVjdF0pJywgJyJPSyInKTsKK2NvbnRhaW5lci5hcHBlbmRDaGlsZChidXR0b24pOworc2hvdWxk
QmUoJ2NoZWNrT3JkZXIoW3RleHRhcmVhLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0
LCBvdXRwdXQsIHNlbGVjdCwgYnV0dG9uXSknLCAnIk9LIicpOworCit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3Rz
L2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMuanMJKHJldmlz
aW9uIDczMDA3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1j
b2xsZWN0aW9uLWVsZW1lbnRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBAIGNv
bnRhaW5lci5pbm5lckhUTUwgPSAnPGZvcm0gaWQ9ImZvcm0xIj4KICAgICAnPGtleWdlbiBpZD1r
ZXlnZW4xPjwva2V5Z2VuPicgKwogICAgICc8bGFiZWwgaWQ9bGFiZWwxPjwvbGFiZWw+JyArCiAg
ICAgJzxtZXRlciBpZD1tZXRlcjE+PC9tZXRlcj4nICsKKyAgICAnPG9iamVjdCBpZD1vYmplY3Qx
Pjwvb2JqZWN0PicgKwogICAgICc8b3V0cHV0IGlkPW91dHB1dDE+PC9vdXRwdXQ+JyArCiAgICAg
Jzxwcm9ncmVzcyBpZD1wcm9ncmVzczE+PC9wcm9ncmVzcz4nICsKICAgICAnPHNlbGVjdCBpZD1z
ZWxlY3QxPicgKwpAQCAtMzgsNyArMzksNyBAQCBjb250YWluZXIuaW5uZXJIVE1MID0gJzxmb3Jt
IGlkPSJmb3JtMSI+CiAKIHZhciBvd25lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3Jt
MScpOwogCi1zaG91bGRCZSgnb3duZXIuZWxlbWVudHMubGVuZ3RoJywgJzIyJyk7CitzaG91bGRC
ZSgnb3duZXIuZWxlbWVudHMubGVuZ3RoJywgJzIzJyk7CiBzaG91bGRCZSgnb3duZXIuZWxlbWVu
dHNbMF0uaWQnLCAiJ2J1dHRvbjEnIik7CiBzaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMV0uaWQn
LCAiJ2ZpZWxkc2V0MSciKTsKIHNob3VsZEJlKCdvd25lci5lbGVtZW50c1syXS5pZCcsICInaW5w
dXRoaWRkZW4nIik7CkBAIC01OCw5ICs1OSwxMCBAQCBzaG91bGRCZSgnb3duZXIuZWxlbWVudHNb
MTVdLmlkJywgIidpbnB1CiBzaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMTZdLmlkJywgIidpbnB1
dHJlc2V0JyIpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzE3XS5pZCcsICInaW5wdXRidXR0
b24nIik7CiBzaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMThdLmlkJywgIidrZXlnZW4xJyIpOwot
c2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzE5XS5pZCcsICInb3V0cHV0MSciKTsKLXNob3VsZEJl
KCdvd25lci5lbGVtZW50c1syMF0uaWQnLCAiJ3NlbGVjdDEnIik7Ci1zaG91bGRCZSgnb3duZXIu
ZWxlbWVudHNbMjFdLmlkJywgIid0ZXh0YXJlYTEnIik7CitzaG91bGRCZSgnb3duZXIuZWxlbWVu
dHNbMTldLmlkJywgIidvYmplY3QxJyIpOworc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzIwXS5p
ZCcsICInb3V0cHV0MSciKTsKK3Nob3VsZEJlKCdvd25lci5lbGVtZW50c1syMV0uaWQnLCAiJ3Nl
bGVjdDEnIik7CitzaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMjJdLmlkJywgIid0ZXh0YXJlYTEn
Iik7CiAKIAogdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>
<flag name="review"
          id="66021"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75293</attachid>
            <date>2010-12-01 11:05:42 -0800</date>
            <delta_ts>2010-12-03 20:23:24 -0800</delta_ts>
            <desc>Patch V2</desc>
            <filename>formassocV2.patch</filename>
            <type>text/plain</type>
            <size>182451</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTY0IEBACisyMDEwLTExLTMwICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTGV0IEhUTUxPYmplY3RFbGVtZW50IGJlIGEgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4ODIxCisKKyAg
ICAgICAgSW50cm9kdWNlcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgY2xhc3Mgd2hpY2ggd291bGQg
YmUgYSBzdXBlciBjbGFzcworICAgICAgICBvZiBmb3JtIGFzc29jYXRlZCBlbGVtZW50cy4gU29t
ZSBvZiBtZW1iZXIgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgb2YKKyAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCBhcmUgbWlncmF0ZWQgaW50byB0aGlzIGNsYXNzLgorICAgICAgICBGb2xs
b3dpbmcgdGhlIEhUTUw1IHNwZWMsIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgY2xhc3MgYW5kCisg
ICAgICAgIEhUTUxPYmplY3RFbGVtZW50IGNsYXNzIGFyZSBzdWJjbGFzc2VzIG9mIGl0IGZvciBu
b3cuCisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMt
b3JkZXIuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazogQWRkZWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmNwcAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogQWRkZWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkZWQgdGhlIHN5bWJvbCBmb3IgdG9IVE1MRWxlbWVudChG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqKQorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8u
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaDogRml4ZWQgY2xhc3MgZm9yd2FyZCBkZWNsYXJhdGlv
biBvcmRlci4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSk6IE1vZGlmaWVk
IHRvCisgICAgICAgIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZXNldEZvcm1FbGVtZW50c093bmVyKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
aDogRGl0dG8uCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OkRPTUZvcm1EYXRhKToKKyAgICAgICAgKiBodG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6IEFkZGVkLiBNaWdyYXRlZCBzb21lIG1lbWJlciBmdW5j
dGlvbnMgYW5kIHZhcmlhYmxlcyBmcm9tIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgY2xhc3MuCisg
ICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6On5Gb3JtQXNz
b2NpYXRlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpyZW1vdmVGcm9tRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRm9ybU93bmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXRGb3JtT3duZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG9UcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRSb290KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtTm9WYWxpZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVjYWxjV2lsbFZhbGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6d2lsbFZhbGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVj
ayk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkYXRpb25N
ZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6dXBkYXRl
VmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lh
dGVkRWxlbWVudDo6aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRy
b2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0
TmVlZHNWYWxpZGl0eUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6c2V0Q3VzdG9tVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6dG9IVE1MRWxlbWVu
dCk6CisgICAgICAgICogaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlZik6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29j
aWF0ZWRFbGVtZW50Ojpmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNo
ZXNSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpuYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6ZGlzYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXREaXNhYmxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlcXVpcmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0UmVxdWlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZWFkT25seSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldFJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNz
b2NpYXRlZEVsZW1lbnQ6OmZvcm1EZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFz
c29jaWF0ZWRFbGVtZW50OjpzZXRGb3JtKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0pOiBN
b2RpZmllZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50CisgICAgICAgIGluc3RlYWQgb2Yg
SFRNTEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVj
dGlvbjo6Z2V0TmFtZWRGb3JtSXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250
cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudCk6IE1vZGlmaWVkIHJlZ2FyZGluZwor
ICAgICAgICB3aXRoIHRoZSBjaGFuZ2Ugb2YgY2xhc3MgaGllcmFyY2h5LgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjppbnNlcnRlZEludG9UcmVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3JtKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0RlZmF1bHRCdXR0b25Gb3JG
b3JtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojph
dHRyaWJ1dGVDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3Jt
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3Jt
Q29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVy
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNh
YmxlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
cmVxdWlyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnNldFJlcXVpcmVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpyZWFkT25seSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1D
b250cm9sRWxlbWVudDo6c2V0UmVhZE9ubHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0ZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXJlZkZv
cm1Bc3NvY2lhdGVkRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1D
b250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCk6IERpdHRvLgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudDo6c3VibWl0SW1wbGljaXRseSk6IE1vZGlmaWVkIHRvIHVzZQorICAgICAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZlbHkpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXhXaXRo
Rm9ybUF0dHJpYnV0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
Ojpmb3JtRWxlbWVudEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6cmVtb3ZlRm9ybUVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50OjpjaGVja1ZhbGlkaXR5KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMp
OiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50Ojphc3NvY2lhdGVkRWxlbWVudHMpOiBEaXR0by4KKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6dXBkYXRlQ2hlY2tlZFJhZGlvQnV0dG9ucyk6IERpdHRvLgorICAgICAgICAq
IGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVj
dEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KTogTW9kaWZpZWQgcmVnYXJkaW5nCisgICAgICAg
IHdpdGggdGhlIGNoYW5nZSBvZiBjbGFzcyBoaWVyYXJjaHkuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MT2JqZWN0RWxlbWVudDo6fkhUTUxPYmplY3RFbGVtZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0
YSk6IEFkZGVkCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Zm9ybUNvbnRy
b2xOYW1lKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Zm9y
bUNvbnRyb2xUeXBlKTogQWRkZWQuCisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmZvcm0pOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpmb3JtQ29udHJvbFZhbHVlTWF0Y2hl
c1JlbmRlcmVyKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6
c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcik6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmlzRm9ybUNvbnRyb2xFbGVtZW50KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6d2lsbFZhbGlkYXRlKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6ZGlzYWJsZWQpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpzZXREaXNhYmxlZCk6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmlzRW51bWVyYXRhYmxlKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6cmVmRm9ybUFzc29j
aWF0ZWRFbGVtZW50KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVu
dDo6ZGVyZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KTogQWRkZWQuCisg
ICAgICAgICogaHRtbC9IVE1MVGFnTmFtZXMuaW46IEFkZGVkIGNvbnN0cnVjdG9yTmVlZHNGb3Jt
RWxlbWVudCB0byBvYmplY3QgdGFnLgorICAgICAgICAqIGh0bWwvVmFsaWRhdGlvbk1lc3NhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRhdGlvbk1lc3NhZ2U6OlZhbGlkYXRpb25NZXNz
YWdlKTogTW9kaWZpZWQgdG8gdXNlCisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCBpbnN0
ZWFkIG9mIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0
aW9uTWVzc2FnZTo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgICogaHRtbC9WYWxpZGF0aW9uTWVz
c2FnZS5oOgorICAgICAgICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWYWxpZGl0eVN0YXRlOjp2YWxpZGF0aW9uTWVzc2FnZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6dmFsdWVNaXNzaW5nKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjp0eXBlTWlzbWF0Y2gpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlZhbGlkaXR5U3RhdGU6OnBhdHRlcm5NaXNtYXRjaCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6dG9vTG9uZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6VmFsaWRpdHlTdGF0ZTo6cmFuZ2VVbmRlcmZsb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlZhbGlkaXR5U3RhdGU6OnJhbmdlT3ZlcmZsb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlZhbGlkaXR5U3RhdGU6OnN0ZXBNaXNtYXRjaCk6IERpdHRvLgorICAgICAgICAqIGh0bWwv
VmFsaWRpdHlTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6Y3JlYXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpWYWxpZGl0eVN0YXRl
KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpjcmVhdGUpOiBEaXR0by4KKwogMjAxMC0xMS0zMCAg
UGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRyZWFzIEtsaW5nLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL0FuZHJv
aWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw2ICsyNzcsNyBAQCBMT0NBTF9TUkNfRklMRVMg
Oj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlodG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUuY3Bw
IFwKIAlodG1sL0VtYWlsSW5wdXRUeXBlLmNwcCBcCiAJaHRtbC9GaWxlSW5wdXRUeXBlLmNwcCBc
CisJaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIFwKIAlodG1sL0Zvcm1EYXRhTGlzdC5j
cHAgXAogCWh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwIFwKIAlodG1sL0hUTUxDb2xsZWN0aW9u
LmNwcCBcCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTg0LDYgKzk4NCw3IEBAIFNFVChXZWJDb3JlX1NPVVJD
RVMKICAgICBodG1sL0VtYWlsSW5wdXRUeXBlLmNwcAogICAgIGh0bWwvRlRQRGlyZWN0b3J5RG9j
dW1lbnQuY3BwCiAgICAgaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAorICAgIGh0bWwvRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmNwcAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmNwcAogICAgIGh0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKSW5kZXg6
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTc3LDYgKzE1NzcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvaHRtbC9FbWFpbElucHV0VHlwZS5oIFwKIAlXZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5j
cHAgXAogCVdlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmggXAorCVdlYkNvcmUvaHRtbC9Gb3Jt
QXNzb2NpYXRlZEVsZW1lbnQuY3BwIFwKKwlXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmggXAogCVdlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwIFwKIAlXZWJDb3JlL2h0bWwv
Rm9ybURhdGFMaXN0LmggXAogCVdlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAg
XApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuZXhwLmluCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTI5NCw2ICsyOTQsNyBAQCBfX1pON1dlYkNvcmUxM0tleWJvYXJk
RXZlbnRDMUVSS04zV1RGMTJBCiBfX1pON1dlYkNvcmUxM1R5cGluZ0NvbW1hbmQzOWluc2VydFBh
cmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudEVQTlNfOERvY3VtZW50RQogX19aTjdXZWJD
b3JlMTNjcmVhdGVXcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmpl
Y3RFUE5TXzROb2RlRQogX19aTjdXZWJDb3JlMTN0b0RldmljZVNwYWNlRVJLTlNfOUZsb2F0UmVj
dEVQOE5TV2luZG93CitfX1pON1dlYkNvcmUxM3RvSFRNTEVsZW1lbnRFUE5TXzIxRm9ybUFzc29j
aWF0ZWRFbGVtZW50RQogX19aTjdXZWJDb3JlMTN0b0pTRE9NV2luZG93RU4zSlNDN0pTVmFsdWVF
CiBfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlMTJyZW1vdmVDbGllbnRFUE5TXzIwQ2FjaGVk
UmVzb3VyY2VDbGllbnRFCiBfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlOWFkZENsaWVudEVQ
TlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MzAwNykKKysrIFdl
YkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xNjE4LDYgKzE2MTgsOCBAQAog
ICAgICAgICAgICAgJ2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCcsCiAgICAgICAgICAgICAn
aHRtbC9GaWxlSW5wdXRUeXBlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9GaWxlSW5wdXRUeXBl
LmgnLAorICAgICAgICAgICAgJ2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCcsCisgICAg
ICAgICAgICAnaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnaHRt
bC9Gb3JtRGF0YUxpc3QuY3BwJywKICAgICAgICAgICAgICdodG1sL0Zvcm1EYXRhTGlzdC5oJywK
ICAgICAgICAgICAgICdodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCcsCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9u
IDczMDA3KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtODc5LDYg
Kzg3OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGh0bWwvRW1haWxJbnB1dFR5cGUuY3BwIFwKICAg
ICBodG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBcCiAgICAgaHRtbC9GaWxlSW5wdXRUeXBl
LmNwcCBcCisgICAgaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0Zv
cm1EYXRhTGlzdC5jcHAgXAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwIFwKICAgICBo
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcCBcCkBAIC0xNzg5LDYgKzE3OTAsNyBAQCBIRUFERVJT
ICs9IFwKICAgICBodG1sL0RPTUZvcm1EYXRhLmggXAogICAgIGh0bWwvRE9NU2V0dGFibGVUb2tl
bkxpc3QuaCBcCiAgICAgaHRtbC9ET01Ub2tlbkxpc3QuaCBcCisgICAgaHRtbC9Gb3JtQXNzb2Np
YXRlZEVsZW1lbnQuaCBcCiAgICAgaHRtbC9Gb3JtRGF0YUxpc3QuaCBcCiAgICAgaHRtbC9GVFBE
aXJlY3RvcnlEb2N1bWVudC5oIFwKICAgICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmggXApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MzAwNykKKysr
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTUwMTQzLDYgKzUwMTQzLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRm9y
bUFzc29jaWF0ZWRFbGVtZW50LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZvcm1EYXRhTGlzdC5jcHAiDQogCQkJCT4NCiAJCQk8
L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExNTksNiArMTE1OSw4IEBACiAJCTQ5RkZCRjFEMTFD
ODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAv
KiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSAqLzsgfTsKIAkJNDlGRkJGM0YxMUM5M0VFMzAwNkE3
MTE4IC8qIFdlYkdMTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RkZCRjNEMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggKi87IH07
CiAJCTQ5RkZCRjQwMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGRkJGM0UxMUM5M0VFMzAwNkE3
MTE4IC8qIFdlYkdMTGF5ZXIubW0gKi87IH07CisJCTRBMERBMkZFMTI5QjI0MTkwMEFCNjFFMSAv
KiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEEwREEyRkMxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudC5jcHAgKi87IH07CisJCTRBMERBMkZGMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRBMERBMkZEMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0
QThDOTZFQjBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBOEM5NkVBMEJFNjkw
MzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tICovOyB9OwogCQk0QUNCQzBC
RTEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBQ0JDMEJDMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFz
c0xpc3QuY3BwICovOyB9OwogCQk0QUNCQzBCRjEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUNCQzBC
RDEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmggKi87IH07CkBAIC03Mjk4LDYgKzczMDAs
OCBAQAogCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHQzRE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGRkJGM0QxMUM5M0VF
MzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViR0xMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZGQkYzRTEx
QzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYkdMTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTRBMERBMkZDMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEEwREEyRkQxMjlCMjQxOTAw
QUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXJN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gU2VsZWN0aW9u
Q29udHJvbGxlck1hYy5tbTsgcGF0aCA9IG1hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QUNCQzBCQzEyNzEzQ0JEMDA5NEY5QjIgLyog
Q2xhc3NMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsYXNz
TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBQ0JDMEJEMTI3MTNDQkQw
MDk0RjlCMiAvKiBDbGFzc0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2xhc3NMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDc4OCw2ICsxNDc5
Miw4IEBACiAJCQkJRjU1QjNEODgxMjUxRjEyRDAwM0VGMjY5IC8qIEVtYWlsSW5wdXRUeXBlLmgg
Ki8sCiAJCQkJRjU1QjNEODkxMjUxRjEyRDAwM0VGMjY5IC8qIEZpbGVJbnB1dFR5cGUuY3BwICov
LAogCQkJCUY1NUIzRDhBMTI1MUYxMkQwMDNFRjI2OSAvKiBGaWxlSW5wdXRUeXBlLmggKi8sCisJ
CQkJNEEwREEyRkMxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAg
Ki8sCisJCQkJNEEwREEyRkQxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dC5oICovLAogCQkJCUE4MTM2RDM3MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3Bw
ICovLAogCQkJCUE4MTM2RDM2MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuaCAqLywK
IAkJCQk5NzIwNUFBRDEyMzkyOENBMDBCMTczODAgLyogRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3Bw
ICovLApAQCAtMTU4NzUsOSArMTU4ODEsOSBAQAogCQkJCUE4RDA1RkE5MEEyM0IzMEYwMDVFNzIw
MyAvKiBKU0NTU1ZhbHVlTGlzdC5jcHAgKi8sCiAJCQkJQThEMDVGQUEwQTIzQjMwRjAwNUU3MjAz
IC8qIEpTQ1NTVmFsdWVMaXN0LmggKi8sCiAJCQkJQkMzQzM5QjQwQzBEM0Q4RDAwNUY0RDdBIC8q
IEpTTWVkaWFMaXN0LmNwcCAqLywKKwkJCQlCQzNDMzlCNTBDMEQzRDhEMDA1RjREN0EgLyogSlNN
ZWRpYUxpc3QuaCAqLywKIAkJCQlEM0E5NEE0MjEyMkRDNDBGMDBBMzdCQkMgLyogSlNNZWRpYVF1
ZXJ5TGlzdC5jcHAgKi8sCiAJCQkJRDNBOTRBNDMxMjJEQzQwRjAwQTM3QkJDIC8qIEpTTWVkaWFR
dWVyeUxpc3QuaCAqLywKLQkJCQlCQzNDMzlCNTBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxp
c3QuaCAqLywKIAkJCQlCQ0ZFMkYwRjBDMUI1ODM3MDAyMDIzNUYgLyogSlNSZWN0LmNwcCAqLywK
IAkJCQlCQ0ZFMkYxMDBDMUI1ODM3MDAyMDIzNUYgLyogSlNSZWN0LmggKi8sCiAJCQkJQkM3NERB
NDYxMDEzRjQ2ODAwNzk4N0FEIC8qIEpTUkdCQ29sb3IuY3BwICovLApAQCAtMTY3NDMsNiArMTY3
NDksNyBAQAogCQkJCUIyNzUzNTNGMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCAqLywK
IAkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8sCiAJCQkJQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLywKKwkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBD
ODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCiAJCQkJQjJDM0RBNTEwRDAwNkNENjAwRUY2RjI2
IC8qIEZvbnRDYWNoZS5jcHAgKi8sCiAJCQkJQjJDM0RBNTIwRDAwNkNENjAwRUY2RjI2IC8qIEZv
bnRDYWNoZS5oICovLAogCQkJCTM3MUY0RjNGMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5j
cHAgKi8sCkBAIC0xNjc1NCw3ICsxNjc2MSw2IEBACiAJCQkJQjJDM0RBNTgwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnRGYW1pbHkuY3BwICovLAogCQkJCUIyQzNEQTU5MEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250RmFtaWx5LmggKi8sCiAJCQkJNzI2MjZFMDEwRUYwMjJGRTAwQTA3RTIwIC8qIEZvbnRG
YXN0UGF0aC5jcHAgKi8sCi0JCQkJQkNCOTJENEUxMjkzNTUwQjAwQzgzODdGIC8qIEZvbnRCYXNl
bGluZS5oICovLAogCQkJCUY3QTAzNEMzMTI2QkY2QkUwMDdEQzE5RSAvKiBGb250T3JpZW50YXRp
b24uaCAqLywKIAkJCQkzN0FDQ0U0MTBEQTI5ODBGMDA4OUU2MDIgLyogRm9udFJlbmRlcmluZ01v
ZGUuaCAqLywKIAkJCQlCMkMzREE1QTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udFNlbGVjdG9yLmgg
Ki8sCkBAIC0xNzg4NCw4ICsxNzg5MCw4IEBACiAJCQkJRDNBOTRBMzExMjJEQUJBQzAwQTM3QkJD
IC8qIE1lZGlhUXVlcnlMaXN0LmNwcCAqLywKIAkJCQlEM0E5NEEzMjEyMkRBQkFDMDBBMzdCQkMg
LyogTWVkaWFRdWVyeUxpc3QuaCAqLywKIAkJCQlEM0E5NEEzMzEyMkRBQkFDMDBBMzdCQkMgLyog
TWVkaWFRdWVyeUxpc3QuaWRsICovLAotCQkJCUQzQTk0QTM0MTIyREFCQUMwMEEzN0JCQyAvKiBN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmggKi8sCiAJCQkJRDM0MDYyOUExMjUzQkM4QzAwOUU0MjU5
IC8qIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwICovLAorCQkJCUQzQTk0QTM0MTIyREFCQUMw
MEEzN0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmggKi8sCiAJCQkJRDNBOTRBMzUxMjJE
QUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaWRsICovLAogCQkJCUQzQUEx
MEYxMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5jcHAgKi8sCiAJCQkJRDNB
QTEwRjIxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggKi8sCkBAIC0xODgx
MCw2ICsxODgxNiw3IEBACiAJCQkJQkNCQ0FFMzcwRkYxOTM4NTAwMDc2MkFFIC8qIERhdGFHcmlk
RGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyMjc0NkYwRTgzNjY0NTAwRTdGOTc1
IC8qIERhdGFSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjQ2NDFDMTFEN0Y0MTYwMDY0NTVC
MCAvKiBEYXRhc2V0RE9NU3RyaW5nTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRTk3Q0NFQjEy
OTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1RDNBNTdE
MTA2QjgzQjMwMDU0NTI5NyAvKiBEYXRlQ29tcG9uZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjU1QjNEQjYxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUY1NUIzREI4MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUlucHV0VHlwZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xOTY5MSw2ICsxOTY5OCw4IEBACiAJCQkJOTc2RDZDOEUxMjJCOEEz
RDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2QzhGMTIy
QjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2
RDZDOTExMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVXcml0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTQ2QkM3MjRGMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDZCQzcyNTAxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTg5M0M0N0E4MTIzODkwOEIwMDJCM0Q4NiAvKiBGaWxl
V3JpdGVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2NzAwRUQxMTI3Qjk2Q0IwMEY1
RDVENiAvKiBGaWxlV3JpdGVyU3luYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI2OUYwRTgx
REFFQjAwQjI1OTY1IC8qIEZpbGxMYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xOTcwOSw2ICsx
OTcxOCw3IEBACiAJCQkJMTQ5OTNCRTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDYyMjg3ODQwQjREQjMyMjAwMEMzNERGIC8qIEZvY3Vz
RGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNCOTJENEYxMjkzNTUwQjAwQzgzODdGIC8q
IEZvbnRCYXNlbGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNjMwRDAwNkNENjAwRUY2
RjI2IC8qIEZvbnRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBRkZDN0UwRDAwQTVDMTAw
MzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3
MUY0RjQwMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
OTcyNCw2ICsxOTczNCw3IEBACiAJCQkJMzc4NEMzNEIwRTExQUEzNDAwN0Q4RDQ4IC8qIEZvbnRU
cmFpdHNNYXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNzM0QjE4MzExOUI5OTFEMDA2NTg3QkQg
LyogRm9udFRyYW5zY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0VEMEExOTg5Q0Ew
MDdGQjhDNSAvKiBGb250VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTRBMERBMkZGMTI5QjI0
MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUQwNUNFRDJBMEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxNEM3NjcwMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDg1QjkyQkIwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDA1NCw2ICsyMDA2NSw3IEBACiAJCQkJQkM3N0QxNkEw
RkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW4uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDNzdEMTZDMEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uTGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNCQ0FFM0QwRkYxOTM5OTAwMDc2MkFFIC8qIEpTRGF0YUdyaWREYXRh
U291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRTk3Q0U3MDEyOTNBRDZCMDBDNUM4RkYgLyog
SlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1M0RBQzIxMTQzMkVFRTAwMEQ4MTdF
IC8qIEpTRGVidWdXcmFwcGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTYyQTQ1ODEwMTE0
NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMUZCMUE2NjEyMEE1RDNGMDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yMDEyNSw2ICsyMDEzNyw3IEBACiAJCQkJQkM5N0U0MTMxMDkxNTRG
QTAwMTBEMzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
NEEyREYwMEExQjg1MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTRBMkRGMjBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQXBwbGV0RWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFBRDE0MUUxMjk1RUE0RjAwQUNBOTg5IC8qIEpTSFRN
TEFwcGxldEVsZW1lbnRDdXN0b20uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJBQTFGMEExQ0RB
QjQwMEI0MkIyNSAvKiBKU0hUTUxBcmVhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0
NjE0MzgwQ0Q2ODlDNTAwRkFEQTc1IC8qIEpTSFRNTEF1ZGlvRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTgwRTdCMTEwQTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTEJhc2VFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTIwMTQ3LDYgKzIwMTYwLDcgQEAKIAkJCQkxQTQ5NEJGQjBBMTIy
RjQ0MDBGREFGQzEgLyogSlNIVE1MRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM4RTY1
RjEwOUYwOTg0MDAwOEE0OEVDIC8qIEpTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM2RDQ0RUQwQzA3RjJFRDAwNzJEMkM5IC8qIEpTSFRNTEVtYmVkRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFBRDE0MjExMjk1RUE2QjAwQUNBOTg5IC8qIEpT
SFRNTEVtYmVkRWxlbWVudEN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFBMjcwQTFD
REFCNDAwQjQyQjI1IC8qIEpTSFRNTEZpZWxkU2V0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFFMkFBMjkwQTFDREFCNDAwQjQyQjI1IC8qIEpTSFRNTEZvbnRFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEQwNjRGQzBBMjNDMENDMDA1RTcyMDMgLyogSlNIVE1MRm9ybUVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjAxNTksNiArMjAxNzMsNyBAQAogCQkJCUJDNDkxOEM5
MEJGRUEwNTAwMDlENjMxNiAvKiBKU0hUTUxJRnJhbWVFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUUyQUE5ODBBMUNERDJEMDBCNDJCMjUgLyogSlNIVE1MSW1hZ2VFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODBFN0U5NzBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MSW5wdXRF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUFEMTQyMzEyOTVFQTdGMDBBQ0E5ODkgLyog
SlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUE5QTBB
MUNERDJEMDBCNDJCMjUgLyogSlNIVE1MSXNJbmRleEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRTJBQjIyMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMYWJlbEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBRTJBQjI0MEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMZWdlbmRF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIwMTcyLDYgKzIwMTg3LDcgQEAKIAkJCQlBN0JC
RTI2NzExQUZCM0YyMDAwNUVBMDMgLyogSlNIVE1MTWV0ZXJFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUUyQUIyQTBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTW9kRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMzMDVDN0EwQzA3NkJCMzAwQ0QyMEYwIC8qIEpTSFRNTE9iamVj
dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQUQxNDI1MTI5NUVBOTUwMEFDQTk4OSAv
KiBKU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTg1QjFF
QjBBMUIyNDA1MDBEOEM4N0MgLyogSlNIVE1MT0xpc3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODBFN0U5QjBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MT3B0R3JvdXBFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODBFN0U5OTBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MT3B0
aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDIyNSw2ICsyMDI0MSw3IEBACiAJCQkJ
QkNFMUM0M0MwRDk4MzBEMzAwM0IwMkYyIC8qIEpTTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0NDYxNDE5MENENjgyNjkwMEZBREE3NSAvKiBKU01lZGlhRXJyb3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDM0MzOUI3MEMwRDNEOEQwMDVGNEQ3QSAvKiBKU01lZGlhTGlzdC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRDNBOTRBNDcxMjJEQzQwRjAwQTM3QkJDIC8qIEpTTWVkaWFRdWVyeUxp
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGRkUzRUE2MTFCNUE0MzkwMDM3ODc0RSAvKiBKU01l
bW9yeUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMDc0MDBFMEU3N0JEQzAwMDMzQUYyNCAv
KiBKU01lc3NhZ2VDaGFubmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTc5M0VDOTBEMENFNzJE
MDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjAyNjQsNiAr
MjAyODEsOSBAQAogCQkJCTlGQTM3RUZEMTE3MkZEQTYwMEM0Q0Q1NSAvKiBKU1NjcmlwdFByb2Zp
bGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUQwN0E3RjBGRjkzNUNBMDA5NUVEQ0UgLyog
SlNTaGFyZWRXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRDE2OTA2MTAyMzhCNjYwMDlC
QzgyNyAvKiBKU1NoYXJlZFdvcmtlckNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTc1NDE1
RDU2MTI5QUIyRDIwMDNBRDY2OSAvKiBKU1NwZWVjaElucHV0RXZlbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTc1NDE1RDU4MTI5QUIyRDIwMDNBRDY2OSAvKiBKU1NwZWVjaElucHV0UmVzdWx0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3NTQxNUQ1QTEyOUFCMkQyMDAzQUQ2NjkgLyogSlNTcGVlY2hJ
bnB1dFJlc3VsdExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODI0MzI5MEQwQ0U4QTIwMDQ2
MEM4RiAvKiBKU1NRTEVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTI1QTk2NTExQ0EyMzQw
MDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTgyRkVE
MENBQjA3RUUwMDIyMzdBRSAvKiBKU1NRTFJlc3VsdFNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MDUxOCw2ICsyMDUzOCw5IEBACiAJCQkJNEUxOTU5MkEwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlh
UXVlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTRFMTk1OTJDMEEzOURBQ0MwMDIyMEZFNSAvKiBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RTE5NTkyRTBBMzlEQUND
MDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDNBOTRBMzkx
MjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlE
M0E5NEEzQjEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRDNBQTEwRjQxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRj
aGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0IxNkMxODA5NzlDM0JEMDA0Njc3NDEgLyogTWVt
b3J5Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGRkUzRTdCMTFCNTlDNUQwMDM3ODc0RSAv
KiBNZW1vcnlJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGQTA5OUU2NDkyMDA1NkU1
ODEgLyogTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAt
MjA3ODgsOSArMjA4MTEsOSBAQAogCQkJCTUxNEM3NjdBMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNv
dXJjZUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2N0IwQ0U5MjNBMTAw
N0VGM0NEIC8qIFJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
NkQzNzNGMEFEQkE1REUwMEE0NTU0RCAvKiBSZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDkyODYzOTkxMjUzQjhGQzAwRjc5MkQ2IC8qIFJlc291cmNlTG9hZEluZm8uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3M0UzMjU3MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWRO
b3RpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDBDRTU4RjkxMjVFNENDMjAwRjNGMTk5IC8q
IFJlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDkyODYzOTkxMjUz
QjhGQzAwRjc5MkQ2IC8qIFJlc291cmNlTG9hZEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCThB
ODFCRjg1MTFEQ0ZEOTAwMERBMkI5OCAvKiBSZXNvdXJjZUxvYWRUaW1pbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxNEM3NjUyMENFOTIzNEUwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNEM3NjdEMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJl
cXVlc3RCYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTIwODM5LDYgKzIwODYyLDcgQEAKIAkJCQk5
MzRDQzBFMjBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQkNBRTFGQTcxMjkzOURCNzAwNENCMDI2IC8qIFNjcm9sbEFu
aW1hdG9yTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlCODA4MjQ1RTU5MDAxRTlBQkMg
LyogU2Nyb2xsYmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzlCQzY0RTBFN0M0ODg5MDA4Qjk4
NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhCODU0QjBFN0M3
RjU2MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWUuaCBpbiBIZWFkZXJzICovLApAQCAtMjA4OTQs
NyArMjA5MTgsOSBAQAogCQkJCTc1NzhGOTBDMTFEREYyNjkwMEQ5MzNDNSAvKiBTcGVlY2hJbnB1
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzU3OEY5MEQxMURERjI2OTAwRDkzM0M1IC8qIFNwZWVj
aElucHV0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTM1QkM5NTEyMDIwQ0ZGMDAzN0VD
NDUgLyogU3BlZWNoSW5wdXRDbGllbnRNb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQk3NTQxNUFG
RDEyOTU4RDVFMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzU3OEY5MjAxMUU0RTMyODAwRDkzM0M1IC8qIFNwZWVjaElucHV0TGlzdGVuZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTc1NDE1QjAwMTI5NThENUUwMDNBRDY2OSAvKiBTcGVlY2hJbnB1dFJl
c3VsdExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTEyMDk5RTY0OTIwMDU2RTU4MSAv
KiBTcGxpdEVsZW1lbnRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNDA5OUU2
NDkyMDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzMzA5RTE2MDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1l
bnRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTIxMjY2LDYgKzIxMjkyLDcgQEAKIAkJCQky
RTNCQkYwODExNjJEQTExMDBCOTQwOUEgLyogVVVJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjVB
MTU0MjgxMjc5NTM0RDAwRDBCMEMwIC8qIFZhbGlkYXRpb25NZXNzYWdlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNUM3NzA4RDEwMEQzQzZCMDA1QkEyNjcgLyogVmFsaWRpdHlTdGF0ZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQkNBMjU3MTUxMjkzQzAxMDAwN0EyNjNEIC8qIFZlcnRpY2FsUG9zaXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VGNDE4Q0YxMTc5Njc4QzAwOUQxMTJDIC8q
IFZpZXdwb3J0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxRTA5OUU2NDky
MDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMjAw
OTlFNjQ5MjAwNTZFNTgxIC8qIFZpc2libGVQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MTQxMywyNiArMjE0NDAsNiBAQAogCQkJCTkzRjE5OUVEMDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xU
UHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkg
LyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RENEQ4NzBGREY0RDZF
MDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkNCOTJENEYxMjkz
NTUwQjAwQzgzODdGIC8qIEZvbnRCYXNlbGluZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDZCQzcy
NEYxMjlCMTA0QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk0NkJDNzI1MDEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2VDYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQkNBMjU3MTUxMjkzQzAxMDAwN0EyNjNEIC8qIFZlcnRpY2FsUG9z
aXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkNBRTFGQTcxMjkzOURCNzAwNENCMDI2
IC8qIFNjcm9sbEFuaW1hdG9yTWFjLmggaW4gSGVhZGVycyAqLywKLQkJCQlFMUFEMTQxRTEyOTVF
QTRGMDBBQ0E5ODkgLyogSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJRTFBRDE0MjExMjk1RUE2QjAwQUNBOTg5IC8qIEpTSFRNTEVtYmVkRWxlbWVudEN1c3Rv
bS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTFBRDE0MjMxMjk1RUE3RjAwQUNBOTg5IC8qIEpTSFRN
TElucHV0RWxlbWVudEN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTFBRDE0MjUxMjk1RUE5
NTAwQUNBOTg5IC8qIEpTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uaCBpbiBIZWFkZXJzICovLAot
CQkJCUQzQTk0QTM5MTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJRDNBOTRBM0IxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUQzQTk0QTQ3MTIyREM0MEYwMEEzN0JCQyAvKiBK
U01lZGlhUXVlcnlMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQlEM0FBMTBGNDEyM0E5OEFBMDA5
MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTc1NDE1QUZE
MTI5NThENUUwMDNBRDY2OSAvKiBTcGVlY2hJbnB1dEV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJ
CQk3NTQxNUIwMDEyOTU4RDVFMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmggaW4g
SGVhZGVycyAqLywKLQkJCQk3NTQxNUQ1NjEyOUFCMkQyMDAzQUQ2NjkgLyogSlNTcGVlY2hJbnB1
dEV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk3NTQxNUQ1ODEyOUFCMkQyMDAzQUQ2NjkgLyog
SlNTcGVlY2hJbnB1dFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzU0MTVENUExMjlBQjJE
MjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQkyRTk3Q0NFQjEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAot
CQkJCTJFOTdDRTcwMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTIxOTQ3LDYgKzIxOTU0LDcgQEAKIAkJCQlCQzc3RDIzOTBGRjI5ODA4MDA3MDg4N0Ig
LyogRGF0YUdyaWRDb2x1bW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QxRkQwRkYyOEQ5
QjAwNzA4ODdCIC8qIERhdGFHcmlkQ29sdW1uTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzY0NjQxRDExRDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkyRTk3Q0NFQTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRjVEM0E1N0MxMDZCODNCMzAwNTQ1Mjk3IC8qIERhdGVDb21wb25l
bnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREI1MTI1MUYxMkQwMDNFRjI2OSAvKiBE
YXRlSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREI3MTI1MUYxMkQwMDNF
RjI2OSAvKiBEYXRlVGltZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIyMzUxLDYg
KzIyMzU5LDcgQEAKIAkJCQk1MTYwMzAwQjBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5c3RlbVBP
U0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NkQ2QzhEMTIyQjhBM0QwMDFGRDFGNyAvKiBG
aWxlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NkQ2QzkwMTIyQjhBM0QwMDFGRDFG
NyAvKiBGaWxlV3JpdGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ2QkM3MjRFMTI5QjEwNEMw
MDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NjcwMEVE
MDEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM1RUI2OUUwRTgxREFFQjAwQjI1OTY1IC8qIEZpbGxMYXllci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwOEM5MjUxOTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMjIzODMsNiArMjIzOTIsNyBAQAogCQkJCUI1MzIwRDZDMTIyQTI0RTkw
MDJEMTQ0MCAvKiBGb250UGxhdGZvcm1EYXRhQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
NzM0QjE4MTExOUI5OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTgwRTZDRjEwQTE5ODlDQTAwN0ZCOEM1IC8qIEZvbnRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk0QTBEQTJGRTEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYzOCAv
KiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NkYwQ0U5
MjNBMTAwN0VGM0NEIC8qIEZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4NUI5MkJB
MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yMjY2OCw5ICsyMjY3OCwxMyBAQAogCQkJCTkzMDcwNUQ4MDlFMEM5QjcwMEIxN0ZFNCAvKiBK
U0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0NkMxRkEwQzBEREM4RjAwMjBDRkMz
IC8qIEpTQ1NTQ2hhcnNldFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0NkMxRkMwQzBE
REM4RjAwMjBDRkMzIC8qIEpTQ1NTRm9udEZhY2VSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUUxQUQxNDkxMTI5NzMzNzQwMEFDQTk4OSAvKiBKU0NTU0ZvbnRGYWNlUnVsZUN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzQ2QzFGRTBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NJbXBv
cnRSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxQUQxNDdDMTI5NzMwN0UwMEFDQTk4OSAv
KiBKU0NTU0ltcG9ydFJ1bGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0NkMyMDAw
QzBEREM4RjAwMjBDRkMzIC8qIEpTQ1NTTWVkaWFSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUUxQUQxNEEzMTI5NzM0NTMwMEFDQTk4OSAvKiBKU0NTU01lZGlhUnVsZUN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzQ2QzIwMjBDMEREQzhGMDAyMENGQzMgLyogSlNDU1NQYWdlUnVs
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUFEMTRDRDEyOTczNUE0MDBBQ0E5ODkgLyogSlND
U1NQYWdlUnVsZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzA3MDVFOTA5RTBDOUYw
MDBCMTdGRTQgLyogSlNDU1NQcmltaXRpdmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NENGN0IzMzA5RjZFQ0Q3MDBFQjM2NjUgLyogSlNDU1NSdWxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDNDZDMUVFMEMwRERCREYwMDIwQ0ZDMyAvKiBKU0NTU1J1bGVDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yMjY3OSw2ICsyMjY5Myw3IEBACiAJCQkJMTQyMDExQjYwQTAwMzEzMzAw
ODMwM0Y5IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzU4MjVGMzBDMEI4OTM4MDA1M0YxQjUgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDZDMjA2MEMwRERDQTEwMDIwQ0ZDMyAvKiBKU0NTU1N0
eWxlUnVsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUFEMTRFODEyOTczNzc0MDBBQ0E5ODkg
LyogSlNDU1NTdHlsZVJ1bGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDNUJFMDAw
QzBFOTMxMTAwMTFDMkRCIC8qIEpTQ1NTU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNENGNzhBNDA5RjU4Q0JGMDBFQjM2NjUgLyogSlNDU1NWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzIwRkI3RjBDMEU4RTZDMDBEMTQ0N0YgLyogSlNDU1NWYWx1ZUN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTIyNjk2LDYgKzIyNzExLDggQEAKIAkJCQlCQzc3RDE2QjBGRjE5
RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM3N0QxNTIwRkYxOUM3MzAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQkNBRTNDMEZGMTkzOTkwMDA3NjJBRSAvKiBKU0Rh
dGFHcmlkRGF0YVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRTk3Q0U2RjEyOTNBRDZC
MDBDNUM4RkYgLyogSlNEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRTk3Q0NGNzEy
OTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzUzREFDNTExNDMyRkQ5MDAwRDgxN0UgLyogSlNEZWJ1Z1dyYXBwZXJTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDE2MkE0NTcxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NDEwMTE0NUUzMDBERkYz
RUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjI4NDEsNiArMjI4NTgsNyBAQAogCQkJCTFBRTJBQjIzMEExQ0U2M0IwMEI0MkIyNSAvKiBK
U0hUTUxMZWdlbmRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTJBQjI1MEExQ0U2
M0IwMEI0MkIyNSAvKiBKU0hUTUxMSUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgw
RTdCMTAwQTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTExpbmtFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUUxQUQxMzlCMTI5NUQ5MjYwMEFDQTk4OSAvKiBKU0hUTUxMaW5rRWxlbWVudEN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIyNzBBMUNFNjNCMDBCNDJCMjUgLyog
SlNIVE1MTWFwRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQ5MUI3ODBDMDIzRUZE
MDA5RDYzMTYgLyogSlNIVE1MTWFycXVlZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTQ0NjE0MzkwQ0Q2ODlDNzAwRkFEQTc1IC8qIEpTSFRNTE1lZGlhRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTIyODY3LDYgKzIyODg1LDcgQEAKIAkJCQlCQzE3Rjk2NjBCNjRFQkI4MDA0
QTY1Q0IgLyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFNDQ2MTQzQjBDRDY4OUNDMDBGQURBNzUgLyogSlNIVE1MU291cmNlRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBODBFN0IwRjBBMTlENjA2MDA3RkI4QzUgLyogSlNIVE1MU3R5bGVF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxQUQxMzlFMTI5NUQ5NjEwMEFDQTk4OSAv
KiBKU0hUTUxTdHlsZUVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMTY5
QTIwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkMwNkVERTMwQkZENkQwRDAwODU2RTlEIC8qIEpTSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwNkVEOUQwQkZENjYwNjAwODU2RTlE
IC8qIEpTSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIyOTE2LDYg
KzIyOTM1LDcgQEAKIAkJCQk4RkFDNzc0RDExOTg3MkNCMDAxNUFFOTQgLyogSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NDYxNDE4MENENjgyNjkwMEZBREE3
NSAvKiBKU01lZGlhRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQzM5QjYwQzBEM0Q4
RDAwNUY0RDdBIC8qIEpTTWVkaWFMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQzQTk0QTQ2
MTIyREM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTlGRkUzRUE1MTFCNUE0MzkwMDM3ODc0RSAvKiBKU01lbW9yeUluZm8uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTEwNzQwMEQwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBNUY5OUIwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVz
c2FnZUNoYW5uZWxDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMjk1NCw2ICsyMjk3NCw3
IEBACiAJCQkJNTE4OUYwMTgxMEIzNzgxMzAwRjNDNzM5IC8qIEpTUG9wU3RhdGVFdmVudEN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTgwREE3MTBFOUM0NzJGMDAwRDZGNzUgLyogSlNQ
b3NpdGlvbkVycm9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1REYzMUZGMDlEMUNDNjAwMDBC
RTMyNSAvKiBKU1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlF
MUFEMTJENjEyOTVEMEJEMDBBQ0E5ODkgLyogSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0NjEzRUQwQ0Q2ODFCQTAwRkFEQTc1IC8qIEpTUHJv
Z3Jlc3NFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NURGMzIwMTA5RDFDQzYwMDAwQkUz
MjUgLyogSlNSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEMjNDQTU1RjBBQjBFQUI2MDA1
MTA4QTUgLyogSlNSYW5nZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIyOTY2LDYg
KzIyOTg3LDkgQEAKIAkJCQk0MUQwN0E3RTBGRjkzNUNBMDA5NUVEQ0UgLyogSlNTaGFyZWRXb3Jr
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFEMTY5MDUxMDIzOEI2NjAwOUJDODI3IC8qIEpT
U2hhcmVkV29ya2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNENEOEQ4MjEwNkI1
MjkwMDBBNDZEMjMgLyogSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNzU0MTVENTUxMjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRFdmVudC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk3NTQxNUQ1NzEyOUFCMkQyMDAzQUQ2NjkgLyogSlNTcGVlY2hJbnB1
dFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3NTQxNUQ1OTEyOUFCMkQyMDAzQUQ2Njkg
LyogSlNTcGVlY2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2
MzcwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjUyNUE5NjYxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBRTgyRkVDMENBQjA3RUUwMDIyMzdBRSAvKiBKU1NRTFJlc3VsdFNldC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTIzMTU1LDcgKzIzMTc5LDkgQEAKIAkJCQkwQzQ1MzQyNzEwQ0RC
QkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkzMUMwRkYzRDBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTZGRTA3MTBFNkNDQkVFMDBCRjYwODggLyogSlNXZWJL
aXRDU1NLZXlmcmFtZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFBRDE0QzUxMjk3MzU0
OTAwQUNBOTg5IC8qIEpTV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxNkZFMDczMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU1dlYktpdENTU0tleWZyYW1l
c1J1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFBRDE0QjUxMjk3MzRDQTAwQUNBOTg5IC8q
IEpTV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
OTgzOTEzRjBGMUU3Njc1MDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXguY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkMyNzVCN0QxMUM1RDIzNTAwQzkyMDZDIC8qIEpTV2ViS2l0Q1NTTWF0cml4
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNjExRTVBMEUxQzRERTAwMEY2QTU3OSAv
KiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjMyNDEs
NiArMjMyNjcsOSBAQAogCQkJCTRFMTk1OTI5MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRFMTk1OTJCMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRFMTk1OTJEMEEzOURBQ0Mw
MDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQzQTk0QTM4
MTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlEMzQwNjI5QjEyNTNCQzhDMDA5RTQyNTkgLyogTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlEM0FBMTBGMzEyM0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVy
eU1hdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCMTZDMTcwOTc5QzNCRDAwNDY3NzQx
IC8qIE1lbW9yeUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlGRkUzRTdBMTFCNTlDNUQw
MDM3ODc0RSAvKiBNZW1vcnlJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REY5MDk5
RTY0OTIwMDU2RTU4MSAvKiBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTIzNTEwLDYgKzIzNTM5LDcgQEAKIAkJCQk0MTI3RDUzNzBGOEFBQjFEMDBF
NDI0RjUgLyogU2NyaXB0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0Q0MwRTEwRUQz
OUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNBM0JG
NjdDMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlCQ0FFMUZBNjEyOTM5REI3MDA0Q0IwMjYgLyogU2Nyb2xsQW5pbWF0b3JNYWMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xs
YmFyQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTQwMjhBMEU4MzY4MDgwMDMxOTcx
NyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIzNTY0
LDcgKzIzNTk0LDkgQEAKIAkJCQk2MjZDREUwRTExNDA0MjRDMDAxRTVBNjggLyogU3BhdGlhbE5h
dmlnYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzU3OEY5MEIxMURERjI2OTAwRDkzM0M1
IC8qIFNwZWVjaElucHV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc1MzVCQzk0MTIwMjBDRkYw
MDM3RUM0NSAvKiBTcGVlY2hJbnB1dENsaWVudE1vY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NzU0MTVDMjgxMjlBOTkyMDAwM0FENjY5IC8qIFNwZWVjaElucHV0RXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzU4OTc4RUMxMjcwOTBENjAwNzZENUE5IC8qIFNwZWVjaElucHV0UmVzdWx0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc1NDE1QzI5MTI5QTk5MjAwMDNBRDY2OSAvKiBTcGVl
Y2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMTEwOTlFNjQ5
MjAwNTZFNTgxIC8qIFNwbGl0RWxlbWVudENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTMzMDlFMTMwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb21tYW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMzA5RTE1MDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdFRleHROb2Rl
Q29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjM3MjcsNiAr
MjM3NTksNyBAQAogCQkJCTg0MzAwQkQzMTIwQzlBNzEwMDIxOTU0QSAvKiBTVkdQYXRoUGFyc2Vy
RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E4MDBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHUGF0aFNlZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ3NkM5RTUxMURGNkEw
QjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwOEZGMTAyMDEyOTUwRjVBMDBGMDAyNzYgLyogU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJP
ZmYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODRCNkI5NzcxMjBGMTNFNTAwQjhFRkFGIC8qIFNW
R1BhdGhTZWdMaXN0U291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0MTlEMkI5MTIwRTBD
NzYwMDE0MUY4RiAvKiBTVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NDMwMEJEQTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTIzOTg3LDMxICsyNDAyMCw2IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1
OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMDhGRjEwMjAxMjk1MEY1QTAwRjAwMjc2IC8qIFNWR1BhdGhTZWdM
aXN0UHJvcGVydHlUZWFyT2ZmLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDQUUxRkE2MTI5MzlE
QjcwMDRDQjAyNiAvKiBTY3JvbGxBbmltYXRvck1hYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlF
MUFEMTJENjEyOTVEMEJEMDBBQ0E5ODkgLyogSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTFBRDEzOUIxMjk1RDkyNjAwQUNBOTg5IC8qIEpTSFRN
TExpbmtFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQUQxMzlFMTI5NUQ5
NjEwMEFDQTk4OSAvKiBKU0hUTUxTdHlsZUVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJRTFBRDE0N0MxMjk3MzA3RTAwQUNBOTg5IC8qIEpTQ1NTSW1wb3J0UnVsZUN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlFMUFEMTQ5MTEyOTczMzc0MDBBQ0E5ODkgLyogSlNDU1NG
b250RmFjZVJ1bGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTFBRDE0QTMxMjk3MzQ1
MzAwQUNBOTg5IC8qIEpTQ1NTTWVkaWFSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUUxQUQxNEI1MTI5NzM0Q0EwMEFDQTk4OSAvKiBKU1dlYktpdENTU0tleWZyYW1lc1J1bGVDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTFBRDE0QzUxMjk3MzU0OTAwQUNBOTg5IC8qIEpT
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQUQx
NENEMTI5NzM1QTQwMEFDQTk4OSAvKiBKU0NTU1BhZ2VSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUUxQUQxNEU4MTI5NzM3NzQwMEFDQTk4OSAvKiBKU0NTU1N0eWxlUnVsZUN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlEM0E5NEEzODEyMkRBQkFDMDBBMzdCQkMgLyogTWVk
aWFRdWVyeUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRDNBOTRBNDYxMjJEQzQwRjAwQTM3
QkJDIC8qIEpTTWVkaWFRdWVyeUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRDNBQTEwRjMx
MjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUQzNDA2MjlCMTI1M0JDOEMwMDlFNDI1OSAvKiBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTc1NDE1QzI4MTI5QTk5MjAwMDNBRDY2OSAvKiBTcGVlY2hJ
bnB1dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTc1NDE1QzI5MTI5QTk5MjAwMDNBRDY2
OSAvKiBTcGVlY2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzU0MTVE
NTUxMjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRFdmVudC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk3NTQxNUQ1NzEyOUFCMkQyMDAzQUQ2NjkgLyogSlNTcGVlY2hJbnB1dFJlc3VsdC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk3NTQxNUQ1OTEyOUFCMkQyMDAzQUQ2NjkgLyogSlNTcGVl
Y2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDZCQzcyNEUxMjlCMTA0
QzAwNzFDMDdFIC8qIEZpbGVXcml0ZXJCYXNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJFOTdD
Q0VBMTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQky
RTk3Q0NGNzEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkyRTk3Q0U2RjEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgJKHJldmlzaW9uIDcz
MDA3KQorKysgV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw4ICsyNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTElu
cHV0RWxlbWVudDsKIGNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ7CitjbGFzcyBIVE1MSW5w
dXRFbGVtZW50OwogCiBjbGFzcyBDaGVja2VkUmFkaW9CdXR0b25zIHsKIHB1YmxpYzoKSW5kZXg6
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
QEAgLTQzODgsMjMgKzQzODksMjMgQEAgdm9pZCBEb2N1bWVudDo6c2V0SWNvblVSTChjb25zdCBT
dHJpbmcmIAogICAgICAgICBmLT5sb2FkZXIoKS0+c2V0SWNvblVSTChtX2ljb25VUkwpOwogfQog
Ci12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxl
bWVudCogY29udHJvbCkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9y
bUF0dHJpYnV0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJU
KGNvbnRyb2wtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICBtX2Zvcm1FbGVtZW50
c1dpdGhGb3JtQXR0cmlidXRlLmFkZChjb250cm9sKTsKKyAgICBBU1NFUlQodG9IVE1MRWxlbWVu
dChlbGVtZW50KS0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpOworICAgIG1fZm9ybUVsZW1l
bnRzV2l0aEZvcm1BdHRyaWJ1dGUuYWRkKGVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1
bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZShFbGVtZW50KiBjb250cm9sKQor
dm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRm9y
bUFzc29jaWF0ZWRFbGVtZW50KiBlbGVtZW50KQogewotICAgIG1fZm9ybUVsZW1lbnRzV2l0aEZv
cm1BdHRyaWJ1dGUucmVtb3ZlKGNvbnRyb2wpOworICAgIG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1B
dHRyaWJ1dGUucmVtb3ZlKGVsZW1lbnQpOwogfQogCiB2b2lkIERvY3VtZW50OjpyZXNldEZvcm1F
bGVtZW50c093bmVyKEhUTUxGb3JtRWxlbWVudCogZm9ybSkKIHsKLSAgICB0eXBlZGVmIEZvcm1F
bGVtZW50TGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOworICAgIHR5cGVkZWYgRm9ybUFz
c29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIEl0ZXJh
dG9yIGVuZCA9IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUuZW5kKCk7CiAgICAgZm9y
IChJdGVyYXRvciBpdCA9IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Kj4oKml0KS0+cmVzZXRGb3JtT3duZXIoZm9ybSk7CisgICAgICAgICgqaXQpLT5yZXNldEZv
cm1Pd25lcihmb3JtKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0VXNlU2VjdXJlS2V5Ym9hcmRF
bnRyeVdoZW5BY3RpdmUoYm9vbCB1c2VzU2VjdXJlS2V5Ym9hcmQpCkluZGV4OiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlz
aW9uIDczMDA3KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NzYsNiArNzYsNyBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRW50aXR5UmVmZXJlbmNlOwogY2xh
c3MgRXZlbnQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOworY2xhc3MgRm9ybUFzc29jaWF0ZWRFbGVt
ZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBIVE1MQ2FudmFzRWxl
bWVudDsKQEAgLTQ5MCw4ICs0OTEsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTdGF0ZUZvck5l
d0Zvcm1FbGVtZW50cygpIGNvbnN0OwogICAgIGJvb2wgdGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQo
QXRvbWljU3RyaW5nSW1wbCogbmFtZSwgQXRvbWljU3RyaW5nSW1wbCogdHlwZSwgU3RyaW5nJiBz
dGF0ZSk7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZShF
bGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0
ZShFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1
dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRm9ybUVsZW1l
bnRXaXRoRm9ybUF0dHJpYnV0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsKICAgICB2b2lkIHJl
c2V0Rm9ybUVsZW1lbnRzT3duZXIoSFRNTEZvcm1FbGVtZW50Kik7CiAKICAgICBGcmFtZVZpZXcq
IHZpZXcoKSBjb25zdDsgLy8gY2FuIGJlIE5VTEwKQEAgLTEyMTEsNyArMTIxMiw4IEBAIHByaXZh
dGU6CiAKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEVsZW1lbnQqLCA2ND4gRm9ybUVsZW1lbnRM
aXN0SGFzaFNldDsKICAgICBGb3JtRWxlbWVudExpc3RIYXNoU2V0IG1fZm9ybUVsZW1lbnRzV2l0
aFN0YXRlOwotICAgIEZvcm1FbGVtZW50TGlzdEhhc2hTZXQgbV9mb3JtRWxlbWVudHNXaXRoRm9y
bUF0dHJpYnV0ZTsKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCosIDMyPiBGb3JtQXNzb2NpYXRlZEVsZW1lbnRMaXN0SGFzaFNldDsKKyAgICBGb3JtQXNzb2Np
YXRlZEVsZW1lbnRMaXN0SGFzaFNldCBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlOwog
CiAgICAgdHlwZWRlZiBIYXNoTWFwPEZvcm1FbGVtZW50S2V5LCBWZWN0b3I8U3RyaW5nPiwgRm9y
bUVsZW1lbnRLZXlIYXNoLCBGb3JtRWxlbWVudEtleUhhc2hUcmFpdHM+IEZvcm1FbGVtZW50U3Rh
dGVNYXA7CiAgICAgRm9ybUVsZW1lbnRTdGF0ZU1hcCBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRz
OwpJbmRleDogV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvRE9NRm9ybURhdGEuY3BwCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvaHRt
bC9ET01Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDkgQEAgRE9NRm9y
bURhdGE6OkRPTUZvcm1EYXRhKEhUTUxGb3JtRWxlbWVudAogICAgICAgICByZXR1cm47CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGZv
cm0tPmFzc29jaWF0ZWRFbGVtZW50cygpW2ldOwotICAgICAgICBpZiAoIWNvbnRyb2wtPmRpc2Fi
bGVkKCkpCi0gICAgICAgICAgICBjb250cm9sLT5hcHBlbmRGb3JtRGF0YSgqdGhpcywgdHJ1ZSk7
CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZWxlbWVudCA9IGZvcm0tPmFzc29jaWF0
ZWRFbGVtZW50cygpW2ldOworICAgICAgICBpZiAoIWVsZW1lbnQtPmRpc2FibGVkKCkpCisgICAg
ICAgICAgICBlbGVtZW50LT5hcHBlbmRGb3JtRGF0YSgqdGhpcywgdHJ1ZSk7CiAgICAgfQogfQog
CkluZGV4OiBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNzMw
MDcpCShmcm9tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDo3MzAwNykK
KysrIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgIChDKSAyMDA2IEFsZXhl
eSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCisKKyNpbmNsdWRlICJBdHRyaWJ1dGUu
aCIKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgorI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50UmFyZURhdGEuaCIKKyNpbmNsdWRl
ICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJMYWJlbHNOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJS
ZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgorI2luY2x1ZGUgIlJl
bmRlclRoZW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
IlZhbGlkYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiVmFsaWRpdHlTdGF0ZS5oIgorI2luY2x1
ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisK
K0hUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQq
IGZvcm0pCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIG1fZm9y
bShmb3JtKQorICAgICwgbV9kaXNhYmxlZChmYWxzZSkKKyAgICAsIG1fcmVhZE9ubHkoZmFsc2Up
CisgICAgLCBtX3JlcXVpcmVkKGZhbHNlKQorICAgICwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihm
YWxzZSkKKyAgICAsIG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQoZmFsc2UpCisgICAgLCBtX3dp
bGxWYWxpZGF0ZSh0cnVlKQorICAgICwgbV9pc1ZhbGlkKHRydWUpCit7CisgICAgaWYgKCFtX2Zv
cm0pCisgICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICBpZiAobV9mb3Jt
KQorICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Cit9CisKK0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50KCkKK3sKKyAgICBpZiAo
bV9mb3JtKQorICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworfQorCit2
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRldGFjaCgpCit7CisgICAgaGlkZVZpc2libGVW
YWxpZGF0aW9uTWVzc2FnZSgpOworICAgIEhUTUxFbGVtZW50OjpkZXRhY2goKTsKK30KKworYm9v
bCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtTm9WYWxpZGF0ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFnZXRBdHRyaWJ1dGUoZm9ybW5vdmFsaWRhdGVBdHRyKS5pc051bGwoKTsKK30KKwor
VmFsaWRpdHlTdGF0ZSogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRpdHkoKQoreworICAg
IGlmICghbV92YWxpZGl0eVN0YXRlKQorICAgICAgICBtX3ZhbGlkaXR5U3RhdGUgPSBWYWxpZGl0
eVN0YXRlOjpjcmVhdGUodGhpcyk7CisKKyAgICByZXR1cm4gbV92YWxpZGl0eVN0YXRlLmdldCgp
OworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IGRpc2FibGVkQXR0
cikgeworICAgICAgICBib29sIG9sZERpc2FibGVkID0gbV9kaXNhYmxlZDsKKyAgICAgICAgbV9k
aXNhYmxlZCA9ICFhdHRyLT5pc051bGwoKTsKKyAgICAgICAgaWYgKG9sZERpc2FibGVkICE9IG1f
ZGlzYWJsZWQpIHsKKyAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
ICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2Uo
KSkKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNoYW5nZWQocmVu
ZGVyZXIoKSwgRW5hYmxlZFN0YXRlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IHJlYWRvbmx5QXR0cikgeworICAgICAgICBib29sIG9sZFJlYWRPbmx5ID0gbV9y
ZWFkT25seTsKKyAgICAgICAgbV9yZWFkT25seSA9ICFhdHRyLT5pc051bGwoKTsKKyAgICAgICAg
aWYgKG9sZFJlYWRPbmx5ICE9IG1fcmVhZE9ubHkpIHsKKyAgICAgICAgICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0
eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVt
ZSgpLT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgUmVhZE9ubHlTdGF0ZSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSByZXF1aXJlZEF0dHIpIHsKKyAgICAgICAg
Ym9vbCBvbGRSZXF1aXJlZCA9IG1fcmVxdWlyZWQ7CisgICAgICAgIG1fcmVxdWlyZWQgPSAhYXR0
ci0+aXNOdWxsKCk7CisgICAgICAgIGlmIChvbGRSZXF1aXJlZCAhPSBtX3JlcXVpcmVkKSB7Cisg
ICAgICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKKyAgICAgICAgICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoKTsgLy8gVXBkYXRlcyBmb3IgOnJlcXVpcmVkIDpvcHRpb25hbCBjbGFzc2Vz
LgorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7Cit9CisK
K3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKK3sKKyAgICBBU1NFUlQoIWF0
dGFjaGVkKCkpOworCisgICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOworCisgICAgLy8gVGhlIGNh
bGwgdG8gdXBkYXRlRnJvbUVsZW1lbnQoKSBuZWVkcyB0byBnbyBhZnRlciB0aGUgY2FsbCB0aHJv
dWdoCisgICAgLy8gdG8gdGhlIGJhc2UgY2xhc3MncyBhdHRhY2goKSBiZWNhdXNlIHRoYXQgY2Fu
IHNvbWV0aW1lcyBkbyBhIGNsb3NlCisgICAgLy8gb24gdGhlIHJlbmRlcmVyLgorICAgIGlmIChy
ZW5kZXJlcigpKQorICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOworICAg
ICAgICAKKyAgICAvLyBGb2N1cyB0aGUgZWxlbWVudCBpZiBpdCBzaG91bGQgaG9ub3VyIGl0cyBh
dXRvZm9jdXMgYXR0cmlidXRlLgorICAgIC8vIFdlIGhhdmUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBl
bGVtZW50IGlzIGEgVGV4dEFyZWEvSW5wdXQvQnV0dG9uL1NlbGVjdCwKKyAgICAvLyBpZiBpbnB1
dCB0eXBlIGhpZGRlbiBpZ25vcmUgYXV0b2ZvY3VzLiBTbyBpZiBkaXNhYmxlZCBvciByZWFkb25s
eS4KKyAgICBib29sIGlzSW5wdXRUeXBlSGlkZGVuID0gZmFsc2U7CisgICAgaWYgKGhhc1RhZ05h
bWUoaW5wdXRUYWcpKQorICAgICAgICBpc0lucHV0VHlwZUhpZGRlbiA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPih0aGlzKS0+aXNJbnB1dFR5cGVIaWRkZW4oKTsKKworICAgIGlmIChh
dXRvZm9jdXMoKSAmJiByZW5kZXJlcigpICYmICFkb2N1bWVudCgpLT5pZ25vcmVBdXRvZm9jdXMo
KSAmJiAhaXNSZWFkT25seUZvcm1Db250cm9sKCkgJiYKKyAgICAgICAgICAgICgoaGFzVGFnTmFt
ZShpbnB1dFRhZykgJiYgIWlzSW5wdXRUeXBlSGlkZGVuKSB8fCBoYXNUYWdOYW1lKHNlbGVjdFRh
ZykgfHwKKyAgICAgICAgICAgICAgaGFzVGFnTmFtZShidXR0b25UYWcpIHx8IGhhc1RhZ05hbWUo
dGV4dGFyZWFUYWcpKSkKKyAgICAgICAgIGZvY3VzKCk7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCit7CisgICAgaWYgKGZhc3RI
YXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9y
bUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIp
KTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkg
eworICAgICAgICAgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92
ZUZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9y
bUVsZW1lbnQodGhpcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFtX2Zvcm0pIHsKKyAg
ICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIGEgbmV3IGZvcm0gZWxlbWVudCBiZWlu
ZyBjcmVhdGVkIGJ5CisgICAgICAgIC8vIEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBh
IGZvcm0uICBJbiB0aGUgY2FzZSBvZiB0aGUgcGFyc2VyCisgICAgICAgIC8vIHNldHRpbmcgYSBm
b3JtLCB3ZSB3aWxsIGFscmVhZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sIAor
ICAgICAgICAvLyBhbmQgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KKyAgICAgICAg
bV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOworICAgICAgICBpZiAobV9mb3JtKQorICAgICAg
ICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRo
aXMpOworICAgIH0KKworICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOwor
fQorCitzdGF0aWMgaW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4pCit7CisgICAgTm9kZSog
cm9vdCA9IG47CisgICAgZm9yICg7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCisgICAgICAgIHJv
b3QgPSBuOworICAgIHJldHVybiByb290OworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApCit7CisgICAgaWYgKGZhc3RIYXNBdHRyaWJ1
dGUoZm9ybUF0dHIpKQorICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRX
aXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKKworICAgIC8vIElmIHRoZSBmb3JtIGFuZCBlbGVtZW50
IGFyZSBib3RoIGluIHRoZSBzYW1lIHRyZWUsIHByZXNlcnZlIHRoZSBjb25uZWN0aW9uIHRvIHRo
ZSBmb3JtLgorICAgIC8vIE90aGVyd2lzZSwgbnVsbCBvdXQgb3VyIGZvcm0gYW5kIHJlbW92ZSBv
dXJzZWx2ZXMgZnJvbSB0aGUgZm9ybSdzIGxpc3Qgb2YgZWxlbWVudHMuCisgICAgaWYgKG1fZm9y
bSAmJiBmaW5kUm9vdCh0aGlzKSAhPSBmaW5kUm9vdChtX2Zvcm0pKSB7CisgICAgICAgIG1fZm9y
bS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgIG1fZm9ybSA9IDA7CisgICAgfQor
CisgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShkZWVwKTsKK30KKworY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUoKSBjb25z
dAoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGZhc3RHZXRBdHRyaWJ1dGUobmFt
ZUF0dHIpOworICAgIHJldHVybiBuYW1lLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogbmFtZTsKK30K
Kwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROYW1lKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCit7CisgICAgc2V0QXR0cmlidXRlKG5hbWVBdHRyLCB2YWx1ZSk7Cit9CisKK3Zv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50
KCkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNoYW5n
ZUV2ZW50LCB0cnVlLCBmYWxzZSkpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OnNldERpc2FibGVkKGJvb2wgYikKK3sKKyAgICBzZXRBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyLCBi
ID8gIiIgOiAwKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdXRvZm9jdXMo
KSBjb25zdAoreworICAgIHJldHVybiBoYXNBdHRyaWJ1dGUoYXV0b2ZvY3VzQXR0cik7Cit9CisK
K2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3JlcXVpcmVkOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVGcm9tRWxlbWVudENhbGxi
YWNrKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUX0FSRyhub2RlLCBub2RlLT5pc0VsZW1lbnRO
b2RlKCkpOworICAgIEFTU0VSVF9BUkcobm9kZSwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUp
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKTsKKyAgICBBU1NFUlQobm9kZS0+cmVuZGVyZXIoKSk7
CisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpKQorICAg
ICAgICByZW5kZXJlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKK30KKwordm9pZCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCit7CisgICAgSFRN
TEVsZW1lbnQ6OnJlY2FsY1N0eWxlKGNoYW5nZSk7CisKKyAgICAvLyB1cGRhdGVGcm9tRWxlbWVu
dCgpIGNhbiBjYXVzZSB0aGUgc2VsZWN0aW9uIHRvIGNoYW5nZSwgYW5kIGluIHR1cm4KKyAgICAv
LyB0cmlnZ2VyIHN5bmNocm9ub3VzIGxheW91dCwgc28gaXQgbXVzdCBub3QgYmUgY2FsbGVkIGR1
cmluZyBzdHlsZSByZWNhbGMuCisgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgIHF1ZXVlUG9z
dEF0dGFjaENhbGxiYWNrKHVwZGF0ZUZyb21FbGVtZW50Q2FsbGJhY2ssIHRoaXMpOworfQorCiti
b29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAoreworICAg
IHJldHVybiAhZGlzYWJsZWQoKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpp
c0ZvY3VzYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFyZW5kZXJlcigpIHx8IAorICAgICAgICAh
cmVuZGVyZXIoKS0+aXNCb3goKSB8fCB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+c2l6ZSgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEhUTUxFbGVtZW50Ojppc0Zv
Y3VzYWJsZSBoYW5kbGVzIHZpc2liaWxpdHkgYW5kIGNhbGxzIHN1cG9ydHNGb2N1cyB3aGljaAor
ICAgIC8vIHdpbGwgY292ZXIgdGhlIGRpc2FibGVkIGNhc2UuCisgICAgcmV0dXJuIEhUTUxFbGVt
ZW50Ojppc0ZvY3VzYWJsZSgpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omlz
S2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Cit7CisgICAgaWYg
KGlzRm9jdXNhYmxlKCkpCisgICAgICAgIGlmIChkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT50YWJzVG9B
bGxDb250cm9scyhldmVudCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAoreworI2lmIFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oUVQpCisgICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc01vdXNlRm9j
dXNhYmxlKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitzaG9ydCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0Cit7CisgICAgLy8gU2tpcCB0
aGUgc3VwcG9ydHNGb2N1cyBjaGVjayBpbiBIVE1MRWxlbWVudC4KKyAgICByZXR1cm4gRWxlbWVu
dDo6dGFiSW5kZXgoKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWNhbGNX
aWxsVmFsaWRhdGUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBTaG91bGQgcmV0dXJuIGZhbHNl
IGlmIHRoaXMgZWxlbWVudCBoYXMgYSBkYXRhbGlzdCBlbGVtZW50IGFzIGFuCisgICAgLy8gYW5j
ZXN0b3IuIFNlZSBIVE1MNSA0LjEwLjEwICdUaGUgZGF0YWxpc3QgZWxlbWVudC4nCisgICAgcmV0
dXJuICFtX2Rpc2FibGVkICYmICFtX3JlYWRPbmx5OworfQorCitib29sIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OndpbGxWYWxpZGF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3dpbGxWYWxpZGF0
ZUluaXRpYWxpemVkKSB7CisgICAgICAgIG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQgPSB0cnVl
OworICAgICAgICBtX3dpbGxWYWxpZGF0ZSA9IHJlY2FsY1dpbGxWYWxpZGF0ZSgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZhaWxzLCBzZXRO
ZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCkgaXMgbm90CisgICAgICAgIC8vIGNhbGxlZCBjb3JyZWN0
bHkgd2hlbiBzb21ldGhpbmcgd2hpY2ggY2hhbmdlcyByZWNhbGNXaWxsVmFsaWRhdGUoKSByZXN1
bHQKKyAgICAgICAgLy8gaXMgdXBkYXRlZC4KKyAgICAgICAgQVNTRVJUKG1fd2lsbFZhbGlkYXRl
ID09IHJlY2FsY1dpbGxWYWxpZGF0ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fd2lsbFZhbGlk
YXRlOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlk
YXRlQ2hlY2soKQoreworICAgIC8vIFdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgd2lsbFZhbGlkdGUg
aW1tZWRpYXRlbHkgYmVjYXVzZSB3aWxsVmFsaWRhdGUKKyAgICAvLyBjaGFuZ2UgY2FuIGNhdXNl
cyBzdHlsZSBjaGFuZ2UuCisgICAgYm9vbCBuZXdXaWxsVmFsaWRhdGUgPSByZWNhbGNXaWxsVmFs
aWRhdGUoKTsKKyAgICBpZiAobV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCAmJiBtX3dpbGxWYWxp
ZGF0ZSA9PSBuZXdXaWxsVmFsaWRhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3dpbGxWYWxp
ZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBtX3dpbGxWYWxpZGF0ZSA9IG5ld1dpbGxWYWxp
ZGF0ZTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaWYgKCFtX3dpbGxWYWxpZGF0
ZSkKKyAgICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworfQorCitTdHJpbmcg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRhdGlvbk1lc3NhZ2UoKQoreworICAgIHJldHVy
biB2YWxpZGl0eSgpLT52YWxpZGF0aW9uTWVzc2FnZSgpOworfQorCit2b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCit7CisgICAgUGFn
ZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJl
dHVybjsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpZiAocmVuZGVyZXIoKSAmJiB3aWxsVmFs
aWRhdGUoKSkgeworICAgICAgICBtZXNzYWdlID0gdmFsaWRhdGlvbk1lc3NhZ2UoKS5zdHJpcFdo
aXRlU3BhY2UoKTsKKyAgICAgICAgLy8gSFRNTDUgc3BlY2lmaWNhdGlvbiBkb2Vzbid0IGFzayBV
QSB0byBzaG93IHRoZSB0aXRsZSBhdHRyaWJ1dGUgdmFsdWUKKyAgICAgICAgLy8gd2l0aCB0aGUg
dmFsaWRhdGlvbk1lc3NhZ2UuICBIb3dldmVyLCB0aGlzIGJlaGF2aW9yIGlzIHNhbWUgYXMgT3Bl
cmEKKyAgICAgICAgLy8gYW5kIHRoZSBzcGVjaWZpY2F0aW9uIGRlc2NyaWJlcyBzdWNoIGJlaGF2
aW9yIGFzIGFuIGV4YW1wbGUuCisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBn
ZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICAgICAgaWYgKCFtZXNzYWdlLmlzRW1wdHkoKSAm
JiAhdGl0bGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCgnXG4nKTsK
KyAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKHRpdGxlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBpZiAoIW1fdmFsaWRhdGlvbk1lc3NhZ2UpIHsKKyAgICAgICAgbV92YWxpZGF0aW9uTWVzc2Fn
ZSA9IFZhbGlkYXRpb25NZXNzYWdlOjpjcmVhdGUodGhpcyk7CisgICAgICAgIG1fdmFsaWRhdGlv
bk1lc3NhZ2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7CisgICAgfSBlbHNlIGlmIChtZXNzYWdlLmlz
RW1wdHkoKSkKKyAgICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgIGVs
c2UgaWYgKG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSAhPSBtZXNzYWdlKQorICAgICAg
ICBtX3ZhbGlkYXRpb25NZXNzYWdlLT5zZXRNZXNzYWdlKG1lc3NhZ2UpOworfQorCit2b2lkIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQorewor
ICAgIG1fdmFsaWRhdGlvbk1lc3NhZ2UgPSAwOworfQorCitTdHJpbmcgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6dmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV92YWxpZGF0aW9uTWVzc2FnZSA/IG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSA6IFN0
cmluZygpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHko
VmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZhbGlk
Q29udHJvbHMpCit7CisgICAgaWYgKCF3aWxsVmFsaWRhdGUoKSB8fCBpc1ZhbGlkRm9ybUNvbnRy
b2xFbGVtZW50KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIEFuIGV2ZW50IGhhbmRs
ZXIgY2FuIGRlcmVmIHRoaXMgb2JqZWN0LgorICAgIFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmUHRyPERvY3VtZW50PiBvcmlnaW5hbERvY3Vt
ZW50KGRvY3VtZW50KCkpOworICAgIGJvb2wgbmVlZHNEZWZhdWx0QWN0aW9uID0gZGlzcGF0Y2hF
dmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlkRXZlbnQsIGZhbHNlLCB0cnVl
KSk7CisgICAgaWYgKG5lZWRzRGVmYXVsdEFjdGlvbiAmJiB1bmhhbmRsZWRJbnZhbGlkQ29udHJv
bHMgJiYgaW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0gZG9jdW1lbnQoKSkKKyAg
ICAgICAgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLT5hcHBlbmQodGhpcyk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29u
dHJvbEVsZW1lbnQoKQoreworICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZhaWxz
LCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKSBpcyBub3QgY2FsbGVkCisgICAgLy8gY29ycmVjdGx5
IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMgdmFsaWRpdHkgaXMgdXBkYXRlZC4KKyAgICBB
U1NFUlQobV9pc1ZhbGlkID09IHZhbGlkaXR5KCktPnZhbGlkKCkpOworICAgIHJldHVybiBtX2lz
VmFsaWQ7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmVlZHNWYWxpZGl0
eUNoZWNrKCkKK3sKKyAgICBib29sIG5ld0lzVmFsaWQgPSB2YWxpZGl0eSgpLT52YWxpZCgpOwor
ICAgIGlmICh3aWxsVmFsaWRhdGUoKSAmJiBuZXdJc1ZhbGlkICE9IG1faXNWYWxpZCkgeworICAg
ICAgICAvLyBVcGRhdGUgc3R5bGUgZm9yIHBzZXVkbyBjbGFzc2VzIHN1Y2ggYXMgOnZhbGlkIDpp
bnZhbGlkLgorICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgfQorICAgIG1faXNW
YWxpZCA9IG5ld0lzVmFsaWQ7CisKKyAgICAvLyBVcGRhdGVzIG9ubHkgaWYgdGhpcyBjb250cm9s
IGFscmVhZHkgaGFzIGEgdmFsaWR0aW9uIG1lc3NhZ2UuCisgICAgaWYgKCF2aXNpYmxlVmFsaWRh
dGlvbk1lc3NhZ2UoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQ2FsbHMgdXBkYXRlVmlzaWJs
ZVZhbGlkYXRpb25NZXNzYWdlKCkgZXZlbiBpZiBtX2lzVmFsaWQgaXMgbm90CisgICAgICAgIC8v
IGNoYW5nZWQgYmVjYXVzZSBhIHZhbGlkYXRpb24gbWVzc2FnZSBjYW4gYmUgY2hhZ25lZC4KKyAg
ICAgICAgdXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7CisgICAgfQorfQorCit2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmluZyYg
ZXJyb3IpCit7CisgICAgdmFsaWRpdHkoKS0+c2V0Q3VzdG9tRXJyb3JNZXNzYWdlKGVycm9yKTsK
K30KKyAgICAKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50
KCkKK3sKKyAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICBkb2N1bWVudCgpLT5w
YWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+Zm9ybURpZEZvY3VzKHRoaXMpOworCisgICAgSFRN
TEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCgpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKK3sKKyAgICBpZiAoZG9jdW1lbnQoKS0+cGFn
ZSgpKQorICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+Zm9y
bURpZEJsdXIodGhpcyk7CisKKyAgICBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKTsK
KyAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Cit9CisKK0hUTUxGb3JtRWxlbWVu
dCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlydHVhbEZvcm0oKSBjb25zdAoreworICAgIHJl
dHVybiBtX2Zvcm07Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNEZWZhdWx0
QnV0dG9uRm9yRm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1
dHRvbigpICYmIG1fZm9ybSAmJiBtX2Zvcm0tPmRlZmF1bHRCdXR0b24oKSA9PSB0aGlzOworfQor
Cit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZUZyb21Gb3JtKCkKK3sKKyAgICBp
ZiAoIW1fZm9ybSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1l
bnQodGhpcyk7CisgICAgbV9mb3JtID0gMDsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpyZXNldEZvcm1Pd25lcihIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCit7CisgICAgaWYgKG1f
Zm9ybSkgeworICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwor
ICAgIH0KKyAgICBtX2Zvcm0gPSAwOworICAgIGlmIChmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRy
KSkgeworICAgICAgICAvLyBUaGUgSFRNTDUgc3BlYyBzYXlzIHRoYXQgdGhlIGVsZW1lbnQgc2hv
dWxkIGJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAvLyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0
aGUgZG9jdW1lbnQgdG8gaGF2ZSBhbiBJRCB0aGF0IGVxdWFsIHRvCisgICAgICAgIC8vIHRoZSB2
YWx1ZSBvZiBmb3JtIGF0dHJpYnV0ZSwgc28gd2UgcHV0IHRoZSByZXN1bHQgb2YKKyAgICAgICAg
Ly8gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoKSBvdmVyIHRoZSBnaXZlbiBlbGVtZW50Lgor
ICAgICAgICBFbGVtZW50KiBmaXJzdEVsZW1lbnQgPSBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJ
ZChmYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7CisgICAgICAgIGlmIChmaXJzdEVsZW1lbnQg
JiYgZmlyc3RFbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpKQorICAgICAgICAgICAgbV9mb3Jt
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZmlyc3RFbGVtZW50KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9mb3JtID0gZm9ybTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9m
b3JtID0gZmluZEZvcm1BbmNlc3RvcigpOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fZm9y
bS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIGRvY3VtZW50
KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Cit9CisKK3ZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJv
b2wgcHJlc2VydmVEZWNscykKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IGZvcm1BdHRyKSB7
CisgICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKKyAgICAgICAgICAg
IC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1vdmVkLiBXZSBuZWVkIHRvIHJlc2V0IGZvcm0gb3du
ZXIgaGVyZS4KKyAgICAgICAgICAgIGlmIChtX2Zvcm0pCisgICAgICAgICAgICAgICAgbV9mb3Jt
LT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1fZm9ybSA9IGZpbmRGb3Jt
QW5jZXN0b3IoKTsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0pCisgICAgICAgICAgICAgICAgbV9m
b3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhp
cyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzZXRGb3JtT3duZXIoMCk7CisgICAg
fQorICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZlRGVjbHMp
OworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzTGFiZWxhYmxlKCkgY29uc3QK
K3sKKyAgICAvLyBGSVhNRTogQWRkIG1ldGVyVGFnIGFuZCBvdXRwdXRUYWcgdG8gdGhlIGxpc3Qg
b25jZSB3ZSBzdXBwb3J0IHRoZW0uCisgICAgcmV0dXJuIGhhc1RhZ05hbWUoYnV0dG9uVGFnKSB8
fCBoYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBoYXNUYWdOYW1lKGtleWdlblRhZykKKyNpZiBFTkFC
TEUoTUVURVJfVEFHKQorICAgICAgICB8fCBoYXNUYWdOYW1lKG1ldGVyVGFnKQorI2VuZGlmCisj
aWYgRU5BQkxFKFBST0dSRVNTX1RBRykKKyAgICAgICAgfHwgaGFzVGFnTmFtZShwcm9ncmVzc1Rh
ZykKKyNlbmRpZgorICAgICAgICB8fCBoYXNUYWdOYW1lKHNlbGVjdFRhZykgfHwgaGFzVGFnTmFt
ZSh0ZXh0YXJlYVRhZyk7Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZUxpc3Q+IEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmxhYmVscygpCit7CisgICAgaWYgKCFpc0xhYmVsYWJsZSgpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoIWRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IE5vZGU6OmVuc3VyZVJhcmVEYXRhKCk7CisgICAgaWYg
KCFkYXRhLT5ub2RlTGlzdHMoKSkgeworICAgICAgICBkYXRhLT5zZXROb2RlTGlzdHMoTm9kZUxp
c3RzTm9kZURhdGE6OmNyZWF0ZSgpKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+YWRkTm9kZUxpc3RD
YWNoZSgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gTGFiZWxzTm9kZUxpc3Q6OmNyZWF0ZSh0
aGlzKTsKK30KKyAgICAKK0hUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OkhUTUxGb3Jt
Q29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQorICAgIDogSFRNTEZvcm1Db250cm9sRWxl
bWVudCh0YWdOYW1lLCBkb2MsIGYpCit7CisgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxl
bWVudFdpdGhTdGF0ZSh0aGlzKTsKK30KKworSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZTo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoKQoreworICAgIGRvY3VtZW50KCkt
PnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKK30KKwordm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpCit7
CisgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKHRoaXMpOwor
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7
Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlkTW92ZVRvTmV3
T3duZXJEb2N1bWVudCgpCit7CisgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdp
dGhTdGF0ZSh0aGlzKTsKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaWRNb3ZlVG9OZXdP
d25lckRvY3VtZW50KCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZTo6YXV0b0NvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIWZvcm0oKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIGZvcm0oKS0+YXV0b0NvbXBsZXRlKCk7Cit9CisKK2Jvb2wg
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6c2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3Jt
Q29udHJvbFN0YXRlKCkgY29uc3QKK3sKKyAgICAvLyBXZSBkb24ndCBzYXZlL3Jlc3RvcmUgY29u
dHJvbCBzdGF0ZSBpbiBhIGZvcm0gd2l0aCBhdXRvY29tcGxldGU9b2ZmLgorICAgIHJldHVybiBh
dHRhY2hlZCgpICYmIGF1dG9Db21wbGV0ZSgpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGU6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCit7CisgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICAvLyBXZSBkb24n
dCBzYXZlIHN0YXRlIG9mIGEgY29udHJvbCB3aXRoIHNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNv
bnRyb2xTdGF0ZSgpPWZhbHNlLgorICAgIC8vIEJ1dCB3ZSBuZWVkIHRvIHNraXAgcmVzdG9yaW5n
IHByb2Nlc3MgdG9vIGJlY2F1c2UgYSBjb250cm9sIGluIGFub3RoZXIKKyAgICAvLyBmb3JtIG1p
Z2h0IGhhdmUgdGhlIHNhbWUgcGFpciBvZiBuYW1lIGFuZCB0eXBlIGFuZCBzYXZlZCBpdHMgc3Rh
dGUuCisgICAgaWYgKCFzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9sU3RhdGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7CisgICAgaWYg
KGRvYy0+aGFzU3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoKSkgeworICAgICAgICBTdHJpbmcgc3Rh
dGU7CisgICAgICAgIGlmIChkb2MtPnRha2VTdGF0ZUZvckZvcm1FbGVtZW50KG5hbWUoKS5pbXBs
KCksIHR5cGUoKS5pbXBsKCksIHN0YXRlKSkKKyAgICAgICAgICAgIHJlc3RvcmVGb3JtQ29udHJv
bFN0YXRlKHN0YXRlKTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRF
dmVudCAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzVGV4dENvbnRyb2woKSkgeworICAg
ICAgICB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zdWJ0cmVlSGFzQ2hhbmdlZCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50OjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCisgICAgOiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRhZ05hbWUsIGRvYywgZm9ybSkKK3sKK30KKworSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgpCit7
Cit9CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVu
dCgpCit7CisgICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIoKSkKKyAgICAgICAgdXBkYXRlUGxh
Y2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKKyAgICBoYW5kbGVGb2N1c0V2ZW50KCk7CisgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Cit9
CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkK
K3sKKyAgICBpZiAoc3VwcG9ydHNQbGFjZWhvbGRlcigpKQorICAgICAgICB1cGRhdGVQbGFjZWhv
bGRlclZpc2liaWxpdHkoZmFsc2UpOworICAgIGhhbmRsZUJsdXJFdmVudCgpOworICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNoQmx1ckV2ZW50KCk7Cit9CisKK1N0
cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c3RyaXBwZWRQbGFjZWhvbGRlcigpIGNv
bnN0Cit7CisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uLCB3ZSBu
ZWVkIHRvIHJlbW92ZSBDUiBhbmQgTEYgZnJvbQorICAgIC8vIHRoZSBhdHRyaWJ1dGUgdmFsdWUu
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZShw
bGFjZWhvbGRlckF0dHIpOworICAgIGlmICghYXR0cmlidXRlVmFsdWUuY29udGFpbnMobmV3bGlu
ZUNoYXJhY3RlcikgJiYgIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKGNhcnJpYWdlUmV0dXJuKSkK
KyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlOworCisgICAgVmVjdG9yPFVDaGFyPiBzdHJp
cHBlZDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVWYWx1ZS5sZW5ndGgoKTsKKyAg
ICBzdHJpcHBlZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gYXR0cmli
dXRlVmFsdWVbaV07CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gbmV3bGluZUNoYXJhY3RlciB8
fCBjaGFyYWN0ZXIgPT0gY2FycmlhZ2VSZXR1cm4pCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgc3RyaXBwZWQuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgfQorICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KHN0cmlwcGVkKTsKK30KKworc3RhdGljIGJvb2wgaXNOb3RMaW5lQnJlYWsoVUNo
YXIgY2gpIHsgcmV0dXJuIGNoICE9IG5ld2xpbmVDaGFyYWN0ZXIgJiYgY2ggIT0gY2FycmlhZ2VS
ZXR1cm47IH0KKworYm9vbCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aXNQbGFjZWhvbGRl
ckVtcHR5KCkgY29uc3QKK3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVl
ID0gZ2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVZh
bHVlLnN0cmluZygpLmZpbmQoaXNOb3RMaW5lQnJlYWspID09IG5vdEZvdW5kOworfQorCitib29s
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHN1cHBvcnRzUGxhY2Vob2xkZXIoKQorICAgICAgICAmJiBp
c0VtcHR5VmFsdWUoKQorICAgICAgICAmJiBkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRo
aXMKKyAgICAgICAgJiYgIWlzUGxhY2Vob2xkZXJFbXB0eSgpOworfQorCit2b2lkIEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoYm9vbCBwbGFj
ZWhvbGRlclZhbHVlQ2hhbmdlZCkKK3sKKyAgICBpZiAoc3VwcG9ydHNQbGFjZWhvbGRlcigpICYm
IHJlbmRlcmVyKCkpCisgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnVw
ZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpLCBw
bGFjZWhvbGRlclZhbHVlQ2hhbmdlZCk7Cit9CisKK1JlbmRlclRleHRDb250cm9sKiBIVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudDo6dGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQoKQorewor
ICAgIGlmICghaXNUZXh0Rm9ybUNvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZG9j
dW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgcmV0
dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSk7Cit9CisKK3ZvaWQgSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblN0YXJ0KGludCBzdGFydCkKK3sKKyAgICBz
ZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgbWF4KHN0YXJ0LCBzZWxlY3Rpb25FbmQoKSkpOworfQor
Cit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25FbmQoaW50IGVu
ZCkKK3sKKyAgICBzZXRTZWxlY3Rpb25SYW5nZShtaW4oZW5kLCBzZWxlY3Rpb25TdGFydCgpKSwg
ZW5kKTsKK30KKwordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0KCkKK3sK
KyAgICBzZXRTZWxlY3Rpb25SYW5nZSgwLCBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Cit9
CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlKGlu
dCBzdGFydCwgaW50IGVuZCkKK3sKKyAgICBXZWJDb3JlOjpzZXRTZWxlY3Rpb25SYW5nZSh0aGlz
LCBzdGFydCwgZW5kKTsKK30KKworaW50IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxl
Y3Rpb25TdGFydCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1RleHRGb3JtQ29udHJvbCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlz
ICYmIGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPj0gMCkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFNl
bGVjdGlvblN0YXJ0KCk7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uU3Rh
cnQoKTsKK30KKworaW50IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25FbmQo
KSBjb25zdAoreworICAgIGlmICghaXNUZXh0Rm9ybUNvbnRyb2woKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcyAmJiBjYWNoZWRT
ZWxlY3Rpb25FbmQoKSA+PSAwKQorICAgICAgICByZXR1cm4gY2FjaGVkU2VsZWN0aW9uRW5kKCk7
CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdG9S
ZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uRW5kKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8UmFuZ2U+IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb24oKSBjb25z
dAoreworICAgIGlmICghcmVuZGVyZXIoKSB8fCAhaXNUZXh0Rm9ybUNvbnRyb2woKSB8fCBjYWNo
ZWRTZWxlY3Rpb25TdGFydCgpIDwgMCB8fCBjYWNoZWRTZWxlY3Rpb25FbmQoKSA8IDApCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkp
LT5zZWxlY3Rpb24oY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSwgY2FjaGVkU2VsZWN0aW9uRW5kKCkp
OworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBwbGFjZWhv
bGRlckF0dHIpCisgICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSh0cnVlKTsKKyAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxlY3RBdHRyKQorICAgICAgICBzZXRBdHRy
aWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCwgY3JlYXRlQXR0cmli
dXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG9uY2hhbmdlQXR0cikKKyAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuY2hhbmdlRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywg
YXR0cikpOworICAgIGVsc2UKKyAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYmNv
cmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3
MzAwNykKKysrIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw0MSArMjMsMjUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIkZvcm1Bc3NvY2lh
dGVkRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ2hhcmFj
dGVyTmFtZXMuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnQu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50UGFyc2VyLmgiCi0j
aW5jbHVkZSAiRWxlbWVudFJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRl
ICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkxhYmVsc05vZGVMaXN0LmgiCi0jaW5jbHVkZSAiUGFn
ZS5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9s
LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRlICJTY3JpcHRFdmVudExpc3Rl
bmVyLmgiCisjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJWYWxpZGF0
aW9uTWVzc2FnZS5oIgogI2luY2x1ZGUgIlZhbGlkaXR5U3RhdGUuaCIKLSNpbmNsdWRlIDxsaW1p
dHM+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwogCi1IVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQot
ICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2Zvcm0oZm9ybSkK
K0Zvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50KEhUTUxGb3JtRWxl
bWVudCogZm9ybSkKKyAgICA6IG1fZm9ybShmb3JtKQogICAgICwgbV9kaXNhYmxlZChmYWxzZSkK
ICAgICAsIG1fcmVhZE9ubHkoZmFsc2UpCiAgICAgLCBtX3JlcXVpcmVkKGZhbHNlKQpAQCAtNjYs
MzAgKzUwLDE4IEBAIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEUKICAg
ICAsIG1fd2lsbFZhbGlkYXRlKHRydWUpCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKIHsKLSAgICBp
ZiAoIW1fZm9ybSkKLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwotICAgIGlm
IChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKIH0K
IAotSFRNTEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKQorRm9y
bUFzc29jaWF0ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KCkKIHsKLSAgICBpZiAo
bV9mb3JtKQotICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwogfQogCi12
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRldGFjaCgpCitib29sIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudDo6Zm9ybU5vVmFsaWRhdGUoKSBjb25zdAogewotICAgIGhpZGVWaXNpYmxlVmFsaWRh
dGlvbk1lc3NhZ2UoKTsKLSAgICBIVE1MRWxlbWVudDo6ZGV0YWNoKCk7CisgICAgcmV0dXJuICF0
b0hUTUxFbGVtZW50KHRoaXMpLT5nZXRBdHRyaWJ1dGUoZm9ybW5vdmFsaWRhdGVBdHRyKS5pc051
bGwoKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtTm9WYWxpZGF0ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZm9ybW5vdmFsaWRhdGVBdHRyKS5p
c051bGwoKTsKLX0KLQotVmFsaWRpdHlTdGF0ZSogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFs
aWRpdHkoKQorVmFsaWRpdHlTdGF0ZSogRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp2YWxpZGl0eSgp
CiB7CiAgICAgaWYgKCFtX3ZhbGlkaXR5U3RhdGUpCiAgICAgICAgIG1fdmFsaWRpdHlTdGF0ZSA9
IFZhbGlkaXR5U3RhdGU6OmNyZWF0ZSh0aGlzKTsKQEAgLTk3LDg2ICs2OSwzNyBAQCBWYWxpZGl0
eVN0YXRlKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2CiAgICAgcmV0dXJuIG1fdmFsaWRpdHlT
dGF0ZS5nZXQoKTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBk
aXNhYmxlZEF0dHIpIHsKLSAgICAgICAgYm9vbCBvbGREaXNhYmxlZCA9IG1fZGlzYWJsZWQ7Ci0g
ICAgICAgIG1fZGlzYWJsZWQgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgICAgIGlmIChvbGREaXNh
YmxlZCAhPSBtX2Rpc2FibGVkKSB7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7
Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNB
cHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVD
aGFuZ2VkKHJlbmRlcmVyKCksIEVuYWJsZWRTdGF0ZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSByZWFkb25seUF0dHIpIHsKLSAgICAgICAgYm9vbCBvbGRSZWFk
T25seSA9IG1fcmVhZE9ubHk7Ci0gICAgICAgIG1fcmVhZE9ubHkgPSAhYXR0ci0+aXNOdWxsKCk7
Ci0gICAgICAgIGlmIChvbGRSZWFkT25seSAhPSBtX3JlYWRPbmx5KSB7Ci0gICAgICAgICAgICBz
ZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5k
ZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVy
ZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIFJlYWRPbmx5U3RhdGUpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVxdWlyZWRBdHRyKSB7
Ci0gICAgICAgIGJvb2wgb2xkUmVxdWlyZWQgPSBtX3JlcXVpcmVkOwotICAgICAgICBtX3JlcXVp
cmVkID0gIWF0dHItPmlzTnVsbCgpOwotICAgICAgICBpZiAob2xkUmVxdWlyZWQgIT0gbV9yZXF1
aXJlZCkgewotICAgICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci0gICAgICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7IC8vIFVwZGF0ZXMgZm9yIDpyZXF1aXJlZCA6b3B0aW9u
YWwgY2xhc3Nlcy4KLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci0gICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVj
aygpOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCgpCitzdGF0aWMg
SFRNTEZvcm1FbGVtZW50KiBmaW5kRm9ybU93bmVyKEhUTUxFbGVtZW50KiBlbGVtZW50KQogewot
ICAgIEFTU0VSVCghYXR0YWNoZWQoKSk7Ci0KLSAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7Ci0K
LSAgICAvLyBUaGUgY2FsbCB0byB1cGRhdGVGcm9tRWxlbWVudCgpIG5lZWRzIHRvIGdvIGFmdGVy
IHRoZSBjYWxsIHRocm91Z2gKLSAgICAvLyB0byB0aGUgYmFzZSBjbGFzcydzIGF0dGFjaCgpIGJl
Y2F1c2UgdGhhdCBjYW4gc29tZXRpbWVzIGRvIGEgY2xvc2UKLSAgICAvLyBvbiB0aGUgcmVuZGVy
ZXIuCi0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21F
bGVtZW50KCk7Ci0gICAgICAgIAotICAgIC8vIEZvY3VzIHRoZSBlbGVtZW50IGlmIGl0IHNob3Vs
ZCBob25vdXIgaXRzIGF1dG9mb2N1cyBhdHRyaWJ1dGUuCi0gICAgLy8gV2UgaGF2ZSB0byBkZXRl
cm1pbmUgaWYgdGhlIGVsZW1lbnQgaXMgYSBUZXh0QXJlYS9JbnB1dC9CdXR0b24vU2VsZWN0LAot
ICAgIC8vIGlmIGlucHV0IHR5cGUgaGlkZGVuIGlnbm9yZSBhdXRvZm9jdXMuIFNvIGlmIGRpc2Fi
bGVkIG9yIHJlYWRvbmx5LgotICAgIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4gPSBmYWxzZTsKLSAg
ICBpZiAoaGFzVGFnTmFtZShpbnB1dFRhZykpCi0gICAgICAgIGlzSW5wdXRUeXBlSGlkZGVuID0g
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHRoaXMpLT5pc0lucHV0VHlwZUhpZGRlbigp
OwotCi0gICAgaWYgKGF1dG9mb2N1cygpICYmIHJlbmRlcmVyKCkgJiYgIWRvY3VtZW50KCktPmln
bm9yZUF1dG9mb2N1cygpICYmICFpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKSAmJgotICAgICAgICAg
ICAgKChoYXNUYWdOYW1lKGlucHV0VGFnKSAmJiAhaXNJbnB1dFR5cGVIaWRkZW4pIHx8IGhhc1Rh
Z05hbWUoc2VsZWN0VGFnKSB8fAotICAgICAgICAgICAgICBoYXNUYWdOYW1lKGJ1dHRvblRhZykg
fHwgaGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpKQotICAgICAgICAgZm9jdXMoKTsKKyAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5w
YXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykpCisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSk7Cisg
ICAgfQorICAgIHJldHVybiAwOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omlu
c2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omlu
c2VydGVkSW50b1RyZWUoKQogewotICAgIGlmIChmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkg
ewotICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1
dGUodGhpcyk7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudCgpLT5nZXRFbGVt
ZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7Ci0gICAgICAgIGlmIChlbGVtZW50
ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpIHsKKyAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IHRvSFRNTEVsZW1lbnQodGhpcyk7CisgICAgaWYgKGVsZW1lbnQtPmZhc3RIYXNBdHRy
aWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnJlZ2lzdGVy
Rm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKKyAgICAgICAgRWxlbWVudCogZm9y
bUVsZW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7CisgICAgICAgIGlmIChmb3JtRWxlbWVudCAmJiBm
b3JtRWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewogICAgICAgICAgICAgaWYgKG1fZm9y
bSkKICAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwotICAg
ICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZWxlbWVudCk7
CisgICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihmb3Jt
RWxlbWVudCk7CiAgICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFtX2Zvcm0pIHsKICAgICAgICAgLy8gVGhpcyBo
YW5kbGVzIHRoZSBjYXNlIG9mIGEgbmV3IGZvcm0gZWxlbWVudCBiZWluZyBjcmVhdGVkIGJ5CiAg
ICAgICAgIC8vIEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBhIGZvcm0uICBJbiB0aGUg
Y2FzZSBvZiB0aGUgcGFyc2VyCi0gICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3aWxsIGFs
cmVhZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sIAorICAgICAgICAvLyBzZXR0
aW5nIGEgZm9ybSwgd2Ugd2lsbCBhbHJlYWR5IGhhdmUgYSBub24tbnVsbCB2YWx1ZSBmb3IgbV9m
b3JtLAogICAgICAgICAvLyBhbmQgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAg
ICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOworICAgICAgICBtX2Zvcm0gPSBmaW5k
Rm9ybU93bmVyKGVsZW1lbnQpOwogICAgICAgICBpZiAobV9mb3JtKQogICAgICAgICAgICAgbV9m
b3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogICAg
IH0KLQotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOwogfQogCiBzdGF0
aWMgaW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4pCkBAIC0xODcsMTE3ICsxMTAsMjYgQEAg
c3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9vdChOb2RlKiBuKQogICAgIHJldHVybiByb290Owog
fQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRl
ZXApCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKCkKIHsKLSAg
ICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCi0gICAgICAgIGRvY3VtZW50KCktPnVu
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOworICAgIEhUTUxFbGVt
ZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKKyAgICBpZiAoZWxlbWVudC0+ZmFz
dEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnVu
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOwogCiAgICAgLy8gSWYg
dGhlIGZvcm0gYW5kIGVsZW1lbnQgYXJlIGJvdGggaW4gdGhlIHNhbWUgdHJlZSwgcHJlc2VydmUg
dGhlIGNvbm5lY3Rpb24gdG8gdGhlIGZvcm0uCiAgICAgLy8gT3RoZXJ3aXNlLCBudWxsIG91dCBv
dXIgZm9ybSBhbmQgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBmb3JtJ3MgbGlzdCBvZiBlbGVt
ZW50cy4KLSAgICBpZiAobV9mb3JtICYmIGZpbmRSb290KHRoaXMpICE9IGZpbmRSb290KG1fZm9y
bSkpIHsKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAg
bV9mb3JtID0gMDsKLSAgICB9Ci0KLSAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGRl
ZXApOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZv
cm1Db250cm9sTmFtZSgpIGNvbnN0Ci17Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0g
ZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci0gICAgcmV0dXJuIG5hbWUuaXNOdWxsKCkgPyBl
bXB0eUF0b20gOiBuYW1lOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5h
bWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0
dHIsIHZhbHVlKTsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZv
cm1Db250cm9sQ2hhbmdlRXZlbnQoKQotewotICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIHRydWUsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6c2V0RGlzYWJsZWQoYm9vbCBiKQotewotICAgIHNldEF0dHJp
YnV0ZShkaXNhYmxlZEF0dHIsIGIgPyAiIiA6IDApOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmF1dG9mb2N1cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShh
dXRvZm9jdXNBdHRyKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVxdWlyZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHVw
ZGF0ZUZyb21FbGVtZW50Q2FsbGJhY2soTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlRfQVJHKG5v
ZGUsIG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgQVNTRVJUX0FSRyhub2RlLCBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpOwotICAgIEFTU0VS
VChub2RlLT5yZW5kZXJlcigpKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5v
ZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwot
fQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdl
IGNoYW5nZSkKLXsKLSAgICBIVE1MRWxlbWVudDo6cmVjYWxjU3R5bGUoY2hhbmdlKTsKLQotICAg
IC8vIHVwZGF0ZUZyb21FbGVtZW50KCkgY2FuIGNhdXNlIHRoZSBzZWxlY3Rpb24gdG8gY2hhbmdl
LCBhbmQgaW4gdHVybgotICAgIC8vIHRyaWdnZXIgc3luY2hyb25vdXMgbGF5b3V0LCBzbyBpdCBt
dXN0IG5vdCBiZSBjYWxsZWQgZHVyaW5nIHN0eWxlIHJlY2FsYy4KLSAgICBpZiAocmVuZGVyZXIo
KSkKLSAgICAgICAgcXVldWVQb3N0QXR0YWNoQ2FsbGJhY2sodXBkYXRlRnJvbUVsZW1lbnRDYWxs
YmFjaywgdGhpcyk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNG
b2N1cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFkaXNhYmxlZCgpOwotfQotCi1ib29sIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRl
cmVyKCkgfHwgCi0gICAgICAgICFyZW5kZXJlcigpLT5pc0JveCgpIHx8IHRvUmVuZGVyQm94KHJl
bmRlcmVyKCkpLT5zaXplKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ly8gSFRNTEVsZW1lbnQ6OmlzRm9jdXNhYmxlIGhhbmRsZXMgdmlzaWJpbGl0eSBhbmQgY2FsbHMg
c3Vwb3J0c0ZvY3VzIHdoaWNoCi0gICAgLy8gd2lsbCBjb3ZlciB0aGUgZGlzYWJsZWQgY2FzZS4K
LSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCk7Ci19Ci0KLWJvb2wgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVu
dCkgY29uc3QKLXsKLSAgICBpZiAoaXNGb2N1c2FibGUoKSkKLSAgICAgICAgaWYgKGRvY3VtZW50
KCktPmZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZl
bnRIYW5kbGVyKCktPnRhYnNUb0FsbENvbnRyb2xzKGV2ZW50KTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNv
bnN0Ci17Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKLSAgICByZXR1cm4gSFRN
TEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwot
I2VuZGlmCisgICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9vdChlbGVtZW50KSAhPSBmaW5kUm9vdCht
X2Zvcm0pKQorICAgICAgICByZW1vdmVGcm9tRm9ybSgpOwogfQogCi1zaG9ydCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0Ci17Ci0gICAgLy8gU2tpcCB0aGUgc3VwcG9y
dHNGb2N1cyBjaGVjayBpbiBIVE1MRWxlbWVudC4KLSAgICByZXR1cm4gRWxlbWVudDo6dGFiSW5k
ZXgoKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWNhbGNXaWxsVmFsaWRh
dGUoKSBjb25zdAorYm9vbCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlY2FsY1dpbGxWYWxpZGF0
ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCByZXR1cm4gZmFsc2UgaWYgdGhpcyBl
bGVtZW50IGhhcyBhIGRhdGFsaXN0IGVsZW1lbnQgYXMgYW4KICAgICAvLyBhbmNlc3Rvci4gU2Vl
IEhUTUw1IDQuMTAuMTAgJ1RoZSBkYXRhbGlzdCBlbGVtZW50LicKICAgICByZXR1cm4gIW1fZGlz
YWJsZWQgJiYgIW1fcmVhZE9ubHk7CiB9CiAKLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
d2lsbFZhbGlkYXRlKCkgY29uc3QKK2Jvb2wgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp3aWxsVmFs
aWRhdGUoKSBjb25zdAogewogICAgIGlmICghbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCkgewog
ICAgICAgICBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsKQEAgLTMxMSw3ICsxNDMs
NyBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0CiAgICAgcmV0dXJu
IG1fd2lsbFZhbGlkYXRlOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5l
ZWRzV2lsbFZhbGlkYXRlQ2hlY2soKQordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldE5l
ZWRzV2lsbFZhbGlkYXRlQ2hlY2soKQogewogICAgIC8vIFdlIG5lZWQgdG8gcmVjYWxjdWxhdGUg
d2lsbFZhbGlkdGUgaW1tZWRpYXRlbHkgYmVjYXVzZSB3aWxsVmFsaWRhdGUKICAgICAvLyBjaGFu
Z2UgY2FuIGNhdXNlcyBzdHlsZSBjaGFuZ2UuCkBAIC0zMjAsMjggKzE1MiwyOSBAQCB2b2lkIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsCiAgICAgICAgIHJldHVybjsKICAgICBt
X3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsKICAgICBtX3dpbGxWYWxpZGF0ZSA9IG5l
d1dpbGxWYWxpZGF0ZTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgdG9IVE1MRWxl
bWVudCh0aGlzKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIGlmICghbV93aWxsVmFsaWRh
dGUpCiAgICAgICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKIH0KIAotU3RyaW5n
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkKK1N0cmluZyBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkKIHsKICAgICByZXR1cm4gdmFs
aWRpdHkoKS0+dmFsaWRhdGlvbk1lc3NhZ2UoKTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQordm9pZCBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCiB7Ci0gICAgUGFn
ZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9
IHRvSFRNTEVsZW1lbnQodGhpcyk7CisgICAgUGFnZSogcGFnZSA9IGVsZW1lbnQtPmRvY3VtZW50
KCktPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKICAgICBTdHJpbmcg
bWVzc2FnZTsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiB3aWxsVmFsaWRhdGUoKSkgeworICAgIGlm
IChlbGVtZW50LT5yZW5kZXJlcigpICYmIHdpbGxWYWxpZGF0ZSgpKSB7CiAgICAgICAgIG1lc3Nh
Z2UgPSB2YWxpZGF0aW9uTWVzc2FnZSgpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAvLyBI
VE1MNSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgYXNrIFVBIHRvIHNob3cgdGhlIHRpdGxlIGF0dHJp
YnV0ZSB2YWx1ZQogICAgICAgICAvLyB3aXRoIHRoZSB2YWxpZGF0aW9uTWVzc2FnZS4gIEhvd2V2
ZXIsIHRoaXMgYmVoYXZpb3IgaXMgc2FtZSBhcyBPcGVyYQogICAgICAgICAvLyBhbmQgdGhlIHNw
ZWNpZmljYXRpb24gZGVzY3JpYmVzIHN1Y2ggYmVoYXZpb3IgYXMgYW4gZXhhbXBsZS4KLSAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwor
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRl
KHRpdGxlQXR0cik7CiAgICAgICAgIGlmICghbWVzc2FnZS5pc0VtcHR5KCkgJiYgIXRpdGxlLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ1xuJyk7CiAgICAgICAgICAg
ICBtZXNzYWdlLmFwcGVuZCh0aXRsZSk7CkBAIC0zNTYsMzAgKzE4OSwzMSBAQCB2b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVZpc2liCiAgICAgICAgIG1fdmFsaWRhdGlvbk1lc3Nh
Z2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCiB7CiAgICAgbV92YWxpZGF0aW9u
TWVzc2FnZSA9IDA7CiB9CiAKLVN0cmluZyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2aXNpYmxl
VmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdAorU3RyaW5nIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6
dmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV92YWxpZGF0
aW9uTWVzc2FnZSA/IG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSA6IFN0cmluZygpOwog
fQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoVmVjdG9yPFJl
ZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMp
Citib29sIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRy
PEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQogewog
ICAgIGlmICghd2lsbFZhbGlkYXRlKCkgfHwgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAvLyBBbiBldmVudCBoYW5kbGVyIGNhbiBkZXJlZiB0
aGlzIG9iamVjdC4KLSAgICBSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gcHJvdGVjdG9y
KHRoaXMpOwotICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2luYWxEb2N1bWVudChkb2N1bWVudCgp
KTsKLSAgICBib29sIG5lZWRzRGVmYXVsdEFjdGlvbiA9IGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxzZSwgdHJ1ZSkpOwotICAgIGlmIChu
ZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzICYmIGluRG9jdW1l
bnQoKSAmJiBvcmlnaW5hbERvY3VtZW50ID09IGRvY3VtZW50KCkpCisgICAgUmVmUHRyPEZvcm1B
c3NvY2lhdGVkRWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOworICAgIEhUTUxFbGVtZW50KiBlbGVt
ZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG9yaWdpbmFs
RG9jdW1lbnQoZWxlbWVudC0+ZG9jdW1lbnQoKSk7CisgICAgYm9vbCBuZWVkc0RlZmF1bHRBY3Rp
b24gPSBlbGVtZW50LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmlu
dmFsaWRFdmVudCwgZmFsc2UsIHRydWUpKTsKKyAgICBpZiAobmVlZHNEZWZhdWx0QWN0aW9uICYm
IHVuaGFuZGxlZEludmFsaWRDb250cm9scyAmJiBlbGVtZW50LT5pbkRvY3VtZW50KCkgJiYgb3Jp
Z2luYWxEb2N1bWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpKQogICAgICAgICB1bmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHMtPmFwcGVuZCh0aGlzKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpCiti
b29sIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpCiB7
CiAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmFpbHMsIHNldE5lZWRzVmFsaWRp
dHlDaGVjaygpIGlzIG5vdCBjYWxsZWQKICAgICAvLyBjb3JyZWN0bHkgd2hlbiBzb21ldGhpbmcg
d2hpY2ggY2hhbmdlcyB2YWxpZGl0eSBpcyB1cGRhdGVkLgpAQCAtMzg3LDEyICsyMjEsMTIgQEAg
Ym9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlkRm9ybQogICAgIHJldHVybiBtX2lz
VmFsaWQ7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmVlZHNWYWxpZGl0
eUNoZWNrKCkKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXROZWVkc1ZhbGlkaXR5Q2hl
Y2soKQogewogICAgIGJvb2wgbmV3SXNWYWxpZCA9IHZhbGlkaXR5KCktPnZhbGlkKCk7CiAgICAg
aWYgKHdpbGxWYWxpZGF0ZSgpICYmIG5ld0lzVmFsaWQgIT0gbV9pc1ZhbGlkKSB7CiAgICAgICAg
IC8vIFVwZGF0ZSBzdHlsZSBmb3IgcHNldWRvIGNsYXNzZXMgc3VjaCBhcyA6dmFsaWQgOmludmFs
aWQuCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgdG9IVE1MRWxlbWVu
dCh0aGlzKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0KICAgICBtX2lzVmFsaWQgPSBu
ZXdJc1ZhbGlkOwogCkBAIC00MDQsMzkgKzIzOCwxMiBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnNldE5lZWRzVmFsCiAgICAgfQogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmluZyYgZXJyb3IpCit2b2lkIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudDo6c2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJiBlcnJvcikKIHsK
ICAgICB2YWxpZGl0eSgpLT5zZXRDdXN0b21FcnJvck1lc3NhZ2UoZXJyb3IpOwogfQotICAgIAot
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKQotewotICAg
IGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hy
b21lKCktPmNsaWVudCgpLT5mb3JtRGlkRm9jdXModGhpcyk7Ci0KLSAgICBIVE1MRWxlbWVudDo6
ZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Ci19CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
ZGlzcGF0Y2hCbHVyRXZlbnQoKQotewotICAgIGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCi0gICAg
ICAgIGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtRGlkQmx1cih0
aGlzKTsKLQotICAgIEhUTUxFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpOwotICAgIGhpZGVW
aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLX0KLQotSFRNTEZvcm1FbGVtZW50KiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojp2aXJ0dWFsRm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9y
bTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0RlZmF1bHRCdXR0b25Gb3JG
b3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYg
bV9mb3JtICYmIG1fZm9ybS0+ZGVmYXVsdEJ1dHRvbigpID09IHRoaXM7Ci19Ci0KLXZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0oKQordm9pZCBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQ6OnJlbW92ZUZyb21Gb3JtKCkKIHsKICAgICBpZiAoIW1fZm9ybSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNDQ0LDI3NyArMjUxLDU5IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6cmVtb3ZlRnJvbUYKICAgICBtX2Zvcm0gPSAwOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnJlc2V0Rm9ybU93bmVyKEhUTUxGb3JtRWxlbWVudCogZm9ybSkKK3ZvaWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1Pd25lcihIVE1MRm9ybUVsZW1lbnQqIGZvcm0p
CiB7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KHRoaXMpOworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUlkKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZm9y
bUF0dHIpKTsKICAgICBpZiAobV9mb3JtKSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0
ZShmb3JtQXR0cikpCisgICAgICAgIGlmIChmb3JtSWQuaXNOdWxsKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CiAgICAgfQog
ICAgIG1fZm9ybSA9IDA7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7Cisg
ICAgaWYgKCFmb3JtSWQuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gVGhlIEhUTUw1IHNwZWMgc2F5
cyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgLy8g
dGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IHRvIGhhdmUgYW4gSUQgdGhhdCBlcXVh
bCB0bwogICAgICAgICAvLyB0aGUgdmFsdWUgb2YgZm9ybSBhdHRyaWJ1dGUsIHNvIHdlIHB1dCB0
aGUgcmVzdWx0IG9mCiAgICAgICAgIC8vIGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKCkgb3Zl
ciB0aGUgZ2l2ZW4gZWxlbWVudC4KLSAgICAgICAgRWxlbWVudCogZmlyc3RFbGVtZW50ID0gZG9j
dW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZmFzdEdldEF0dHJpYnV0ZShmb3JtQXR0cikpOworICAg
ICAgICBFbGVtZW50KiBmaXJzdEVsZW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5nZXRFbGVt
ZW50QnlJZChmb3JtSWQpOwogICAgICAgICBpZiAoZmlyc3RFbGVtZW50ICYmIGZpcnN0RWxlbWVu
dC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKICAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVudCk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIG1fZm9ybSA9IGZvcm07CiAgICAgfSBlbHNlCi0gICAgICAgIG1fZm9ybSA9IGZpbmRGb3Jt
QW5jZXN0b3IoKTsKKyAgICAgICAgbV9mb3JtID0gZmluZEZvcm1Pd25lcihlbGVtZW50KTsKICAg
ICBpZiAobV9mb3JtKQogICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7
Ci0gICAgZWxzZQotICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRk
QnV0dG9uKHRoaXMpOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dHJpYnV0
ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCit2b2lkIEZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQoKQogewotICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gZm9ybUF0dHIpIHsKLSAgICAgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKGZv
cm1BdHRyKSkgewotICAgICAgICAgICAgLy8gVGhlIGZvcm0gYXR0cmlidXRlIHJlbW92ZWQuIFdl
IG5lZWQgdG8gcmVzZXQgZm9ybSBvd25lciBoZXJlLgotICAgICAgICAgICAgaWYgKG1fZm9ybSkK
LSAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwotICAgICAg
ICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwotICAgICAgICAgICAgaWYgKG1fZm9y
bSkKLSAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlv
QnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBy
ZXNldEZvcm1Pd25lcigwKTsKLSAgICB9Ci0gICAgSFRNTEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5n
ZWQoYXR0ciwgcHJlc2VydmVEZWNscyk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6aXNMYWJlbGFibGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBBZGQgbWV0ZXJUYWcgYW5k
IG91dHB1dFRhZyB0byB0aGUgbGlzdCBvbmNlIHdlIHN1cHBvcnQgdGhlbS4KLSAgICByZXR1cm4g
aGFzVGFnTmFtZShidXR0b25UYWcpIHx8IGhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8IGhhc1RhZ05h
bWUoa2V5Z2VuVGFnKQotI2lmIEVOQUJMRShNRVRFUl9UQUcpCi0gICAgICAgIHx8IGhhc1RhZ05h
bWUobWV0ZXJUYWcpCi0jZW5kaWYKLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotICAgICAgICB8
fCBoYXNUYWdOYW1lKHByb2dyZXNzVGFnKQotI2VuZGlmCi0gICAgICAgIHx8IGhhc1RhZ05hbWUo
c2VsZWN0VGFnKSB8fCBoYXNUYWdOYW1lKHRleHRhcmVhVGFnKTsKLX0KLQotUGFzc1JlZlB0cjxO
b2RlTGlzdD4gSFRNTEZvcm1Db250cm9sRWxlbWVudDo6bGFiZWxzKCkKLXsKLSAgICBpZiAoIWlz
TGFiZWxhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghZG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gTm9kZTo6ZW5z
dXJlUmFyZURhdGEoKTsKLSAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKSB7Ci0gICAgICAgIGRh
dGEtPnNldE5vZGVMaXN0cyhOb2RlTGlzdHNOb2RlRGF0YTo6Y3JlYXRlKCkpOwotICAgICAgICBk
b2N1bWVudCgpLT5hZGROb2RlTGlzdENhY2hlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBM
YWJlbHNOb2RlTGlzdDo6Y3JlYXRlKHRoaXMpOwotfQotICAgIAotSFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCi0g
ICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvYywgZikKLXsKLSAgICBkb2N1
bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKHRoaXMpOwotfQotCi1IVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp+SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZSgpCi17Ci0gICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKHRo
aXMpOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OndpbGxNb3Zl
VG9OZXdPd25lckRvY3VtZW50KCkKLXsKLSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVs
ZW1lbnRXaXRoU3RhdGUodGhpcyk7Ci0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6d2lsbE1v
dmVUb05ld093bmVyRG9jdW1lbnQoKTsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
V2l0aFN0YXRlOjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKLXsKLSAgICBkb2N1bWVudCgp
LT5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0YXRlKHRoaXMpOwotICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKLX0KLQotYm9vbCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjphdXRvQ29tcGxldGUoKSBjb25zdAotewotICAgIGlm
ICghZm9ybSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZm9ybSgpLT5hdXRv
Q29tcGxldGUoKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpz
aG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdAotewotICAgIC8vIFdl
IGRvbid0IHNhdmUvcmVzdG9yZSBjb250cm9sIHN0YXRlIGluIGEgZm9ybSB3aXRoIGF1dG9jb21w
bGV0ZT1vZmYuCi0gICAgcmV0dXJuIGF0dGFjaGVkKCkgJiYgYXV0b0NvbXBsZXRlKCk7Ci19Ci0K
LXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZmluaXNoUGFyc2luZ0NoaWxk
cmVuKCkKLXsKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKTsKLQotICAgIC8vIFdlIGRvbid0IHNhdmUgc3RhdGUgb2YgYSBjb250cm9sIHdpdGggc2hv
dWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCk9ZmFsc2UuCi0gICAgLy8gQnV0IHdl
IG5lZWQgdG8gc2tpcCByZXN0b3JpbmcgcHJvY2VzcyB0b28gYmVjYXVzZSBhIGNvbnRyb2wgaW4g
YW5vdGhlcgotICAgIC8vIGZvcm0gbWlnaHQgaGF2ZSB0aGUgc2FtZSBwYWlyIG9mIG5hbWUgYW5k
IHR5cGUgYW5kIHNhdmVkIGl0cyBzdGF0ZS4KLSAgICBpZiAoIXNob3VsZFNhdmVBbmRSZXN0b3Jl
Rm9ybUNvbnRyb2xTdGF0ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9j
ID0gZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jLT5oYXNTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygp
KSB7Ci0gICAgICAgIFN0cmluZyBzdGF0ZTsKLSAgICAgICAgaWYgKGRvYy0+dGFrZVN0YXRlRm9y
Rm9ybUVsZW1lbnQobmFtZSgpLmltcGwoKSwgdHlwZSgpLmltcGwoKSwgc3RhdGUpKQotICAgICAg
ICAgICAgcmVzdG9yZUZvcm1Db250cm9sU3RhdGUoc3RhdGUpOwotICAgIH0KLX0KLQotdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2Via2l0
RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50ICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+
aXNUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIo
KSktPnN1YnRyZWVIYXNDaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQot
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVu
dCogZm9ybSkKLSAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGFnTmFtZSwg
ZG9jLCBmb3JtKQotewotfQotCi1IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50KCkKLXsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCkKLXsKLSAgICBpZiAoc3VwcG9ydHNQbGFjZWhvbGRl
cigpKQotICAgICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwotICAgIGhh
bmRsZUZvY3VzRXZlbnQoKTsKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpk
aXNwYXRjaEZvY3VzRXZlbnQoKTsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKQotewotICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVyKCkp
Ci0gICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7Ci0gICAgaGFuZGxl
Qmx1ckV2ZW50KCk7Ci0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0
Y2hCbHVyRXZlbnQoKTsKLX0KLQotU3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpz
dHJpcHBlZFBsYWNlaG9sZGVyKCkgY29uc3QKLXsKLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhU
TUw1IHNwZWNpZmljYXRpb24sIHdlIG5lZWQgdG8gcmVtb3ZlIENSIGFuZCBMRiBmcm9tCi0gICAg
Ly8gdGhlIGF0dHJpYnV0ZSB2YWx1ZS4KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0
ZVZhbHVlID0gZ2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0cik7Ci0gICAgaWYgKCFhdHRyaWJ1
dGVWYWx1ZS5jb250YWlucyhuZXdsaW5lQ2hhcmFjdGVyKSAmJiAhYXR0cmlidXRlVmFsdWUuY29u
dGFpbnMoY2FycmlhZ2VSZXR1cm4pKQotICAgICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7Ci0K
LSAgICBWZWN0b3I8VUNoYXI+IHN0cmlwcGVkOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJp
YnV0ZVZhbHVlLmxlbmd0aCgpOwotICAgIHN0cmlwcGVkLnJlc2VydmVDYXBhY2l0eShsZW5ndGgp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBV
Q2hhciBjaGFyYWN0ZXIgPSBhdHRyaWJ1dGVWYWx1ZVtpXTsKLSAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PSBuZXdsaW5lQ2hhcmFjdGVyIHx8IGNoYXJhY3RlciA9PSBjYXJyaWFnZVJldHVybikKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdHJpcHBlZC5hcHBlbmQoY2hhcmFjdGVyKTsK
LSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoc3RyaXBwZWQpOwotfQotCi1zdGF0aWMg
Ym9vbCBpc05vdExpbmVCcmVhayhVQ2hhciBjaCkgeyByZXR1cm4gY2ggIT0gbmV3bGluZUNoYXJh
Y3RlciAmJiBjaCAhPSBjYXJyaWFnZVJldHVybjsgfQotCi1ib29sIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50Ojppc1BsYWNlaG9sZGVyRW1wdHkoKSBjb25zdAotewotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKTsK
LSAgICByZXR1cm4gYXR0cmlidXRlVmFsdWUuc3RyaW5nKCkuZmluZChpc05vdExpbmVCcmVhaykg
PT0gbm90Rm91bmQ7Ci19Ci0KLWJvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnBsYWNl
aG9sZGVyU2hvdWxkQmVWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3VwcG9ydHNQbGFj
ZWhvbGRlcigpCi0gICAgICAgICYmIGlzRW1wdHlWYWx1ZSgpCi0gICAgICAgICYmIGRvY3VtZW50
KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcwotICAgICAgICAmJiAhaXNQbGFjZWhvbGRlckVtcHR5
KCk7Ci19Ci0KLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVBsYWNlaG9s
ZGVyVmlzaWJpbGl0eShib29sIHBsYWNlaG9sZGVyVmFsdWVDaGFuZ2VkKQotewotICAgIGlmIChz
dXBwb3J0c1BsYWNlaG9sZGVyKCkgJiYgcmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5kZXJUZXh0
Q29udHJvbChyZW5kZXJlcigpKS0+dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KHBsYWNlaG9s
ZGVyU2hvdWxkQmVWaXNpYmxlKCksIHBsYWNlaG9sZGVyVmFsdWVDaGFuZ2VkKTsKLX0KLQotUmVu
ZGVyVGV4dENvbnRyb2wqIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp0ZXh0UmVuZGVyZXJB
ZnRlclVwZGF0ZUxheW91dCgpCi17Ci0gICAgaWYgKCFpc1RleHRGb3JtQ29udHJvbCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5n
U3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigp
KTsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uU3Rh
cnQoaW50IHN0YXJ0KQotewotICAgIHNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBtYXgoc3RhcnQs
IHNlbGVjdGlvbkVuZCgpKSk7Ci19Ci0KLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnNldFNlbGVjdGlvbkVuZChpbnQgZW5kKQotewotICAgIHNldFNlbGVjdGlvblJhbmdlKG1pbihl
bmQsIHNlbGVjdGlvblN0YXJ0KCkpLCBlbmQpOwotfQotCi12b2lkIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50OjpzZWxlY3QoKQotewotICAgIHNldFNlbGVjdGlvblJhbmdlKDAsIG51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKTsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQotewotICAgIFdlYkNvcmU6
OnNldFNlbGVjdGlvblJhbmdlKHRoaXMsIHN0YXJ0LCBlbmQpOwotfQotCi1pbnQgSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QKLXsKLSAgICBpZiAoIWlz
VGV4dEZvcm1Db250cm9sKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChkb2N1bWVudCgp
LT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYgY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSA+PSAwKQot
ICAgICAgICByZXR1cm4gY2FjaGVkU2VsZWN0aW9uU3RhcnQoKTsKLSAgICBpZiAoIXJlbmRlcmVy
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJl
bmRlcmVyKCkpLT5zZWxlY3Rpb25TdGFydCgpOwotfQotCi1pbnQgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc1RleHRGb3JtQ29u
dHJvbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5v
ZGUoKSAhPSB0aGlzICYmIGNhY2hlZFNlbGVjdGlvbkVuZCgpID49IDApCi0gICAgICAgIHJldHVy
biBjYWNoZWRTZWxlY3Rpb25FbmQoKTsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zZWxl
Y3Rpb25FbmQoKTsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQodGhp
cyk7CisgICAgaWYgKCFlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAg
ICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBmb3Jt
IG93bmVyIGhlcmUuCisgICAgICAgIGlmIChtX2Zvcm0pCisgICAgICAgICAgICBtX2Zvcm0tPnJl
bW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybU93bmVyKGVs
ZW1lbnQpOworICAgICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAgZm9ybSgpLT5yZWdpc3Rl
ckZvcm1FbGVtZW50KHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICByZXNldEZvcm1Pd25lcigw
KTsKIH0KIAotUGFzc1JlZlB0cjxSYW5nZT4gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNl
bGVjdGlvbigpIGNvbnN0Citjb25zdCBIVE1MRWxlbWVudCogdG9IVE1MRWxlbWVudChjb25zdCBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50KQogewotICAgIGlmICghcmVu
ZGVyZXIoKSB8fCAhaXNUZXh0Rm9ybUNvbnRyb2woKSB8fCBjYWNoZWRTZWxlY3Rpb25TdGFydCgp
IDwgMCB8fCBjYWNoZWRTZWxlY3Rpb25FbmQoKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rpb24oY2FjaGVk
U2VsZWN0aW9uU3RhcnQoKSwgY2FjaGVkU2VsZWN0aW9uRW5kKCkpOworICAgIGlmIChhc3NvY2lh
dGVkRWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihhc3NvY2lhdGVkRWxlbWVudCk7
CisgICAgLy8gQXNzdW1lcyB0aGUgZWxlbWVudCBpcyBhbiBIVE1MT2JqZWN0RWxlbWVudAorICAg
IGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTE9iamVj
dEVsZW1lbnQqPihhc3NvY2lhdGVkRWxlbWVudCk7CisgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1Rh
Z05hbWUob2JqZWN0VGFnKSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKLXZvaWQgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0
cikKK0hUTUxFbGVtZW50KiB0b0hUTUxFbGVtZW50KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNz
b2NpYXRlZEVsZW1lbnQpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBwbGFjZWhvbGRlckF0
dHIpCi0gICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSh0cnVlKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxlY3RBdHRyKQotICAgICAgICBzZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZl
bnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
Y2hhbmdlQXR0cikKLSAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkuY2hhbmdlRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikp
OwotICAgIGVsc2UKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SFRNTEVsZW1l
bnQqPih0b0hUTUxFbGVtZW50KHN0YXRpY19jYXN0PGNvbnN0IEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCo+KGFzc29jaWF0ZWRFbGVtZW50KSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJjb3JlCklu
ZGV4OiBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCShyZXZpc2lvbiA3MzAwNykJKGZy
b20gV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaDo3MzAwNykKKysrIFdlYkNv
cmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgSFRNTEZvcm1D
b250cm9sRWxlbWVudF9oCisjZGVmaW5lIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRfaAorCisjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb3Jt
RGF0YUxpc3Q7CitjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CitjbGFzcyBSZW5kZXJUZXh0Q29udHJv
bDsKK2NsYXNzIFZhbGlkYXRpb25NZXNzYWdlOworY2xhc3MgVmFsaWRpdHlTdGF0ZTsKK2NsYXNz
IFZpc2libGVTZWxlY3Rpb247CisKKy8vIEZJWE1FOiBUaGUgSFRNTDUgc3BlY2lmaWNhdGlvbiBj
YWxscyB0aGVzZSBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMuCisvLyBTbyBjb25zaWRlciByZW5h
bWluZyB0aGlzIHRvIEhUTUxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuCitjbGFzcyBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50KCk7CisKKyAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0o
KSBjb25zdCB7IHJldHVybiBtX2Zvcm07IH0KKyAgICBWYWxpZGl0eVN0YXRlKiB2YWxpZGl0eSgp
OworCisgICAgYm9vbCBmb3JtTm9WYWxpZGF0ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lk
IHJlc2V0KCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNS
ZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihib29sIGIpIHsg
bV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKKworICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2Rpc2FibGVkOyB9CisgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKKworICAg
IHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0Vu
dW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAvLyBEZXRlcm1pbmVz
IHdoZXRoZXIgb3Igbm90IGEgY29udHJvbCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZC4K
KyAgICB2aXJ0dWFsIGJvb2wgYXV0b2ZvY3VzKCkgY29uc3Q7CisKKyAgICBib29sIHJlcXVpcmVk
KCkgY29uc3Q7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVy
biBmb3JtQ29udHJvbFR5cGUoKTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIGZvcm1Db250cm9sTmFtZSgpOyB9CisKKyAgICB2b2lkIHNldE5hbWUoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWRGb3Jt
Q29udHJvbCgpIGNvbnN0IHsgcmV0dXJuICFkaXNhYmxlZCgpOyB9CisgICAgdmlydHVhbCBib29s
IGlzUmVhZE9ubHlGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHJlYWRPbmx5KCk7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgY2FuVHJpZ2dlckltcGxpY2l0U3VibWlzc2lvbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisKKyAgICAvLyBPdmVycmlkZSBpbiBkZXJpdmVkIGNsYXNzZXMgdG8g
Z2V0IHRoZSBlbmNvZGVkIG5hbWU9dmFsdWUgcGFpciBmb3Igc3VibWl0dGluZy4KKyAgICAvLyBS
ZXR1cm4gdHJ1ZSBmb3IgYSBzdWNjZXNzZnVsIGNvbnRyb2wgKHNlZSBIVE1MNC0xNy4xMy4yKS4K
KyAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0
b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2YXRl
ZFN1Ym1pdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEFj
dGl2YXRlZFN1Ym1pdChib29sKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCB3aWxsVmFsaWRhdGUo
KSBjb25zdDsKKyAgICBTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICB2b2lkIHVwZGF0
ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgIHZvaWQgaGlkZVZpc2libGVWYWxpZGF0
aW9uTWVzc2FnZSgpOworICAgIGJvb2wgY2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRyPEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scyA9IDApOworICAg
IC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBhIHZhbGlkYXRpb24gY29uc3RyYWludCBvciBj
b250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCisgICAgdm9pZCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2so
KTsKKyAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmluZyYpOworCisgICAgdm9p
ZCBmb3JtRGVzdHJveWVkKCkgeyBtX2Zvcm0gPSAwOyB9CisKKyAgICBib29sIGlzTGFiZWxhYmxl
KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbGFiZWxzKCk7CisgICAgCisgICAg
Ym9vbCByZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KKworICAgIHZvaWQg
cmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGF0dHJp
YnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOworCitw
cm90ZWN0ZWQ6CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOworCisgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKTsKKworICAgIHZpcnR1
YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lk
IHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZv
Y3VzRXZlbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisKKyAgICB2b2lkIHJlbW92ZUZyb21Gb3JtKCk7CisKKyAg
ICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFueSB0aW1lIHRoZSByZXN1bHQgb2Ygd2lsbFZhbGlk
YXRlKCkgaGFzIGNoYW5nZWQuCisgICAgdm9pZCBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7
CisgICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29u
c3QgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKKworICAgIHZpcnR1YWwg
SFRNTEZvcm1FbGVtZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBp
c0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWRG
b3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICBTdHJpbmcgdmlzaWJsZVZhbGlkYXRpb25NZXNzYWdl
KCkgY29uc3Q7CisKKyAgICBIVE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKKyAgICBPd25QdHI8VmFs
aWRpdHlTdGF0ZT4gbV92YWxpZGl0eVN0YXRlOworICAgIE93blB0cjxWYWxpZGF0aW9uTWVzc2Fn
ZT4gbV92YWxpZGF0aW9uTWVzc2FnZTsKKyAgICBib29sIG1fZGlzYWJsZWQgOiAxOworICAgIGJv
b2wgbV9yZWFkT25seSA6IDE7CisgICAgYm9vbCBtX3JlcXVpcmVkIDogMTsKKyAgICBib29sIG1f
dmFsdWVNYXRjaGVzUmVuZGVyZXIgOiAxOworCisgICAgLy8gVGhlIGluaXRpYWwgdmFsdWUgb2Yg
bV93aWxsVmFsaWRhdGUgZGVwZW5kcyBvbiB0aGUgZGVyaXZlZCBjbGFzcy4gV2UgY2FuJ3QKKyAg
ICAvLyBpbml0aWFsaXplIGl0IHdpdGggYSB2aXJ0dWFsIGZ1bmN0aW9uIGluIHRoZSBjb25zdHJ1
Y3Rvci4gbV93aWxsVmFsaWRhdGUKKyAgICAvLyBpcyBub3QgZGV0ZXJtaW5pc3RpYyBhcyBsb25n
IGFzIG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQgaXMgZmFsc2UuCisgICAgbXV0YWJsZSBib29s
IG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQ6IDE7CisgICAgbXV0YWJsZSBib29sIG1fd2lsbFZh
bGlkYXRlIDogMTsKKworICAgIC8vIENhY2hlIG9mIHZhbGlkaXR5KCktPnZhbGlkKCkuCisgICAg
Ly8gQnV0ICJjYW5kaWRhdGUgZm9yIGNvbnN0cmFpbnQgdmFsaWRhdGlvbiIgZG9lc24ndCBhZmZl
Y3QgbV9pc1ZhbGlkLgorICAgIGJvb2wgbV9pc1ZhbGlkIDogMTsKK307CisKKy8vIEZJWE1FOiBH
aXZlIHRoaXMgY2xhc3MgaXRzIG93biBoZWFkZXIgZmlsZS4KK2NsYXNzIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGUgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpOworCitw
cm90ZWN0ZWQ6CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOworCisgICAg
dmlydHVhbCBib29sIGF1dG9Db21wbGV0ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHdp
bGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05l
d093bmVyRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTYXZlQW5kUmVzdG9y
ZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2lu
Z0NoaWxkcmVuKCk7Cit9OworCisvLyBGSVhNRTogR2l2ZSB0aGlzIGNsYXNzIGl0cyBvd24gaGVh
ZGVyIGZpbGUuCitjbGFzcyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlIHsKK3B1YmxpYzoKKyAgICAvLyBDb21tb24gZmxh
ZyBmb3IgSFRNTElucHV0RWxlbWVudDo6dG9vTG9uZygpIGFuZCBIVE1MVGV4dEFyZWFFbGVtZW50
Ojp0b29Mb25nKCkuCisgICAgZW51bSBOZWVkc1RvQ2hlY2tEaXJ0eUZsYWcge0NoZWNrRGlydHlG
bGFnLCBJZ25vcmVEaXJ0eUZsYWd9OworCisgICAgdmlydHVhbCB+SFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQoKTsKKworICAgIC8vIFRoZSBkZXJpdmVkIGNsYXNzIHNob3VsZCByZXR1cm4gdHJ1
ZSBpZiBwbGFjZWhvbGRlciBwcm9jZXNzaW5nIGlzIG5lZWRlZC4KKyAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNQbGFjZWhvbGRlcigpIGNvbnN0ID0gMDsKKyAgICBTdHJpbmcgc3RyaXBwZWRQbGFj
ZWhvbGRlcigpIGNvbnN0OworICAgIGJvb2wgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBj
b25zdDsKKworICAgIGludCBzZWxlY3Rpb25TdGFydCgpIGNvbnN0OworICAgIGludCBzZWxlY3Rp
b25FbmQoKSBjb25zdDsKKyAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCk7CisgICAgdm9p
ZCBzZXRTZWxlY3Rpb25FbmQoaW50KTsKKyAgICB2b2lkIHNlbGVjdCgpOworICAgIHZvaWQgc2V0
U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKTsKKyAgICBQYXNzUmVmUHRyPFJhbmdl
PiBzZWxlY3Rpb24oKSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IG1heExlbmd0aCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVk
OgorICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOworCisgICAgdm9pZCB1cGRhdGVQbGFjZWhvbGRl
clZpc2liaWxpdHkoYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKik7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9j
dXNFdmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOworCisgICAg
Ym9vbCBpc1BsYWNlaG9sZGVyRW1wdHkoKSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IGNhY2hl
ZFNlbGVjdGlvblN0YXJ0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVj
dGlvbkVuZCgpIGNvbnN0ID0gMDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB1c2VyLWVkaXRh
YmxlIHZhbHVlIGlzIGVtcHR5LiBVc2VkIHRvIGNoZWNrIHBsYWNlaG9sZGVyIHZpc2liaWxpdHku
CisgICAgdmlydHVhbCBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0ID0gMDsKKyAgICAvLyBDYWxs
ZWQgaW4gZGlzcGF0Y2hGb2N1c0V2ZW50KCksIGFmdGVyIHBsYWNlaG9sZGVyIHByb2Nlc3MsIGJl
Zm9yZSBjYWxsaW5nIHBhcmVudCdzIGRpc3BhdGNoRm9jdXNFdmVudCgpLgorICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVGb2N1c0V2ZW50KCkgeyB9CisgICAgLy8gQ2FsbGVkIGluIGRpc3BhdGNoQmx1
ckV2ZW50KCksIGFmdGVyIHBsYWNlaG9sZGVyIHByb2Nlc3MsIGJlZm9yZSBjYWxsaW5nIHBhcmVu
dCdzIGRpc3BhdGNoQmx1ckV2ZW50KCkuCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJsdXJFdmVu
dCgpIHsgfQorCisgICAgUmVuZGVyVGV4dENvbnRyb2wqIHRleHRSZW5kZXJlckFmdGVyVXBkYXRl
TGF5b3V0KCk7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
aHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmgJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9odG1s
L0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw4IEBA
CiAgKgogICovCiAKLSNpZm5kZWYgSFRNTEZvcm1Db250cm9sRWxlbWVudF9oCi0jZGVmaW5lIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRfaAorI2lmbmRlZiBGb3JtQXNzb2NpYXRlZEVsZW1lbnRfaAor
I2RlZmluZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnRfaAogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKIApAQCAtMzAsMTYgKzMwLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9y
bURhdGFMaXN0OwogY2xhc3MgSFRNTEZvcm1FbGVtZW50OwotY2xhc3MgUmVuZGVyVGV4dENvbnRy
b2w7CiBjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZTsKIGNsYXNzIFZhbGlkaXR5U3RhdGU7CiBjbGFz
cyBWaXNpYmxlU2VsZWN0aW9uOwogCi0vLyBGSVhNRTogVGhlIEhUTUw1IHNwZWNpZmljYXRpb24g
Y2FsbHMgdGhlc2UgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzLgotLy8gU28gY29uc2lkZXIgcmVu
YW1pbmcgdGhpcyB0byBIVE1MRm9ybUFzc29jaWF0ZWRFbGVtZW50LgotY2xhc3MgSFRNTEZvcm1D
b250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CitjbGFzcyBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbEVsZW1lbnQo
KTsKKyAgICB2aXJ0dWFsIH5Gb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsKKworICAgIHZvaWQgcmVm
KCkgeyByZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsgfQorICAgIHZvaWQgZGVyZWYoKSB7IGRl
cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCk7IH0KIAogICAgIEhUTUxGb3JtRWxlbWVudCogZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybTsgfQogICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlkaXR5
KCk7CkBAIC01MSw5NSArNTEsNjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBmb3JtQ29u
dHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNS
ZW5kZXJlcjsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1Jl
bmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gYjsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwotCi0gICAgYm9vbCBk
aXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KLSAgICB2b2lkIHNldERpc2Fi
bGVkKGJvb2wpOwotCi0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgPSAwOwogCi0gICAgLy8gRGV0ZXJtaW5l
cyB3aGV0aGVyIG9yIG5vdCBhIGNvbnRyb2wgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQu
Ci0gICAgdmlydHVhbCBib29sIGF1dG9mb2N1cygpIGNvbnN0OwotCi0gICAgYm9vbCByZXF1aXJl
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzYWJsZWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCB2YWx1ZSkgeyBt
X2Rpc2FibGVkID0gdmFsdWU7IH0KKyAgICBib29sIHJlcXVpcmVkKCkgY29uc3QgeyByZXR1cm4g
bV9yZXF1aXJlZDsgfQorICAgIHZvaWQgc2V0UmVxdWlyZWQoYm9vbCB2YWx1ZSkgeyBtX3JlcXVp
cmVkID0gdmFsdWU7IH0KKyAgICBib29sIHJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9yZWFk
T25seTsgfQorICAgIHZvaWQgc2V0UmVhZE9ubHkoYm9vbCB2YWx1ZSkgeyBtX3JlYWRPbmx5ID0g
dmFsdWU7IH0KIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IGZvcm1Db250cm9sVHlwZSgpOyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gZm9ybUNvbnRyb2xOYW1lKCk7IH0KIAotICAgIHZvaWQgc2V0TmFtZShjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUpOwotCi0gICAgdmlydHVhbCBib29sIGlzRW5hYmxlZEZvcm1D
b250cm9sKCkgY29uc3QgeyByZXR1cm4gIWRpc2FibGVkKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNSZWFkT25seUZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gcmVhZE9ubHkoKTsgfQotCi0g
ICAgdmlydHVhbCBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBjYW5UcmlnZ2VySW1wbGljaXRTdWJtaXNzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLQogICAgIC8vIE92ZXJyaWRlIGluIGRlcml2ZWQgY2xhc3NlcyB0byBn
ZXQgdGhlIGVuY29kZWQgbmFtZT12YWx1ZSBwYWlyIGZvciBzdWJtaXR0aW5nLgogICAgIC8vIFJl
dHVybiB0cnVlIGZvciBhIHN1Y2Nlc3NmdWwgY29udHJvbCAoc2VlIEhUTUw0LTE3LjEzLjIpLgog
ICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKSB7IHJl
dHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGVk
U3VibWl0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0
aXZhdGVkU3VibWl0KGJvb2wpIHsgfQotCiAgICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgp
IGNvbnN0OwogICAgIFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpOwogICAgIHZvaWQgdXBkYXRl
VmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAgdm9pZCBoaWRlVmlzaWJsZVZhbGlkYXRp
b25NZXNzYWdlKCk7Ci0gICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzID0gMCk7CisgICAg
Ym9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50PiA+
KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMgPSAwKTsKICAgICAvLyBUaGlzIG11c3QgYmUgY2Fs
bGVkIHdoZW4gYSB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgb3IgY29udHJvbCB2YWx1ZSBpcyBjaGFu
Z2VkLgogICAgIHZvaWQgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiAgICAgdm9pZCBzZXRDdXN0
b21WYWxpZGl0eShjb25zdCBTdHJpbmcmKTsKIAotICAgIHZvaWQgZm9ybURlc3Ryb3llZCgpIHsg
bV9mb3JtID0gMDsgfQotCi0gICAgYm9vbCBpc0xhYmVsYWJsZSgpIGNvbnN0OwotICAgIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IGxhYmVscygpOwotICAgIAotICAgIGJvb2wgcmVhZE9ubHkoKSBjb25z
dCB7IHJldHVybiBtX3JlYWRPbmx5OyB9CisgICAgdmlydHVhbCB2b2lkIGZvcm1EZXN0cm95ZWQo
KSB7IG1fZm9ybSA9IDA7IH0KIAogICAgIHZvaWQgcmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVt
ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9v
bCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxG
b3JtRWxlbWVudCopOworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQq
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50
b1RyZWUoYm9vbCBkZWVwKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wg
ZGVlcCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
Qmx1ckV2ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAgIHZvaWQgaW5zZXJ0
ZWRJbnRvVHJlZSgpOworICAgIHZvaWQgcmVtb3ZlZEZyb21UcmVlKCk7CiAKKyAgICB2b2lkIHNl
dEZvcm0oSFRNTEZvcm1FbGVtZW50KiBmb3JtKSB7IG1fZm9ybSA9IGZvcm07IH0KICAgICB2b2lk
IHJlbW92ZUZyb21Gb3JtKCk7CisgICAgdm9pZCBmb3JtQXR0cmlidXRlQ2hhbmdlZCgpOwogCiAg
ICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhbnkgdGltZSB0aGUgcmVzdWx0IG9mIHdpbGxWYWxp
ZGF0ZSgpIGhhcyBjaGFuZ2VkLgogICAgIHZvaWQgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygp
OwogICAgIHZpcnR1YWwgYm9vbCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpOwogCiBwcml2YXRlOgotICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCA9
IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBIVE1M
Rm9ybUVsZW1lbnQqIHZpcnR1YWxGb3JtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRGVm
YXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1D
b250cm9sRWxlbWVudCgpOwogICAgIFN0cmluZyB2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBj
b25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCByZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgPSAwOworCiAg
ICAgSFRNTEZvcm1FbGVtZW50KiBtX2Zvcm07CiAgICAgT3duUHRyPFZhbGlkaXR5U3RhdGU+IG1f
dmFsaWRpdHlTdGF0ZTsKICAgICBPd25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+IG1fdmFsaWRhdGlv
bk1lc3NhZ2U7CkBAIC0xNTksNzUgKzEyNCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVmFs
aWQgOiAxOwogfTsKIAotLy8gRklYTUU6IEdpdmUgdGhpcyBjbGFzcyBpdHMgb3duIGhlYWRlciBm
aWxlLgotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSA6IHB1YmxpYyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlKCk7Ci0KLXByb3RlY3RlZDoKLSAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kiwg
SFRNTEZvcm1FbGVtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXV0b0NvbXBsZXRlKCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwotICAgIHZpcnR1YWwg
dm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLX07Ci0KLS8vIEZJWE1FOiBH
aXZlIHRoaXMgY2xhc3MgaXRzIG93biBoZWFkZXIgZmlsZS4KLWNsYXNzIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgewot
cHVibGljOgotICAgIC8vIENvbW1vbiBmbGFnIGZvciBIVE1MSW5wdXRFbGVtZW50Ojp0b29Mb25n
KCkgYW5kIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnRvb0xvbmcoKS4KLSAgICBlbnVtIE5lZWRzVG9D
aGVja0RpcnR5RmxhZyB7Q2hlY2tEaXJ0eUZsYWcsIElnbm9yZURpcnR5RmxhZ307Ci0KLSAgICB2
aXJ0dWFsIH5IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgpOwotCi0gICAgLy8gVGhlIGRlcml2
ZWQgY2xhc3Mgc2hvdWxkIHJldHVybiB0cnVlIGlmIHBsYWNlaG9sZGVyIHByb2Nlc3NpbmcgaXMg
bmVlZGVkLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1BsYWNlaG9sZGVyKCkgY29uc3QgPSAw
OwotICAgIFN0cmluZyBzdHJpcHBlZFBsYWNlaG9sZGVyKCkgY29uc3Q7Ci0gICAgYm9vbCBwbGFj
ZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpIGNvbnN0OwotCi0gICAgaW50IHNlbGVjdGlvblN0YXJ0
KCkgY29uc3Q7Ci0gICAgaW50IHNlbGVjdGlvbkVuZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uU3RhcnQoaW50KTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChpbnQpOwotICAgIHZv
aWQgc2VsZWN0KCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBl
bmQpOwotICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbigpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBpbnQgbWF4TGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVl
KCkgY29uc3QgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7Ci0K
LSAgICB2b2lkIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShib29sKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLQotcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoQmx1ckV2ZW50KCk7Ci0KLSAgICBib29sIGlzUGxhY2Vob2xkZXJFbXB0eSgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkgY29uc3QgPSAwOwotCi0gICAgLy8g
UmV0dXJucyB0cnVlIGlmIHVzZXItZWRpdGFibGUgdmFsdWUgaXMgZW1wdHkuIFVzZWQgdG8gY2hl
Y2sgcGxhY2Vob2xkZXIgdmlzaWJpbGl0eS4KLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eVZhbHVl
KCkgY29uc3QgPSAwOwotICAgIC8vIENhbGxlZCBpbiBkaXNwYXRjaEZvY3VzRXZlbnQoKSwgYWZ0
ZXIgcGxhY2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZGlzcGF0Y2hG
b2N1c0V2ZW50KCkuCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUZvY3VzRXZlbnQoKSB7IH0KLSAg
ICAvLyBDYWxsZWQgaW4gZGlzcGF0Y2hCbHVyRXZlbnQoKSwgYWZ0ZXIgcGxhY2Vob2xkZXIgcHJv
Y2VzcywgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZGlzcGF0Y2hCbHVyRXZlbnQoKS4KLSAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlQmx1ckV2ZW50KCkgeyB9Ci0KLSAgICBSZW5kZXJUZXh0Q29udHJv
bCogdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQoKTsKLX07CitIVE1MRWxlbWVudCogdG9I
VE1MRWxlbWVudChGb3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsKK2NvbnN0IEhUTUxFbGVtZW50KiB0
b0hUTUxFbGVtZW50KGNvbnN0IEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOwogCiB9IC8vIG5hbWVz
cGFjZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBGb3JtQXNzb2NpYXRlZEVsZW1lbnRfaApJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDEyICs3
OCwxMiBAQCBOb2RlKiBIVE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0odW5zaWduZWQgCiAgICAgICAg
IGluZm8oKS0+ZWxlbWVudHNBcnJheVBvc2l0aW9uID0gMDsKICAgICB9CiAKLSAgICBWZWN0b3I8
SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBlbGVtZW50c0FycmF5ID0gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50Kj4oYmFzZSgpKS0+bV9hc3NvY2lhdGVkRWxlbWVudHM7CisgICAgVmVjdG9y
PEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVtZW50c0FycmF5ID0gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50Kj4oYmFzZSgpKS0+bV9hc3NvY2lhdGVkRWxlbWVudHM7CiAgICAgdW5zaWdu
ZWQgY3VycmVudEluZGV4ID0gaW5mbygpLT5wb3NpdGlvbjsKICAgICAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBpbmZvKCktPmVsZW1lbnRzQXJyYXlQb3NpdGlvbjsgaSA8IGVsZW1lbnRzQXJyYXku
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9
IGVsZW1lbnRzQXJyYXlbaV07Ci0gICAgICAgIGlmIChlbGVtZW50LT5pc0VudW1lcmF0YWJsZSgp
KSB7CisgICAgICAgIGlmIChlbGVtZW50c0FycmF5W2ldLT5pc0VudW1lcmF0YWJsZSgpKSB7Cisg
ICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZWxlbWVudHNB
cnJheVtpXSk7CiAgICAgICAgICAgICBpZiAoaW5kZXggPT0gY3VycmVudEluZGV4KSB7CiAgICAg
ICAgICAgICAgICAgaW5mbygpLT5wb3NpdGlvbiA9IGluZGV4OwogICAgICAgICAgICAgICAgIGlu
Zm8oKS0+Y3VycmVudCA9IGVsZW1lbnQ7CkBAIC0xMTAsMjEgKzExMCwyMyBAQCBFbGVtZW50KiBI
VE1MRm9ybUNvbGxlY3Rpb246OmdldE5hbWVkRm9yCiAKICAgICBib29sIGZvdW5kSW5wdXRFbGVt
ZW50cyA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtLT5tX2Fzc29j
aWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50KiBlID0gZm9ybS0+bV9hc3NvY2lhdGVkRWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChlLT5p
c0VudW1lcmF0YWJsZSgpICYmIGUtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgewor
ICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gZm9ybS0+
bV9hc3NvY2lhdGVkRWxlbWVudHNbaV07CisgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0g
dG9IVE1MRWxlbWVudChhc3NvY2lhdGVkRWxlbWVudCk7CisgICAgICAgIGlmIChhc3NvY2lhdGVk
RWxlbWVudC0+aXNFbnVtZXJhdGFibGUoKQorICAgICAgICAgICAgJiYgZWxlbWVudC0+Z2V0QXR0
cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7CiAgICAgICAgICAgICBmb3VuZElucHV0RWxlbWVu
dHMgPSB0cnVlOwogICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAg
ICAgICAtLWR1cGxpY2F0ZU51bWJlcjsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghZm91
bmRJbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3Jt
LT5tX2ltYWdlRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEhUTUxJbWFnZUVs
ZW1lbnQqIGUgPSBmb3JtLT5tX2ltYWdlRWxlbWVudHNbaV07Ci0gICAgICAgICAgICBpZiAoZS0+
Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7CisgICAgICAgICAgICBIVE1MSW1hZ2VF
bGVtZW50KiBlbGVtZW50ID0gZm9ybS0+bV9pbWFnZUVsZW1lbnRzW2ldOworICAgICAgICAgICAg
aWYgKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgewogICAgICAgICAg
ICAgICAgIGlmICghZHVwbGljYXRlTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAgICAgICAg
LS1kdXBsaWNhdGVOdW1iZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE5MSwxMCAr
MTkzLDExIEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICBI
VE1MRm9ybUVsZW1lbnQqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihiYXNlKCkp
OwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPm1fYXNzb2NpYXRlZEVsZW1lbnRz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUgPSBmLT5t
X2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGUtPmlzRW51bWVyYXRhYmxlKCkp
IHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0SWRB
dHRyaWJ1dGUoKTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwg
PSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOworICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gZi0+bV9hc3NvY2lhdGVkRWxlbWVudHNbaV07CisgICAg
ICAgIGlmIChhc3NvY2lhdGVkRWxlbWVudC0+aXNFbnVtZXJhdGFibGUoKSkgeworICAgICAgICAg
ICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGFzc29jaWF0ZWRFbGVtZW50
KTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZWxlbWVudC0+
Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0
dHJWYWwgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAgICAgICAgICAgaWYg
KCFpZEF0dHJWYWwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gYWRkIHRvIGlkIGNh
Y2hlCiAgICAgICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiogaWRWZWN0b3IgPSBpbmZvKCkt
PmlkQ2FjaGUuZ2V0KGlkQXR0clZhbC5pbXBsKCkpOwpAQCAtMjAyLDcgKzIwNSw3IEBAIHZvaWQg
SFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgICAgICAgICAgICAg
aWRWZWN0b3IgPSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsKICAgICAgICAgICAgICAgICAgICAgaW5m
bygpLT5pZENhY2hlLmFkZChpZEF0dHJWYWwuaW1wbCgpLCBpZFZlY3Rvcik7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlkVmVjdG9yLT5hcHBlbmQoZSk7CisgICAgICAgICAg
ICAgICAgaWRWZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgICAgICAgICBmb3VuZElu
cHV0RWxlbWVudHMuYWRkKGlkQXR0clZhbC5pbXBsKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVBdHRy
VmFsKSB7CkBAIC0yMTIsMTYgKzIxNSwxNiBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBk
YXRlTmFtZUNhY2hlCiAgICAgICAgICAgICAgICAgICAgIG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9y
PEVsZW1lbnQqPjsKICAgICAgICAgICAgICAgICAgICAgaW5mbygpLT5uYW1lQ2FjaGUuYWRkKG5h
bWVBdHRyVmFsLmltcGwoKSwgbmFtZVZlY3Rvcik7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIG5hbWVWZWN0b3ItPmFwcGVuZChlKTsKKyAgICAgICAgICAgICAgICBuYW1lVmVj
dG9yLT5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgZm91bmRJbnB1dEVsZW1lbnRz
LmFkZChuYW1lQXR0clZhbC5pbXBsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPm1faW1hZ2VFbGVtZW50cy5zaXpl
KCk7ICsraSkgewotICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBlID0gZi0+bV9pbWFnZUVsZW1l
bnRzW2ldOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldElk
QXR0cmlidXRlKCk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBl
LT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOworICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBlbGVt
ZW50ID0gZi0+bV9pbWFnZUVsZW1lbnRzW2ldOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGlkQXR0clZhbCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7CisgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIp
OwogICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkgJiYgIWZvdW5kSW5wdXRFbGVtZW50
cy5jb250YWlucyhpZEF0dHJWYWwuaW1wbCgpKSkgewogICAgICAgICAgICAgLy8gYWRkIHRvIGlk
IGNhY2hlCiAgICAgICAgICAgICBWZWN0b3I8RWxlbWVudCo+KiBpZFZlY3RvciA9IGluZm8oKS0+
aWRDYWNoZS5nZXQoaWRBdHRyVmFsLmltcGwoKSk7CkBAIC0yMjksNyArMjMyLDcgQEAgdm9pZCBI
VE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICAgICAgICAgIGlkVmVj
dG9yID0gbmV3IFZlY3RvcjxFbGVtZW50Kj47CiAgICAgICAgICAgICAgICAgaW5mbygpLT5pZENh
Y2hlLmFkZChpZEF0dHJWYWwuaW1wbCgpLCBpZFZlY3Rvcik7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZFZlY3Rvci0+YXBwZW5kKGUpOworICAgICAgICAgICAgaWRWZWN0b3ItPmFwcGVu
ZChlbGVtZW50KTsKICAgICAgICAgfQogICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHko
KSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYgIWZvdW5kSW5wdXRFbGVtZW50cy5jb250
YWlucyhuYW1lQXR0clZhbC5pbXBsKCkpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gbmFtZSBj
YWNoZQpAQCAtMjM4LDcgKzI0MSw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVO
YW1lQ2FjaGUKICAgICAgICAgICAgICAgICBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcjxFbGVtZW50
Kj47CiAgICAgICAgICAgICAgICAgaW5mbygpLT5uYW1lQ2FjaGUuYWRkKG5hbWVBdHRyVmFsLmlt
cGwoKSwgbmFtZVZlY3Rvcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBuYW1lVmVjdG9y
LT5hcHBlbmQoZSk7CisgICAgICAgICAgICBuYW1lVmVjdG9yLT5hcHBlbmQoZWxlbWVudCk7CiAg
ICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw2IEBACiAjaW5jbHVkZSAiUmVu
ZGVyVGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNj
cmlwdEV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJWYWxpZGF0aW9uTWVzc2FnZS5oIgotI2lu
Y2x1ZGUgIlZhbGlkaXR5U3RhdGUuaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCkBAIC01NywyNSArNTUsMTggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCog
Zm9ybSkKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9mb3Jt
KGZvcm0pCi0gICAgLCBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwgbV9yZWFkT25seShmYWxzZSkK
LSAgICAsIG1fcmVxdWlyZWQoZmFsc2UpCi0gICAgLCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZh
bHNlKQotICAgICwgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1fd2ls
bFZhbGlkYXRlKHRydWUpCi0gICAgLCBtX2lzVmFsaWQodHJ1ZSkKLXsKLSAgICBpZiAoIW1fZm9y
bSkKLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwotICAgIGlmIChtX2Zvcm0p
Ci0gICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAsIEZvcm1B
c3NvY2lhdGVkRWxlbWVudChmb3JtKQoreworICAgIGlmICghdGhpcy0+Zm9ybSgpKQorICAgICAg
ICBzZXRGb3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7CisgICAgaWYgKHRoaXMtPmZvcm0oKSkKKyAg
ICAgICAgdGhpcy0+Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwogfQogCiBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVudCgpCiB7Ci0gICAgaWYg
KG1fZm9ybSkKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICBp
ZiAoZm9ybSgpKQorICAgICAgICBmb3JtKCktPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwogfQog
CiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRldGFjaCgpCkBAIC04NCw0MSArNzUsMjgg
QEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKQogICAgIEhUTUxFbGVtZW50
OjpkZXRhY2goKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtTm9WYWxp
ZGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZm9ybW5vdmFsaWRhdGVB
dHRyKS5pc051bGwoKTsKLX0KLQotVmFsaWRpdHlTdGF0ZSogSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6dmFsaWRpdHkoKQotewotICAgIGlmICghbV92YWxpZGl0eVN0YXRlKQotICAgICAgICBtX3Zh
bGlkaXR5U3RhdGUgPSBWYWxpZGl0eVN0YXRlOjpjcmVhdGUodGhpcyk7Ci0KLSAgICByZXR1cm4g
bV92YWxpZGl0eVN0YXRlLmdldCgpOwotfQotCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+
bmFtZSgpID09IGRpc2FibGVkQXR0cikgewotICAgICAgICBib29sIG9sZERpc2FibGVkID0gbV9k
aXNhYmxlZDsKLSAgICAgICAgbV9kaXNhYmxlZCA9ICFhdHRyLT5pc051bGwoKTsKLSAgICAgICAg
aWYgKG9sZERpc2FibGVkICE9IG1fZGlzYWJsZWQpIHsKKyAgICAgICAgYm9vbCBvbGREaXNhYmxl
ZCA9IGRpc2FibGVkKCk7CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0RGlzYWJs
ZWQoIWF0dHItPmlzTnVsbCgpKTsKKyAgICAgICAgaWYgKG9sZERpc2FibGVkICE9IGRpc2FibGVk
KCkpIHsKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgICAgIGlm
IChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKICAg
ICAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIo
KSwgRW5hYmxlZFN0YXRlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IHJlYWRvbmx5QXR0cikgewotICAgICAgICBib29sIG9sZFJlYWRPbmx5ID0gbV9yZWFkT25s
eTsKLSAgICAgICAgbV9yZWFkT25seSA9ICFhdHRyLT5pc051bGwoKTsKLSAgICAgICAgaWYgKG9s
ZFJlYWRPbmx5ICE9IG1fcmVhZE9ubHkpIHsKKyAgICAgICAgYm9vbCBvbGRSZWFkT25seSA9IHJl
YWRPbmx5KCk7CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6c2V0UmVhZE9ubHkoIWF0
dHItPmlzTnVsbCgpKTsKKyAgICAgICAgaWYgKG9sZFJlYWRPbmx5ICE9IHJlYWRPbmx5KCkpIHsK
ICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgICAgIGlmIChyZW5k
ZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAg
ICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgUmVh
ZE9ubHlTdGF0ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBy
ZXF1aXJlZEF0dHIpIHsKLSAgICAgICAgYm9vbCBvbGRSZXF1aXJlZCA9IG1fcmVxdWlyZWQ7Ci0g
ICAgICAgIG1fcmVxdWlyZWQgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgICAgIGlmIChvbGRSZXF1
aXJlZCAhPSBtX3JlcXVpcmVkKSB7CisgICAgICAgIGJvb2wgb2xkUmVxdWlyZWQgPSByZXF1aXJl
ZCgpOworICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldFJlcXVpcmVkKCFhdHRyLT5p
c051bGwoKSk7CisgICAgICAgIGlmIChvbGRSZXF1aXJlZCAhPSByZXF1aXJlZCgpKSB7CiAgICAg
ICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKICAgICAgICAgICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsgLy8gVXBkYXRlcyBmb3IgOnJlcXVpcmVkIDpvcHRpb25hbCBjbGFzc2VzLgog
ICAgICAgICB9CkBAIC0xNTQsNTEgKzEzMiwxNiBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmF0dGFjaCgpCiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
VHJlZShib29sIGRlZXApCiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7
Ci0gICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0
ZSh0aGlzKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1l
bnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQg
JiYgZWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewotICAgICAgICAgICAgaWYgKG1fZm9y
bSkKLSAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwotICAg
ICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZWxlbWVudCk7
Ci0gICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgaWYgKCFtX2Zvcm0pIHsKLSAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRo
ZSBjYXNlIG9mIGEgbmV3IGZvcm0gZWxlbWVudCBiZWluZyBjcmVhdGVkIGJ5Ci0gICAgICAgIC8v
IEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBhIGZvcm0uICBJbiB0aGUgY2FzZSBvZiB0
aGUgcGFyc2VyCi0gICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3aWxsIGFscmVhZHkgaGF2
ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sIAotICAgICAgICAvLyBhbmQgc28gd2UgZG9u
J3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3Rv
cigpOwotICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZv
cm1FbGVtZW50KHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5j
aGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwotICAgIH0KKyAgICBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKTsKKyAgICBpZiAoIWZvcm0oKSkKKyAg
ICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsK
IAogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOwogfQogCi1zdGF0aWMg
aW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4pCi17Ci0gICAgTm9kZSogcm9vdCA9IG47Ci0g
ICAgZm9yICg7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIHJvb3QgPSBuOwotICAg
IHJldHVybiByb290OwotfQotCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRG
cm9tVHJlZShib29sIGRlZXApCiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIp
KQotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJp
YnV0ZSh0aGlzKTsKLQotICAgIC8vIElmIHRoZSBmb3JtIGFuZCBlbGVtZW50IGFyZSBib3RoIGlu
IHRoZSBzYW1lIHRyZWUsIHByZXNlcnZlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBmb3JtLgotICAg
IC8vIE90aGVyd2lzZSwgbnVsbCBvdXQgb3VyIGZvcm0gYW5kIHJlbW92ZSBvdXJzZWx2ZXMgZnJv
bSB0aGUgZm9ybSdzIGxpc3Qgb2YgZWxlbWVudHMuCi0gICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9v
dCh0aGlzKSAhPSBmaW5kUm9vdChtX2Zvcm0pKSB7Ci0gICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9y
bUVsZW1lbnQodGhpcyk7Ci0gICAgICAgIG1fZm9ybSA9IDA7Ci0gICAgfQotCisgICAgRm9ybUFz
c29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoKTsKICAgICBIVE1MRWxlbWVudDo6cmVt
b3ZlZEZyb21UcmVlKGRlZXApOwogfQogCkBAIC0yMjgsMTEgKzE3MSw2IEBAIGJvb2wgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6YXV0b2ZvY3VzKCkKICAgICByZXR1cm4gaGFzQXR0cmlidXRlKGF1
dG9mb2N1c0F0dHIpOwogfQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXF1aXJlZDsKLX0KLQogc3RhdGljIHZvaWQgdXBk
YXRlRnJvbUVsZW1lbnRDYWxsYmFjayhOb2RlKiBub2RlKQogewogICAgIEFTU0VSVF9BUkcobm9k
ZSwgbm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKQEAgLTI5MCwxMjUgKzIyOCw2IEBAIHNob3J0IEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnRhYkluZGV4KCkKICAgICByZXR1cm4gRWxlbWVudDo6dGFi
SW5kZXgoKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWNhbGNXaWxsVmFs
aWRhdGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBTaG91bGQgcmV0dXJuIGZhbHNlIGlmIHRo
aXMgZWxlbWVudCBoYXMgYSBkYXRhbGlzdCBlbGVtZW50IGFzIGFuCi0gICAgLy8gYW5jZXN0b3Iu
IFNlZSBIVE1MNSA0LjEwLjEwICdUaGUgZGF0YWxpc3QgZWxlbWVudC4nCi0gICAgcmV0dXJuICFt
X2Rpc2FibGVkICYmICFtX3JlYWRPbmx5OwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OndpbGxWYWxpZGF0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3dpbGxWYWxpZGF0ZUluaXRp
YWxpemVkKSB7Ci0gICAgICAgIG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAg
ICAgICBtX3dpbGxWYWxpZGF0ZSA9IHJlY2FsY1dpbGxWYWxpZGF0ZSgpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZhaWxzLCBzZXROZWVkc1dp
bGxWYWxpZGF0ZUNoZWNrKCkgaXMgbm90Ci0gICAgICAgIC8vIGNhbGxlZCBjb3JyZWN0bHkgd2hl
biBzb21ldGhpbmcgd2hpY2ggY2hhbmdlcyByZWNhbGNXaWxsVmFsaWRhdGUoKSByZXN1bHQKLSAg
ICAgICAgLy8gaXMgdXBkYXRlZC4KLSAgICAgICAgQVNTRVJUKG1fd2lsbFZhbGlkYXRlID09IHJl
Y2FsY1dpbGxWYWxpZGF0ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fd2lsbFZhbGlkYXRlOwot
fQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRlQ2hl
Y2soKQotewotICAgIC8vIFdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgd2lsbFZhbGlkdGUgaW1tZWRp
YXRlbHkgYmVjYXVzZSB3aWxsVmFsaWRhdGUKLSAgICAvLyBjaGFuZ2UgY2FuIGNhdXNlcyBzdHls
ZSBjaGFuZ2UuCi0gICAgYm9vbCBuZXdXaWxsVmFsaWRhdGUgPSByZWNhbGNXaWxsVmFsaWRhdGUo
KTsKLSAgICBpZiAobV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCAmJiBtX3dpbGxWYWxpZGF0ZSA9
PSBuZXdXaWxsVmFsaWRhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dpbGxWYWxpZGF0ZUlu
aXRpYWxpemVkID0gdHJ1ZTsKLSAgICBtX3dpbGxWYWxpZGF0ZSA9IG5ld1dpbGxWYWxpZGF0ZTsK
LSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgaWYgKCFtX3dpbGxWYWxpZGF0ZSkKLSAg
ICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwotfQotCi1TdHJpbmcgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6dmFsaWRhdGlvbk1lc3NhZ2UoKQotewotICAgIHJldHVybiB2YWxp
ZGl0eSgpLT52YWxpZGF0aW9uTWVzc2FnZSgpOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCi17Ci0gICAgUGFnZSogcGFn
ZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiB3aWxsVmFsaWRhdGUo
KSkgewotICAgICAgICBtZXNzYWdlID0gdmFsaWRhdGlvbk1lc3NhZ2UoKS5zdHJpcFdoaXRlU3Bh
Y2UoKTsKLSAgICAgICAgLy8gSFRNTDUgc3BlY2lmaWNhdGlvbiBkb2Vzbid0IGFzayBVQSB0byBz
aG93IHRoZSB0aXRsZSBhdHRyaWJ1dGUgdmFsdWUKLSAgICAgICAgLy8gd2l0aCB0aGUgdmFsaWRh
dGlvbk1lc3NhZ2UuICBIb3dldmVyLCB0aGlzIGJlaGF2aW9yIGlzIHNhbWUgYXMgT3BlcmEKLSAg
ICAgICAgLy8gYW5kIHRoZSBzcGVjaWZpY2F0aW9uIGRlc2NyaWJlcyBzdWNoIGJlaGF2aW9yIGFz
IGFuIGV4YW1wbGUuCi0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBnZXRBdHRy
aWJ1dGUodGl0bGVBdHRyKTsKLSAgICAgICAgaWYgKCFtZXNzYWdlLmlzRW1wdHkoKSAmJiAhdGl0
bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCgnXG4nKTsKLSAgICAg
ICAgICAgIG1lc3NhZ2UuYXBwZW5kKHRpdGxlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo
IW1fdmFsaWRhdGlvbk1lc3NhZ2UpIHsKLSAgICAgICAgbV92YWxpZGF0aW9uTWVzc2FnZSA9IFZh
bGlkYXRpb25NZXNzYWdlOjpjcmVhdGUodGhpcyk7Ci0gICAgICAgIG1fdmFsaWRhdGlvbk1lc3Nh
Z2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfSBlbHNlIGlmIChtZXNzYWdlLmlzRW1wdHko
KSkKLSAgICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwotICAgIGVsc2UgaWYg
KG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSAhPSBtZXNzYWdlKQotICAgICAgICBtX3Zh
bGlkYXRpb25NZXNzYWdlLT5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotfQotCi12b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OmhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQotewotICAgIG1f
dmFsaWRhdGlvbk1lc3NhZ2UgPSAwOwotfQotCi1TdHJpbmcgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6dmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92YWxp
ZGF0aW9uTWVzc2FnZSA/IG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSA6IFN0cmluZygp
OwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoVmVjdG9y
PFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJv
bHMpCi17Ci0gICAgaWYgKCF3aWxsVmFsaWRhdGUoKSB8fCBpc1ZhbGlkRm9ybUNvbnRyb2xFbGVt
ZW50KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIEFuIGV2ZW50IGhhbmRsZXIgY2Fu
IGRlcmVmIHRoaXMgb2JqZWN0LgotICAgIFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiBw
cm90ZWN0b3IodGhpcyk7Ci0gICAgUmVmUHRyPERvY3VtZW50PiBvcmlnaW5hbERvY3VtZW50KGRv
Y3VtZW50KCkpOwotICAgIGJvb2wgbmVlZHNEZWZhdWx0QWN0aW9uID0gZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlkRXZlbnQsIGZhbHNlLCB0cnVlKSk7Ci0g
ICAgaWYgKG5lZWRzRGVmYXVsdEFjdGlvbiAmJiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMgJiYg
aW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0gZG9jdW1lbnQoKSkKLSAgICAgICAg
dW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLT5hcHBlbmQodGhpcyk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29udHJvbEVs
ZW1lbnQoKQotewotICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZhaWxzLCBzZXRO
ZWVkc1ZhbGlkaXR5Q2hlY2soKSBpcyBub3QgY2FsbGVkCi0gICAgLy8gY29ycmVjdGx5IHdoZW4g
c29tZXRoaW5nIHdoaWNoIGNoYW5nZXMgdmFsaWRpdHkgaXMgdXBkYXRlZC4KLSAgICBBU1NFUlQo
bV9pc1ZhbGlkID09IHZhbGlkaXR5KCktPnZhbGlkKCkpOwotICAgIHJldHVybiBtX2lzVmFsaWQ7
Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmVlZHNWYWxpZGl0eUNoZWNr
KCkKLXsKLSAgICBib29sIG5ld0lzVmFsaWQgPSB2YWxpZGl0eSgpLT52YWxpZCgpOwotICAgIGlm
ICh3aWxsVmFsaWRhdGUoKSAmJiBuZXdJc1ZhbGlkICE9IG1faXNWYWxpZCkgewotICAgICAgICAv
LyBVcGRhdGUgc3R5bGUgZm9yIHBzZXVkbyBjbGFzc2VzIHN1Y2ggYXMgOnZhbGlkIDppbnZhbGlk
LgotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfQotICAgIG1faXNWYWxpZCA9
IG5ld0lzVmFsaWQ7Ci0KLSAgICAvLyBVcGRhdGVzIG9ubHkgaWYgdGhpcyBjb250cm9sIGFscmVh
ZHkgaGFzIGEgdmFsaWR0aW9uIG1lc3NhZ2UuCi0gICAgaWYgKCF2aXNpYmxlVmFsaWRhdGlvbk1l
c3NhZ2UoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQ2FsbHMgdXBkYXRlVmlzaWJsZVZhbGlk
YXRpb25NZXNzYWdlKCkgZXZlbiBpZiBtX2lzVmFsaWQgaXMgbm90Ci0gICAgICAgIC8vIGNoYW5n
ZWQgYmVjYXVzZSBhIHZhbGlkYXRpb24gbWVzc2FnZSBjYW4gYmUgY2hhZ25lZC4KLSAgICAgICAg
dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgfQotfQotCi12b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmluZyYgZXJyb3Ip
Ci17Ci0gICAgdmFsaWRpdHkoKS0+c2V0Q3VzdG9tRXJyb3JNZXNzYWdlKGVycm9yKTsKLX0KLSAg
ICAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCkKIHsK
ICAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQpAQCAtNDI4LDY0ICsyNDcsMjIgQEAgdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEJsdQogCiBIVE1MRm9ybUVsZW1lbnQqIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9mb3JtOworICAgIHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm0oKTsKIH0KIAog
Ym9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgbV9mb3JtICYm
IG1fZm9ybS0+ZGVmYXVsdEJ1dHRvbigpID09IHRoaXM7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0oKQotewotICAgIGlmICghbV9mb3JtKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICBtX2Zv
cm0gPSAwOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlc2V0Rm9ybU93bmVy
KEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLXsKLSAgICBpZiAobV9mb3JtKSB7Ci0gICAgICAgIGlm
ICghZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgfQotICAgIG1fZm9ybSA9
IDA7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7Ci0gICAgICAgIC8vIFRo
ZSBIVE1MNSBzcGVjIHNheXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3
aXRoCi0gICAgICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBkb2N1bWVudCB0byBoYXZl
IGFuIElEIHRoYXQgZXF1YWwgdG8KLSAgICAgICAgLy8gdGhlIHZhbHVlIG9mIGZvcm0gYXR0cmli
dXRlLCBzbyB3ZSBwdXQgdGhlIHJlc3VsdCBvZgotICAgICAgICAvLyBkb2N1bWVudCgpLT5nZXRF
bGVtZW50QnlJZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAgICAgIEVsZW1lbnQqIGZp
cnN0RWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUo
Zm9ybUF0dHIpKTsKLSAgICAgICAgaWYgKGZpcnN0RWxlbWVudCAmJiBmaXJzdEVsZW1lbnQtPmhh
c1RhZ05hbWUoZm9ybVRhZykpCi0gICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnQqPihmaXJzdEVsZW1lbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2Zvcm0gPSBmb3JtOwotICAgIH0gZWxzZQotICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2Vz
dG9yKCk7Ci0gICAgaWYgKG1fZm9ybSkKLSAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVt
ZW50KHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0
dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICByZXR1cm4gaXNTdWNjZXNzZnVsU3VibWl0QnV0
dG9uKCkgJiYgZm9ybSgpICYmIGZvcm0oKS0+ZGVmYXVsdEJ1dHRvbigpID09IHRoaXM7CiB9CiAK
IHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUq
IGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGZv
cm1BdHRyKSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKLSAg
ICAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1vdmVkLiBXZSBuZWVkIHRvIHJlc2V0
IGZvcm0gb3duZXIgaGVyZS4KLSAgICAgICAgICAgIGlmIChtX2Zvcm0pCi0gICAgICAgICAgICAg
ICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgICAgIG1fZm9ybSA9
IGZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICAgICAgICAgIGlmIChtX2Zvcm0pCi0gICAgICAgICAg
ICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRC
dXR0b24odGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzZXRGb3JtT3duZXIo
MCk7Ci0gICAgfQotICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHByZXNl
cnZlRGVjbHMpOworICAgICAgICBmb3JtQXR0cmlidXRlQ2hhbmdlZCgpOworICAgICAgICBpZiAo
IWZvcm0oKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5h
ZGRCdXR0b24odGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1
dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOwogfQogCiBib29sIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmlzTGFiZWxhYmxlKCkgY29uc3QKQEAgLTUxNiw3ICsyOTMsNyBAQCBQYXNzUmVm
UHRyPE5vZGVMaXN0PiBIVE1MRm9ybUNvbnRyb2xFbGVtCiAgICAgCiAgICAgcmV0dXJuIExhYmVs
c05vZGVMaXN0OjpjcmVhdGUodGhpcyk7CiB9Ci0gICAgCisKIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQogICAg
IDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2MsIGYpCiB7CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiAr
MjQsNyBAQAogI2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKICNkZWZpbmUgSFRNTEZv
cm1Db250cm9sRWxlbWVudF9oCiAKKyNpbmNsdWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNSwy
NiArMzYsMzAgQEAgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2U7CiBjbGFzcyBWYWxpZGl0eVN0YXRl
OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAotLy8gRklYTUU6IFRoZSBIVE1MNSBzcGVjaWZp
Y2F0aW9uIGNhbGxzIHRoZXNlIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cy4KLS8vIFNvIGNvbnNp
ZGVyIHJlbmFtaW5nIHRoaXMgdG8gSFRNTEZvcm1Bc3NvY2lhdGVkRWxlbWVudC4KLWNsYXNzIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgeworLy8gSFRNTEZvcm1D
b250cm9sRWxlbWVudCBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQsCisvLyBhbmQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnQgaW1wbGVtZW50YXRp
b25zIHNob3VsZCB1c2UgSFRNTEZvcm1Db250cm9sRWxlbWVudAorLy8gdW5sZXNzIHRoZXJlIGlz
IGEgc3BlY2lhbCByZWFzb24uCitjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IDogcHVibGlj
IEhUTUxFbGVtZW50LCBwdWJsaWMgRm9ybUFzc29jaWF0ZWRFbGVtZW50IHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKLSAgICBIVE1MRm9ybUVsZW1l
bnQqIGZvcm0oKSBjb25zdCB7IHJldHVybiBtX2Zvcm07IH0KLSAgICBWYWxpZGl0eVN0YXRlKiB2
YWxpZGl0eSgpOwotCi0gICAgYm9vbCBmb3JtTm9WYWxpZGF0ZSgpIGNvbnN0OworICAgIEhUTUxG
b3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6
Zm9ybSgpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IH0KIAotICAgIHZpcnR1YWwg
Ym9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JtQ29udHJvbFZh
bHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gYjsg
fQorICAgIHZpcnR1YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQ29udHJvbFZhbHVlTWF0Y2hl
c1JlbmRlcmVyKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNo
ZXNSZW5kZXJlcihib29sIGIpIHsgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpzZXRGb3JtQ29udHJv
bFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGIpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hG
b3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAKLSAgICBib29sIGRpc2FibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9kaXNhYmxlZDsgfQotICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7CisgICAgdmly
dHVhbCBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gRm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpkaXNhYmxlZCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldERpc2FibGVkKGJvb2wpOworCisg
ICAgYm9vbCByZXF1aXJlZCgpIGNvbnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6
cmVxdWlyZWQoKTsgfQorICAgIHZvaWQgc2V0UmVxdWlyZWQoYm9vbCB2YWx1ZSkgeyBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQ6OnNldFJlcXVpcmVkKHZhbHVlKTsgfQorCisgICAgYm9vbCByZWFkT25s
eSgpIGNvbnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVhZE9ubHkoKTsgfQor
ICAgIHZvaWQgc2V0UmVhZE9ubHkoYm9vbCB2YWx1ZSkgeyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6
OnNldFJlYWRPbmx5KHZhbHVlKTsgfQogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KQEAgLTYyLDExICs2Nyw2IEBAIHB1YmxpYzoKICAgICAvLyBEZXRlcm1pbmVzIHdo
ZXRoZXIgb3Igbm90IGEgY29udHJvbCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZC4KICAg
ICB2aXJ0dWFsIGJvb2wgYXV0b2ZvY3VzKCkgY29uc3Q7CiAKLSAgICBib29sIHJlcXVpcmVkKCkg
Y29uc3Q7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBm
b3JtQ29udHJvbFR5cGUoKTsgfQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIGZvcm1Db250cm9sTmFtZSgpOyB9Ci0KICAgICB2b2lkIHNldE5hbWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWRGb3JtQ29u
dHJvbCgpIGNvbnN0IHsgcmV0dXJuICFkaXNhYmxlZCgpOyB9CkBAIC04MywyNSArODMsMTYgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2YXRlZFN1Ym1pdCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2YXRlZFN1Ym1pdChib29sKSB7
IH0KIAotICAgIHZpcnR1YWwgYm9vbCB3aWxsVmFsaWRhdGUoKSBjb25zdDsKLSAgICBTdHJpbmcg
dmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICB2b2lkIHVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVz
c2FnZSgpOwotICAgIHZvaWQgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwotICAgIGJv
b2wgY2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4q
IHVuaGFuZGxlZEludmFsaWRDb250cm9scyA9IDApOwotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxs
ZWQgd2hlbiBhIHZhbGlkYXRpb24gY29uc3RyYWludCBvciBjb250cm9sIHZhbHVlIGlzIGNoYW5n
ZWQuCi0gICAgdm9pZCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKLSAgICB2b2lkIHNldEN1c3Rv
bVZhbGlkaXR5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgdm9pZCBmb3JtRGVzdHJveWVkKCkgeyBt
X2Zvcm0gPSAwOyB9CisgICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6d2lsbFZhbGlkYXRlKCk7IH0KIAogICAgIGJvb2wg
aXNMYWJlbGFibGUoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBsYWJlbHMoKTsK
LSAgICAKLSAgICBib29sIHJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9yZWFkT25seTsgfQog
Ci0gICAgdm9pZCByZXNldEZvcm1Pd25lcihIVE1MRm9ybUVsZW1lbnQqKTsKICAgICB2aXJ0dWFs
IHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBm
YWxzZSk7CiAKKyAgICB1c2luZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+OjpyZWY7CisgICAg
dXNpbmcgVHJlZVNoYXJlZDxDb250YWluZXJOb2RlPjo6ZGVyZWY7CisKIHByb3RlY3RlZDoKICAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAKQEAgLTExOSwxNyArMTEwLDE1IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoKCk7CiAKLSAgICB2b2lkIHJlbW92ZUZyb21Gb3JtKCk7Ci0KLSAgICAvLyBU
aGlzIG11c3QgYmUgY2FsbGVkIGFueSB0aW1lIHRoZSByZXN1bHQgb2Ygd2lsbFZhbGlkYXRlKCkg
aGFzIGNoYW5nZWQuCi0gICAgdm9pZCBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7Ci0gICAg
dmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0OwotCiBwcml2YXRlOgogICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgPSAw
OwogCisgICAgdmlydHVhbCB2b2lkIHJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpIHsgcmVmKCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSB7IGRlcmVm
KCk7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVu
dCgpIHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9sRWxl
bWVudCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OwogCkBA
IC0xMzcsMjYgKzEyNiw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIEhUTUxGb3JtRWxlbWVu
dCogdmlydHVhbEZvcm0oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNEZWZhdWx0QnV0dG9u
Rm9yRm9ybSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkRm9ybUNvbnRyb2xFbGVt
ZW50KCk7Ci0gICAgU3RyaW5nIHZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0OwogCi0g
ICAgSFRNTEZvcm1FbGVtZW50KiBtX2Zvcm07Ci0gICAgT3duUHRyPFZhbGlkaXR5U3RhdGU+IG1f
dmFsaWRpdHlTdGF0ZTsKLSAgICBPd25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+IG1fdmFsaWRhdGlv
bk1lc3NhZ2U7Ci0gICAgYm9vbCBtX2Rpc2FibGVkIDogMTsKLSAgICBib29sIG1fcmVhZE9ubHkg
OiAxOwotICAgIGJvb2wgbV9yZXF1aXJlZCA6IDE7Ci0gICAgYm9vbCBtX3ZhbHVlTWF0Y2hlc1Jl
bmRlcmVyIDogMTsKLQotICAgIC8vIFRoZSBpbml0aWFsIHZhbHVlIG9mIG1fd2lsbFZhbGlkYXRl
IGRlcGVuZHMgb24gdGhlIGRlcml2ZWQgY2xhc3MuIFdlIGNhbid0Ci0gICAgLy8gaW5pdGlhbGl6
ZSBpdCB3aXRoIGEgdmlydHVhbCBmdW5jdGlvbiBpbiB0aGUgY29uc3RydWN0b3IuIG1fd2lsbFZh
bGlkYXRlCi0gICAgLy8gaXMgbm90IGRldGVybWluaXN0aWMgYXMgbG9uZyBhcyBtX3dpbGxWYWxp
ZGF0ZUluaXRpYWxpemVkIGlzIGZhbHNlLgotICAgIG11dGFibGUgYm9vbCBtX3dpbGxWYWxpZGF0
ZUluaXRpYWxpemVkOiAxOwotICAgIG11dGFibGUgYm9vbCBtX3dpbGxWYWxpZGF0ZSA6IDE7Ci0K
LSAgICAvLyBDYWNoZSBvZiB2YWxpZGl0eSgpLT52YWxpZCgpLgotICAgIC8vIEJ1dCAiY2FuZGlk
YXRlIGZvciBjb25zdHJhaW50IHZhbGlkYXRpb24iIGRvZXNuJ3QgYWZmZWN0IG1faXNWYWxpZC4K
LSAgICBib29sIG1faXNWYWxpZCA6IDE7CiB9OwogCiAvLyBGSVhNRTogR2l2ZSB0aGlzIGNsYXNz
IGl0cyBvd24gaGVhZGVyIGZpbGUuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2
aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSwxMCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0
SW1wbGljaXRseShFCiB7CiAgICAgaW50IHN1Ym1pc3Npb25UcmlnZ2VyQ291bnQgPSAwOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsr
aSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9IG1fYXNz
b2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGZvcm1B
c3NvY2lhdGVkRWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBpZiAo
IWZvcm1Bc3NvY2lhdGVkRWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihmb3JtQXNzb2NpYXRlZEVs
ZW1lbnQpOwogICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bigpKSB7CiAgICAgICAgICAgICBpZiAoZm9ybUVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAg
ICAgICAgICAgICBmb3JtRWxlbWVudC0+ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhldmVudCk7CkBA
IC0yMTYsNyArMjE5LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3Rp
dgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXpl
KCk7ICsraSkKICAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmhpZGVWaXNpYmxlVmFs
aWRhdGlvbk1lc3NhZ2UoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxl
bWVudD4gPiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHM7CisgICAgVmVjdG9yPFJlZlB0cjxGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ+ID4gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzOwogICAgIGNvbGxl
Y3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHModW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKTsKICAg
ICBpZiAodW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0yMjUsNyArMjI4LDggQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRl
SW50ZXJhY3RpdgogICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IHByb3RlY3Rvcih0aGlzKTsK
ICAgICAvLyBGb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGNvbnRyb2wgYW5kIHNob3cgYSB2
YWxpZGF0aW9uIG1lc3NhZ2UuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVuaGFuZGxl
ZEludmFsaWRDb250cm9scy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KiB1bmhhbmRsZWQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0KCk7Cisg
ICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogdW5oYW5kbGVkQXNzb2NpYXRlZEVsZW1lbnQg
PSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0KCk7CisgICAgICAgIEhUTUxFbGVtZW50
KiB1bmhhbmRsZWQgPSB0b0hUTUxFbGVtZW50KHVuaGFuZGxlZEFzc29jaWF0ZWRFbGVtZW50KTsK
ICAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb2N1c2FibGUoKSAmJiB1bmhhbmRsZWQtPmluRG9j
dW1lbnQoKSkgewogICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBvcmlnaW5hbERvY3VtZW50
KHVuaGFuZGxlZC0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICB1bmhhbmRsZWQtPnNjcm9sbElu
dG9WaWV3SWZOZWVkZWQoZmFsc2UpOwpAQCAtMjM0LDcgKzIzOCw3IEBAIGJvb2wgSFRNTEZvcm1F
bGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXYKICAgICAgICAgICAgIC8vIG1vdmVkIHRvIGFub3Ro
ZXIgZG9jdW1lbnQuCiAgICAgICAgICAgICBpZiAodW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgpICYm
IHVuaGFuZGxlZC0+aW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0gdW5oYW5kbGVk
LT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgdW5oYW5kbGVkLT5mb2N1cygpOwotICAg
ICAgICAgICAgICAgIHVuaGFuZGxlZC0+dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7
CisgICAgICAgICAgICAgICAgdW5oYW5kbGVkQXNzb2NpYXRlZEVsZW1lbnQtPnVwZGF0ZVZpc2li
bGVWYWxpZGF0aW9uTWVzc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0yNDIsMTEgKzI0NiwxMiBAQCBib29sIEhUTUxGb3JtRWxlbWVu
dDo6dmFsaWRhdGVJbnRlcmFjdGl2CiAgICAgLy8gV2FybiBhYm91dCBhbGwgb2YgdW5mb2N1c2Fi
bGUgY29udHJvbHMuCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkp
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVuaGFuZGxlZEludmFsaWRDb250
cm9scy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCog
dW5oYW5kbGVkID0gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzW2ldLmdldCgpOworICAgICAgICAg
ICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiB1bmhhbmRsZWRBc3NvY2lhdGVkRWxlbWVudCA9IHVu
aGFuZGxlZEludmFsaWRDb250cm9sc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50
KiB1bmhhbmRsZWQgPSB0b0hUTUxFbGVtZW50KHVuaGFuZGxlZEFzc29jaWF0ZWRFbGVtZW50KTsK
ICAgICAgICAgICAgIGlmICh1bmhhbmRsZWQtPmlzRm9jdXNhYmxlKCkgJiYgdW5oYW5kbGVkLT5p
bkRvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBTdHJp
bmcgbWVzc2FnZSgiQW4gaW52YWxpZCBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lPSclbmFtZScgaXMg
bm90IGZvY3VzYWJsZS4iKTsKLSAgICAgICAgICAgIG1lc3NhZ2UucmVwbGFjZSgiJW5hbWUiLCB1
bmhhbmRsZWQtPm5hbWUoKSk7CisgICAgICAgICAgICBtZXNzYWdlLnJlcGxhY2UoIiVuYW1lIiwg
dW5oYW5kbGVkQXNzb2NpYXRlZEVsZW1lbnQtPm5hbWUoKSk7CiAgICAgICAgICAgICBmcmFtZS0+
ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+YWRkTWVzc2FnZShIVE1MTWVzc2FnZVNvdXJjZSwgTG9n
TWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlLCAwLCBkb2N1bWVudCgpLT51
cmwoKS5zdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMDcsOCArMzEyLDExIEBAIHZv
aWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZlbnQqIGV2ZW4KICAgICBib29sIG5lZWRCdXR0
b25BY3RpdmF0aW9uID0gYWN0aXZhdGVTdWJtaXRCdXR0b247IC8vIGRvIHdlIG5lZWQgdG8gYWN0
aXZhdGUgYSBzdWJtaXQgYnV0dG9uPwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
YXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIGNvbnRyb2wgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgRm9y
bUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1l
bnRzW2ldOworICAgICAgICBpZiAoIWFzc29jaWF0ZWRFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChuZWVkQnV0dG9uQWN0
aXZhdGlvbikgeworICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihhc3NvY2lhdGVkRWxlbWVudCk7
CiAgICAgICAgICAgICBpZiAoY29udHJvbC0+aXNBY3RpdmF0ZWRTdWJtaXQoKSkKICAgICAgICAg
ICAgICAgICBuZWVkQnV0dG9uQWN0aXZhdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgZWxzZSBp
ZiAoZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uID09IDAgJiYgY29udHJvbC0+aXNTdWNjZXNz
ZnVsU3VibWl0QnV0dG9uKCkpCkBAIC0zOTYsNyArNDA0LDcgQEAgdGVtcGxhdGU8Y2xhc3MgVCwg
c2l6ZV90IG4+IHN0YXRpYyB2b2lkIAogICAgICAgICB9CiB9CiAKLXVuc2lnbmVkIEhUTUxGb3Jt
RWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmlidXRlKEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIGVsZW1lbnQpCit1bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50
SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShFbGVtZW50KiBlbGVtZW50KQogewogICAgIC8vIENvbXBh
cmVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZm9ybSBlbGVtZW50IGFuZCB0aGUgaW5zZXJ0ZWQgZWxl
bWVudC4KICAgICAvLyBVcGRhdGVzIHRoZSBpbmRlY2VzIGluIG9yZGVyIHRvIHRoZSByZWxhdGlv
biBvZiB0aGUgcG9zaXRpb246CkBAIC00MTYsNTcgKzQyNCw2NCBAQCB1bnNpZ25lZCBIVE1MRm9y
bUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kCiAgICAgdW5zaWduZWQgbGVmdCA9IDAsIHJpZ2h0ID0g
bV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpIC0gMTsKICAgICB3aGlsZSAobGVmdCAhPSByaWdo
dCkgewogICAgICAgICB1bnNpZ25lZCBtaWRkbGUgPSBsZWZ0ICsgKChyaWdodCAtIGxlZnQpIC8g
Mik7Ci0gICAgICAgIHBvc2l0aW9uID0gZWxlbWVudC0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24o
bV9hc3NvY2lhdGVkRWxlbWVudHNbbWlkZGxlXSk7CisgICAgICAgIHBvc2l0aW9uID0gZWxlbWVu
dC0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24odG9IVE1MRWxlbWVudChtX2Fzc29jaWF0ZWRFbGVt
ZW50c1ttaWRkbGVdKSk7CiAgICAgICAgIGlmIChwb3NpdGlvbiAmIERPQ1VNRU5UX1BPU0lUSU9O
X0ZPTExPV0lORykKICAgICAgICAgICAgIHJpZ2h0ID0gbWlkZGxlOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBsZWZ0ID0gbWlkZGxlICsgMTsKICAgICB9CiAKLSAgICBwb3NpdGlvbiA9IGVs
ZW1lbnQtPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2xlZnRd
KTsKKyAgICBwb3NpdGlvbiA9IGVsZW1lbnQtPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRvSFRN
TEVsZW1lbnQobV9hc3NvY2lhdGVkRWxlbWVudHNbbGVmdF0pKTsKICAgICBpZiAocG9zaXRpb24g
JiBET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcpCiAgICAgICAgIHJldHVybiBsZWZ0OwogICAg
IHJldHVybiBsZWZ0ICsgMTsKIH0KIAotdW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxl
bWVudEluZGV4KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUpCit1bnNpZ25lZCBIVE1MRm9ybUVs
ZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXgoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVk
RWxlbWVudCkKIHsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoYXNz
b2NpYXRlZEVsZW1lbnQpOwogICAgIC8vIFRyZWF0cyBzZXBhcmF0ZWx5IHRoZSBjYXNlIHdoZXJl
IHRoaXMgZWxlbWVudCBoYXMgdGhlIGZvcm0gYXR0cmlidXRlCiAgICAgLy8gZm9yIHBlcmZvcm1h
bmNlIGNvbnNpZGVyYXRpb24uCi0gICAgaWYgKGUtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIp
KQotICAgICAgICByZXR1cm4gZm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmlidXRlKGUpOwor
ICAgIGlmIChlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkKKyAgICAgICAgcmV0
dXJuIGZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShlbGVtZW50KTsKIAogICAgIC8v
IENoZWNrIGZvciB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHRoaXMgZWxlbWVudCBpcyB0aGUgdmVy
eSBsYXN0IHRoaW5nIGluCiAgICAgLy8gdGhlIGZvcm0ncyB0cmVlIG9mIGNoaWxkcmVuOyB3ZSBk
b24ndCB3YW50IHRvIHdhbGsgdGhlIGVudGlyZSB0cmVlIGluIHRoYXQKICAgICAvLyBjb21tb24g
Y2FzZSB0aGF0IG9jY3VycyBkdXJpbmcgcGFyc2luZzsgaW5zdGVhZCB3ZSdsbCBqdXN0IHJldHVy
biBhIHZhbHVlCiAgICAgLy8gdGhhdCBzYXlzICJhZGQgdGhpcyBmb3JtIGVsZW1lbnQgdG8gdGhl
IGVuZCBvZiB0aGUgYXJyYXkiLgotICAgIGlmIChlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7
CisgICAgaWYgKGVsZW1lbnQtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpIHsKICAgICAgICAgdW5z
aWduZWQgaSA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzQmVmb3JlSW5kZXg7CiAgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRo
aXMpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBlKSB7CisgICAgICAgICAgICBpZiAobm9k
ZSA9PSBlbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgKyttX2Fzc29jaWF0ZWRFbGVtZW50c0Fm
dGVySW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAgICAgICAgICAgICAgICYm
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKQotICAg
ICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4o
bm9kZSktPmZvcm0oKSA9PSB0aGlzKQorICAgICAgICAgICAgICAgICAgICAmJiAoc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICAg
ICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSktPmZvcm0oKSA9PSB0aGlz
KQogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbV9h
c3NvY2lhdGVkRWxlbWVudHNBZnRlckluZGV4Kys7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50
OjpyZWdpc3RlckZvcm1FbGVtZW50KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUpCit2b2lkIEhU
TUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudChGb3JtQXNzb2NpYXRlZEVsZW1lbnQq
IGUpCiB7Ci0gICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRv
bihlKTsKLSAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMuYWRkQnV0dG9uKGUpOworICAgIGlmIChl
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZSk7Cisg
ICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24oZWxl
bWVudCk7CisgICAgICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5hZGRCdXR0b24oZWxlbWVudCk7
CisgICAgfQogICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmluc2VydChmb3JtRWxlbWVudEluZGV4
KGUpLCBlKTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUZvcm1FbGVtZW50KEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIGUpCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlRm9y
bUVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlKQogewotICAgIG1fY2hlY2tlZFJhZGlv
QnV0dG9ucy5yZW1vdmVCdXR0b24oZSk7Ci0gICAgaWYgKGUtPmZhc3RIYXNBdHRyaWJ1dGUoZm9y
bUF0dHIpKSB7CisgICAgaWYgKGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIG1f
Y2hlY2tlZFJhZGlvQnV0dG9ucy5yZW1vdmVCdXR0b24oc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250
cm9sRWxlbWVudCo+KGUpKTsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1l
bnQoZSk7CisgICAgaWYgKGVsZW1lbnQtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGluZGV4OwogICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBt
X2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraW5kZXgpCiAgICAgICAgICAgICBpZiAobV9h
c3NvY2lhdGVkRWxlbWVudHNbaW5kZXhdID09IGUpCkBAIC01NTQsNyArNTY5LDkgQEAgYm9vbCBI
VE1MRm9ybUVsZW1lbnQ6Ondhc1VzZXJTdWJtaXR0ZWQoKQogSFRNTEZvcm1Db250cm9sRWxlbWVu
dCogSFRNTEZvcm1FbGVtZW50OjpkZWZhdWx0QnV0dG9uKCkgY29uc3QKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IG1fYXNzb2NpYXRlZEVsZW1l
bnRzW2ldOworICAgICAgICBpZiAoIW1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Kj4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pOwogICAgICAgICBpZiAoY29udHJvbC0+aXNTdWNj
ZXNzZnVsU3VibWl0QnV0dG9uKCkpCiAgICAgICAgICAgICByZXR1cm4gY29udHJvbDsKICAgICB9
CkBAIC01NjQsMTcgKzU4MSwxNyBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MRm9ybUVs
ZW1lbnQ6CiAKIGJvb2wgSFRNTEZvcm1FbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKIHsKLSAgICBW
ZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4gY29udHJvbHM7CisgICAgVmVj
dG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4gY29udHJvbHM7CiAgICAgY29sbGVj
dFVuaGFuZGxlZEludmFsaWRDb250cm9scyhjb250cm9scyk7CiAgICAgcmV0dXJuIGNvbnRyb2xz
LmlzRW1wdHkoKTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmNvbGxlY3RVbmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHMoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+JiB1
bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6Y29sbGVjdFVu
aGFuZGxlZEludmFsaWRDb250cm9scyhWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dD4gPiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQogewogICAgIFJlZlB0cjxIVE1MRm9ybUVs
ZW1lbnQ+IHByb3RlY3Rvcih0aGlzKTsKICAgICAvLyBDb3B5IG1fYXNzb2NpYXRlZEVsZW1lbnRz
IGJlY2F1c2UgZXZlbnQgaGFuZGxlcnMgY2FsbGVkIGZyb20KICAgICAvLyBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkgbWlnaHQgY2hhbmdlIG1fYXNzb2NpYXRlZEVsZW1l
bnRzLgotICAgIFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiBlbGVtZW50
czsKKyAgICBWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiBlbGVtZW50czsK
ICAgICBlbGVtZW50cy5yZXNlcnZlQ2FwYWNpdHkobV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgp
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6
ZSgpOyArK2kpCiAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChtX2Fzc29jaWF0ZWRFbGVtZW50c1tp
XSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudDsKK2NsYXNzIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudDsKIGNsYXNzIEZvcm1EYXRhOwogY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDsKIGNsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7CkBAIC02NCw4ICs2NSw4IEBAIHB1YmxpYzoKIAog
ICAgIC8vIEZJWE1FOiBTaG91bGQgcmVuYW1lIHRoZXNlIHR3byBmdW5jdGlvbnMgdG8gc2F5ICJm
b3JtIGNvbnRyb2wiCiAgICAgLy8gb3IgImZvcm0tYXNzb2NpYXRlZCBlbGVtZW50IiBpbnN0ZWFk
IG9mICJmb3JtIGVsZW1lbnQiLgotICAgIHZvaWQgcmVnaXN0ZXJGb3JtRWxlbWVudChIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVGb3JtRWxlbWVudChIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50KEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0ZWRF
bGVtZW50Kik7CiAgICAgdm9pZCByZWdpc3RlckltZ0VsZW1lbnQoSFRNTEltYWdlRWxlbWVudCop
OwogICAgIHZvaWQgcmVtb3ZlSW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50Kik7CiAKQEAgLTEw
OSw3ICsxMTAsNyBAQCBwdWJsaWM6CiAKICAgICBDaGVja2VkUmFkaW9CdXR0b25zJiBjaGVja2Vk
UmFkaW9CdXR0b25zKCkgeyByZXR1cm4gbV9jaGVja2VkUmFkaW9CdXR0b25zOyB9CiAKLSAgICBj
b25zdCBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBhc3NvY2lhdGVkRWxlbWVudHMo
KSBjb25zdCB7IHJldHVybiBtX2Fzc29jaWF0ZWRFbGVtZW50czsgfQorICAgIGNvbnN0IFZlY3Rv
cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgYXNzb2NpYXRlZEVsZW1lbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9hc3NvY2lhdGVkRWxlbWVudHM7IH0KIAogcHJpdmF0ZToKICAgICBIVE1MRm9ybUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBAIC0xMzEsMTMgKzEzMiwx
MyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzdWJtaXQoRXZlbnQqLCBib29sIGFjdGl2YXRlU3Vi
bWl0QnV0dG9uLCBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgRm9ybVN1Ym1pc3Npb25Ucmln
Z2VyKTsKIAotICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7Ci0gICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleChI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleFdp
dGhGb3JtQXR0cmlidXRlKEVsZW1lbnQqKTsKKyAgICB1bnNpZ25lZCBmb3JtRWxlbWVudEluZGV4
KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3Vi
bWlzc2lvbiBzaG91bGQgYmUgcHJvY2VlZGVkLgogICAgIGJvb2wgdmFsaWRhdGVJbnRlcmFjdGl2
ZWx5KEV2ZW50Kik7CiAgICAgLy8gVmFsaWRhdGVzIGVhY2ggb2YgdGhlIGNvbnRyb2xzLCBhbmQg
c3RvcmVzIGNvbnRyb2xzIG9mIHdoaWNoICdpbnZhbGlkJwogICAgIC8vIGV2ZW50IHdhcyBub3Qg
Y2FuY2VsZWQgdG8gdGhlIHNwZWNpZmllZCB2ZWN0b3IuCi0gICAgdm9pZCBjb2xsZWN0VW5oYW5k
bGVkSW52YWxpZENvbnRyb2xzKFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4g
PiYpOworICAgIHZvaWQgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyhWZWN0b3I8UmVm
UHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiYpOwogCiAgICAgZnJpZW5kIGNsYXNzIEhUTUxG
b3JtQ29sbGVjdGlvbjsKIApAQCAtMTUxLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAKICAgICB1bnNp
Z25lZCBtX2Fzc29jaWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4OwogICAgIHVuc2lnbmVkIG1fYXNz
b2NpYXRlZEVsZW1lbnRzQWZ0ZXJJbmRleDsKLSAgICBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxl
bWVudCo+IG1fYXNzb2NpYXRlZEVsZW1lbnRzOworICAgIFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQqPiBtX2Fzc29jaWF0ZWRFbGVtZW50czsKICAgICBWZWN0b3I8SFRNTEltYWdlRWxlbWVu
dCo+IG1faW1hZ2VFbGVtZW50czsKIAogICAgIGJvb2wgbV93YXNVc2VyU3VibWl0dGVkOwpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw5ICsxMzks
MTEgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVDaGVja2VkUmFkaQogICAgICAgICBj
aGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogCiAgICAgaWYgKGZvcm0oKSkg
ewotICAgICAgICBjb25zdCBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBjb250cm9s
cyA9IGZvcm0oKS0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgY29udHJvbHMgPSBmb3JtKCktPmFzc29jaWF0ZWRFbGVt
ZW50cygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29udHJvbHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBj
b250cm9sc1tpXTsKKyAgICAgICAgICAgIGlmICghY29udHJvbHNbaV0tPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxl
bWVudCo+KGNvbnRyb2xzW2ldKTsKICAgICAgICAgICAgIGlmIChjb250cm9sLT5uYW1lKCkgIT0g
bmFtZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGNvbnRy
b2wtPnR5cGUoKSAhPSB0eXBlKCkpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTcgKzQ2LDI4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxPYmplY3RFbGVtZW50OjpI
VE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSAKK2lubGluZSBIVE1MT2JqZWN0RWxlbWVu
dDo6SFRNTE9iamVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2Vy
KSAKICAgICA6IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGNyZWF0
ZWRCeVBhcnNlcikKKyAgICAsIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChmb3JtKQogICAgICwgbV9k
b2NOYW1lZEl0ZW0odHJ1ZSkKICAgICAsIG1fdXNlRmFsbGJhY2tDb250ZW50KGZhbHNlKQogewog
ICAgIEFTU0VSVChoYXNUYWdOYW1lKG9iamVjdFRhZykpOworICAgIGlmICghdGhpcy0+Zm9ybSgp
KQorICAgICAgICBzZXRGb3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7CisgICAgaWYgKHRoaXMtPmZv
cm0oKSkKKyAgICAgICAgdGhpcy0+Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwog
fQogCi1QYXNzUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBIVE1MT2JqZWN0RWxlbWVudDo6Y3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9v
bCBjcmVhdGVkQnlQYXJzZXIpCitpbmxpbmUgSFRNTE9iamVjdEVsZW1lbnQ6On5IVE1MT2JqZWN0
RWxlbWVudCgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MT2JqZWN0RWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyKSk7CisgICAgaWYgKGZvcm0oKSkKKyAg
ICAgICAgZm9ybSgpLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKK30KKworUGFzc1JlZlB0cjxI
VE1MT2JqZWN0RWxlbWVudD4gSFRNTE9iamVjdEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9y
bSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1M
T2JqZWN0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSwgY3JlYXRlZEJ5UGFyc2VyKSk7
CiB9CiAKIFJlbmRlcldpZGdldCogSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlcldpZGdldEZvckpT
QmluZGluZ3MoKSBjb25zdApAQCAtNzYsNiArODcsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgICAgICBzZXROZWVkc1dpZGdldFVwZGF0ZSh0cnVl
KTsKICAgICAgICAgaWYgKCFpc0ltYWdlVHlwZSgpICYmIG1faW1hZ2VMb2FkZXIpCiAgICAgICAg
ICAgICBtX2ltYWdlTG9hZGVyLmNsZWFyKCk7CisgICAgICAgIG1fZm9ybUNvbnRyb2xUeXBlID0g
bV9zZXJ2aWNlVHlwZTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBkYXRhQXR0cikg
ewogICAgICAgICBtX3VybCA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhhdHRy
LT52YWx1ZSgpKTsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKQEAgLTMxMyw2ICszMjUsMTQg
QEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bQogICAgIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIH0KIAordm9pZCBIVE1MT2Jq
ZWN0RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2Vy
dmVEZWNscykKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IGZvcm1BdHRyKQorICAgICAgICBm
b3JtQXR0cmlidXRlQ2hhbmdlZCgpOworICAgIGVsc2UKKyAgICAgICAgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsKK30KKwogdm9p
ZCBIVE1MT2JqZWN0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2Vy
LCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERl
bHRhKQogewogICAgIHVwZGF0ZURvY05hbWVkSXRlbSgpOwpAQCAtMzQ0LDYgKzM2NCw3IEBAIHZv
aWQgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlckZhbGxiYWNrQ28KICAgICAvLyBCZWZvcmUgd2Ug
Z2l2ZSB1cCBhbmQgdXNlIGZhbGxiYWNrIGNvbnRlbnQsIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGlz
IGEgTUlNRSB0eXBlIGlzc3VlLgogICAgIGlmIChtX2ltYWdlTG9hZGVyICYmIG1faW1hZ2VMb2Fk
ZXItPmltYWdlKCkgJiYgbV9pbWFnZUxvYWRlci0+aW1hZ2UoKS0+c3RhdHVzKCkgIT0gQ2FjaGVk
UmVzb3VyY2U6OkxvYWRFcnJvcikgewogICAgICAgICBtX3NlcnZpY2VUeXBlID0gbV9pbWFnZUxv
YWRlci0+aW1hZ2UoKS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpOworICAgICAgICBtX2Zvcm1Db250
cm9sVHlwZSA9IG1fc2VydmljZVR5cGU7CiAgICAgICAgIGlmICghaXNJbWFnZVR5cGUoKSkgewog
ICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgdGhpbmsgd2UgaGF2ZSBhbiBpbWFnZSB0eXBlIGFu
eW1vcmUsIHRoZW4gZGl0Y2ggdGhlIGltYWdlIGxvYWRlci4KICAgICAgICAgICAgIG1faW1hZ2VM
b2FkZXIuY2xlYXIoKTsgICAgICAgIApAQCAtNDUzLDQgKzQ3NCwzMiBAQCB2b2lkIEhUTUxPYmpl
Y3RFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0CiAgICAgICAgIGFkZFN1YnJlc291cmNlVVJMKHVy
bHMsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVzZU1hcCkpOwogfQogCit2b2lkIEhUTUxPYmpl
Y3RFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKK3sKKyAgICBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKTsKKyAgICBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOworfQorCit2b2lkIEhUTUxPYmplY3RFbGVtZW50
OjpyZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKQoreworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dDo6cmVtb3ZlZEZyb21UcmVlKCk7CisgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVtb3Zl
ZEZyb21UcmVlKGRlZXApOworfQorCitib29sIEhUTUxPYmplY3RFbGVtZW50OjphcHBlbmRGb3Jt
RGF0YShGb3JtRGF0YUxpc3QmLCBib29sKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnRzIHRo
aXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBBdG9taWNTdHJpbmcm
IEhUTUxPYmplY3RFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUoKSBjb25zdAoreworICAgIHJldHVy
biBtX25hbWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiBtX25hbWU7Cit9CisKK2NvbnN0IEF0b21p
Y1N0cmluZyYgSFRNTE9iamVjdEVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZm9ybUNvbnRyb2xUeXBlOworfQorCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTE9iamVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9iamVj
dEVsZW1lbnQuaAkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTMgKzIzLDE3IEBACiAjaWZuZGVmIEhUTUxP
YmplY3RFbGVtZW50X2gKICNkZWZpbmUgSFRNTE9iamVjdEVsZW1lbnRfaAogCisjaW5jbHVkZSAi
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxPYmplY3RFbGVtZW50IDog
cHVibGljIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQgeworY2xhc3MgSFRNTEZvcm1FbGVtZW50Owor
CitjbGFzcyBIVE1MT2JqZWN0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LCBwdWJsaWMgRm9ybUFzc29jaWF0ZWRFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MT2JqZWN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCos
IEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICB2aXJ0dWFsIH5I
VE1MT2JqZWN0RWxlbWVudCgpOwogCiAgICAgYm9vbCBpc0RvY05hbWVkSXRlbSgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jTmFtZWRJdGVtOyB9CiAKQEAgLTQwLDEwICs0NCwzMiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIHVzZUZhbGxiYWNrQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
RmFsbGJhY2tDb250ZW50OyB9CiAgICAgdm9pZCByZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKIAor
ICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQKKyAgICBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0oKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6
OmZvcm0oKTsgfQorCisgICAgdmlydHVhbCBib29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1Db250cm9s
VmFsdWVNYXRjaGVzUmVuZGVyZXIoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JtQ29udHJv
bFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNl
dEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoYik7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBpc0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3QgeyByZXR1cm4gRm9ybUFzc29jaWF0ZWRF
bGVtZW50Ojp3aWxsVmFsaWRhdGUoKTsgfQorCisgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkg
Y29uc3QgeyByZXR1cm4gRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpkaXNhYmxlZCgpOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldERpc2FibGVkKGJvb2wgdmFsdWUpIHsgRm9ybUFzc29jaWF0ZWRFbGVt
ZW50OjpzZXREaXNhYmxlZCh2YWx1ZSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGFi
bGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1E
YXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpOworCisgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNo
YW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2UpOworCisgICAgdXNp
bmcgVHJlZVNoYXJlZDxDb250YWluZXJOb2RlPjo6cmVmOworICAgIHVzaW5nIFRyZWVTaGFyZWQ8
Q29udGFpbmVyTm9kZT46OmRlcmVmOworCiBwcml2YXRlOgotICAgIEhUTUxPYmplY3RFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsK
KyAgICBIVE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBI
VE1MRm9ybUVsZW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGlu
c2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21U
cmVlKGJvb2wgZGVlcCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5k
ZXJTdHlsZSopOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwpAQCAt
NjksNyArOTUsMTYgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIGhhc1ZhbGlkQ2xhc3NJZCgp
OwogCisgICAgdmlydHVhbCB2b2lkIHJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpIHsgcmVmKCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSB7IGRlcmVm
KCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgeyBy
ZXR1cm4gRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7
IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkg
Y29uc3Q7CisKICAgICBBdG9taWNTdHJpbmcgbV9pZDsKKyAgICBBdG9taWNTdHJpbmcgbV9mb3Jt
Q29udHJvbFR5cGU7CiAgICAgU3RyaW5nIG1fY2xhc3NJZDsKICAgICBib29sIG1fZG9jTmFtZWRJ
dGVtIDogMTsKICAgICBib29sIG1fdXNlRmFsbGJhY2tDb250ZW50IDogMTsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxU
YWdOYW1lcy5pbgkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVz
LmluCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIG5vYnIgaW50ZXJmYWNlTmFtZT1I
VE1MRWxlbWVudAogbm9lbWJlZCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBub2ZyYW1lcyBp
bnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBub2xheWVyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1l
bnQKLW9iamVjdCBjb25zdHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyCitvYmplY3QgY29uc3Ry
dWN0b3JOZWVkc0Zvcm1FbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyCiBv
bCBpbnRlcmZhY2VOYW1lPUhUTUxPTGlzdEVsZW1lbnQKIG9wdGdyb3VwIGludGVyZmFjZU5hbWU9
SFRNTE9wdEdyb3VwRWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50CiBvcHRpb24g
Y29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50CkluZGV4OiBXZWJDb3JlL2h0bWwvVmFsaWRhdGlv
bk1lc3NhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2Fn
ZS5jcHAJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUFMV0FZU19JTkxJTkUgVmFsaWRhdGlvbk1lc3NhZ2U6OlZhbGlkYXRpb25NZXNzYWdl
KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCitBTFdBWVNfSU5MSU5FIFZhbGlkYXRp
b25NZXNzYWdlOjpWYWxpZGF0aW9uTWVzc2FnZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1l
bnQpCiAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKIHsKIH0KQEAgLTQ1LDcgKzQ1LDcgQEAgVmFs
aWRhdGlvbk1lc3NhZ2U6On5WYWxpZGF0aW9uTWVzc2FnZSgpCiAgICAgaGlkZU1lc3NhZ2UoKTsK
IH0KIAotUGFzc093blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gVmFsaWRhdGlvbk1lc3NhZ2U6OmNy
ZWF0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQorUGFzc093blB0cjxWYWxpZGF0
aW9uTWVzc2FnZT4gVmFsaWRhdGlvbk1lc3NhZ2U6OmNyZWF0ZShGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWYWxpZGF0aW9uTWVzc2Fn
ZShlbGVtZW50KSk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAkocmV2aXNpb24g
NzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMjAgKzM4LDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRN
TEZvcm1Db250cm9sRWxlbWVudDsKK2NsYXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKIAogY2xh
c3MgVmFsaWRhdGlvbk1lc3NhZ2UgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBjcmVhdGUoSFRNTEZvcm1Db250
cm9sRWxlbWVudCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBj
cmVhdGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CiAgICAgflZhbGlkYXRpb25NZXNzYWdlKCk7
CiAgICAgU3RyaW5nIG1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2U7IH0KICAgICB2
b2lkIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6Ci0gICAgVmFsaWRhdGlv
bk1lc3NhZ2UoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgIFZhbGlkYXRpb25NZXNzYWdl
KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOwogICAgIHZvaWQgaGlkZU1lc3NhZ2UoVGltZXI8VmFs
aWRhdGlvbk1lc3NhZ2U+KiA9IDApOwogCi0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogbV9l
bGVtZW50OworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogbV9lbGVtZW50OwogICAgIFN0cmlu
ZyBtX21lc3NhZ2U7CiAgICAgT3duUHRyPFRpbWVyPFZhbGlkYXRpb25NZXNzYWdlPiA+IG1fdGlt
ZXI7CiB9OwpJbmRleDogV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmNwcAkocmV2aXNpb24gNzMwMDcpCisrKyBX
ZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDIwICs0
MiwyMSBAQCBTdHJpbmcgVmFsaWRpdHlTdGF0ZTo6dmFsaWRhdGlvbk1lc3NhZ2UoCiAKICAgICBp
ZiAoY3VzdG9tRXJyb3IoKSkKICAgICAgICAgcmV0dXJuIG1fY3VzdG9tRXJyb3JNZXNzYWdlOwot
ICAgIGJvb2wgaXNJbnB1dEVsZW1lbnQgPSBtX2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcp
OwotICAgIGJvb2wgaXNUZXh0QXJlYUVsZW1lbnQgPSBtX2NvbnRyb2wtPmhhc1RhZ05hbWUodGV4
dGFyZWFUYWcpOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChtX2Nv
bnRyb2wpOworICAgIGJvb2wgaXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9s
RWxlbWVudCgpICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoaW5wdXRUYWcpOworICAgIGJvb2wgaXNU
ZXh0QXJlYUVsZW1lbnQgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIGVsZW1l
bnQtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpOwogICAgIC8vIFRoZSBvcmRlciBvZiB0aGUgZm9s
bG93aW5nIGNoZWNrcyBpcyBtZWFuaW5nZnVsLiBlLmcuIFdlJ2QgbGlrZSB0byBzaG93IHRoZQog
ICAgIC8vIHZhbHVlTWlzc2luZyBtZXNzYWdlIGV2ZW4gaWYgdGhlIGNvbnRyb2wgaGFzIG90aGVy
IHZhbGlkYXRpb24gZXJyb3JzLgogICAgIGlmICh2YWx1ZU1pc3NpbmcoKSkgewotICAgICAgICBp
ZiAobV9jb250cm9sLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpCisgICAgICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpCiAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1l
c3NhZ2VWYWx1ZU1pc3NpbmdGb3JTZWxlY3RUZXh0KCk7CiAgICAgICAgIGlmIChpc0lucHV0RWxl
bWVudCkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
bV9jb250cm9sKS0+dmFsdWVNaXNzaW5nVGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KS0+dmFsdWVNaXNzaW5nVGV4dCgpOwog
ICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7CiAgICAg
fQogICAgIGlmICh0eXBlTWlzbWF0Y2goKSkgewogICAgICAgICBpZiAoaXNJbnB1dEVsZW1lbnQp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29u
dHJvbCktPnR5cGVNaXNtYXRjaFRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCktPnR5cGVNaXNtYXRjaFRleHQoKTsKICAgICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpOwogICAgIH0KICAg
ICBpZiAocGF0dGVybk1pc21hdGNoKCkpCkBAIC02NSw3ICs2Niw3IEBAIFN0cmluZyBWYWxpZGl0
eVN0YXRlOjp2YWxpZGF0aW9uTWVzc2FnZSgKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQqPihtX2NvbnRyb2wpOworICAgICAgICBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Kj4o
ZWxlbWVudCk7CiAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVRvb0xvbmdUZXh0KG51
bUdyYXBoZW1lQ2x1c3RlcnModGV4dC0+dmFsdWUoKSksIHRleHQtPm1heExlbmd0aCgpKTsKICAg
ICB9CiAgICAgaWYgKHJhbmdlVW5kZXJmbG93KCkpIHsKQEAgLTczLDIxICs3NCwyMSBAQCBTdHJp
bmcgVmFsaWRpdHlTdGF0ZTo6dmFsaWRhdGlvbk1lc3NhZ2UoCiAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZVVuZGVyZmxvd1RleHQoc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCktPm1pbmltdW1TdHJpbmcoKSk7Cisg
ICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlVW5kZXJmbG93VGV4dChzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCktPm1pbmltdW1TdHJpbmcoKSk7CiAgICAg
fQogICAgIGlmIChyYW5nZU92ZXJmbG93KCkpIHsKICAgICAgICAgaWYgKCFpc0lucHV0RWxlbWVu
dCkgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdl
UmFuZ2VPdmVyZmxvd1RleHQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJv
bCktPm1heGltdW1TdHJpbmcoKSk7CisgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVJh
bmdlT3ZlcmZsb3dUZXh0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KS0+
bWF4aW11bVN0cmluZygpKTsKICAgICB9CiAgICAgaWYgKHN0ZXBNaXNtYXRjaCgpKSB7CiAgICAg
ICAgIGlmICghaXNJbnB1dEVsZW1lbnQpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1f
Y29udHJvbCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1l
c3NhZ2VTdGVwTWlzbWF0Y2hUZXh0KGlucHV0LT5zdGVwQmFzZVN0cmluZygpLCBpbnB1dC0+c3Rl
cFN0cmluZygpKTsKICAgICB9CiAKQEAgLTEwMiwxMiArMTAzLDEzIEBAIHZvaWQgVmFsaWRpdHlT
dGF0ZTo6c2V0Q3VzdG9tRXJyb3JNZXNzYWcKIAogYm9vbCBWYWxpZGl0eVN0YXRlOjp2YWx1ZU1p
c3NpbmcoKSBjb25zdAogewotICAgIGlmIChtX2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcp
KSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KG1fY29udHJvbCk7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hU
TUxFbGVtZW50KG1fY29udHJvbCk7CisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaW5wdXRU
YWcpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICByZXR1cm4gaW5wdXQtPnZhbHVlTWlz
c2luZyhpbnB1dC0+dmFsdWUoKSk7CiAgICAgfQotICAgIGlmIChtX2NvbnRyb2wtPmhhc1RhZ05h
bWUodGV4dGFyZWFUYWcpKSB7Ci0gICAgICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRBcmVh
ID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KG1fY29udHJvbCk7CisgICAgaWYg
KGVsZW1lbnQtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKSB7CisgICAgICAgIEhUTUxUZXh0QXJl
YUVsZW1lbnQqIHRleHRBcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KGVs
ZW1lbnQpOwogICAgICAgICByZXR1cm4gdGV4dEFyZWEtPnZhbHVlTWlzc2luZyh0ZXh0QXJlYS0+
dmFsdWUoKSk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTExNSwxNCArMTE3LDE0IEBA
IGJvb2wgVmFsaWRpdHlTdGF0ZTo6dmFsdWVNaXNzaW5nKCkgY29uc3QKIAogYm9vbCBWYWxpZGl0
eVN0YXRlOjp0eXBlTWlzbWF0Y2goKSBjb25zdAogewotICAgIGlmICghbV9jb250cm9sLT5oYXNU
YWdOYW1lKGlucHV0VGFnKSkKKyAgICBpZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFz
VGFnTmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCktPnR5cGVNaXNtYXRjaCgpOwog
fQogCiBib29sIFZhbGlkaXR5U3RhdGU6OnBhdHRlcm5NaXNtYXRjaCgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgIGlmICghdG9IVE1MRWxl
bWVudChtX2NvbnRyb2wpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KG1fY29udHJvbCk7CiAgICAgcmV0dXJuIGlucHV0LT5wYXR0ZXJuTWlzbWF0Y2go
aW5wdXQtPnZhbHVlKCkpOwpAQCAtMTMwLDExICsxMzIsMTEgQEAgYm9vbCBWYWxpZGl0eVN0YXRl
OjpwYXR0ZXJuTWlzbWF0Y2goKSBjbwogCiBib29sIFZhbGlkaXR5U3RhdGU6OnRvb0xvbmcoKSBj
b25zdAogewotICAgIGlmIChtX2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAg
aWYgKHRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKICAg
ICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4obV9jb250cm9sKTsKICAgICAgICAgcmV0dXJuIGlucHV0LT50b29Mb25nKGlucHV0LT52
YWx1ZSgpLCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6Q2hlY2tEaXJ0eUZsYWcpOwogICAg
IH0KLSAgICBpZiAobV9jb250cm9sLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgeworICAgIGlm
ICh0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKSB7CiAg
ICAgICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRBcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRl
eHRBcmVhRWxlbWVudCo+KG1fY29udHJvbCk7CiAgICAgICAgIHJldHVybiB0ZXh0QXJlYS0+dG9v
TG9uZyh0ZXh0QXJlYS0+dmFsdWUoKSwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OkNoZWNr
RGlydHlGbGFnKTsKICAgICB9CkBAIC0xNDMsNyArMTQ1LDcgQEAgYm9vbCBWYWxpZGl0eVN0YXRl
Ojp0b29Mb25nKCkgY29uc3QKIAogYm9vbCBWYWxpZGl0eVN0YXRlOjpyYW5nZVVuZGVyZmxvdygp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAg
IGlmICghdG9IVE1MRWxlbWVudChtX2NvbnRyb2wpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCk7CiAgICAgcmV0dXJuIGlucHV0LT5y
YW5nZVVuZGVyZmxvdyhpbnB1dC0+dmFsdWUoKSk7CkBAIC0xNTEsNyArMTUzLDcgQEAgYm9vbCBW
YWxpZGl0eVN0YXRlOjpyYW5nZVVuZGVyZmxvdygpIGNvbgogCiBib29sIFZhbGlkaXR5U3RhdGU6
OnJhbmdlT3ZlcmZsb3coKSBjb25zdAogewotICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdOYW1l
KGlucHV0VGFnKSkKKyAgICBpZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFt
ZShpbnB1dFRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVtZW50
KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAg
IHJldHVybiBpbnB1dC0+cmFuZ2VPdmVyZmxvdyhpbnB1dC0+dmFsdWUoKSk7CkBAIC0xNTksNyAr
MTYxLDcgQEAgYm9vbCBWYWxpZGl0eVN0YXRlOjpyYW5nZU92ZXJmbG93KCkgY29ucwogCiBib29s
IFZhbGlkaXR5U3RhdGU6OnN0ZXBNaXNtYXRjaCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NvbnRy
b2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgIGlmICghdG9IVE1MRWxlbWVudChtX2NvbnRy
b2wpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1f
Y29udHJvbCk7CiAgICAgcmV0dXJuIGlucHV0LT5zdGVwTWlzbWF0Y2goaW5wdXQtPnZhbHVlKCkp
OwpJbmRleDogV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5oCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvaHRt
bC9WYWxpZGl0eVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE0ICsyNCwxNCBAQAogI2lm
bmRlZiBWYWxpZGl0eVN0YXRlX2gKICNkZWZpbmUgVmFsaWRpdHlTdGF0ZV9oCiAKLSNpbmNsdWRl
ICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBWYWxpZGl0eVN0YXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxWYWxpZGl0eVN0YXRlPiBjcmVhdGUoSFRNTEZvcm1Db250
cm9sRWxlbWVudCogY29udHJvbCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxWYWxpZGl0eVN0YXRl
PiBjcmVhdGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBjb250cm9sKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBWYWxpZGl0eVN0YXRlKGNvbnRyb2wpKTsKICAgICB9CkBAIC01
NCwxMiArNTQsMTIgQEAgcHVibGljOgogICAgIGJvb2wgdmFsaWQoKSBjb25zdDsKIAogcHJpdmF0
ZToKLSAgICBWYWxpZGl0eVN0YXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wpIDog
bV9jb250cm9sKGNvbnRyb2wpIHsgfQorICAgIFZhbGlkaXR5U3RhdGUoRm9ybUFzc29jaWF0ZWRF
bGVtZW50KiBjb250cm9sKSA6IG1fY29udHJvbChjb250cm9sKSB7IH0KIAogICAgIHN0YXRpYyBi
b29sIGlzVmFsaWRDb2xvclN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkRW1haWxBZGRyZXNzKGNvbnN0IFN0cmluZyYpOwogCi0gICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogbV9jb250cm9sOworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogbV9jb250cm9s
OwogICAgIFN0cmluZyBtX2N1c3RvbUVycm9yTWVzc2FnZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9G
b3JtU3VibWlzc2lvbi5jcHAJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9sb2FkZXIvRm9y
bVN1Ym1pc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsMTAgKzE3NSwxMSBAQCBQYXNz
UmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvCiAgICAgVmVjdG9yPHBhaXI8U3Ry
aW5nLCBTdHJpbmc+ID4gZm9ybVZhbHVlczsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKClb
aV07CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogY29udHJvbCA9IGZvcm0tPmFzc29j
aWF0ZWRFbGVtZW50cygpW2ldOwogICAgICAgICBpZiAoIWNvbnRyb2wtPmRpc2FibGVkKCkpCiAg
ICAgICAgICAgICBjb250cm9sLT5hcHBlbmRGb3JtRGF0YSgqZG9tRm9ybURhdGEsIGlzTXVsdGlQ
YXJ0Rm9ybSk7Ci0gICAgICAgIGlmIChjb250cm9sLT5oYXNMb2NhbE5hbWUoaW5wdXRUYWcpKSB7
CisgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChjb250cm9sKTsK
KyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKICAgICAgICAg
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KGNvbnRyb2wpOwogICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7CiAg
ICAgICAgICAgICAgICAgZm9ybVZhbHVlcy5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4oaW5w
dXQtPm5hbWUoKSwgaW5wdXQtPnZhbHVlKCkpKTsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzAwNykKKysr
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MTAtMTEtMzAgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZXQgSFRNTE9iamVjdEVs
ZW1lbnQgYmUgYSBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MjEKKworICAgICAgICBNb2RpZmllZCB0byB1
c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50IGluc3RlYWQgb2YgSFRNTEZvcm1Db250cm9sRWxlbWVu
dC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tOgorICAgICAg
ICAoLVtXZWJIVE1MUmVwcmVzZW50YXRpb24gZWxlbWVudFdpdGhOYW1lOmluRm9ybTpdKTogTW9k
aWZpZWQgdG8gdXNlCisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCBpbnN0ZWFkIG9mIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQuCisgICAgICAgICgtW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBj
b250cm9sc0luRm9ybTpdKTogRGl0dG8uCisKIDIwMTAtMTEtMjkgIERhbiBCZXJuc3RlaW4gIDxt
aXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQkocmV2aXNpb24g
NzMwMDcpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yODUsMTIgKzI4NSwxMiBAQCAtIChET01FbGVtZW50ICopZWxlbWVu
dFdpdGhOYW1lOihOU1N0cmluCiAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IGZv
cm1FbGVtZW50RnJvbURPTUVsZW1lbnQoZm9ybSk7CiAgICAgaWYgKCFmb3JtRWxlbWVudCkKICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKKyAgICBj
b25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1l
bnQtPmFzc29jaWF0ZWRFbGVtZW50cygpOwogICAgIEF0b21pY1N0cmluZyB0YXJnZXROYW1lID0g
bmFtZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWx0ID0gZWxlbWVudHNbaV07Cisg
ICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZWx0ID0gZWxlbWVudHNbaV07CiAgICAgICAg
IGlmIChlbHQtPm5hbWUoKSA9PSB0YXJnZXROYW1lKQotICAgICAgICAgICAgcmV0dXJuIGtpdChl
bHQpOworICAgICAgICAgICAgcmV0dXJuIGtpdCh0b0hUTUxFbGVtZW50KGVsdCkpOwogICAgIH0K
ICAgICByZXR1cm4gbmlsOwogfQpAQCAtMzMzLDEwICszMzMsMTAgQEAgLSAoTlNBcnJheSAqKWNv
bnRyb2xzSW5Gb3JtOihET01FbGVtZW50IAogICAgIGlmICghZm9ybUVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBuaWw7CiAgICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdHMgPSBuaWw7Ci0gICAgY29u
c3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVu
dC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5hc3NvY2lhdGVkRWxlbWVudHMoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyBpKyspIHsKICAg
ICAgICAgaWYgKGVsZW1lbnRzW2ldLT5pc0VudW1lcmF0YWJsZSgpKSB7IC8vIFNraXAgb3B0aW9u
IGVsZW1lbnRzLCBvdGhlciBkdWRzCi0gICAgICAgICAgICBET01FbGVtZW50KiBkZSA9IGtpdChl
bGVtZW50c1tpXSk7CisgICAgICAgICAgICBET01FbGVtZW50KiBkZSA9IGtpdCh0b0hUTUxFbGVt
ZW50KGVsZW1lbnRzW2ldKSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdHMpCiAgICAgICAgICAg
ICAgICAgcmVzdWx0cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhPYmplY3Q6ZGVdOwogICAg
ICAgICAgICAgZWxzZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzMwMDcpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0xMS0zMCAgS2Vu
aWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExldCBIVE1MT2JqZWN0RWxlbWVudCBiZSBhIGZv
cm0gYXNzb2NpYXRlZCBlbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00ODgyMQorCisgICAgICAgIEFkZHMgYSB0ZXN0IHRvIGVuc3VyZSB0aGUg
b3JkZXIgb2YgZm9ybS5lbGVtZW50cyBhdHRyaWJ1dGUuCisgICAgICAgIFVwZGF0ZXMgdHdvIHRl
c3RzIHRvIGNoZWNrIHdoZXRoZXIgb2JqZWN0IGVsZW1lbnRzIGFyZSBoYW5kbGVkCisgICAgICAg
IGNvcnJlY3RseSBpbiBmb3JtLmVsZW1lbnRzIGF0dHJpYnV0ZS4KKworICAgICAgICAqIGZhc3Qv
Zm9ybXMvZm9ybS1hdHRyaWJ1dGUtZXhwZWN0ZWQudHh0OiBVcGRhdGVkLgorICAgICAgICAqIGZh
c3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1hdHRy
aWJ1dGUuanM6IFVwZGF0ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9y
bS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNrT3Jk
ZXIpOgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1l
bGVtZW50cy5qczogVXBkYXRlZC4KKwogMjAxMC0xMS0zMCAgUm9iIEJ1aXMgIDxyd2xidWlzQGdt
YWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tYXR0cmlidXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tYXR0cmlidXRlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNzMwMDcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tYXR0cmlidXRlLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCwxNCArNCwxNCBAQCBPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIAogLSBDaGVja3MgdGhlIGV4aXN0ZW5jZSBv
ZiB0aGUgZm9ybSBhdHRyaWJ1dGUgZm9yIGVhY2ggZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzLgot
RklYTUU6IDxsYWJlbD4gYW5kIDxvYmplY3Q+IGRvbid0IHN1cHBvcnQgdGhlIGZvcm0gYXR0cmli
dXRlIGZvciBub3cuCitGSVhNRTogPGxhYmVsPiBkb2Vzbid0IHN1cHBvcnQgdGhlIGZvcm0gYXR0
cmlidXRlIGZvciBub3cuCiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJidXR0
b24iKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJmaWVsZHNldCIpWzBdLmZvcm0gaXMgb3duZXIKIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImlucHV0IilbMF0uZm9ybSBpcyBvd25lcgogUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgia2V5Z2VuIilbMF0uZm9ybSBpcyBvd25lcgogRkFJTCBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgibGFiZWwiKVswXS5mb3JtIHNob3VsZCBiZSBbb2JqZWN0IEhU
TUxGb3JtRWxlbWVudF0uIFdhcyBudWxsLgogUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgibWV0ZXIiKVswXS5mb3JtIGlzIG93bmVyCi1GQUlMIGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJvYmplY3QiKVswXS5mb3JtIHNob3VsZCBiZSBbb2JqZWN0IEhUTUxGb3JtRWxl
bWVudF0uIFdhcyBudWxsLgorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2Jq
ZWN0IilbMF0uZm9ybSBpcyBvd25lcgogUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgib3V0cHV0IilbMF0uZm9ybSBpcyBvd25lcgogUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgicHJvZ3Jlc3MiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKVswXS5mb3JtIGlzIG93bmVyCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVu
dHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MzAwNykKKysrIExheW91dFRlc3RzL2Zhc3QvZm9y
bXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNCw3ICs0LDcgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQog
CiAKIFRoaXMgdGVzdCBkb2VzIG5vdCBhZGQgb2JqZWN0IGVsZW1lbnQgYXMgYSBsaXN0ZWQgZWxl
bWVudC4gU2VwYXJhdGUgdGVzdCB3aWxsIGNvdmVyIHRoYXQuCi1QQVNTIG93bmVyLmVsZW1lbnRz
Lmxlbmd0aCBpcyAyMgorUEFTUyBvd25lci5lbGVtZW50cy5sZW5ndGggaXMgMjMKIFBBU1Mgb3du
ZXIuZWxlbWVudHNbMF0uaWQgaXMgJ2J1dHRvbjEnCiBQQVNTIG93bmVyLmVsZW1lbnRzWzFdLmlk
IGlzICdmaWVsZHNldDEnCiBQQVNTIG93bmVyLmVsZW1lbnRzWzJdLmlkIGlzICdpbnB1dGhpZGRl
bicKQEAgLTI0LDkgKzI0LDEwIEBAIFBBU1Mgb3duZXIuZWxlbWVudHNbMTVdLmlkIGlzICdpbnB1
dHN1Ym0KIFBBU1Mgb3duZXIuZWxlbWVudHNbMTZdLmlkIGlzICdpbnB1dHJlc2V0JwogUEFTUyBv
d25lci5lbGVtZW50c1sxN10uaWQgaXMgJ2lucHV0YnV0dG9uJwogUEFTUyBvd25lci5lbGVtZW50
c1sxOF0uaWQgaXMgJ2tleWdlbjEnCi1QQVNTIG93bmVyLmVsZW1lbnRzWzE5XS5pZCBpcyAnb3V0
cHV0MScKLVBBU1Mgb3duZXIuZWxlbWVudHNbMjBdLmlkIGlzICdzZWxlY3QxJwotUEFTUyBvd25l
ci5lbGVtZW50c1syMV0uaWQgaXMgJ3RleHRhcmVhMScKK1BBU1Mgb3duZXIuZWxlbWVudHNbMTld
LmlkIGlzICdvYmplY3QxJworUEFTUyBvd25lci5lbGVtZW50c1syMF0uaWQgaXMgJ291dHB1dDEn
CitQQVNTIG93bmVyLmVsZW1lbnRzWzIxXS5pZCBpcyAnc2VsZWN0MScKK1BBU1Mgb3duZXIuZWxl
bWVudHNbMjJdLmlkIGlzICd0ZXh0YXJlYTEnCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1j
b2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVj
dGlvbi1lbGVtZW50cy1vcmRlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzEgQEAKK1RoaXMgdGVzdCBleGFtaW5lcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lhdGVkIGVs
ZW1lbnRzIHdoaWNoIGFyZSBjbGFzc2lmaWVkIGFzICdsaXN0ZWQnLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworLSBDaGVja3MgdGhlIG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBl
bGVtZW50cy4KK1BBU1MgY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdl
biwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKSBpcyAiT0siCisKKy0gQ2hlY2tz
IHRoZSBvcmRlciBhZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQuCitQQVNTIGNo
ZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0
LCB0ZXh0YXJlYV0pIGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJPSyIKK1BBU1MgY2hlY2tPcmRl
cihbb2JqZWN0LCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRh
cmVhXSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFtvYmplY3QsIGZpZWxkc2V0LCBpbnB1dCwg
a2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGJ1dHRvbl0pIGlzICJPSyIKKworLSBD
aGVja3MgdGhlIG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50cyB3aXRoIGZvcm0gYXR0
cmlidXRlLgorUEFTUyBjaGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2Vu
LCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJPSyIKKworLSBDaGVja3Mg
dGhlIG9yZGVyIGFmdGVyIHNvbWUgZWxlbWVudHMgcmVtb3ZlZC9pbnNlcnRlZCB3aXRoIGZvcm0g
YXR0cmlidXRlLgorUEFTUyBjaGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5
Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIo
W2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKSBpcyAi
T0siCitQQVNTIGNoZWNrT3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNl
bGVjdF0pIGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4s
IG9iamVjdCwgb3V0cHV0LCBzZWxlY3RdKSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIoW3RleHRh
cmVhLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdF0pIGlz
ICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbdGV4dGFyZWEsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2Vu
LCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCBidXR0b25dKSBpcyAiT0siCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1Rlc3QKKworCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxl
bWVudHMtb3JkZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMv
Zm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tYXR0cmlidXRlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tYXR0cmlidXRlLmpzCShyZXZp
c2lvbiA3MzAwNykKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0t
YXR0cmlidXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQCB2YXIgY29udGFpbmVy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnCiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNv
bnRhaW5lcik7CiAKIGRlYnVnKCctIENoZWNrcyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmb3JtIGF0
dHJpYnV0ZSBmb3IgZWFjaCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMuJyk7Ci1kZWJ1ZygnRklY
TUU6ICZsdDtsYWJlbCZndDsgYW5kICZsdDtvYmplY3QmZ3Q7IGRvblwndCBzdXBwb3J0IHRoZSBm
b3JtIGF0dHJpYnV0ZSBmb3Igbm93LicpOworZGVidWcoJ0ZJWE1FOiAmbHQ7bGFiZWwmZ3Q7IGRv
ZXNuXCd0IHN1cHBvcnQgdGhlIGZvcm0gYXR0cmlidXRlIGZvciBub3cuJyk7CiBjb250YWluZXIu
aW5uZXJIVE1MID0gJzxmb3JtIGlkPW93bmVyPjwvZm9ybT4nICsKICAgICAnPGJ1dHRvbiBuYW1l
PXZpY3RpbSBmb3JtPW93bmVyIC8+JyArCiAgICAgJzxmaWVsZHNldCBuYW1lPXZpY3RpbSBmb3Jt
PW93bmVyIC8+JyArCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9m
b3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVy
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMv
Zm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwMCBAQAorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBleGFtaW5lcyB0aGUgb3JkZXIgb2YgZm9y
bSBhc3NvY2lhdGVkIGVsZW1lbnRzIHdoaWNoIGFyZSBjbGFzc2lmaWVkIGFzICdsaXN0ZWQnLiIp
OworCit2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Citkb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7Cit2YXIgb3duZXI7CisKK2Z1bmN0aW9u
IGNoZWNrT3JkZXIodmljdGltcykgeworICAgIGlmIChvd25lci5lbGVtZW50cy5sZW5ndGggIT0g
dmljdGltcy5sZW5ndGgpCisgICAgICAgIHJldHVybiAnbGVuZ3RoIG1pc21hdGNoLCBlbGVtZW50
cy5sZW5ndGggPSAnICsgb3duZXIuZWxlbWVudHMubGVuZ3RoICsKKyAgICAgICAgICAgICAgICcs
IGV4cGVjdGVkIGxlbmd0aCA9ICcgKyB2aWN0aW1zLmxlbmd0aDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHZpY3RpbXMubGVuZ3RoOyArK2kpCisgICAgICAgIGlmIChvd25lci5lbGVtZW50c1tp
XSAhPSB2aWN0aW1zW2ldKQorICAgICAgICAgICAgcmV0dXJuICdlbGVtZW50IG1pc21hdGNoIGF0
IGluZGV4ICcgKyBpOworICAgIHJldHVybiAnT0snOworfQorCitkZWJ1ZygnLSBDaGVja3MgdGhl
IG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50cy4nKTsKK2NvbnRhaW5lci5pbm5lckhU
TUwgPSAnPGZvcm0gaWQ9b3duZXI+JyArCisgICAgJzxidXR0b24gbmFtZT12aWN0aW0+PC9idXR0
b24+JyArCisgICAgJzxmaWVsZHNldCBuYW1lPXZpY3RpbT5UZXN0PC9maWVsZHNldD4nICsKKyAg
ICAnPGlucHV0IG5hbWU9dmljdGltLz4nICsKKyAgICAnPGtleWdlbiBuYW1lPXZpY3RpbT48L2tl
eWdlbj4nICsKKyAgICAnPGxhYmVsIG5hbWU9dmljdGltPjwvbGFiZWw+JyArCisgICAgJzxtZXRl
ciBuYW1lPXZpY3RpbT48L21ldGVyPicgKworICAgICc8b2JqZWN0IG5hbWU9dmljdGltPjwvb2Jq
ZWN0PicgKworICAgICc8b3V0cHV0IG5hbWU9dmljdGltPjwvb3V0cHV0PicgKworICAgICc8cHJv
Z3Jlc3MgbmFtZT12aWN0aW0+PC9wcm9ncmVzcz4nICsKKyAgICAnPHNlbGVjdCBuYW1lPXZpY3Rp
bT48L3NlbGVjdD4nICsKKyAgICAnPHRleHRhcmVhIG5hbWU9dmljdGltPjwvdGV4dGFyZWE+JysK
KyAgICAnPC9mb3JtPic7Citvd25lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvd25lcicp
OwordmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVsw
XTsKK3ZhciBmaWVsZHNldCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmaWVsZHNl
dCcpWzBdOwordmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0
JylbMF07Cit2YXIga2V5Z2VuID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tleWdl
bicpWzBdOwordmFyIGxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xhYmVs
JylbMF07Cit2YXIgbWV0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbWV0ZXIn
KVswXTsKK3ZhciBvYmplY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0
JylbMF07Cit2YXIgb3V0cHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ291dHB1
dCcpWzBdOwordmFyIHByb2dyZXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3By
b2dyZXNzJylbMF07Cit2YXIgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J3NlbGVjdCcpWzBdOwordmFyIHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ3RleHRhcmVhJylbMF07CitzaG91bGRCZSgnY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNl
dCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKScsICci
T0siJyk7CisKK2RlYnVnKCcnKTsKK2RlYnVnKCctIENoZWNrcyB0aGUgb3JkZXIgYWZ0ZXIgc29t
ZSBlbGVtZW50cyByZW1vdmVkL2luc2VydGVkLicpOworb3duZXIucmVtb3ZlQ2hpbGQob2JqZWN0
KTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2Vu
LCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKScsICciT0siJyk7Citvd25lci5yZW1vdmVDaGls
ZChidXR0b24pOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2Vu
LCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKScsICciT0siJyk7Citvd25lci5pbnNlcnRCZWZv
cmUob2JqZWN0LCBmaWVsZHNldCk7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbb2JqZWN0LCBmaWVs
ZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSknLCAnIk9LIicp
Oworb3duZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtvYmpl
Y3QsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGJ1
dHRvbl0pJywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWcoJy0gQ2hlY2tzIHRoZSBvcmRl
ciBvZiBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudHMgd2l0aCBmb3JtIGF0dHJpYnV0ZS4nKTsKK2Nv
bnRhaW5lci5pbm5lckhUTUwgPSAnPGJ1dHRvbiBuYW1lPXZpY3RpbSBmb3JtPW93bmVyPjwvYnV0
dG9uPicgKworICAgICc8ZmllbGRzZXQgbmFtZT12aWN0aW0gZm9ybT1vd25lcj5UZXN0PC9maWVs
ZHNldD4nICsKKyAgICAnPGlucHV0IG5hbWU9dmljdGltIGZvcm09b3duZXIvPicgKworICAgICc8
a2V5Z2VuIG5hbWU9dmljdGltIGZvcm09b3duZXI+PC9rZXlnZW4+JyArCisgICAgJzxmb3JtIGlk
PW93bmVyPicgKworICAgICc8bGFiZWwgbmFtZT12aWN0aW0+PC9sYWJlbD4nICsKKyAgICAnPG1l
dGVyIG5hbWU9dmljdGltPjwvbWV0ZXI+JyArCisgICAgJzxvYmplY3QgbmFtZT12aWN0aW0+PC9v
YmplY3Q+JyArCisgICAgJzwvZm9ybT4nICsKKyAgICAnPG91dHB1dCBuYW1lPXZpY3RpbSBmb3Jt
PW93bmVyPjwvb3V0cHV0PicgKworICAgICc8cHJvZ3Jlc3MgbmFtZT12aWN0aW0gZm9ybT1vd25l
cj48L3Byb2dyZXNzPicgKworICAgICc8c2VsZWN0IG5hbWU9dmljdGltIGZvcm09b3duZXI+PC9z
ZWxlY3Q+JyArCisgICAgJzx0ZXh0YXJlYSBuYW1lPXZpY3RpbSBmb3JtPW93bmVyPjwvdGV4dGFy
ZWE+JzsKK293bmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyJyk7CitidXR0b24g
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMF07CitmaWVsZHNldCA9
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmaWVsZHNldCcpWzBdOworaW5wdXQgPSBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXTsKK2tleWdlbiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXlnZW4nKVswXTsKK2xhYmVsID0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xhYmVsJylbMF07CittZXRlciA9IGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCdtZXRlcicpWzBdOworb2JqZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ29iamVjdCcpWzBdOworb3V0cHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ291dHB1dCcpWzBdOworcHJvZ3Jlc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgncHJvZ3Jlc3MnKVswXTsKK3NlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCdzZWxlY3QnKVswXTsKK3RleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJ3RleHRhcmVhJylbMF07CitzaG91bGRCZSgnY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVs
ZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKScs
ICciT0siJyk7CisKK2RlYnVnKCcnKTsKK2RlYnVnKCctIENoZWNrcyB0aGUgb3JkZXIgYWZ0ZXIg
c29tZSBlbGVtZW50cyByZW1vdmVkL2luc2VydGVkIHdpdGggZm9ybSBhdHRyaWJ1dGUuJyk7Citv
d25lci5yZW1vdmVDaGlsZChvYmplY3QpOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2J1dHRvbiwg
ZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJP
SyInKTsKK2NvbnRhaW5lci5yZW1vdmVDaGlsZChidXR0b24pOworc2hvdWxkQmUoJ2NoZWNrT3Jk
ZXIoW2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKScs
ICciT0siJyk7Citjb250YWluZXIucmVtb3ZlQ2hpbGQodGV4dGFyZWEpOworc2hvdWxkQmUoJ2No
ZWNrT3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdF0pJywgJyJP
SyInKTsKK293bmVyLmFwcGVuZENoaWxkKG9iamVjdCk7CitzaG91bGRCZSgnY2hlY2tPcmRlcihb
ZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3RdKScsICciT0si
Jyk7Citjb250YWluZXIuaW5zZXJ0QmVmb3JlKHRleHRhcmVhLCBmaWVsZHNldCk7CitzaG91bGRC
ZSgnY2hlY2tPcmRlcihbdGV4dGFyZWEsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3Qs
IG91dHB1dCwgc2VsZWN0XSknLCAnIk9LIicpOworY29udGFpbmVyLmFwcGVuZENoaWxkKGJ1dHRv
bik7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbdGV4dGFyZWEsIGZpZWxkc2V0LCBpbnB1dCwga2V5
Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCBidXR0b25dKScsICciT0siJyk7CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9z
Y3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50
cy5qcwkocmV2aXNpb24gNzMwMDcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10
ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8Zm9ybSBpZD0iZm9ybTEiPgogICAgICc8
a2V5Z2VuIGlkPWtleWdlbjE+PC9rZXlnZW4+JyArCiAgICAgJzxsYWJlbCBpZD1sYWJlbDE+PC9s
YWJlbD4nICsKICAgICAnPG1ldGVyIGlkPW1ldGVyMT48L21ldGVyPicgKworICAgICc8b2JqZWN0
IGlkPW9iamVjdDE+PC9vYmplY3Q+JyArCiAgICAgJzxvdXRwdXQgaWQ9b3V0cHV0MT48L291dHB1
dD4nICsKICAgICAnPHByb2dyZXNzIGlkPXByb2dyZXNzMT48L3Byb2dyZXNzPicgKwogICAgICc8
c2VsZWN0IGlkPXNlbGVjdDE+JyArCkBAIC0zOCw3ICszOSw3IEBAIGNvbnRhaW5lci5pbm5lckhU
TUwgPSAnPGZvcm0gaWQ9ImZvcm0xIj4KIAogdmFyIG93bmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2Zvcm0xJyk7CiAKLXNob3VsZEJlKCdvd25lci5lbGVtZW50cy5sZW5ndGgnLCAnMjIn
KTsKK3Nob3VsZEJlKCdvd25lci5lbGVtZW50cy5sZW5ndGgnLCAnMjMnKTsKIHNob3VsZEJlKCdv
d25lci5lbGVtZW50c1swXS5pZCcsICInYnV0dG9uMSciKTsKIHNob3VsZEJlKCdvd25lci5lbGVt
ZW50c1sxXS5pZCcsICInZmllbGRzZXQxJyIpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzJd
LmlkJywgIidpbnB1dGhpZGRlbiciKTsKQEAgLTU4LDkgKzU5LDEwIEBAIHNob3VsZEJlKCdvd25l
ci5lbGVtZW50c1sxNV0uaWQnLCAiJ2lucHUKIHNob3VsZEJlKCdvd25lci5lbGVtZW50c1sxNl0u
aWQnLCAiJ2lucHV0cmVzZXQnIik7CiBzaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMTddLmlkJywg
IidpbnB1dGJ1dHRvbiciKTsKIHNob3VsZEJlKCdvd25lci5lbGVtZW50c1sxOF0uaWQnLCAiJ2tl
eWdlbjEnIik7Ci1zaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMTldLmlkJywgIidvdXRwdXQxJyIp
Owotc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzIwXS5pZCcsICInc2VsZWN0MSciKTsKLXNob3Vs
ZEJlKCdvd25lci5lbGVtZW50c1syMV0uaWQnLCAiJ3RleHRhcmVhMSciKTsKK3Nob3VsZEJlKCdv
d25lci5lbGVtZW50c1sxOV0uaWQnLCAiJ29iamVjdDEnIik7CitzaG91bGRCZSgnb3duZXIuZWxl
bWVudHNbMjBdLmlkJywgIidvdXRwdXQxJyIpOworc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzIx
XS5pZCcsICInc2VsZWN0MSciKTsKK3Nob3VsZEJlKCdvd25lci5lbGVtZW50c1syMl0uaWQnLCAi
J3RleHRhcmVhMSciKTsKIAogCiB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75593</attachid>
            <date>2010-12-03 20:23:24 -0800</date>
            <delta_ts>2010-12-05 22:56:05 -0800</delta_ts>
            <desc>Patch V3</desc>
            <filename>formassocV3.patch</filename>
            <type>text/plain</type>
            <size>171855</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzMyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI4IEBACisyMDEwLTEyLTAzICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTGV0IEhUTUxPYmplY3RFbGVtZW50IGJlIGEgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4ODIxCisKKyAg
ICAgICAgSW50cm9kdWNlcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgY2xhc3Mgd2hpY2ggd291bGQg
YmUgYSBzdXBlciBjbGFzcworICAgICAgICBvZiBmb3JtIGFzc29jYXRlZCBlbGVtZW50cy4gU29t
ZSBvZiBtZW1iZXIgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgb2YKKyAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCBhcmUgbWlncmF0ZWQgaW50byB0aGlzIGNsYXNzLgorICAgICAgICBGb2xs
b3dpbmcgdGhlIEhUTUw1IHNwZWMsIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgY2xhc3MgYW5kCisg
ICAgICAgIEhUTUxPYmplY3RFbGVtZW50IGNsYXNzIGFyZSBzdWJjbGFzc2VzIG9mIGl0IGZvciBu
b3cuCisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMt
b3JkZXIuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazogQWRkZWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmNwcAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogQWRkZWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkZWQgdGhlIHN5bWJvbCBmb3IgdG9IVE1MRWxlbWVudChG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqKQorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8u
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaDogRml4ZWQgY2xhc3MgZm9yd2FyZCBkZWNsYXJhdGlv
biBvcmRlci4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSk6IE1vZGlmaWVk
IHRvCisgICAgICAgIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZXNldEZvcm1FbGVtZW50c093bmVyKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
aDogRGl0dG8uCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OkRPTUZvcm1EYXRhKToKKyAgICAgICAgKiBodG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6IENvcGllZCBhbmQgcmVuYW1lZCBmcm9tIFdlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6fkZvcm1Bc3NvY2lhdGVkRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1Ob1ZhbGlkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6dmFsaWRpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZEZvcm1Pd25lcik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFz
c29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVGcm9tRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlc2V0Rm9ybU93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6dG9IVE1MRWxlbWVudCk6CisgICAgICAgICogaHRtbC9Gb3JtQXNzb2NpYXRlZEVs
ZW1lbnQuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6
OnJlZik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmRlcmVmKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybURlc3Ryb3llZCk6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnNldEZvcm0pOgorICAg
ICAgICAqIGh0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29sbGVjdGlvbjo6aXRlbSk6IE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQKKyAgICAgICAgaW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0aW9uOjpnZXROYW1lZEZvcm1JdGVtKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6
IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6IE1vZGlm
aWVkIHJlZ2FyZGluZyB3aXRoIHRoZSBjaGFuZ2Ugb2YgY2xhc3MKKyAgICAgICAgaGllcmFyY2h5
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250
cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp+
SFRNTEZvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlydHVhbEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaDogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1D
b250cm9sRWxlbWVudDo6cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRlcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToK
KyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6IE1vZGlmaWVkIHRvIHVzZSBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQKKyAgICAgICAgaW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2
ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVyRm9ybUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3JtRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmRlZmF1bHRCdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpjaGVja1ZhbGlkaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y29sbGVjdFVuaGFuZGxlZEludmFsaWRD
b250cm9scyk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmFzc29jaWF0ZWRFbGVtZW50cyk6CisgICAg
ICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVDaGVja2VkUmFkaW9CdXR0b25zKToKKyAgICAgICAg
KiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDogTW9kaWZpZWQgcmVnYXJkaW5nIHdpdGggdGhl
IGNoYW5nZSBvZiBjbGFzcworICAgICAgICBoaWVyYXJjaHkuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MT2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9iamVjdEVsZW1lbnQ6On5IVE1MT2JqZWN0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MT2JqZWN0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmpl
Y3RFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmpl
Y3RFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmpl
Y3RFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVj
dEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RF
bGVtZW50Ojpmb3JtQ29udHJvbE5hbWUpOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1l
bnQuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Zm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6aXNGb3JtQ29udHJvbEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmlzRW51bWVyYXRhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpyZWZGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmRlcmVmRm9y
bUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxUYWdOYW1lcy5pbjogQWRk
ZWQgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50IHRvIG9iamVjdCB0YWcuCisgICAgICAgICog
aHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHA6IE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQKKyAgICAgICAgaW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6VmFsaWRhdGlvbk1lc3NhZ2U6OlZhbGlkYXRpb25NZXNzYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZhbGlkYXRpb25NZXNzYWdlOjpjcmVhdGUpOgorICAgICAgICAqIGh0
bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9WYWxpZGl0eVN0
YXRlLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjp2YWxpZGF0
aW9uTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpzZXRDdXN0b21F
cnJvck1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6dmFsdWVNaXNz
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6OnR5cGVNaXNtYXRjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpwYXR0ZXJuTWlzbWF0Y2gpOgorICAgICAg
ICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6dG9vTG9uZyk6CisgICAgICAgIChXZWJDb3JlOjpW
YWxpZGl0eVN0YXRlOjpyYW5nZVVuZGVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0
eVN0YXRlOjpyYW5nZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6
OnN0ZXBNaXNtYXRjaCk6CisgICAgICAgICogaHRtbC9WYWxpZGl0eVN0YXRlLmg6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlZhbGlkaXR5U3RhdGU6OlZhbGlkaXR5U3RhdGUpOgorICAgICAgICAqIGxvYWRlci9Gb3Jt
U3VibWlzc2lvbi5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1pc3Npb246
OmNyZWF0ZSk6CisKIDIwMTAtMTItMDMgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNv
cmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9u
IDczMDA3KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNiAr
Mjc3LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJaHRtbC9E
YXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcCBcCiAJaHRtbC9FbWFpbElucHV0VHlwZS5jcHAgXAog
CWh0bWwvRmlsZUlucHV0VHlwZS5jcHAgXAorCWh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNw
cCBcCiAJaHRtbC9Gb3JtRGF0YUxpc3QuY3BwIFwKIAlodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNw
cCBcCiAJaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgXApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA3MzAw
NykKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk4NCw2ICs5
ODQsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9FbWFpbElucHV0VHlwZS5jcHAK
ICAgICBodG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAogICAgIGh0bWwvRmlsZUlucHV0VHlw
ZS5jcHAKKyAgICBodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKICAgICBodG1sL0Zvcm1E
YXRhTGlzdC5jcHAKICAgICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAogICAgIGh0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTU3Nyw2ICsxNTc3LDggQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuaCBcCiAJV2Vi
Q29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwIFwKIAlXZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlw
ZS5oIFwKKwlXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBcCisJV2ViQ29y
ZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIFwKIAlXZWJDb3JlL2h0bWwvRm9ybURhdGFM
aXN0LmNwcCBcCiAJV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIFwKIAlXZWJDb3JlL2h0bWwv
RlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzMwMDcpCisr
KyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNiArMjk0LDcg
QEAgX19aTjdXZWJDb3JlMTNLZXlib2FyZEV2ZW50QzFFUktOM1dURjEyQQogX19aTjdXZWJDb3Jl
MTNUeXBpbmdDb21tYW5kMzlpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRF
UE5TXzhEb2N1bWVudEUKIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1N0
YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTEzdG9E
ZXZpY2VTcGFjZUVSS05TXzlGbG9hdFJlY3RFUDhOU1dpbmRvdworX19aTjdXZWJDb3JlMTN0b0hU
TUxFbGVtZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9fWk43V2ViQ29yZTEzdG9K
U0RPTVdpbmRvd0VOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTEy
cmVtb3ZlQ2xpZW50RVBOU18yMENhY2hlZFJlc291cmNlQ2xpZW50RQogX19aTjdXZWJDb3JlMTRD
YWNoZWRSZXNvdXJjZTlhZGRDbGllbnRFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRFCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lw
aQkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5
KQpAQCAtMTYxOCw2ICsxNjE4LDggQEAKICAgICAgICAgICAgICdodG1sL0ZUUERpcmVjdG9yeURv
Y3VtZW50LmgnLAogICAgICAgICAgICAgJ2h0bWwvRmlsZUlucHV0VHlwZS5jcHAnLAogICAgICAg
ICAgICAgJ2h0bWwvRmlsZUlucHV0VHlwZS5oJywKKyAgICAgICAgICAgICdodG1sL0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmgnLAogICAgICAgICAgICAgJ2h0bWwvRm9ybURhdGFMaXN0LmNwcCcsCiAgICAgICAgICAg
ICAnaHRtbC9Gb3JtRGF0YUxpc3QuaCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MQWxsQ29sbGVj
dGlvbi5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTg3OSw2ICs4NzksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBodG1s
L0VtYWlsSW5wdXRUeXBlLmNwcCBcCiAgICAgaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAg
XAogICAgIGh0bWwvRmlsZUlucHV0VHlwZS5jcHAgXAorICAgIGh0bWwvRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmNwcCBcCiAgICAgaHRtbC9Gb3JtRGF0YUxpc3QuY3BwIFwKICAgICBodG1sL0hUTUxB
bGxDb2xsZWN0aW9uLmNwcCBcCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAgXApAQCAt
MTc4OSw2ICsxNzkwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaHRtbC9ET01Gb3JtRGF0YS5oIFwK
ICAgICBodG1sL0RPTVNldHRhYmxlVG9rZW5MaXN0LmggXAogICAgIGh0bWwvRE9NVG9rZW5MaXN0
LmggXAorICAgIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggXAogICAgIGh0bWwvRm9ybURh
dGFMaXN0LmggXAogICAgIGh0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCBcCiAgICAgaHRtbC9I
VE1MQWxsQ29sbGVjdGlvbi5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDE0Myw2ICs1MDE0MywxNCBAQAogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxodG1sXEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxGb3JtRGF0
YUxpc3QuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU5LDYg
KzExNTksOCBAQAogCQk0OUZGQkYxRDExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0
M0RNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi87IH07
CiAJCTQ5RkZCRjNGMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZGQkYzRDExQzkzRUUzMDA2QTcx
MTggLyogV2ViR0xMYXllci5oICovOyB9OwogCQk0OUZGQkY0MDExQzkzRUUzMDA2QTcxMTggLyog
V2ViR0xMYXllci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5RkZCRjNFMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tICovOyB9OworCQk0
QTBEQTJGRTEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBMERBMkZDMTI5QjI0
MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwICovOyB9OworCQk0QTBEQTJG
RjEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTBEQTJGRDEyOUIyNDE5MDBBQjYx
RTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEE4Qzk2RUIwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVj
dGlvbkNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QThDOTZFQTBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxl
ck1hYy5tbSAqLzsgfTsKIAkJNEFDQkMwQkUxMjcxM0NCRDAwOTRGOUIyIC8qIENsYXNzTGlzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUNCQzBC
QzEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCAqLzsgfTsKIAkJNEFDQkMwQkYxMjcx
M0NCRDAwOTRGOUIyIC8qIENsYXNzTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEFDQkMwQkQxMjcxM0NCRDAwOTRGOUIyIC8qIENsYXNzTGlzdC5o
ICovOyB9OwpAQCAtNzI5OCw2ICs3MzAwLDggQEAKIAkJNDlGRkJGMUMxMUM4NTUwRTAwNkE3MTE4
IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ5RkZCRjNEMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTExheWVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QTBEQTJGQzEyOUIyNDE5MDBBQjYxRTEgLyog
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTRBMERBMkZEMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybUFzc29jaWF0ZWRFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBOEM5NkVBMEJFNjkwMzIwMDRFRUZG
MCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW07IHBhdGggPSBtYWMvU2Vs
ZWN0aW9uQ29udHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEFD
QkMwQkMxMjcxM0NCRDAwOTRGOUIyIC8qIENsYXNzTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDbGFzc0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0QUNCQzBCRDEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsYXNzTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTQ3ODgsNiArMTQ3OTIsOCBAQAogCQkJCUY1NUIzRDg4MTI1MUYxMkQwMDNF
RjI2OSAvKiBFbWFpbElucHV0VHlwZS5oICovLAogCQkJCUY1NUIzRDg5MTI1MUYxMkQwMDNFRjI2
OSAvKiBGaWxlSW5wdXRUeXBlLmNwcCAqLywKIAkJCQlGNTVCM0Q4QTEyNTFGMTJEMDAzRUYyNjkg
LyogRmlsZUlucHV0VHlwZS5oICovLAorCQkJCTRBMERBMkZDMTI5QjI0MTkwMEFCNjFFMSAvKiBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwICovLAorCQkJCTRBMERBMkZEMTI5QjI0MTkwMEFCNjFF
MSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCAqLywKIAkJCQlBODEzNkQzNzA5NzNBOEU3MDBE
NzQ0NjMgLyogRm9ybURhdGFMaXN0LmNwcCAqLywKIAkJCQlBODEzNkQzNjA5NzNBOEU3MDBENzQ0
NjMgLyogRm9ybURhdGFMaXN0LmggKi8sCiAJCQkJOTcyMDVBQUQxMjM5MjhDQTAwQjE3MzgwIC8q
IEZUUERpcmVjdG9yeURvY3VtZW50LmNwcCAqLywKQEAgLTE1ODc1LDkgKzE1ODgxLDkgQEAKIAkJ
CQlBOEQwNUZBOTBBMjNCMzBGMDA1RTcyMDMgLyogSlNDU1NWYWx1ZUxpc3QuY3BwICovLAogCQkJ
CUE4RDA1RkFBMEEyM0IzMEYwMDVFNzIwMyAvKiBKU0NTU1ZhbHVlTGlzdC5oICovLAogCQkJCUJD
M0MzOUI0MEMwRDNEOEQwMDVGNEQ3QSAvKiBKU01lZGlhTGlzdC5jcHAgKi8sCisJCQkJQkMzQzM5
QjUwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVkaWFMaXN0LmggKi8sCiAJCQkJRDNBOTRBNDIxMjJE
QzQwRjAwQTM3QkJDIC8qIEpTTWVkaWFRdWVyeUxpc3QuY3BwICovLAogCQkJCUQzQTk0QTQzMTIy
REM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlMaXN0LmggKi8sCi0JCQkJQkMzQzM5QjUwQzBE
M0Q4RDAwNUY0RDdBIC8qIEpTTWVkaWFMaXN0LmggKi8sCiAJCQkJQkNGRTJGMEYwQzFCNTgzNzAw
MjAyMzVGIC8qIEpTUmVjdC5jcHAgKi8sCiAJCQkJQkNGRTJGMTAwQzFCNTgzNzAwMjAyMzVGIC8q
IEpTUmVjdC5oICovLAogCQkJCUJDNzREQTQ2MTAxM0Y0NjgwMDc5ODdBRCAvKiBKU1JHQkNvbG9y
LmNwcCAqLywKQEAgLTE2NzQzLDYgKzE2NzQ5LDcgQEAKIAkJCQlCMjc1MzUzRjBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRTaXplLmggKi8sCiAJCQkJQjJDM0RBNEYwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnQuY3BwICovLAogCQkJCUIyQzNEQTUwMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggKi8s
CisJCQkJQkNCOTJENEUxMjkzNTUwQjAwQzgzODdGIC8qIEZvbnRCYXNlbGluZS5oICovLAogCQkJ
CUIyQzNEQTUxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuY3BwICovLAogCQkJCUIyQzNE
QTUyMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCAqLywKIAkJCQkzNzFGNEYzRjBEMjVC
OUFGMDBFQ0UwRDUgLyogRm9udERhdGEuY3BwICovLApAQCAtMTY3NTQsNyArMTY3NjEsNiBAQAog
CQkJCUIyQzNEQTU4MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250RmFtaWx5LmNwcCAqLywKIAkJCQlC
MkMzREE1OTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udEZhbWlseS5oICovLAogCQkJCTcyNjI2RTAx
MEVGMDIyRkUwMEEwN0UyMCAvKiBGb250RmFzdFBhdGguY3BwICovLAotCQkJCUJDQjkyRDRFMTI5
MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCAqLywKIAkJCQlGN0EwMzRDMzEyNkJGNkJF
MDA3REMxOUUgLyogRm9udE9yaWVudGF0aW9uLmggKi8sCiAJCQkJMzdBQ0NFNDEwREEyOTgwRjAw
ODlFNjAyIC8qIEZvbnRSZW5kZXJpbmdNb2RlLmggKi8sCiAJCQkJQjJDM0RBNUEwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnRTZWxlY3Rvci5oICovLApAQCAtMTc4ODQsOCArMTc4OTAsOCBAQAogCQkJ
CUQzQTk0QTMxMTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdC5jcHAgKi8sCiAJCQkJ
RDNBOTRBMzIxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmggKi8sCiAJCQkJRDNB
OTRBMzMxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmlkbCAqLywKLQkJCQlEM0E5
NEEzNDEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oICovLAogCQkJ
CUQzNDA2MjlBMTI1M0JDOEMwMDlFNDI1OSAvKiBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCAq
LywKKwkJCQlEM0E5NEEzNDEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5oICovLAogCQkJCUQzQTk0QTM1MTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmlkbCAqLywKIAkJCQlEM0FBMTBGMTEyM0E5OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVy
eU1hdGNoZXIuY3BwICovLAogCQkJCUQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1
ZXJ5TWF0Y2hlci5oICovLApAQCAtMTg4MTAsNiArMTg4MTYsNyBAQAogCQkJCUJDQkNBRTM3MEZG
MTkzODUwMDA3NjJBRSAvKiBEYXRhR3JpZERhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMjI3NDZGMEU4MzY2NDUwMEU3Rjk3NSAvKiBEYXRhUmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzY0NjQxQzExRDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMkU5N0NDRUIxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNUQzQTU3RDEwNkI4M0IzMDA1NDUyOTcgLyogRGF0ZUNvbXBvbmVu
dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREI2MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRl
SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCODEyNTFGMTJEMDAzRUYyNjkg
LyogRGF0ZVRpbWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTk2OTEsNiArMTk2OTgs
OCBAQAogCQkJCTk3NkQ2QzhFMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NzZENkM4RjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZFRhc2su
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2QzkxMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlV3Jp
dGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NkJDNzI0RjEyOUIxMDRDMDA3MUMwN0UgLyogRmls
ZVdyaXRlckJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ2QkM3MjUwMTI5QjEwNEMwMDcxQzA3
RSAvKiBGaWxlV3JpdGVyQmFzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTNDNDdB
ODEyMzg5MDhCMDAyQjNEODYgLyogRmlsZVdyaXRlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0NjcwMEVEMTEyN0I5NkNCMDBGNUQ1RDYgLyogRmlsZVdyaXRlclN5bmMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNUVCNjlGMEU4MURBRUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTk3MDksNiArMTk3MTgsNyBAQAogCQkJCTE0OTkzQkU2MEIyRjJCMUMw
MDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2MjI4Nzg0
MEI0REIzMjIwMDBDMzRERiAvKiBGb2N1c0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUJD
QjkyRDRGMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyQzNEQTYzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyQUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzFGNEY0MDBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERh
dGEuaCBpbiBIZWFkZXJzICovLApAQCAtMTk3MjQsNiArMTk3MzQsNyBAQAogCQkJCTM3ODRDMzRC
MEUxMUFBMzQwMDdEOEQ0OCAvKiBGb250VHJhaXRzTWFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjczNEIxODMxMTlCOTkxRDAwNjU4N0JEIC8qIEZvbnRUcmFuc2NvZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODBFNkNFRDBBMTk4OUNBMDA3RkI4QzUgLyogRm9udFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk0QTBEQTJGRjEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEMDVDRUQyQTBBNDBCQjJDMDBDNUFGMzggLyogRm9y
bWF0QmxvY2tDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3MDBDRTkyM0ExMDA3
RUYzQ0QgLyogRm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NUI5MkJCMEVGREU3M0Qw
MEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjAwNTQsNiAr
MjAwNjUsNyBAQAogCQkJCUJDNzdEMTZBMEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29s
dW1uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3RDE2QzBGRjE5RjU2MDA3MDg4N0IgLyogSlNE
YXRhR3JpZENvbHVtbkxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkNBRTNEMEZGMTkzOTkw
MDA3NjJBRSAvKiBKU0RhdGFHcmlkRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkU5
N0NFNzAxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDNTNEQUMyMTE0MzJFRUUwMDBEODE3RSAvKiBKU0RlYnVnV3JhcHBlclNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2Vy
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFGQjFBNjYxMjBBNUQzRjAwREMwMkEwIC8q
IEpTRGV2aWNlTW90aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjAxMjUsNiArMjAxMzcs
NyBAQAogCQkJCUJDOTdFNDEzMTA5MTU0RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBMkRGMDBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1M
QW5jaG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTJERjIwQTFCODUyQTAwQzgw
N0Y4IC8qIEpTSFRNTEFwcGxldEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQUQxNDFF
MTI5NUVBNEYwMEFDQTk4OSAvKiBKU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUUyQUExRjBBMUNEQUI0MDBCNDJCMjUgLyogSlNIVE1MQXJlYUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxNDM4MENENjg5QzUwMEZBREE3NSAvKiBKU0hUTUxB
dWRpb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3QjExMEExOUQ2MDYwMDdGQjhD
NSAvKiBKU0hUTUxCYXNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDE0Nyw2ICsyMDE2
MCw3IEBACiAJCQkJMUE0OTRCRkIwQTEyMkY0NDAwRkRBRkMxIC8qIEpTSFRNTEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzOEU2NUYxMDlGMDk4NDAwMDhBNDhFQyAvKiBKU0hUTUxFbGVt
ZW50V3JhcHBlckZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkQ0NEVEMEMwN0YyRUQw
MDcyRDJDOSAvKiBKU0hUTUxFbWJlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQUQx
NDIxMTI5NUVBNkIwMEFDQTk4OSAvKiBKU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBRTJBQTI3MEExQ0RBQjQwMEI0MkIyNSAvKiBKU0hUTUxGaWVsZFNldEVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTJBQTI5MEExQ0RBQjQwMEI0MkIyNSAvKiBK
U0hUTUxGb250RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThEMDY0RkMwQTIzQzBDQzAw
NUU3MjAzIC8qIEpTSFRNTEZvcm1FbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIwMTU5LDYg
KzIwMTczLDcgQEAKIAkJCQlCQzQ5MThDOTBCRkVBMDUwMDA5RDYzMTYgLyogSlNIVE1MSUZyYW1l
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFBOTgwQTFDREQyRDAwQjQyQjI1IC8q
IEpTSFRNTEltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTdFOTcwQTFBODNF
MzAwN0ZCOEM1IC8qIEpTSFRNTElucHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFB
RDE0MjMxMjk1RUE3RjAwQUNBOTg5IC8qIEpTSFRNTElucHV0RWxlbWVudEN1c3RvbS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFFMkFBOUEwQTFDREQyRDAwQjQyQjI1IC8qIEpTSFRNTElzSW5kZXhF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUIyMjBBMUNFNjNCMDBCNDJCMjUgLyog
SlNIVE1MTGFiZWxFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUyQUIyNDBBMUNFNjNC
MDBCNDJCMjUgLyogSlNIVE1MTGVnZW5kRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMDE3
Miw2ICsyMDE4Nyw3IEBACiAJCQkJQTdCQkUyNjcxMUFGQjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1l
dGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMkFCMkEwQTFDRTYzQjAwQjQyQjI1
IC8qIEpTSFRNTE1vZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA1QzdBMEMwNzZC
QjMwMENEMjBGMCAvKiBKU0hUTUxPYmplY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlF
MUFEMTQyNTEyOTVFQTk1MDBBQ0E5ODkgLyogSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE4NUIxRUIwQTFCMjQwNTAwRDhDODdDIC8qIEpTSFRNTE9MaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTdFOUIwQTFBODNFMzAwN0ZCOEM1IC8q
IEpTSFRNTE9wdEdyb3VwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTdFOTkwQTFB
ODNFMzAwN0ZCOEM1IC8qIEpTSFRNTE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAt
MjAyMjUsNiArMjAyNDEsNyBAQAogCQkJCUJDRTFDNDNDMEQ5ODMwRDMwMDNCMDJGMiAvKiBKU0xv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTQxOTBDRDY4MjY5MDBGQURBNzUgLyog
SlNNZWRpYUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzNDMzlCNzBDMEQzRDhEMDA1RjRE
N0EgLyogSlNNZWRpYUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUQzQTk0QTQ3MTIyREM0MEYw
MEEzN0JCQyAvKiBKU01lZGlhUXVlcnlMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5RkZFM0VB
NjExQjVBNDM5MDAzNzg3NEUgLyogSlNNZW1vcnlJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MTA3NDAwRTBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTIwMjY0LDYgKzIwMjgxLDkgQEAKIAkJCQk5RkEzN0VGRDExNzJGREE2
MDBDNENENTUgLyogSlNTY3JpcHRQcm9maWxlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFE
MDdBN0YwRkY5MzVDQTAwOTVFRENFIC8qIEpTU2hhcmVkV29ya2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MUQxNjkwNjEwMjM4QjY2MDA5QkM4MjcgLyogSlNTaGFyZWRXb3JrZXJDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3NTQxNUQ1NjEyOUFCMkQyMDAzQUQ2NjkgLyogSlNTcGVlY2hJ
bnB1dEV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3NTQxNUQ1ODEyOUFCMkQyMDAzQUQ2Njkg
LyogSlNTcGVlY2hJbnB1dFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzU0MTVENUExMjlB
QjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzgyNDMyOTBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxFcnJvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjUyNUE5NjUxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQUU4MkZFRDBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRT
ZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMjA1MTgsNiArMjA1MzgsOSBAQAogCQkJCTRFMTk1OTJB
MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0RTE5
NTkyQzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV2YWx1YXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNEUxOTU5MkUwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUQzQTk0QTM5MTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5TGlz
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDNBOTRBM0IxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUQzQUExMEY0MTIzQTk4QUEw
MDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMTZD
MTgwOTc5QzNCRDAwNDY3NzQxIC8qIE1lbW9yeUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
RkZFM0U3QjExQjU5QzVEMDAzNzg3NEUgLyogTWVtb3J5SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMzMDlERkEwOTlFNjQ5MjAwNTZFNTgxIC8qIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21t
YW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTIwNzg4LDkgKzIwODExLDkgQEAKIAkJCQk1MTRDNzY3
QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxNEM3NjdCMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZUludGVybmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTZEMzczRjBBREJBNURFMDBBNDU1NEQgLyogUmVzb3Vy
Y2VMb2FkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5Mjg2Mzk5MTI1M0I4RkMwMEY3OTJENiAv
KiBSZXNvdXJjZUxvYWRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzNFMzI1NzEwODgzQjdD
MDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUQw
Q0U1OEY5MTI1RTRDQzIwMEYzRjE5OSAvKiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTQ5Mjg2Mzk5MTI1M0I4RkMwMEY3OTJENiAvKiBSZXNvdXJjZUxvYWRJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4QTgxQkY4NTExRENGRDkwMDBEQTJCOTggLyogUmVzb3Vy
Y2VMb2FkVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY1MjBDRTkyMzRFMDA3RUYz
Q0QgLyogUmVzb3VyY2VSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3RDBDRTky
M0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MDgzOSw2ICsyMDg2Miw3IEBACiAJCQkJOTM0Q0MwRTIwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlw
dFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyog
U2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDQTNCRjY3RTEwRDk5QkFFMDBF
NkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQUUxRkE3MTI5
MzlEQjcwMDRDQjAyNiAvKiBTY3JvbGxBbmltYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNGMTk5QjgwODI0NUU1OTAwMUU5QUJDIC8qIFNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM4Qjg1NEIwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmgg
aW4gSGVhZGVycyAqLywKQEAgLTIwODk0LDcgKzIwOTE4LDkgQEAKIAkJCQk3NTc4RjkwQzExRERG
MjY5MDBEOTMzQzUgLyogU3BlZWNoSW5wdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1NzhGOTBE
MTFEREYyNjkwMEQ5MzNDNSAvKiBTcGVlY2hJbnB1dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzUzNUJDOTUxMjAyMENGRjAwMzdFQzQ1IC8qIFNwZWVjaElucHV0Q2xpZW50TW9jay5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzU0MTVBRkQxMjk1OEQ1RTAwM0FENjY5IC8qIFNwZWVjaElucHV0
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1NzhGOTIwMTFFNEUzMjgwMEQ5MzNDNSAvKiBT
cGVlY2hJbnB1dExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3NTQxNUIwMDEyOTU4RDVF
MDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzMwOUUxMjA5OUU2NDkyMDA1NkU1ODEgLyogU3BsaXRFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTMzMDlFMTQwOTlFNjQ5MjAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb21t
YW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxNjA5OUU2NDkyMDA1NkU1ODEgLyogU3Bs
aXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MTI2Niw2ICsyMTI5Miw3IEBACiAJCQkJMkUzQkJGMDgxMTYyREExMTAwQjk0MDlBIC8qIFVVSUQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1QTE1NDI4MTI3OTUzNEQwMEQwQjBDMCAvKiBWYWxpZGF0
aW9uTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTVDNzcwOEQxMDBEM0M2QjAwNUJBMjY3
IC8qIFZhbGlkaXR5U3RhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQTI1NzE1MTI5M0MwMTAw
MDdBMjYzRCAvKiBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNF
RjQxOENGMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTMzMDlFMUUwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2libGVfdW5pdHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzMzA5RTIwMDk5RTY0OTIwMDU2RTU4MSAvKiBWaXNpYmxlUG9zaXRp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtMjE0MTMsMjYgKzIxNDQwLDYgQEAKIAkJCQk5M0YxOTlF
RDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUJDQjkyRDRGMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBp
biBIZWFkZXJzICovLAotCQkJCTQ2QkM3MjRGMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVy
QmFzZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDZCQzcyNTAxMjlCMTA0QzAwNzFDMDdFIC8qIEZp
bGVXcml0ZXJCYXNlQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAotCQkJCUJDQTI1NzE1MTI5M0Mw
MTAwMDdBMjYzRCAvKiBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUJDQUUxRkE3MTI5MzlEQjcwMDRDQjAyNiAvKiBTY3JvbGxBbmltYXRvck1hYy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJRTFBRDE0MUUxMjk1RUE0RjAwQUNBOTg5IC8qIEpTSFRNTEFwcGxldEVsZW1l
bnRDdXN0b20uaCBpbiBIZWFkZXJzICovLAotCQkJCUUxQUQxNDIxMTI5NUVBNkIwMEFDQTk4OSAv
KiBKU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uaCBpbiBIZWFkZXJzICovLAotCQkJCUUxQUQxNDIz
MTI5NUVBN0YwMEFDQTk4OSAvKiBKU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uaCBpbiBIZWFkZXJz
ICovLAotCQkJCUUxQUQxNDI1MTI5NUVBOTUwMEFDQTk4OSAvKiBKU0hUTUxPYmplY3RFbGVtZW50
Q3VzdG9tLmggaW4gSGVhZGVycyAqLywKLQkJCQlEM0E5NEEzOTEyMkRBQkFDMDBBMzdCQkMgLyog
TWVkaWFRdWVyeUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCUQzQTk0QTNCMTIyREFCQUMwMEEz
N0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlEM0E5
NEE0NzEyMkRDNDBGMDBBMzdCQkMgLyogSlNNZWRpYVF1ZXJ5TGlzdC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJRDNBQTEwRjQxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQk3NTQxNUFGRDEyOTU4RDVFMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRF
dmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzU0MTVCMDAxMjk1OEQ1RTAwM0FENjY5IC8qIFNw
ZWVjaElucHV0UmVzdWx0TGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzU0MTVENTYxMjlBQjJE
MjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzU0
MTVENTgxMjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRSZXN1bHQuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTc1NDE1RDVBMTI5QUIyRDIwMDNBRDY2OSAvKiBKU1NwZWVjaElucHV0UmVzdWx0
TGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkU5N0NDRUIxMjkzOUNCODAwQzVDOEZGIC8qIERh
dGFWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRTk3Q0U3MDEyOTNBRDZCMDBDNUM4RkYgLyog
SlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMTk0Nyw2ICsyMTk1NCw3IEBACiAJCQkJ
QkM3N0QyMzkwRkYyOTgwODAwNzA4ODdCIC8qIERhdGFHcmlkQ29sdW1uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNzdEMUZEMEZGMjhEOUIwMDcwODg3QiAvKiBEYXRhR3JpZENvbHVtbkxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NDY0MUQxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFz
ZXRET01TdHJpbmdNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkU5N0NDRUExMjkzOUNCODAw
QzVDOEZGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1RDNBNTdDMTA2Qjgz
QjMwMDU0NTI5NyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVC
M0RCNTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGNTVCM0RCNzEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJbnB1dFR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yMjM1MSw2ICsyMjM1OSw3IEBACiAJCQkJNTE2MDMwMEIwQ0M0MjUx
MjAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzZE
NkM4RDEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5NzZENkM5MDEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVdyaXRlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0NkJDNzI0RTEyOUIxMDRDMDA3MUMwN0UgLyogRmlsZVdyaXRlckJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDY3MDBFRDAxMjdCOTZDQjAwRjVENUQ2IC8qIEZpbGVXcml0ZXJT
eW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCNjlFMEU4MURBRUIwMEIyNTk2NSAvKiBG
aWxsTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDhDOTI1MTkwRkNDN0M0QTAwNDgwREVD
IC8qIEZpbHRlckVmZmVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIyMzgzLDYgKzIyMzkyLDcg
QEAKIAkJCQlCNTMyMEQ2QzEyMkEyNEU5MDAyRDE0NDAgLyogRm9udFBsYXRmb3JtRGF0YUNvY29h
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjczNEIxODExMTlCOTkxMTAwNjU4N0JEIC8qIEZvbnRU
cmFuc2NvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2Q0YxMEExOTg5Q0EwMDdGQjhD
NSAvKiBGb250VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEEwREEyRkUxMjlCMjQxOTAw
QUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlE
MDVDRUQyOTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxNEM3NjZGMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwODVCOTJCQTBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWls
ZGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjI2NjgsOSArMjI2NzgsMTMgQEAKIAkJCQk5MzA3
MDVEODA5RTBDOUI3MDBCMTdGRTQgLyogSlNDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDNDZDMUZBMEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NTU0NoYXJzZXRSdWxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDNDZDMUZDMEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NTU0ZvbnRGYWNlUnVs
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUFEMTQ5MTEyOTczMzc0MDBBQ0E5ODkgLyogSlND
U1NGb250RmFjZVJ1bGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0NkMxRkUwQzBE
REM4RjAwMjBDRkMzIC8qIEpTQ1NTSW1wb3J0UnVsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlF
MUFEMTQ3QzEyOTczMDdFMDBBQ0E5ODkgLyogSlNDU1NJbXBvcnRSdWxlQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDNDZDMjAwMEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NTU01lZGlhUnVs
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUFEMTRBMzEyOTczNDUzMDBBQ0E5ODkgLyogSlND
U1NNZWRpYVJ1bGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0NkMyMDIwQzBEREM4
RjAwMjBDRkMzIC8qIEpTQ1NTUGFnZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFBRDE0
Q0QxMjk3MzVBNDAwQUNBOTg5IC8qIEpTQ1NTUGFnZVJ1bGVDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTMwNzA1RTkwOUUwQzlGMDAwQjE3RkU0IC8qIEpTQ1NTUHJpbWl0aXZlVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRDRjdCMzMwOUY2RUNENzAwRUIzNjY1IC8qIEpTQ1NT
UnVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQ2QzFFRTBDMEREQkRGMDAyMENGQzMgLyog
SlNDU1NSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjI2NzksNiArMjI2OTMsNyBA
QAogCQkJCTE0MjAxMUI2MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1ODI1RjMwQzBCODkzODAwNTNGMUI1IC8qIEpTQ1NT
U3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQ2QzIwNjBD
MEREQ0ExMDAyMENGQzMgLyogSlNDU1NTdHlsZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RTFBRDE0RTgxMjk3Mzc3NDAwQUNBOTg5IC8qIEpTQ1NTU3R5bGVSdWxlQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDQzVCRTAwMEMwRTkzMTEwMDExQzJEQiAvKiBKU0NTU1N0eWxlU2hl
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRDRjc4QTQwOUY1OENCRjAwRUIzNjY1IC8qIEpT
Q1NTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMEZCN0YwQzBFOEU2QzAwRDE0NDdG
IC8qIEpTQ1NTVmFsdWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMjY5Niw2ICsyMjcx
MSw4IEBACiAJCQkJQkM3N0QxNkIwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5M
aXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMTUyMEZGMTlDNzMwMDcwODg3QiAvKiBK
U0RhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0JDQUUz
QzBGRjE5Mzk5MDAwNzYyQUUgLyogSlNEYXRhR3JpZERhdGFTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMkU5N0NFNkYxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMkU5N0NDRjcxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0YVZpZXdDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1M0RBQzUxMTQzMkZEOTAwMEQ4MTdFIC8qIEpT
RGVidWdXcmFwcGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJBNDU3MTAxMTQ2NDcw
MERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDE2MkE0NTQxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dEN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIyODQxLDYgKzIyODU4LDcgQEAKIAkJCQkxQUUy
QUIyMzBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTGVnZW5kRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUUyQUIyNTBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTElFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU3QjEwMEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxM
aW5rRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUFEMTM5QjEyOTVEOTI2MDBBQ0E5
ODkgLyogSlNIVE1MTGlua0VsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFF
MkFCMjcwQTFDRTYzQjAwQjQyQjI1IC8qIEpTSFRNTE1hcEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM0OTFCNzgwQzAyM0VGRDAwOUQ2MzE2IC8qIEpTSFRNTE1hcnF1ZWVFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NDYxNDM5MENENjg5QzcwMEZBREE3NSAvKiBKU0hU
TUxNZWRpYUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMjg2Nyw2ICsyMjg4NSw3IEBA
CiAJCQkJQkMxN0Y5NjYwQjY0RUJCODAwNEE2NUNCIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0NjE0M0IwQ0Q2ODlDQzAwRkFEQTc1IC8qIEpT
SFRNTFNvdXJjZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTdCMEYwQTE5RDYw
NjAwN0ZCOEM1IC8qIEpTSFRNTFN0eWxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlF
MUFEMTM5RTEyOTVEOTYxMDBBQ0E5ODkgLyogSlNIVE1MU3R5bGVFbGVtZW50Q3VzdG9tLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDQTE2OUEyMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJs
ZUNhcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDZFREUzMEJGRDZEMEQw
MDg1NkU5RCAvKiBKU0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDMDZFRDlEMEJGRDY2MDYwMDg1NkU5RCAvKiBKU0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yMjkxNiw2ICsyMjkzNSw3IEBACiAJCQkJOEZBQzc3NEQxMTk4NzJD
QjAwMTVBRTk0IC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFNDQ2MTQxODBDRDY4MjY5MDBGQURBNzUgLyogSlNNZWRpYUVycm9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDM0MzOUI2MEMwRDNEOEQwMDVGNEQ3QSAvKiBKU01lZGlhTGlzdC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlEM0E5NEE0NjEyMkRDNDBGMDBBMzdCQkMgLyogSlNNZWRpYVF1ZXJ5
TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RkZFM0VBNTExQjVBNDM5MDAzNzg3NEUgLyog
SlNNZW1vcnlJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMDc0MDBEMEU3N0JEQzAwMDMz
QUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQTVGOTlC
MEU3RUFBMjUwMEFGODVFQSAvKiBKU01lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjI5NTQsNiArMjI5NzQsNyBAQAogCQkJCTUxODlGMDE4MTBCMzc4MTMwMEYzQzcz
OSAvKiBKU1BvcFN0YXRlRXZlbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU4MERB
NzEwRTlDNDcyRjAwMEQ2Rjc1IC8qIEpTUG9zaXRpb25FcnJvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk2NURGMzFGRjA5RDFDQzYwMDAwQkUzMjUgLyogSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFBRDEyRDYxMjk1RDBCRDAwQUNBOTg5IC8qIEpTUHJv
Y2Vzc2luZ0luc3RydWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NDYxM0VE
MENENjgxQkEwMEZBREE3NSAvKiBKU1Byb2dyZXNzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjVERjMyMDEwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRDIzQ0E1NUYwQUIwRUFCNjAwNTEwOEE1IC8qIEpTUmFuZ2VFeGNlcHRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yMjk2Niw2ICsyMjk4Nyw5IEBACiAJCQkJNDFEMDdBN0UwRkY5MzVD
QTAwOTVFRENFIC8qIEpTU2hhcmVkV29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxRDE2
OTA1MTAyMzhCNjYwMDlCQzgyNyAvKiBKU1NoYXJlZFdvcmtlckNvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTRDRDhEODIxMDZCNTI5MDAwQTQ2RDIzIC8qIEpTU2hhcmVkV29ya2VyQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc1NDE1RDU1MTI5QUIyRDIwMDNBRDY2OSAvKiBK
U1NwZWVjaElucHV0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzU0MTVENTcxMjlBQjJE
MjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NzU0MTVENTkxMjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxNEM3NjM3MENFOTIyNUUwMDdFRjNDRCAvKiBKU1NRTEVycm9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1MjVBOTY2MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NR
TEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUU4MkZFQzBDQUIwN0VFMDAyMjM3
QUUgLyogSlNTUUxSZXN1bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMzE1NSw3ICsyMzE3
OSw5IEBACiAJCQkJMEM0NTM0MjcxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9j
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDMEZGM0QwRTRDRUZBQzAwN0Q2RkU1IC8q
IEpTV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE2RkUwNzEw
RTZDQ0JFRTAwQkY2MDg4IC8qIEpTV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUUxQUQxNEM1MTI5NzM1NDkwMEFDQTk4OSAvKiBKU1dlYktpdENTU0tleWZyYW1l
UnVsZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTZGRTA3MzBFNkNDQkVFMDBCRjYw
ODggLyogSlNXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUx
QUQxNEI1MTI5NzM0Q0EwMEFDQTk4OSAvKiBKU1dlYktpdENTU0tleWZyYW1lc1J1bGVDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk4MzkxM0YwRjFFNzY3NTAwQzIzNzgyIC8qIEpTV2Vi
S2l0Q1NTTWF0cml4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjc1QjdEMTFDNUQyMzUwMEM5
MjA2QyAvKiBKU1dlYktpdENTU01hdHJpeEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
MTYxMUU1QTBFMUM0REUwMDBGNkE1NzkgLyogSlNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTIzMjQxLDYgKzIzMjY3LDkgQEAKIAkJCQk0RTE5NTkyOTBBMzlE
QUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RTE5NTky
QjBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0RTE5NTkyRDBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlEM0E5NEEzODEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDM0MDYyOUIxMjUzQkM4QzAwOUU0MjU5IC8qIE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDNBQTEwRjMxMjNB
OThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDQjE2QzE3MDk3OUMzQkQwMDQ2Nzc0MSAvKiBNZW1vcnlDYWNoZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5RkZFM0U3QTExQjU5QzVEMDAzNzg3NEUgLyogTWVtb3J5SW5mby5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MzMwOURGOTA5OUU2NDkyMDA1NkU1ODEgLyogTWVyZ2VJZGVudGljYWxF
bGVtZW50c0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMzUxMCw2ICsyMzUzOSw3IEBA
CiAJCQkJNDEyN0Q1MzcwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzNENDMEUxMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDQTNCRjY3QzEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5p
bWF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkNBRTFGQTYxMjkzOURCNzAwNENCMDI2IC8q
IFNjcm9sbEFuaW1hdG9yTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQUE5MEMzMEE3RUJB
NjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5QkM2NEQw
RTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzE0MDI4QTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yMzU2NCw3ICsyMzU5NCw5IEBACiAJCQkJNjI2Q0RFMEUxMTQw
NDI0QzAwMUU1QTY4IC8qIFNwYXRpYWxOYXZpZ2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTc1NzhGOTBCMTFEREYyNjkwMEQ5MzNDNSAvKiBTcGVlY2hJbnB1dC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3NTM1QkM5NDEyMDIwQ0ZGMDAzN0VDNDUgLyogU3BlZWNoSW5wdXRDbGllbnRNb2Nr
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc1NDE1QzI4MTI5QTk5MjAwMDNBRDY2OSAvKiBTcGVl
Y2hJbnB1dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc1ODk3OEVDMTI3MDkwRDYwMDc2
RDVBOSAvKiBTcGVlY2hJbnB1dFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3NTQxNUMy
OTEyOUE5OTIwMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzMzA5RTExMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxpdEVsZW1lbnRDb21tYW5k
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTEzMDk5RTY0OTIwMDU2RTU4MSAvKiBTcGxp
dFRleHROb2RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxNTA5OUU2NDky
MDA1NkU1ODEgLyogU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTIzNzI3LDYgKzIzNzU5LDcgQEAKIAkJCQk4NDMwMEJEMzEyMEM5QTcx
MDAyMTk1NEEgLyogU1ZHUGF0aFBhcnNlckZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjdBODAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg0NzZDOUU1MTFERjZBMEIwMDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1aWxk
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDhGRjEwMjAxMjk1MEY1QTAwRjAwMjc2IC8qIFNW
R1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0QjZC
OTc3MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NDE5RDJCOTEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0cmluZ0J1aWxk
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQzMDBCREExMjBDOUFFRDAwMjE5NTRBIC8qIFNW
R1BhdGhTdHJpbmdTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMzk4NywzMSArMjQwMjAs
NiBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNM
VFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZERjRENkUwMEVD
RjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA4RkYxMDIwMTI5NTBG
NUEwMEYwMDI3NiAvKiBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlCQ0FFMUZBNjEyOTM5REI3MDA0Q0IwMjYgLyogU2Nyb2xsQW5pbWF0b3JNYWMu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTFBRDEyRDYxMjk1RDBCRDAwQUNBOTg5IC8qIEpTUHJv
Y2Vzc2luZ0luc3RydWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQUQxMzlC
MTI5NUQ5MjYwMEFDQTk4OSAvKiBKU0hUTUxMaW5rRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlFMUFEMTM5RTEyOTVEOTYxMDBBQ0E5ODkgLyogSlNIVE1MU3R5bGVFbGVtZW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQUQxNDdDMTI5NzMwN0UwMEFDQTk4OSAv
KiBKU0NTU0ltcG9ydFJ1bGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTFBRDE0OTEx
Mjk3MzM3NDAwQUNBOTg5IC8qIEpTQ1NTRm9udEZhY2VSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUUxQUQxNEEzMTI5NzM0NTMwMEFDQTk4OSAvKiBKU0NTU01lZGlhUnVsZUN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMUFEMTRCNTEyOTczNENBMDBBQ0E5ODkgLyogSlNX
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUUxQUQx
NEM1MTI5NzM1NDkwMEFDQTk4OSAvKiBKU1dlYktpdENTU0tleWZyYW1lUnVsZUN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlFMUFEMTRDRDEyOTczNUE0MDBBQ0E5ODkgLyogSlNDU1NQYWdl
UnVsZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMUFEMTRFODEyOTczNzc0MDBBQ0E5
ODkgLyogSlNDU1NTdHlsZVJ1bGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRDNBOTRB
MzgxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUQzQTk0QTQ2MTIyREM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUQzQUExMEYzMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0
Y2hlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlEMzQwNjI5QjEyNTNCQzhDMDA5RTQyNTkgLyog
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3NTQxNUMyODEy
OUE5OTIwMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk3NTQxNUMyOTEyOUE5OTIwMDAzQUQ2NjkgLyogU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTc1NDE1RDU1MTI5QUIyRDIwMDNBRDY2OSAvKiBKU1NwZWVjaElu
cHV0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzU0MTVENTcxMjlBQjJEMjAwM0FENjY5
IC8qIEpTU3BlZWNoSW5wdXRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNzU0MTVENTkx
MjlBQjJEMjAwM0FENjY5IC8qIEpTU3BlZWNoSW5wdXRSZXN1bHRMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTQ2QkM3MjRFMTI5QjEwNEMwMDcxQzA3RSAvKiBGaWxlV3JpdGVyQmFzZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkyRTk3Q0NFQTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NDRjcxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0
YVZpZXdDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NFNkYxMjkzQUQ2QjAwQzVD
OEZGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2RvbS9D
aGVja2VkUmFkaW9CdXR0b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hlY2tlZFJh
ZGlvQnV0dG9ucy5oCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvZG9tL0NoZWNrZWRSYWRp
b0J1dHRvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OworY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIAogY2xhc3MgQ2hlY2tlZFJhZGlv
QnV0dG9ucyB7CiBwdWJsaWM6CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA3MzAwNykKKysrIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQAog
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRm9ybUFzc29jaWF0ZWRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC00Mzg4LDIzICs0Mzg5LDIzIEBAIHZvaWQgRG9j
dW1lbnQ6OnNldEljb25VUkwoY29uc3QgU3RyaW5nJiAKICAgICAgICAgZi0+bG9hZGVyKCktPnNl
dEljb25VUkwobV9pY29uVVJMKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJGb3JtRWxl
bWVudFdpdGhGb3JtQXR0cmlidXRlKEVsZW1lbnQqIGNvbnRyb2wpCit2b2lkIERvY3VtZW50Ojpy
ZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50
KiBlbGVtZW50KQogewotICAgIEFTU0VSVChjb250cm9sLT5mYXN0SGFzQXR0cmlidXRlKGZvcm1B
dHRyKSk7Ci0gICAgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZS5hZGQoY29udHJvbCk7
CisgICAgQVNTRVJUKHRvSFRNTEVsZW1lbnQoZWxlbWVudCktPmZhc3RIYXNBdHRyaWJ1dGUoZm9y
bUF0dHIpKTsKKyAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLmFkZChlbGVtZW50
KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRy
aWJ1dGUoRWxlbWVudCogY29udHJvbCkKK3ZvaWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJGb3JtRWxl
bWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZWxlbWVudCkKIHsK
LSAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLnJlbW92ZShjb250cm9sKTsKKyAg
ICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLnJlbW92ZShlbGVtZW50KTsKIH0KIAog
dm9pZCBEb2N1bWVudDo6cmVzZXRGb3JtRWxlbWVudHNPd25lcihIVE1MRm9ybUVsZW1lbnQqIGZv
cm0pCiB7Ci0gICAgdHlwZWRlZiBGb3JtRWxlbWVudExpc3RIYXNoU2V0OjppdGVyYXRvciBJdGVy
YXRvcjsKKyAgICB0eXBlZGVmIEZvcm1Bc3NvY2lhdGVkRWxlbWVudExpc3RIYXNoU2V0OjppdGVy
YXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQgPSBtX2Zvcm1FbGVtZW50c1dpdGhGb3Jt
QXR0cmlidXRlLmVuZCgpOwogICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX2Zvcm1FbGVtZW50c1dp
dGhGb3JtQXR0cmlidXRlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KCppdCktPnJlc2V0Rm9ybU93bmVyKGZvcm0p
OworICAgICAgICAoKml0KS0+cmVzZXRGb3JtT3duZXIoZm9ybSk7CiB9CiAKIHZvaWQgRG9jdW1l
bnQ6OnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKGJvb2wgdXNlc1NlY3VyZUtl
eWJvYXJkKQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAgY2xhc3MgRWxlbWVudDsKIGNs
YXNzIEVudGl0eVJlZmVyZW5jZTsKIGNsYXNzIEV2ZW50OwogY2xhc3MgRXZlbnRMaXN0ZW5lcjsK
K2NsYXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgRnJhbWVW
aWV3OwogY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CkBAIC00OTAsOCArNDkxLDggQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzU3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoKSBjb25zdDsKICAgICBib29s
IHRha2VTdGF0ZUZvckZvcm1FbGVtZW50KEF0b21pY1N0cmluZ0ltcGwqIG5hbWUsIEF0b21pY1N0
cmluZ0ltcGwqIHR5cGUsIFN0cmluZyYgc3RhdGUpOwogCi0gICAgdm9pZCByZWdpc3RlckZvcm1F
bGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCopOwotICAgIHZvaWQgdW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJG
b3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOworICAg
IHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRm9ybUFzc29jaWF0
ZWRFbGVtZW50Kik7CiAgICAgdm9pZCByZXNldEZvcm1FbGVtZW50c093bmVyKEhUTUxGb3JtRWxl
bWVudCopOwogCiAgICAgRnJhbWVWaWV3KiB2aWV3KCkgY29uc3Q7IC8vIGNhbiBiZSBOVUxMCkBA
IC0xMjExLDcgKzEyMTIsOCBAQCBwcml2YXRlOgogCiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxF
bGVtZW50KiwgNjQ+IEZvcm1FbGVtZW50TGlzdEhhc2hTZXQ7CiAgICAgRm9ybUVsZW1lbnRMaXN0
SGFzaFNldCBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZTsKLSAgICBGb3JtRWxlbWVudExpc3RIYXNo
U2V0IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGU7CisgICAgdHlwZWRlZiBMaXN0SGFz
aFNldDxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqLCAzMj4gRm9ybUFzc29jaWF0ZWRFbGVtZW50TGlz
dEhhc2hTZXQ7CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQgbV9mb3JtRWxl
bWVudHNXaXRoRm9ybUF0dHJpYnV0ZTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxGb3JtRWxlbWVu
dEtleSwgVmVjdG9yPFN0cmluZz4sIEZvcm1FbGVtZW50S2V5SGFzaCwgRm9ybUVsZW1lbnRLZXlI
YXNoVHJhaXRzPiBGb3JtRWxlbWVudFN0YXRlTWFwOwogICAgIEZvcm1FbGVtZW50U3RhdGVNYXAg
bV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50czsKSW5kZXg6IFdlYkNvcmUvaHRtbC9ET01Gb3JtRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcAkocmV2aXNp
b24gNzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw5ICs1MSw5IEBAIERPTUZvcm1EYXRhOjpET01Gb3JtRGF0YShIVE1MRm9ybUVsZW1l
bnQKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0t
PmFzc29jaWF0ZWRFbGVtZW50cygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXTsKLSAg
ICAgICAgaWYgKCFjb250cm9sLT5kaXNhYmxlZCgpKQotICAgICAgICAgICAgY29udHJvbC0+YXBw
ZW5kRm9ybURhdGEoKnRoaXMsIHRydWUpOworICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQq
IGVsZW1lbnQgPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXTsKKyAgICAgICAgaWYgKCF0
b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5kaXNhYmxlZCgpKQorICAgICAgICAgICAgZWxlbWVudC0+
YXBwZW5kRm9ybURhdGEoKnRoaXMsIHRydWUpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9o
dG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDczMDA3KQkoZnJvbSBXZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6NzMwMDcpCisrKyBXZWJDb3JlL2h0bWwv
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQor
ICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQor
ICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChh
cEBueXBvcC5jb20pCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSFRNTEZvcm1D
b250cm9sRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiQ2hh
cmFjdGVyTmFtZXMuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50UGFyc2VyLmgi
CisjaW5jbHVkZSAiRWxlbWVudFJhcmVEYXRhLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNs
dWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5w
dXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTGFiZWxzTm9k
ZUxpc3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5j
bHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJWYWxpZGF0aW9uTWVzc2Fn
ZS5oIgorI2luY2x1ZGUgIlZhbGlkaXR5U3RhdGUuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRN
TEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX2Zvcm0oZm9ybSkKKyAgICAsIG1f
ZGlzYWJsZWQoZmFsc2UpCisgICAgLCBtX3JlYWRPbmx5KGZhbHNlKQorICAgICwgbV9yZXF1aXJl
ZChmYWxzZSkKKyAgICAsIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCisgICAgLCBtX3dp
bGxWYWxpZGF0ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV93aWxsVmFsaWRhdGUodHJ1ZSkK
KyAgICAsIG1faXNWYWxpZCh0cnVlKQoreworICAgIGlmICghbV9mb3JtKQorICAgICAgICBtX2Zv
cm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7CisgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgbV9mb3Jt
LT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworfQorCitIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVudCgpCit7CisgICAgaWYgKG1fZm9ybSkKKyAgICAgICAg
bV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpkZXRhY2goKQoreworICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2Uo
KTsKKyAgICBIVE1MRWxlbWVudDo6ZGV0YWNoKCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6Zm9ybU5vVmFsaWRhdGUoKSBjb25zdAoreworICAgIHJldHVybiAhZ2V0QXR0cmli
dXRlKGZvcm1ub3ZhbGlkYXRlQXR0cikuaXNOdWxsKCk7Cit9CisKK1ZhbGlkaXR5U3RhdGUqIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkaXR5KCkKK3sKKyAgICBpZiAoIW1fdmFsaWRpdHlT
dGF0ZSkKKyAgICAgICAgbV92YWxpZGl0eVN0YXRlID0gVmFsaWRpdHlTdGF0ZTo6Y3JlYXRlKHRo
aXMpOworCisgICAgcmV0dXJuIG1fdmFsaWRpdHlTdGF0ZS5nZXQoKTsKK30KKwordm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
Cit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIpIHsKKyAgICAgICAgYm9v
bCBvbGREaXNhYmxlZCA9IG1fZGlzYWJsZWQ7CisgICAgICAgIG1fZGlzYWJsZWQgPSAhYXR0ci0+
aXNOdWxsKCk7CisgICAgICAgIGlmIChvbGREaXNhYmxlZCAhPSBtX2Rpc2FibGVkKSB7CisgICAg
ICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpZiAocmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCisgICAgICAgICAgICAg
ICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIEVuYWJsZWRT
dGF0ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSByZWFkb25s
eUF0dHIpIHsKKyAgICAgICAgYm9vbCBvbGRSZWFkT25seSA9IG1fcmVhZE9ubHk7CisgICAgICAg
IG1fcmVhZE9ubHkgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAgICAgIGlmIChvbGRSZWFkT25seSAh
PSBtX3JlYWRPbmx5KSB7CisgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAg
ICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJh
bmNlKCkpCisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2Vk
KHJlbmRlcmVyKCksIFJlYWRPbmx5U3RhdGUpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gcmVxdWlyZWRBdHRyKSB7CisgICAgICAgIGJvb2wgb2xkUmVxdWlyZWQg
PSBtX3JlcXVpcmVkOworICAgICAgICBtX3JlcXVpcmVkID0gIWF0dHItPmlzTnVsbCgpOworICAg
ICAgICBpZiAob2xkUmVxdWlyZWQgIT0gbV9yZXF1aXJlZCkgeworICAgICAgICAgICAgc2V0TmVl
ZHNWYWxpZGl0eUNoZWNrKCk7CisgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7IC8v
IFVwZGF0ZXMgZm9yIDpyZXF1aXJlZCA6b3B0aW9uYWwgY2xhc3Nlcy4KKyAgICAgICAgfQorICAg
IH0gZWxzZQorICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CisgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOworfQorCit2b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmF0dGFjaCgpCit7CisgICAgQVNTRVJUKCFhdHRhY2hlZCgpKTsKKworICAg
IEhUTUxFbGVtZW50OjphdHRhY2goKTsKKworICAgIC8vIFRoZSBjYWxsIHRvIHVwZGF0ZUZyb21F
bGVtZW50KCkgbmVlZHMgdG8gZ28gYWZ0ZXIgdGhlIGNhbGwgdGhyb3VnaAorICAgIC8vIHRvIHRo
ZSBiYXNlIGNsYXNzJ3MgYXR0YWNoKCkgYmVjYXVzZSB0aGF0IGNhbiBzb21ldGltZXMgZG8gYSBj
bG9zZQorICAgIC8vIG9uIHRoZSByZW5kZXJlci4KKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAg
ICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKKyAgICAgICAgCisgICAgLy8gRm9j
dXMgdGhlIGVsZW1lbnQgaWYgaXQgc2hvdWxkIGhvbm91ciBpdHMgYXV0b2ZvY3VzIGF0dHJpYnV0
ZS4KKyAgICAvLyBXZSBoYXZlIHRvIGRldGVybWluZSBpZiB0aGUgZWxlbWVudCBpcyBhIFRleHRB
cmVhL0lucHV0L0J1dHRvbi9TZWxlY3QsCisgICAgLy8gaWYgaW5wdXQgdHlwZSBoaWRkZW4gaWdu
b3JlIGF1dG9mb2N1cy4gU28gaWYgZGlzYWJsZWQgb3IgcmVhZG9ubHkuCisgICAgYm9vbCBpc0lu
cHV0VHlwZUhpZGRlbiA9IGZhbHNlOworICAgIGlmIChoYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAg
ICAgICAgaXNJbnB1dFR5cGVIaWRkZW4gPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
dGhpcyktPmlzSW5wdXRUeXBlSGlkZGVuKCk7CisKKyAgICBpZiAoYXV0b2ZvY3VzKCkgJiYgcmVu
ZGVyZXIoKSAmJiAhZG9jdW1lbnQoKS0+aWdub3JlQXV0b2ZvY3VzKCkgJiYgIWlzUmVhZE9ubHlG
b3JtQ29udHJvbCgpICYmCisgICAgICAgICAgICAoKGhhc1RhZ05hbWUoaW5wdXRUYWcpICYmICFp
c0lucHV0VHlwZUhpZGRlbikgfHwgaGFzVGFnTmFtZShzZWxlY3RUYWcpIHx8CisgICAgICAgICAg
ICAgIGhhc1RhZ05hbWUoYnV0dG9uVGFnKSB8fCBoYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkpCisg
ICAgICAgICBmb2N1cygpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2Vy
dGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIGlmIChmYXN0SGFzQXR0cmlidXRlKGZvcm1B
dHRyKSkgeworICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1B
dHRyaWJ1dGUodGhpcyk7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudCgpLT5n
ZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7CisgICAgICAgIGlmIChl
bGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpIHsKKyAgICAgICAgICAgIGlm
IChtX2Zvcm0pCisgICAgICAgICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlz
KTsKKyAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGVs
ZW1lbnQpOworICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmICghbV9mb3JtKSB7CisgICAgICAgIC8vIFRoaXMgaGFu
ZGxlcyB0aGUgY2FzZSBvZiBhIG5ldyBmb3JtIGVsZW1lbnQgYmVpbmcgY3JlYXRlZCBieQorICAg
ICAgICAvLyBKYXZhU2NyaXB0IGFuZCBpbnNlcnRlZCBpbnNpZGUgYSBmb3JtLiAgSW4gdGhlIGNh
c2Ugb2YgdGhlIHBhcnNlcgorICAgICAgICAvLyBzZXR0aW5nIGEgZm9ybSwgd2Ugd2lsbCBhbHJl
YWR5IGhhdmUgYSBub24tbnVsbCB2YWx1ZSBmb3IgbV9mb3JtLCAKKyAgICAgICAgLy8gYW5kIHNv
IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAgICAgIG1fZm9ybSA9IGZpbmRGb3Jt
QW5jZXN0b3IoKTsKKyAgICAgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgICAgIG1fZm9ybS0+cmVn
aXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9jdW1l
bnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICB9CisKKyAg
ICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKK30KKworc3RhdGljIGlubGlu
ZSBOb2RlKiBmaW5kUm9vdChOb2RlKiBuKQoreworICAgIE5vZGUqIHJvb3QgPSBuOworICAgIGZv
ciAoOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKQorICAgICAgICByb290ID0gbjsKKyAgICByZXR1
cm4gcm9vdDsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbVRy
ZWUoYm9vbCBkZWVwKQoreworICAgIGlmIChmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkKKyAg
ICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUo
dGhpcyk7CisKKyAgICAvLyBJZiB0aGUgZm9ybSBhbmQgZWxlbWVudCBhcmUgYm90aCBpbiB0aGUg
c2FtZSB0cmVlLCBwcmVzZXJ2ZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgZm9ybS4KKyAgICAvLyBP
dGhlcndpc2UsIG51bGwgb3V0IG91ciBmb3JtIGFuZCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhl
IGZvcm0ncyBsaXN0IG9mIGVsZW1lbnRzLgorICAgIGlmIChtX2Zvcm0gJiYgZmluZFJvb3QodGhp
cykgIT0gZmluZFJvb3QobV9mb3JtKSkgeworICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVt
ZW50KHRoaXMpOworICAgICAgICBtX2Zvcm0gPSAwOworICAgIH0KKworICAgIEhUTUxFbGVtZW50
OjpyZW1vdmVkRnJvbVRyZWUoZGVlcCk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3QKK3sKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUgPSBmYXN0R2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICByZXR1
cm4gbmFtZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IG5hbWU7Cit9CisKK3ZvaWQgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6c2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQoreworICAg
IHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpCit7CisgICAgZGlzcGF0
Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFs
c2UpKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXREaXNhYmxlZChib29s
IGIpCit7CisgICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwgYiA/ICIiIDogMCk7Cit9CisK
K2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXV0b2ZvY3VzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaGFzQXR0cmlidXRlKGF1dG9mb2N1c0F0dHIpOworfQorCitib29sIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnJlcXVpcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXF1aXJlZDsK
K30KKworc3RhdGljIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnRDYWxsYmFjayhOb2RlKiBub2RlKQor
eworICAgIEFTU0VSVF9BUkcobm9kZSwgbm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKKyAgICBBU1NF
UlRfQVJHKG5vZGUsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSk7CisgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVyKCkpOworICAgIGlmIChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmVuZGVyZXItPnVw
ZGF0ZUZyb21FbGVtZW50KCk7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVj
YWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQoreworICAgIEhUTUxFbGVtZW50OjpyZWNhbGNT
dHlsZShjaGFuZ2UpOworCisgICAgLy8gdXBkYXRlRnJvbUVsZW1lbnQoKSBjYW4gY2F1c2UgdGhl
IHNlbGVjdGlvbiB0byBjaGFuZ2UsIGFuZCBpbiB0dXJuCisgICAgLy8gdHJpZ2dlciBzeW5jaHJv
bm91cyBsYXlvdXQsIHNvIGl0IG11c3Qgbm90IGJlIGNhbGxlZCBkdXJpbmcgc3R5bGUgcmVjYWxj
LgorICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICBxdWV1ZVBvc3RBdHRhY2hDYWxsYmFjayh1
cGRhdGVGcm9tRWxlbWVudENhbGxiYWNrLCB0aGlzKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWRpc2FibGVk
KCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25z
dAoreworICAgIGlmICghcmVuZGVyZXIoKSB8fCAKKyAgICAgICAgIXJlbmRlcmVyKCktPmlzQm94
KCkgfHwgdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPnNpemUoKS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAvLyBIVE1MRWxlbWVudDo6aXNGb2N1c2FibGUgaGFuZGxlcyB2
aXNpYmlsaXR5IGFuZCBjYWxscyBzdXBvcnRzRm9jdXMgd2hpY2gKKyAgICAvLyB3aWxsIGNvdmVy
IHRoZSBkaXNhYmxlZCBjYXNlLgorICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNGb2N1c2FibGUo
KTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxl
KEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIGlmIChpc0ZvY3VzYWJsZSgpKQor
ICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBkb2N1
bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+dGFic1RvQWxsQ29udHJvbHMoZXZlbnQp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpp
c01vdXNlRm9jdXNhYmxlKCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFFUKQorICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpOworI2Vsc2UK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworc2hvcnQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6dGFiSW5kZXgoKSBjb25zdAoreworICAgIC8vIFNraXAgdGhlIHN1cHBvcnRzRm9jdXMg
Y2hlY2sgaW4gSFRNTEVsZW1lbnQuCisgICAgcmV0dXJuIEVsZW1lbnQ6OnRhYkluZGV4KCk7Cit9
CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVjYWxjV2lsbFZhbGlkYXRlKCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIHJldHVybiBmYWxzZSBpZiB0aGlzIGVsZW1lbnQg
aGFzIGEgZGF0YWxpc3QgZWxlbWVudCBhcyBhbgorICAgIC8vIGFuY2VzdG9yLiBTZWUgSFRNTDUg
NC4xMC4xMCAnVGhlIGRhdGFsaXN0IGVsZW1lbnQuJworICAgIHJldHVybiAhbV9kaXNhYmxlZCAm
JiAhbV9yZWFkT25seTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp3aWxsVmFs
aWRhdGUoKSBjb25zdAoreworICAgIGlmICghbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCkgewor
ICAgICAgICBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgbV93aWxs
VmFsaWRhdGUgPSByZWNhbGNXaWxsVmFsaWRhdGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBJZiB0aGUgZm9sbG93aW5nIGFzc2VydGlvbiBmYWlscywgc2V0TmVlZHNXaWxsVmFsaWRhdGVD
aGVjaygpIGlzIG5vdAorICAgICAgICAvLyBjYWxsZWQgY29ycmVjdGx5IHdoZW4gc29tZXRoaW5n
IHdoaWNoIGNoYW5nZXMgcmVjYWxjV2lsbFZhbGlkYXRlKCkgcmVzdWx0CisgICAgICAgIC8vIGlz
IHVwZGF0ZWQuCisgICAgICAgIEFTU0VSVChtX3dpbGxWYWxpZGF0ZSA9PSByZWNhbGNXaWxsVmFs
aWRhdGUoKSk7CisgICAgfQorICAgIHJldHVybiBtX3dpbGxWYWxpZGF0ZTsKK30KKwordm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCkKK3sKKyAg
ICAvLyBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHdpbGxWYWxpZHRlIGltbWVkaWF0ZWx5IGJlY2F1
c2Ugd2lsbFZhbGlkYXRlCisgICAgLy8gY2hhbmdlIGNhbiBjYXVzZXMgc3R5bGUgY2hhbmdlLgor
ICAgIGJvb2wgbmV3V2lsbFZhbGlkYXRlID0gcmVjYWxjV2lsbFZhbGlkYXRlKCk7CisgICAgaWYg
KG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQgJiYgbV93aWxsVmFsaWRhdGUgPT0gbmV3V2lsbFZh
bGlkYXRlKQorICAgICAgICByZXR1cm47CisgICAgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCA9
IHRydWU7CisgICAgbV93aWxsVmFsaWRhdGUgPSBuZXdXaWxsVmFsaWRhdGU7CisgICAgc2V0TmVl
ZHNTdHlsZVJlY2FsYygpOworICAgIGlmICghbV93aWxsVmFsaWRhdGUpCisgICAgICAgIGhpZGVW
aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKK30KKworU3RyaW5nIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkKK3sKKyAgICByZXR1cm4gdmFsaWRpdHkoKS0+dmFs
aWRhdGlvbk1lc3NhZ2UoKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRh
dGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQoreworICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVu
dCgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgU3RyaW5n
IG1lc3NhZ2U7CisgICAgaWYgKHJlbmRlcmVyKCkgJiYgd2lsbFZhbGlkYXRlKCkpIHsKKyAgICAg
ICAgbWVzc2FnZSA9IHZhbGlkYXRpb25NZXNzYWdlKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAg
ICAgIC8vIEhUTUw1IHNwZWNpZmljYXRpb24gZG9lc24ndCBhc2sgVUEgdG8gc2hvdyB0aGUgdGl0
bGUgYXR0cmlidXRlIHZhbHVlCisgICAgICAgIC8vIHdpdGggdGhlIHZhbGlkYXRpb25NZXNzYWdl
LiAgSG93ZXZlciwgdGhpcyBiZWhhdmlvciBpcyBzYW1lIGFzIE9wZXJhCisgICAgICAgIC8vIGFu
ZCB0aGUgc3BlY2lmaWNhdGlvbiBkZXNjcmliZXMgc3VjaCBiZWhhdmlvciBhcyBhbiBleGFtcGxl
LgorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZ2V0QXR0cmlidXRlKHRpdGxl
QXR0cik7CisgICAgICAgIGlmICghbWVzc2FnZS5pc0VtcHR5KCkgJiYgIXRpdGxlLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ1xuJyk7CisgICAgICAgICAgICBtZXNz
YWdlLmFwcGVuZCh0aXRsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFtX3ZhbGlkYXRp
b25NZXNzYWdlKSB7CisgICAgICAgIG1fdmFsaWRhdGlvbk1lc3NhZ2UgPSBWYWxpZGF0aW9uTWVz
c2FnZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX3ZhbGlkYXRpb25NZXNzYWdlLT5zZXRNZXNz
YWdlKG1lc3NhZ2UpOworICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pc0VtcHR5KCkpCisgICAgICAg
IGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICBlbHNlIGlmIChtX3ZhbGlkYXRp
b25NZXNzYWdlLT5tZXNzYWdlKCkgIT0gbWVzc2FnZSkKKyAgICAgICAgbV92YWxpZGF0aW9uTWVz
c2FnZS0+c2V0TWVzc2FnZShtZXNzYWdlKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkKK3sKKyAgICBtX3ZhbGlkYXRpb25N
ZXNzYWdlID0gMDsKK30KKworU3RyaW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpc2libGVW
YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsaWRhdGlvbk1lc3Nh
Z2UgPyBtX3ZhbGlkYXRpb25NZXNzYWdlLT5tZXNzYWdlKCkgOiBTdHJpbmcoKTsKK30KKworYm9v
bCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRN
TEZvcm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQoreworICAg
IGlmICghd2lsbFZhbGlkYXRlKCkgfHwgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBBbiBldmVudCBoYW5kbGVyIGNhbiBkZXJlZiB0aGlz
IG9iamVjdC4KKyAgICBSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gcHJvdGVjdG9yKHRo
aXMpOworICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2luYWxEb2N1bWVudChkb2N1bWVudCgpKTsK
KyAgICBib29sIG5lZWRzRGVmYXVsdEFjdGlvbiA9IGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxzZSwgdHJ1ZSkpOworICAgIGlmIChuZWVk
c0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzICYmIGluRG9jdW1lbnQo
KSAmJiBvcmlnaW5hbERvY3VtZW50ID09IGRvY3VtZW50KCkpCisgICAgICAgIHVuaGFuZGxlZElu
dmFsaWRDb250cm9scy0+YXBwZW5kKHRoaXMpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkKK3sK
KyAgICAvLyBJZiB0aGUgZm9sbG93aW5nIGFzc2VydGlvbiBmYWlscywgc2V0TmVlZHNWYWxpZGl0
eUNoZWNrKCkgaXMgbm90IGNhbGxlZAorICAgIC8vIGNvcnJlY3RseSB3aGVuIHNvbWV0aGluZyB3
aGljaCBjaGFuZ2VzIHZhbGlkaXR5IGlzIHVwZGF0ZWQuCisgICAgQVNTRVJUKG1faXNWYWxpZCA9
PSB2YWxpZGl0eSgpLT52YWxpZCgpKTsKKyAgICByZXR1cm4gbV9pc1ZhbGlkOworfQorCit2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzVmFsaWRpdHlDaGVjaygpCit7CisgICAg
Ym9vbCBuZXdJc1ZhbGlkID0gdmFsaWRpdHkoKS0+dmFsaWQoKTsKKyAgICBpZiAod2lsbFZhbGlk
YXRlKCkgJiYgbmV3SXNWYWxpZCAhPSBtX2lzVmFsaWQpIHsKKyAgICAgICAgLy8gVXBkYXRlIHN0
eWxlIGZvciBwc2V1ZG8gY2xhc3NlcyBzdWNoIGFzIDp2YWxpZCA6aW52YWxpZC4KKyAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIH0KKyAgICBtX2lzVmFsaWQgPSBuZXdJc1ZhbGlk
OworCisgICAgLy8gVXBkYXRlcyBvbmx5IGlmIHRoaXMgY29udHJvbCBhbHJlYWR5IGhhcyBhIHZh
bGlkdGlvbiBtZXNzYWdlLgorICAgIGlmICghdmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkuaXNF
bXB0eSgpKSB7CisgICAgICAgIC8vIENhbGxzIHVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2Fn
ZSgpIGV2ZW4gaWYgbV9pc1ZhbGlkIGlzIG5vdAorICAgICAgICAvLyBjaGFuZ2VkIGJlY2F1c2Ug
YSB2YWxpZGF0aW9uIG1lc3NhZ2UgY2FuIGJlIGNoYWduZWQuCisgICAgICAgIHVwZGF0ZVZpc2li
bGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgIH0KK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJpbmcmIGVycm9yKQoreworICAgIHZh
bGlkaXR5KCktPnNldEN1c3RvbUVycm9yTWVzc2FnZShlcnJvcik7Cit9CisgICAgCit2b2lkIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCgpCit7CisgICAgaWYgKGRv
Y3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+
Y2xpZW50KCktPmZvcm1EaWRGb2N1cyh0aGlzKTsKKworICAgIEhUTUxFbGVtZW50OjpkaXNwYXRj
aEZvY3VzRXZlbnQoKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRj
aEJsdXJFdmVudCgpCit7CisgICAgaWYgKGRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgZG9j
dW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZvcm1EaWRCbHVyKHRoaXMpOwor
CisgICAgSFRNTEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCk7CisgICAgaGlkZVZpc2libGVW
YWxpZGF0aW9uTWVzc2FnZSgpOworfQorCitIVE1MRm9ybUVsZW1lbnQqIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb3JtOworfQor
Citib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBj
b25zdAoreworICAgIHJldHVybiBpc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSAmJiBtX2Zvcm0g
JiYgbV9mb3JtLT5kZWZhdWx0QnV0dG9uKCkgPT0gdGhpczsKK30KKwordm9pZCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpyZW1vdmVGcm9tRm9ybSgpCit7CisgICAgaWYgKCFtX2Zvcm0pCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgIG1f
Zm9ybSA9IDA7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVzZXRGb3JtT3du
ZXIoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQoreworICAgIGlmIChtX2Zvcm0pIHsKKyAgICAgICAg
aWYgKCFmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICB9CisgICAgbV9mb3Jt
ID0gMDsKKyAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKKyAgICAgICAgLy8g
VGhlIEhUTUw1IHNwZWMgc2F5cyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBhc3NvY2lhdGVk
IHdpdGgKKyAgICAgICAgLy8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IHRvIGhh
dmUgYW4gSUQgdGhhdCBlcXVhbCB0bworICAgICAgICAvLyB0aGUgdmFsdWUgb2YgZm9ybSBhdHRy
aWJ1dGUsIHNvIHdlIHB1dCB0aGUgcmVzdWx0IG9mCisgICAgICAgIC8vIGRvY3VtZW50KCktPmdl
dEVsZW1lbnRCeUlkKCkgb3ZlciB0aGUgZ2l2ZW4gZWxlbWVudC4KKyAgICAgICAgRWxlbWVudCog
Zmlyc3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZmFzdEdldEF0dHJpYnV0
ZShmb3JtQXR0cikpOworICAgICAgICBpZiAoZmlyc3RFbGVtZW50ICYmIGZpcnN0RWxlbWVudC0+
aGFzVGFnTmFtZShmb3JtVGFnKSkKKyAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0PEhU
TUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVudCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fZm9ybSA9IGZvcm07CisgICAgfSBlbHNlCisgICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5j
ZXN0b3IoKTsKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVs
ZW1lbnQodGhpcyk7CisgICAgZWxzZQorICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9C
dXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMp
Cit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBmb3JtQXR0cikgeworICAgICAgICBpZiAoIWZh
c3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgICAgICAgICAvLyBUaGUgZm9ybSBhdHRy
aWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBmb3JtIG93bmVyIGhlcmUuCisgICAgICAg
ICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1l
bnQodGhpcyk7CisgICAgICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7CisgICAg
ICAgICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3Jt
RWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkb2N1bWVu
dCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHJlc2V0Rm9ybU93bmVyKDApOworICAgIH0KKyAgICBIVE1MRWxlbWVu
dDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsKK30KKworYm9vbCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojppc0xhYmVsYWJsZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6
IEFkZCBtZXRlclRhZyBhbmQgb3V0cHV0VGFnIHRvIHRoZSBsaXN0IG9uY2Ugd2Ugc3VwcG9ydCB0
aGVtLgorICAgIHJldHVybiBoYXNUYWdOYW1lKGJ1dHRvblRhZykgfHwgaGFzVGFnTmFtZShpbnB1
dFRhZykgfHwgaGFzVGFnTmFtZShrZXlnZW5UYWcpCisjaWYgRU5BQkxFKE1FVEVSX1RBRykKKyAg
ICAgICAgfHwgaGFzVGFnTmFtZShtZXRlclRhZykKKyNlbmRpZgorI2lmIEVOQUJMRShQUk9HUkVT
U19UQUcpCisgICAgICAgIHx8IGhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcpCisjZW5kaWYKKyAgICAg
ICAgfHwgaGFzVGFnTmFtZShzZWxlY3RUYWcpIHx8IGhhc1RhZ05hbWUodGV4dGFyZWFUYWcpOwor
fQorCitQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpsYWJlbHMo
KQoreworICAgIGlmICghaXNMYWJlbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYg
KCFkb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBOb2RlUmFyZURhdGEq
IGRhdGEgPSBOb2RlOjplbnN1cmVSYXJlRGF0YSgpOworICAgIGlmICghZGF0YS0+bm9kZUxpc3Rz
KCkpIHsKKyAgICAgICAgZGF0YS0+c2V0Tm9kZUxpc3RzKE5vZGVMaXN0c05vZGVEYXRhOjpjcmVh
dGUoKSk7CisgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVMaXN0Q2FjaGUoKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIExhYmVsc05vZGVMaXN0OjpjcmVhdGUodGhpcyk7Cit9CisgICAgCitI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxG
b3JtRWxlbWVudCogZikKKyAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9j
LCBmKQoreworICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhp
cyk7Cit9CisKK0hUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6On5IVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlKCkKK3sKKyAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVs
ZW1lbnRXaXRoU3RhdGUodGhpcyk7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZTo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQoreworICAgIGRvY3VtZW50KCkt
PnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKKyAgICBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworfQorCit2b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQor
eworICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Cisg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwor
fQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmF1dG9Db21wbGV0ZSgp
IGNvbnN0Cit7CisgICAgaWYgKCFmb3JtKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBmb3JtKCktPmF1dG9Db21wbGV0ZSgpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGU6OnNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpIGNv
bnN0Cit7CisgICAgLy8gV2UgZG9uJ3Qgc2F2ZS9yZXN0b3JlIGNvbnRyb2wgc3RhdGUgaW4gYSBm
b3JtIHdpdGggYXV0b2NvbXBsZXRlPW9mZi4KKyAgICByZXR1cm4gYXR0YWNoZWQoKSAmJiBhdXRv
Q29tcGxldGUoKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpm
aW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQoreworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZp
bmlzaFBhcnNpbmdDaGlsZHJlbigpOworCisgICAgLy8gV2UgZG9uJ3Qgc2F2ZSBzdGF0ZSBvZiBh
IGNvbnRyb2wgd2l0aCBzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9sU3RhdGUoKT1mYWxz
ZS4KKyAgICAvLyBCdXQgd2UgbmVlZCB0byBza2lwIHJlc3RvcmluZyBwcm9jZXNzIHRvbyBiZWNh
dXNlIGEgY29udHJvbCBpbiBhbm90aGVyCisgICAgLy8gZm9ybSBtaWdodCBoYXZlIHRoZSBzYW1l
IHBhaXIgb2YgbmFtZSBhbmQgdHlwZSBhbmQgc2F2ZWQgaXRzIHN0YXRlLgorICAgIGlmICghc2hv
dWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOworICAgIGlmIChkb2MtPmhhc1N0YXRlRm9y
TmV3Rm9ybUVsZW1lbnRzKCkpIHsKKyAgICAgICAgU3RyaW5nIHN0YXRlOworICAgICAgICBpZiAo
ZG9jLT50YWtlU3RhdGVGb3JGb3JtRWxlbWVudChuYW1lKCkuaW1wbCgpLCB0eXBlKCkuaW1wbCgp
LCBzdGF0ZSkpCisgICAgICAgICAgICByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShzdGF0ZSk7Cisg
ICAgfQorfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQgJiYgcmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5pc1RleHRDb250cm9sKCkpIHsKKyAgICAgICAgdG9SZW5kZXJUZXh0
Q29udHJvbChyZW5kZXJlcigpKS0+c3VidHJlZUhhc0NoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZlbnQpOworfQorCitIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6SFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
YywgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZSh0YWdOYW1lLCBkb2MsIGZvcm0pCit7Cit9CisKK0hUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50Ojp+SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKQoreworfQorCit2b2lkIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKQoreworICAgIGlmIChz
dXBwb3J0c1BsYWNlaG9sZGVyKCkpCisgICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0
eShmYWxzZSk7CisgICAgaGFuZGxlRm9jdXNFdmVudCgpOworICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNoRm9jdXNFdmVudCgpOworfQorCit2b2lkIEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpCit7CisgICAgaWYgKHN1cHBv
cnRzUGxhY2Vob2xkZXIoKSkKKyAgICAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZh
bHNlKTsKKyAgICBoYW5kbGVCbHVyRXZlbnQoKTsKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
V2l0aFN0YXRlOjpkaXNwYXRjaEJsdXJFdmVudCgpOworfQorCitTdHJpbmcgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OnN0cmlwcGVkUGxhY2Vob2xkZXIoKSBjb25zdAoreworICAgIC8vIEFj
Y29yZGluZyB0byB0aGUgSFRNTDUgc3BlY2lmaWNhdGlvbiwgd2UgbmVlZCB0byByZW1vdmUgQ1Ig
YW5kIExGIGZyb20KKyAgICAvLyB0aGUgYXR0cmlidXRlIHZhbHVlLgorICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKTsK
KyAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKG5ld2xpbmVDaGFyYWN0ZXIpICYmICFh
dHRyaWJ1dGVWYWx1ZS5jb250YWlucyhjYXJyaWFnZVJldHVybikpCisgICAgICAgIHJldHVybiBh
dHRyaWJ1dGVWYWx1ZTsKKworICAgIFZlY3RvcjxVQ2hhcj4gc3RyaXBwZWQ7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYXR0cmlidXRlVmFsdWUubGVuZ3RoKCk7CisgICAgc3RyaXBwZWQucmVzZXJ2
ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7CisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IGF0dHJpYnV0ZVZhbHVlW2ldOworICAg
ICAgICBpZiAoY2hhcmFjdGVyID09IG5ld2xpbmVDaGFyYWN0ZXIgfHwgY2hhcmFjdGVyID09IGNh
cnJpYWdlUmV0dXJuKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHN0cmlwcGVkLmFw
cGVuZChjaGFyYWN0ZXIpOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChzdHJpcHBl
ZCk7Cit9CisKK3N0YXRpYyBib29sIGlzTm90TGluZUJyZWFrKFVDaGFyIGNoKSB7IHJldHVybiBj
aCAhPSBuZXdsaW5lQ2hhcmFjdGVyICYmIGNoICE9IGNhcnJpYWdlUmV0dXJuOyB9CisKK2Jvb2wg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlzUGxhY2Vob2xkZXJFbXB0eSgpIGNvbnN0Cit7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZShw
bGFjZWhvbGRlckF0dHIpOworICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZS5zdHJpbmcoKS5maW5k
KGlzTm90TGluZUJyZWFrKSA9PSBub3RGb3VuZDsKK30KKworYm9vbCBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudDo6cGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBjb25zdAoreworICAgIHJl
dHVybiBzdXBwb3J0c1BsYWNlaG9sZGVyKCkKKyAgICAgICAgJiYgaXNFbXB0eVZhbHVlKCkKKyAg
ICAgICAgJiYgZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzCisgICAgICAgICYmICFp
c1BsYWNlaG9sZGVyRW1wdHkoKTsKK30KKwordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGJvb2wgcGxhY2Vob2xkZXJWYWx1ZUNoYW5n
ZWQpCit7CisgICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIoKSAmJiByZW5kZXJlcigpKQorICAg
ICAgICB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT51cGRhdGVQbGFjZWhvbGRlclZp
c2liaWxpdHkocGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSwgcGxhY2Vob2xkZXJWYWx1ZUNo
YW5nZWQpOworfQorCitSZW5kZXJUZXh0Q29udHJvbCogSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6OnRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0KCkKK3sKKyAgICBpZiAoIWlzVGV4dEZv
cm1Db250cm9sKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGRvY3VtZW50KCktPnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJldHVybiB0b1JlbmRlclRleHRD
b250cm9sKHJlbmRlcmVyKCkpOworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCit7CisgICAgc2V0U2VsZWN0aW9uUmFuZ2Uo
c3RhcnQsIG1heChzdGFydCwgc2VsZWN0aW9uRW5kKCkpKTsKK30KKwordm9pZCBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKGludCBlbmQpCit7CisgICAgc2V0U2Vs
ZWN0aW9uUmFuZ2UobWluKGVuZCwgc2VsZWN0aW9uU3RhcnQoKSksIGVuZCk7Cit9CisKK3ZvaWQg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdCgpCit7CisgICAgc2V0U2VsZWN0aW9u
UmFuZ2UoMCwgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOworfQorCit2b2lkIEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQp
Cit7CisgICAgV2ViQ29yZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgc3RhcnQsIGVuZCk7Cit9
CisKK2ludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoKSBjb25z
dAoreworICAgIGlmICghaXNUZXh0Rm9ybUNvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcyAmJiBjYWNoZWRTZWxlY3Rp
b25TdGFydCgpID49IDApCisgICAgICAgIHJldHVybiBjYWNoZWRTZWxlY3Rpb25TdGFydCgpOwor
ICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRvUmVu
ZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvblN0YXJ0KCk7Cit9CisKK2ludCBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uRW5kKCkgY29uc3QKK3sKKyAgICBp
ZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChkb2N1
bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYgY2FjaGVkU2VsZWN0aW9uRW5kKCkgPj0g
MCkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFNlbGVjdGlvbkVuZCgpOworICAgIGlmICghcmVuZGVy
ZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wo
cmVuZGVyZXIoKSktPnNlbGVjdGlvbkVuZCgpOworfQorCitQYXNzUmVmUHRyPFJhbmdlPiBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIXJl
bmRlcmVyKCkgfHwgIWlzVGV4dEZvcm1Db250cm9sKCkgfHwgY2FjaGVkU2VsZWN0aW9uU3RhcnQo
KSA8IDAgfHwgY2FjaGVkU2VsZWN0aW9uRW5kKCkgPCAwKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uKGNhY2hl
ZFNlbGVjdGlvblN0YXJ0KCksIGNhY2hlZFNlbGVjdGlvbkVuZCgpKTsKK30KKwordm9pZCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBh
dHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcGxhY2Vob2xkZXJBdHRyKQorICAgICAg
ICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkodHJ1ZSk7CisgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG9uc2VsZWN0QXR0cikKKyAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
dGhpcywgYXR0cikpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNoYW5nZUF0dHIp
CisgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2
ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKKyAgICBlbHNl
CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJjb3JlCkluZGV4OiBXZWJDb3Jl
L2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3Jl
L2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNzMg
KzIzLDI4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIKIAot
I2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCi0jaW5j
bHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudFBhcnNlci5oIgotI2luY2x1ZGUgIkVsZW1lbnRS
YXJlRGF0YS5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgi
Ci0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJMYWJlbHNOb2RlTGlzdC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJS
ZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgotI2luY2x1ZGUgIlJl
bmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUg
IlZhbGlkYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKICNp
bmNsdWRlICJWYWxpZGl0eVN0YXRlLmgiCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLSAgICA6IEhUTUxFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9mb3JtKGZvcm0pCi0gICAgLCBtX2Rpc2FibGVk
KGZhbHNlKQotICAgICwgbV9yZWFkT25seShmYWxzZSkKLSAgICAsIG1fcmVxdWlyZWQoZmFsc2Up
Ci0gICAgLCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQotICAgICwgbV93aWxsVmFsaWRh
dGVJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1fd2lsbFZhbGlkYXRlKHRydWUpCi0gICAgLCBt
X2lzVmFsaWQodHJ1ZSkKLXsKLSAgICBpZiAoIW1fZm9ybSkKLSAgICAgICAgbV9mb3JtID0gZmlu
ZEZvcm1BbmNlc3RvcigpOwotICAgIGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVnaXN0
ZXJGb3JtRWxlbWVudCh0aGlzKTsKLX0KIAotSFRNTEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxG
b3JtQ29udHJvbEVsZW1lbnQoKQorRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogbV9mb3JtKGZvcm0pCiB7Ci0g
ICAgaWYgKG1fZm9ybSkKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsK
IH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKQorRm9ybUFzc29jaWF0
ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KCkKIHsKLSAgICBoaWRlVmlzaWJsZVZh
bGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgSFRNTEVsZW1lbnQ6OmRldGFjaCgpOwogfQogCi1ib29s
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1Ob1ZhbGlkYXRlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gIWdldEF0dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0dHIpLmlzTnVsbCgpOwotfQotCi1W
YWxpZGl0eVN0YXRlKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2YWxpZGl0eSgpCitWYWxpZGl0
eVN0YXRlKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkaXR5KCkKIHsKICAgICBpZiAoIW1f
dmFsaWRpdHlTdGF0ZSkKICAgICAgICAgbV92YWxpZGl0eVN0YXRlID0gVmFsaWRpdHlTdGF0ZTo6
Y3JlYXRlKHRoaXMpOwpAQCAtOTcsODYgKzUyLDM3IEBAIFZhbGlkaXR5U3RhdGUqIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnYKICAgICByZXR1cm4gbV92YWxpZGl0eVN0YXRlLmdldCgpOwogfQog
Ci12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikKK3N0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIGZpbmRGb3JtT3duZXIoSFRNTEVs
ZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIp
IHsKLSAgICAgICAgYm9vbCBvbGREaXNhYmxlZCA9IG1fZGlzYWJsZWQ7Ci0gICAgICAgIG1fZGlz
YWJsZWQgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgICAgIGlmIChvbGREaXNhYmxlZCAhPSBtX2Rp
c2FibGVkKSB7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgICAgICAg
ICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkp
Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRl
cmVyKCksIEVuYWJsZWRTdGF0ZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSByZWFkb25seUF0dHIpIHsKLSAgICAgICAgYm9vbCBvbGRSZWFkT25seSA9IG1fcmVh
ZE9ubHk7Ci0gICAgICAgIG1fcmVhZE9ubHkgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgICAgIGlm
IChvbGRSZWFkT25seSAhPSBtX3JlYWRPbmx5KSB7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHls
ZSgpLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUo
KS0+c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIFJlYWRPbmx5U3RhdGUpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVxdWlyZWRBdHRyKSB7Ci0gICAgICAgIGJv
b2wgb2xkUmVxdWlyZWQgPSBtX3JlcXVpcmVkOwotICAgICAgICBtX3JlcXVpcmVkID0gIWF0dHIt
PmlzTnVsbCgpOwotICAgICAgICBpZiAob2xkUmVxdWlyZWQgIT0gbV9yZXF1aXJlZCkgewotICAg
ICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci0gICAgICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7IC8vIFVwZGF0ZXMgZm9yIDpyZXF1aXJlZCA6b3B0aW9uYWwgY2xhc3Nlcy4K
LSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7Ci0gICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwotfQotCi12
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCgpCi17Ci0gICAgQVNTRVJUKCFhdHRh
Y2hlZCgpKTsKLQotICAgIEhUTUxFbGVtZW50OjphdHRhY2goKTsKLQotICAgIC8vIFRoZSBjYWxs
IHRvIHVwZGF0ZUZyb21FbGVtZW50KCkgbmVlZHMgdG8gZ28gYWZ0ZXIgdGhlIGNhbGwgdGhyb3Vn
aAotICAgIC8vIHRvIHRoZSBiYXNlIGNsYXNzJ3MgYXR0YWNoKCkgYmVjYXVzZSB0aGF0IGNhbiBz
b21ldGltZXMgZG8gYSBjbG9zZQotICAgIC8vIG9uIHRoZSByZW5kZXJlci4KLSAgICBpZiAocmVu
ZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICAg
ICAgCi0gICAgLy8gRm9jdXMgdGhlIGVsZW1lbnQgaWYgaXQgc2hvdWxkIGhvbm91ciBpdHMgYXV0
b2ZvY3VzIGF0dHJpYnV0ZS4KLSAgICAvLyBXZSBoYXZlIHRvIGRldGVybWluZSBpZiB0aGUgZWxl
bWVudCBpcyBhIFRleHRBcmVhL0lucHV0L0J1dHRvbi9TZWxlY3QsCi0gICAgLy8gaWYgaW5wdXQg
dHlwZSBoaWRkZW4gaWdub3JlIGF1dG9mb2N1cy4gU28gaWYgZGlzYWJsZWQgb3IgcmVhZG9ubHku
Ci0gICAgYm9vbCBpc0lucHV0VHlwZUhpZGRlbiA9IGZhbHNlOwotICAgIGlmIChoYXNUYWdOYW1l
KGlucHV0VGFnKSkKLSAgICAgICAgaXNJbnB1dFR5cGVIaWRkZW4gPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4odGhpcyktPmlzSW5wdXRUeXBlSGlkZGVuKCk7Ci0KLSAgICBpZiAoYXV0
b2ZvY3VzKCkgJiYgcmVuZGVyZXIoKSAmJiAhZG9jdW1lbnQoKS0+aWdub3JlQXV0b2ZvY3VzKCkg
JiYgIWlzUmVhZE9ubHlGb3JtQ29udHJvbCgpICYmCi0gICAgICAgICAgICAoKGhhc1RhZ05hbWUo
aW5wdXRUYWcpICYmICFpc0lucHV0VHlwZUhpZGRlbikgfHwgaGFzVGFnTmFtZShzZWxlY3RUYWcp
IHx8Ci0gICAgICAgICAgICAgIGhhc1RhZ05hbWUoYnV0dG9uVGFnKSB8fCBoYXNUYWdOYW1lKHRl
eHRhcmVhVGFnKSkpCi0gICAgICAgICBmb2N1cygpOworICAgIGZvciAoTm9kZSogbm9kZSA9IGVs
ZW1lbnQtPnBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewor
ICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShmb3JtVGFnKSkKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihub2RlKTsKKyAgICB9CisgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShi
b29sIGRlZXApCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSgp
CiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7Ci0gICAgICAgIGRvY3Vt
ZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKLSAgICAg
ICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZhc3RHZXRB
dHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFz
VGFnTmFtZShmb3JtVGFnKSkgeworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxl
bWVudCh0aGlzKTsKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikp
IHsKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhG
b3JtQXR0cmlidXRlKHRoaXMpOworICAgICAgICBFbGVtZW50KiBmb3JtRWxlbWVudCA9IGVsZW1l
bnQtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUo
Zm9ybUF0dHIpKTsKKyAgICAgICAgaWYgKGZvcm1FbGVtZW50ICYmIGZvcm1FbGVtZW50LT5oYXNU
YWdOYW1lKGZvcm1UYWcpKSB7CiAgICAgICAgICAgICBpZiAobV9mb3JtKQogICAgICAgICAgICAg
ICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBtX2Zvcm0g
PSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIG1f
Zm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGZvcm1FbGVtZW50KTsKICAgICAg
ICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKICAgICAgICAgfQogICAg
IH0KICAgICBpZiAoIW1fZm9ybSkgewogICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ug
b2YgYSBuZXcgZm9ybSBlbGVtZW50IGJlaW5nIGNyZWF0ZWQgYnkKICAgICAgICAgLy8gSmF2YVNj
cmlwdCBhbmQgaW5zZXJ0ZWQgaW5zaWRlIGEgZm9ybS4gIEluIHRoZSBjYXNlIG9mIHRoZSBwYXJz
ZXIKLSAgICAgICAgLy8gc2V0dGluZyBhIGZvcm0sIHdlIHdpbGwgYWxyZWFkeSBoYXZlIGEgbm9u
LW51bGwgdmFsdWUgZm9yIG1fZm9ybSwgCisgICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3
aWxsIGFscmVhZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sCiAgICAgICAgIC8v
IGFuZCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgICAgICBtX2Zvcm0gPSBm
aW5kRm9ybUFuY2VzdG9yKCk7CisgICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtT3duZXIoZWxlbWVu
dCk7CiAgICAgICAgIGlmIChtX2Zvcm0pCiAgICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9y
bUVsZW1lbnQodGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmNo
ZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAgICAgfQotCi0gICAgSFRNTEVs
ZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoZGVlcCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgTm9kZSog
ZmluZFJvb3QoTm9kZSogbikKQEAgLTE4NywyNTYgKzkzLDE5IEBAIHN0YXRpYyBpbmxpbmUgTm9k
ZSogZmluZFJvb3QoTm9kZSogbikKICAgICByZXR1cm4gcm9vdDsKIH0KIAotdm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKQordm9pZCBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSgpCiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRy
aWJ1dGUoZm9ybUF0dHIpKQotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1l
bnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRv
SFRNTEVsZW1lbnQodGhpcyk7CisgICAgaWYgKGVsZW1lbnQtPmZhc3RIYXNBdHRyaWJ1dGUoZm9y
bUF0dHIpKQorICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1l
bnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKIAogICAgIC8vIElmIHRoZSBmb3JtIGFuZCBlbGVt
ZW50IGFyZSBib3RoIGluIHRoZSBzYW1lIHRyZWUsIHByZXNlcnZlIHRoZSBjb25uZWN0aW9uIHRv
IHRoZSBmb3JtLgogICAgIC8vIE90aGVyd2lzZSwgbnVsbCBvdXQgb3VyIGZvcm0gYW5kIHJlbW92
ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZm9ybSdzIGxpc3Qgb2YgZWxlbWVudHMuCi0gICAgaWYgKG1f
Zm9ybSAmJiBmaW5kUm9vdCh0aGlzKSAhPSBmaW5kUm9vdChtX2Zvcm0pKSB7Ci0gICAgICAgIG1f
Zm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgIG1fZm9ybSA9IDA7Ci0gICAg
fQotCi0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShkZWVwKTsKLX0KLQotY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUoKSBj
b25zdAotewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGZhc3RHZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpOwotICAgIHJldHVybiBuYW1lLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogbmFtZTsK
LX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROYW1lKGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG5hbWVBdHRyLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2
ZW50KCkKLXsKLSAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNo
YW5nZUV2ZW50LCB0cnVlLCBmYWxzZSkpOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnNldERpc2FibGVkKGJvb2wgYikKLXsKLSAgICBzZXRBdHRyaWJ1dGUoZGlzYWJsZWRBdHRy
LCBiID8gIiIgOiAwKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdXRvZm9j
dXMoKSBjb25zdAotewotICAgIHJldHVybiBoYXNBdHRyaWJ1dGUoYXV0b2ZvY3VzQXR0cik7Ci19
Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3JlcXVpcmVkOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVGcm9tRWxlbWVudENh
bGxiYWNrKE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUX0FSRyhub2RlLCBub2RlLT5pc0VsZW1l
bnROb2RlKCkpOwotICAgIEFTU0VSVF9BUkcobm9kZSwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5v
ZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKTsKLSAgICBBU1NFUlQobm9kZS0+cmVuZGVyZXIo
KSk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpKQot
ICAgICAgICByZW5kZXJlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLX0KLQotdm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCi17Ci0gICAg
SFRNTEVsZW1lbnQ6OnJlY2FsY1N0eWxlKGNoYW5nZSk7Ci0KLSAgICAvLyB1cGRhdGVGcm9tRWxl
bWVudCgpIGNhbiBjYXVzZSB0aGUgc2VsZWN0aW9uIHRvIGNoYW5nZSwgYW5kIGluIHR1cm4KLSAg
ICAvLyB0cmlnZ2VyIHN5bmNocm9ub3VzIGxheW91dCwgc28gaXQgbXVzdCBub3QgYmUgY2FsbGVk
IGR1cmluZyBzdHlsZSByZWNhbGMuCi0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHF1ZXVl
UG9zdEF0dGFjaENhbGxiYWNrKHVwZGF0ZUZyb21FbGVtZW50Q2FsbGJhY2ssIHRoaXMpOwotfQot
Ci1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAotewot
ICAgIHJldHVybiAhZGlzYWJsZWQoKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8IAotICAgICAg
ICAhcmVuZGVyZXIoKS0+aXNCb3goKSB8fCB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+c2l6ZSgp
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIEhUTUxFbGVtZW50Ojpp
c0ZvY3VzYWJsZSBoYW5kbGVzIHZpc2liaWxpdHkgYW5kIGNhbGxzIHN1cG9ydHNGb2N1cyB3aGlj
aAotICAgIC8vIHdpbGwgY292ZXIgdGhlIGRpc2FibGVkIGNhc2UuCi0gICAgcmV0dXJuIEhUTUxF
bGVtZW50Ojppc0ZvY3VzYWJsZSgpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Ci17Ci0gICAg
aWYgKGlzRm9jdXNhYmxlKCkpCi0gICAgICAgIGlmIChkb2N1bWVudCgpLT5mcmFtZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT50YWJz
VG9BbGxDb250cm9scyhldmVudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAotewotI2lmIFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCi0gICAgcmV0dXJuIEhUTUxFbGVtZW50Ojppc01vdXNl
Rm9jdXNhYmxlKCk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1zaG9y
dCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0Ci17Ci0gICAgLy8gU2tp
cCB0aGUgc3VwcG9ydHNGb2N1cyBjaGVjayBpbiBIVE1MRWxlbWVudC4KLSAgICByZXR1cm4gRWxl
bWVudDo6dGFiSW5kZXgoKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWNh
bGNXaWxsVmFsaWRhdGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBTaG91bGQgcmV0dXJuIGZh
bHNlIGlmIHRoaXMgZWxlbWVudCBoYXMgYSBkYXRhbGlzdCBlbGVtZW50IGFzIGFuCi0gICAgLy8g
YW5jZXN0b3IuIFNlZSBIVE1MNSA0LjEwLjEwICdUaGUgZGF0YWxpc3QgZWxlbWVudC4nCi0gICAg
cmV0dXJuICFtX2Rpc2FibGVkICYmICFtX3JlYWRPbmx5OwotfQotCi1ib29sIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3dpbGxWYWxp
ZGF0ZUluaXRpYWxpemVkKSB7Ci0gICAgICAgIG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQgPSB0
cnVlOwotICAgICAgICBtX3dpbGxWYWxpZGF0ZSA9IHJlY2FsY1dpbGxWYWxpZGF0ZSgpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZhaWxzLCBz
ZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCkgaXMgbm90Ci0gICAgICAgIC8vIGNhbGxlZCBjb3Jy
ZWN0bHkgd2hlbiBzb21ldGhpbmcgd2hpY2ggY2hhbmdlcyByZWNhbGNXaWxsVmFsaWRhdGUoKSBy
ZXN1bHQKLSAgICAgICAgLy8gaXMgdXBkYXRlZC4KLSAgICAgICAgQVNTRVJUKG1fd2lsbFZhbGlk
YXRlID09IHJlY2FsY1dpbGxWYWxpZGF0ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fd2lsbFZh
bGlkYXRlOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZh
bGlkYXRlQ2hlY2soKQotewotICAgIC8vIFdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgd2lsbFZhbGlk
dGUgaW1tZWRpYXRlbHkgYmVjYXVzZSB3aWxsVmFsaWRhdGUKLSAgICAvLyBjaGFuZ2UgY2FuIGNh
dXNlcyBzdHlsZSBjaGFuZ2UuCi0gICAgYm9vbCBuZXdXaWxsVmFsaWRhdGUgPSByZWNhbGNXaWxs
VmFsaWRhdGUoKTsKLSAgICBpZiAobV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCAmJiBtX3dpbGxW
YWxpZGF0ZSA9PSBuZXdXaWxsVmFsaWRhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dpbGxW
YWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICBtX3dpbGxWYWxpZGF0ZSA9IG5ld1dpbGxW
YWxpZGF0ZTsKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgaWYgKCFtX3dpbGxWYWxp
ZGF0ZSkKLSAgICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwotfQotCi1TdHJp
bmcgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRhdGlvbk1lc3NhZ2UoKQotewotICAgIHJl
dHVybiB2YWxpZGl0eSgpLT52YWxpZGF0aW9uTWVzc2FnZSgpOwotfQotCi12b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCi17Ci0gICAg
UGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAg
IHJldHVybjsKLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpZiAocmVuZGVyZXIoKSAmJiB3aWxs
VmFsaWRhdGUoKSkgewotICAgICAgICBtZXNzYWdlID0gdmFsaWRhdGlvbk1lc3NhZ2UoKS5zdHJp
cFdoaXRlU3BhY2UoKTsKLSAgICAgICAgLy8gSFRNTDUgc3BlY2lmaWNhdGlvbiBkb2Vzbid0IGFz
ayBVQSB0byBzaG93IHRoZSB0aXRsZSBhdHRyaWJ1dGUgdmFsdWUKLSAgICAgICAgLy8gd2l0aCB0
aGUgdmFsaWRhdGlvbk1lc3NhZ2UuICBIb3dldmVyLCB0aGlzIGJlaGF2aW9yIGlzIHNhbWUgYXMg
T3BlcmEKLSAgICAgICAgLy8gYW5kIHRoZSBzcGVjaWZpY2F0aW9uIGRlc2NyaWJlcyBzdWNoIGJl
aGF2aW9yIGFzIGFuIGV4YW1wbGUuCi0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUg
PSBnZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKLSAgICAgICAgaWYgKCFtZXNzYWdlLmlzRW1wdHko
KSAmJiAhdGl0bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCgnXG4n
KTsKLSAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKHRpdGxlKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAoIW1fdmFsaWRhdGlvbk1lc3NhZ2UpIHsKLSAgICAgICAgbV92YWxpZGF0aW9uTWVz
c2FnZSA9IFZhbGlkYXRpb25NZXNzYWdlOjpjcmVhdGUodGhpcyk7Ci0gICAgICAgIG1fdmFsaWRh
dGlvbk1lc3NhZ2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfSBlbHNlIGlmIChtZXNzYWdl
LmlzRW1wdHkoKSkKLSAgICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwotICAg
IGVsc2UgaWYgKG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSAhPSBtZXNzYWdlKQotICAg
ICAgICBtX3ZhbGlkYXRpb25NZXNzYWdlLT5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotfQotCi12b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQot
ewotICAgIG1fdmFsaWRhdGlvbk1lc3NhZ2UgPSAwOwotfQotCi1TdHJpbmcgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6dmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV92YWxpZGF0aW9uTWVzc2FnZSA/IG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSA6
IFN0cmluZygpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRp
dHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZh
bGlkQ29udHJvbHMpCi17Ci0gICAgaWYgKCF3aWxsVmFsaWRhdGUoKSB8fCBpc1ZhbGlkRm9ybUNv
bnRyb2xFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIEFuIGV2ZW50IGhh
bmRsZXIgY2FuIGRlcmVmIHRoaXMgb2JqZWN0LgotICAgIFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50PiBwcm90ZWN0b3IodGhpcyk7Ci0gICAgUmVmUHRyPERvY3VtZW50PiBvcmlnaW5hbERv
Y3VtZW50KGRvY3VtZW50KCkpOwotICAgIGJvb2wgbmVlZHNEZWZhdWx0QWN0aW9uID0gZGlzcGF0
Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlkRXZlbnQsIGZhbHNlLCB0
cnVlKSk7Ci0gICAgaWYgKG5lZWRzRGVmYXVsdEFjdGlvbiAmJiB1bmhhbmRsZWRJbnZhbGlkQ29u
dHJvbHMgJiYgaW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0gZG9jdW1lbnQoKSkK
LSAgICAgICAgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLT5hcHBlbmQodGhpcyk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzVmFsaWRGb3Jt
Q29udHJvbEVsZW1lbnQoKQotewotICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZh
aWxzLCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKSBpcyBub3QgY2FsbGVkCi0gICAgLy8gY29ycmVj
dGx5IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMgdmFsaWRpdHkgaXMgdXBkYXRlZC4KLSAg
ICBBU1NFUlQobV9pc1ZhbGlkID09IHZhbGlkaXR5KCktPnZhbGlkKCkpOwotICAgIHJldHVybiBt
X2lzVmFsaWQ7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmVlZHNWYWxp
ZGl0eUNoZWNrKCkKLXsKLSAgICBib29sIG5ld0lzVmFsaWQgPSB2YWxpZGl0eSgpLT52YWxpZCgp
OwotICAgIGlmICh3aWxsVmFsaWRhdGUoKSAmJiBuZXdJc1ZhbGlkICE9IG1faXNWYWxpZCkgewot
ICAgICAgICAvLyBVcGRhdGUgc3R5bGUgZm9yIHBzZXVkbyBjbGFzc2VzIHN1Y2ggYXMgOnZhbGlk
IDppbnZhbGlkLgotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfQotICAgIG1f
aXNWYWxpZCA9IG5ld0lzVmFsaWQ7Ci0KLSAgICAvLyBVcGRhdGVzIG9ubHkgaWYgdGhpcyBjb250
cm9sIGFscmVhZHkgaGFzIGEgdmFsaWR0aW9uIG1lc3NhZ2UuCi0gICAgaWYgKCF2aXNpYmxlVmFs
aWRhdGlvbk1lc3NhZ2UoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQ2FsbHMgdXBkYXRlVmlz
aWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgZXZlbiBpZiBtX2lzVmFsaWQgaXMgbm90Ci0gICAgICAg
IC8vIGNoYW5nZWQgYmVjYXVzZSBhIHZhbGlkYXRpb24gbWVzc2FnZSBjYW4gYmUgY2hhZ25lZC4K
LSAgICAgICAgdXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgfQotfQotCi12
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmlu
ZyYgZXJyb3IpCi17Ci0gICAgdmFsaWRpdHkoKS0+c2V0Q3VzdG9tRXJyb3JNZXNzYWdlKGVycm9y
KTsKLX0KLSAgICAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2
ZW50KCkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQotICAgICAgICBkb2N1bWVudCgp
LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+Zm9ybURpZEZvY3VzKHRoaXMpOwotCi0gICAg
SFRNTEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCgpOwotfQotCi12b2lkIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKLXsKLSAgICBpZiAoZG9jdW1lbnQoKS0+
cGFnZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+
Zm9ybURpZEJsdXIodGhpcyk7Ci0KLSAgICBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQo
KTsKLSAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci19Ci0KLUhUTUxGb3JtRWxl
bWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlydHVhbEZvcm0oKSBjb25zdAotewotICAg
IHJldHVybiBtX2Zvcm07CisgICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9vdChlbGVtZW50KSAhPSBm
aW5kUm9vdChtX2Zvcm0pKQorICAgICAgICByZW1vdmVGcm9tRm9ybSgpOwogfQogCi1ib29sIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdAotewot
ICAgIHJldHVybiBpc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSAmJiBtX2Zvcm0gJiYgbV9mb3Jt
LT5kZWZhdWx0QnV0dG9uKCkgPT0gdGhpczsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpyZW1vdmVGcm9tRm9ybSgpCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3Zl
RnJvbUZvcm0oKQogewogICAgIGlmICghbV9mb3JtKQogICAgICAgICByZXR1cm47CkBAIC00NDQs
Mjc3ICsxMTMsNTkgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVGcm9tRgog
ICAgIG1fZm9ybSA9IDA7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVzZXRG
b3JtT3duZXIoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQ6OnJlc2V0Rm9ybU93bmVyKEhUTUxGb3JtRWxlbWVudCogZm9ybSkKIHsKKyAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQodGhpcyk7CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBmb3JtSWQoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShmb3JtQXR0cikpOwogICAgIGlm
IChtX2Zvcm0pIHsKLSAgICAgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkKKyAg
ICAgICAgaWYgKGZvcm1JZC5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
bV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKICAgICB9CiAgICAgbV9mb3JtID0gMDsK
LSAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKKyAgICBpZiAoIWZvcm1JZC5p
c051bGwoKSkgewogICAgICAgICAvLyBUaGUgSFRNTDUgc3BlYyBzYXlzIHRoYXQgdGhlIGVsZW1l
bnQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAogICAgICAgICAvLyB0aGUgZmlyc3QgZWxlbWVu
dCBpbiB0aGUgZG9jdW1lbnQgdG8gaGF2ZSBhbiBJRCB0aGF0IGVxdWFsIHRvCiAgICAgICAgIC8v
IHRoZSB2YWx1ZSBvZiBmb3JtIGF0dHJpYnV0ZSwgc28gd2UgcHV0IHRoZSByZXN1bHQgb2YKICAg
ICAgICAgLy8gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoKSBvdmVyIHRoZSBnaXZlbiBlbGVt
ZW50LgotICAgICAgICBFbGVtZW50KiBmaXJzdEVsZW1lbnQgPSBkb2N1bWVudCgpLT5nZXRFbGVt
ZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7CisgICAgICAgIEVsZW1lbnQqIGZp
cnN0RWxlbWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZvcm1JZCk7
CiAgICAgICAgIGlmIChmaXJzdEVsZW1lbnQgJiYgZmlyc3RFbGVtZW50LT5oYXNUYWdOYW1lKGZv
cm1UYWcpKQogICAgICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50
Kj4oZmlyc3RFbGVtZW50KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9mb3JtID0gZm9y
bTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOworICAg
ICAgICBtX2Zvcm0gPSBmaW5kRm9ybU93bmVyKGVsZW1lbnQpOwogICAgIGlmIChtX2Zvcm0pCiAg
ICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLSAgICBlbHNlCi0gICAg
ICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Ci19
Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1
dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKLXsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09
IGZvcm1BdHRyKSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsK
LSAgICAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1vdmVkLiBXZSBuZWVkIHRvIHJl
c2V0IGZvcm0gb3duZXIgaGVyZS4KLSAgICAgICAgICAgIGlmIChtX2Zvcm0pCi0gICAgICAgICAg
ICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgICAgIG1fZm9y
bSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICAgICAgICAgIGlmIChtX2Zvcm0pCi0gICAgICAg
ICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5h
ZGRCdXR0b24odGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzZXRGb3JtT3du
ZXIoMCk7Ci0gICAgfQotICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHBy
ZXNlcnZlRGVjbHMpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzTGFiZWxh
YmxlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogQWRkIG1ldGVyVGFnIGFuZCBvdXRwdXRUYWcg
dG8gdGhlIGxpc3Qgb25jZSB3ZSBzdXBwb3J0IHRoZW0uCi0gICAgcmV0dXJuIGhhc1RhZ05hbWUo
YnV0dG9uVGFnKSB8fCBoYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBoYXNUYWdOYW1lKGtleWdlblRh
ZykKLSNpZiBFTkFCTEUoTUVURVJfVEFHKQotICAgICAgICB8fCBoYXNUYWdOYW1lKG1ldGVyVGFn
KQotI2VuZGlmCi0jaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKLSAgICAgICAgfHwgaGFzVGFnTmFt
ZShwcm9ncmVzc1RhZykKLSNlbmRpZgotICAgICAgICB8fCBoYXNUYWdOYW1lKHNlbGVjdFRhZykg
fHwgaGFzVGFnTmFtZSh0ZXh0YXJlYVRhZyk7Ci19Ci0KLVBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmxhYmVscygpCi17Ci0gICAgaWYgKCFpc0xhYmVsYWJsZSgp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWRvY3VtZW50KCkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIAotICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IE5vZGU6OmVuc3VyZVJhcmVEYXRh
KCk7Ci0gICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkgewotICAgICAgICBkYXRhLT5zZXROb2Rl
TGlzdHMoTm9kZUxpc3RzTm9kZURhdGE6OmNyZWF0ZSgpKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+
YWRkTm9kZUxpc3RDYWNoZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gTGFiZWxzTm9kZUxp
c3Q6OmNyZWF0ZSh0aGlzKTsKLX0KLSAgICAKLUhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQotICAgIDogSFRNTEZv
cm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2MsIGYpCi17Ci0gICAgZG9jdW1lbnQoKS0+cmVn
aXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKLX0KLQotSFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZTo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoKQotewotICAg
IGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKLX0KLQot
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp3aWxsTW92ZVRvTmV3T3duZXJE
b2N1bWVudCgpCi17Ci0gICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aFN0
YXRlKHRoaXMpOwotICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25l
ckRvY3VtZW50KCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6
ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpCi17Ci0gICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJG
b3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpk
aWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZTo6YXV0b0NvbXBsZXRlKCkgY29uc3QKLXsKLSAgICBpZiAoIWZvcm0oKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZvcm0oKS0+YXV0b0NvbXBsZXRlKCk7
Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6c2hvdWxkU2F2ZUFu
ZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QKLXsKLSAgICAvLyBXZSBkb24ndCBzYXZl
L3Jlc3RvcmUgY29udHJvbCBzdGF0ZSBpbiBhIGZvcm0gd2l0aCBhdXRvY29tcGxldGU9b2ZmLgot
ICAgIHJldHVybiBhdHRhY2hlZCgpICYmIGF1dG9Db21wbGV0ZSgpOwotfQotCi12b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCi17Ci0g
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0KLSAg
ICAvLyBXZSBkb24ndCBzYXZlIHN0YXRlIG9mIGEgY29udHJvbCB3aXRoIHNob3VsZFNhdmVBbmRS
ZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpPWZhbHNlLgotICAgIC8vIEJ1dCB3ZSBuZWVkIHRvIHNr
aXAgcmVzdG9yaW5nIHByb2Nlc3MgdG9vIGJlY2F1c2UgYSBjb250cm9sIGluIGFub3RoZXIKLSAg
ICAvLyBmb3JtIG1pZ2h0IGhhdmUgdGhlIHNhbWUgcGFpciBvZiBuYW1lIGFuZCB0eXBlIGFuZCBz
YXZlZCBpdHMgc3RhdGUuCi0gICAgaWYgKCFzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9s
U3RhdGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50
KCk7Ci0gICAgaWYgKGRvYy0+aGFzU3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoKSkgewotICAgICAg
ICBTdHJpbmcgc3RhdGU7Ci0gICAgICAgIGlmIChkb2MtPnRha2VTdGF0ZUZvckZvcm1FbGVtZW50
KG5hbWUoKS5pbXBsKCksIHR5cGUoKS5pbXBsKCksIHN0YXRlKSkKLSAgICAgICAgICAgIHJlc3Rv
cmVGb3JtQ29udHJvbFN0YXRlKHN0YXRlKTsKLSAgICB9Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCi17
Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxlQ29u
dGVudENoYW5nZWRFdmVudCAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzVGV4dENvbnRy
b2woKSkgewotICAgICAgICB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zdWJ0cmVl
SGFzQ2hhbmdlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0KLUhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCi0g
ICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRhZ05hbWUsIGRvYywgZm9ybSkK
LXsKLX0KLQotSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCgpCi17Ci19Ci0KLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3Bh
dGNoRm9jdXNFdmVudCgpCi17Ci0gICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIoKSkKLSAgICAg
ICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKLSAgICBoYW5kbGVGb2N1c0V2
ZW50KCk7Ci0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hGb2N1
c0V2ZW50KCk7CiB9CiAKLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNo
Qmx1ckV2ZW50KCkKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRlQ2hh
bmdlZCgpCiB7Ci0gICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIoKSkKLSAgICAgICAgdXBkYXRl
UGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKLSAgICBoYW5kbGVCbHVyRXZlbnQoKTsKLSAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEJsdXJFdmVudCgpOwot
fQotCi1TdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwcGVkUGxhY2Vob2xk
ZXIoKSBjb25zdAotewotICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRNTDUgc3BlY2lmaWNhdGlv
biwgd2UgbmVlZCB0byByZW1vdmUgQ1IgYW5kIExGIGZyb20KLSAgICAvLyB0aGUgYXR0cmlidXRl
IHZhbHVlLgotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRy
aWJ1dGUocGxhY2Vob2xkZXJBdHRyKTsKLSAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5z
KG5ld2xpbmVDaGFyYWN0ZXIpICYmICFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhjYXJyaWFnZVJl
dHVybikpCi0gICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTsKLQotICAgIFZlY3RvcjxVQ2hh
cj4gc3RyaXBwZWQ7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlVmFsdWUubGVuZ3Ro
KCk7Ci0gICAgc3RyaXBwZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGNoYXJhY3RlciA9
IGF0dHJpYnV0ZVZhbHVlW2ldOwotICAgICAgICBpZiAoY2hhcmFjdGVyID09IG5ld2xpbmVDaGFy
YWN0ZXIgfHwgY2hhcmFjdGVyID09IGNhcnJpYWdlUmV0dXJuKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIHN0cmlwcGVkLmFwcGVuZChjaGFyYWN0ZXIpOwotICAgIH0KLSAgICByZXR1
cm4gU3RyaW5nOjphZG9wdChzdHJpcHBlZCk7Ci19Ci0KLXN0YXRpYyBib29sIGlzTm90TGluZUJy
ZWFrKFVDaGFyIGNoKSB7IHJldHVybiBjaCAhPSBuZXdsaW5lQ2hhcmFjdGVyICYmIGNoICE9IGNh
cnJpYWdlUmV0dXJuOyB9Ci0KLWJvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlzUGxh
Y2Vob2xkZXJFbXB0eSgpIGNvbnN0Ci17Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1
dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpOwotICAgIHJldHVybiBhdHRy
aWJ1dGVWYWx1ZS5zdHJpbmcoKS5maW5kKGlzTm90TGluZUJyZWFrKSA9PSBub3RGb3VuZDsKLX0K
LQotYm9vbCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGxhY2Vob2xkZXJTaG91bGRCZVZp
c2libGUoKSBjb25zdAotewotICAgIHJldHVybiBzdXBwb3J0c1BsYWNlaG9sZGVyKCkKLSAgICAg
ICAgJiYgaXNFbXB0eVZhbHVlKCkKLSAgICAgICAgJiYgZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUo
KSAhPSB0aGlzCi0gICAgICAgICYmICFpc1BsYWNlaG9sZGVyRW1wdHkoKTsKLX0KLQotdm9pZCBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGJv
b2wgcGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQpCi17Ci0gICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xk
ZXIoKSAmJiByZW5kZXJlcigpKQotICAgICAgICB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVy
KCkpLT51cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkocGxhY2Vob2xkZXJTaG91bGRCZVZpc2li
bGUoKSwgcGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQpOwotfQotCi1SZW5kZXJUZXh0Q29udHJvbCog
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0
KCkKLXsKLSAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwot
ICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpOwotfQotCi12b2lkIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCi17
Ci0gICAgc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIG1heChzdGFydCwgc2VsZWN0aW9uRW5kKCkp
KTsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uRW5k
KGludCBlbmQpCi17Ci0gICAgc2V0U2VsZWN0aW9uUmFuZ2UobWluKGVuZCwgc2VsZWN0aW9uU3Rh
cnQoKSksIGVuZCk7Ci19Ci0KLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVj
dCgpCi17Ci0gICAgc2V0U2VsZWN0aW9uUmFuZ2UoMCwgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpOwotfQotCi12b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25S
YW5nZShpbnQgc3RhcnQsIGludCBlbmQpCi17Ci0gICAgV2ViQ29yZTo6c2V0U2VsZWN0aW9uUmFu
Z2UodGhpcywgc3RhcnQsIGVuZCk7Ci19Ci0KLWludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6c2VsZWN0aW9uU3RhcnQoKSBjb25zdAotewotICAgIGlmICghaXNUZXh0Rm9ybUNvbnRyb2wo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkg
IT0gdGhpcyAmJiBjYWNoZWRTZWxlY3Rpb25TdGFydCgpID49IDApCi0gICAgICAgIHJldHVybiBj
YWNoZWRTZWxlY3Rpb25TdGFydCgpOwotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVj
dGlvblN0YXJ0KCk7Ci19Ci0KLWludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0
aW9uRW5kKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYg
Y2FjaGVkU2VsZWN0aW9uRW5kKCkgPj0gMCkKLSAgICAgICAgcmV0dXJuIGNhY2hlZFNlbGVjdGlv
bkVuZCgpOwotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbkVuZCgpOworICAg
IEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKKyAgICBpZiAoIWVs
ZW1lbnQtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgICAgIC8vIFRoZSBmb3Jt
IGF0dHJpYnV0ZSByZW1vdmVkLiBXZSBuZWVkIHRvIHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KKyAg
ICAgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQo
dGhpcyk7CisgICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtT3duZXIoZWxlbWVudCk7CisgICAgICAg
IGlmIChtX2Zvcm0pCisgICAgICAgICAgICBmb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhp
cyk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc2V0Rm9ybU93bmVyKDApOwogfQogCi1QYXNzUmVm
UHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKCkgY29uc3QK
K2NvbnN0IEhUTUxFbGVtZW50KiB0b0hUTUxFbGVtZW50KGNvbnN0IEZvcm1Bc3NvY2lhdGVkRWxl
bWVudCogYXNzb2NpYXRlZEVsZW1lbnQpCiB7Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFpc1Rl
eHRGb3JtQ29udHJvbCgpIHx8IGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPCAwIHx8IGNhY2hlZFNl
bGVjdGlvbkVuZCgpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRvUmVuZGVy
VGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbihjYWNoZWRTZWxlY3Rpb25TdGFydCgp
LCBjYWNoZWRTZWxlY3Rpb25FbmQoKSk7CisgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRN
TEZvcm1Db250cm9sRWxlbWVudCo+KGFzc29jaWF0ZWRFbGVtZW50KTsKKyAgICAvLyBBc3N1bWVz
IHRoZSBlbGVtZW50IGlzIGFuIEhUTUxPYmplY3RFbGVtZW50CisgICAgY29uc3QgSFRNTEVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MT2JqZWN0RWxlbWVudCo+KGFzc29j
aWF0ZWRFbGVtZW50KTsKKyAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcp
KTsKKyAgICByZXR1cm4gZWxlbWVudDsKIH0KIAotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQorSFRNTEVsZW1lbnQq
IHRvSFRNTEVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVudCkK
IHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHBsYWNlaG9sZGVyQXR0cikKLSAgICAgICAgdXBk
YXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KHRydWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBvbnNlbGVjdEF0dHIpCi0gICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLnNlbGVjdEV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMs
IGF0dHIpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jaGFuZ2VBdHRyKQotICAg
ICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwg
Y3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7Ci0gICAgZWxzZQotICAg
ICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxIVE1MRWxlbWVudCo+KHRvSFRNTEVsZW1l
bnQoc3RhdGljX2Nhc3Q8Y29uc3QgRm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4oYXNzb2NpYXRlZEVs
ZW1lbnQpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYmNvcmUKSW5kZXg6IFdlYkNvcmUvaHRt
bC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRm9y
bUFzc29jaWF0ZWRFbGVtZW50LmgJKHJldmlzaW9uIDczMDA3KQkoZnJvbSBXZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oOjczMDA3KQorKysgV2ViQ29yZS9odG1sL0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAg
ICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gK
KyNkZWZpbmUgSFRNTEZvcm1Db250cm9sRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvcm1EYXRhTGlzdDsKK2NsYXNz
IEhUTUxGb3JtRWxlbWVudDsKK2NsYXNzIFJlbmRlclRleHRDb250cm9sOworY2xhc3MgVmFsaWRh
dGlvbk1lc3NhZ2U7CitjbGFzcyBWYWxpZGl0eVN0YXRlOworY2xhc3MgVmlzaWJsZVNlbGVjdGlv
bjsKKworLy8gRklYTUU6IFRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoZXNlIGZvcm0t
YXNzb2NpYXRlZCBlbGVtZW50cy4KKy8vIFNvIGNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgdG8gSFRN
TEZvcm1Bc3NvY2lhdGVkRWxlbWVudC4KK2NsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsZW1lbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQoKTsKKworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9ybTsgfQorICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlkaXR5KCk7CisKKyAgICBib29sIGZv
cm1Ob1ZhbGlkYXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRG
b3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0Y2hlc1Jl
bmRlcmVyID0gYjsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFu
Z2VFdmVudCgpOworCisgICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJs
ZWQ7IH0KKyAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOworCisgICAgdmlydHVhbCBib29sIGlz
Rm9jdXNhYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIERldGVybWluZXMgd2hldGhlciBvciBub3Qg
YSBjb250cm9sIHdpbGwgYmUgYXV0b21hdGljYWxseSBmb2N1c2VkLgorICAgIHZpcnR1YWwgYm9v
bCBhdXRvZm9jdXMoKSBjb25zdDsKKworICAgIGJvb2wgcmVxdWlyZWQoKSBjb25zdDsKKworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1Db250cm9sVHlw
ZSgpOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gZm9y
bUNvbnRyb2xOYW1lKCk7IH0KKworICAgIHZvaWQgc2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpOworCisgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkgY29uc3Qg
eyByZXR1cm4gIWRpc2FibGVkKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFkT25seUZvcm1D
b250cm9sKCkgY29uc3QgeyByZXR1cm4gcmVhZE9ubHkoKTsgfQorCisgICAgdmlydHVhbCBib29s
IGlzUmFkaW9CdXR0b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBjYW5UcmlnZ2VySW1wbGljaXRTdWJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KworICAgIC8vIE92ZXJyaWRlIGluIGRlcml2ZWQgY2xhc3NlcyB0byBnZXQgdGhlIGVuY29kZWQg
bmFtZT12YWx1ZSBwYWlyIGZvciBzdWJtaXR0aW5nLgorICAgIC8vIFJldHVybiB0cnVlIGZvciBh
IHN1Y2Nlc3NmdWwgY29udHJvbCAoc2VlIEhUTUw0LTE3LjEzLjIpLgorICAgIHZpcnR1YWwgYm9v
bCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgdmlydHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGVkU3VibWl0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZhdGVkU3VibWl0KGJv
b2wpIHsgfQorCisgICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgpIGNvbnN0OworICAgIFN0
cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpOworICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZhbGlkYXRp
b25NZXNzYWdlKCk7CisgICAgdm9pZCBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Cisg
ICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzID0gMCk7CisgICAgLy8gVGhpcyBtdXN0IGJl
IGNhbGxlZCB3aGVuIGEgdmFsaWRhdGlvbiBjb25zdHJhaW50IG9yIGNvbnRyb2wgdmFsdWUgaXMg
Y2hhbmdlZC4KKyAgICB2b2lkIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOworICAgIHZvaWQgc2V0
Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIGZvcm1EZXN0cm95ZWQo
KSB7IG1fZm9ybSA9IDA7IH0KKworICAgIGJvb2wgaXNMYWJlbGFibGUoKSBjb25zdDsKKyAgICBQ
YXNzUmVmUHRyPE5vZGVMaXN0PiBsYWJlbHMoKTsKKyAgICAKKyAgICBib29sIHJlYWRPbmx5KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWFkT25seTsgfQorCisgICAgdm9pZCByZXNldEZvcm1Pd25lcihI
VE1MRm9ybUVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRy
aWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CisKK3Byb3RlY3RlZDoKKyAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZp
cnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApOworCisgICAgdmlydHVhbCBib29sIGlzS2V5Ym9h
cmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01v
dXNlRm9jdXNhYmxlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5
bGVDaGFuZ2UpOworCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOworICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2goKTsKKworICAgIHZvaWQgcmVtb3ZlRnJvbUZvcm0oKTsKKworICAgIC8vIFRoaXMgbXVzdCBi
ZSBjYWxsZWQgYW55IHRpbWUgdGhlIHJlc3VsdCBvZiB3aWxsVmFsaWRhdGUoKSBoYXMgY2hhbmdl
ZC4KKyAgICB2b2lkIHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcmVjYWxjV2lsbFZhbGlkYXRlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCA9IDA7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OworCisgICAgdmlydHVh
bCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0OworCisgICAgdmlydHVhbCBIVE1MRm9ybUVsZW1lbnQq
IHZpcnR1YWxGb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRGVmYXVsdEJ1dHRvbkZv
ckZvcm0oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVu
dCgpOworICAgIFN0cmluZyB2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKKworICAg
IEhUTUxGb3JtRWxlbWVudCogbV9mb3JtOworICAgIE93blB0cjxWYWxpZGl0eVN0YXRlPiBtX3Zh
bGlkaXR5U3RhdGU7CisgICAgT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRpb25N
ZXNzYWdlOworICAgIGJvb2wgbV9kaXNhYmxlZCA6IDE7CisgICAgYm9vbCBtX3JlYWRPbmx5IDog
MTsKKyAgICBib29sIG1fcmVxdWlyZWQgOiAxOworICAgIGJvb2wgbV92YWx1ZU1hdGNoZXNSZW5k
ZXJlciA6IDE7CisKKyAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBvZiBtX3dpbGxWYWxpZGF0ZSBk
ZXBlbmRzIG9uIHRoZSBkZXJpdmVkIGNsYXNzLiBXZSBjYW4ndAorICAgIC8vIGluaXRpYWxpemUg
aXQgd2l0aCBhIHZpcnR1YWwgZnVuY3Rpb24gaW4gdGhlIGNvbnN0cnVjdG9yLiBtX3dpbGxWYWxp
ZGF0ZQorICAgIC8vIGlzIG5vdCBkZXRlcm1pbmlzdGljIGFzIGxvbmcgYXMgbV93aWxsVmFsaWRh
dGVJbml0aWFsaXplZCBpcyBmYWxzZS4KKyAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGVJ
bml0aWFsaXplZDogMTsKKyAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGUgOiAxOworCisg
ICAgLy8gQ2FjaGUgb2YgdmFsaWRpdHkoKS0+dmFsaWQoKS4KKyAgICAvLyBCdXQgImNhbmRpZGF0
ZSBmb3IgY29uc3RyYWludCB2YWxpZGF0aW9uIiBkb2Vzbid0IGFmZmVjdCBtX2lzVmFsaWQuCisg
ICAgYm9vbCBtX2lzVmFsaWQgOiAxOworfTsKKworLy8gRklYTUU6IEdpdmUgdGhpcyBjbGFzcyBp
dHMgb3duIGhlYWRlciBmaWxlLgorY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZSA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCk7CisKK3Byb3RlY3RlZDoKKyAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wgYXV0
b0NvbXBsZXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVy
RG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgp
OworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBib29sIHNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKK307
CisKKy8vIEZJWE1FOiBHaXZlIHRoaXMgY2xhc3MgaXRzIG93biBoZWFkZXIgZmlsZS4KK2NsYXNz
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGUgeworcHVibGljOgorICAgIC8vIENvbW1vbiBmbGFnIGZvciBIVE1MSW5wdXRF
bGVtZW50Ojp0b29Mb25nKCkgYW5kIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnRvb0xvbmcoKS4KKyAg
ICBlbnVtIE5lZWRzVG9DaGVja0RpcnR5RmxhZyB7Q2hlY2tEaXJ0eUZsYWcsIElnbm9yZURpcnR5
RmxhZ307CisKKyAgICB2aXJ0dWFsIH5IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgpOworCisg
ICAgLy8gVGhlIGRlcml2ZWQgY2xhc3Mgc2hvdWxkIHJldHVybiB0cnVlIGlmIHBsYWNlaG9sZGVy
IHByb2Nlc3NpbmcgaXMgbmVlZGVkLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1BsYWNlaG9s
ZGVyKCkgY29uc3QgPSAwOworICAgIFN0cmluZyBzdHJpcHBlZFBsYWNlaG9sZGVyKCkgY29uc3Q7
CisgICAgYm9vbCBwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpIGNvbnN0OworCisgICAgaW50
IHNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7CisgICAgaW50IHNlbGVjdGlvbkVuZCgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50KTsKKyAgICB2b2lkIHNldFNlbGVjdGlvbkVu
ZChpbnQpOworICAgIHZvaWQgc2VsZWN0KCk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShp
bnQgc3RhcnQsIGludCBlbmQpOworICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbigpIGNv
bnN0OworCisgICAgdmlydHVhbCBpbnQgbWF4TGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZv
cm1FbGVtZW50Kik7CisKKyAgICB2b2lkIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShib29s
KTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsK
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7CisgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CisKKyAgICBib29sIGlzUGxhY2Vob2xk
ZXJFbXB0eSgpIGNvbnN0OworCisgICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uU3RhcnQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkgY29uc3Qg
PSAwOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHVzZXItZWRpdGFibGUgdmFsdWUgaXMgZW1w
dHkuIFVzZWQgdG8gY2hlY2sgcGxhY2Vob2xkZXIgdmlzaWJpbGl0eS4KKyAgICB2aXJ0dWFsIGJv
b2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgPSAwOworICAgIC8vIENhbGxlZCBpbiBkaXNwYXRjaEZv
Y3VzRXZlbnQoKSwgYWZ0ZXIgcGxhY2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcgcGFy
ZW50J3MgZGlzcGF0Y2hGb2N1c0V2ZW50KCkuCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUZvY3Vz
RXZlbnQoKSB7IH0KKyAgICAvLyBDYWxsZWQgaW4gZGlzcGF0Y2hCbHVyRXZlbnQoKSwgYWZ0ZXIg
cGxhY2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZGlzcGF0Y2hCbHVy
RXZlbnQoKS4KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQmx1ckV2ZW50KCkgeyB9CisKKyAgICBS
ZW5kZXJUZXh0Q29udHJvbCogdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQoKTsKK307CisK
K30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVs
ZW1lbnQuaAkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAKICAqCiAgKi8KIAotI2lm
bmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKLSNkZWZpbmUgSFRNTEZvcm1Db250cm9sRWxl
bWVudF9oCisjaWZuZGVmIEZvcm1Bc3NvY2lhdGVkRWxlbWVudF9oCisjZGVmaW5lIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudF9oCiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCkBAIC0zMCwyMDQg
KzMwLDU2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9ybURhdGFMaXN0OwogY2xh
c3MgSFRNTEZvcm1FbGVtZW50OwotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2w7CiBjbGFzcyBWYWxp
ZGF0aW9uTWVzc2FnZTsKIGNsYXNzIFZhbGlkaXR5U3RhdGU7CiBjbGFzcyBWaXNpYmxlU2VsZWN0
aW9uOwogCi0vLyBGSVhNRTogVGhlIEhUTUw1IHNwZWNpZmljYXRpb24gY2FsbHMgdGhlc2UgZm9y
bS1hc3NvY2lhdGVkIGVsZW1lbnRzLgotLy8gU28gY29uc2lkZXIgcmVuYW1pbmcgdGhpcyB0byBI
VE1MRm9ybUFzc29jaWF0ZWRFbGVtZW50LgotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudCA6
IHB1YmxpYyBIVE1MRWxlbWVudCB7CitjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgewogcHVi
bGljOgotICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICB2aXJ0dWFs
IH5Gb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsKKworICAgIHZvaWQgcmVmKCkgeyByZWZGb3JtQXNz
b2NpYXRlZEVsZW1lbnQoKTsgfQorICAgIHZvaWQgZGVyZWYoKSB7IGRlcmVmRm9ybUFzc29jaWF0
ZWRFbGVtZW50KCk7IH0KIAogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9ybTsgfQogICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlkaXR5KCk7CiAKLSAgICBib29s
IGZvcm1Ob1ZhbGlkYXRlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IH0K
LQotICAgIHZpcnR1YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0Y2hl
c1JlbmRlcmVyID0gYjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xD
aGFuZ2VFdmVudCgpOwotCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlz
YWJsZWQ7IH0KLSAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwotCi0gICAgdmlydHVhbCBib29s
IGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29u
c3QgPSAwOwogCi0gICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIGNvbnRyb2wgd2ls
bCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQuCi0gICAgdmlydHVhbCBib29sIGF1dG9mb2N1cygp
IGNvbnN0OwotCi0gICAgYm9vbCByZXF1aXJlZCgpIGNvbnN0OwotCi0gICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gZm9ybUNvbnRyb2xUeXBlKCk7IH0KICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBmb3JtQ29udHJvbE5hbWUo
KTsgfQogCi0gICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkRm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiAhZGlz
YWJsZWQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKSBjb25z
dCB7IHJldHVybiByZWFkT25seSgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGNhblRyaWdnZXJJ
bXBsaWNpdFN1Ym1pc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCiAgICAgLy8gT3Zl
cnJpZGUgaW4gZGVyaXZlZCBjbGFzc2VzIHRvIGdldCB0aGUgZW5jb2RlZCBuYW1lPXZhbHVlIHBh
aXIgZm9yIHN1Ym1pdHRpbmcuCiAgICAgLy8gUmV0dXJuIHRydWUgZm9yIGEgc3VjY2Vzc2Z1bCBj
b250cm9sIChzZWUgSFRNTDQtMTcuMTMuMikuCiAgICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1E
YXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmF0ZWRTdWJtaXQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmF0ZWRTdWJtaXQoYm9vbCkgeyB9Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHZhbGlkYXRp
b25NZXNzYWdlKCk7Ci0gICAgdm9pZCB1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsK
LSAgICB2b2lkIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICBib29sIGNoZWNr
VmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRs
ZWRJbnZhbGlkQ29udHJvbHMgPSAwKTsKLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdoZW4g
YSB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgb3IgY29udHJvbCB2YWx1ZSBpcyBjaGFuZ2VkLgotICAg
IHZvaWQgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci0gICAgdm9pZCBzZXRDdXN0b21WYWxpZGl0
eShjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgZm9ybURlc3Ryb3llZCgpIHsgbV9mb3JtID0g
MDsgfQotCi0gICAgYm9vbCBpc0xhYmVsYWJsZSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+IGxhYmVscygpOwotICAgIAotICAgIGJvb2wgcmVhZE9ubHkoKSBjb25zdCB7IHJldHVy
biBtX3JlYWRPbmx5OyB9CisgICAgdmlydHVhbCB2b2lkIGZvcm1EZXN0cm95ZWQoKSB7IG1fZm9y
bSA9IDA7IH0KIAogICAgIHZvaWQgcmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50Kik7Ci0g
ICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2
ZURlY2xzID0gZmFsc2UpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVu
dCopOworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQqKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9v
bCBkZWVwKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAgIHZvaWQgaW5zZXJ0ZWRJbnRvVHJl
ZSgpOworICAgIHZvaWQgcmVtb3ZlZEZyb21UcmVlKCk7CiAKKyAgICB2b2lkIHNldEZvcm0oSFRN
TEZvcm1FbGVtZW50KiBmb3JtKSB7IG1fZm9ybSA9IGZvcm07IH0KICAgICB2b2lkIHJlbW92ZUZy
b21Gb3JtKCk7Ci0KLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFueSB0aW1lIHRoZSByZXN1
bHQgb2Ygd2lsbFZhbGlkYXRlKCkgaGFzIGNoYW5nZWQuCi0gICAgdm9pZCBzZXROZWVkc1dpbGxW
YWxpZGF0ZUNoZWNrKCk7Ci0gICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNv
bnN0OworICAgIHZvaWQgZm9ybUF0dHJpYnV0ZUNoYW5nZWQoKTsKIAogcHJpdmF0ZToKLSAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0ID0gMDsK
LQotICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1l
KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgSFRN
TEZvcm1FbGVtZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0Rl
ZmF1bHRCdXR0b25Gb3JGb3JtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzVmFsaWRGb3Jt
Q29udHJvbEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgdmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSA9IDA7CiAKICAg
ICBIVE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKICAgICBPd25QdHI8VmFsaWRpdHlTdGF0ZT4gbV92
YWxpZGl0eVN0YXRlOwotICAgIE93blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gbV92YWxpZGF0aW9u
TWVzc2FnZTsKLSAgICBib29sIG1fZGlzYWJsZWQgOiAxOwotICAgIGJvb2wgbV9yZWFkT25seSA6
IDE7Ci0gICAgYm9vbCBtX3JlcXVpcmVkIDogMTsKLSAgICBib29sIG1fdmFsdWVNYXRjaGVzUmVu
ZGVyZXIgOiAxOwotCi0gICAgLy8gVGhlIGluaXRpYWwgdmFsdWUgb2YgbV93aWxsVmFsaWRhdGUg
ZGVwZW5kcyBvbiB0aGUgZGVyaXZlZCBjbGFzcy4gV2UgY2FuJ3QKLSAgICAvLyBpbml0aWFsaXpl
IGl0IHdpdGggYSB2aXJ0dWFsIGZ1bmN0aW9uIGluIHRoZSBjb25zdHJ1Y3Rvci4gbV93aWxsVmFs
aWRhdGUKLSAgICAvLyBpcyBub3QgZGV0ZXJtaW5pc3RpYyBhcyBsb25nIGFzIG1fd2lsbFZhbGlk
YXRlSW5pdGlhbGl6ZWQgaXMgZmFsc2UuCi0gICAgbXV0YWJsZSBib29sIG1fd2lsbFZhbGlkYXRl
SW5pdGlhbGl6ZWQ6IDE7Ci0gICAgbXV0YWJsZSBib29sIG1fd2lsbFZhbGlkYXRlIDogMTsKLQot
ICAgIC8vIENhY2hlIG9mIHZhbGlkaXR5KCktPnZhbGlkKCkuCi0gICAgLy8gQnV0ICJjYW5kaWRh
dGUgZm9yIGNvbnN0cmFpbnQgdmFsaWRhdGlvbiIgZG9lc24ndCBhZmZlY3QgbV9pc1ZhbGlkLgot
ICAgIGJvb2wgbV9pc1ZhbGlkIDogMTsKLX07Ci0KLS8vIEZJWE1FOiBHaXZlIHRoaXMgY2xhc3Mg
aXRzIG93biBoZWFkZXIgZmlsZS4KLWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwotCi0gICAgdmlydHVhbCBib29sIGF1
dG9Db21wbGV0ZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25l
ckRvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotCi1wcml2
YXRlOgotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9sU3Rh
dGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiB9
OwogCi0vLyBGSVhNRTogR2l2ZSB0aGlzIGNsYXNzIGl0cyBvd24gaGVhZGVyIGZpbGUuCi1jbGFz
cyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlIHsKLXB1YmxpYzoKLSAgICAvLyBDb21tb24gZmxhZyBmb3IgSFRNTElucHV0
RWxlbWVudDo6dG9vTG9uZygpIGFuZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp0b29Mb25nKCkuCi0g
ICAgZW51bSBOZWVkc1RvQ2hlY2tEaXJ0eUZsYWcge0NoZWNrRGlydHlGbGFnLCBJZ25vcmVEaXJ0
eUZsYWd9OwotCi0gICAgdmlydHVhbCB+SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKTsKLQot
ICAgIC8vIFRoZSBkZXJpdmVkIGNsYXNzIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwbGFjZWhvbGRl
ciBwcm9jZXNzaW5nIGlzIG5lZWRlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQbGFjZWhv
bGRlcigpIGNvbnN0ID0gMDsKLSAgICBTdHJpbmcgc3RyaXBwZWRQbGFjZWhvbGRlcigpIGNvbnN0
OwotICAgIGJvb2wgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBjb25zdDsKLQotICAgIGlu
dCBzZWxlY3Rpb25TdGFydCgpIGNvbnN0OwotICAgIGludCBzZWxlY3Rpb25FbmQoKSBjb25zdDsK
LSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25F
bmQoaW50KTsKLSAgICB2b2lkIHNlbGVjdCgpOwotICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2Uo
aW50IHN0YXJ0LCBpbnQgZW5kKTsKLSAgICBQYXNzUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24oKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgaW50IG1heExlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxG
b3JtRWxlbWVudCopOwotCi0gICAgdm9pZCB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoYm9v
bCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOwotCi0gICAgYm9vbCBpc1BsYWNlaG9s
ZGVyRW1wdHkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvblN0YXJ0
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0
ID0gMDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB1c2VyLWVkaXRhYmxlIHZhbHVlIGlzIGVt
cHR5LiBVc2VkIHRvIGNoZWNrIHBsYWNlaG9sZGVyIHZpc2liaWxpdHkuCi0gICAgdmlydHVhbCBi
b29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0ID0gMDsKLSAgICAvLyBDYWxsZWQgaW4gZGlzcGF0Y2hG
b2N1c0V2ZW50KCksIGFmdGVyIHBsYWNlaG9sZGVyIHByb2Nlc3MsIGJlZm9yZSBjYWxsaW5nIHBh
cmVudCdzIGRpc3BhdGNoRm9jdXNFdmVudCgpLgotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVGb2N1
c0V2ZW50KCkgeyB9Ci0gICAgLy8gQ2FsbGVkIGluIGRpc3BhdGNoQmx1ckV2ZW50KCksIGFmdGVy
IHBsYWNlaG9sZGVyIHByb2Nlc3MsIGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGRpc3BhdGNoQmx1
ckV2ZW50KCkuCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUJsdXJFdmVudCgpIHsgfQotCi0gICAg
UmVuZGVyVGV4dENvbnRyb2wqIHRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0KCk7Ci19Owor
SFRNTEVsZW1lbnQqIHRvSFRNTEVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7Citjb25z
dCBIVE1MRWxlbWVudCogdG9IVE1MRWxlbWVudChjb25zdCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQq
KTsKIAogfSAvLyBuYW1lc3BhY2UKIAotI2VuZGlmCisjZW5kaWYgLy8gRm9ybUFzc29jaWF0ZWRF
bGVtZW50X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiA3
MzAwNykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCwxMiArNzgsMTIgQEAgTm9kZSogSFRNTEZvcm1Db2xsZWN0aW9uOjppdGVtKHVu
c2lnbmVkIAogICAgICAgICBpbmZvKCktPmVsZW1lbnRzQXJyYXlQb3NpdGlvbiA9IDA7CiAgICAg
fQogCi0gICAgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZWxlbWVudHNBcnJheSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGJhc2UoKSktPm1fYXNzb2NpYXRlZEVsZW1l
bnRzOworICAgIFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgZWxlbWVudHNBcnJheSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGJhc2UoKSktPm1fYXNzb2NpYXRlZEVsZW1l
bnRzOwogICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9IGluZm8oKS0+cG9zaXRpb247CiAgICAg
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5mbygpLT5lbGVtZW50c0FycmF5UG9zaXRpb247IGkg
PCBlbGVtZW50c0FycmF5LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50c0FycmF5W2ldOwotICAgICAgICBpZiAoZWxlbWVudC0+
aXNFbnVtZXJhdGFibGUoKSkgeworICAgICAgICBpZiAoZWxlbWVudHNBcnJheVtpXS0+aXNFbnVt
ZXJhdGFibGUoKSkgeworICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxF
bGVtZW50KGVsZW1lbnRzQXJyYXlbaV0pOwogICAgICAgICAgICAgaWYgKGluZGV4ID09IGN1cnJl
bnRJbmRleCkgewogICAgICAgICAgICAgICAgIGluZm8oKS0+cG9zaXRpb24gPSBpbmRleDsKICAg
ICAgICAgICAgICAgICBpbmZvKCktPmN1cnJlbnQgPSBlbGVtZW50OwpAQCAtMTEwLDIxICsxMTAs
MjMgQEAgRWxlbWVudCogSFRNTEZvcm1Db2xsZWN0aW9uOjpnZXROYW1lZEZvcgogCiAgICAgYm9v
bCBmb3VuZElucHV0RWxlbWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZm9ybS0+bV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRN
TEZvcm1Db250cm9sRWxlbWVudCogZSA9IGZvcm0tPm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwot
ICAgICAgICBpZiAoZS0+aXNFbnVtZXJhdGFibGUoKSAmJiBlLT5nZXRBdHRyaWJ1dGUoYXR0ck5h
bWUpID09IG5hbWUpIHsKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVk
RWxlbWVudCA9IGZvcm0tPm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoYXNzb2NpYXRlZEVsZW1lbnQpOworICAgICAg
ICBpZiAoYXNzb2NpYXRlZEVsZW1lbnQtPmlzRW51bWVyYXRhYmxlKCkKKyAgICAgICAgICAgICYm
IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgewogICAgICAgICAgICAg
Zm91bmRJbnB1dEVsZW1lbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICghZHVwbGljYXRlTnVt
YmVyKQotICAgICAgICAgICAgICAgIHJldHVybiBlOworICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtZW50OwogICAgICAgICAgICAgLS1kdXBsaWNhdGVOdW1iZXI7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBpZiAoIWZvdW5kSW5wdXRFbGVtZW50cykgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZm9ybS0+bV9pbWFnZUVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBIVE1MSW1hZ2VFbGVtZW50KiBlID0gZm9ybS0+bV9pbWFnZUVsZW1lbnRzW2ldOwotICAg
ICAgICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgeworICAgICAg
ICAgICAgSFRNTEltYWdlRWxlbWVudCogZWxlbWVudCA9IGZvcm0tPm1faW1hZ2VFbGVtZW50c1tp
XTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5h
bWUpIHsKICAgICAgICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZU51bWJlcikKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50Owog
ICAgICAgICAgICAgICAgIC0tZHVwbGljYXRlTnVtYmVyOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0xOTEsMTAgKzE5MywxMSBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRl
TmFtZUNhY2hlCiAgICAgSFRNTEZvcm1FbGVtZW50KiBmID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1F
bGVtZW50Kj4oYmFzZSgpKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5tX2Fz
c29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KiBlID0gZi0+bV9hc3NvY2lhdGVkRWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChlLT5p
c0VudW1lcmF0YWJsZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0
clZhbCA9IGUtPmdldElkQXR0cmlidXRlKCk7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICAgICAgRm9y
bUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVudCA9IGYtPm1fYXNzb2NpYXRlZEVs
ZW1lbnRzW2ldOworICAgICAgICBpZiAoYXNzb2NpYXRlZEVsZW1lbnQtPmlzRW51bWVyYXRhYmxl
KCkpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChh
c3NvY2lhdGVkRWxlbWVudCk7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0
clZhbCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7CisgICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsK
ICAgICAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAg
IC8vIGFkZCB0byBpZCBjYWNoZQogICAgICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50Kj4qIGlk
VmVjdG9yID0gaW5mbygpLT5pZENhY2hlLmdldChpZEF0dHJWYWwuaW1wbCgpKTsKQEAgLTIwMiw3
ICsyMDUsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAgICAg
ICAgICAgICAgICAgICAgIGlkVmVjdG9yID0gbmV3IFZlY3RvcjxFbGVtZW50Kj47CiAgICAgICAg
ICAgICAgICAgICAgIGluZm8oKS0+aWRDYWNoZS5hZGQoaWRBdHRyVmFsLmltcGwoKSwgaWRWZWN0
b3IpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZFZlY3Rvci0+YXBwZW5k
KGUpOworICAgICAgICAgICAgICAgIGlkVmVjdG9yLT5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAg
ICAgICAgICAgZm91bmRJbnB1dEVsZW1lbnRzLmFkZChpZEF0dHJWYWwuaW1wbCgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0
clZhbCAhPSBuYW1lQXR0clZhbCkgewpAQCAtMjEyLDE2ICsyMTUsMTYgQEAgdm9pZCBIVE1MRm9y
bUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICAgICAgICAgICAgICBuYW1lVmVj
dG9yID0gbmV3IFZlY3RvcjxFbGVtZW50Kj47CiAgICAgICAgICAgICAgICAgICAgIGluZm8oKS0+
bmFtZUNhY2hlLmFkZChuYW1lQXR0clZhbC5pbXBsKCksIG5hbWVWZWN0b3IpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lVmVjdG9yLT5hcHBlbmQoZSk7CisgICAgICAg
ICAgICAgICAgbmFtZVZlY3Rvci0+YXBwZW5kKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGZv
dW5kSW5wdXRFbGVtZW50cy5hZGQobmFtZUF0dHJWYWwuaW1wbCgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5tX2lt
YWdlRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEltYWdlRWxlbWVudCogZSA9
IGYtPm1faW1hZ2VFbGVtZW50c1tpXTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0
dHJWYWwgPSBlLT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICAgICAgSFRNTElt
YWdlRWxlbWVudCogZWxlbWVudCA9IGYtPm1faW1hZ2VFbGVtZW50c1tpXTsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOwor
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZWxlbWVudC0+Z2V0QXR0
cmlidXRlKG5hbWVBdHRyKTsKICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpICYmICFm
b3VuZElucHV0RWxlbWVudHMuY29udGFpbnMoaWRBdHRyVmFsLmltcGwoKSkpIHsKICAgICAgICAg
ICAgIC8vIGFkZCB0byBpZCBjYWNoZQogICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiogaWRW
ZWN0b3IgPSBpbmZvKCktPmlkQ2FjaGUuZ2V0KGlkQXR0clZhbC5pbXBsKCkpOwpAQCAtMjI5LDcg
KzIzMiw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAg
ICAgICAgICAgICBpZFZlY3RvciA9IG5ldyBWZWN0b3I8RWxlbWVudCo+OwogICAgICAgICAgICAg
ICAgIGluZm8oKS0+aWRDYWNoZS5hZGQoaWRBdHRyVmFsLmltcGwoKSwgaWRWZWN0b3IpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWRWZWN0b3ItPmFwcGVuZChlKTsKKyAgICAgICAgICAg
IGlkVmVjdG9yLT5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFuYW1l
QXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVBdHRyVmFsICYmICFmb3VuZElu
cHV0RWxlbWVudHMuY29udGFpbnMobmFtZUF0dHJWYWwuaW1wbCgpKSkgewogICAgICAgICAgICAg
Ly8gYWRkIHRvIG5hbWUgY2FjaGUKQEAgLTIzOCw3ICsyNDEsNyBAQCB2b2lkIEhUTUxGb3JtQ29s
bGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAgICAgICAgICAgbmFtZVZlY3RvciA9IG5l
dyBWZWN0b3I8RWxlbWVudCo+OwogICAgICAgICAgICAgICAgIGluZm8oKS0+bmFtZUNhY2hlLmFk
ZChuYW1lQXR0clZhbC5pbXBsKCksIG5hbWVWZWN0b3IpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbmFtZVZlY3Rvci0+YXBwZW5kKGUpOworICAgICAgICAgICAgbmFtZVZlY3Rvci0+YXBw
ZW5kKGVsZW1lbnQpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpCi0gICAgLCBtX2Zvcm0oZm9ybSkKKyAgICAsIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudChmb3JtKQogICAgICwgbV9kaXNhYmxlZChmYWxzZSkKICAgICAsIG1fcmVhZE9ubHkoZmFs
c2UpCiAgICAgLCBtX3JlcXVpcmVkKGZhbHNlKQpAQCAtNjYsMTYgKzY2LDE2IEBAIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEUKICAgICAsIG1fd2lsbFZhbGlkYXRlKHRy
dWUpCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKIHsKLSAgICBpZiAoIW1fZm9ybSkKLSAgICAgICAg
bV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwotICAgIGlmIChtX2Zvcm0pCi0gICAgICAgIG1f
Zm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICBpZiAoIXRoaXMtPmZvcm0oKSkK
KyAgICAgICAgc2V0Rm9ybShmaW5kRm9ybUFuY2VzdG9yKCkpOworICAgIGlmICh0aGlzLT5mb3Jt
KCkpCisgICAgICAgIHRoaXMtPmZvcm0oKS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKIH0K
IAogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKQogewot
ICAgIGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7
CisgICAgaWYgKGZvcm0oKSkKKyAgICAgICAgZm9ybSgpLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlz
KTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKQpAQCAtODksMTQg
Kzg5LDYgQEAgYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtTm9WYWxpZAogICAgIHJl
dHVybiAhZ2V0QXR0cmlidXRlKGZvcm1ub3ZhbGlkYXRlQXR0cikuaXNOdWxsKCk7CiB9CiAKLVZh
bGlkaXR5U3RhdGUqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkaXR5KCkKLXsKLSAgICBp
ZiAoIW1fdmFsaWRpdHlTdGF0ZSkKLSAgICAgICAgbV92YWxpZGl0eVN0YXRlID0gVmFsaWRpdHlT
dGF0ZTo6Y3JlYXRlKHRoaXMpOwotCi0gICAgcmV0dXJuIG1fdmFsaWRpdHlTdGF0ZS5nZXQoKTsK
LX0KLQogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIp
IHsKQEAgLTE1NCw1MSArMTQ2LDE2IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0
YWNoKCkKIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJv
b2wgZGVlcCkKIHsKLSAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKLSAgICAg
ICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMp
OwotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQo
ZmFzdEdldEF0dHJpYnV0ZShmb3JtQXR0cikpOwotICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVt
ZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpKSB7Ci0gICAgICAgICAgICBpZiAobV9mb3JtKQotICAg
ICAgICAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAg
ICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihlbGVtZW50KTsKLSAgICAg
ICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBpZiAoIW1fZm9ybSkgewotICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ug
b2YgYSBuZXcgZm9ybSBlbGVtZW50IGJlaW5nIGNyZWF0ZWQgYnkKLSAgICAgICAgLy8gSmF2YVNj
cmlwdCBhbmQgaW5zZXJ0ZWQgaW5zaWRlIGEgZm9ybS4gIEluIHRoZSBjYXNlIG9mIHRoZSBwYXJz
ZXIKLSAgICAgICAgLy8gc2V0dGluZyBhIGZvcm0sIHdlIHdpbGwgYWxyZWFkeSBoYXZlIGEgbm9u
LW51bGwgdmFsdWUgZm9yIG1fZm9ybSwgCi0gICAgICAgIC8vIGFuZCBzbyB3ZSBkb24ndCBuZWVk
IHRvIGRvIGFueXRoaW5nLgotICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7Ci0g
ICAgICAgIGlmIChtX2Zvcm0pCi0gICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1l
bnQodGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRS
YWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Ci0gICAgfQorICAgIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSgpOworICAgIGlmICghZm9ybSgpKQorICAgICAgICBk
b2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogCiAgICAg
SFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoZGVlcCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Tm9kZSogZmluZFJvb3QoTm9kZSogbikKLXsKLSAgICBOb2RlKiByb290ID0gbjsKLSAgICBmb3Ig
KDsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkKLSAgICAgICAgcm9vdCA9IG47Ci0gICAgcmV0dXJu
IHJvb3Q7Ci19Ci0KIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVl
KGJvb2wgZGVlcCkKIHsKLSAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCi0gICAg
ICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRo
aXMpOwotCi0gICAgLy8gSWYgdGhlIGZvcm0gYW5kIGVsZW1lbnQgYXJlIGJvdGggaW4gdGhlIHNh
bWUgdHJlZSwgcHJlc2VydmUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGZvcm0uCi0gICAgLy8gT3Ro
ZXJ3aXNlLCBudWxsIG91dCBvdXIgZm9ybSBhbmQgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBm
b3JtJ3MgbGlzdCBvZiBlbGVtZW50cy4KLSAgICBpZiAobV9mb3JtICYmIGZpbmRSb290KHRoaXMp
ICE9IGZpbmRSb290KG1fZm9ybSkpIHsKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVu
dCh0aGlzKTsKLSAgICAgICAgbV9mb3JtID0gMDsKLSAgICB9Ci0KKyAgICBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSgpOwogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJv
bVRyZWUoZGVlcCk7CiB9CiAKQEAgLTI1NCw3ICsyMTEsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnJlY2FsY1N0eWxlCiAKIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c3Vw
cG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFkaXNhYmxlZCgpOworICAgIHJldHVy
biAhbV9kaXNhYmxlZDsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0ZvY3Vz
YWJsZSgpIGNvbnN0CkBAIC0zNjYsNyArMzIzLDcgQEAgU3RyaW5nIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnZpc2libGVWYQogICAgIHJldHVybiBtX3ZhbGlkYXRpb25NZXNzYWdlID8gbV92YWxp
ZGF0aW9uTWVzc2FnZS0+bWVzc2FnZSgpIDogU3RyaW5nKCk7CiB9CiAKLWJvb2wgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKK2Jvb2wgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxl
bWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQogewogICAgIGlmICghd2lsbFZhbGlk
YXRlKCkgfHwgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTQwOCw3ICszNjUsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEN1
c3RvbVZhCiB7CiAgICAgdmFsaWRpdHkoKS0+c2V0Q3VzdG9tRXJyb3JNZXNzYWdlKGVycm9yKTsK
IH0KLSAgICAKKwogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZl
bnQoKQogewogICAgIGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCkBAIC00MjgsNjQgKzM4NSwyMiBA
QCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoQmx1CiAKIEhUTUxGb3JtRWxl
bWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlydHVhbEZvcm0oKSBjb25zdAogewotICAg
IHJldHVybiBtX2Zvcm07CisgICAgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybSgp
OwogfQogCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRGVmYXVsdEJ1dHRvbkZvckZv
cm0oKSBjb25zdAogewotICAgIHJldHVybiBpc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSAmJiBt
X2Zvcm0gJiYgbV9mb3JtLT5kZWZhdWx0QnV0dG9uKCkgPT0gdGhpczsKLX0KLQotdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVGcm9tRm9ybSgpCi17Ci0gICAgaWYgKCFtX2Zvcm0p
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwot
ICAgIG1fZm9ybSA9IDA7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVzZXRG
b3JtT3duZXIoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQotewotICAgIGlmIChtX2Zvcm0pIHsKLSAg
ICAgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICB9Ci0gICAg
bV9mb3JtID0gMDsKLSAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKLSAgICAg
ICAgLy8gVGhlIEhUTUw1IHNwZWMgc2F5cyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBhc3Nv
Y2lhdGVkIHdpdGgKLSAgICAgICAgLy8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50
IHRvIGhhdmUgYW4gSUQgdGhhdCBlcXVhbCB0bwotICAgICAgICAvLyB0aGUgdmFsdWUgb2YgZm9y
bSBhdHRyaWJ1dGUsIHNvIHdlIHB1dCB0aGUgcmVzdWx0IG9mCi0gICAgICAgIC8vIGRvY3VtZW50
KCktPmdldEVsZW1lbnRCeUlkKCkgb3ZlciB0aGUgZ2l2ZW4gZWxlbWVudC4KLSAgICAgICAgRWxl
bWVudCogZmlyc3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZmFzdEdldEF0
dHJpYnV0ZShmb3JtQXR0cikpOwotICAgICAgICBpZiAoZmlyc3RFbGVtZW50ICYmIGZpcnN0RWxl
bWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKLSAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19j
YXN0PEhUTUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVudCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fZm9ybSA9IGZvcm07Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fZm9ybSA9IGZpbmRG
b3JtQW5jZXN0b3IoKTsKLSAgICBpZiAobV9mb3JtKQotICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVy
Rm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgZWxzZQotICAgICAgICBkb2N1bWVudCgpLT5jaGVja2Vk
UmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworICAgIHJldHVybiBpc1N1Y2Nlc3NmdWxT
dWJtaXRCdXR0b24oKSAmJiBmb3JtKCkgJiYgZm9ybSgpLT5kZWZhdWx0QnV0dG9uKCkgPT0gdGhp
czsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0
dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKQogewogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gZm9ybUF0dHIpIHsKLSAgICAgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRy
KSkgewotICAgICAgICAgICAgLy8gVGhlIGZvcm0gYXR0cmlidXRlIHJlbW92ZWQuIFdlIG5lZWQg
dG8gcmVzZXQgZm9ybSBvd25lciBoZXJlLgotICAgICAgICAgICAgaWYgKG1fZm9ybSkKLSAgICAg
ICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICAgICAg
bV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwotICAgICAgICAgICAgaWYgKG1fZm9ybSkKLSAg
ICAgICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9u
cygpLmFkZEJ1dHRvbih0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXNldEZv
cm1Pd25lcigwKTsKLSAgICB9Ci0gICAgSFRNTEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoYXR0
ciwgcHJlc2VydmVEZWNscyk7CisgICAgICAgIGZvcm1BdHRyaWJ1dGVDaGFuZ2VkKCk7CisgICAg
ICAgIGlmICghZm9ybSgpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0
dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgSFRNTEVsZW1lbnQ6
OmF0dHJpYnV0ZUNoYW5nZWQoYXR0ciwgcHJlc2VydmVEZWNscyk7CiB9CiAKIGJvb2wgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aXNMYWJlbGFibGUoKSBjb25zdApAQCAtNTE2LDcgKzQzMSw3IEBA
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEhUTUxGb3JtQ29udHJvbEVsZW0KICAgICAKICAgICByZXR1
cm4gTGFiZWxzTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzKTsKIH0KLSAgICAKKwogSFRNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQq
IGYpCiAgICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvYywgZikKIHsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gNzMwMDcpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw2ICsyNCw3IEBACiAjaWZuZGVmIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRfaAogI2RlZmlu
ZSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKIAorI2luY2x1ZGUgIkZvcm1Bc3NvY2lhdGVkRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTM1LDE0ICszNiwxNCBAQCBjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZTsKIGNsYXNzIFZhbGlk
aXR5U3RhdGU7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCi0vLyBGSVhNRTogVGhlIEhUTUw1
IHNwZWNpZmljYXRpb24gY2FsbHMgdGhlc2UgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzLgotLy8g
U28gY29uc2lkZXIgcmVuYW1pbmcgdGhpcyB0byBIVE1MRm9ybUFzc29jaWF0ZWRFbGVtZW50Lgot
Y2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CisvLyBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50IGlzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCwKKy8vIGFuZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudCBpbXBs
ZW1lbnRhdGlvbnMgc2hvdWxkIHVzZSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50CisvLyB1bmxlc3Mg
dGhlcmUgaXMgYSBzcGVjaWFsIHJlYXNvbi4KK2NsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgewogcHVi
bGljOgogICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKTsKIAotICAgIEhUTUxG
b3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybTsgfQotICAgIFZhbGlkaXR5
U3RhdGUqIHZhbGlkaXR5KCk7CisgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtKCk7IH0KIAogICAgIGJvb2wgZm9ybU5v
VmFsaWRhdGUoKSBjb25zdDsKIApAQCAtNTMsOCArNTQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAKLSAgICBib29sIGRp
c2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQotICAgIHZvaWQgc2V0RGlzYWJs
ZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9k
aXNhYmxlZDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIAogICAgIHZp
cnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0VudW1l
cmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC02NSw3ICs2Niw2IEBAIHB1Ymxp
YzoKICAgICBib29sIHJlcXVpcmVkKCkgY29uc3Q7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUoKSBjb25zdCB7IHJldHVybiBmb3JtQ29udHJvbFR5cGUoKTsgfQotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1Db250cm9sTmFtZSgpOyB9CiAK
ICAgICB2b2lkIHNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKIApAQCAtODcsMjEg
Kzg3LDIxIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2UoKTsKICAgICB2
b2lkIHVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwogICAgIHZvaWQgaGlkZVZpc2li
bGVWYWxpZGF0aW9uTWVzc2FnZSgpOwotICAgIGJvb2wgY2hlY2tWYWxpZGl0eShWZWN0b3I8UmVm
UHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scyA9
IDApOworICAgIGJvb2wgY2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVk
RWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzID0gMCk7CiAgICAgLy8gVGhpcyBt
dXN0IGJlIGNhbGxlZCB3aGVuIGEgdmFsaWRhdGlvbiBjb25zdHJhaW50IG9yIGNvbnRyb2wgdmFs
dWUgaXMgY2hhbmdlZC4KICAgICB2b2lkIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogICAgIHZv
aWQgc2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2b2lkIGZvcm1EZXN0
cm95ZWQoKSB7IG1fZm9ybSA9IDA7IH0KLQogICAgIGJvb2wgaXNMYWJlbGFibGUoKSBjb25zdDsK
ICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBsYWJlbHMoKTsKLSAgICAKKwogICAgIGJvb2wgcmVh
ZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5OyB9CiAKLSAgICB2b2lkIHJlc2V0Rm9y
bU93bmVyKEhUTUxGb3JtRWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFu
Z2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNscyA9IGZhbHNlKTsKIAorICAgIHVzaW5n
IFRyZWVTaGFyZWQ8Q29udGFpbmVyTm9kZT46OnJlZjsKKyAgICB1c2luZyBUcmVlU2hhcmVkPENv
bnRhaW5lck5vZGU+OjpkZXJlZjsKKwogcHJvdGVjdGVkOgogICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBIVE1MRm9ybUVs
ZW1lbnQqKTsKIApAQCAtMTE5LDggKzExOSw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hCbHVyRXZlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAKLSAg
ICB2b2lkIHJlbW92ZUZyb21Gb3JtKCk7Ci0KICAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFu
eSB0aW1lIHRoZSByZXN1bHQgb2Ygd2lsbFZhbGlkYXRlKCkgaGFzIGNoYW5nZWQuCiAgICAgdm9p
ZCBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7CiAgICAgdmlydHVhbCBib29sIHJlY2FsY1dp
bGxWYWxpZGF0ZSgpIGNvbnN0OwpAQCAtMTI5LDYgKzEyNyw5IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCA9IDA7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgeyByZWYoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpIHsgZGVyZWYoKTsg
fQorCiAgICAgdmlydHVhbCBib29sIGlzRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKQEAg
LTE0MCw4ICsxNDEsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkRm9ybUNv
bnRyb2xFbGVtZW50KCk7CiAgICAgU3RyaW5nIHZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGNv
bnN0OwogCi0gICAgSFRNTEZvcm1FbGVtZW50KiBtX2Zvcm07Ci0gICAgT3duUHRyPFZhbGlkaXR5
U3RhdGU+IG1fdmFsaWRpdHlTdGF0ZTsKICAgICBPd25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+IG1f
dmFsaWRhdGlvbk1lc3NhZ2U7CiAgICAgYm9vbCBtX2Rpc2FibGVkIDogMTsKICAgICBib29sIG1f
cmVhZE9ubHkgOiAxOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDcz
MDA3KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3OSw3ICsxNzksMTAgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0
bHkoRQogewogICAgIGludCBzdWJtaXNzaW9uVHJpZ2dlckNvdW50ID0gMDsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBtX2Fzc29jaWF0ZWRF
bGVtZW50c1tpXTsKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBmb3JtQXNzb2NpYXRl
ZEVsZW1lbnQgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFmb3JtQXNz
b2NpYXRlZEVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZm9ybUFzc29jaWF0ZWRFbGVtZW50KTsK
ICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSkgewog
ICAgICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAg
ICAgZm9ybUVsZW1lbnQtPmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZlbnQpOwpAQCAtMjE0LDkg
KzIxNywxMCBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2CiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2Np
YXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50c1tp
XS0+aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgICAgICBpZiAobV9hc3NvY2lh
dGVkRWxlbWVudHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0p
LT5oaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7CiAKLSAgICBWZWN0b3I8UmVmUHRyPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzOworICAgIFZl
Y3RvcjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50PiA+IHVuaGFuZGxlZEludmFsaWRDb250
cm9sczsKICAgICBjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKHVuaGFuZGxlZEludmFs
aWRDb250cm9scyk7CiAgICAgaWYgKHVuaGFuZGxlZEludmFsaWRDb250cm9scy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI1LDcgKzIyOSw4IEBAIGJvb2wgSFRNTEZvcm1F
bGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXYKICAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBw
cm90ZWN0b3IodGhpcyk7CiAgICAgLy8gRm9jdXMgb24gdGhlIGZpcnN0IGZvY3VzYWJsZSBjb250
cm9sIGFuZCBzaG93IGEgdmFsaWRhdGlvbiBtZXNzYWdlLgogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudCogdW5oYW5kbGVkID0gdW5oYW5kbGVkSW52YWxpZENvbnRy
b2xzW2ldLmdldCgpOworICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIHVuaGFuZGxlZEFz
c29jaWF0ZWRFbGVtZW50ID0gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzW2ldLmdldCgpOworICAg
ICAgICBIVE1MRWxlbWVudCogdW5oYW5kbGVkID0gdG9IVE1MRWxlbWVudCh1bmhhbmRsZWRBc3Nv
Y2lhdGVkRWxlbWVudCk7CiAgICAgICAgIGlmICh1bmhhbmRsZWQtPmlzRm9jdXNhYmxlKCkgJiYg
dW5oYW5kbGVkLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudD4g
b3JpZ2luYWxEb2N1bWVudCh1bmhhbmRsZWQtPmRvY3VtZW50KCkpOwogICAgICAgICAgICAgdW5o
YW5kbGVkLT5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNlKTsKQEAgLTIzNCw3ICsyMzksOCBA
QCBib29sIEhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2CiAgICAgICAgICAgICAv
LyBtb3ZlZCB0byBhbm90aGVyIGRvY3VtZW50LgogICAgICAgICAgICAgaWYgKHVuaGFuZGxlZC0+
aXNGb2N1c2FibGUoKSAmJiB1bmhhbmRsZWQtPmluRG9jdW1lbnQoKSAmJiBvcmlnaW5hbERvY3Vt
ZW50ID09IHVuaGFuZGxlZC0+ZG9jdW1lbnQoKSkgewogICAgICAgICAgICAgICAgIHVuaGFuZGxl
ZC0+Zm9jdXMoKTsKLSAgICAgICAgICAgICAgICB1bmhhbmRsZWQtPnVwZGF0ZVZpc2libGVWYWxp
ZGF0aW9uTWVzc2FnZSgpOworICAgICAgICAgICAgICAgIGlmICh1bmhhbmRsZWQtPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqPih1bmhhbmRsZWQpLT51cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3Nh
Z2UoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMjQyLDExICsyNDgsMTIgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJh
Y3RpdgogICAgIC8vIFdhcm4gYWJvdXQgYWxsIG9mIHVuZm9jdXNhYmxlIGNvbnRyb2xzLgogICAg
IGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIHVuaGFuZGxlZCA9IHVuaGFu
ZGxlZEludmFsaWRDb250cm9sc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCogdW5oYW5kbGVkQXNzb2NpYXRlZEVsZW1lbnQgPSB1bmhhbmRsZWRJbnZhbGlkQ29u
dHJvbHNbaV0uZ2V0KCk7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogdW5oYW5kbGVkID0gdG9I
VE1MRWxlbWVudCh1bmhhbmRsZWRBc3NvY2lhdGVkRWxlbWVudCk7CiAgICAgICAgICAgICBpZiAo
dW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgpICYmIHVuaGFuZGxlZC0+aW5Eb2N1bWVudCgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UoIkFuIGlu
dmFsaWQgZm9ybSBjb250cm9sIHdpdGggbmFtZT0nJW5hbWUnIGlzIG5vdCBmb2N1c2FibGUuIik7
Ci0gICAgICAgICAgICBtZXNzYWdlLnJlcGxhY2UoIiVuYW1lIiwgdW5oYW5kbGVkLT5uYW1lKCkp
OworICAgICAgICAgICAgbWVzc2FnZS5yZXBsYWNlKCIlbmFtZSIsIHVuaGFuZGxlZEFzc29jaWF0
ZWRFbGVtZW50LT5uYW1lKCkpOwogICAgICAgICAgICAgZnJhbWUtPmRvbVdpbmRvdygpLT5jb25z
b2xlKCktPmFkZE1lc3NhZ2UoSFRNTE1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJv
ck1lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgMCwgZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMzA3LDggKzMxNCwxMSBAQCB2b2lkIEhUTUxGb3JtRWxlbWVu
dDo6c3VibWl0KEV2ZW50KiBldmVuCiAgICAgYm9vbCBuZWVkQnV0dG9uQWN0aXZhdGlvbiA9IGFj
dGl2YXRlU3VibWl0QnV0dG9uOyAvLyBkbyB3ZSBuZWVkIHRvIGFjdGl2YXRlIGEgc3VibWl0IGJ1
dHRvbj8KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9s
ID0gbV9hc3NvY2lhdGVkRWxlbWVudHNbaV07CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCogYXNzb2NpYXRlZEVsZW1lbnQgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAg
aWYgKCFhc3NvY2lhdGVkRWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24pIHsKKyAgICAg
ICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Kj4oYXNzb2NpYXRlZEVsZW1lbnQpOwogICAgICAgICAgICAgaWYg
KGNvbnRyb2wtPmlzQWN0aXZhdGVkU3VibWl0KCkpCiAgICAgICAgICAgICAgICAgbmVlZEJ1dHRv
bkFjdGl2YXRpb24gPSBmYWxzZTsKICAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0U3VjY2Vzc2Z1
bFN1Ym1pdEJ1dHRvbiA9PSAwICYmIGNvbnRyb2wtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigp
KQpAQCAtMzQzLDcgKzM1Myw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldCgpCiAgICAg
fQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNp
emUoKTsgKytpKQotICAgICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+cmVzZXQoKTsKKyAg
ICAgICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5pc0Zvcm1Db250cm9sRWxlbWVudCgp
KQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG1fYXNz
b2NpYXRlZEVsZW1lbnRzW2ldKS0+cmVzZXQoKTsKIAogICAgIG1faW5yZXNldCA9IGZhbHNlOwog
fQpAQCAtMzk2LDcgKzQwNyw3IEBAIHRlbXBsYXRlPGNsYXNzIFQsIHNpemVfdCBuPiBzdGF0aWMg
dm9pZCAKICAgICAgICAgfQogfQogCi11bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVt
ZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50
KQordW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRy
aWJ1dGUoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICAvLyBDb21wYXJlcyB0aGUgcG9zaXRpb24g
b2YgdGhlIGZvcm0gZWxlbWVudCBhbmQgdGhlIGluc2VydGVkIGVsZW1lbnQuCiAgICAgLy8gVXBk
YXRlcyB0aGUgaW5kZWNlcyBpbiBvcmRlciB0byB0aGUgcmVsYXRpb24gb2YgdGhlIHBvc2l0aW9u
OgpAQCAtNDE2LDU3ICs0MjcsNjQgQEAgdW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxl
bWVudEluZAogICAgIHVuc2lnbmVkIGxlZnQgPSAwLCByaWdodCA9IG1fYXNzb2NpYXRlZEVsZW1l
bnRzLnNpemUoKSAtIDE7CiAgICAgd2hpbGUgKGxlZnQgIT0gcmlnaHQpIHsKICAgICAgICAgdW5z
aWduZWQgbWlkZGxlID0gbGVmdCArICgocmlnaHQgLSBsZWZ0KSAvIDIpOwotICAgICAgICBwb3Np
dGlvbiA9IGVsZW1lbnQtPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG1fYXNzb2NpYXRlZEVsZW1l
bnRzW21pZGRsZV0pOworICAgICAgICBwb3NpdGlvbiA9IGVsZW1lbnQtPmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uKHRvSFRNTEVsZW1lbnQobV9hc3NvY2lhdGVkRWxlbWVudHNbbWlkZGxlXSkpOwog
ICAgICAgICBpZiAocG9zaXRpb24gJiBET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcpCiAgICAg
ICAgICAgICByaWdodCA9IG1pZGRsZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbGVmdCA9
IG1pZGRsZSArIDE7CiAgICAgfQogCi0gICAgcG9zaXRpb24gPSBlbGVtZW50LT5jb21wYXJlRG9j
dW1lbnRQb3NpdGlvbihtX2Fzc29jaWF0ZWRFbGVtZW50c1tsZWZ0XSk7CisgICAgcG9zaXRpb24g
PSBlbGVtZW50LT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0b0hUTUxFbGVtZW50KG1fYXNzb2Np
YXRlZEVsZW1lbnRzW2xlZnRdKSk7CiAgICAgaWYgKHBvc2l0aW9uICYgRE9DVU1FTlRfUE9TSVRJ
T05fRk9MTE9XSU5HKQogICAgICAgICByZXR1cm4gbGVmdDsKICAgICByZXR1cm4gbGVmdCArIDE7
CiB9CiAKLXVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleChIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBlKQordW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVu
dEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW1lbnQpCiB7CisgICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGFzc29jaWF0ZWRFbGVtZW50KTsK
ICAgICAvLyBUcmVhdHMgc2VwYXJhdGVseSB0aGUgY2FzZSB3aGVyZSB0aGlzIGVsZW1lbnQgaGFz
IHRoZSBmb3JtIGF0dHJpYnV0ZQogICAgIC8vIGZvciBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9u
LgotICAgIGlmIChlLT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkKLSAgICAgICAgcmV0dXJu
IGZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShlKTsKKyAgICBpZiAoZWxlbWVudC0+
ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCisgICAgICAgIHJldHVybiBmb3JtRWxlbWVudElu
ZGV4V2l0aEZvcm1BdHRyaWJ1dGUoZWxlbWVudCk7CiAKICAgICAvLyBDaGVjayBmb3IgdGhlIHNw
ZWNpYWwgY2FzZSB3aGVyZSB0aGlzIGVsZW1lbnQgaXMgdGhlIHZlcnkgbGFzdCB0aGluZyBpbgog
ICAgIC8vIHRoZSBmb3JtJ3MgdHJlZSBvZiBjaGlsZHJlbjsgd2UgZG9uJ3Qgd2FudCB0byB3YWxr
IHRoZSBlbnRpcmUgdHJlZSBpbiB0aGF0CiAgICAgLy8gY29tbW9uIGNhc2UgdGhhdCBvY2N1cnMg
ZHVyaW5nIHBhcnNpbmc7IGluc3RlYWQgd2UnbGwganVzdCByZXR1cm4gYSB2YWx1ZQogICAgIC8v
IHRoYXQgc2F5cyAiYWRkIHRoaXMgZm9ybSBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5
Ii4KLSAgICBpZiAoZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgeworICAgIGlmIChlbGVtZW50
LT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CiAgICAgICAgIHVuc2lnbmVkIGkgPSBtX2Fzc29j
aWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4OwogICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlz
OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgewotICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gZSkgeworICAgICAgICAgICAgaWYgKG5vZGUgPT0gZWxlbWVudCkgewog
ICAgICAgICAgICAgICAgICsrbV9hc3NvY2lhdGVkRWxlbWVudHNBZnRlckluZGV4OwogICAgICAg
ICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5vZGUt
PmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkKLSAgICAgICAgICAgICAgICAgICAg
JiYgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG5vZGUpLT5mb3JtKCkgPT0g
dGhpcykKKyAgICAgICAgICAgICAgICAgICAgJiYgKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbm9k
ZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpLT5mb3JtKCkgPT0gdGhpcykKICAgICAgICAgICAgICAg
ICArK2k7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG1fYXNzb2NpYXRlZEVsZW1lbnRz
QWZ0ZXJJbmRleCsrOwogfQogCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxl
bWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJl
Z2lzdGVyRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlKQogewotICAgIGRvY3Vt
ZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24oZSk7Ci0gICAgbV9jaGVj
a2VkUmFkaW9CdXR0b25zLmFkZEJ1dHRvbihlKTsKKyAgICBpZiAoZS0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkgeworICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGUpOworICAgICAgICBkb2N1bWVudCgp
LT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKGVsZW1lbnQpOworICAgICAgICBt
X2NoZWNrZWRSYWRpb0J1dHRvbnMuYWRkQnV0dG9uKGVsZW1lbnQpOworICAgIH0KICAgICBtX2Fz
c29jaWF0ZWRFbGVtZW50cy5pbnNlcnQoZm9ybUVsZW1lbnRJbmRleChlKSwgZSk7CiB9CiAKLXZv
aWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3JtRWxlbWVudChIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50KiBlKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUZvcm1FbGVtZW50KEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudCogZSkKIHsKLSAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMucmVtb3ZlQnV0
dG9uKGUpOwotICAgIGlmIChlLT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAgIGlm
IChlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICBtX2NoZWNrZWRSYWRpb0J1dHRv
bnMucmVtb3ZlQnV0dG9uKHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihlKSk7
CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGUpOworICAgIGlmIChl
bGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgewogICAgICAgICB1bnNpZ25lZCBp
bmRleDsKICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbV9hc3NvY2lhdGVkRWxlbWVu
dHMuc2l6ZSgpOyArK2luZGV4KQogICAgICAgICAgICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRz
W2luZGV4XSA9PSBlKQpAQCAtNTU0LDcgKzU3Miw5IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojp3
YXNVc2VyU3VibWl0dGVkKCkKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIEhUTUxGb3JtRWxlbWVu
dDo6ZGVmYXVsdEJ1dHRvbigpIGNvbnN0CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAg
aWYgKCFtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250
cm9sID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG1fYXNzb2NpYXRlZEVs
ZW1lbnRzW2ldKTsKICAgICAgICAgaWYgKGNvbnRyb2wtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bigpKQogICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7CiAgICAgfQpAQCAtNTY0LDIzICs1ODQs
MjMgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1FbGVtZW50OgogCiBib29sIEhU
TUxGb3JtRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PiA+IGNvbnRyb2xzOworICAgIFZlY3RvcjxSZWZQdHI8Rm9ybUFz
c29jaWF0ZWRFbGVtZW50PiA+IGNvbnRyb2xzOwogICAgIGNvbGxlY3RVbmhhbmRsZWRJbnZhbGlk
Q29udHJvbHMoY29udHJvbHMpOwogICAgIHJldHVybiBjb250cm9scy5pc0VtcHR5KCk7CiB9CiAK
LXZvaWQgSFRNTEZvcm1FbGVtZW50Ojpjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKFZl
Y3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiYgdW5oYW5kbGVkSW52YWxpZENv
bnRyb2xzKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29u
dHJvbHMoVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4mIHVuaGFuZGxlZElu
dmFsaWRDb250cm9scykKIHsKICAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBwcm90ZWN0b3Io
dGhpcyk7CiAgICAgLy8gQ29weSBtX2Fzc29jaWF0ZWRFbGVtZW50cyBiZWNhdXNlIGV2ZW50IGhh
bmRsZXJzIGNhbGxlZCBmcm9tCiAgICAgLy8gSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tW
YWxpZGl0eSgpIG1pZ2h0IGNoYW5nZSBtX2Fzc29jaWF0ZWRFbGVtZW50cy4KLSAgICBWZWN0b3I8
UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4gZWxlbWVudHM7CisgICAgVmVjdG9yPFJl
ZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4gZWxlbWVudHM7CiAgICAgZWxlbWVudHMucmVz
ZXJ2ZUNhcGFjaXR5KG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKQogICAgICAg
ICBlbGVtZW50cy5hcHBlbmQobV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBlbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoZWxl
bWVudHNbaV0tPmZvcm0oKSA9PSB0aGlzKQotICAgICAgICAgICAgZWxlbWVudHNbaV0tPmNoZWNr
VmFsaWRpdHkoJnVuaGFuZGxlZEludmFsaWRDb250cm9scyk7CisgICAgICAgIGlmIChlbGVtZW50
c1tpXS0+Zm9ybSgpID09IHRoaXMgJiYgZWxlbWVudHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZWxl
bWVudHNbaV0uZ2V0KCkpLT5jaGVja1ZhbGlkaXR5KCZ1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMp
OwogICAgIH0KIH0KIApAQCAtNjI4LDcgKzY0OCw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50Ojpk
b2N1bWVudERpZEJlY29tZUEKICAgICBBU1NFUlQoIW1fYXV0b2NvbXBsZXRlKTsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPnJlc2V0KCk7CisgICAgICAgIGlmICht
X2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihtX2Fzc29jaWF0ZWRFbGVt
ZW50c1tpXSktPnJlc2V0KCk7CiB9CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50Ojp3aWxsTW92ZVRv
TmV3T3duZXJEb2N1bWVudCgpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCShyZXZpc2lvbiA3
MzAwNykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudDsKK2Ns
YXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKIGNsYXNzIEZvcm1EYXRhOwogY2xhc3MgSFRNTEZv
cm1Db250cm9sRWxlbWVudDsKIGNsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7CkBAIC02NCw4ICs2NSw4
IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgcmVuYW1lIHRoZXNlIHR3byBmdW5j
dGlvbnMgdG8gc2F5ICJmb3JtIGNvbnRyb2wiCiAgICAgLy8gb3IgImZvcm0tYXNzb2NpYXRlZCBl
bGVtZW50IiBpbnN0ZWFkIG9mICJmb3JtIGVsZW1lbnQiLgotICAgIHZvaWQgcmVnaXN0ZXJGb3Jt
RWxlbWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVGb3JtRWxl
bWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvcm1FbGVt
ZW50KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlRm9ybUVsZW1lbnQo
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CiAgICAgdm9pZCByZWdpc3RlckltZ0VsZW1lbnQoSFRN
TEltYWdlRWxlbWVudCopOwogICAgIHZvaWQgcmVtb3ZlSW1nRWxlbWVudChIVE1MSW1hZ2VFbGVt
ZW50Kik7CiAKQEAgLTEwOSw3ICsxMTAsNyBAQCBwdWJsaWM6CiAKICAgICBDaGVja2VkUmFkaW9C
dXR0b25zJiBjaGVja2VkUmFkaW9CdXR0b25zKCkgeyByZXR1cm4gbV9jaGVja2VkUmFkaW9CdXR0
b25zOyB9CiAKLSAgICBjb25zdCBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBhc3Nv
Y2lhdGVkRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Fzc29jaWF0ZWRFbGVtZW50czsgfQor
ICAgIGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgYXNzb2NpYXRlZEVsZW1l
bnRzKCkgY29uc3QgeyByZXR1cm4gbV9hc3NvY2lhdGVkRWxlbWVudHM7IH0KIAogcHJpdmF0ZToK
ICAgICBIVE1MRm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkBA
IC0xMzEsMTMgKzEzMiwxMyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzdWJtaXQoRXZlbnQqLCBi
b29sIGFjdGl2YXRlU3VibWl0QnV0dG9uLCBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSwgRm9y
bVN1Ym1pc3Npb25UcmlnZ2VyKTsKIAotICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50SW5kZXhXaXRo
Rm9ybUF0dHJpYnV0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7Ci0gICAgdW5zaWduZWQgZm9y
bUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgdW5zaWduZWQgZm9y
bUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmlidXRlKEVsZW1lbnQqKTsKKyAgICB1bnNpZ25lZCBm
b3JtRWxlbWVudEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOwogICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgc3VibWlzc2lvbiBzaG91bGQgYmUgcHJvY2VlZGVkLgogICAgIGJvb2wgdmFs
aWRhdGVJbnRlcmFjdGl2ZWx5KEV2ZW50Kik7CiAgICAgLy8gVmFsaWRhdGVzIGVhY2ggb2YgdGhl
IGNvbnRyb2xzLCBhbmQgc3RvcmVzIGNvbnRyb2xzIG9mIHdoaWNoICdpbnZhbGlkJwogICAgIC8v
IGV2ZW50IHdhcyBub3QgY2FuY2VsZWQgdG8gdGhlIHNwZWNpZmllZCB2ZWN0b3IuCi0gICAgdm9p
ZCBjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4gPiYpOworICAgIHZvaWQgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250
cm9scyhWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiYpOwogCiAgICAgZnJp
ZW5kIGNsYXNzIEhUTUxGb3JtQ29sbGVjdGlvbjsKIApAQCAtMTUxLDcgKzE1Miw3IEBAIHByaXZh
dGU6CiAKICAgICB1bnNpZ25lZCBtX2Fzc29jaWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4OwogICAg
IHVuc2lnbmVkIG1fYXNzb2NpYXRlZEVsZW1lbnRzQWZ0ZXJJbmRleDsKLSAgICBWZWN0b3I8SFRN
TEZvcm1Db250cm9sRWxlbWVudCo+IG1fYXNzb2NpYXRlZEVsZW1lbnRzOworICAgIFZlY3RvcjxG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqPiBtX2Fzc29jaWF0ZWRFbGVtZW50czsKICAgICBWZWN0b3I8
SFRNTEltYWdlRWxlbWVudCo+IG1faW1hZ2VFbGVtZW50czsKIAogICAgIGJvb2wgbV93YXNVc2Vy
U3VibWl0dGVkOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNzMw
MDcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzOSw5ICsxMzksMTEgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVDaGVja2Vk
UmFkaQogICAgICAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogCiAg
ICAgaWYgKGZvcm0oKSkgewotICAgICAgICBjb25zdCBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxl
bWVudCo+JiBjb250cm9scyA9IGZvcm0oKS0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgICAg
IGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgY29udHJvbHMgPSBmb3JtKCkt
PmFzc29jaWF0ZWRFbGVtZW50cygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y29udHJvbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQqIGNvbnRyb2wgPSBjb250cm9sc1tpXTsKKyAgICAgICAgICAgIGlmICghY29udHJvbHNbaV0t
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1Db250cm9sRWxlbWVudCo+KGNvbnRyb2xzW2ldKTsKICAgICAgICAgICAgIGlmIChjb250
cm9sLT5uYW1lKCkgIT0gbmFtZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgaWYgKGNvbnRyb2wtPnR5cGUoKSAhPSB0eXBlKCkpCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9odG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTcgKzQ2LDI4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIEhUTUxP
YmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSAKK2lubGluZSBI
VE1MT2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wg
Y3JlYXRlZEJ5UGFyc2VyKSAKICAgICA6IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikKKyAgICAsIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChm
b3JtKQogICAgICwgbV9kb2NOYW1lZEl0ZW0odHJ1ZSkKICAgICAsIG1fdXNlRmFsbGJhY2tDb250
ZW50KGZhbHNlKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKG9iamVjdFRhZykpOworICAgIGlm
ICghdGhpcy0+Zm9ybSgpKQorICAgICAgICBzZXRGb3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7Cisg
ICAgaWYgKHRoaXMtPmZvcm0oKSkKKyAgICAgICAgdGhpcy0+Zm9ybSgpLT5yZWdpc3RlckZvcm1F
bGVtZW50KHRoaXMpOwogfQogCi1QYXNzUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBIVE1MT2Jq
ZWN0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCitpbmxpbmUgSFRNTE9iamVjdEVsZW1l
bnQ6On5IVE1MT2JqZWN0RWxlbWVudCgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1M
T2JqZWN0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyKSk7CisgICAg
aWYgKGZvcm0oKSkKKyAgICAgICAgZm9ybSgpLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKK30K
KworUGFzc1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gSFRNTE9iamVjdEVsZW1lbnQ6OmNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxG
b3JtRWxlbWVudCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBIVE1MT2JqZWN0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSwgY3Jl
YXRlZEJ5UGFyc2VyKSk7CiB9CiAKIFJlbmRlcldpZGdldCogSFRNTE9iamVjdEVsZW1lbnQ6OnJl
bmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdApAQCAtMzEzLDYgKzMyNCwxNCBAQCB2b2lk
IEhUTUxPYmplY3RFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtCiAgICAgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogfQogCit2b2lkIEhUTUxPYmplY3RFbGVt
ZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xz
KQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybUF0dHIpCisgICAgICAgIGZvcm1BdHRy
aWJ1dGVDaGFuZ2VkKCk7CisgICAgZWxzZQorICAgICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOworfQorCiB2b2lkIEhUTUxP
YmplY3RFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUq
IGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCiB7
CiAgICAgdXBkYXRlRG9jTmFtZWRJdGVtKCk7CkBAIC00NTMsNCArNDcyLDI3IEBAIHZvaWQgSFRN
TE9iamVjdEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXQKICAgICAgICAgYWRkU3VicmVzb3VyY2VV
UkwodXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXNlTWFwKSk7CiB9CiAKK3ZvaWQgSFRN
TE9iamVjdEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIEZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSgpOworICAgIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoZGVlcCk7Cit9CisKK3ZvaWQgSFRNTE9iamVjdEVs
ZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApCit7CisgICAgRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoKTsKKyAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpy
ZW1vdmVkRnJvbVRyZWUoZGVlcCk7Cit9CisKK2Jvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OmFwcGVu
ZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dHMgdGhpcyBmdW5jdGlvbi4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IEF0b21pY1N0
cmluZyYgSFRNTE9iamVjdEVsZW1lbnQ6OmZvcm1Db250cm9sTmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbmFtZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IG1fbmFtZTsKK30KKwogfQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgJKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxPYmplY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEzICsyMywxNyBA
QAogI2lmbmRlZiBIVE1MT2JqZWN0RWxlbWVudF9oCiAjZGVmaW5lIEhUTUxPYmplY3RFbGVtZW50
X2gKIAorI2luY2x1ZGUgIkZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBIVE1M
T2JqZWN0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50IHsKK2NsYXNzIEhU
TUxGb3JtRWxlbWVudDsKKworY2xhc3MgSFRNTE9iamVjdEVsZW1lbnQgOiBwdWJsaWMgSFRNTFBs
dWdJbkltYWdlRWxlbWVudCwgcHVibGljIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE9iamVjdEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SFRNTE9iamVjdEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7
CisgICAgdmlydHVhbCB+SFRNTE9iamVjdEVsZW1lbnQoKTsKIAogICAgIGJvb2wgaXNEb2NOYW1l
ZEl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2RvY05hbWVkSXRlbTsgfQogCkBAIC00MCwxMCArNDQs
MjUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCB1c2VGYWxsYmFja0NvbnRlbnQoKSBjb25z
dCB7IHJldHVybiBtX3VzZUZhbGxiYWNrQ29udGVudDsgfQogICAgIHZvaWQgcmVuZGVyRmFsbGJh
Y2tDb250ZW50KCk7CiAKKyAgICAvLyBJbXBsZW1lbnRhdGlvbnMgb2YgRm9ybUFzc29jaWF0ZWRF
bGVtZW50CisgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtKCkgY29uc3QgeyByZXR1cm4gRm9ybUFz
c29jaWF0ZWRFbGVtZW50Ojpmb3JtKCk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1Db250
cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
aXNFbnVtZXJhdGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpOworCisgICAgdmlydHVhbCB2b2lk
IGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzID0gZmFsc2Up
OworCisgICAgdXNpbmcgVHJlZVNoYXJlZDxDb250YWluZXJOb2RlPjo6cmVmOworICAgIHVzaW5n
IFRyZWVTaGFyZWQ8Q29udGFpbmVyTm9kZT46OmRlcmVmOworCiBwcml2YXRlOgotICAgIEhUTUxP
YmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyKTsKKyAgICBIVE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisgICAgdmly
dHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJ
c05lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1
bWVudCgpOwpAQCAtNjksNiArODgsMTEgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIGhhc1Zh
bGlkQ2xhc3NJZCgpOwogCisgICAgdmlydHVhbCB2b2lkIHJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZGb3JtQXNzb2NpYXRlZEVsZW1l
bnQoKSB7IGRlcmVmKCk7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3Jt
Q29udHJvbE5hbWUoKSBjb25zdDsKKwogICAgIEF0b21pY1N0cmluZyBtX2lkOwogICAgIFN0cmlu
ZyBtX2NsYXNzSWQ7CiAgICAgYm9vbCBtX2RvY05hbWVkSXRlbSA6IDE7CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTFRhZ05hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFn
TmFtZXMuaW4JKHJldmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5p
bgkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBub2JyIGludGVyZmFjZU5hbWU9SFRN
TEVsZW1lbnQKIG5vZW1iZWQgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogbm9mcmFtZXMgaW50
ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogbm9sYXllciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50
Ci1vYmplY3QgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgorb2JqZWN0IGNvbnN0cnVj
dG9yTmVlZHNGb3JtRWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgogb2wg
aW50ZXJmYWNlTmFtZT1IVE1MT0xpc3RFbGVtZW50CiBvcHRncm91cCBpbnRlcmZhY2VOYW1lPUhU
TUxPcHRHcm91cEVsZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAogb3B0aW9uIGNv
bnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudApJbmRleDogV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25N
ZXNzYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2Uu
Y3BwCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1BTFdBWVNfSU5MSU5FIFZhbGlkYXRpb25NZXNzYWdlOjpWYWxpZGF0aW9uTWVzc2FnZShI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQorQUxXQVlTX0lOTElORSBWYWxpZGF0aW9u
TWVzc2FnZTo6VmFsaWRhdGlvbk1lc3NhZ2UoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlbGVtZW50
KQogICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCiB7CiB9CkBAIC00NSw3ICs0NSw3IEBAIFZhbGlk
YXRpb25NZXNzYWdlOjp+VmFsaWRhdGlvbk1lc3NhZ2UoKQogICAgIGhpZGVNZXNzYWdlKCk7CiB9
CiAKLVBhc3NPd25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+IFZhbGlkYXRpb25NZXNzYWdlOjpjcmVh
dGUoSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCkKK1Bhc3NPd25QdHI8VmFsaWRhdGlv
bk1lc3NhZ2U+IFZhbGlkYXRpb25NZXNzYWdlOjpjcmVhdGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50
KiBlbGVtZW50KQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgVmFsaWRhdGlvbk1lc3NhZ2Uo
ZWxlbWVudCkpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmgJKHJldmlzaW9uIDcz
MDA3KQorKysgV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDIwICszOCwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ7CitjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ7CiAKIGNsYXNz
IFZhbGlkYXRpb25NZXNzYWdlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gY3JlYXRlKEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gY3Jl
YXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOwogICAgIH5WYWxpZGF0aW9uTWVzc2FnZSgpOwog
ICAgIFN0cmluZyBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CiAgICAgdm9p
ZCBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRlOgotICAgIFZhbGlkYXRpb25N
ZXNzYWdlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKKyAgICBWYWxpZGF0aW9uTWVzc2FnZShG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsKICAgICB2b2lkIGhpZGVNZXNzYWdlKFRpbWVyPFZhbGlk
YXRpb25NZXNzYWdlPiogPSAwKTsKIAotICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIG1fZWxl
bWVudDsKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIG1fZWxlbWVudDsKICAgICBTdHJpbmcg
bV9tZXNzYWdlOwogICAgIE93blB0cjxUaW1lcjxWYWxpZGF0aW9uTWVzc2FnZT4gPiBtX3RpbWVy
OwogfTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAJKHJldmlzaW9uIDczMDA3KQorKysgV2Vi
Q29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyNSArMzcs
MjYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogU3RyaW5nIFZhbGlkaXR5U3RhdGU6
OnZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29udHJvbC0+d2lsbFZh
bGlkYXRlKCkpCisgICAgaWYgKCF0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPndpbGxWYWxpZGF0
ZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpZiAoY3VzdG9tRXJyb3IoKSkK
ICAgICAgICAgcmV0dXJuIG1fY3VzdG9tRXJyb3JNZXNzYWdlOwotICAgIGJvb2wgaXNJbnB1dEVs
ZW1lbnQgPSBtX2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpOwotICAgIGJvb2wgaXNUZXh0
QXJlYUVsZW1lbnQgPSBtX2NvbnRyb2wtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpOworICAgIEhU
TUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChtX2NvbnRyb2wpOworICAgIGJvb2wg
aXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIGVsZW1l
bnQtPmhhc1RhZ05hbWUoaW5wdXRUYWcpOworICAgIGJvb2wgaXNUZXh0QXJlYUVsZW1lbnQgPSBl
bGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUodGV4
dGFyZWFUYWcpOwogICAgIC8vIFRoZSBvcmRlciBvZiB0aGUgZm9sbG93aW5nIGNoZWNrcyBpcyBt
ZWFuaW5nZnVsLiBlLmcuIFdlJ2QgbGlrZSB0byBzaG93IHRoZQogICAgIC8vIHZhbHVlTWlzc2lu
ZyBtZXNzYWdlIGV2ZW4gaWYgdGhlIGNvbnRyb2wgaGFzIG90aGVyIHZhbGlkYXRpb24gZXJyb3Jz
LgogICAgIGlmICh2YWx1ZU1pc3NpbmcoKSkgewotICAgICAgICBpZiAobV9jb250cm9sLT5oYXNU
YWdOYW1lKHNlbGVjdFRhZykpCisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHNlbGVj
dFRhZykpCiAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdG
b3JTZWxlY3RUZXh0KCk7CiAgICAgICAgIGlmIChpc0lucHV0RWxlbWVudCkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKS0+dmFsdWVN
aXNzaW5nVGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihlbGVtZW50KS0+dmFsdWVNaXNzaW5nVGV4dCgpOwogICAgICAgICByZXR1cm4gdmFs
aWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7CiAgICAgfQogICAgIGlmICh0eXBlTWlz
bWF0Y2goKSkgewogICAgICAgICBpZiAoaXNJbnB1dEVsZW1lbnQpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCktPnR5cGVNaXNtYXRj
aFRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4oZWxlbWVudCktPnR5cGVNaXNtYXRjaFRleHQoKTsKICAgICAgICAgcmV0dXJuIHZhbGlkYXRp
b25NZXNzYWdlVHlwZU1pc21hdGNoVGV4dCgpOwogICAgIH0KICAgICBpZiAocGF0dGVybk1pc21h
dGNoKCkpCkBAIC02NSw3ICs2Niw3IEBAIFN0cmluZyBWYWxpZGl0eVN0YXRlOjp2YWxpZGF0aW9u
TWVzc2FnZSgKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqPiht
X2NvbnRyb2wpOworICAgICAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dCA9IHN0
YXRpY19jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAgICAg
IHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVRvb0xvbmdUZXh0KG51bUdyYXBoZW1lQ2x1c3RlcnMo
dGV4dC0+dmFsdWUoKSksIHRleHQtPm1heExlbmd0aCgpKTsKICAgICB9CiAgICAgaWYgKHJhbmdl
VW5kZXJmbG93KCkpIHsKQEAgLTczLDIxICs3NCwyMSBAQCBTdHJpbmcgVmFsaWRpdHlTdGF0ZTo6
dmFsaWRhdGlvbk1lc3NhZ2UoCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFs
aWRhdGlvbk1lc3NhZ2VSYW5nZVVuZGVyZmxvd1RleHQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxl
bWVudCo+KG1fY29udHJvbCktPm1pbmltdW1TdHJpbmcoKSk7CisgICAgICAgIHJldHVybiB2YWxp
ZGF0aW9uTWVzc2FnZVJhbmdlVW5kZXJmbG93VGV4dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4oZWxlbWVudCktPm1pbmltdW1TdHJpbmcoKSk7CiAgICAgfQogICAgIGlmIChyYW5nZU92
ZXJmbG93KCkpIHsKICAgICAgICAgaWYgKCFpc0lucHV0RWxlbWVudCkgewogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VPdmVyZmxvd1RleHQo
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCktPm1heGltdW1TdHJpbmco
KSk7CisgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlT3ZlcmZsb3dUZXh0KHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KS0+bWF4aW11bVN0cmluZygpKTsK
ICAgICB9CiAgICAgaWYgKHN0ZXBNaXNtYXRjaCgpKSB7CiAgICAgICAgIGlmICghaXNJbnB1dEVs
ZW1lbnQpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCk7CisgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KGVsZW1lbnQpOwogICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VTdGVwTWlzbWF0Y2hU
ZXh0KGlucHV0LT5zdGVwQmFzZVN0cmluZygpLCBpbnB1dC0+c3RlcFN0cmluZygpKTsKICAgICB9
CiAKQEAgLTk3LDE3ICs5OCwxOSBAQCBTdHJpbmcgVmFsaWRpdHlTdGF0ZTo6dmFsaWRhdGlvbk1l
c3NhZ2UoCiB2b2lkIFZhbGlkaXR5U3RhdGU6OnNldEN1c3RvbUVycm9yTWVzc2FnZShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgbV9jdXN0b21FcnJvck1lc3NhZ2UgPSBtZXNzYWdlOwot
ICAgIG1fY29udHJvbC0+c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CisgICAgaWYgKG1fY29udHJv
bC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1D
b250cm9sRWxlbWVudCo+KG1fY29udHJvbCktPnNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogfQog
CiBib29sIFZhbGlkaXR5U3RhdGU6OnZhbHVlTWlzc2luZygpIGNvbnN0CiB7Ci0gICAgaWYgKG1f
Y29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVu
dCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKTsKKyAg
ICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQobV9jb250cm9sKTsKKyAgICBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKKyAgICAgICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CiAg
ICAgICAgIHJldHVybiBpbnB1dC0+dmFsdWVNaXNzaW5nKGlucHV0LT52YWx1ZSgpKTsKICAgICB9
Ci0gICAgaWYgKG1fY29udHJvbC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsKLSAgICAgICAg
SFRNTFRleHRBcmVhRWxlbWVudCogdGV4dEFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFF
bGVtZW50Kj4obV9jb250cm9sKTsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZSh0ZXh0YXJl
YVRhZykpIHsKKyAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCogdGV4dEFyZWEgPSBzdGF0aWNf
Y2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAgICAgIHJldHVybiB0ZXh0
QXJlYS0+dmFsdWVNaXNzaW5nKHRleHRBcmVhLT52YWx1ZSgpKTsKICAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTE1LDE0ICsxMTgsMTQgQEAgYm9vbCBWYWxpZGl0eVN0YXRlOjp2YWx1ZU1p
c3NpbmcoKSBjb25zdAogCiBib29sIFZhbGlkaXR5U3RhdGU6OnR5cGVNaXNtYXRjaCgpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgIGlmICgh
dG9IVE1MRWxlbWVudChtX2NvbnRyb2wpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
bV9jb250cm9sKS0+dHlwZU1pc21hdGNoKCk7CiB9CiAKIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cGF0
dGVybk1pc21hdGNoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29udHJvbC0+aGFzVGFnTmFtZShp
bnB1dFRhZykpCisgICAgaWYgKCF0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUo
aW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKTsKICAgICBy
ZXR1cm4gaW5wdXQtPnBhdHRlcm5NaXNtYXRjaChpbnB1dC0+dmFsdWUoKSk7CkBAIC0xMzAsMTEg
KzEzMywxMSBAQCBib29sIFZhbGlkaXR5U3RhdGU6OnBhdHRlcm5NaXNtYXRjaCgpIGNvCiAKIGJv
b2wgVmFsaWRpdHlTdGF0ZTo6dG9vTG9uZygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fY29udHJvbC0+
aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKKyAgICBpZiAodG9IVE1MRWxlbWVudChtX2NvbnRyb2wp
LT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgewogICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgICAgICBy
ZXR1cm4gaW5wdXQtPnRvb0xvbmcoaW5wdXQtPnZhbHVlKCksIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpDaGVja0RpcnR5RmxhZyk7CiAgICAgfQotICAgIGlmIChtX2NvbnRyb2wtPmhhc1Rh
Z05hbWUodGV4dGFyZWFUYWcpKSB7CisgICAgaWYgKHRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+
aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsKICAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudCog
dGV4dEFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50Kj4obV9jb250cm9sKTsK
ICAgICAgICAgcmV0dXJuIHRleHRBcmVhLT50b29Mb25nKHRleHRBcmVhLT52YWx1ZSgpLCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6Q2hlY2tEaXJ0eUZsYWcpOwogICAgIH0KQEAgLTE0Myw3
ICsxNDYsNyBAQCBib29sIFZhbGlkaXR5U3RhdGU6OnRvb0xvbmcoKSBjb25zdAogCiBib29sIFZh
bGlkaXR5U3RhdGU6OnJhbmdlVW5kZXJmbG93KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29udHJv
bC0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgaWYgKCF0b0hUTUxFbGVtZW50KG1fY29udHJv
bCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9j
b250cm9sKTsKICAgICByZXR1cm4gaW5wdXQtPnJhbmdlVW5kZXJmbG93KGlucHV0LT52YWx1ZSgp
KTsKQEAgLTE1MSw3ICsxNTQsNyBAQCBib29sIFZhbGlkaXR5U3RhdGU6OnJhbmdlVW5kZXJmbG93
KCkgY29uCiAKIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cmFuZ2VPdmVyZmxvdygpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFtX2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgIGlmICghdG9IVE1M
RWxlbWVudChtX2NvbnRyb2wpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KG1fY29udHJvbCk7CiAgICAgcmV0dXJuIGlucHV0LT5yYW5nZU92ZXJmbG93
KGlucHV0LT52YWx1ZSgpKTsKQEAgLTE1OSw3ICsxNjIsNyBAQCBib29sIFZhbGlkaXR5U3RhdGU6
OnJhbmdlT3ZlcmZsb3coKSBjb25zCiAKIGJvb2wgVmFsaWRpdHlTdGF0ZTo6c3RlcE1pc21hdGNo
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisg
ICAgaWYgKCF0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKTsKICAgICByZXR1cm4gaW5wdXQt
PnN0ZXBNaXNtYXRjaChpbnB1dC0+dmFsdWUoKSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvVmFsaWRp
dHlTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmgJKHJl
dmlzaW9uIDczMDA3KQorKysgV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTQgKzI0LDE0IEBACiAjaWZuZGVmIFZhbGlkaXR5U3RhdGVfaAogI2RlZmlu
ZSBWYWxpZGl0eVN0YXRlX2gKIAotI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFZhbGlkaXR5U3RhdGUgOiBw
dWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFZhbGlk
aXR5U3RhdGU+IGNyZWF0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sKQorICAgIHN0
YXRpYyBQYXNzT3duUHRyPFZhbGlkaXR5U3RhdGU+IGNyZWF0ZShGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqIGNvbnRyb2wpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFZhbGlkaXR5
U3RhdGUoY29udHJvbCkpOwogICAgIH0KQEAgLTU0LDEyICs1NCwxMiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCB2YWxpZCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFZhbGlkaXR5U3RhdGUoSFRNTEZv
cm1Db250cm9sRWxlbWVudCogY29udHJvbCkgOiBtX2NvbnRyb2woY29udHJvbCkgeyB9CisgICAg
VmFsaWRpdHlTdGF0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGNvbnRyb2wpIDogbV9jb250cm9s
KGNvbnRyb2wpIHsgfQogCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZENvbG9yU3RyaW5nKGNvbnN0
IFN0cmluZyYpOwogICAgIHN0YXRpYyBib29sIGlzVmFsaWRFbWFpbEFkZHJlc3MoY29uc3QgU3Ry
aW5nJik7CiAKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBtX2NvbnRyb2w7CisgICAgRm9y
bUFzc29jaWF0ZWRFbGVtZW50KiBtX2NvbnRyb2w7CiAgICAgU3RyaW5nIG1fY3VzdG9tRXJyb3JN
ZXNzYWdlOwogfTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAkocmV2aXNpb24g
NzMwMDcpCisrKyBXZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NSwxMCArMTc1LDExIEBAIFBhc3NSZWZQdHI8Rm9ybVN1Ym1pc3Npb24+IEZvcm1T
dWJtaXNzaW8KICAgICBWZWN0b3I8cGFpcjxTdHJpbmcsIFN0cmluZz4gPiBmb3JtVmFsdWVzOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygp
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wg
PSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXTsKLSAgICAgICAgaWYgKCFjb250cm9sLT5k
aXNhYmxlZCgpKQorICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGNvbnRyb2wgPSBmb3Jt
LT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXTsKKyAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0hUTUxFbGVtZW50KGNvbnRyb2wpOworICAgICAgICBpZiAoIWVsZW1lbnQtPmRpc2FibGVk
KCkpCiAgICAgICAgICAgICBjb250cm9sLT5hcHBlbmRGb3JtRGF0YSgqZG9tRm9ybURhdGEsIGlz
TXVsdGlQYXJ0Rm9ybSk7Ci0gICAgICAgIGlmIChjb250cm9sLT5oYXNMb2NhbE5hbWUoaW5wdXRU
YWcpKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNMb2NhbE5hbWUoaW5wdXRUYWcpKSB7CiAg
ICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihjb250cm9sKTsKICAgICAgICAgICAgIGlmIChpbnB1dC0+aXNUZXh0RmllbGQo
KSkgewogICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXMuYXBwZW5kKHBhaXI8U3RyaW5nLCBTdHJp
bmc+KGlucHV0LT5uYW1lKCksIGlucHV0LT52YWx1ZSgpKSk7CkluZGV4OiBXZWJLaXQvbWFjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzMz
MjQpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3
IEBACisyMDEwLTEyLTAzICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV0IEhUTUxP
YmplY3RFbGVtZW50IGJlIGEgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4ODIxCisKKyAgICAgICAgTW9kaWZp
ZWQgdG8gdXNlIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCBpbnN0ZWFkIG9mIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbToK
KyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGVsZW1lbnRXaXRoTmFtZTppbkZvcm06
XSk6IE1vZGlmaWVkIHRvIHVzZQorICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVh
ZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAgICAgICAoLVtXZWJIVE1MUmVwcmVzZW50
YXRpb24gY29udHJvbHNJbkZvcm06XSk6IERpdHRvLgorCiAyMDEwLTEyLTAzICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dp
YWsuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0J
KHJldmlzaW9uIDczMDA3KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRh
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg1LDEyICsyODUsMTIgQEAgLSAoRE9NRWxlbWVu
dCAqKWVsZW1lbnRXaXRoTmFtZTooTlNTdHJpbgogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybUVs
ZW1lbnQgPSBmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KGZvcm0pOwogICAgIGlmICghZm9ybUVs
ZW1lbnQpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRz
KCk7CisgICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVtZW50cyA9
IGZvcm1FbGVtZW50LT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKICAgICBBdG9taWNTdHJpbmcgdGFy
Z2V0TmFtZSA9IG5hbWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsdCA9IGVsZW1l
bnRzW2ldOworICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsdCA9IGVsZW1lbnRzW2ld
OwogICAgICAgICBpZiAoZWx0LT5uYW1lKCkgPT0gdGFyZ2V0TmFtZSkKLSAgICAgICAgICAgIHJl
dHVybiBraXQoZWx0KTsKKyAgICAgICAgICAgIHJldHVybiBraXQodG9IVE1MRWxlbWVudChlbHQp
KTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKIH0KQEAgLTMzMywxMCArMzMzLDEwIEBAIC0gKE5T
QXJyYXkgKiljb250cm9sc0luRm9ybTooRE9NRWxlbWVudCAKICAgICBpZiAoIWZvcm1FbGVtZW50
KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHRzID0gbmls
OwotICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGVsZW1lbnRzID0g
Zm9ybUVsZW1lbnQtPmFzc29jaWF0ZWRFbGVtZW50cygpOworICAgIGNvbnN0IFZlY3RvcjxGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVs
ZW1lbnRzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsg
aSsrKSB7CiAgICAgICAgIGlmIChlbGVtZW50c1tpXS0+aXNFbnVtZXJhdGFibGUoKSkgeyAvLyBT
a2lwIG9wdGlvbiBlbGVtZW50cywgb3RoZXIgZHVkcwotICAgICAgICAgICAgRE9NRWxlbWVudCog
ZGUgPSBraXQoZWxlbWVudHNbaV0pOworICAgICAgICAgICAgRE9NRWxlbWVudCogZGUgPSBraXQo
dG9IVE1MRWxlbWVudChlbGVtZW50c1tpXSkpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHRzKQog
ICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoT2JqZWN0
OmRlXTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczMzI0KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAt
MTItMDMgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZXQgSFRNTE9iamVjdEVsZW1l
bnQgYmUgYSBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MjEKKworICAgICAgICBBZGRzIGEgdGVzdCB0byBl
bnN1cmUgdGhlIG9yZGVyIG9mIGZvcm0uZWxlbWVudHMgYXR0cmlidXRlLgorICAgICAgICBVcGRh
dGVzIHR3byB0ZXN0cyB0byBjaGVjayB3aGV0aGVyIG9iamVjdCBlbGVtZW50cyBhcmUgaGFuZGxl
ZAorICAgICAgICBjb3JyZWN0bHkgaW4gZm9ybS5lbGVtZW50cyBhdHRyaWJ1dGUuCisKKyAgICAg
ICAgKiBmYXN0L2Zvcm1zL2Zvcm0tYXR0cmlidXRlLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAg
ICAgICAgKiBmYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1l
bnRzLW9yZGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3Rz
L2Zvcm0tYXR0cmlidXRlLmpzOiBVcGRhdGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0
LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5qczogQWRkZWQuCisgICAgICAg
IChjaGVja09yZGVyKToKKyAgICAgICAgKiBmYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNv
bGxlY3Rpb24tZWxlbWVudHMuanM6IFVwZGF0ZWQuCisKIDIwMTAtMTItMDMgIE1hcnRpbiBSb2Jp
bnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFkZCBhIHBsYXRmb3JtLXNw
ZWNpZmljIGJhc2VsaW5lIGZvciBHVEsrIGFmdGVyIHI3MzEyOC4gVGhpcyB0ZXN0CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tYXR0cmlidXRlLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tYXR0cmlidXRlLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNzMwMDcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tYXR0cmli
dXRlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCwxNCArNCwxNCBAQCBPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIAogLSBDaGVja3MgdGhlIGV4aXN0
ZW5jZSBvZiB0aGUgZm9ybSBhdHRyaWJ1dGUgZm9yIGVhY2ggZm9ybS1hc3NvY2lhdGVkIGVsZW1l
bnRzLgotRklYTUU6IDxsYWJlbD4gYW5kIDxvYmplY3Q+IGRvbid0IHN1cHBvcnQgdGhlIGZvcm0g
YXR0cmlidXRlIGZvciBub3cuCitGSVhNRTogPGxhYmVsPiBkb2Vzbid0IHN1cHBvcnQgdGhlIGZv
cm0gYXR0cmlidXRlIGZvciBub3cuCiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJidXR0b24iKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJmaWVsZHNldCIpWzBdLmZvcm0gaXMgb3duZXIKIFBBU1MgZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0uZm9ybSBpcyBvd25lcgogUEFTUyBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgia2V5Z2VuIilbMF0uZm9ybSBpcyBvd25lcgogRkFJTCBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGFiZWwiKVswXS5mb3JtIHNob3VsZCBiZSBbb2Jq
ZWN0IEhUTUxGb3JtRWxlbWVudF0uIFdhcyBudWxsLgogUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgibWV0ZXIiKVswXS5mb3JtIGlzIG93bmVyCi1GQUlMIGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXS5mb3JtIHNob3VsZCBiZSBbb2JqZWN0IEhUTUxG
b3JtRWxlbWVudF0uIFdhcyBudWxsLgorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgib2JqZWN0IilbMF0uZm9ybSBpcyBvd25lcgogUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgib3V0cHV0IilbMF0uZm9ybSBpcyBvd25lcgogUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgicHJvZ3Jlc3MiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKVswXS5mb3JtIGlzIG93bmVyCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24t
ZWxlbWVudHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MzAwNykKKysrIExheW91dFRlc3RzL2Zh
c3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNCw3ICs0LDcgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQQogCiAKIFRoaXMgdGVzdCBkb2VzIG5vdCBhZGQgb2JqZWN0IGVsZW1lbnQgYXMgYSBsaXN0
ZWQgZWxlbWVudC4gU2VwYXJhdGUgdGVzdCB3aWxsIGNvdmVyIHRoYXQuCi1QQVNTIG93bmVyLmVs
ZW1lbnRzLmxlbmd0aCBpcyAyMgorUEFTUyBvd25lci5lbGVtZW50cy5sZW5ndGggaXMgMjMKIFBB
U1Mgb3duZXIuZWxlbWVudHNbMF0uaWQgaXMgJ2J1dHRvbjEnCiBQQVNTIG93bmVyLmVsZW1lbnRz
WzFdLmlkIGlzICdmaWVsZHNldDEnCiBQQVNTIG93bmVyLmVsZW1lbnRzWzJdLmlkIGlzICdpbnB1
dGhpZGRlbicKQEAgLTI0LDkgKzI0LDEwIEBAIFBBU1Mgb3duZXIuZWxlbWVudHNbMTVdLmlkIGlz
ICdpbnB1dHN1Ym0KIFBBU1Mgb3duZXIuZWxlbWVudHNbMTZdLmlkIGlzICdpbnB1dHJlc2V0Jwog
UEFTUyBvd25lci5lbGVtZW50c1sxN10uaWQgaXMgJ2lucHV0YnV0dG9uJwogUEFTUyBvd25lci5l
bGVtZW50c1sxOF0uaWQgaXMgJ2tleWdlbjEnCi1QQVNTIG93bmVyLmVsZW1lbnRzWzE5XS5pZCBp
cyAnb3V0cHV0MScKLVBBU1Mgb3duZXIuZWxlbWVudHNbMjBdLmlkIGlzICdzZWxlY3QxJwotUEFT
UyBvd25lci5lbGVtZW50c1syMV0uaWQgaXMgJ3RleHRhcmVhMScKK1BBU1Mgb3duZXIuZWxlbWVu
dHNbMTldLmlkIGlzICdvYmplY3QxJworUEFTUyBvd25lci5lbGVtZW50c1syMF0uaWQgaXMgJ291
dHB1dDEnCitQQVNTIG93bmVyLmVsZW1lbnRzWzIxXS5pZCBpcyAnc2VsZWN0MScKK1BBU1Mgb3du
ZXIuZWxlbWVudHNbMjJdLmlkIGlzICd0ZXh0YXJlYTEnCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMv
Zm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0t
Y29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzEgQEAKK1RoaXMgdGVzdCBleGFtaW5lcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lh
dGVkIGVsZW1lbnRzIHdoaWNoIGFyZSBjbGFzc2lmaWVkIGFzICdsaXN0ZWQnLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworLSBDaGVja3MgdGhlIG9yZGVyIG9mIGZvcm0gYXNzb2Np
YXRlZCBlbGVtZW50cy4KK1BBU1MgY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQs
IGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKSBpcyAiT0siCisKKy0g
Q2hlY2tzIHRoZSBvcmRlciBhZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQuCitQ
QVNTIGNoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwg
c2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbZmllbGRzZXQsIGlu
cHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJPSyIKK1BBU1MgY2hl
Y2tPcmRlcihbb2JqZWN0LCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3Qs
IHRleHRhcmVhXSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFtvYmplY3QsIGZpZWxkc2V0LCBp
bnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGJ1dHRvbl0pIGlzICJPSyIK
KworLSBDaGVja3MgdGhlIG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50cyB3aXRoIGZv
cm0gYXR0cmlidXRlLgorUEFTUyBjaGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwg
a2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJPSyIKKworLSBD
aGVja3MgdGhlIG9yZGVyIGFmdGVyIHNvbWUgZWxlbWVudHMgcmVtb3ZlZC9pbnNlcnRlZCB3aXRo
IGZvcm0gYXR0cmlidXRlLgorUEFTUyBjaGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1
dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKSBpcyAiT0siCitQQVNTIGNoZWNr
T3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFd
KSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRw
dXQsIHNlbGVjdF0pIGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3RdKSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIo
W3RleHRhcmVhLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVj
dF0pIGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbdGV4dGFyZWEsIGZpZWxkc2V0LCBpbnB1dCwg
a2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCBidXR0b25dKSBpcyAiT0siCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1Rlc3QKKworCisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVy
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rp
b24tZWxlbWVudHMtb3JkZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRl
ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tYXR0cmlidXRlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tYXR0cmlidXRlLmpz
CShyZXZpc2lvbiA3MzAwNykKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3Rz
L2Zvcm0tYXR0cmlidXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQCB2YXIgY29u
dGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnCiBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGNvbnRhaW5lcik7CiAKIGRlYnVnKCctIENoZWNrcyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBm
b3JtIGF0dHJpYnV0ZSBmb3IgZWFjaCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMuJyk7Ci1kZWJ1
ZygnRklYTUU6ICZsdDtsYWJlbCZndDsgYW5kICZsdDtvYmplY3QmZ3Q7IGRvblwndCBzdXBwb3J0
IHRoZSBmb3JtIGF0dHJpYnV0ZSBmb3Igbm93LicpOworZGVidWcoJ0ZJWE1FOiAmbHQ7bGFiZWwm
Z3Q7IGRvZXNuXCd0IHN1cHBvcnQgdGhlIGZvcm0gYXR0cmlidXRlIGZvciBub3cuJyk7CiBjb250
YWluZXIuaW5uZXJIVE1MID0gJzxmb3JtIGlkPW93bmVyPjwvZm9ybT4nICsKICAgICAnPGJ1dHRv
biBuYW1lPXZpY3RpbSBmb3JtPW93bmVyIC8+JyArCiAgICAgJzxmaWVsZHNldCBuYW1lPXZpY3Rp
bSBmb3JtPW93bmVyIC8+JyArCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10
ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRz
LW9yZGVyLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQt
dGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEwMCBAQAorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBleGFtaW5lcyB0aGUgb3JkZXIg
b2YgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnRzIHdoaWNoIGFyZSBjbGFzc2lmaWVkIGFzICdsaXN0
ZWQnLiIpOworCit2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7Cit2YXIgb3duZXI7CisKK2Z1
bmN0aW9uIGNoZWNrT3JkZXIodmljdGltcykgeworICAgIGlmIChvd25lci5lbGVtZW50cy5sZW5n
dGggIT0gdmljdGltcy5sZW5ndGgpCisgICAgICAgIHJldHVybiAnbGVuZ3RoIG1pc21hdGNoLCBl
bGVtZW50cy5sZW5ndGggPSAnICsgb3duZXIuZWxlbWVudHMubGVuZ3RoICsKKyAgICAgICAgICAg
ICAgICcsIGV4cGVjdGVkIGxlbmd0aCA9ICcgKyB2aWN0aW1zLmxlbmd0aDsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHZpY3RpbXMubGVuZ3RoOyArK2kpCisgICAgICAgIGlmIChvd25lci5lbGVt
ZW50c1tpXSAhPSB2aWN0aW1zW2ldKQorICAgICAgICAgICAgcmV0dXJuICdlbGVtZW50IG1pc21h
dGNoIGF0IGluZGV4ICcgKyBpOworICAgIHJldHVybiAnT0snOworfQorCitkZWJ1ZygnLSBDaGVj
a3MgdGhlIG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50cy4nKTsKK2NvbnRhaW5lci5p
bm5lckhUTUwgPSAnPGZvcm0gaWQ9b3duZXI+JyArCisgICAgJzxidXR0b24gbmFtZT12aWN0aW0+
PC9idXR0b24+JyArCisgICAgJzxmaWVsZHNldCBuYW1lPXZpY3RpbT5UZXN0PC9maWVsZHNldD4n
ICsKKyAgICAnPGlucHV0IG5hbWU9dmljdGltLz4nICsKKyAgICAnPGtleWdlbiBuYW1lPXZpY3Rp
bT48L2tleWdlbj4nICsKKyAgICAnPGxhYmVsIG5hbWU9dmljdGltPjwvbGFiZWw+JyArCisgICAg
JzxtZXRlciBuYW1lPXZpY3RpbT48L21ldGVyPicgKworICAgICc8b2JqZWN0IG5hbWU9dmljdGlt
Pjwvb2JqZWN0PicgKworICAgICc8b3V0cHV0IG5hbWU9dmljdGltPjwvb3V0cHV0PicgKworICAg
ICc8cHJvZ3Jlc3MgbmFtZT12aWN0aW0+PC9wcm9ncmVzcz4nICsKKyAgICAnPHNlbGVjdCBuYW1l
PXZpY3RpbT48L3NlbGVjdD4nICsKKyAgICAnPHRleHRhcmVhIG5hbWU9dmljdGltPjwvdGV4dGFy
ZWE+JysKKyAgICAnPC9mb3JtPic7Citvd25lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdv
d25lcicpOwordmFyIGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0
b24nKVswXTsKK3ZhciBmaWVsZHNldCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdm
aWVsZHNldCcpWzBdOwordmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2lucHV0JylbMF07Cit2YXIga2V5Z2VuID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2tleWdlbicpWzBdOwordmFyIGxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2xhYmVsJylbMF07Cit2YXIgbWV0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
bWV0ZXInKVswXTsKK3ZhciBvYmplY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
b2JqZWN0JylbMF07Cit2YXIgb3V0cHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J291dHB1dCcpWzBdOwordmFyIHByb2dyZXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ3Byb2dyZXNzJylbMF07Cit2YXIgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJ3NlbGVjdCcpWzBdOwordmFyIHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ3RleHRhcmVhJylbMF07CitzaG91bGRCZSgnY2hlY2tPcmRlcihbYnV0dG9uLCBm
aWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFd
KScsICciT0siJyk7CisKK2RlYnVnKCcnKTsKK2RlYnVnKCctIENoZWNrcyB0aGUgb3JkZXIgYWZ0
ZXIgc29tZSBlbGVtZW50cyByZW1vdmVkL2luc2VydGVkLicpOworb3duZXIucmVtb3ZlQ2hpbGQo
b2JqZWN0KTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwg
a2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKScsICciT0siJyk7Citvd25lci5yZW1v
dmVDaGlsZChidXR0b24pOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwg
a2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKScsICciT0siJyk7Citvd25lci5pbnNl
cnRCZWZvcmUob2JqZWN0LCBmaWVsZHNldCk7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbb2JqZWN0
LCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSknLCAn
Ik9LIicpOworb3duZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTsKK3Nob3VsZEJlKCdjaGVja09yZGVy
KFtvYmplY3QsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFy
ZWEsIGJ1dHRvbl0pJywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWcoJy0gQ2hlY2tzIHRo
ZSBvcmRlciBvZiBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudHMgd2l0aCBmb3JtIGF0dHJpYnV0ZS4n
KTsKK2NvbnRhaW5lci5pbm5lckhUTUwgPSAnPGJ1dHRvbiBuYW1lPXZpY3RpbSBmb3JtPW93bmVy
PjwvYnV0dG9uPicgKworICAgICc8ZmllbGRzZXQgbmFtZT12aWN0aW0gZm9ybT1vd25lcj5UZXN0
PC9maWVsZHNldD4nICsKKyAgICAnPGlucHV0IG5hbWU9dmljdGltIGZvcm09b3duZXIvPicgKwor
ICAgICc8a2V5Z2VuIG5hbWU9dmljdGltIGZvcm09b3duZXI+PC9rZXlnZW4+JyArCisgICAgJzxm
b3JtIGlkPW93bmVyPicgKworICAgICc8bGFiZWwgbmFtZT12aWN0aW0+PC9sYWJlbD4nICsKKyAg
ICAnPG1ldGVyIG5hbWU9dmljdGltPjwvbWV0ZXI+JyArCisgICAgJzxvYmplY3QgbmFtZT12aWN0
aW0+PC9vYmplY3Q+JyArCisgICAgJzwvZm9ybT4nICsKKyAgICAnPG91dHB1dCBuYW1lPXZpY3Rp
bSBmb3JtPW93bmVyPjwvb3V0cHV0PicgKworICAgICc8cHJvZ3Jlc3MgbmFtZT12aWN0aW0gZm9y
bT1vd25lcj48L3Byb2dyZXNzPicgKworICAgICc8c2VsZWN0IG5hbWU9dmljdGltIGZvcm09b3du
ZXI+PC9zZWxlY3Q+JyArCisgICAgJzx0ZXh0YXJlYSBuYW1lPXZpY3RpbSBmb3JtPW93bmVyPjwv
dGV4dGFyZWE+JzsKK293bmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyJyk7Citi
dXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMF07CitmaWVs
ZHNldCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmaWVsZHNldCcpWzBdOworaW5w
dXQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXTsKK2tleWdlbiA9
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdrZXlnZW4nKVswXTsKK2xhYmVsID0gZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xhYmVsJylbMF07CittZXRlciA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtZXRlcicpWzBdOworb2JqZWN0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpWzBdOworb3V0cHV0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJ291dHB1dCcpWzBdOworcHJvZ3Jlc3MgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgncHJvZ3Jlc3MnKVswXTsKK3NlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCdzZWxlY3QnKVswXTsKK3RleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ3RleHRhcmVhJylbMF07CitzaG91bGRCZSgnY2hlY2tPcmRlcihbYnV0dG9u
LCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFy
ZWFdKScsICciT0siJyk7CisKK2RlYnVnKCcnKTsKK2RlYnVnKCctIENoZWNrcyB0aGUgb3JkZXIg
YWZ0ZXIgc29tZSBlbGVtZW50cyByZW1vdmVkL2luc2VydGVkIHdpdGggZm9ybSBhdHRyaWJ1dGUu
Jyk7Citvd25lci5yZW1vdmVDaGlsZChvYmplY3QpOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2J1
dHRvbiwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0p
JywgJyJPSyInKTsKK2NvbnRhaW5lci5yZW1vdmVDaGlsZChidXR0b24pOworc2hvdWxkQmUoJ2No
ZWNrT3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFy
ZWFdKScsICciT0siJyk7Citjb250YWluZXIucmVtb3ZlQ2hpbGQodGV4dGFyZWEpOworc2hvdWxk
QmUoJ2NoZWNrT3JkZXIoW2ZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdF0p
JywgJyJPSyInKTsKK293bmVyLmFwcGVuZENoaWxkKG9iamVjdCk7CitzaG91bGRCZSgnY2hlY2tP
cmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3RdKScs
ICciT0siJyk7Citjb250YWluZXIuaW5zZXJ0QmVmb3JlKHRleHRhcmVhLCBmaWVsZHNldCk7Citz
aG91bGRCZSgnY2hlY2tPcmRlcihbdGV4dGFyZWEsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBv
YmplY3QsIG91dHB1dCwgc2VsZWN0XSknLCAnIk9LIicpOworY29udGFpbmVyLmFwcGVuZENoaWxk
KGJ1dHRvbik7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbdGV4dGFyZWEsIGZpZWxkc2V0LCBpbnB1
dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCBidXR0b25dKScsICciT0siJyk7CisK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1l
bGVtZW50cy5qcwkocmV2aXNpb24gNzMwMDcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3Nj
cmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMuanMJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8Zm9ybSBpZD0iZm9ybTEiPgog
ICAgICc8a2V5Z2VuIGlkPWtleWdlbjE+PC9rZXlnZW4+JyArCiAgICAgJzxsYWJlbCBpZD1sYWJl
bDE+PC9sYWJlbD4nICsKICAgICAnPG1ldGVyIGlkPW1ldGVyMT48L21ldGVyPicgKworICAgICc8
b2JqZWN0IGlkPW9iamVjdDE+PC9vYmplY3Q+JyArCiAgICAgJzxvdXRwdXQgaWQ9b3V0cHV0MT48
L291dHB1dD4nICsKICAgICAnPHByb2dyZXNzIGlkPXByb2dyZXNzMT48L3Byb2dyZXNzPicgKwog
ICAgICc8c2VsZWN0IGlkPXNlbGVjdDE+JyArCkBAIC0zOCw3ICszOSw3IEBAIGNvbnRhaW5lci5p
bm5lckhUTUwgPSAnPGZvcm0gaWQ9ImZvcm0xIj4KIAogdmFyIG93bmVyID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2Zvcm0xJyk7CiAKLXNob3VsZEJlKCdvd25lci5lbGVtZW50cy5sZW5ndGgn
LCAnMjInKTsKK3Nob3VsZEJlKCdvd25lci5lbGVtZW50cy5sZW5ndGgnLCAnMjMnKTsKIHNob3Vs
ZEJlKCdvd25lci5lbGVtZW50c1swXS5pZCcsICInYnV0dG9uMSciKTsKIHNob3VsZEJlKCdvd25l
ci5lbGVtZW50c1sxXS5pZCcsICInZmllbGRzZXQxJyIpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1l
bnRzWzJdLmlkJywgIidpbnB1dGhpZGRlbiciKTsKQEAgLTU4LDkgKzU5LDEwIEBAIHNob3VsZEJl
KCdvd25lci5lbGVtZW50c1sxNV0uaWQnLCAiJ2lucHUKIHNob3VsZEJlKCdvd25lci5lbGVtZW50
c1sxNl0uaWQnLCAiJ2lucHV0cmVzZXQnIik7CiBzaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMTdd
LmlkJywgIidpbnB1dGJ1dHRvbiciKTsKIHNob3VsZEJlKCdvd25lci5lbGVtZW50c1sxOF0uaWQn
LCAiJ2tleWdlbjEnIik7Ci1zaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMTldLmlkJywgIidvdXRw
dXQxJyIpOwotc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzIwXS5pZCcsICInc2VsZWN0MSciKTsK
LXNob3VsZEJlKCdvd25lci5lbGVtZW50c1syMV0uaWQnLCAiJ3RleHRhcmVhMSciKTsKK3Nob3Vs
ZEJlKCdvd25lci5lbGVtZW50c1sxOV0uaWQnLCAiJ29iamVjdDEnIik7CitzaG91bGRCZSgnb3du
ZXIuZWxlbWVudHNbMjBdLmlkJywgIidvdXRwdXQxJyIpOworc2hvdWxkQmUoJ293bmVyLmVsZW1l
bnRzWzIxXS5pZCcsICInc2VsZWN0MSciKTsKK3Nob3VsZEJlKCdvd25lci5lbGVtZW50c1syMl0u
aWQnLCAiJ3RleHRhcmVhMSciKTsKIAogCiB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>
<flag name="review"
          id="66423"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75648</attachid>
            <date>2010-12-05 22:56:05 -0800</date>
            <delta_ts>2010-12-06 03:26:22 -0800</delta_ts>
            <desc>Patch V4</desc>
            <filename>formassocV4.patch</filename>
            <type>text/plain</type>
            <size>149795</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzM0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI3IEBACisyMDEwLTEyLTA1ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTGV0IEhUTUxPYmplY3RFbGVtZW50IGJlIGEgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4ODIxCisKKyAg
ICAgICAgSW50cm9kdWNlcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgY2xhc3Mgd2hpY2ggd291bGQg
YmUgYSBzdXBlciBjbGFzcworICAgICAgICBvZiBmb3JtIGFzc29jYXRlZCBlbGVtZW50cy4gU29t
ZSBvZiBtZW1iZXIgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgb2YKKyAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCBhcmUgbWlncmF0ZWQgaW50byB0aGlzIGNsYXNzLgorICAgICAgICBGb2xs
b3dpbmcgdGhlIEhUTUw1IHNwZWMsIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgY2xhc3MgYW5kCisg
ICAgICAgIEhUTUxPYmplY3RFbGVtZW50IGNsYXNzIGFyZSBzdWJjbGFzc2VzIG9mIGl0IGZvciBu
b3cuCisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMt
b3JkZXIuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazogQWRkZWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmNwcAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogQWRkZWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkZWQgdGhlIHN5bWJvbCBmb3IgdG9IVE1MRWxlbWVudChG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqKQorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8u
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaDogRml4ZWQgY2xhc3MgZm9yd2FyZCBkZWNsYXJhdGlv
biBvcmRlci4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSk6IE1vZGlmaWVk
IHRvCisgICAgICAgIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZXNldEZvcm1FbGVtZW50c093bmVyKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
aDogRGl0dG8uCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OkRPTUZvcm1EYXRhKToKKyAgICAgICAgKiBodG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6IENvcGllZCBhbmQgcmVuYW1lZCBmcm9tIFdlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6fkZvcm1Bc3NvY2lhdGVkRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1Ob1ZhbGlkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6dmFsaWRpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1Pd25l
cik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1BdHRyaWJ1
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSFRNTEVsZW1lbnQpOgorICAgICAgICAq
IGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZWYpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29j
aWF0ZWRFbGVtZW50OjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ6OmZvcm1EZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRF
bGVtZW50OjpzZXRGb3JtKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0pOiBNb2RpZmllZCB0
byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50CisgICAgICAgIGluc3RlYWQgb2YgSFRNTEZvcm1D
b250cm9sRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlvbjo6Z2V0
TmFtZWRGb3JtSXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0
aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuY3BwOiBNb2RpZmllZCByZWdhcmRpbmcgd2l0aCB0aGUgY2hhbmdlIG9mIGNs
YXNzCisgICAgICAgIGhpZXJhcmNoeS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNGb2N1cyk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRGVmYXVsdEJ1
dHRvbkZvckZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
Lmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNhYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp0eXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlZkZvcm1Bc3NvY2lhdGVkRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXJlZkZv
cm1Bc3NvY2lhdGVkRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3Bw
OiBNb2RpZmllZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50CisgICAgICAgIGluc3RlYWQg
b2YgSFRNTEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudDo6c3VibWl0SW1wbGljaXRseSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQ6OnZhbGlkYXRlSW50ZXJhY3RpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQ6OnN1Ym1pdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmZvcm1F
bGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudDo6cmVtb3ZlRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50OjpkZWZhdWx0QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dDo6Y2hlY2tWYWxpZGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNv
bGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1F
bGVtZW50Lmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojphc3Nv
Y2lhdGVkRWxlbWVudHMpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dXBkYXRlQ2hlY2tlZFJh
ZGlvQnV0dG9ucyk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6IE1vZGlm
aWVkIHJlZ2FyZGluZyB3aXRoIHRoZSBjaGFuZ2Ugb2YgY2xhc3MKKyAgICAgICAgaGllcmFyY2h5
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojp+SFRNTE9iamVjdEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKToKKyAgICAgICAg
KiBodG1sL0hUTUxPYmplY3RFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9iamVjdEVsZW1lbnQ6OmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1l
bnQ6OmlzRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RF
bGVtZW50Ojppc0VudW1lcmF0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxl
bWVudDo6cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
YmplY3RFbGVtZW50OjpkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCk6CisgICAgICAgICogaHRt
bC9IVE1MVGFnTmFtZXMuaW46IEFkZGVkIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudCB0byBv
YmplY3QgdGFnLgorICAgICAgICAqIGh0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwOiBNb2RpZmll
ZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50CisgICAgICAgIGluc3RlYWQgb2YgSFRNTEZv
cm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRpb25NZXNzYWdlOjpW
YWxpZGF0aW9uTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0aW9uTWVzc2FnZTo6
Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL1ZhbGlkYXRpb25NZXNzYWdlLmg6IERpdHRvLgorICAg
ICAgICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
VmFsaWRpdHlTdGF0ZTo6dmFsaWRhdGlvbk1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VmFs
aWRpdHlTdGF0ZTo6c2V0Q3VzdG9tRXJyb3JNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlZh
bGlkaXR5U3RhdGU6OnZhbHVlTWlzc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0
YXRlOjp0eXBlTWlzbWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6cGF0
dGVybk1pc21hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6OnRvb0xvbmcp
OgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6cmFuZ2VVbmRlcmZsb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6cmFuZ2VPdmVyZmxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpzdGVwTWlzbWF0Y2gpOgorICAgICAgICAqIGh0bWwvVmFs
aWRpdHlTdGF0ZS5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpWYWxpZGl0eVN0YXRlKToK
KyAgICAgICAgKiBsb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpjcmVhdGUpOgorCiAyMDEwLTEyLTA1ICBLZW50IFRhbXVy
YSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBSdW4gc29ydC1Y
Y29kZS1wcm9qZWN0LWZpbGUuCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA3MzM0OSkKKysrIFdlYkNvcmUvQW5kcm9p
ZC5tawkod29ya2luZyBjb3B5KQpAQCAtMjc3LDYgKzI3Nyw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6
PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCWh0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAg
XAogCWh0bWwvRW1haWxJbnB1dFR5cGUuY3BwIFwKIAlodG1sL0ZpbGVJbnB1dFR5cGUuY3BwIFwK
KwlodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgXAogCWh0bWwvRm9ybURhdGFMaXN0LmNw
cCBcCiAJaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXAogCWh0bWwvSFRNTENvbGxlY3Rpb24u
Y3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzMzNDkpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OTEsNiArOTkxLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNF
UwogICAgIGh0bWwvRW1haWxJbnB1dFR5cGUuY3BwCiAgICAgaHRtbC9GVFBEaXJlY3RvcnlEb2N1
bWVudC5jcHAKICAgICBodG1sL0ZpbGVJbnB1dFR5cGUuY3BwCisgICAgaHRtbC9Gb3JtQXNzb2Np
YXRlZEVsZW1lbnQuY3BwCiAgICAgaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCiAgICAgaHRtbC9IVE1M
QWxsQ29sbGVjdGlvbi5jcHAKICAgICBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcApJbmRleDog
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA3MzM0OSkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE1ODUsNiArMTU4NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9odG1sL0VtYWlsSW5wdXRUeXBlLmggXAogCVdlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNw
cCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaCBcCisJV2ViQ29yZS9odG1sL0Zvcm1B
c3NvY2lhdGVkRWxlbWVudC5jcHAgXAorCVdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1l
bnQuaCBcCiAJV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogCVdlYkNvcmUvaHRtbC9G
b3JtRGF0YUxpc3QuaCBcCiAJV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBc
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDczMzQ5KQorKysgV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgko
d29ya2luZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw3IEBAIF9fWk43V2ViQ29yZTEzS2V5Ym9hcmRF
dmVudEMxRVJLTjNXVEYxMkEKIF9fWk43V2ViQ29yZTEzVHlwaW5nQ29tbWFuZDM5aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50RVBOU184RG9jdW1lbnRFCiBfX1pON1dlYkNv
cmUxM2NyZWF0ZVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVj
dEVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUxM3RvRGV2aWNlU3BhY2VFUktOU185RmxvYXRSZWN0
RVA4TlNXaW5kb3cKK19fWk43V2ViQ29yZTEzdG9IVE1MRWxlbWVudEVQTlNfMjFGb3JtQXNzb2Np
YXRlZEVsZW1lbnRFCiBfX1pON1dlYkNvcmUxM3RvSlNET01XaW5kb3dFTjNKU0M3SlNWYWx1ZUUK
IF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2UxMnJlbW92ZUNsaWVudEVQTlNfMjBDYWNoZWRS
ZXNvdXJjZUNsaWVudEUKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2U5YWRkQ2xpZW50RVBO
U18yMENhY2hlZFJlc291cmNlQ2xpZW50RQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDczMzQ5KQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE2NDIsNiArMTY0Miw4IEBACiAg
ICAgICAgICAgICAnaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5oJywKICAgICAgICAgICAgICdo
dG1sL0ZpbGVJbnB1dFR5cGUuY3BwJywKICAgICAgICAgICAgICdodG1sL0ZpbGVJbnB1dFR5cGUu
aCcsCisgICAgICAgICAgICAnaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwJywKKyAgICAg
ICAgICAgICdodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oJywKICAgICAgICAgICAgICdodG1s
L0Zvcm1EYXRhTGlzdC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRm9ybURhdGFMaXN0LmgnLAog
ICAgICAgICAgICAgJ2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwJywKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24g
NzMzNDkpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC04ODIsNiAr
ODgyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9FbWFpbElucHV0VHlwZS5jcHAgXAogICAg
IGh0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIFwKICAgICBodG1sL0ZpbGVJbnB1dFR5cGUu
Y3BwIFwKKyAgICBodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgXAogICAgIGh0bWwvRm9y
bURhdGFMaXN0LmNwcCBcCiAgICAgaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXAogICAgIGh0
bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwIFwKQEAgLTE3OTUsNiArMTc5Niw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIGh0bWwvRE9NRm9ybURhdGEuaCBcCiAgICAgaHRtbC9ET01TZXR0YWJsZVRva2Vu
TGlzdC5oIFwKICAgICBodG1sL0RPTVRva2VuTGlzdC5oIFwKKyAgICBodG1sL0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudC5oIFwKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5oIFwKICAgICBodG1sL0ZUUERp
cmVjdG9yeURvY3VtZW50LmggXAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uaCBcCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDczMzQ5KQorKysg
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
NTAzNjYsNiArNTAzNjYsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5caHRtbFxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZvcm1Bc3NvY2lh
dGVkRWxlbWVudC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxodG1sXEZvcm1EYXRhTGlzdC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczMzQ5
KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTExNjAsNiArMTE2MCw4IEBACiAJCTQ5RkZCRjFEMTFDODU1MEUwMDZBNzExOCAv
KiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRl
eHQzRE1hYy5tbSAqLzsgfTsKIAkJNDlGRkJGM0YxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RkZC
RjNEMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggKi87IH07CiAJCTQ5RkZCRjQwMTFD
OTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5
ZXIubW0gKi87IH07CisJCTRBMERBMkZFMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEEwREEyRkMxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAg
Ki87IH07CisJCTRBMERBMkZGMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBMERB
MkZEMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0QThDOTZFQjBCRTY5MDMy
MDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBOEM5NkVBMEJFNjkwMzIwMDRFRUZGMCAvKiBT
ZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tICovOyB9OwogCQk0QUNCQzBCRTEyNzEzQ0JEMDA5NEY5
QjIgLyogQ2xhc3NMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRBQ0JDMEJDMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFzc0xpc3QuY3BwICovOyB9
OwogCQk0QUNCQzBCRjEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUNCQzBCRDEyNzEzQ0JEMDA5NEY5
QjIgLyogQ2xhc3NMaXN0LmggKi87IH07CkBAIC03MzExLDYgKzczMTMsOCBAQAogCQk0OUZGQkYx
QzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRE1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGRkJGM0QxMUM5M0VFMzAwNkE3MTE4IC8qIFdl
YkdMTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xMYXllci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTgg
LyogV2ViR0xMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYkdMTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRBMERBMkZDMTI5
QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEEwREEyRkQxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1B
c3NvY2lhdGVkRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEE4Qzk2
RUEwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gU2VsZWN0aW9uQ29udHJvbGxlck1hYy5t
bTsgcGF0aCA9IG1hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0QUNCQzBCQzEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsYXNzTGlzdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBQ0JDMEJEMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFz
c0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xhc3NMaXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDgxNCw2ICsxNDgxOCw4IEBACiAJCQkJRjU1
QjNEODgxMjUxRjEyRDAwM0VGMjY5IC8qIEVtYWlsSW5wdXRUeXBlLmggKi8sCiAJCQkJRjU1QjNE
ODkxMjUxRjEyRDAwM0VGMjY5IC8qIEZpbGVJbnB1dFR5cGUuY3BwICovLAogCQkJCUY1NUIzRDhB
MTI1MUYxMkQwMDNFRjI2OSAvKiBGaWxlSW5wdXRUeXBlLmggKi8sCisJCQkJNEEwREEyRkMxMjlC
MjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgKi8sCisJCQkJNEEwREEy
RkQxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oICovLAogCQkJCUE4
MTM2RDM3MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3BwICovLAogCQkJCUE4MTM2
RDM2MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuaCAqLywKIAkJCQk5NzIwNUFBRDEy
MzkyOENBMDBCMTczODAgLyogRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwICovLApAQCAtMTk3Njgs
NiArMTk3NzQsNyBAQAogCQkJCTM3ODRDMzRCMEUxMUFBMzQwMDdEOEQ0OCAvKiBGb250VHJhaXRz
TWFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjczNEIxODMxMTlCOTkxRDAwNjU4N0JEIC8qIEZv
bnRUcmFuc2NvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNFRDBBMTk4OUNBMDA3RkI4
QzUgLyogRm9udFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0QTBEQTJGRjEyOUIyNDE5MDBB
QjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEMDVD
RUQyQTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTRDNzY3MDBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA4NUI5MkJCMEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCBp
biBIZWFkZXJzICovLApAQCAtMjI0MzAsNiArMjI0MzcsNyBAQAogCQkJCUI1MzIwRDZDMTIyQTI0
RTkwMDJEMTQ0MCAvKiBGb250UGxhdGZvcm1EYXRhQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlCNzM0QjE4MTExOUI5OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgwRTZDRjEwQTE5ODlDQTAwN0ZCOEM1IC8qIEZvbnRWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk0QTBEQTJGRTEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0
ZWRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYz
OCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NkYw
Q0U5MjNBMTAwN0VGM0NEIC8qIEZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4NUI5
MkJBMEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oCShyZXZpc2lvbiA3MzM0OSkKKysrIFdl
YkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCAr
MjcsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7
CiBjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OworY2xhc3MgSFRNTElucHV0RWxlbWVudDsK
IAogY2xhc3MgQ2hlY2tlZFJhZGlvQnV0dG9ucyB7CiBwdWJsaWM6CkluZGV4OiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiA3MzM0OSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC00Mzg4LDIz
ICs0Mzg5LDIzIEBAIHZvaWQgRG9jdW1lbnQ6OnNldEljb25VUkwoY29uc3QgU3RyaW5nJiAKICAg
ICAgICAgZi0+bG9hZGVyKCktPnNldEljb25VUkwobV9pY29uVVJMKTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEVsZW1lbnQqIGNvbnRy
b2wpCit2b2lkIERvY3VtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUo
Rm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlbGVtZW50KQogewotICAgIEFTU0VSVChjb250cm9sLT5m
YXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSk7Ci0gICAgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0
dHJpYnV0ZS5hZGQoY29udHJvbCk7CisgICAgQVNTRVJUKHRvSFRNTEVsZW1lbnQoZWxlbWVudCkt
PmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKKyAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3Jt
QXR0cmlidXRlLmFkZChlbGVtZW50KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCogY29udHJvbCkKK3ZvaWQgRG9jdW1l
bnQ6OnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRl
LnJlbW92ZShjb250cm9sKTsKKyAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLnJl
bW92ZShlbGVtZW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVzZXRGb3JtRWxlbWVudHNPd25l
cihIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiB7Ci0gICAgdHlwZWRlZiBGb3JtRWxlbWVudExpc3RI
YXNoU2V0OjppdGVyYXRvciBJdGVyYXRvcjsKKyAgICB0eXBlZGVmIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudExpc3RIYXNoU2V0OjppdGVyYXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQgPSBt
X2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLmVuZCgpOwogICAgIGZvciAoSXRlcmF0b3Ig
aXQgPSBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KCppdCkt
PnJlc2V0Rm9ybU93bmVyKGZvcm0pOworICAgICAgICAoKml0KS0+cmVzZXRGb3JtT3duZXIoZm9y
bSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0
aXZlKGJvb2wgdXNlc1NlY3VyZUtleWJvYXJkKQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA3MzM0OSkK
KysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcg
QEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEVudGl0eVJlZmVyZW5jZTsKIGNsYXNzIEV2ZW50Owog
Y2xhc3MgRXZlbnRMaXN0ZW5lcjsKK2NsYXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKIGNsYXNz
IEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CkBAIC00
OTAsOCArNDkxLDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzU3RhdGVGb3JOZXdGb3JtRWxlbWVu
dHMoKSBjb25zdDsKICAgICBib29sIHRha2VTdGF0ZUZvckZvcm1FbGVtZW50KEF0b21pY1N0cmlu
Z0ltcGwqIG5hbWUsIEF0b21pY1N0cmluZ0ltcGwqIHR5cGUsIFN0cmluZyYgc3RhdGUpOwogCi0g
ICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCopOwot
ICAgIHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCop
OworICAgIHZvaWQgcmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudCopOworICAgIHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1B
dHRyaWJ1dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CiAgICAgdm9pZCByZXNldEZvcm1FbGVt
ZW50c093bmVyKEhUTUxGb3JtRWxlbWVudCopOwogCiAgICAgRnJhbWVWaWV3KiB2aWV3KCkgY29u
c3Q7IC8vIGNhbiBiZSBOVUxMCkBAIC0xMjExLDcgKzEyMTIsOCBAQCBwcml2YXRlOgogCiAgICAg
dHlwZWRlZiBMaXN0SGFzaFNldDxFbGVtZW50KiwgNjQ+IEZvcm1FbGVtZW50TGlzdEhhc2hTZXQ7
CiAgICAgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZTsKLSAg
ICBGb3JtRWxlbWVudExpc3RIYXNoU2V0IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGU7
CisgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqLCAzMj4gRm9y
bUFzc29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQ7CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50
TGlzdEhhc2hTZXQgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZTsKIAogICAgIHR5cGVk
ZWYgSGFzaE1hcDxGb3JtRWxlbWVudEtleSwgVmVjdG9yPFN0cmluZz4sIEZvcm1FbGVtZW50S2V5
SGFzaCwgRm9ybUVsZW1lbnRLZXlIYXNoVHJhaXRzPiBGb3JtRWxlbWVudFN0YXRlTWFwOwogICAg
IEZvcm1FbGVtZW50U3RhdGVNYXAgbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50czsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0RP
TUZvcm1EYXRhLmNwcAkocmV2aXNpb24gNzMzNDkpCisrKyBXZWJDb3JlL2h0bWwvRE9NRm9ybURh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw5IEBAIERPTUZvcm1EYXRhOjpET01G
b3JtRGF0YShIVE1MRm9ybUVsZW1lbnQKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtLT5hc3NvY2lh
dGVkRWxlbWVudHMoKVtpXTsKLSAgICAgICAgaWYgKCFjb250cm9sLT5kaXNhYmxlZCgpKQotICAg
ICAgICAgICAgY29udHJvbC0+YXBwZW5kRm9ybURhdGEoKnRoaXMsIHRydWUpOworICAgICAgICBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQgPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMo
KVtpXTsKKyAgICAgICAgaWYgKCF0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5kaXNhYmxlZCgpKQor
ICAgICAgICAgICAgZWxlbWVudC0+YXBwZW5kRm9ybURhdGEoKnRoaXMsIHRydWUpOwogICAgIH0K
IH0KIApJbmRleDogV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAJKHJldmlzaW9u
IDczMDA3KQkoZnJvbSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6NzMw
MDcpCisrKyBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNiBB
bGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQXR0cmli
dXRlLmgiCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkRvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiRWxlbWVudFJhcmVEYXRhLmgiCisjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiTGFiZWxzTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJWYWxpZGF0aW9uTWVzc2FnZS5oIgorI2luY2x1ZGUgIlZhbGlkaXR5U3RhdGUuaCIKKyNp
bmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2Ugc3Rk
OworCitIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVt
ZW50KiBmb3JtKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBt
X2Zvcm0oZm9ybSkKKyAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCisgICAgLCBtX3JlYWRPbmx5KGZh
bHNlKQorICAgICwgbV9yZXF1aXJlZChmYWxzZSkKKyAgICAsIG1fdmFsdWVNYXRjaGVzUmVuZGVy
ZXIoZmFsc2UpCisgICAgLCBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwg
bV93aWxsVmFsaWRhdGUodHJ1ZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQoreworICAgIGlmICgh
bV9mb3JtKQorICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7CisgICAgaWYgKG1f
Zm9ybSkKKyAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworfQorCitI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVudCgpCit7CisgICAg
aWYgKG1fZm9ybSkKKyAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKK30K
Kwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKQoreworICAgIGhpZGVWaXNp
YmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICBIVE1MRWxlbWVudDo6ZGV0YWNoKCk7Cit9CisK
K2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybU5vVmFsaWRhdGUoKSBjb25zdAorewor
ICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGZvcm1ub3ZhbGlkYXRlQXR0cikuaXNOdWxsKCk7Cit9
CisKK1ZhbGlkaXR5U3RhdGUqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkaXR5KCkKK3sK
KyAgICBpZiAoIW1fdmFsaWRpdHlTdGF0ZSkKKyAgICAgICAgbV92YWxpZGl0eVN0YXRlID0gVmFs
aWRpdHlTdGF0ZTo6Y3JlYXRlKHRoaXMpOworCisgICAgcmV0dXJuIG1fdmFsaWRpdHlTdGF0ZS5n
ZXQoKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXNhYmxl
ZEF0dHIpIHsKKyAgICAgICAgYm9vbCBvbGREaXNhYmxlZCA9IG1fZGlzYWJsZWQ7CisgICAgICAg
IG1fZGlzYWJsZWQgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAgICAgIGlmIChvbGREaXNhYmxlZCAh
PSBtX2Rpc2FibGVkKSB7CisgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAg
ICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJh
bmNlKCkpCisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2Vk
KHJlbmRlcmVyKCksIEVuYWJsZWRTdGF0ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSByZWFkb25seUF0dHIpIHsKKyAgICAgICAgYm9vbCBvbGRSZWFkT25seSA9
IG1fcmVhZE9ubHk7CisgICAgICAgIG1fcmVhZE9ubHkgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAg
ICAgIGlmIChvbGRSZWFkT25seSAhPSBtX3JlYWRPbmx5KSB7CisgICAgICAgICAgICBzZXROZWVk
c1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigp
LT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+
dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIFJlYWRPbmx5U3RhdGUpOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVxdWlyZWRBdHRyKSB7CisgICAg
ICAgIGJvb2wgb2xkUmVxdWlyZWQgPSBtX3JlcXVpcmVkOworICAgICAgICBtX3JlcXVpcmVkID0g
IWF0dHItPmlzTnVsbCgpOworICAgICAgICBpZiAob2xkUmVxdWlyZWQgIT0gbV9yZXF1aXJlZCkg
eworICAgICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CisgICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7IC8vIFVwZGF0ZXMgZm9yIDpyZXF1aXJlZCA6b3B0aW9uYWwgY2xh
c3Nlcy4KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwor
fQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCgpCit7CisgICAgQVNTRVJU
KCFhdHRhY2hlZCgpKTsKKworICAgIEhUTUxFbGVtZW50OjphdHRhY2goKTsKKworICAgIC8vIFRo
ZSBjYWxsIHRvIHVwZGF0ZUZyb21FbGVtZW50KCkgbmVlZHMgdG8gZ28gYWZ0ZXIgdGhlIGNhbGwg
dGhyb3VnaAorICAgIC8vIHRvIHRoZSBiYXNlIGNsYXNzJ3MgYXR0YWNoKCkgYmVjYXVzZSB0aGF0
IGNhbiBzb21ldGltZXMgZG8gYSBjbG9zZQorICAgIC8vIG9uIHRoZSByZW5kZXJlci4KKyAgICBp
ZiAocmVuZGVyZXIoKSkKKyAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsK
KyAgICAgICAgCisgICAgLy8gRm9jdXMgdGhlIGVsZW1lbnQgaWYgaXQgc2hvdWxkIGhvbm91ciBp
dHMgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4KKyAgICAvLyBXZSBoYXZlIHRvIGRldGVybWluZSBpZiB0
aGUgZWxlbWVudCBpcyBhIFRleHRBcmVhL0lucHV0L0J1dHRvbi9TZWxlY3QsCisgICAgLy8gaWYg
aW5wdXQgdHlwZSBoaWRkZW4gaWdub3JlIGF1dG9mb2N1cy4gU28gaWYgZGlzYWJsZWQgb3IgcmVh
ZG9ubHkuCisgICAgYm9vbCBpc0lucHV0VHlwZUhpZGRlbiA9IGZhbHNlOworICAgIGlmIChoYXNU
YWdOYW1lKGlucHV0VGFnKSkKKyAgICAgICAgaXNJbnB1dFR5cGVIaWRkZW4gPSBzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Kj4odGhpcyktPmlzSW5wdXRUeXBlSGlkZGVuKCk7CisKKyAgICBp
ZiAoYXV0b2ZvY3VzKCkgJiYgcmVuZGVyZXIoKSAmJiAhZG9jdW1lbnQoKS0+aWdub3JlQXV0b2Zv
Y3VzKCkgJiYgIWlzUmVhZE9ubHlGb3JtQ29udHJvbCgpICYmCisgICAgICAgICAgICAoKGhhc1Rh
Z05hbWUoaW5wdXRUYWcpICYmICFpc0lucHV0VHlwZUhpZGRlbikgfHwgaGFzVGFnTmFtZShzZWxl
Y3RUYWcpIHx8CisgICAgICAgICAgICAgIGhhc1RhZ05hbWUoYnV0dG9uVGFnKSB8fCBoYXNUYWdO
YW1lKHRleHRhcmVhVGFnKSkpCisgICAgICAgICBmb2N1cygpOworfQorCit2b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIGlmIChm
YXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3Rl
ckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CisgICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGZvcm1B
dHRyKSk7CisgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRh
ZykpIHsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0pCisgICAgICAgICAgICAgICAgbV9mb3JtLT5y
ZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3Rl
ckZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICB9CisgICAgfQorICAgIGlmICghbV9mb3JtKSB7
CisgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiBhIG5ldyBmb3JtIGVsZW1lbnQg
YmVpbmcgY3JlYXRlZCBieQorICAgICAgICAvLyBKYXZhU2NyaXB0IGFuZCBpbnNlcnRlZCBpbnNp
ZGUgYSBmb3JtLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIHBhcnNlcgorICAgICAgICAvLyBzZXR0aW5n
IGEgZm9ybSwgd2Ugd2lsbCBhbHJlYWR5IGhhdmUgYSBub24tbnVsbCB2YWx1ZSBmb3IgbV9mb3Jt
LCAKKyAgICAgICAgLy8gYW5kIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAg
ICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICAgICAgaWYgKG1fZm9ybSkKKyAg
ICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRv
bih0aGlzKTsKKyAgICB9CisKKyAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVw
KTsKK30KKworc3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9vdChOb2RlKiBuKQoreworICAgIE5v
ZGUqIHJvb3QgPSBuOworICAgIGZvciAoOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKQorICAgICAg
ICByb290ID0gbjsKKyAgICByZXR1cm4gcm9vdDsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKQoreworICAgIGlmIChmYXN0SGFzQXR0
cmlidXRlKGZvcm1BdHRyKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVt
ZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CisKKyAgICAvLyBJZiB0aGUgZm9ybSBhbmQgZWxl
bWVudCBhcmUgYm90aCBpbiB0aGUgc2FtZSB0cmVlLCBwcmVzZXJ2ZSB0aGUgY29ubmVjdGlvbiB0
byB0aGUgZm9ybS4KKyAgICAvLyBPdGhlcndpc2UsIG51bGwgb3V0IG91ciBmb3JtIGFuZCByZW1v
dmUgb3Vyc2VsdmVzIGZyb20gdGhlIGZvcm0ncyBsaXN0IG9mIGVsZW1lbnRzLgorICAgIGlmICht
X2Zvcm0gJiYgZmluZFJvb3QodGhpcykgIT0gZmluZFJvb3QobV9mb3JtKSkgeworICAgICAgICBt
X2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICBtX2Zvcm0gPSAwOworICAg
IH0KKworICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoZGVlcCk7Cit9CisKK2NvbnN0
IEF0b21pY1N0cmluZyYgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkg
Y29uc3QKK3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBmYXN0R2V0QXR0cmlidXRl
KG5hbWVBdHRyKTsKKyAgICByZXR1cm4gbmFtZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IG5hbWU7
Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmFtZShjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlKQoreworICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOworfQor
Cit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VF
dmVudCgpCit7CisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5j
aGFuZ2VFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpzZXREaXNhYmxlZChib29sIGIpCit7CisgICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0
ciwgYiA/ICIiIDogMCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXV0b2Zv
Y3VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzQXR0cmlidXRlKGF1dG9mb2N1c0F0dHIpOwor
fQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZXF1aXJlZDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnRD
YWxsYmFjayhOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9BUkcobm9kZSwgbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKTsKKyAgICBBU1NFUlRfQVJHKG5vZGUsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
b2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSk7CisgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVy
KCkpOworICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKSkK
KyAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUZyb21FbGVtZW50KCk7Cit9CisKK3ZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQoreworICAg
IEhUTUxFbGVtZW50OjpyZWNhbGNTdHlsZShjaGFuZ2UpOworCisgICAgLy8gdXBkYXRlRnJvbUVs
ZW1lbnQoKSBjYW4gY2F1c2UgdGhlIHNlbGVjdGlvbiB0byBjaGFuZ2UsIGFuZCBpbiB0dXJuCisg
ICAgLy8gdHJpZ2dlciBzeW5jaHJvbm91cyBsYXlvdXQsIHNvIGl0IG11c3Qgbm90IGJlIGNhbGxl
ZCBkdXJpbmcgc3R5bGUgcmVjYWxjLgorICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICBxdWV1
ZVBvc3RBdHRhY2hDYWxsYmFjayh1cGRhdGVGcm9tRWxlbWVudENhbGxiYWNrLCB0aGlzKTsKK30K
KworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIWRpc2FibGVkKCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6aXNGb2N1c2FibGUoKSBjb25zdAoreworICAgIGlmICghcmVuZGVyZXIoKSB8fCAKKyAgICAg
ICAgIXJlbmRlcmVyKCktPmlzQm94KCkgfHwgdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPnNpemUo
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBIVE1MRWxlbWVudDo6
aXNGb2N1c2FibGUgaGFuZGxlcyB2aXNpYmlsaXR5IGFuZCBjYWxscyBzdXBvcnRzRm9jdXMgd2hp
Y2gKKyAgICAvLyB3aWxsIGNvdmVyIHRoZSBkaXNhYmxlZCBjYXNlLgorICAgIHJldHVybiBIVE1M
RWxlbWVudDo6aXNGb2N1c2FibGUoKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAg
IGlmIChpc0ZvY3VzYWJsZSgpKQorICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+dGFi
c1RvQWxsQ29udHJvbHMoZXZlbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QKK3sKKyNpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQorICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNNb3Vz
ZUZvY3VzYWJsZSgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworc2hv
cnQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdAoreworICAgIC8vIFNr
aXAgdGhlIHN1cHBvcnRzRm9jdXMgY2hlY2sgaW4gSFRNTEVsZW1lbnQuCisgICAgcmV0dXJuIEVs
ZW1lbnQ6OnRhYkluZGV4KCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVj
YWxjV2lsbFZhbGlkYXRlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIHJldHVybiBm
YWxzZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgZGF0YWxpc3QgZWxlbWVudCBhcyBhbgorICAgIC8v
IGFuY2VzdG9yLiBTZWUgSFRNTDUgNC4xMC4xMCAnVGhlIGRhdGFsaXN0IGVsZW1lbnQuJworICAg
IHJldHVybiAhbV9kaXNhYmxlZCAmJiAhbV9yZWFkT25seTsKK30KKworYm9vbCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Ojp3aWxsVmFsaWRhdGUoKSBjb25zdAoreworICAgIGlmICghbV93aWxsVmFs
aWRhdGVJbml0aWFsaXplZCkgeworICAgICAgICBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0g
dHJ1ZTsKKyAgICAgICAgbV93aWxsVmFsaWRhdGUgPSByZWNhbGNXaWxsVmFsaWRhdGUoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIGFzc2VydGlvbiBmYWlscywg
c2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpIGlzIG5vdAorICAgICAgICAvLyBjYWxsZWQgY29y
cmVjdGx5IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMgcmVjYWxjV2lsbFZhbGlkYXRlKCkg
cmVzdWx0CisgICAgICAgIC8vIGlzIHVwZGF0ZWQuCisgICAgICAgIEFTU0VSVChtX3dpbGxWYWxp
ZGF0ZSA9PSByZWNhbGNXaWxsVmFsaWRhdGUoKSk7CisgICAgfQorICAgIHJldHVybiBtX3dpbGxW
YWxpZGF0ZTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROZWVkc1dpbGxW
YWxpZGF0ZUNoZWNrKCkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHdpbGxWYWxp
ZHRlIGltbWVkaWF0ZWx5IGJlY2F1c2Ugd2lsbFZhbGlkYXRlCisgICAgLy8gY2hhbmdlIGNhbiBj
YXVzZXMgc3R5bGUgY2hhbmdlLgorICAgIGJvb2wgbmV3V2lsbFZhbGlkYXRlID0gcmVjYWxjV2ls
bFZhbGlkYXRlKCk7CisgICAgaWYgKG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQgJiYgbV93aWxs
VmFsaWRhdGUgPT0gbmV3V2lsbFZhbGlkYXRlKQorICAgICAgICByZXR1cm47CisgICAgbV93aWxs
VmFsaWRhdGVJbml0aWFsaXplZCA9IHRydWU7CisgICAgbV93aWxsVmFsaWRhdGUgPSBuZXdXaWxs
VmFsaWRhdGU7CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGlmICghbV93aWxsVmFs
aWRhdGUpCisgICAgICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKK30KKworU3Ry
aW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkKK3sKKyAgICBy
ZXR1cm4gdmFsaWRpdHkoKS0+dmFsaWRhdGlvbk1lc3NhZ2UoKTsKK30KKwordm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQoreworICAg
IFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAgaWYgKHJlbmRlcmVyKCkgJiYgd2ls
bFZhbGlkYXRlKCkpIHsKKyAgICAgICAgbWVzc2FnZSA9IHZhbGlkYXRpb25NZXNzYWdlKCkuc3Ry
aXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIC8vIEhUTUw1IHNwZWNpZmljYXRpb24gZG9lc24ndCBh
c2sgVUEgdG8gc2hvdyB0aGUgdGl0bGUgYXR0cmlidXRlIHZhbHVlCisgICAgICAgIC8vIHdpdGgg
dGhlIHZhbGlkYXRpb25NZXNzYWdlLiAgSG93ZXZlciwgdGhpcyBiZWhhdmlvciBpcyBzYW1lIGFz
IE9wZXJhCisgICAgICAgIC8vIGFuZCB0aGUgc3BlY2lmaWNhdGlvbiBkZXNjcmliZXMgc3VjaCBi
ZWhhdmlvciBhcyBhbiBleGFtcGxlLgorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxl
ID0gZ2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CisgICAgICAgIGlmICghbWVzc2FnZS5pc0VtcHR5
KCkgJiYgIXRpdGxlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ1xu
Jyk7CisgICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCh0aXRsZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKCFtX3ZhbGlkYXRpb25NZXNzYWdlKSB7CisgICAgICAgIG1fdmFsaWRhdGlvbk1l
c3NhZ2UgPSBWYWxpZGF0aW9uTWVzc2FnZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX3ZhbGlk
YXRpb25NZXNzYWdlLT5zZXRNZXNzYWdlKG1lc3NhZ2UpOworICAgIH0gZWxzZSBpZiAobWVzc2Fn
ZS5pc0VtcHR5KCkpCisgICAgICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAg
ICBlbHNlIGlmIChtX3ZhbGlkYXRpb25NZXNzYWdlLT5tZXNzYWdlKCkgIT0gbWVzc2FnZSkKKyAg
ICAgICAgbV92YWxpZGF0aW9uTWVzc2FnZS0+c2V0TWVzc2FnZShtZXNzYWdlKTsKK30KKwordm9p
ZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkK
K3sKKyAgICBtX3ZhbGlkYXRpb25NZXNzYWdlID0gMDsKK30KKworU3RyaW5nIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdmFsaWRhdGlvbk1lc3NhZ2UgPyBtX3ZhbGlkYXRpb25NZXNzYWdlLT5tZXNzYWdlKCkg
OiBTdHJpbmcoKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlk
aXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52
YWxpZENvbnRyb2xzKQoreworICAgIGlmICghd2lsbFZhbGlkYXRlKCkgfHwgaXNWYWxpZEZvcm1D
b250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBBbiBldmVudCBo
YW5kbGVyIGNhbiBkZXJlZiB0aGlzIG9iamVjdC4KKyAgICBSZWZQdHI8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOworICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2luYWxE
b2N1bWVudChkb2N1bWVudCgpKTsKKyAgICBib29sIG5lZWRzRGVmYXVsdEFjdGlvbiA9IGRpc3Bh
dGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxzZSwg
dHJ1ZSkpOworICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52YWxpZENv
bnRyb2xzICYmIGluRG9jdW1lbnQoKSAmJiBvcmlnaW5hbERvY3VtZW50ID09IGRvY3VtZW50KCkp
CisgICAgICAgIHVuaGFuZGxlZEludmFsaWRDb250cm9scy0+YXBwZW5kKHRoaXMpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlkRm9y
bUNvbnRyb2xFbGVtZW50KCkKK3sKKyAgICAvLyBJZiB0aGUgZm9sbG93aW5nIGFzc2VydGlvbiBm
YWlscywgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCkgaXMgbm90IGNhbGxlZAorICAgIC8vIGNvcnJl
Y3RseSB3aGVuIHNvbWV0aGluZyB3aGljaCBjaGFuZ2VzIHZhbGlkaXR5IGlzIHVwZGF0ZWQuCisg
ICAgQVNTRVJUKG1faXNWYWxpZCA9PSB2YWxpZGl0eSgpLT52YWxpZCgpKTsKKyAgICByZXR1cm4g
bV9pc1ZhbGlkOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzVmFs
aWRpdHlDaGVjaygpCit7CisgICAgYm9vbCBuZXdJc1ZhbGlkID0gdmFsaWRpdHkoKS0+dmFsaWQo
KTsKKyAgICBpZiAod2lsbFZhbGlkYXRlKCkgJiYgbmV3SXNWYWxpZCAhPSBtX2lzVmFsaWQpIHsK
KyAgICAgICAgLy8gVXBkYXRlIHN0eWxlIGZvciBwc2V1ZG8gY2xhc3NlcyBzdWNoIGFzIDp2YWxp
ZCA6aW52YWxpZC4KKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIH0KKyAgICBt
X2lzVmFsaWQgPSBuZXdJc1ZhbGlkOworCisgICAgLy8gVXBkYXRlcyBvbmx5IGlmIHRoaXMgY29u
dHJvbCBhbHJlYWR5IGhhcyBhIHZhbGlkdGlvbiBtZXNzYWdlLgorICAgIGlmICghdmlzaWJsZVZh
bGlkYXRpb25NZXNzYWdlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIENhbGxzIHVwZGF0ZVZp
c2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGV2ZW4gaWYgbV9pc1ZhbGlkIGlzIG5vdAorICAgICAg
ICAvLyBjaGFuZ2VkIGJlY2F1c2UgYSB2YWxpZGF0aW9uIG1lc3NhZ2UgY2FuIGJlIGNoYWduZWQu
CisgICAgICAgIHVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgIH0KK30KKwor
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJp
bmcmIGVycm9yKQoreworICAgIHZhbGlkaXR5KCktPnNldEN1c3RvbUVycm9yTWVzc2FnZShlcnJv
cik7Cit9CisgICAgCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNF
dmVudCgpCit7CisgICAgaWYgKGRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQo
KS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZvcm1EaWRGb2N1cyh0aGlzKTsKKworICAg
IEhUTUxFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKTsKK30KKwordm9pZCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpCit7CisgICAgaWYgKGRvY3VtZW50KCkt
PnBhZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCkt
PmZvcm1EaWRCbHVyKHRoaXMpOworCisgICAgSFRNTEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50
KCk7CisgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworfQorCitIVE1MRm9ybUVs
ZW1lbnQqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9mb3JtOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRGVm
YXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdAoreworICAgIHJldHVybiBpc1N1Y2Nlc3NmdWxTdWJt
aXRCdXR0b24oKSAmJiBtX2Zvcm0gJiYgbV9mb3JtLT5kZWZhdWx0QnV0dG9uKCkgPT0gdGhpczsK
K30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVGcm9tRm9ybSgpCit7Cisg
ICAgaWYgKCFtX2Zvcm0pCisgICAgICAgIHJldHVybjsKKyAgICBtX2Zvcm0tPnJlbW92ZUZvcm1F
bGVtZW50KHRoaXMpOworICAgIG1fZm9ybSA9IDA7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6cmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQoreworICAgIGlm
IChtX2Zvcm0pIHsKKyAgICAgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlz
KTsKKyAgICB9CisgICAgbV9mb3JtID0gMDsKKyAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3Jt
QXR0cikpIHsKKyAgICAgICAgLy8gVGhlIEhUTUw1IHNwZWMgc2F5cyB0aGF0IHRoZSBlbGVtZW50
IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgLy8gdGhlIGZpcnN0IGVsZW1lbnQg
aW4gdGhlIGRvY3VtZW50IHRvIGhhdmUgYW4gSUQgdGhhdCBlcXVhbCB0bworICAgICAgICAvLyB0
aGUgdmFsdWUgb2YgZm9ybSBhdHRyaWJ1dGUsIHNvIHdlIHB1dCB0aGUgcmVzdWx0IG9mCisgICAg
ICAgIC8vIGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKCkgb3ZlciB0aGUgZ2l2ZW4gZWxlbWVu
dC4KKyAgICAgICAgRWxlbWVudCogZmlyc3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVu
dEJ5SWQoZmFzdEdldEF0dHJpYnV0ZShmb3JtQXR0cikpOworICAgICAgICBpZiAoZmlyc3RFbGVt
ZW50ICYmIGZpcnN0RWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKKyAgICAgICAgICAgIG1f
Zm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVudCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fZm9ybSA9IGZvcm07CisgICAgfSBlbHNlCisgICAgICAg
IG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBt
X2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgZWxzZQorICAgICAgICBkb2N1
bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworfQorCit2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRy
LCBib29sIHByZXNlcnZlRGVjbHMpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBmb3JtQXR0
cikgeworICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgICAg
ICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBmb3Jt
IG93bmVyIGhlcmUuCisgICAgICAgICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAgICAgIG1f
Zm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgICAgICBtX2Zvcm0gPSBmaW5k
Rm9ybUFuY2VzdG9yKCk7CisgICAgICAgICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAgICAg
IG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9u
KHRoaXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc2V0Rm9ybU93bmVyKDApOwor
ICAgIH0KKyAgICBIVE1MRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURl
Y2xzKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0xhYmVsYWJsZSgpIGNv
bnN0Cit7CisgICAgLy8gRklYTUU6IEFkZCBtZXRlclRhZyBhbmQgb3V0cHV0VGFnIHRvIHRoZSBs
aXN0IG9uY2Ugd2Ugc3VwcG9ydCB0aGVtLgorICAgIHJldHVybiBoYXNUYWdOYW1lKGJ1dHRvblRh
ZykgfHwgaGFzVGFnTmFtZShpbnB1dFRhZykgfHwgaGFzVGFnTmFtZShrZXlnZW5UYWcpCisjaWYg
RU5BQkxFKE1FVEVSX1RBRykKKyAgICAgICAgfHwgaGFzVGFnTmFtZShtZXRlclRhZykKKyNlbmRp
ZgorI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgICAgIHx8IGhhc1RhZ05hbWUocHJvZ3Jl
c3NUYWcpCisjZW5kaWYKKyAgICAgICAgfHwgaGFzVGFnTmFtZShzZWxlY3RUYWcpIHx8IGhhc1Rh
Z05hbWUodGV4dGFyZWFUYWcpOworfQorCitQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpsYWJlbHMoKQoreworICAgIGlmICghaXNMYWJlbGFibGUoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKCFkb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBOb2RlOjplbnN1cmVSYXJlRGF0YSgpOworICAg
IGlmICghZGF0YS0+bm9kZUxpc3RzKCkpIHsKKyAgICAgICAgZGF0YS0+c2V0Tm9kZUxpc3RzKE5v
ZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVM
aXN0Q2FjaGUoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIExhYmVsc05vZGVMaXN0OjpjcmVh
dGUodGhpcyk7Cit9CisgICAgCitIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKKyAgICA6IEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQoreworICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9y
bUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Cit9CisKK0hUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCkKK3sKKyAgICBkb2N1bWVu
dCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Cit9CisKK3ZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KQoreworICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlz
KTsKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVu
dCgpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpZE1vdmVU
b05ld093bmVyRG9jdW1lbnQoKQoreworICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1l
bnRXaXRoU3RhdGUodGhpcyk7CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlkTW92ZVRv
TmV3T3duZXJEb2N1bWVudCgpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6OmF1dG9Db21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFmb3JtKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBmb3JtKCktPmF1dG9Db21wbGV0ZSgpOworfQorCiti
b29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnNob3VsZFNhdmVBbmRSZXN0b3Jl
Rm9ybUNvbnRyb2xTdGF0ZSgpIGNvbnN0Cit7CisgICAgLy8gV2UgZG9uJ3Qgc2F2ZS9yZXN0b3Jl
IGNvbnRyb2wgc3RhdGUgaW4gYSBmb3JtIHdpdGggYXV0b2NvbXBsZXRlPW9mZi4KKyAgICByZXR1
cm4gYXR0YWNoZWQoKSAmJiBhdXRvQ29tcGxldGUoKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlOjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQoreworICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworCisgICAgLy8gV2Ug
ZG9uJ3Qgc2F2ZSBzdGF0ZSBvZiBhIGNvbnRyb2wgd2l0aCBzaG91bGRTYXZlQW5kUmVzdG9yZUZv
cm1Db250cm9sU3RhdGUoKT1mYWxzZS4KKyAgICAvLyBCdXQgd2UgbmVlZCB0byBza2lwIHJlc3Rv
cmluZyBwcm9jZXNzIHRvbyBiZWNhdXNlIGEgY29udHJvbCBpbiBhbm90aGVyCisgICAgLy8gZm9y
bSBtaWdodCBoYXZlIHRoZSBzYW1lIHBhaXIgb2YgbmFtZSBhbmQgdHlwZSBhbmQgc2F2ZWQgaXRz
IHN0YXRlLgorICAgIGlmICghc2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOworICAg
IGlmIChkb2MtPmhhc1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkpIHsKKyAgICAgICAgU3RyaW5n
IHN0YXRlOworICAgICAgICBpZiAoZG9jLT50YWtlU3RhdGVGb3JGb3JtRWxlbWVudChuYW1lKCku
aW1wbCgpLCB0eXBlKCkuaW1wbCgpLCBzdGF0ZSkpCisgICAgICAgICAgICByZXN0b3JlRm9ybUNv
bnRyb2xTdGF0ZShzdGF0ZSk7CisgICAgfQorfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFu
Z2VkRXZlbnQgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RleHRDb250cm9sKCkpIHsK
KyAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c3VidHJlZUhhc0NoYW5n
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCitIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRN
TEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSh0YWdOYW1lLCBkb2MsIGZvcm0pCit7Cit9CisK
K0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQo
KQoreworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvY3Vz
RXZlbnQoKQoreworICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVyKCkpCisgICAgICAgIHVwZGF0
ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CisgICAgaGFuZGxlRm9jdXNFdmVudCgpOwor
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNoRm9jdXNFdmVudCgp
OworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVu
dCgpCit7CisgICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIoKSkKKyAgICAgICAgdXBkYXRlUGxh
Y2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKKyAgICBoYW5kbGVCbHVyRXZlbnQoKTsKKyAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEJsdXJFdmVudCgpOworfQor
CitTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwcGVkUGxhY2Vob2xkZXIo
KSBjb25zdAoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRNTDUgc3BlY2lmaWNhdGlvbiwg
d2UgbmVlZCB0byByZW1vdmUgQ1IgYW5kIExGIGZyb20KKyAgICAvLyB0aGUgYXR0cmlidXRlIHZh
bHVlLgorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1
dGUocGxhY2Vob2xkZXJBdHRyKTsKKyAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKG5l
d2xpbmVDaGFyYWN0ZXIpICYmICFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhjYXJyaWFnZVJldHVy
bikpCisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTsKKworICAgIFZlY3RvcjxVQ2hhcj4g
c3RyaXBwZWQ7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlVmFsdWUubGVuZ3RoKCk7
CisgICAgc3RyaXBwZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IGF0
dHJpYnV0ZVZhbHVlW2ldOworICAgICAgICBpZiAoY2hhcmFjdGVyID09IG5ld2xpbmVDaGFyYWN0
ZXIgfHwgY2hhcmFjdGVyID09IGNhcnJpYWdlUmV0dXJuKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIHN0cmlwcGVkLmFwcGVuZChjaGFyYWN0ZXIpOworICAgIH0KKyAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChzdHJpcHBlZCk7Cit9CisKK3N0YXRpYyBib29sIGlzTm90TGluZUJyZWFr
KFVDaGFyIGNoKSB7IHJldHVybiBjaCAhPSBuZXdsaW5lQ2hhcmFjdGVyICYmIGNoICE9IGNhcnJp
YWdlUmV0dXJuOyB9CisKK2Jvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlzUGxhY2Vo
b2xkZXJFbXB0eSgpIGNvbnN0Cit7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVW
YWx1ZSA9IGdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpOworICAgIHJldHVybiBhdHRyaWJ1
dGVWYWx1ZS5zdHJpbmcoKS5maW5kKGlzTm90TGluZUJyZWFrKSA9PSBub3RGb3VuZDsKK30KKwor
Ym9vbCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGxhY2Vob2xkZXJTaG91bGRCZVZpc2li
bGUoKSBjb25zdAoreworICAgIHJldHVybiBzdXBwb3J0c1BsYWNlaG9sZGVyKCkKKyAgICAgICAg
JiYgaXNFbXB0eVZhbHVlKCkKKyAgICAgICAgJiYgZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAh
PSB0aGlzCisgICAgICAgICYmICFpc1BsYWNlaG9sZGVyRW1wdHkoKTsKK30KKwordm9pZCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGJvb2wg
cGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQpCit7CisgICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIo
KSAmJiByZW5kZXJlcigpKQorICAgICAgICB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkp
LT51cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkocGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUo
KSwgcGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQpOworfQorCitSZW5kZXJUZXh0Q29udHJvbCogSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0KCkK
K3sKKyAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCisgICAgICAgIHJldHVybiAwOworICAg
IGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAg
IHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpOworfQorCit2b2lkIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCit7Cisg
ICAgc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIG1heChzdGFydCwgc2VsZWN0aW9uRW5kKCkpKTsK
K30KKwordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKGlu
dCBlbmQpCit7CisgICAgc2V0U2VsZWN0aW9uUmFuZ2UobWluKGVuZCwgc2VsZWN0aW9uU3RhcnQo
KSksIGVuZCk7Cit9CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdCgp
Cit7CisgICAgc2V0U2VsZWN0aW9uUmFuZ2UoMCwgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp
OworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5n
ZShpbnQgc3RhcnQsIGludCBlbmQpCit7CisgICAgV2ViQ29yZTo6c2V0U2VsZWN0aW9uUmFuZ2Uo
dGhpcywgc3RhcnQsIGVuZCk7Cit9CisKK2ludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c2VsZWN0aW9uU3RhcnQoKSBjb25zdAoreworICAgIGlmICghaXNUZXh0Rm9ybUNvbnRyb2woKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0g
dGhpcyAmJiBjYWNoZWRTZWxlY3Rpb25TdGFydCgpID49IDApCisgICAgICAgIHJldHVybiBjYWNo
ZWRTZWxlY3Rpb25TdGFydCgpOworICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlv
blN0YXJ0KCk7Cit9CisKK2ludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9u
RW5kKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYgY2Fj
aGVkU2VsZWN0aW9uRW5kKCkgPj0gMCkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFNlbGVjdGlvbkVu
ZCgpOworICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbkVuZCgpOworfQorCitQ
YXNzUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKCkg
Y29uc3QKK3sKKyAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWlzVGV4dEZvcm1Db250cm9sKCkgfHwg
Y2FjaGVkU2VsZWN0aW9uU3RhcnQoKSA8IDAgfHwgY2FjaGVkU2VsZWN0aW9uRW5kKCkgPCAwKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJl
cigpKS0+c2VsZWN0aW9uKGNhY2hlZFNlbGVjdGlvblN0YXJ0KCksIGNhY2hlZFNlbGVjdGlvbkVu
ZCgpKTsKK30KKwordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcGxh
Y2Vob2xkZXJBdHRyKQorICAgICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkodHJ1ZSk7
CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc2VsZWN0QXR0cikKKyAgICAgICAgc2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIGNyZWF0ZUF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOworICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmNoYW5nZUF0dHIpCisgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRo
aXMsIGF0dHIpKTsKKyAgICBlbHNlCisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJjb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkocmV2aXNp
b24gNzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMsNzMgKzIzLDI4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb3JtQXNz
b2NpYXRlZEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkNo
YXJhY3Rlck5hbWVzLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudFBhcnNlci5o
IgotI2luY2x1ZGUgIkVsZW1lbnRSYXJlRGF0YS5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5j
bHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxGb3JtRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMYWJlbHNOb2RlTGlzdC5oIgotI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29u
dHJvbC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXZlbnRM
aXN0ZW5lci5oIgotI2luY2x1ZGUgIlZhbGlkYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiSFRN
TE9iamVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJWYWxpZGl0eVN0YXRlLmgiCi0jaW5jbHVkZSA8
bGltaXRzPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9y
bSkKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9mb3JtKGZv
cm0pCi0gICAgLCBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwgbV9yZWFkT25seShmYWxzZSkKLSAg
ICAsIG1fcmVxdWlyZWQoZmFsc2UpCi0gICAgLCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNl
KQotICAgICwgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1fd2lsbFZh
bGlkYXRlKHRydWUpCi0gICAgLCBtX2lzVmFsaWQodHJ1ZSkKLXsKLSAgICBpZiAoIW1fZm9ybSkK
LSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwotICAgIGlmIChtX2Zvcm0pCi0g
ICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLX0KIAotSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKQorRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAg
IDogbV9mb3JtKGZvcm0pCiB7Ci0gICAgaWYgKG1fZm9ybSkKLSAgICAgICAgbV9mb3JtLT5yZW1v
dmVGb3JtRWxlbWVudCh0aGlzKTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpk
ZXRhY2goKQorRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KCkK
IHsKLSAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgSFRNTEVsZW1lbnQ6
OmRldGFjaCgpOwogfQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1Ob1ZhbGlk
YXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0
dHIpLmlzTnVsbCgpOwotfQotCi1WYWxpZGl0eVN0YXRlKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Ojp2YWxpZGl0eSgpCitWYWxpZGl0eVN0YXRlKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlk
aXR5KCkKIHsKICAgICBpZiAoIW1fdmFsaWRpdHlTdGF0ZSkKICAgICAgICAgbV92YWxpZGl0eVN0
YXRlID0gVmFsaWRpdHlTdGF0ZTo6Y3JlYXRlKHRoaXMpOwpAQCAtOTcsODYgKzUyLDI4IEBAIFZh
bGlkaXR5U3RhdGUqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnYKICAgICByZXR1cm4gbV92YWxp
ZGl0eVN0YXRlLmdldCgpOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVt
ZW50OjppbnNlcnRlZEludG9UcmVlKCkKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGRpc2Fi
bGVkQXR0cikgewotICAgICAgICBib29sIG9sZERpc2FibGVkID0gbV9kaXNhYmxlZDsKLSAgICAg
ICAgbV9kaXNhYmxlZCA9ICFhdHRyLT5pc051bGwoKTsKLSAgICAgICAgaWYgKG9sZERpc2FibGVk
ICE9IG1fZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAg
ICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNoYW5n
ZWQocmVuZGVyZXIoKSwgRW5hYmxlZFN0YXRlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IHJlYWRvbmx5QXR0cikgewotICAgICAgICBib29sIG9sZFJlYWRPbmx5
ID0gbV9yZWFkT25seTsKLSAgICAgICAgbV9yZWFkT25seSA9ICFhdHRyLT5pc051bGwoKTsKLSAg
ICAgICAgaWYgKG9sZFJlYWRPbmx5ICE9IG1fcmVhZE9ubHkpIHsKLSAgICAgICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJlcigp
LT50aGVtZSgpLT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgUmVhZE9ubHlTdGF0ZSk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSByZXF1aXJlZEF0dHIpIHsKLSAg
ICAgICAgYm9vbCBvbGRSZXF1aXJlZCA9IG1fcmVxdWlyZWQ7Ci0gICAgICAgIG1fcmVxdWlyZWQg
PSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgICAgIGlmIChvbGRSZXF1aXJlZCAhPSBtX3JlcXVpcmVk
KSB7Ci0gICAgICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKLSAgICAgICAgICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsgLy8gVXBkYXRlcyBmb3IgOnJlcXVpcmVkIDpvcHRpb25hbCBj
bGFzc2VzLgotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLSAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7
Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKLXsKLSAgICBBU1NF
UlQoIWF0dGFjaGVkKCkpOwotCi0gICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwotCi0gICAgLy8g
VGhlIGNhbGwgdG8gdXBkYXRlRnJvbUVsZW1lbnQoKSBuZWVkcyB0byBnbyBhZnRlciB0aGUgY2Fs
bCB0aHJvdWdoCi0gICAgLy8gdG8gdGhlIGJhc2UgY2xhc3MncyBhdHRhY2goKSBiZWNhdXNlIHRo
YXQgY2FuIHNvbWV0aW1lcyBkbyBhIGNsb3NlCi0gICAgLy8gb24gdGhlIHJlbmRlcmVyLgotICAg
IGlmIChyZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgp
OwotICAgICAgICAKLSAgICAvLyBGb2N1cyB0aGUgZWxlbWVudCBpZiBpdCBzaG91bGQgaG9ub3Vy
IGl0cyBhdXRvZm9jdXMgYXR0cmlidXRlLgotICAgIC8vIFdlIGhhdmUgdG8gZGV0ZXJtaW5lIGlm
IHRoZSBlbGVtZW50IGlzIGEgVGV4dEFyZWEvSW5wdXQvQnV0dG9uL1NlbGVjdCwKLSAgICAvLyBp
ZiBpbnB1dCB0eXBlIGhpZGRlbiBpZ25vcmUgYXV0b2ZvY3VzLiBTbyBpZiBkaXNhYmxlZCBvciBy
ZWFkb25seS4KLSAgICBib29sIGlzSW5wdXRUeXBlSGlkZGVuID0gZmFsc2U7Ci0gICAgaWYgKGhh
c1RhZ05hbWUoaW5wdXRUYWcpKQotICAgICAgICBpc0lucHV0VHlwZUhpZGRlbiA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPih0aGlzKS0+aXNJbnB1dFR5cGVIaWRkZW4oKTsKLQotICAg
IGlmIChhdXRvZm9jdXMoKSAmJiByZW5kZXJlcigpICYmICFkb2N1bWVudCgpLT5pZ25vcmVBdXRv
Zm9jdXMoKSAmJiAhaXNSZWFkT25seUZvcm1Db250cm9sKCkgJiYKLSAgICAgICAgICAgICgoaGFz
VGFnTmFtZShpbnB1dFRhZykgJiYgIWlzSW5wdXRUeXBlSGlkZGVuKSB8fCBoYXNUYWdOYW1lKHNl
bGVjdFRhZykgfHwKLSAgICAgICAgICAgICAgaGFzVGFnTmFtZShidXR0b25UYWcpIHx8IGhhc1Rh
Z05hbWUodGV4dGFyZWFUYWcpKSkKLSAgICAgICAgIGZvY3VzKCk7Ci19Ci0KLXZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCi17Ci0gICAgaWYg
KGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnJlZ2lz
dGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKLSAgICAgICAgRWxlbWVudCog
ZWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUoZm9y
bUF0dHIpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShmb3Jt
VGFnKSkgeworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsK
KyAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKKyAgICAgICAg
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRl
KHRoaXMpOworICAgICAgICBFbGVtZW50KiBmb3JtRWxlbWVudCA9IGVsZW1lbnQtPmRvY3VtZW50
KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsK
KyAgICAgICAgaWYgKGZvcm1FbGVtZW50ICYmIGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1U
YWcpKSB7CiAgICAgICAgICAgICBpZiAobV9mb3JtKQogICAgICAgICAgICAgICAgIG1fZm9ybS0+
cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRp
Y19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGZvcm1FbGVtZW50KTsKICAgICAgICAgICAgIG1fZm9y
bS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAo
IW1fZm9ybSkgewogICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgYSBuZXcgZm9y
bSBlbGVtZW50IGJlaW5nIGNyZWF0ZWQgYnkKICAgICAgICAgLy8gSmF2YVNjcmlwdCBhbmQgaW5z
ZXJ0ZWQgaW5zaWRlIGEgZm9ybS4gIEluIHRoZSBjYXNlIG9mIHRoZSBwYXJzZXIKLSAgICAgICAg
Ly8gc2V0dGluZyBhIGZvcm0sIHdlIHdpbGwgYWxyZWFkeSBoYXZlIGEgbm9uLW51bGwgdmFsdWUg
Zm9yIG1fZm9ybSwgCisgICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3aWxsIGFscmVhZHkg
aGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sCiAgICAgICAgIC8vIGFuZCBzbyB3ZSBk
b24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2Vz
dG9yKCk7CisgICAgICAgIG1fZm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKICAg
ICAgICAgaWYgKG1fZm9ybSkKICAgICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVu
dCh0aGlzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJh
ZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKICAgICB9Ci0KLSAgICBIVE1MRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKIH0KIAogc3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9v
dChOb2RlKiBuKQpAQCAtMTg3LDI1NiArODQsMTkgQEAgc3RhdGljIGlubGluZSBOb2RlKiBmaW5k
Um9vdChOb2RlKiBuKQogICAgIHJldHVybiByb290OwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApCit2b2lkIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKCkKIHsKLSAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShm
b3JtQXR0cikpCi0gICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhG
b3JtQXR0cmlidXRlKHRoaXMpOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxl
bWVudCh0aGlzKTsKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikp
CisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhG
b3JtQXR0cmlidXRlKHRoaXMpOwogCiAgICAgLy8gSWYgdGhlIGZvcm0gYW5kIGVsZW1lbnQgYXJl
IGJvdGggaW4gdGhlIHNhbWUgdHJlZSwgcHJlc2VydmUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGZv
cm0uCiAgICAgLy8gT3RoZXJ3aXNlLCBudWxsIG91dCBvdXIgZm9ybSBhbmQgcmVtb3ZlIG91cnNl
bHZlcyBmcm9tIHRoZSBmb3JtJ3MgbGlzdCBvZiBlbGVtZW50cy4KLSAgICBpZiAobV9mb3JtICYm
IGZpbmRSb290KHRoaXMpICE9IGZpbmRSb290KG1fZm9ybSkpIHsKLSAgICAgICAgbV9mb3JtLT5y
ZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgbV9mb3JtID0gMDsKLSAgICB9Ci0KLSAg
ICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGRlZXApOwotfQotCi1jb25zdCBBdG9taWNT
dHJpbmcmIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1Db250cm9sTmFtZSgpIGNvbnN0Ci17
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0
cik7Ci0gICAgcmV0dXJuIG5hbWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiBuYW1lOwotfQotCi12
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKQot
ewotICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2hhbmdlRXZl
bnQsIHRydWUsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0
RGlzYWJsZWQoYm9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGIgPyAi
IiA6IDApOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF1dG9mb2N1cygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShhdXRvZm9jdXNBdHRyKTsKLX0KLQotYm9v
bCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcmVxdWlyZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZUZyb21FbGVtZW50Q2FsbGJhY2so
Tm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlRfQVJHKG5vZGUsIG5vZGUtPmlzRWxlbWVudE5vZGUo
KSk7Ci0gICAgQVNTRVJUX0FSRyhub2RlLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpOwotICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcigpKTsKLSAg
ICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAg
IHJlbmRlcmVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKLXsKLSAgICBIVE1MRWxl
bWVudDo6cmVjYWxjU3R5bGUoY2hhbmdlKTsKLQotICAgIC8vIHVwZGF0ZUZyb21FbGVtZW50KCkg
Y2FuIGNhdXNlIHRoZSBzZWxlY3Rpb24gdG8gY2hhbmdlLCBhbmQgaW4gdHVybgotICAgIC8vIHRy
aWdnZXIgc3luY2hyb25vdXMgbGF5b3V0LCBzbyBpdCBtdXN0IG5vdCBiZSBjYWxsZWQgZHVyaW5n
IHN0eWxlIHJlY2FsYy4KLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcXVldWVQb3N0QXR0
YWNoQ2FsbGJhY2sodXBkYXRlRnJvbUVsZW1lbnRDYWxsYmFjaywgdGhpcyk7Ci19Ci0KLWJvb2wg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICFkaXNhYmxlZCgpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9j
dXNhYmxlKCkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkgfHwgCi0gICAgICAgICFyZW5k
ZXJlcigpLT5pc0JveCgpIHx8IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5zaXplKCkuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gSFRNTEVsZW1lbnQ6OmlzRm9jdXNh
YmxlIGhhbmRsZXMgdmlzaWJpbGl0eSBhbmQgY2FsbHMgc3Vwb3J0c0ZvY3VzIHdoaWNoCi0gICAg
Ly8gd2lsbCBjb3ZlciB0aGUgZGlzYWJsZWQgY2FzZS4KLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6
OmlzRm9jdXNhYmxlKCk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNLZXli
b2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKLXsKLSAgICBpZiAoaXNG
b2N1c2FibGUoKSkKLSAgICAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnRhYnNUb0FsbENv
bnRyb2xzKGV2ZW50KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShRVCkKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzTW91c2VGb2N1c2Fi
bGUoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXNob3J0IEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKLXsKLSAgICAvLyBTa2lwIHRoZSBz
dXBwb3J0c0ZvY3VzIGNoZWNrIGluIEhUTUxFbGVtZW50LgotICAgIHJldHVybiBFbGVtZW50Ojp0
YWJJbmRleCgpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlY2FsY1dpbGxW
YWxpZGF0ZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFNob3VsZCByZXR1cm4gZmFsc2UgaWYg
dGhpcyBlbGVtZW50IGhhcyBhIGRhdGFsaXN0IGVsZW1lbnQgYXMgYW4KLSAgICAvLyBhbmNlc3Rv
ci4gU2VlIEhUTUw1IDQuMTAuMTAgJ1RoZSBkYXRhbGlzdCBlbGVtZW50LicKLSAgICByZXR1cm4g
IW1fZGlzYWJsZWQgJiYgIW1fcmVhZE9ubHk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6d2lsbFZhbGlkYXRlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fd2lsbFZhbGlkYXRlSW5p
dGlhbGl6ZWQpIHsKLSAgICAgICAgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCA9IHRydWU7Ci0g
ICAgICAgIG1fd2lsbFZhbGlkYXRlID0gcmVjYWxjV2lsbFZhbGlkYXRlKCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmFpbHMsIHNldE5lZWRz
V2lsbFZhbGlkYXRlQ2hlY2soKSBpcyBub3QKLSAgICAgICAgLy8gY2FsbGVkIGNvcnJlY3RseSB3
aGVuIHNvbWV0aGluZyB3aGljaCBjaGFuZ2VzIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIHJlc3VsdAot
ICAgICAgICAvLyBpcyB1cGRhdGVkLgotICAgICAgICBBU1NFUlQobV93aWxsVmFsaWRhdGUgPT0g
cmVjYWxjV2lsbFZhbGlkYXRlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV93aWxsVmFsaWRhdGU7
Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmVlZHNXaWxsVmFsaWRhdGVD
aGVjaygpCi17Ci0gICAgLy8gV2UgbmVlZCB0byByZWNhbGN1bGF0ZSB3aWxsVmFsaWR0ZSBpbW1l
ZGlhdGVseSBiZWNhdXNlIHdpbGxWYWxpZGF0ZQotICAgIC8vIGNoYW5nZSBjYW4gY2F1c2VzIHN0
eWxlIGNoYW5nZS4KLSAgICBib29sIG5ld1dpbGxWYWxpZGF0ZSA9IHJlY2FsY1dpbGxWYWxpZGF0
ZSgpOwotICAgIGlmIChtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkICYmIG1fd2lsbFZhbGlkYXRl
ID09IG5ld1dpbGxWYWxpZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2lsbFZhbGlkYXRl
SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIG1fd2lsbFZhbGlkYXRlID0gbmV3V2lsbFZhbGlkYXRl
OwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICBpZiAoIW1fd2lsbFZhbGlkYXRlKQot
ICAgICAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci19Ci0KLVN0cmluZyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojp2YWxpZGF0aW9uTWVzc2FnZSgpCi17Ci0gICAgcmV0dXJuIHZh
bGlkaXR5KCktPnZhbGlkYXRpb25NZXNzYWdlKCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkKLXsKLSAgICBQYWdlKiBw
YWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGlmIChyZW5kZXJlcigpICYmIHdpbGxWYWxpZGF0
ZSgpKSB7Ci0gICAgICAgIG1lc3NhZ2UgPSB2YWxpZGF0aW9uTWVzc2FnZSgpLnN0cmlwV2hpdGVT
cGFjZSgpOwotICAgICAgICAvLyBIVE1MNSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgYXNrIFVBIHRv
IHNob3cgdGhlIHRpdGxlIGF0dHJpYnV0ZSB2YWx1ZQotICAgICAgICAvLyB3aXRoIHRoZSB2YWxp
ZGF0aW9uTWVzc2FnZS4gIEhvd2V2ZXIsIHRoaXMgYmVoYXZpb3IgaXMgc2FtZSBhcyBPcGVyYQot
ICAgICAgICAvLyBhbmQgdGhlIHNwZWNpZmljYXRpb24gZGVzY3JpYmVzIHN1Y2ggYmVoYXZpb3Ig
YXMgYW4gZXhhbXBsZS4KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGdldEF0
dHJpYnV0ZSh0aXRsZUF0dHIpOwotICAgICAgICBpZiAoIW1lc3NhZ2UuaXNFbXB0eSgpICYmICF0
aXRsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCdcbicpOwotICAg
ICAgICAgICAgbWVzc2FnZS5hcHBlbmQodGl0bGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
ICghbV92YWxpZGF0aW9uTWVzc2FnZSkgewotICAgICAgICBtX3ZhbGlkYXRpb25NZXNzYWdlID0g
VmFsaWRhdGlvbk1lc3NhZ2U6OmNyZWF0ZSh0aGlzKTsKLSAgICAgICAgbV92YWxpZGF0aW9uTWVz
c2FnZS0+c2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaXNFbXB0
eSgpKQotICAgICAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgZWxzZSBp
ZiAobV92YWxpZGF0aW9uTWVzc2FnZS0+bWVzc2FnZSgpICE9IG1lc3NhZ2UpCi0gICAgICAgIG1f
dmFsaWRhdGlvbk1lc3NhZ2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KLXZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCi17Ci0gICAg
bV92YWxpZGF0aW9uTWVzc2FnZSA9IDA7Ci19Ci0KLVN0cmluZyBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Ojp2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX3Zh
bGlkYXRpb25NZXNzYWdlID8gbV92YWxpZGF0aW9uTWVzc2FnZS0+bWVzc2FnZSgpIDogU3RyaW5n
KCk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0
b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250
cm9scykKLXsKLSAgICBpZiAoIXdpbGxWYWxpZGF0ZSgpIHx8IGlzVmFsaWRGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gQW4gZXZlbnQgaGFuZGxlciBj
YW4gZGVyZWYgdGhpcyBvYmplY3QuCi0gICAgUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
IHByb3RlY3Rvcih0aGlzKTsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG9yaWdpbmFsRG9jdW1lbnQo
ZG9jdW1lbnQoKSk7Ci0gICAgYm9vbCBuZWVkc0RlZmF1bHRBY3Rpb24gPSBkaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmludmFsaWRFdmVudCwgZmFsc2UsIHRydWUpKTsK
LSAgICBpZiAobmVlZHNEZWZhdWx0QWN0aW9uICYmIHVuaGFuZGxlZEludmFsaWRDb250cm9scyAm
JiBpbkRvY3VtZW50KCkgJiYgb3JpZ2luYWxEb2N1bWVudCA9PSBkb2N1bWVudCgpKQotICAgICAg
ICB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMtPmFwcGVuZCh0aGlzKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9s
RWxlbWVudCgpCi17Ci0gICAgLy8gSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmFpbHMsIHNl
dE5lZWRzVmFsaWRpdHlDaGVjaygpIGlzIG5vdCBjYWxsZWQKLSAgICAvLyBjb3JyZWN0bHkgd2hl
biBzb21ldGhpbmcgd2hpY2ggY2hhbmdlcyB2YWxpZGl0eSBpcyB1cGRhdGVkLgotICAgIEFTU0VS
VChtX2lzVmFsaWQgPT0gdmFsaWRpdHkoKS0+dmFsaWQoKSk7Ci0gICAgcmV0dXJuIG1faXNWYWxp
ZDsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROZWVkc1ZhbGlkaXR5Q2hl
Y2soKQotewotICAgIGJvb2wgbmV3SXNWYWxpZCA9IHZhbGlkaXR5KCktPnZhbGlkKCk7Ci0gICAg
aWYgKHdpbGxWYWxpZGF0ZSgpICYmIG5ld0lzVmFsaWQgIT0gbV9pc1ZhbGlkKSB7Ci0gICAgICAg
IC8vIFVwZGF0ZSBzdHlsZSBmb3IgcHNldWRvIGNsYXNzZXMgc3VjaCBhcyA6dmFsaWQgOmludmFs
aWQuCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9Ci0gICAgbV9pc1ZhbGlk
ID0gbmV3SXNWYWxpZDsKLQotICAgIC8vIFVwZGF0ZXMgb25seSBpZiB0aGlzIGNvbnRyb2wgYWxy
ZWFkeSBoYXMgYSB2YWxpZHRpb24gbWVzc2FnZS4KLSAgICBpZiAoIXZpc2libGVWYWxpZGF0aW9u
TWVzc2FnZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBDYWxscyB1cGRhdGVWaXNpYmxlVmFs
aWRhdGlvbk1lc3NhZ2UoKSBldmVuIGlmIG1faXNWYWxpZCBpcyBub3QKLSAgICAgICAgLy8gY2hh
bmdlZCBiZWNhdXNlIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGNhbiBiZSBjaGFnbmVkLgotICAgICAg
ICB1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6c2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJiBlcnJv
cikKLXsKLSAgICB2YWxpZGl0eSgpLT5zZXRDdXN0b21FcnJvck1lc3NhZ2UoZXJyb3IpOwotfQot
ICAgIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKQot
ewotICAgIGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnBhZ2Uo
KS0+Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtRGlkRm9jdXModGhpcyk7Ci0KLSAgICBIVE1MRWxl
bWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCk7CisgICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9vdChl
bGVtZW50KSAhPSBmaW5kUm9vdChtX2Zvcm0pKQorICAgICAgICByZW1vdmVGcm9tRm9ybSgpOwog
fQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKLXsK
LSAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCkt
PmNocm9tZSgpLT5jbGllbnQoKS0+Zm9ybURpZEJsdXIodGhpcyk7Ci0KLSAgICBIVE1MRWxlbWVu
dDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKTsKLSAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdl
KCk7Ci19Ci0KLUhUTUxGb3JtRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlydHVh
bEZvcm0oKSBjb25zdAotewotICAgIHJldHVybiBtX2Zvcm07Ci19Ci0KLWJvb2wgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpICYmIG1fZm9ybSAmJiBtX2Zvcm0tPmRlZmF1
bHRCdXR0b24oKSA9PSB0aGlzOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJl
bW92ZUZyb21Gb3JtKCkKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVGcm9tRm9y
bSgpCiB7CiAgICAgaWYgKCFtX2Zvcm0pCiAgICAgICAgIHJldHVybjsKQEAgLTQ0NCwyNzcgKzEw
NCw1OSBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZUZyb21GCiAgICAgbV9m
b3JtID0gMDsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXNldEZvcm1Pd25l
cihIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVz
ZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogeworICAgIEhUTUxFbGVtZW50KiBl
bGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZv
cm1JZChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7CiAgICAgaWYgKG1fZm9y
bSkgewotICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKQorICAgICAgICBp
ZiAoZm9ybUlkLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2Zvcm0t
PnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwogICAgIH0KICAgICBtX2Zvcm0gPSAwOwotICAgIGlm
IChmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAgIGlmICghZm9ybUlkLmlzTnVsbCgp
KSB7CiAgICAgICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNheXMgdGhhdCB0aGUgZWxlbWVudCBzaG91
bGQgYmUgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRo
ZSBkb2N1bWVudCB0byBoYXZlIGFuIElEIHRoYXQgZXF1YWwgdG8KICAgICAgICAgLy8gdGhlIHZh
bHVlIG9mIGZvcm0gYXR0cmlidXRlLCBzbyB3ZSBwdXQgdGhlIHJlc3VsdCBvZgogICAgICAgICAv
LyBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1lbnQuCi0g
ICAgICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlk
KGZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKKyAgICAgICAgRWxlbWVudCogZmlyc3RFbGVt
ZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZm9ybUlkKTsKICAgICAg
ICAgaWYgKGZpcnN0RWxlbWVudCAmJiBmaXJzdEVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykp
CiAgICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihmaXJz
dEVsZW1lbnQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2Zvcm0gPSBmb3JtOwogICAg
IH0gZWxzZQotICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7CisgICAgICAgIG1f
Zm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKICAgICBpZiAobV9mb3JtKQogICAg
ICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgZWxzZQotICAgICAg
ICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwotfQot
Ci12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRl
KiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBm
b3JtQXR0cikgewotICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7Ci0g
ICAgICAgICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNl
dCBmb3JtIG93bmVyIGhlcmUuCi0gICAgICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAg
ICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBtX2Zvcm0g
PSBmaW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAg
ICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRk
QnV0dG9uKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc2V0Rm9ybU93bmVy
KDApOwotICAgIH0KLSAgICBIVE1MRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVz
ZXJ2ZURlY2xzKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0xhYmVsYWJs
ZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEFkZCBtZXRlclRhZyBhbmQgb3V0cHV0VGFnIHRv
IHRoZSBsaXN0IG9uY2Ugd2Ugc3VwcG9ydCB0aGVtLgotICAgIHJldHVybiBoYXNUYWdOYW1lKGJ1
dHRvblRhZykgfHwgaGFzVGFnTmFtZShpbnB1dFRhZykgfHwgaGFzVGFnTmFtZShrZXlnZW5UYWcp
Ci0jaWYgRU5BQkxFKE1FVEVSX1RBRykKLSAgICAgICAgfHwgaGFzVGFnTmFtZShtZXRlclRhZykK
LSNlbmRpZgotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgICAgIHx8IGhhc1RhZ05hbWUo
cHJvZ3Jlc3NUYWcpCi0jZW5kaWYKLSAgICAgICAgfHwgaGFzVGFnTmFtZShzZWxlY3RUYWcpIHx8
IGhhc1RhZ05hbWUodGV4dGFyZWFUYWcpOwotfQotCi1QYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpsYWJlbHMoKQotewotICAgIGlmICghaXNMYWJlbGFibGUoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFkb2N1bWVudCgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBOb2RlOjplbnN1cmVSYXJlRGF0YSgp
OwotICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpIHsKLSAgICAgICAgZGF0YS0+c2V0Tm9kZUxp
c3RzKE5vZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKSk7Ci0gICAgICAgIGRvY3VtZW50KCktPmFk
ZE5vZGVMaXN0Q2FjaGUoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIExhYmVsc05vZGVMaXN0
OjpjcmVhdGUodGhpcyk7Ci19Ci0gICAgCi1IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKLSAgICA6IEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQotewotICAgIGRvY3VtZW50KCktPnJlZ2lz
dGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Ci19Ci0KLUhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCkKLXsKLSAgICBk
b2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7CiB9CiAKLXZv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6d2lsbE1vdmVUb05ld093bmVyRG9j
dW1lbnQoKQordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1BdHRyaWJ1dGVDaGFuZ2Vk
KCkKIHsKLSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhp
cyk7Ci0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1l
bnQoKTsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaWRNb3Zl
VG9OZXdPd25lckRvY3VtZW50KCkKLXsKLSAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVt
ZW50V2l0aFN0YXRlKHRoaXMpOwotICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpZE1vdmVU
b05ld093bmVyRG9jdW1lbnQoKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlOjphdXRvQ29tcGxldGUoKSBjb25zdAotewotICAgIGlmICghZm9ybSgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZm9ybSgpLT5hdXRvQ29tcGxldGUoKTsKLX0KLQot
Ym9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpzaG91bGRTYXZlQW5kUmVzdG9y
ZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdAotewotICAgIC8vIFdlIGRvbid0IHNhdmUvcmVzdG9y
ZSBjb250cm9sIHN0YXRlIGluIGEgZm9ybSB3aXRoIGF1dG9jb21wbGV0ZT1vZmYuCi0gICAgcmV0
dXJuIGF0dGFjaGVkKCkgJiYgYXV0b0NvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKLXsKLSAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAgIC8vIFdl
IGRvbid0IHNhdmUgc3RhdGUgb2YgYSBjb250cm9sIHdpdGggc2hvdWxkU2F2ZUFuZFJlc3RvcmVG
b3JtQ29udHJvbFN0YXRlKCk9ZmFsc2UuCi0gICAgLy8gQnV0IHdlIG5lZWQgdG8gc2tpcCByZXN0
b3JpbmcgcHJvY2VzcyB0b28gYmVjYXVzZSBhIGNvbnRyb2wgaW4gYW5vdGhlcgotICAgIC8vIGZv
cm0gbWlnaHQgaGF2ZSB0aGUgc2FtZSBwYWlyIG9mIG5hbWUgYW5kIHR5cGUgYW5kIHNhdmVkIGl0
cyBzdGF0ZS4KLSAgICBpZiAoIXNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAg
ICBpZiAoZG9jLT5oYXNTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygpKSB7Ci0gICAgICAgIFN0cmlu
ZyBzdGF0ZTsKLSAgICAgICAgaWYgKGRvYy0+dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQobmFtZSgp
LmltcGwoKSwgdHlwZSgpLmltcGwoKSwgc3RhdGUpKQotICAgICAgICAgICAgcmVzdG9yZUZvcm1D
b250cm9sU3RhdGUoc3RhdGUpOwotICAgIH0KLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKLXsKLSAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hh
bmdlZEV2ZW50ICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNUZXh0Q29udHJvbCgpKSB7
Ci0gICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnN1YnRyZWVIYXNDaGFu
Z2VkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLSAgICA6IEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGFnTmFtZSwgZG9jLCBmb3JtKQotewotfQot
Ci1IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
KCkKLXsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb2N1
c0V2ZW50KCkKLXsKLSAgICBpZiAoc3VwcG9ydHNQbGFjZWhvbGRlcigpKQotICAgICAgICB1cGRh
dGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwotICAgIGhhbmRsZUZvY3VzRXZlbnQoKTsK
LSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEZvY3VzRXZlbnQo
KTsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZl
bnQoKQotewotICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVyKCkpCi0gICAgICAgIHVwZGF0ZVBs
YWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7Ci0gICAgaGFuZGxlQmx1ckV2ZW50KCk7Ci0gICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hCbHVyRXZlbnQoKTsKLX0K
LQotU3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcHBlZFBsYWNlaG9sZGVy
KCkgY29uc3QKLXsKLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUTUw1IHNwZWNpZmljYXRpb24s
IHdlIG5lZWQgdG8gcmVtb3ZlIENSIGFuZCBMRiBmcm9tCi0gICAgLy8gdGhlIGF0dHJpYnV0ZSB2
YWx1ZS4KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmli
dXRlKHBsYWNlaG9sZGVyQXR0cik7Ci0gICAgaWYgKCFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhu
ZXdsaW5lQ2hhcmFjdGVyKSAmJiAhYXR0cmlidXRlVmFsdWUuY29udGFpbnMoY2FycmlhZ2VSZXR1
cm4pKQotICAgICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7Ci0KLSAgICBWZWN0b3I8VUNoYXI+
IHN0cmlwcGVkOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCgp
OwotICAgIHN0cmlwcGVkLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBh
dHRyaWJ1dGVWYWx1ZVtpXTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBuZXdsaW5lQ2hhcmFj
dGVyIHx8IGNoYXJhY3RlciA9PSBjYXJyaWFnZVJldHVybikKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBzdHJpcHBlZC5hcHBlbmQoY2hhcmFjdGVyKTsKLSAgICB9Ci0gICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQoc3RyaXBwZWQpOwotfQotCi1zdGF0aWMgYm9vbCBpc05vdExpbmVCcmVh
ayhVQ2hhciBjaCkgeyByZXR1cm4gY2ggIT0gbmV3bGluZUNoYXJhY3RlciAmJiBjaCAhPSBjYXJy
aWFnZVJldHVybjsgfQotCi1ib29sIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppc1BsYWNl
aG9sZGVyRW1wdHkoKSBjb25zdAotewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRl
VmFsdWUgPSBnZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKTsKLSAgICByZXR1cm4gYXR0cmli
dXRlVmFsdWUuc3RyaW5nKCkuZmluZChpc05vdExpbmVCcmVhaykgPT0gbm90Rm91bmQ7Ci19Ci0K
LWJvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnBsYWNlaG9sZGVyU2hvdWxkQmVWaXNp
YmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3VwcG9ydHNQbGFjZWhvbGRlcigpCi0gICAgICAg
ICYmIGlzRW1wdHlWYWx1ZSgpCi0gICAgICAgICYmIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkg
IT0gdGhpcwotICAgICAgICAmJiAhaXNQbGFjZWhvbGRlckVtcHR5KCk7Ci19Ci0KLXZvaWQgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShib29s
IHBsYWNlaG9sZGVyVmFsdWVDaGFuZ2VkKQotewotICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVy
KCkgJiYgcmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigp
KS0+dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KHBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxl
KCksIHBsYWNlaG9sZGVyVmFsdWVDaGFuZ2VkKTsKLX0KLQotUmVuZGVyVGV4dENvbnRyb2wqIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp0ZXh0UmVuZGVyZXJBZnRlclVwZGF0ZUxheW91dCgp
Ci17Ci0gICAgaWYgKCFpc1RleHRGb3JtQ29udHJvbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAg
ICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKTsKLX0KLQotdm9pZCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQoaW50IHN0YXJ0KQotewot
ICAgIHNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBtYXgoc3RhcnQsIHNlbGVjdGlvbkVuZCgpKSk7
Ci19Ci0KLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZChp
bnQgZW5kKQotewotICAgIHNldFNlbGVjdGlvblJhbmdlKG1pbihlbmQsIHNlbGVjdGlvblN0YXJ0
KCkpLCBlbmQpOwotfQotCi12b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Qo
KQotewotICAgIHNldFNlbGVjdGlvblJhbmdlKDAsIG51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KTsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uUmFu
Z2UoaW50IHN0YXJ0LCBpbnQgZW5kKQotewotICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdl
KHRoaXMsIHN0YXJ0LCBlbmQpOwotfQotCi1pbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9
IHRoaXMgJiYgY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSA+PSAwKQotICAgICAgICByZXR1cm4gY2Fj
aGVkU2VsZWN0aW9uU3RhcnQoKTsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rp
b25TdGFydCgpOwotfQotCi1pbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlv
bkVuZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc1RleHRGb3JtQ29udHJvbCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIGNh
Y2hlZFNlbGVjdGlvbkVuZCgpID49IDApCi0gICAgICAgIHJldHVybiBjYWNoZWRTZWxlY3Rpb25F
bmQoKTsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rpb25FbmQoKTsKKyAgICBI
VE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQodGhpcyk7CisgICAgaWYgKCFlbGVt
ZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAgICAgICAvLyBUaGUgZm9ybSBh
dHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBmb3JtIG93bmVyIGhlcmUuCisgICAg
ICAgIGlmIChtX2Zvcm0pCisgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRo
aXMpOworICAgICAgICBtX2Zvcm0gPSBlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCk7CisgICAg
ICAgIGlmIChtX2Zvcm0pCisgICAgICAgICAgICBmb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQo
dGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc2V0Rm9ybU93bmVyKDApOwogfQogCi1QYXNz
UmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKCkgY29u
c3QKK2NvbnN0IEhUTUxFbGVtZW50KiB0b0hUTUxFbGVtZW50KGNvbnN0IEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCogYXNzb2NpYXRlZEVsZW1lbnQpCiB7Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFp
c1RleHRGb3JtQ29udHJvbCgpIHx8IGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPCAwIHx8IGNhY2hl
ZFNlbGVjdGlvbkVuZCgpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRvUmVu
ZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbihjYWNoZWRTZWxlY3Rpb25TdGFy
dCgpLCBjYWNoZWRTZWxlY3Rpb25FbmQoKSk7CisgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGFzc29jaWF0ZWRFbGVtZW50KTsKKyAgICAvLyBBc3N1
bWVzIHRoZSBlbGVtZW50IGlzIGFuIEhUTUxPYmplY3RFbGVtZW50CisgICAgY29uc3QgSFRNTEVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MT2JqZWN0RWxlbWVudCo+KGFz
c29jaWF0ZWRFbGVtZW50KTsKKyAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RU
YWcpKTsKKyAgICByZXR1cm4gZWxlbWVudDsKIH0KIAotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQorSFRNTEVsZW1l
bnQqIHRvSFRNTEVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVu
dCkKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHBsYWNlaG9sZGVyQXR0cikKLSAgICAgICAg
dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KHRydWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbnNlbGVjdEF0dHIpCi0gICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRo
aXMsIGF0dHIpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jaGFuZ2VBdHRyKQot
ICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVu
dCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7Ci0gICAgZWxzZQot
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxIVE1MRWxlbWVudCo+KHRvSFRNTEVs
ZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3QgRm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4oYXNzb2NpYXRl
ZEVsZW1lbnQpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYmNvcmUKSW5kZXg6IFdlYkNvcmUv
aHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmgJKHJldmlzaW9uIDczMDA3KQkoZnJvbSBXZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oOjczMDA3KQorKysgV2ViQ29yZS9odG1sL0Zvcm1B
c3NvY2lhdGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAg
ICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
X2gKKyNkZWZpbmUgSFRNTEZvcm1Db250cm9sRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvcm1EYXRhTGlzdDsKK2Ns
YXNzIEhUTUxGb3JtRWxlbWVudDsKK2NsYXNzIFJlbmRlclRleHRDb250cm9sOworY2xhc3MgVmFs
aWRhdGlvbk1lc3NhZ2U7CitjbGFzcyBWYWxpZGl0eVN0YXRlOworY2xhc3MgVmlzaWJsZVNlbGVj
dGlvbjsKKworLy8gRklYTUU6IFRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoZXNlIGZv
cm0tYXNzb2NpYXRlZCBlbGVtZW50cy4KKy8vIFNvIGNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgdG8g
SFRNTEZvcm1Bc3NvY2lhdGVkRWxlbWVudC4KK2NsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQoKTsKKworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9ybTsgfQorICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlkaXR5KCk7CisKKyAgICBib29s
IGZvcm1Ob1ZhbGlkYXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IH0K
KworICAgIHZpcnR1YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0Y2hl
c1JlbmRlcmVyID0gYjsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xD
aGFuZ2VFdmVudCgpOworCisgICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlz
YWJsZWQ7IH0KKyAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOworCisgICAgdmlydHVhbCBib29s
IGlzRm9jdXNhYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIERldGVybWluZXMgd2hldGhlciBvciBu
b3QgYSBjb250cm9sIHdpbGwgYmUgYXV0b21hdGljYWxseSBmb2N1c2VkLgorICAgIHZpcnR1YWwg
Ym9vbCBhdXRvZm9jdXMoKSBjb25zdDsKKworICAgIGJvb2wgcmVxdWlyZWQoKSBjb25zdDsKKwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1Db250cm9s
VHlwZSgpOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
Zm9ybUNvbnRyb2xOYW1lKCk7IH0KKworICAgIHZvaWQgc2V0TmFtZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpOworCisgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkgY29u
c3QgeyByZXR1cm4gIWRpc2FibGVkKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFkT25seUZv
cm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gcmVhZE9ubHkoKTsgfQorCisgICAgdmlydHVhbCBi
b29sIGlzUmFkaW9CdXR0b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBjYW5UcmlnZ2VySW1wbGljaXRTdWJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKworICAgIC8vIE92ZXJyaWRlIGluIGRlcml2ZWQgY2xhc3NlcyB0byBnZXQgdGhlIGVuY29k
ZWQgbmFtZT12YWx1ZSBwYWlyIGZvciBzdWJtaXR0aW5nLgorICAgIC8vIFJldHVybiB0cnVlIGZv
ciBhIHN1Y2Nlc3NmdWwgY29udHJvbCAoc2VlIEhUTUw0LTE3LjEzLjIpLgorICAgIHZpcnR1YWwg
Ym9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKSB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgdmlydHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGVkU3VibWl0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZhdGVkU3VibWl0
KGJvb2wpIHsgfQorCisgICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgpIGNvbnN0OworICAg
IFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpOworICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZhbGlk
YXRpb25NZXNzYWdlKCk7CisgICAgdm9pZCBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7
CisgICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxl
bWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzID0gMCk7CisgICAgLy8gVGhpcyBtdXN0
IGJlIGNhbGxlZCB3aGVuIGEgdmFsaWRhdGlvbiBjb25zdHJhaW50IG9yIGNvbnRyb2wgdmFsdWUg
aXMgY2hhbmdlZC4KKyAgICB2b2lkIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOworICAgIHZvaWQg
c2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIGZvcm1EZXN0cm95
ZWQoKSB7IG1fZm9ybSA9IDA7IH0KKworICAgIGJvb2wgaXNMYWJlbGFibGUoKSBjb25zdDsKKyAg
ICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBsYWJlbHMoKTsKKyAgICAKKyAgICBib29sIHJlYWRPbmx5
KCkgY29uc3QgeyByZXR1cm4gbV9yZWFkT25seTsgfQorCisgICAgdm9pZCByZXNldEZvcm1Pd25l
cihIVE1MRm9ybUVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChB
dHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CisKK3Byb3RlY3RlZDoKKyAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAg
IHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7CisgICAgdmlydHVhbCB2
b2lkIHJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApOworCisgICAgdmlydHVhbCBib29sIGlzS2V5
Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBp
c01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUo
U3R5bGVDaGFuZ2UpOworCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2goKTsKKworICAgIHZvaWQgcmVtb3ZlRnJvbUZvcm0oKTsKKworICAgIC8vIFRoaXMgbXVz
dCBiZSBjYWxsZWQgYW55IHRpbWUgdGhlIHJlc3VsdCBvZiB3aWxsVmFsaWRhdGUoKSBoYXMgY2hh
bmdlZC4KKyAgICB2b2lkIHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcmVjYWxjV2lsbFZhbGlkYXRlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCA9IDA7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OworCisgICAgdmly
dHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0OworCisgICAgdmlydHVhbCBIVE1MRm9ybUVsZW1l
bnQqIHZpcnR1YWxGb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRGVmYXVsdEJ1dHRv
bkZvckZvcm0oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxl
bWVudCgpOworICAgIFN0cmluZyB2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKKwor
ICAgIEhUTUxGb3JtRWxlbWVudCogbV9mb3JtOworICAgIE93blB0cjxWYWxpZGl0eVN0YXRlPiBt
X3ZhbGlkaXR5U3RhdGU7CisgICAgT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRp
b25NZXNzYWdlOworICAgIGJvb2wgbV9kaXNhYmxlZCA6IDE7CisgICAgYm9vbCBtX3JlYWRPbmx5
IDogMTsKKyAgICBib29sIG1fcmVxdWlyZWQgOiAxOworICAgIGJvb2wgbV92YWx1ZU1hdGNoZXNS
ZW5kZXJlciA6IDE7CisKKyAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBvZiBtX3dpbGxWYWxpZGF0
ZSBkZXBlbmRzIG9uIHRoZSBkZXJpdmVkIGNsYXNzLiBXZSBjYW4ndAorICAgIC8vIGluaXRpYWxp
emUgaXQgd2l0aCBhIHZpcnR1YWwgZnVuY3Rpb24gaW4gdGhlIGNvbnN0cnVjdG9yLiBtX3dpbGxW
YWxpZGF0ZQorICAgIC8vIGlzIG5vdCBkZXRlcm1pbmlzdGljIGFzIGxvbmcgYXMgbV93aWxsVmFs
aWRhdGVJbml0aWFsaXplZCBpcyBmYWxzZS4KKyAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRh
dGVJbml0aWFsaXplZDogMTsKKyAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGUgOiAxOwor
CisgICAgLy8gQ2FjaGUgb2YgdmFsaWRpdHkoKS0+dmFsaWQoKS4KKyAgICAvLyBCdXQgImNhbmRp
ZGF0ZSBmb3IgY29uc3RyYWludCB2YWxpZGF0aW9uIiBkb2Vzbid0IGFmZmVjdCBtX2lzVmFsaWQu
CisgICAgYm9vbCBtX2lzVmFsaWQgOiAxOworfTsKKworLy8gRklYTUU6IEdpdmUgdGhpcyBjbGFz
cyBpdHMgb3duIGhlYWRlciBmaWxlLgorY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZSA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wg
YXV0b0NvbXBsZXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093
bmVyRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVu
dCgpOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKK3By
aXZhdGU6CisgICAgdmlydHVhbCBib29sIHNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xT
dGF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsK
K307CisKKy8vIEZJWE1FOiBHaXZlIHRoaXMgY2xhc3MgaXRzIG93biBoZWFkZXIgZmlsZS4KK2Ns
YXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGUgeworcHVibGljOgorICAgIC8vIENvbW1vbiBmbGFnIGZvciBIVE1MSW5w
dXRFbGVtZW50Ojp0b29Mb25nKCkgYW5kIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnRvb0xvbmcoKS4K
KyAgICBlbnVtIE5lZWRzVG9DaGVja0RpcnR5RmxhZyB7Q2hlY2tEaXJ0eUZsYWcsIElnbm9yZURp
cnR5RmxhZ307CisKKyAgICB2aXJ0dWFsIH5IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgpOwor
CisgICAgLy8gVGhlIGRlcml2ZWQgY2xhc3Mgc2hvdWxkIHJldHVybiB0cnVlIGlmIHBsYWNlaG9s
ZGVyIHByb2Nlc3NpbmcgaXMgbmVlZGVkLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1BsYWNl
aG9sZGVyKCkgY29uc3QgPSAwOworICAgIFN0cmluZyBzdHJpcHBlZFBsYWNlaG9sZGVyKCkgY29u
c3Q7CisgICAgYm9vbCBwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpIGNvbnN0OworCisgICAg
aW50IHNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7CisgICAgaW50IHNlbGVjdGlvbkVuZCgpIGNvbnN0
OworICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50KTsKKyAgICB2b2lkIHNldFNlbGVjdGlv
bkVuZChpbnQpOworICAgIHZvaWQgc2VsZWN0KCk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5n
ZShpbnQgc3RhcnQsIGludCBlbmQpOworICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbigp
IGNvbnN0OworCisgICAgdmlydHVhbCBpbnQgbWF4TGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRN
TEZvcm1FbGVtZW50Kik7CisKKyAgICB2b2lkIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShi
b29sKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CisKKyAgICBib29sIGlzUGxhY2Vo
b2xkZXJFbXB0eSgpIGNvbnN0OworCisgICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uU3Rh
cnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkgY29u
c3QgPSAwOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHVzZXItZWRpdGFibGUgdmFsdWUgaXMg
ZW1wdHkuIFVzZWQgdG8gY2hlY2sgcGxhY2Vob2xkZXIgdmlzaWJpbGl0eS4KKyAgICB2aXJ0dWFs
IGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgPSAwOworICAgIC8vIENhbGxlZCBpbiBkaXNwYXRj
aEZvY3VzRXZlbnQoKSwgYWZ0ZXIgcGxhY2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcg
cGFyZW50J3MgZGlzcGF0Y2hGb2N1c0V2ZW50KCkuCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUZv
Y3VzRXZlbnQoKSB7IH0KKyAgICAvLyBDYWxsZWQgaW4gZGlzcGF0Y2hCbHVyRXZlbnQoKSwgYWZ0
ZXIgcGxhY2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZGlzcGF0Y2hC
bHVyRXZlbnQoKS4KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQmx1ckV2ZW50KCkgeyB9CisKKyAg
ICBSZW5kZXJUZXh0Q29udHJvbCogdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQoKTsKK307
CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuaAkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0
ZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAKICAqCiAgKi8KIAot
I2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKLSNkZWZpbmUgSFRNTEZvcm1Db250cm9s
RWxlbWVudF9oCisjaWZuZGVmIEZvcm1Bc3NvY2lhdGVkRWxlbWVudF9oCisjZGVmaW5lIEZvcm1B
c3NvY2lhdGVkRWxlbWVudF9oCiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCkBAIC0zMCwy
MDQgKzMwLDU2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9ybURhdGFMaXN0Owog
Y2xhc3MgSFRNTEZvcm1FbGVtZW50OwotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2w7CiBjbGFzcyBW
YWxpZGF0aW9uTWVzc2FnZTsKIGNsYXNzIFZhbGlkaXR5U3RhdGU7CiBjbGFzcyBWaXNpYmxlU2Vs
ZWN0aW9uOwogCi0vLyBGSVhNRTogVGhlIEhUTUw1IHNwZWNpZmljYXRpb24gY2FsbHMgdGhlc2Ug
Zm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzLgotLy8gU28gY29uc2lkZXIgcmVuYW1pbmcgdGhpcyB0
byBIVE1MRm9ybUFzc29jaWF0ZWRFbGVtZW50LgotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVu
dCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CitjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgewog
cHVibGljOgotICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICB2aXJ0
dWFsIH5Gb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsKKworICAgIHZvaWQgcmVmKCkgeyByZWZGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQoKTsgfQorICAgIHZvaWQgZGVyZWYoKSB7IGRlcmVmRm9ybUFzc29j
aWF0ZWRFbGVtZW50KCk7IH0KIAogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9ybTsgfQogICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlkaXR5KCk7CiAKLSAgICBi
b29sIGZvcm1Ob1ZhbGlkYXRlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0
Y2hlc1JlbmRlcmVyID0gYjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRy
b2xDaGFuZ2VFdmVudCgpOwotCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzYWJsZWQ7IH0KLSAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwotCi0gICAgdmlydHVhbCBi
b29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJv
bEVsZW1lbnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkg
Y29uc3QgPSAwOwogCi0gICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIGNvbnRyb2wg
d2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQuCi0gICAgdmlydHVhbCBib29sIGF1dG9mb2N1
cygpIGNvbnN0OwotCi0gICAgYm9vbCByZXF1aXJlZCgpIGNvbnN0OwotCi0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gZm9ybUNvbnRyb2xUeXBlKCk7IH0KICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBmb3JtQ29udHJvbE5h
bWUoKTsgfQogCi0gICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkRm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiAh
ZGlzYWJsZWQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKSBj
b25zdCB7IHJldHVybiByZWFkT25seSgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1
dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGNhblRyaWdn
ZXJJbXBsaWNpdFN1Ym1pc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCiAgICAgLy8g
T3ZlcnJpZGUgaW4gZGVyaXZlZCBjbGFzc2VzIHRvIGdldCB0aGUgZW5jb2RlZCBuYW1lPXZhbHVl
IHBhaXIgZm9yIHN1Ym1pdHRpbmcuCiAgICAgLy8gUmV0dXJuIHRydWUgZm9yIGEgc3VjY2Vzc2Z1
bCBjb250cm9sIChzZWUgSFRNTDQtMTcuMTMuMikuCiAgICAgdmlydHVhbCBib29sIGFwcGVuZEZv
cm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0
dWFsIGJvb2wgaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmF0ZWRTdWJtaXQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmF0ZWRTdWJtaXQoYm9vbCkgeyB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHZhbGlk
YXRpb25NZXNzYWdlKCk7Ci0gICAgdm9pZCB1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2Uo
KTsKLSAgICB2b2lkIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICBib29sIGNo
ZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhh
bmRsZWRJbnZhbGlkQ29udHJvbHMgPSAwKTsKLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdo
ZW4gYSB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgb3IgY29udHJvbCB2YWx1ZSBpcyBjaGFuZ2VkLgot
ICAgIHZvaWQgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci0gICAgdm9pZCBzZXRDdXN0b21WYWxp
ZGl0eShjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgZm9ybURlc3Ryb3llZCgpIHsgbV9mb3Jt
ID0gMDsgfQotCi0gICAgYm9vbCBpc0xhYmVsYWJsZSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IGxhYmVscygpOwotICAgIAotICAgIGJvb2wgcmVhZE9ubHkoKSBjb25zdCB7IHJl
dHVybiBtX3JlYWRPbmx5OyB9CisgICAgdmlydHVhbCB2b2lkIGZvcm1EZXN0cm95ZWQoKSB7IG1f
Zm9ybSA9IDA7IH0KIAogICAgIHZvaWQgcmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50Kik7
Ci0gICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVz
ZXJ2ZURlY2xzID0gZmFsc2UpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSFRNTEZvcm1Db250cm9sRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxl
bWVudCopOworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQqKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUo
Ym9vbCBkZWVwKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50Kikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2
ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAgIHZvaWQgaW5zZXJ0ZWRJbnRv
VHJlZSgpOworICAgIHZvaWQgcmVtb3ZlZEZyb21UcmVlKCk7CiAKKyAgICB2b2lkIHNldEZvcm0o
SFRNTEZvcm1FbGVtZW50KiBmb3JtKSB7IG1fZm9ybSA9IGZvcm07IH0KICAgICB2b2lkIHJlbW92
ZUZyb21Gb3JtKCk7Ci0KLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFueSB0aW1lIHRoZSBy
ZXN1bHQgb2Ygd2lsbFZhbGlkYXRlKCkgaGFzIGNoYW5nZWQuCi0gICAgdm9pZCBzZXROZWVkc1dp
bGxWYWxpZGF0ZUNoZWNrKCk7Ci0gICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgp
IGNvbnN0OworICAgIHZvaWQgZm9ybUF0dHJpYnV0ZUNoYW5nZWQoKTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0ID0g
MDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xO
YW1lKCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
SFRNTEZvcm1FbGVtZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBp
c0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzVmFsaWRG
b3JtQ29udHJvbEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgdmlzaWJsZVZhbGlkYXRpb25NZXNzYWdl
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSA9IDA7CiAK
ICAgICBIVE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKICAgICBPd25QdHI8VmFsaWRpdHlTdGF0ZT4g
bV92YWxpZGl0eVN0YXRlOwotICAgIE93blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gbV92YWxpZGF0
aW9uTWVzc2FnZTsKLSAgICBib29sIG1fZGlzYWJsZWQgOiAxOwotICAgIGJvb2wgbV9yZWFkT25s
eSA6IDE7Ci0gICAgYm9vbCBtX3JlcXVpcmVkIDogMTsKLSAgICBib29sIG1fdmFsdWVNYXRjaGVz
UmVuZGVyZXIgOiAxOwotCi0gICAgLy8gVGhlIGluaXRpYWwgdmFsdWUgb2YgbV93aWxsVmFsaWRh
dGUgZGVwZW5kcyBvbiB0aGUgZGVyaXZlZCBjbGFzcy4gV2UgY2FuJ3QKLSAgICAvLyBpbml0aWFs
aXplIGl0IHdpdGggYSB2aXJ0dWFsIGZ1bmN0aW9uIGluIHRoZSBjb25zdHJ1Y3Rvci4gbV93aWxs
VmFsaWRhdGUKLSAgICAvLyBpcyBub3QgZGV0ZXJtaW5pc3RpYyBhcyBsb25nIGFzIG1fd2lsbFZh
bGlkYXRlSW5pdGlhbGl6ZWQgaXMgZmFsc2UuCi0gICAgbXV0YWJsZSBib29sIG1fd2lsbFZhbGlk
YXRlSW5pdGlhbGl6ZWQ6IDE7Ci0gICAgbXV0YWJsZSBib29sIG1fd2lsbFZhbGlkYXRlIDogMTsK
LQotICAgIC8vIENhY2hlIG9mIHZhbGlkaXR5KCktPnZhbGlkKCkuCi0gICAgLy8gQnV0ICJjYW5k
aWRhdGUgZm9yIGNvbnN0cmFpbnQgdmFsaWRhdGlvbiIgZG9lc24ndCBhZmZlY3QgbV9pc1ZhbGlk
LgotICAgIGJvb2wgbV9pc1ZhbGlkIDogMTsKLX07Ci0KLS8vIEZJWE1FOiBHaXZlIHRoaXMgY2xh
c3MgaXRzIG93biBoZWFkZXIgZmlsZS4KLWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGUgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwotCi0gICAgdmlydHVhbCBib29s
IGF1dG9Db21wbGV0ZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdP
d25lckRvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1l
bnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotCi1w
cml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9s
U3RhdGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7
CiB9OwogCi0vLyBGSVhNRTogR2l2ZSB0aGlzIGNsYXNzIGl0cyBvd24gaGVhZGVyIGZpbGUuCi1j
bGFzcyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlIHsKLXB1YmxpYzoKLSAgICAvLyBDb21tb24gZmxhZyBmb3IgSFRNTElu
cHV0RWxlbWVudDo6dG9vTG9uZygpIGFuZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp0b29Mb25nKCku
Ci0gICAgZW51bSBOZWVkc1RvQ2hlY2tEaXJ0eUZsYWcge0NoZWNrRGlydHlGbGFnLCBJZ25vcmVE
aXJ0eUZsYWd9OwotCi0gICAgdmlydHVhbCB+SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKTsK
LQotICAgIC8vIFRoZSBkZXJpdmVkIGNsYXNzIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwbGFjZWhv
bGRlciBwcm9jZXNzaW5nIGlzIG5lZWRlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQbGFj
ZWhvbGRlcigpIGNvbnN0ID0gMDsKLSAgICBTdHJpbmcgc3RyaXBwZWRQbGFjZWhvbGRlcigpIGNv
bnN0OwotICAgIGJvb2wgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBjb25zdDsKLQotICAg
IGludCBzZWxlY3Rpb25TdGFydCgpIGNvbnN0OwotICAgIGludCBzZWxlY3Rpb25FbmQoKSBjb25z
dDsKLSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rp
b25FbmQoaW50KTsKLSAgICB2b2lkIHNlbGVjdCgpOwotICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFu
Z2UoaW50IHN0YXJ0LCBpbnQgZW5kKTsKLSAgICBQYXNzUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24o
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IG1heExlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhU
TUxGb3JtRWxlbWVudCopOwotCi0gICAgdm9pZCB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHko
Ym9vbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
Kik7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwot
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOwotCi0gICAgYm9vbCBpc1BsYWNl
aG9sZGVyRW1wdHkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvblN0
YXJ0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNv
bnN0ID0gMDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB1c2VyLWVkaXRhYmxlIHZhbHVlIGlz
IGVtcHR5LiBVc2VkIHRvIGNoZWNrIHBsYWNlaG9sZGVyIHZpc2liaWxpdHkuCi0gICAgdmlydHVh
bCBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0ID0gMDsKLSAgICAvLyBDYWxsZWQgaW4gZGlzcGF0
Y2hGb2N1c0V2ZW50KCksIGFmdGVyIHBsYWNlaG9sZGVyIHByb2Nlc3MsIGJlZm9yZSBjYWxsaW5n
IHBhcmVudCdzIGRpc3BhdGNoRm9jdXNFdmVudCgpLgotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVG
b2N1c0V2ZW50KCkgeyB9Ci0gICAgLy8gQ2FsbGVkIGluIGRpc3BhdGNoQmx1ckV2ZW50KCksIGFm
dGVyIHBsYWNlaG9sZGVyIHByb2Nlc3MsIGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGRpc3BhdGNo
Qmx1ckV2ZW50KCkuCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUJsdXJFdmVudCgpIHsgfQotCi0g
ICAgUmVuZGVyVGV4dENvbnRyb2wqIHRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0KCk7Ci19
OworSFRNTEVsZW1lbnQqIHRvSFRNTEVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7Citj
b25zdCBIVE1MRWxlbWVudCogdG9IVE1MRWxlbWVudChjb25zdCBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqKTsKIAogfSAvLyBuYW1lc3BhY2UKIAotI2VuZGlmCisjZW5kaWYgLy8gRm9ybUFzc29jaWF0
ZWRFbGVtZW50X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCShyZXZpc2lvbiA3MzM0OSkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxBbGlnbm1lbnRUb1N0eWxlZEVsZW1lbnQo
U3R5bGVkRWxlbWVudCosIEF0dHJpYnV0ZSopOwogCisgICAgSFRNTEZvcm1FbGVtZW50KiBmaW5k
Rm9ybUFuY2VzdG9yKCkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBIVE1MRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwogCkBAIC05MCw4ICs5Miw2IEBA
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCi0gICAgSFRN
TEZvcm1FbGVtZW50KiBmaW5kRm9ybUFuY2VzdG9yKCkgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAg
dmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDczMzQ5KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDEyICs3OCwxMiBAQCBOb2RlKiBI
VE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0odW5zaWduZWQgCiAgICAgICAgIGluZm8oKS0+ZWxlbWVu
dHNBcnJheVBvc2l0aW9uID0gMDsKICAgICB9CiAKLSAgICBWZWN0b3I8SFRNTEZvcm1Db250cm9s
RWxlbWVudCo+JiBlbGVtZW50c0FycmF5ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4o
YmFzZSgpKS0+bV9hc3NvY2lhdGVkRWxlbWVudHM7CisgICAgVmVjdG9yPEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCo+JiBlbGVtZW50c0FycmF5ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4o
YmFzZSgpKS0+bV9hc3NvY2lhdGVkRWxlbWVudHM7CiAgICAgdW5zaWduZWQgY3VycmVudEluZGV4
ID0gaW5mbygpLT5wb3NpdGlvbjsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmZvKCkt
PmVsZW1lbnRzQXJyYXlQb3NpdGlvbjsgaSA8IGVsZW1lbnRzQXJyYXkuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRzQXJyYXlb
aV07Ci0gICAgICAgIGlmIChlbGVtZW50LT5pc0VudW1lcmF0YWJsZSgpKSB7CisgICAgICAgIGlm
IChlbGVtZW50c0FycmF5W2ldLT5pc0VudW1lcmF0YWJsZSgpKSB7CisgICAgICAgICAgICBIVE1M
RWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZWxlbWVudHNBcnJheVtpXSk7CiAgICAg
ICAgICAgICBpZiAoaW5kZXggPT0gY3VycmVudEluZGV4KSB7CiAgICAgICAgICAgICAgICAgaW5m
bygpLT5wb3NpdGlvbiA9IGluZGV4OwogICAgICAgICAgICAgICAgIGluZm8oKS0+Y3VycmVudCA9
IGVsZW1lbnQ7CkBAIC0xMTAsMjEgKzExMCwyMiBAQCBFbGVtZW50KiBIVE1MRm9ybUNvbGxlY3Rp
b246OmdldE5hbWVkRm9yCiAKICAgICBib29sIGZvdW5kSW5wdXRFbGVtZW50cyA9IGZhbHNlOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtLT5tX2Fzc29jaWF0ZWRFbGVtZW50cy5z
aXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlID0gZm9ybS0+
bV9hc3NvY2lhdGVkRWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChlLT5pc0VudW1lcmF0YWJsZSgp
ICYmIGUtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgeworICAgICAgICBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gZm9ybS0+bV9hc3NvY2lhdGVkRWxl
bWVudHNbaV07CisgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChh
c3NvY2lhdGVkRWxlbWVudCk7CisgICAgICAgIGlmIChhc3NvY2lhdGVkRWxlbWVudC0+aXNFbnVt
ZXJhdGFibGUoKSAmJiBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpIHsK
ICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cyA9IHRydWU7CiAgICAgICAgICAgICBpZiAo
IWR1cGxpY2F0ZU51bWJlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgICAgIC0tZHVwbGljYXRlTnVtYmVyOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMpIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPm1faW1hZ2VFbGVtZW50cy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogZSA9IGZvcm0tPm1faW1hZ2VFbGVt
ZW50c1tpXTsKLSAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5h
bWUpIHsKKyAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGVsZW1lbnQgPSBmb3JtLT5tX2lt
YWdlRWxlbWVudHNbaV07CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0
dHJOYW1lKSA9PSBuYW1lKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZWxlbWVudDsKICAgICAgICAgICAgICAgICAtLWR1cGxpY2F0ZU51bWJlcjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMTkxLDEwICsxOTIsMTEgQEAgdm9pZCBIVE1MRm9ybUNvbGxl
Y3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAgIEhUTUxGb3JtRWxlbWVudCogZiA9IHN0YXRpY19j
YXN0PEhUTUxGb3JtRWxlbWVudCo+KGJhc2UoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZi0+bV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRN
TEZvcm1Db250cm9sRWxlbWVudCogZSA9IGYtPm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwotICAg
ICAgICBpZiAoZS0+aXNFbnVtZXJhdGFibGUoKSkgewotICAgICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7
CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW1lbnQgPSBmLT5t
X2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5p
c0VudW1lcmF0YWJsZSgpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRv
SFRNTEVsZW1lbnQoYXNzb2NpYXRlZEVsZW1lbnQpOworICAgICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBpZEF0dHJWYWwgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOworICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGVsZW1lbnQtPmdldEF0dHJpYnV0
ZShuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKICAgICAgICAgICAgICAgICBWZWN0b3I8
RWxlbWVudCo+KiBpZFZlY3RvciA9IGluZm8oKS0+aWRDYWNoZS5nZXQoaWRBdHRyVmFsLmltcGwo
KSk7CkBAIC0yMDIsNyArMjA0LDcgQEAgdm9pZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5h
bWVDYWNoZQogICAgICAgICAgICAgICAgICAgICBpZFZlY3RvciA9IG5ldyBWZWN0b3I8RWxlbWVu
dCo+OwogICAgICAgICAgICAgICAgICAgICBpbmZvKCktPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5p
bXBsKCksIGlkVmVjdG9yKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWRW
ZWN0b3ItPmFwcGVuZChlKTsKKyAgICAgICAgICAgICAgICBpZFZlY3Rvci0+YXBwZW5kKGVsZW1l
bnQpOwogICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cy5hZGQoaWRBdHRyVmFsLmlt
cGwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1w
dHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwpIHsKQEAgLTIxMiwxNiArMjE0LDE2IEBA
IHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgICAgICAg
ICAgICAgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3I8RWxlbWVudCo+OwogICAgICAgICAgICAgICAg
ICAgICBpbmZvKCktPm5hbWVDYWNoZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBuYW1lVmVjdG9y
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmFtZVZlY3Rvci0+YXBwZW5k
KGUpOworICAgICAgICAgICAgICAgIG5hbWVWZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAg
ICAgICAgICAgICBmb3VuZElucHV0RWxlbWVudHMuYWRkKG5hbWVBdHRyVmFsLmltcGwoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZi0+bV9pbWFnZUVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxJbWFn
ZUVsZW1lbnQqIGUgPSBmLT5tX2ltYWdlRWxlbWVudHNbaV07Ci0gICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7Cisg
ICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGVsZW1lbnQgPSBmLT5tX2ltYWdlRWxlbWVudHNbaV07
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZWxlbWVudC0+Z2V0SWRB
dHRyaWJ1dGUoKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGVs
ZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgIGlmICghaWRBdHRyVmFsLmlz
RW1wdHkoKSAmJiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKGlkQXR0clZhbC5pbXBsKCkp
KSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKICAgICAgICAgICAgIFZlY3RvcjxF
bGVtZW50Kj4qIGlkVmVjdG9yID0gaW5mbygpLT5pZENhY2hlLmdldChpZEF0dHJWYWwuaW1wbCgp
KTsKQEAgLTIyOSw3ICsyMzEsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFt
ZUNhY2hlCiAgICAgICAgICAgICAgICAgaWRWZWN0b3IgPSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsK
ICAgICAgICAgICAgICAgICBpbmZvKCktPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5pbXBsKCksIGlk
VmVjdG9yKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlkVmVjdG9yLT5hcHBlbmQoZSk7
CisgICAgICAgICAgICBpZFZlY3Rvci0+YXBwZW5kKGVsZW1lbnQpOwogICAgICAgICB9CiAgICAg
ICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1lQXR0clZh
bCAmJiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKG5hbWVBdHRyVmFsLmltcGwoKSkpIHsK
ICAgICAgICAgICAgIC8vIGFkZCB0byBuYW1lIGNhY2hlCkBAIC0yMzgsNyArMjQwLDcgQEAgdm9p
ZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICAgICAgICAgIG5h
bWVWZWN0b3IgPSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsKICAgICAgICAgICAgICAgICBpbmZvKCkt
Pm5hbWVDYWNoZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBuYW1lVmVjdG9yKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG5hbWVWZWN0b3ItPmFwcGVuZChlKTsKKyAgICAgICAgICAgIG5h
bWVWZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNzMzNDkpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDcgKzU3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9mb3JtKGZvcm0pCisgICAgLCBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQoZm9ybSkKICAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCiAgICAgLCBt
X3JlYWRPbmx5KGZhbHNlKQogICAgICwgbV9yZXF1aXJlZChmYWxzZSkKQEAgLTY2LDE2ICs2Niwx
NiBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFCiAgICAgLCBtX3dp
bGxWYWxpZGF0ZSh0cnVlKQogICAgICwgbV9pc1ZhbGlkKHRydWUpCiB7Ci0gICAgaWYgKCFtX2Zv
cm0pCi0gICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICBpZiAobV9mb3Jt
KQotICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgaWYgKCF0
aGlzLT5mb3JtKCkpCisgICAgICAgIHNldEZvcm0oZmluZEZvcm1BbmNlc3RvcigpKTsKKyAgICBp
ZiAodGhpcy0+Zm9ybSgpKQorICAgICAgICB0aGlzLT5mb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1l
bnQodGhpcyk7CiB9CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MRm9ybUNvbnRyb2xF
bGVtZW50KCkKIHsKLSAgICBpZiAobV9mb3JtKQotICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1F
bGVtZW50KHRoaXMpOworICAgIGlmIChmb3JtKCkpCisgICAgICAgIGZvcm0oKS0+cmVtb3ZlRm9y
bUVsZW1lbnQodGhpcyk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGV0YWNo
KCkKQEAgLTg5LDE0ICs4OSw2IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybU5v
VmFsaWQKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0dHIpLmlzTnVs
bCgpOwogfQogCi1WYWxpZGl0eVN0YXRlKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2YWxpZGl0
eSgpCi17Ci0gICAgaWYgKCFtX3ZhbGlkaXR5U3RhdGUpCi0gICAgICAgIG1fdmFsaWRpdHlTdGF0
ZSA9IFZhbGlkaXR5U3RhdGU6OmNyZWF0ZSh0aGlzKTsKLQotICAgIHJldHVybiBtX3ZhbGlkaXR5
U3RhdGUuZ2V0KCk7Ci19Ci0KIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
ZGlzYWJsZWRBdHRyKSB7CkBAIC0xNTQsNTEgKzE0NiwxNiBAQCB2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmF0dGFjaCgpCiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZShib29sIGRlZXApCiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0
dHIpKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0
dHJpYnV0ZSh0aGlzKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50KCktPmdl
dEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICAgICAgaWYgKGVs
ZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewotICAgICAgICAgICAgaWYg
KG1fZm9ybSkKLSAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMp
OwotICAgICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZWxl
bWVudCk7Ci0gICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFtX2Zvcm0pIHsKLSAgICAgICAgLy8gVGhpcyBoYW5k
bGVzIHRoZSBjYXNlIG9mIGEgbmV3IGZvcm0gZWxlbWVudCBiZWluZyBjcmVhdGVkIGJ5Ci0gICAg
ICAgIC8vIEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBhIGZvcm0uICBJbiB0aGUgY2Fz
ZSBvZiB0aGUgcGFyc2VyCi0gICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3aWxsIGFscmVh
ZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sIAotICAgICAgICAvLyBhbmQgc28g
d2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1B
bmNlc3RvcigpOwotICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAgbV9mb3JtLT5yZWdp
c3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVu
dCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwotICAgIH0KKyAgICBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKTsKKyAgICBpZiAoIWZvcm0o
KSkKKyAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0
aGlzKTsKIAogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOwogfQogCi1z
dGF0aWMgaW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4pCi17Ci0gICAgTm9kZSogcm9vdCA9
IG47Ci0gICAgZm9yICg7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIHJvb3QgPSBu
OwotICAgIHJldHVybiByb290OwotfQotCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJl
bW92ZWRGcm9tVHJlZShib29sIGRlZXApCiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9y
bUF0dHIpKQotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9y
bUF0dHJpYnV0ZSh0aGlzKTsKLQotICAgIC8vIElmIHRoZSBmb3JtIGFuZCBlbGVtZW50IGFyZSBi
b3RoIGluIHRoZSBzYW1lIHRyZWUsIHByZXNlcnZlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBmb3Jt
LgotICAgIC8vIE90aGVyd2lzZSwgbnVsbCBvdXQgb3VyIGZvcm0gYW5kIHJlbW92ZSBvdXJzZWx2
ZXMgZnJvbSB0aGUgZm9ybSdzIGxpc3Qgb2YgZWxlbWVudHMuCi0gICAgaWYgKG1fZm9ybSAmJiBm
aW5kUm9vdCh0aGlzKSAhPSBmaW5kUm9vdChtX2Zvcm0pKSB7Ci0gICAgICAgIG1fZm9ybS0+cmVt
b3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgIG1fZm9ybSA9IDA7Ci0gICAgfQotCisgICAg
Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoKTsKICAgICBIVE1MRWxlbWVu
dDo6cmVtb3ZlZEZyb21UcmVlKGRlZXApOwogfQogCkBAIC0yNTQsNyArMjExLDcgQEAgdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWNhbGNTdHlsZQogCiBib29sIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiAhZGlzYWJsZWQo
KTsKKyAgICByZXR1cm4gIW1fZGlzYWJsZWQ7CiB9CiAKIGJvb2wgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6aXNGb2N1c2FibGUoKSBjb25zdApAQCAtMzY2LDcgKzMyMyw3IEBAIFN0cmluZyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojp2aXNpYmxlVmEKICAgICByZXR1cm4gbV92YWxpZGF0aW9uTWVz
c2FnZSA/IG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSA6IFN0cmluZygpOwogfQogCi1i
b29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCitib29s
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKIHsKICAgICBp
ZiAoIXdpbGxWYWxpZGF0ZSgpIHx8IGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC00MDgsNyArMzY1LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpzZXRDdXN0b21WYQogewogICAgIHZhbGlkaXR5KCktPnNldEN1c3RvbUVycm9yTWVz
c2FnZShlcnJvcik7CiB9Ci0gICAgCisKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlz
cGF0Y2hGb2N1c0V2ZW50KCkKIHsKICAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQpAQCAtNDI4
LDY0ICszODUsMjIgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEJsdQog
CiBIVE1MRm9ybUVsZW1lbnQqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9mb3JtOworICAgIHJldHVybiBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ6OmZvcm0oKTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0RlZmF1
bHRCdXR0b25Gb3JGb3JtKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNTdWNjZXNzZnVsU3VibWl0
QnV0dG9uKCkgJiYgbV9mb3JtICYmIG1fZm9ybS0+ZGVmYXVsdEJ1dHRvbigpID09IHRoaXM7Ci19
Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0oKQotewotICAg
IGlmICghbV9mb3JtKQotICAgICAgICByZXR1cm47Ci0gICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxl
bWVudCh0aGlzKTsKLSAgICBtX2Zvcm0gPSAwOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnJlc2V0Rm9ybU93bmVyKEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLXsKLSAgICBpZiAo
bV9mb3JtKSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7
Ci0gICAgfQotICAgIG1fZm9ybSA9IDA7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0
dHIpKSB7Ci0gICAgICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNheXMgdGhhdCB0aGUgZWxlbWVudCBz
aG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGlu
IHRoZSBkb2N1bWVudCB0byBoYXZlIGFuIElEIHRoYXQgZXF1YWwgdG8KLSAgICAgICAgLy8gdGhl
IHZhbHVlIG9mIGZvcm0gYXR0cmlidXRlLCBzbyB3ZSBwdXQgdGhlIHJlc3VsdCBvZgotICAgICAg
ICAvLyBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1lbnQu
Ci0gICAgICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRC
eUlkKGZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICAgICAgaWYgKGZpcnN0RWxlbWVu
dCAmJiBmaXJzdEVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpCi0gICAgICAgICAgICBtX2Zv
cm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihmaXJzdEVsZW1lbnQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2Zvcm0gPSBmb3JtOwotICAgIH0gZWxzZQotICAgICAgICBt
X2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgaWYgKG1fZm9ybSkKLSAgICAgICAgbV9m
b3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgZG9jdW1l
bnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICByZXR1cm4g
aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgZm9ybSgpICYmIGZvcm0oKS0+ZGVmYXVsdEJ1
dHRvbigpID09IHRoaXM7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0cmli
dXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKIHsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IGZvcm1BdHRyKSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJp
YnV0ZShmb3JtQXR0cikpIHsKLSAgICAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1v
dmVkLiBXZSBuZWVkIHRvIHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KLSAgICAgICAgICAgIGlmICht
X2Zvcm0pCi0gICAgICAgICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsK
LSAgICAgICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICAgICAgICAgIGlm
IChtX2Zvcm0pCi0gICAgICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRo
aXMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNr
ZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgcmVzZXRGb3JtT3duZXIoMCk7Ci0gICAgfQotICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1
dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOworICAgICAgICBmb3JtQXR0cmlidXRlQ2hh
bmdlZCgpOworICAgICAgICBpZiAoIWZvcm0oKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmNo
ZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CisgICAgfSBlbHNlCisgICAgICAg
IEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOwogfQog
CiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzTGFiZWxhYmxlKCkgY29uc3QKQEAgLTUx
Niw3ICs0MzEsNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MRm9ybUNvbnRyb2xFbGVtCiAg
ICAgCiAgICAgcmV0dXJuIExhYmVsc05vZGVMaXN0OjpjcmVhdGUodGhpcyk7CiB9Ci0gICAgCisK
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRN
TEZvcm1FbGVtZW50KiBmKQogICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBk
b2MsIGYpCiB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJldmlz
aW9uIDczMzQ5KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50X2gKICNkZWZpbmUgSFRNTEZvcm1Db250cm9sRWxlbWVudF9oCiAKKyNpbmNsdWRlICJGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zNSwxNCArMzYsMTQgQEAgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2U7
CiBjbGFzcyBWYWxpZGl0eVN0YXRlOwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAotLy8gRklY
TUU6IFRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoZXNlIGZvcm0tYXNzb2NpYXRlZCBl
bGVtZW50cy4KLS8vIFNvIGNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgdG8gSFRNTEZvcm1Bc3NvY2lh
dGVkRWxlbWVudC4KLWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVs
ZW1lbnQgeworLy8gSFRNTEZvcm1Db250cm9sRWxlbWVudCBpcyB0aGUgZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBvZiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQsCisvLyBhbmQgZm9ybS1hc3NvY2lhdGVk
IGVsZW1lbnQgaW1wbGVtZW50YXRpb25zIHNob3VsZCB1c2UgSFRNTEZvcm1Db250cm9sRWxlbWVu
dAorLy8gdW5sZXNzIHRoZXJlIGlzIGEgc3BlY2lhbCByZWFzb24uCitjbGFzcyBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgRm9ybUFzc29jaWF0ZWRF
bGVtZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50KCk7
CiAKLSAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0oKSBjb25zdCB7IHJldHVybiBtX2Zvcm07IH0K
LSAgICBWYWxpZGl0eVN0YXRlKiB2YWxpZGl0eSgpOworICAgIEhUTUxGb3JtRWxlbWVudCogZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybSgpOyB9CiAKICAg
ICBib29sIGZvcm1Ob1ZhbGlkYXRlKCkgY29uc3Q7CiAKQEAgLTUzLDcgKzU0LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwog
Ci0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkOyB9CiAgICAg
dm9pZCBzZXREaXNhYmxlZChib29sKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgp
IGNvbnN0OwpAQCAtNjUsNyArNjYsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCByZXF1aXJlZCgpIGNv
bnN0OwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gZm9y
bUNvbnRyb2xUeXBlKCk7IH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7
IHJldHVybiBmb3JtQ29udHJvbE5hbWUoKTsgfQogCiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSk7CiAKQEAgLTg3LDIxICs4NywyMSBAQCBwdWJsaWM6CiAgICAgU3Ry
aW5nIHZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAgdm9pZCB1cGRhdGVWaXNpYmxlVmFsaWRhdGlv
bk1lc3NhZ2UoKTsKICAgICB2b2lkIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAg
ICBib29sIGNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMgPSAwKTsKKyAgICBib29sIGNoZWNrVmFsaWRp
dHkoVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFs
aWRDb250cm9scyA9IDApOwogICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBhIHZhbGlk
YXRpb24gY29uc3RyYWludCBvciBjb250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCiAgICAgdm9pZCBz
ZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKICAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KGNvbnN0
IFN0cmluZyYpOwogCi0gICAgdm9pZCBmb3JtRGVzdHJveWVkKCkgeyBtX2Zvcm0gPSAwOyB9Ci0K
ICAgICBib29sIGlzTGFiZWxhYmxlKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4g
bGFiZWxzKCk7Ci0gICAgCisKICAgICBib29sIHJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFkT25seTsgfQogCi0gICAgdm9pZCByZXNldEZvcm1Pd25lcihIVE1MRm9ybUVsZW1lbnQqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNl
cnZlRGVjbHMgPSBmYWxzZSk7CiAKKyAgICB1c2luZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+
OjpyZWY7CisgICAgdXNpbmcgVHJlZVNoYXJlZDxDb250YWluZXJOb2RlPjo6ZGVyZWY7CisKIHBy
b3RlY3RlZDoKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAKQEAgLTExOSw4ICsxMTks
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogCi0gICAgdm9pZCByZW1vdmVGcm9tRm9ybSgpOwot
CiAgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhbnkgdGltZSB0aGUgcmVzdWx0IG9mIHdpbGxW
YWxpZGF0ZSgpIGhhcyBjaGFuZ2VkLgogICAgIHZvaWQgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVj
aygpOwogICAgIHZpcnR1YWwgYm9vbCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdDsKQEAgLTEy
OSw2ICsxMjcsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBm
b3JtQ29udHJvbE5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIHJlZkZvcm1B
c3NvY2lhdGVkRWxlbWVudCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQoKSB7IGRlcmVmKCk7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBpc0Zv
cm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CkBAIC0xNDAsOCArMTQxLDYgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpOwogICAgIFN0cmlu
ZyB2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKIAotICAgIEhUTUxGb3JtRWxlbWVu
dCogbV9mb3JtOwotICAgIE93blB0cjxWYWxpZGl0eVN0YXRlPiBtX3ZhbGlkaXR5U3RhdGU7CiAg
ICAgT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRpb25NZXNzYWdlOwogICAgIGJv
b2wgbV9kaXNhYmxlZCA6IDE7CiAgICAgYm9vbCBtX3JlYWRPbmx5IDogMTsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzM0OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDEwIEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KEUKIHsKICAgICBpbnQgc3VibWlzc2lv
blRyaWdnZXJDb3VudCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2Np
YXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQqIGZvcm1FbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVudHNbaV07CisgICAgICAgIEZvcm1B
c3NvY2lhdGVkRWxlbWVudCogZm9ybUFzc29jaWF0ZWRFbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxl
bWVudHNbaV07CisgICAgICAgIGlmICghZm9ybUFzc29jaWF0ZWRFbGVtZW50LT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxl
bWVudCo+KGZvcm1Bc3NvY2lhdGVkRWxlbWVudCk7CiAgICAgICAgIGlmIChmb3JtRWxlbWVudC0+
aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpIHsKICAgICAgICAgICAgIGlmIChmb3JtRWxlbWVu
dC0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50LT5kaXNwYXRjaFNp
bXVsYXRlZENsaWNrKGV2ZW50KTsKQEAgLTIxMywxMCArMjE2LDEyIEBAIGJvb2wgSFRNTEZvcm1F
bGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXYKICAgICBpZiAoc3VibWl0RWxlbWVudCAmJiBzdWJt
aXRFbGVtZW50LT5mb3JtTm9WYWxpZGF0ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmhpZGVWaXNpYmxlVmFsaWRhdGlv
bk1lc3NhZ2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxl
bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ld
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKS0+aGlkZVZpc2libGVW
YWxpZGF0aW9uTWVzc2FnZSgpOworICAgIH0KIAotICAgIFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4gPiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHM7CisgICAgVmVjdG9yPFJl
ZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzOwog
ICAgIGNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHModW5oYW5kbGVkSW52YWxpZENvbnRy
b2xzKTsKICAgICBpZiAodW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yMjUsNyArMjMwLDggQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6
OnZhbGlkYXRlSW50ZXJhY3RpdgogICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IHByb3RlY3Rv
cih0aGlzKTsKICAgICAvLyBGb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGNvbnRyb2wgYW5k
IHNob3cgYSB2YWxpZGF0aW9uIG1lc3NhZ2UuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHVuaGFuZGxlZEludmFsaWRDb250cm9scy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiB1bmhhbmRsZWQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0u
Z2V0KCk7CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogdW5oYW5kbGVkQXNzb2NpYXRl
ZEVsZW1lbnQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0KCk7CisgICAgICAgIEhU
TUxFbGVtZW50KiB1bmhhbmRsZWQgPSB0b0hUTUxFbGVtZW50KHVuaGFuZGxlZEFzc29jaWF0ZWRF
bGVtZW50KTsKICAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb2N1c2FibGUoKSAmJiB1bmhhbmRs
ZWQtPmluRG9jdW1lbnQoKSkgewogICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBvcmlnaW5h
bERvY3VtZW50KHVuaGFuZGxlZC0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICB1bmhhbmRsZWQt
PnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2UpOwpAQCAtMjM0LDcgKzI0MCw4IEBAIGJvb2wg
SFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXYKICAgICAgICAgICAgIC8vIG1vdmVk
IHRvIGFub3RoZXIgZG9jdW1lbnQuCiAgICAgICAgICAgICBpZiAodW5oYW5kbGVkLT5pc0ZvY3Vz
YWJsZSgpICYmIHVuaGFuZGxlZC0+aW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0g
dW5oYW5kbGVkLT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgdW5oYW5kbGVkLT5mb2N1
cygpOwotICAgICAgICAgICAgICAgIHVuaGFuZGxlZC0+dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25N
ZXNzYWdlKCk7CisgICAgICAgICAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9s
RWxlbWVudCo+KHVuaGFuZGxlZCktPnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDIs
MTEgKzI0OSwxMiBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2CiAg
ICAgLy8gV2FybiBhYm91dCBhbGwgb2YgdW5mb2N1c2FibGUgY29udHJvbHMuCiAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHVuaGFuZGxlZEludmFsaWRDb250cm9scy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogdW5oYW5kbGVkID0gdW5oYW5kbGVkSW52
YWxpZENvbnRyb2xzW2ldLmdldCgpOworICAgICAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50
KiB1bmhhbmRsZWRBc3NvY2lhdGVkRWxlbWVudCA9IHVuaGFuZGxlZEludmFsaWRDb250cm9sc1tp
XS5nZXQoKTsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiB1bmhhbmRsZWQgPSB0b0hUTUxFbGVt
ZW50KHVuaGFuZGxlZEFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAgICAgICAgIGlmICh1bmhhbmRs
ZWQtPmlzRm9jdXNhYmxlKCkgJiYgdW5oYW5kbGVkLT5pbkRvY3VtZW50KCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSgiQW4gaW52YWxpZCBm
b3JtIGNvbnRyb2wgd2l0aCBuYW1lPSclbmFtZScgaXMgbm90IGZvY3VzYWJsZS4iKTsKLSAgICAg
ICAgICAgIG1lc3NhZ2UucmVwbGFjZSgiJW5hbWUiLCB1bmhhbmRsZWQtPm5hbWUoKSk7CisgICAg
ICAgICAgICBtZXNzYWdlLnJlcGxhY2UoIiVuYW1lIiwgdW5oYW5kbGVkQXNzb2NpYXRlZEVsZW1l
bnQtPm5hbWUoKSk7CiAgICAgICAgICAgICBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+
YWRkTWVzc2FnZShIVE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2Fn
ZUxldmVsLCBtZXNzYWdlLCAwLCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0zMDcsOCArMzE1LDExIEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJt
aXQoRXZlbnQqIGV2ZW4KICAgICBib29sIG5lZWRCdXR0b25BY3RpdmF0aW9uID0gYWN0aXZhdGVT
dWJtaXRCdXR0b247IC8vIGRvIHdlIG5lZWQgdG8gYWN0aXZhdGUgYSBzdWJtaXQgYnV0dG9uPwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBtX2Fz
c29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBhc3Nv
Y2lhdGVkRWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBpZiAoIWFz
c29jaWF0ZWRFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlvbikgeworICAgICAgICAgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqPihhc3NvY2lhdGVkRWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoY29udHJv
bC0+aXNBY3RpdmF0ZWRTdWJtaXQoKSkKICAgICAgICAgICAgICAgICBuZWVkQnV0dG9uQWN0aXZh
dGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RTdWNjZXNzZnVsU3VibWl0
QnV0dG9uID09IDAgJiYgY29udHJvbC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpCkBAIC0z
NDIsOCArMzUzLDEwIEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldCgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVk
RWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5y
ZXNldCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLT5yZXNldCgpOworICAgIH0K
IAogICAgIG1faW5yZXNldCA9IGZhbHNlOwogfQpAQCAtMzk2LDcgKzQwOSw3IEBAIHRlbXBsYXRl
PGNsYXNzIFQsIHNpemVfdCBuPiBzdGF0aWMgdm9pZCAKICAgICAgICAgfQogfQogCi11bnNpZ25l
ZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQordW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpm
b3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCogZWxlbWVudCkKIHsKICAg
ICAvLyBDb21wYXJlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZvcm0gZWxlbWVudCBhbmQgdGhlIGlu
c2VydGVkIGVsZW1lbnQuCiAgICAgLy8gVXBkYXRlcyB0aGUgaW5kZWNlcyBpbiBvcmRlciB0byB0
aGUgcmVsYXRpb24gb2YgdGhlIHBvc2l0aW9uOgpAQCAtNDE2LDU3ICs0MjksNjQgQEAgdW5zaWdu
ZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZAogICAgIHVuc2lnbmVkIGxlZnQgPSAw
LCByaWdodCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKSAtIDE7CiAgICAgd2hpbGUgKGxl
ZnQgIT0gcmlnaHQpIHsKICAgICAgICAgdW5zaWduZWQgbWlkZGxlID0gbGVmdCArICgocmlnaHQg
LSBsZWZ0KSAvIDIpOwotICAgICAgICBwb3NpdGlvbiA9IGVsZW1lbnQtPmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uKG1fYXNzb2NpYXRlZEVsZW1lbnRzW21pZGRsZV0pOworICAgICAgICBwb3NpdGlv
biA9IGVsZW1lbnQtPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRvSFRNTEVsZW1lbnQobV9hc3Nv
Y2lhdGVkRWxlbWVudHNbbWlkZGxlXSkpOwogICAgICAgICBpZiAocG9zaXRpb24gJiBET0NVTUVO
VF9QT1NJVElPTl9GT0xMT1dJTkcpCiAgICAgICAgICAgICByaWdodCA9IG1pZGRsZTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgbGVmdCA9IG1pZGRsZSArIDE7CiAgICAgfQogCi0gICAgcG9z
aXRpb24gPSBlbGVtZW50LT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihtX2Fzc29jaWF0ZWRFbGVt
ZW50c1tsZWZ0XSk7CisgICAgcG9zaXRpb24gPSBlbGVtZW50LT5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbih0b0hUTUxFbGVtZW50KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2xlZnRdKSk7CiAgICAgaWYg
KHBvc2l0aW9uICYgRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKQogICAgICAgICByZXR1cm4g
bGVmdDsKICAgICByZXR1cm4gbGVmdCArIDE7CiB9CiAKLXVuc2lnbmVkIEhUTUxGb3JtRWxlbWVu
dDo6Zm9ybUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlKQordW5zaWduZWQg
SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCog
YXNzb2NpYXRlZEVsZW1lbnQpCiB7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxF
bGVtZW50KGFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAvLyBUcmVhdHMgc2VwYXJhdGVseSB0aGUg
Y2FzZSB3aGVyZSB0aGlzIGVsZW1lbnQgaGFzIHRoZSBmb3JtIGF0dHJpYnV0ZQogICAgIC8vIGZv
ciBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9uLgotICAgIGlmIChlLT5mYXN0SGFzQXR0cmlidXRl
KGZvcm1BdHRyKSkKLSAgICAgICAgcmV0dXJuIGZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJp
YnV0ZShlKTsKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCisg
ICAgICAgIHJldHVybiBmb3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUoZWxlbWVudCk7
CiAKICAgICAvLyBDaGVjayBmb3IgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGlzIGVsZW1lbnQg
aXMgdGhlIHZlcnkgbGFzdCB0aGluZyBpbgogICAgIC8vIHRoZSBmb3JtJ3MgdHJlZSBvZiBjaGls
ZHJlbjsgd2UgZG9uJ3Qgd2FudCB0byB3YWxrIHRoZSBlbnRpcmUgdHJlZSBpbiB0aGF0CiAgICAg
Ly8gY29tbW9uIGNhc2UgdGhhdCBvY2N1cnMgZHVyaW5nIHBhcnNpbmc7IGluc3RlYWQgd2UnbGwg
anVzdCByZXR1cm4gYSB2YWx1ZQogICAgIC8vIHRoYXQgc2F5cyAiYWRkIHRoaXMgZm9ybSBlbGVt
ZW50IHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5Ii4KLSAgICBpZiAoZS0+dHJhdmVyc2VOZXh0Tm9k
ZSh0aGlzKSkgeworICAgIGlmIChlbGVtZW50LT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGkgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4OwogICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSh0aGlzKSkgewotICAgICAgICAgICAgaWYgKG5vZGUgPT0gZSkgeworICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gZWxlbWVudCkgewogICAgICAgICAgICAgICAgICsrbV9hc3NvY2lhdGVk
RWxlbWVudHNBZnRlckluZGV4OwogICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAgICAg
ICAgICAgICAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9s
RWxlbWVudCo+KG5vZGUpLT5mb3JtKCkgPT0gdGhpcykKKyAgICAgICAgICAgICAgICAgICAgJiYg
KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAg
ICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpLT5mb3Jt
KCkgPT0gdGhpcykKICAgICAgICAgICAgICAgICArK2k7CiAgICAgICAgIH0KICAgICB9CiAgICAg
cmV0dXJuIG1fYXNzb2NpYXRlZEVsZW1lbnRzQWZ0ZXJJbmRleCsrOwogfQogCi12b2lkIEhUTUxG
b3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBl
KQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0
ZWRFbGVtZW50KiBlKQogewotICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5y
ZW1vdmVCdXR0b24oZSk7Ci0gICAgbV9jaGVja2VkUmFkaW9CdXR0b25zLmFkZEJ1dHRvbihlKTsK
KyAgICBpZiAoZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KGUpOworICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3Zl
QnV0dG9uKGVsZW1lbnQpOworICAgICAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMuYWRkQnV0dG9u
KGVsZW1lbnQpOworICAgIH0KICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5pbnNlcnQoZm9ybUVs
ZW1lbnRJbmRleChlKSwgZSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3Jt
RWxlbWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnJlbW92ZUZvcm1FbGVtZW50KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZSkKIHsKLSAgICBtX2No
ZWNrZWRSYWRpb0J1dHRvbnMucmVtb3ZlQnV0dG9uKGUpOwotICAgIGlmIChlLT5mYXN0SGFzQXR0
cmlidXRlKGZvcm1BdHRyKSkgeworICAgIGlmIChlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQor
ICAgICAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMucmVtb3ZlQnV0dG9uKHN0YXRpY19jYXN0PEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqPihlKSk7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0
b0hUTUxFbGVtZW50KGUpOworICAgIGlmIChlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1B
dHRyKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleDsKICAgICAgICAgZm9yIChpbmRleCA9IDA7
IGluZGV4IDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2luZGV4KQogICAgICAgICAg
ICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2luZGV4XSA9PSBlKQpAQCAtNTU0LDcgKzU3NCw5
IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojp3YXNVc2VyU3VibWl0dGVkKCkKIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIEhUTUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbigpIGNvbnN0CiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBtX2Fzc29j
aWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+
aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250
cm9sRWxlbWVudCo+KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKTsKICAgICAgICAgaWYgKGNvbnRy
b2wtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIGNvbnRy
b2w7CiAgICAgfQpAQCAtNTY0LDIzICs1ODYsMjMgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudCog
SFRNTEZvcm1FbGVtZW50OgogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgp
CiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+IGNvbnRyb2xz
OworICAgIFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50PiA+IGNvbnRyb2xzOwog
ICAgIGNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoY29udHJvbHMpOwogICAgIHJldHVy
biBjb250cm9scy5pc0VtcHR5KCk7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50Ojpjb2xsZWN0
VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxl
bWVudD4gPiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OmNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ+ID4mIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKIHsKICAgICBSZWZQdHI8
SFRNTEZvcm1FbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CiAgICAgLy8gQ29weSBtX2Fzc29jaWF0
ZWRFbGVtZW50cyBiZWNhdXNlIGV2ZW50IGhhbmRsZXJzIGNhbGxlZCBmcm9tCiAgICAgLy8gSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpIG1pZ2h0IGNoYW5nZSBtX2Fzc29j
aWF0ZWRFbGVtZW50cy4KLSAgICBWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
ID4gZWxlbWVudHM7CisgICAgVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4g
ZWxlbWVudHM7CiAgICAgZWxlbWVudHMucmVzZXJ2ZUNhcGFjaXR5KG1fYXNzb2NpYXRlZEVsZW1l
bnRzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVs
ZW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICBlbGVtZW50cy5hcHBlbmQobV9hc3NvY2lhdGVk
RWxlbWVudHNbaV0pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50cy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAoZWxlbWVudHNbaV0tPmZvcm0oKSA9PSB0aGlzKQotICAg
ICAgICAgICAgZWxlbWVudHNbaV0tPmNoZWNrVmFsaWRpdHkoJnVuaGFuZGxlZEludmFsaWRDb250
cm9scyk7CisgICAgICAgIGlmIChlbGVtZW50c1tpXS0+Zm9ybSgpID09IHRoaXMgJiYgZWxlbWVu
dHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZWxlbWVudHNbaV0uZ2V0KCkpLT5jaGVja1ZhbGlkaXR5
KCZ1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpOwogICAgIH0KIH0KIApAQCAtNjI3LDggKzY0OSwx
MCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6ZG9jdW1lbnREaWRCZWNvbWVBCiB7CiAgICAgQVNT
RVJUKCFtX2F1dG9jb21wbGV0ZSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
c3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXNzb2NpYXRlZEVsZW1l
bnRzW2ldLT5yZXNldCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0
ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVu
dHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLT5yZXNldCgp
OworICAgIH0KIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRv
Y3VtZW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHJldmlzaW9uIDczMzQ5KQorKysg
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OworY2xhc3MgRm9ybUFz
c29jaWF0ZWRFbGVtZW50OwogY2xhc3MgRm9ybURhdGE7CiBjbGFzcyBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OwogY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKQEAgLTY0LDggKzY1LDggQEAgcHVibGlj
OgogCiAgICAgLy8gRklYTUU6IFNob3VsZCByZW5hbWUgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byBz
YXkgImZvcm0gY29udHJvbCIKICAgICAvLyBvciAiZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnQiIGlu
c3RlYWQgb2YgImZvcm0gZWxlbWVudCIuCi0gICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50KEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUZvcm1FbGVtZW50KEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9ybUVsZW1lbnQoRm9ybUFz
c29jaWF0ZWRFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVGb3JtRWxlbWVudChGb3JtQXNzb2Np
YXRlZEVsZW1lbnQqKTsKICAgICB2b2lkIHJlZ2lzdGVySW1nRWxlbWVudChIVE1MSW1hZ2VFbGVt
ZW50Kik7CiAgICAgdm9pZCByZW1vdmVJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqKTsKIApA
QCAtMTA5LDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAgIENoZWNrZWRSYWRpb0J1dHRvbnMmIGNo
ZWNrZWRSYWRpb0J1dHRvbnMoKSB7IHJldHVybiBtX2NoZWNrZWRSYWRpb0J1dHRvbnM7IH0KIAot
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGFzc29jaWF0ZWRFbGVt
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXNzb2NpYXRlZEVsZW1lbnRzOyB9CisgICAgY29uc3Qg
VmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBhc3NvY2lhdGVkRWxlbWVudHMoKSBjb25z
dCB7IHJldHVybiBtX2Fzc29jaWF0ZWRFbGVtZW50czsgfQogCiBwcml2YXRlOgogICAgIEhUTUxG
b3JtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTEzMSwxMyAr
MTMyLDEzIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHN1Ym1pdChFdmVudCosIGJvb2wgYWN0aXZh
dGVTdWJtaXRCdXR0b24sIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBGb3JtU3VibWlzc2lv
blRyaWdnZXIpOwogCi0gICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmli
dXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKLSAgICB1bnNpZ25lZCBmb3JtRWxlbWVudElu
ZGV4KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKKyAgICB1bnNpZ25lZCBmb3JtRWxlbWVudElu
ZGV4V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCopOworICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50
SW5kZXgoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBzdWJtaXNzaW9uIHNob3VsZCBiZSBwcm9jZWVkZWQuCiAgICAgYm9vbCB2YWxpZGF0ZUludGVy
YWN0aXZlbHkoRXZlbnQqKTsKICAgICAvLyBWYWxpZGF0ZXMgZWFjaCBvZiB0aGUgY29udHJvbHMs
IGFuZCBzdG9yZXMgY29udHJvbHMgb2Ygd2hpY2ggJ2ludmFsaWQnCiAgICAgLy8gZXZlbnQgd2Fz
IG5vdCBjYW5jZWxlZCB0byB0aGUgc3BlY2lmaWVkIHZlY3Rvci4KLSAgICB2b2lkIGNvbGxlY3RV
bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PiA+Jik7CisgICAgdm9pZCBjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKFZlY3Rv
cjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50PiA+Jik7CiAKICAgICBmcmllbmQgY2xhc3Mg
SFRNTEZvcm1Db2xsZWN0aW9uOwogCkBAIC0xNTEsNyArMTUyLDcgQEAgcHJpdmF0ZToKIAogICAg
IHVuc2lnbmVkIG1fYXNzb2NpYXRlZEVsZW1lbnRzQmVmb3JlSW5kZXg7CiAgICAgdW5zaWduZWQg
bV9hc3NvY2lhdGVkRWxlbWVudHNBZnRlckluZGV4OwotICAgIFZlY3RvcjxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Kj4gbV9hc3NvY2lhdGVkRWxlbWVudHM7CisgICAgVmVjdG9yPEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCo+IG1fYXNzb2NpYXRlZEVsZW1lbnRzOwogICAgIFZlY3RvcjxIVE1MSW1hZ2VF
bGVtZW50Kj4gbV9pbWFnZUVsZW1lbnRzOwogCiAgICAgYm9vbCBtX3dhc1VzZXJTdWJtaXR0ZWQ7
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzM0OSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDkg
KzEzOSwxMSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUNoZWNrZWRSYWRpCiAgICAg
ICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAKICAgICBpZiAoZm9y
bSgpKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGNv
bnRyb2xzID0gZm9ybSgpLT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKKyAgICAgICAgY29uc3QgVmVj
dG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBjb250cm9scyA9IGZvcm0oKS0+YXNzb2NpYXRl
ZEVsZW1lbnRzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb250cm9scy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJv
bCA9IGNvbnRyb2xzW2ldOworICAgICAgICAgICAgaWYgKCFjb250cm9sc1tpXS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Kj4oY29udHJvbHNbaV0pOwogICAgICAgICAgICAgaWYgKGNvbnRyb2wtPm5hbWUo
KSAhPSBuYW1lKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAo
Y29udHJvbC0+dHlwZSgpICE9IHR5cGUoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcAkocmV2aXNpb24gNzMzNDkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNyArNDYsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1pbmxpbmUgSFRNTE9iamVjdEVsZW1l
bnQ6OkhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpIAoraW5saW5lIEhUTUxPYmplY3RF
bGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpIAogICAgIDogSFRNTFBsdWdJbkltYWdlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwg
Y3JlYXRlZEJ5UGFyc2VyKQorICAgICwgRm9ybUFzc29jaWF0ZWRFbGVtZW50KGZvcm0pCiAgICAg
LCBtX2RvY05hbWVkSXRlbSh0cnVlKQogICAgICwgbV91c2VGYWxsYmFja0NvbnRlbnQoZmFsc2Up
CiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUob2JqZWN0VGFnKSk7CisgICAgaWYgKCF0aGlzLT5m
b3JtKCkpCisgICAgICAgIHNldEZvcm0oZmluZEZvcm1BbmNlc3RvcigpKTsKKyAgICBpZiAodGhp
cy0+Zm9ybSgpKQorICAgICAgICB0aGlzLT5mb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhp
cyk7CiB9CiAKLVBhc3NSZWZQdHI8SFRNTE9iamVjdEVsZW1lbnQ+IEhUTUxPYmplY3RFbGVtZW50
OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50
LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK2lubGluZSBIVE1MT2JqZWN0RWxlbWVudDo6fkhUTUxP
YmplY3RFbGVtZW50KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxPYmplY3RFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpKTsKKyAgICBpZiAoZm9ybSgp
KQorICAgICAgICBmb3JtKCktPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworfQorCitQYXNzUmVm
UHRyPEhUTUxPYmplY3RFbGVtZW50PiBIVE1MT2JqZWN0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50
KiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhUTUxPYmplY3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtLCBjcmVhdGVkQnlQYXJz
ZXIpKTsKIH0KIAogUmVuZGVyV2lkZ2V0KiBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyV2lkZ2V0
Rm9ySlNCaW5kaW5ncygpIGNvbnN0CkBAIC0zMTMsNiArMzI0LDE0IEBAIHZvaWQgSFRNTE9iamVj
dEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW0KICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpy
ZW1vdmVkRnJvbURvY3VtZW50KCk7CiB9CiAKK3ZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmF0dHJp
YnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCit7CisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBmb3JtQXR0cikKKyAgICAgICAgZm9ybUF0dHJpYnV0ZUNoYW5n
ZWQoKTsKKyAgICBlbHNlCisgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmF0dHJpYnV0
ZUNoYW5nZWQoYXR0ciwgcHJlc2VydmVEZWNscyk7Cit9CisKIHZvaWQgSFRNTE9iamVjdEVsZW1l
bnQ6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hh
bmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKIHsKICAgICB1cGRh
dGVEb2NOYW1lZEl0ZW0oKTsKQEAgLTQ1Myw0ICs0NzIsMjcgQEAgdm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6YWRkU3VicmVzb3VyY2VBdAogICAgICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBk
b2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1c2VNYXApKTsKIH0KIAordm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCit7CisgICAgRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjppbnNlcnRlZEludG9UcmVlKCk7CisgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKK30KKwordm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVt
b3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkKK3sKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJl
bW92ZWRGcm9tVHJlZSgpOworICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbW92ZWRGcm9t
VHJlZShkZWVwKTsKK30KKworYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEo
Rm9ybURhdGFMaXN0JiwgYm9vbCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50cyB0aGlzIGZ1
bmN0aW9uLgorICAgIHJldHVybiBmYWxzZTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBIVE1M
T2JqZWN0RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9u
YW1lLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogbV9uYW1lOworfQorCiB9CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TE9iamVjdEVsZW1lbnQuaAkocmV2aXNpb24gNzMzNDkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTMgKzIzLDE3IEBACiAjaWZuZGVm
IEhUTUxPYmplY3RFbGVtZW50X2gKICNkZWZpbmUgSFRNTE9iamVjdEVsZW1lbnRfaAogCisjaW5j
bHVkZSAiRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBsdWdJbkltYWdl
RWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxPYmplY3RFbGVt
ZW50IDogcHVibGljIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQgeworY2xhc3MgSFRNTEZvcm1FbGVt
ZW50OworCitjbGFzcyBIVE1MT2JqZWN0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50LCBwdWJsaWMgRm9ybUFzc29jaWF0ZWRFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCosIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICB2aXJ0
dWFsIH5IVE1MT2JqZWN0RWxlbWVudCgpOwogCiAgICAgYm9vbCBpc0RvY05hbWVkSXRlbSgpIGNv
bnN0IHsgcmV0dXJuIG1fZG9jTmFtZWRJdGVtOyB9CiAKQEAgLTQwLDEwICs0NCwyNSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIHVzZUZhbGxiYWNrQ29udGVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlRmFsbGJhY2tDb250ZW50OyB9CiAgICAgdm9pZCByZW5kZXJGYWxsYmFja0NvbnRlbnQo
KTsKIAorICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQKKyAg
ICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0oKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ6OmZvcm0oKTsgfQorCisgICAgdmlydHVhbCBib29sIGlzRm9ybUNvbnRyb2xFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9y
bURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRl
Q2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CisKKyAgICB1
c2luZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+OjpyZWY7CisgICAgdXNpbmcgVHJlZVNoYXJl
ZDxDb250YWluZXJOb2RlPjo6ZGVyZWY7CisKIHByaXZhdGU6Ci0gICAgSFRNTE9iamVjdEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
OworICAgIEhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCos
IEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bVRyZWUoYm9vbCBkZWVwKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJl
bmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CkBA
IC02OSw2ICs4OCwxMSBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDbGFzc0lk
KCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgeyByZWYo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpIHsgZGVy
ZWYoKTsgfQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFt
ZSgpIGNvbnN0OworCiAgICAgQXRvbWljU3RyaW5nIG1faWQ7CiAgICAgU3RyaW5nIG1fY2xhc3NJ
ZDsKICAgICBib29sIG1fZG9jTmFtZWRJdGVtIDogMTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
VGFnTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgko
cmV2aXNpb24gNzMzNDkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIG5vYnIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAog
bm9lbWJlZCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBub2ZyYW1lcyBpbnRlcmZhY2VOYW1l
PUhUTUxFbGVtZW50CiBub2xheWVyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLW9iamVjdCBj
b25zdHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyCitvYmplY3QgY29uc3RydWN0b3JOZWVkc0Zv
cm1FbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyCiBvbCBpbnRlcmZhY2VO
YW1lPUhUTUxPTGlzdEVsZW1lbnQKIG9wdGdyb3VwIGludGVyZmFjZU5hbWU9SFRNTE9wdEdyb3Vw
RWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50CiBvcHRpb24gY29uc3RydWN0b3JO
ZWVkc0Zvcm1FbGVtZW50CkluZGV4OiBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAJKHJldmlz
aW9uIDczMzQ5KQorKysgV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUFMV0FZ
U19JTkxJTkUgVmFsaWRhdGlvbk1lc3NhZ2U6OlZhbGlkYXRpb25NZXNzYWdlKEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGVsZW1lbnQpCitBTFdBWVNfSU5MSU5FIFZhbGlkYXRpb25NZXNzYWdlOjpW
YWxpZGF0aW9uTWVzc2FnZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgOiBt
X2VsZW1lbnQoZWxlbWVudCkKIHsKIH0KQEAgLTQ1LDcgKzQ1LDcgQEAgVmFsaWRhdGlvbk1lc3Nh
Z2U6On5WYWxpZGF0aW9uTWVzc2FnZSgpCiAgICAgaGlkZU1lc3NhZ2UoKTsKIH0KIAotUGFzc093
blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gVmFsaWRhdGlvbk1lc3NhZ2U6OmNyZWF0ZShIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQorUGFzc093blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4g
VmFsaWRhdGlvbk1lc3NhZ2U6OmNyZWF0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQp
CiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWYWxpZGF0aW9uTWVzc2FnZShlbGVtZW50KSk7
CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAkocmV2aXNpb24gNzMzNDkpCisrKyBX
ZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjAg
KzM4LDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTEZvcm1Db250cm9s
RWxlbWVudDsKK2NsYXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKIAogY2xhc3MgVmFsaWRhdGlv
bk1lc3NhZ2UgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBjcmVhdGUoSFRNTEZvcm1Db250cm9sRWxlbWVudCop
OworICAgIHN0YXRpYyBQYXNzT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBjcmVhdGUoRm9ybUFz
c29jaWF0ZWRFbGVtZW50Kik7CiAgICAgflZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAgU3RyaW5n
IG1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2U7IH0KICAgICB2b2lkIHNldE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6Ci0gICAgVmFsaWRhdGlvbk1lc3NhZ2UoSFRN
TEZvcm1Db250cm9sRWxlbWVudCopOworICAgIFZhbGlkYXRpb25NZXNzYWdlKEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCopOwogICAgIHZvaWQgaGlkZU1lc3NhZ2UoVGltZXI8VmFsaWRhdGlvbk1lc3Nh
Z2U+KiA9IDApOwogCi0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogbV9lbGVtZW50OworICAg
IEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogbV9lbGVtZW50OwogICAgIFN0cmluZyBtX21lc3NhZ2U7
CiAgICAgT3duUHRyPFRpbWVyPFZhbGlkYXRpb25NZXNzYWdlPiA+IG1fdGltZXI7CiB9OwpJbmRl
eDogV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9WYWxpZGl0eVN0YXRlLmNwcAkocmV2aXNpb24gNzMzNDkpCisrKyBXZWJDb3JlL2h0bWwv
VmFsaWRpdHlTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDI1ICszNywyNiBAQCB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBTdHJpbmcgVmFsaWRpdHlTdGF0ZTo6dmFsaWRhdGlv
bk1lc3NhZ2UoKSBjb25zdAogewotICAgIGlmICghbV9jb250cm9sLT53aWxsVmFsaWRhdGUoKSkK
KyAgICBpZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+d2lsbFZhbGlkYXRlKCkpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGlmIChjdXN0b21FcnJvcigpKQogICAgICAgICBy
ZXR1cm4gbV9jdXN0b21FcnJvck1lc3NhZ2U7Ci0gICAgYm9vbCBpc0lucHV0RWxlbWVudCA9IG1f
Y29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZyk7Ci0gICAgYm9vbCBpc1RleHRBcmVhRWxlbWVu
dCA9IG1fY29udHJvbC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZyk7CisgICAgSFRNTEVsZW1lbnQq
IGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG1fY29udHJvbCk7CisgICAgYm9vbCBpc0lucHV0RWxl
bWVudCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzVGFn
TmFtZShpbnB1dFRhZyk7CisgICAgYm9vbCBpc1RleHRBcmVhRWxlbWVudCA9IGVsZW1lbnQtPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZyk7
CiAgICAgLy8gVGhlIG9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgY2hlY2tzIGlzIG1lYW5pbmdmdWwu
IGUuZy4gV2UnZCBsaWtlIHRvIHNob3cgdGhlCiAgICAgLy8gdmFsdWVNaXNzaW5nIG1lc3NhZ2Ug
ZXZlbiBpZiB0aGUgY29udHJvbCBoYXMgb3RoZXIgdmFsaWRhdGlvbiBlcnJvcnMuCiAgICAgaWYg
KHZhbHVlTWlzc2luZygpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRyb2wtPmhhc1RhZ05hbWUoc2Vs
ZWN0VGFnKSkKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKICAg
ICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclNlbGVjdFRl
eHQoKTsKICAgICAgICAgaWYgKGlzSW5wdXRFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpLT52YWx1ZU1pc3NpbmdUZXh0
KCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVs
ZW1lbnQpLT52YWx1ZU1pc3NpbmdUZXh0KCk7CiAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVz
c2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKICAgICB9CiAgICAgaWYgKHR5cGVNaXNtYXRjaCgpKSB7
CiAgICAgICAgIGlmIChpc0lucHV0RWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKS0+dHlwZU1pc21hdGNoVGV4dCgpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50
KS0+dHlwZU1pc21hdGNoVGV4dCgpOwogICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VU
eXBlTWlzbWF0Y2hUZXh0KCk7CiAgICAgfQogICAgIGlmIChwYXR0ZXJuTWlzbWF0Y2goKSkKQEAg
LTY1LDcgKzY2LDcgQEAgU3RyaW5nIFZhbGlkaXR5U3RhdGU6OnZhbGlkYXRpb25NZXNzYWdlKAog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRl
eHQgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCo+KG1fY29udHJvbCk7
CisgICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHZh
bGlkYXRpb25NZXNzYWdlVG9vTG9uZ1RleHQobnVtR3JhcGhlbWVDbHVzdGVycyh0ZXh0LT52YWx1
ZSgpKSwgdGV4dC0+bWF4TGVuZ3RoKCkpOwogICAgIH0KICAgICBpZiAocmFuZ2VVbmRlcmZsb3co
KSkgewpAQCAtNzMsMjEgKzc0LDIxIEBAIFN0cmluZyBWYWxpZGl0eVN0YXRlOjp2YWxpZGF0aW9u
TWVzc2FnZSgKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVz
c2FnZVJhbmdlVW5kZXJmbG93VGV4dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9j
b250cm9sKS0+bWluaW11bVN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNz
YWdlUmFuZ2VVbmRlcmZsb3dUZXh0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVt
ZW50KS0+bWluaW11bVN0cmluZygpKTsKICAgICB9CiAgICAgaWYgKHJhbmdlT3ZlcmZsb3coKSkg
ewogICAgICAgICBpZiAoIWlzSW5wdXRFbGVtZW50KSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZU92ZXJmbG93VGV4dChzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKS0+bWF4aW11bVN0cmluZygpKTsKKyAgICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VPdmVyZmxvd1RleHQoc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpLT5tYXhpbXVtU3RyaW5nKCkpOwogICAgIH0KICAg
ICBpZiAoc3RlcE1pc21hdGNoKCkpIHsKICAgICAgICAgaWYgKCFpc0lucHV0RWxlbWVudCkgewog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKTsKKyAgICAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7
CiAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVN0ZXBNaXNtYXRjaFRleHQoaW5wdXQt
PnN0ZXBCYXNlU3RyaW5nKCksIGlucHV0LT5zdGVwU3RyaW5nKCkpOwogICAgIH0KIApAQCAtOTcs
MTcgKzk4LDE5IEBAIFN0cmluZyBWYWxpZGl0eVN0YXRlOjp2YWxpZGF0aW9uTWVzc2FnZSgKIHZv
aWQgVmFsaWRpdHlTdGF0ZTo6c2V0Q3VzdG9tRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKIHsKICAgICBtX2N1c3RvbUVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgbV9jb250
cm9sLT5zZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKKyAgICBpZiAobV9jb250cm9sLT5pc0Zvcm1D
b250cm9sRWxlbWVudCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Kj4obV9jb250cm9sKS0+c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiB9CiAKIGJvb2wgVmFs
aWRpdHlTdGF0ZTo6dmFsdWVNaXNzaW5nKCkgY29uc3QKIHsKLSAgICBpZiAobV9jb250cm9sLT5o
YXNUYWdOYW1lKGlucHV0VGFnKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOworICAgIEhUTUxFbGVt
ZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChtX2NvbnRyb2wpOworICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgcmV0
dXJuIGlucHV0LT52YWx1ZU1pc3NpbmcoaW5wdXQtPnZhbHVlKCkpOwogICAgIH0KLSAgICBpZiAo
bV9jb250cm9sLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgewotICAgICAgICBIVE1MVGV4dEFy
ZWFFbGVtZW50KiB0ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPiht
X2NvbnRyb2wpOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgewor
ICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxU
ZXh0QXJlYUVsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHRleHRBcmVhLT52YWx1
ZU1pc3NpbmcodGV4dEFyZWEtPnZhbHVlKCkpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMTUsMTQgKzExOCwxNCBAQCBib29sIFZhbGlkaXR5U3RhdGU6OnZhbHVlTWlzc2luZygpIGNv
bnN0CiAKIGJvb2wgVmFsaWRpdHlTdGF0ZTo6dHlwZU1pc21hdGNoKCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fY29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgaWYgKCF0b0hUTUxFbGVt
ZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wp
LT50eXBlTWlzbWF0Y2goKTsKIH0KIAogYm9vbCBWYWxpZGl0eVN0YXRlOjpwYXR0ZXJuTWlzbWF0
Y2goKSBjb25zdAogewotICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkK
KyAgICBpZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFtZShpbnB1dFRhZykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgIHJldHVybiBpbnB1
dC0+cGF0dGVybk1pc21hdGNoKGlucHV0LT52YWx1ZSgpKTsKQEAgLTEzMCwxMSArMTMzLDExIEBA
IGJvb2wgVmFsaWRpdHlTdGF0ZTo6cGF0dGVybk1pc21hdGNoKCkgY28KIAogYm9vbCBWYWxpZGl0
eVN0YXRlOjp0b29Mb25nKCkgY29uc3QKIHsKLSAgICBpZiAobV9jb250cm9sLT5oYXNUYWdOYW1l
KGlucHV0VGFnKSkgeworICAgIGlmICh0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPmhhc1RhZ05h
bWUoaW5wdXRUYWcpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCk7CiAgICAgICAgIHJldHVybiBpbnB1
dC0+dG9vTG9uZyhpbnB1dC0+dmFsdWUoKSwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OkNo
ZWNrRGlydHlGbGFnKTsKICAgICB9Ci0gICAgaWYgKG1fY29udHJvbC0+aGFzVGFnTmFtZSh0ZXh0
YXJlYVRhZykpIHsKKyAgICBpZiAodG9IVE1MRWxlbWVudChtX2NvbnRyb2wpLT5oYXNUYWdOYW1l
KHRleHRhcmVhVGFnKSkgewogICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYSA9
IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgICAgICBy
ZXR1cm4gdGV4dEFyZWEtPnRvb0xvbmcodGV4dEFyZWEtPnZhbHVlKCksIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjpDaGVja0RpcnR5RmxhZyk7CiAgICAgfQpAQCAtMTQzLDcgKzE0Niw3IEBA
IGJvb2wgVmFsaWRpdHlTdGF0ZTo6dG9vTG9uZygpIGNvbnN0CiAKIGJvb2wgVmFsaWRpdHlTdGF0
ZTo6cmFuZ2VVbmRlcmZsb3coKSBjb25zdAogewotICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdO
YW1lKGlucHV0VGFnKSkKKyAgICBpZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFn
TmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwog
ICAgIHJldHVybiBpbnB1dC0+cmFuZ2VVbmRlcmZsb3coaW5wdXQtPnZhbHVlKCkpOwpAQCAtMTUx
LDcgKzE1NCw3IEBAIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cmFuZ2VVbmRlcmZsb3coKSBjb24KIAog
Ym9vbCBWYWxpZGl0eVN0YXRlOjpyYW5nZU92ZXJmbG93KCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
Y29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgaWYgKCF0b0hUTUxFbGVtZW50KG1f
Y29udHJvbCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4obV9jb250cm9sKTsKICAgICByZXR1cm4gaW5wdXQtPnJhbmdlT3ZlcmZsb3coaW5wdXQtPnZh
bHVlKCkpOwpAQCAtMTU5LDcgKzE2Miw3IEBAIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cmFuZ2VPdmVy
ZmxvdygpIGNvbnMKIAogYm9vbCBWYWxpZGl0eVN0YXRlOjpzdGVwTWlzbWF0Y2goKSBjb25zdAog
ewotICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICBpZiAoIXRv
SFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgIHJldHVybiBpbnB1dC0+c3RlcE1pc21h
dGNoKGlucHV0LT52YWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuaAkocmV2aXNpb24gNzMz
NDkpCisrKyBXZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCwxNCArMjQsMTQgQEAKICNpZm5kZWYgVmFsaWRpdHlTdGF0ZV9oCiAjZGVmaW5lIFZhbGlkaXR5
U3RhdGVfaAogCi0jaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUg
IkZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVmFsaWRpdHlTdGF0ZSA6IHB1YmxpYyBOb25j
b3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VmFsaWRpdHlTdGF0ZT4g
Y3JlYXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wpCisgICAgc3RhdGljIFBhc3NP
d25QdHI8VmFsaWRpdHlTdGF0ZT4gY3JlYXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogY29udHJv
bCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVmFsaWRpdHlTdGF0ZShjb250
cm9sKSk7CiAgICAgfQpAQCAtNTQsMTIgKzU0LDEyIEBAIHB1YmxpYzoKICAgICBib29sIHZhbGlk
KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgVmFsaWRpdHlTdGF0ZShIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KiBjb250cm9sKSA6IG1fY29udHJvbChjb250cm9sKSB7IH0KKyAgICBWYWxpZGl0eVN0
YXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogY29udHJvbCkgOiBtX2NvbnRyb2woY29udHJvbCkg
eyB9CiAKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkQ29sb3JTdHJpbmcoY29uc3QgU3RyaW5nJik7
CiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZEVtYWlsQWRkcmVzcyhjb25zdCBTdHJpbmcmKTsKIAot
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIG1fY29udHJvbDsKKyAgICBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQqIG1fY29udHJvbDsKICAgICBTdHJpbmcgbV9jdXN0b21FcnJvck1lc3NhZ2U7CiB9
OwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCShyZXZpc2lvbiA3MzM0OSkKKysr
IFdlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1
LDEwICsxNzUsMTEgQEAgUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lvbj4gRm9ybVN1Ym1pc3Npbwog
ICAgIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5nPiA+IGZvcm1WYWx1ZXM7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGZvcm0tPmFz
c29jaWF0ZWRFbGVtZW50cygpW2ldOwotICAgICAgICBpZiAoIWNvbnRyb2wtPmRpc2FibGVkKCkp
CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogY29udHJvbCA9IGZvcm0tPmFzc29jaWF0
ZWRFbGVtZW50cygpW2ldOworICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVs
ZW1lbnQoY29udHJvbCk7CisgICAgICAgIGlmICghZWxlbWVudC0+ZGlzYWJsZWQoKSkKICAgICAg
ICAgICAgIGNvbnRyb2wtPmFwcGVuZEZvcm1EYXRhKCpkb21Gb3JtRGF0YSwgaXNNdWx0aVBhcnRG
b3JtKTsKLSAgICAgICAgaWYgKGNvbnRyb2wtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKICAgICAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KGNvbnRyb2wpOwogICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7CiAgICAg
ICAgICAgICAgICAgZm9ybVZhbHVlcy5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4oaW5wdXQt
Pm5hbWUoKSwgaW5wdXQtPnZhbHVlKCkpKTsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzM0OSkKKysrIFdl
YktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAt
MTItMDUgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZXQgSFRNTE9iamVjdEVsZW1l
bnQgYmUgYSBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MjEKKworICAgICAgICBNb2RpZmllZCB0byB1c2Ug
Rm9ybUFzc29jaWF0ZWRFbGVtZW50IGluc3RlYWQgb2YgSFRNTEZvcm1Db250cm9sRWxlbWVudC4K
KworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tOgorICAgICAgICAo
LVtXZWJIVE1MUmVwcmVzZW50YXRpb24gZWxlbWVudFdpdGhOYW1lOmluRm9ybTpdKTogTW9kaWZp
ZWQgdG8gdXNlCisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCBpbnN0ZWFkIG9mIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQuCisgICAgICAgICgtW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBjb250
cm9sc0luRm9ybTpdKTogRGl0dG8uCisKIDIwMTAtMTItMDQgIERhbiBCZXJuc3RlaW4gIDxtaXR6
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCShyZXZpc2lvbiA3MzM0
OSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI4NSwxMiArMjg1LDEyIEBAIC0gKERPTUVsZW1lbnQgKillbGVtZW50V2l0
aE5hbWU6KE5TU3RyaW4KICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVtZW50ID0gZm9ybUVs
ZW1lbnRGcm9tRE9NRWxlbWVudChmb3JtKTsKICAgICBpZiAoIWZvcm1FbGVtZW50KQogICAgICAg
ICByZXR1cm4gbmlsOwotICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4m
IGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0ZWRFbGVtZW50cygpOworICAgIGNvbnN0
IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+
YXNzb2NpYXRlZEVsZW1lbnRzKCk7CiAgICAgQXRvbWljU3RyaW5nIHRhcmdldE5hbWUgPSBuYW1l
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50cy5zaXplKCk7IGkrKykgewot
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbHQgPSBlbGVtZW50c1tpXTsKKyAgICAg
ICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlbHQgPSBlbGVtZW50c1tpXTsKICAgICAgICAgaWYg
KGVsdC0+bmFtZSgpID09IHRhcmdldE5hbWUpCi0gICAgICAgICAgICByZXR1cm4ga2l0KGVsdCk7
CisgICAgICAgICAgICByZXR1cm4ga2l0KHRvSFRNTEVsZW1lbnQoZWx0KSk7CiAgICAgfQogICAg
IHJldHVybiBuaWw7CiB9CkBAIC0zMzMsMTAgKzMzMywxMCBAQCAtIChOU0FycmF5ICopY29udHJv
bHNJbkZvcm06KERPTUVsZW1lbnQgCiAgICAgaWYgKCFmb3JtRWxlbWVudCkKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICBOU011dGFibGVBcnJheSAqcmVzdWx0cyA9IG5pbDsKLSAgICBjb25zdCBW
ZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5h
c3NvY2lhdGVkRWxlbWVudHMoKTsKKyAgICBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0ZWRFbGVtZW50cygpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50cy5zaXplKCk7IGkrKykgewogICAgICAg
ICBpZiAoZWxlbWVudHNbaV0tPmlzRW51bWVyYXRhYmxlKCkpIHsgLy8gU2tpcCBvcHRpb24gZWxl
bWVudHMsIG90aGVyIGR1ZHMKLSAgICAgICAgICAgIERPTUVsZW1lbnQqIGRlID0ga2l0KGVsZW1l
bnRzW2ldKTsKKyAgICAgICAgICAgIERPTUVsZW1lbnQqIGRlID0ga2l0KHRvSFRNTEVsZW1lbnQo
ZWxlbWVudHNbaV0pKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0cykKICAgICAgICAgICAgICAg
ICByZXN1bHRzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aE9iamVjdDpkZV07CiAgICAgICAg
ICAgICBlbHNlCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzM0OSkKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEwLTEyLTA1ICBLZW5pY2hp
IElzaGliYXNoaSAgPGJhc2hpQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTGV0IEhUTUxPYmplY3RFbGVtZW50IGJlIGEgZm9ybSBh
c3NvY2lhdGVkIGVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ4ODIxCisKKyAgICAgICAgQWRkcyBhIHRlc3QgdG8gZW5zdXJlIHRoZSBvcmRl
ciBvZiBmb3JtLmVsZW1lbnRzIGF0dHJpYnV0ZS4KKyAgICAgICAgVXBkYXRlcyB0d28gdGVzdHMg
dG8gY2hlY2sgd2hldGhlciBvYmplY3QgZWxlbWVudHMgYXJlIGhhbmRsZWQKKyAgICAgICAgY29y
cmVjdGx5IGluIGZvcm0uZWxlbWVudHMgYXR0cmlidXRlLgorCisgICAgICAgICogZmFzdC9mb3Jt
cy9mb3JtLWF0dHJpYnV0ZS1leHBlY3RlZC50eHQ6IFVwZGF0ZWQuCisgICAgICAgICogZmFzdC9m
b3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWF0dHJpYnV0
ZS5qczogVXBkYXRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNv
bGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanM6IEFkZGVkLgorICAgICAgICAoY2hlY2tPcmRlcik6
CisgICAgICAgICogZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVsZW1l
bnRzLmpzOiBVcGRhdGVkLgorCiAyMDEwLTEyLTA1ICBSb2IgQnVpcyAgPHJ3bGJ1aXNAZ21haWwu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1hdHRyaWJ1dGUtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1hdHRyaWJ1dGUtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiA3MzM0OSkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1hdHRyaWJ1
dGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDE0ICs0LDE0IEBAIE9uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiAtIENoZWNrcyB0aGUgZXhpc3Rl
bmNlIG9mIHRoZSBmb3JtIGF0dHJpYnV0ZSBmb3IgZWFjaCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVu
dHMuCi1GSVhNRTogPGxhYmVsPiBhbmQgPG9iamVjdD4gZG9uJ3Qgc3VwcG9ydCB0aGUgZm9ybSBh
dHRyaWJ1dGUgZm9yIG5vdy4KK0ZJWE1FOiA8bGFiZWw+IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZm9y
bSBhdHRyaWJ1dGUgZm9yIG5vdy4KIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
ImJ1dHRvbiIpWzBdLmZvcm0gaXMgb3duZXIKIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoImZpZWxkc2V0IilbMF0uZm9ybSBpcyBvd25lcgogUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJrZXlnZW4iKVswXS5mb3JtIGlzIG93bmVyCiBGQUlMIGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIpWzBdLmZvcm0gc2hvdWxkIGJlIFtvYmpl
Y3QgSFRNTEZvcm1FbGVtZW50XS4gV2FzIG51bGwuCiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJtZXRlciIpWzBdLmZvcm0gaXMgb3duZXIKLUZBSUwgZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdLmZvcm0gc2hvdWxkIGJlIFtvYmplY3QgSFRNTEZv
cm1FbGVtZW50XS4gV2FzIG51bGwuCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJvYmplY3QiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJvdXRwdXQiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJwcm9ncmVzcyIpWzBdLmZvcm0gaXMgb3duZXIKIFBBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpWzBdLmZvcm0gaXMgb3duZXIKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1l
bGVtZW50cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDczMzQ5KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC00LDcgKzQsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBCiAKIAogVGhpcyB0ZXN0IGRvZXMgbm90IGFkZCBvYmplY3QgZWxlbWVudCBhcyBhIGxpc3Rl
ZCBlbGVtZW50LiBTZXBhcmF0ZSB0ZXN0IHdpbGwgY292ZXIgdGhhdC4KLVBBU1Mgb3duZXIuZWxl
bWVudHMubGVuZ3RoIGlzIDIyCitQQVNTIG93bmVyLmVsZW1lbnRzLmxlbmd0aCBpcyAyMwogUEFT
UyBvd25lci5lbGVtZW50c1swXS5pZCBpcyAnYnV0dG9uMScKIFBBU1Mgb3duZXIuZWxlbWVudHNb
MV0uaWQgaXMgJ2ZpZWxkc2V0MScKIFBBU1Mgb3duZXIuZWxlbWVudHNbMl0uaWQgaXMgJ2lucHV0
aGlkZGVuJwpAQCAtMjQsOSArMjQsMTAgQEAgUEFTUyBvd25lci5lbGVtZW50c1sxNV0uaWQgaXMg
J2lucHV0c3VibQogUEFTUyBvd25lci5lbGVtZW50c1sxNl0uaWQgaXMgJ2lucHV0cmVzZXQnCiBQ
QVNTIG93bmVyLmVsZW1lbnRzWzE3XS5pZCBpcyAnaW5wdXRidXR0b24nCiBQQVNTIG93bmVyLmVs
ZW1lbnRzWzE4XS5pZCBpcyAna2V5Z2VuMScKLVBBU1Mgb3duZXIuZWxlbWVudHNbMTldLmlkIGlz
ICdvdXRwdXQxJwotUEFTUyBvd25lci5lbGVtZW50c1syMF0uaWQgaXMgJ3NlbGVjdDEnCi1QQVNT
IG93bmVyLmVsZW1lbnRzWzIxXS5pZCBpcyAndGV4dGFyZWExJworUEFTUyBvd25lci5lbGVtZW50
c1sxOV0uaWQgaXMgJ29iamVjdDEnCitQQVNTIG93bmVyLmVsZW1lbnRzWzIwXS5pZCBpcyAnb3V0
cHV0MScKK1BBU1Mgb3duZXIuZWxlbWVudHNbMjFdLmlkIGlzICdzZWxlY3QxJworUEFTUyBvd25l
ci5lbGVtZW50c1syMl0uaWQgaXMgJ3RleHRhcmVhMScKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9m
b3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1j
b2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzMSBAQAorVGhpcyB0ZXN0IGV4YW1pbmVzIHRoZSBvcmRlciBvZiBmb3JtIGFzc29jaWF0
ZWQgZWxlbWVudHMgd2hpY2ggYXJlIGNsYXNzaWZpZWQgYXMgJ2xpc3RlZCcuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCistIENoZWNrcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lh
dGVkIGVsZW1lbnRzLgorUEFTUyBjaGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwg
a2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJPSyIKKworLSBD
aGVja3MgdGhlIG9yZGVyIGFmdGVyIHNvbWUgZWxlbWVudHMgcmVtb3ZlZC9pbnNlcnRlZC4KK1BB
U1MgY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBz
ZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFtmaWVsZHNldCwgaW5w
dXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorUEFTUyBjaGVj
a09yZGVyKFtvYmplY3QsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwg
dGV4dGFyZWFdKSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIoW29iamVjdCwgZmllbGRzZXQsIGlu
cHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uXSkgaXMgIk9LIgor
CistIENoZWNrcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnRzIHdpdGggZm9y
bSBhdHRyaWJ1dGUuCitQQVNTIGNoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorCistIENo
ZWNrcyB0aGUgb3JkZXIgYWZ0ZXIgc29tZSBlbGVtZW50cyByZW1vdmVkL2luc2VydGVkIHdpdGgg
Zm9ybSBhdHRyaWJ1dGUuCitQQVNTIGNoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0
LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJPSyIKK1BBU1MgY2hlY2tP
cmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0p
IGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1
dCwgc2VsZWN0XSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFtmaWVsZHNldCwgaW5wdXQsIGtl
eWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdF0pIGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihb
dGV4dGFyZWEsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0
XSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIGJ1dHRvbl0pIGlzICJPSyIKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorVGVzdAorCisKKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlv
bi1lbGVtZW50cy1vcmRlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVy
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1hdHRyaWJ1dGUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1hdHRyaWJ1dGUuanMJ
KHJldmlzaW9uIDczMzQ5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMv
Zm9ybS1hdHRyaWJ1dGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBAIHZhciBjb250
YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCcKIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoY29udGFpbmVyKTsKIAogZGVidWcoJy0gQ2hlY2tzIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZv
cm0gYXR0cmlidXRlIGZvciBlYWNoIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cy4nKTsKLWRlYnVn
KCdGSVhNRTogJmx0O2xhYmVsJmd0OyBhbmQgJmx0O29iamVjdCZndDsgZG9uXCd0IHN1cHBvcnQg
dGhlIGZvcm0gYXR0cmlidXRlIGZvciBub3cuJyk7CitkZWJ1ZygnRklYTUU6ICZsdDtsYWJlbCZn
dDsgZG9lc25cJ3Qgc3VwcG9ydCB0aGUgZm9ybSBhdHRyaWJ1dGUgZm9yIG5vdy4nKTsKIGNvbnRh
aW5lci5pbm5lckhUTUwgPSAnPGZvcm0gaWQ9b3duZXI+PC9mb3JtPicgKwogICAgICc8YnV0dG9u
IG5hbWU9dmljdGltIGZvcm09b3duZXIgLz4nICsKICAgICAnPGZpZWxkc2V0IG5hbWU9dmljdGlt
IGZvcm09b3duZXIgLz4nICsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRl
c3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMt
b3JkZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10
ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTAwIEBACitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGV4YW1pbmVzIHRoZSBvcmRlciBv
ZiBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudHMgd2hpY2ggYXJlIGNsYXNzaWZpZWQgYXMgJ2xpc3Rl
ZCcuIik7CisKK3ZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
K2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKK3ZhciBvd25lcjsKKworZnVu
Y3Rpb24gY2hlY2tPcmRlcih2aWN0aW1zKSB7CisgICAgaWYgKG93bmVyLmVsZW1lbnRzLmxlbmd0
aCAhPSB2aWN0aW1zLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuICdsZW5ndGggbWlzbWF0Y2gsIGVs
ZW1lbnRzLmxlbmd0aCA9ICcgKyBvd25lci5lbGVtZW50cy5sZW5ndGggKworICAgICAgICAgICAg
ICAgJywgZXhwZWN0ZWQgbGVuZ3RoID0gJyArIHZpY3RpbXMubGVuZ3RoOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdmljdGltcy5sZW5ndGg7ICsraSkKKyAgICAgICAgaWYgKG93bmVyLmVsZW1l
bnRzW2ldICE9IHZpY3RpbXNbaV0pCisgICAgICAgICAgICByZXR1cm4gJ2VsZW1lbnQgbWlzbWF0
Y2ggYXQgaW5kZXggJyArIGk7CisgICAgcmV0dXJuICdPSyc7Cit9CisKK2RlYnVnKCctIENoZWNr
cyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnRzLicpOworY29udGFpbmVyLmlu
bmVySFRNTCA9ICc8Zm9ybSBpZD1vd25lcj4nICsKKyAgICAnPGJ1dHRvbiBuYW1lPXZpY3RpbT48
L2J1dHRvbj4nICsKKyAgICAnPGZpZWxkc2V0IG5hbWU9dmljdGltPlRlc3Q8L2ZpZWxkc2V0Picg
KworICAgICc8aW5wdXQgbmFtZT12aWN0aW0vPicgKworICAgICc8a2V5Z2VuIG5hbWU9dmljdGlt
Pjwva2V5Z2VuPicgKworICAgICc8bGFiZWwgbmFtZT12aWN0aW0+PC9sYWJlbD4nICsKKyAgICAn
PG1ldGVyIG5hbWU9dmljdGltPjwvbWV0ZXI+JyArCisgICAgJzxvYmplY3QgbmFtZT12aWN0aW0+
PC9vYmplY3Q+JyArCisgICAgJzxvdXRwdXQgbmFtZT12aWN0aW0+PC9vdXRwdXQ+JyArCisgICAg
Jzxwcm9ncmVzcyBuYW1lPXZpY3RpbT48L3Byb2dyZXNzPicgKworICAgICc8c2VsZWN0IG5hbWU9
dmljdGltPjwvc2VsZWN0PicgKworICAgICc8dGV4dGFyZWEgbmFtZT12aWN0aW0+PC90ZXh0YXJl
YT4nKworICAgICc8L2Zvcm0+JzsKK293bmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293
bmVyJyk7Cit2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRv
bicpWzBdOwordmFyIGZpZWxkc2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Zp
ZWxkc2V0JylbMF07Cit2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
aW5wdXQnKVswXTsKK3ZhciBrZXlnZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
a2V5Z2VuJylbMF07Cit2YXIgbGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
bGFiZWwnKVswXTsKK3ZhciBtZXRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdt
ZXRlcicpWzBdOwordmFyIG9iamVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdv
YmplY3QnKVswXTsKK3ZhciBvdXRwdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
b3V0cHV0JylbMF07Cit2YXIgcHJvZ3Jlc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgncHJvZ3Jlc3MnKVswXTsKK3ZhciBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnc2VsZWN0JylbMF07Cit2YXIgdGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgndGV4dGFyZWEnKVswXTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtidXR0b24sIGZp
ZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0p
JywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWcoJy0gQ2hlY2tzIHRoZSBvcmRlciBhZnRl
ciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQuJyk7Citvd25lci5yZW1vdmVDaGlsZChv
YmplY3QpOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKK293bmVyLnJlbW92
ZUNoaWxkKGJ1dHRvbik7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKK293bmVyLmluc2Vy
dEJlZm9yZShvYmplY3QsIGZpZWxkc2V0KTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtvYmplY3Qs
IGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKScsICci
T0siJyk7Citvd25lci5hcHBlbmRDaGlsZChidXR0b24pOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIo
W29iamVjdCwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJl
YSwgYnV0dG9uXSknLCAnIk9LIicpOworCitkZWJ1ZygnJyk7CitkZWJ1ZygnLSBDaGVja3MgdGhl
IG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50cyB3aXRoIGZvcm0gYXR0cmlidXRlLicp
OworY29udGFpbmVyLmlubmVySFRNTCA9ICc8YnV0dG9uIG5hbWU9dmljdGltIGZvcm09b3duZXI+
PC9idXR0b24+JyArCisgICAgJzxmaWVsZHNldCBuYW1lPXZpY3RpbSBmb3JtPW93bmVyPlRlc3Q8
L2ZpZWxkc2V0PicgKworICAgICc8aW5wdXQgbmFtZT12aWN0aW0gZm9ybT1vd25lci8+JyArCisg
ICAgJzxrZXlnZW4gbmFtZT12aWN0aW0gZm9ybT1vd25lcj48L2tleWdlbj4nICsKKyAgICAnPGZv
cm0gaWQ9b3duZXI+JyArCisgICAgJzxsYWJlbCBuYW1lPXZpY3RpbT48L2xhYmVsPicgKworICAg
ICc8bWV0ZXIgbmFtZT12aWN0aW0+PC9tZXRlcj4nICsKKyAgICAnPG9iamVjdCBuYW1lPXZpY3Rp
bT48L29iamVjdD4nICsKKyAgICAnPC9mb3JtPicgKworICAgICc8b3V0cHV0IG5hbWU9dmljdGlt
IGZvcm09b3duZXI+PC9vdXRwdXQ+JyArCisgICAgJzxwcm9ncmVzcyBuYW1lPXZpY3RpbSBmb3Jt
PW93bmVyPjwvcHJvZ3Jlc3M+JyArCisgICAgJzxzZWxlY3QgbmFtZT12aWN0aW0gZm9ybT1vd25l
cj48L3NlbGVjdD4nICsKKyAgICAnPHRleHRhcmVhIG5hbWU9dmljdGltIGZvcm09b3duZXI+PC90
ZXh0YXJlYT4nOworb3duZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXInKTsKK2J1
dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVswXTsKK2ZpZWxk
c2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ZpZWxkc2V0JylbMF07CitpbnB1
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdOwora2V5Z2VuID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tleWdlbicpWzBdOworbGFiZWwgPSBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGFiZWwnKVswXTsKK21ldGVyID0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ21ldGVyJylbMF07CitvYmplY3QgPSBkb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JylbMF07CitvdXRwdXQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgnb3V0cHV0JylbMF07Citwcm9ncmVzcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCdwcm9ncmVzcycpWzBdOworc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ3NlbGVjdCcpWzBdOwordGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgndGV4dGFyZWEnKVswXTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtidXR0b24s
IGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJl
YV0pJywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWcoJy0gQ2hlY2tzIHRoZSBvcmRlciBh
ZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQgd2l0aCBmb3JtIGF0dHJpYnV0ZS4n
KTsKK293bmVyLnJlbW92ZUNoaWxkKG9iamVjdCk7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbYnV0
dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkn
LCAnIk9LIicpOworY29udGFpbmVyLnJlbW92ZUNoaWxkKGJ1dHRvbik7CitzaG91bGRCZSgnY2hl
Y2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJl
YV0pJywgJyJPSyInKTsKK2NvbnRhaW5lci5yZW1vdmVDaGlsZCh0ZXh0YXJlYSk7CitzaG91bGRC
ZSgnY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0XSkn
LCAnIk9LIicpOworb3duZXIuYXBwZW5kQ2hpbGQob2JqZWN0KTsKK3Nob3VsZEJlKCdjaGVja09y
ZGVyKFtmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdF0pJywg
JyJPSyInKTsKK2NvbnRhaW5lci5pbnNlcnRCZWZvcmUodGV4dGFyZWEsIGZpZWxkc2V0KTsKK3No
b3VsZEJlKCdjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG9i
amVjdCwgb3V0cHV0LCBzZWxlY3RdKScsICciT0siJyk7Citjb250YWluZXIuYXBwZW5kQ2hpbGQo
YnV0dG9uKTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmllbGRzZXQsIGlucHV0
LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIGJ1dHRvbl0pJywgJyJPSyInKTsKKwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVs
ZW1lbnRzLmpzCShyZXZpc2lvbiA3MzM0OSkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2Ny
aXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQCBjb250YWluZXIuaW5uZXJIVE1MID0gJzxmb3JtIGlkPSJmb3JtMSI+CiAg
ICAgJzxrZXlnZW4gaWQ9a2V5Z2VuMT48L2tleWdlbj4nICsKICAgICAnPGxhYmVsIGlkPWxhYmVs
MT48L2xhYmVsPicgKwogICAgICc8bWV0ZXIgaWQ9bWV0ZXIxPjwvbWV0ZXI+JyArCisgICAgJzxv
YmplY3QgaWQ9b2JqZWN0MT48L29iamVjdD4nICsKICAgICAnPG91dHB1dCBpZD1vdXRwdXQxPjwv
b3V0cHV0PicgKwogICAgICc8cHJvZ3Jlc3MgaWQ9cHJvZ3Jlc3MxPjwvcHJvZ3Jlc3M+JyArCiAg
ICAgJzxzZWxlY3QgaWQ9c2VsZWN0MT4nICsKQEAgLTM4LDcgKzM5LDcgQEAgY29udGFpbmVyLmlu
bmVySFRNTCA9ICc8Zm9ybSBpZD0iZm9ybTEiPgogCiB2YXIgb3duZXIgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZm9ybTEnKTsKIAotc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzLmxlbmd0aCcs
ICcyMicpOworc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzLmxlbmd0aCcsICcyMycpOwogc2hvdWxk
QmUoJ293bmVyLmVsZW1lbnRzWzBdLmlkJywgIididXR0b24xJyIpOwogc2hvdWxkQmUoJ293bmVy
LmVsZW1lbnRzWzFdLmlkJywgIidmaWVsZHNldDEnIik7CiBzaG91bGRCZSgnb3duZXIuZWxlbWVu
dHNbMl0uaWQnLCAiJ2lucHV0aGlkZGVuJyIpOwpAQCAtNTgsOSArNTksMTAgQEAgc2hvdWxkQmUo
J293bmVyLmVsZW1lbnRzWzE1XS5pZCcsICInaW5wdQogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRz
WzE2XS5pZCcsICInaW5wdXRyZXNldCciKTsKIHNob3VsZEJlKCdvd25lci5lbGVtZW50c1sxN10u
aWQnLCAiJ2lucHV0YnV0dG9uJyIpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzE4XS5pZCcs
ICIna2V5Z2VuMSciKTsKLXNob3VsZEJlKCdvd25lci5lbGVtZW50c1sxOV0uaWQnLCAiJ291dHB1
dDEnIik7Ci1zaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMjBdLmlkJywgIidzZWxlY3QxJyIpOwot
c2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzIxXS5pZCcsICIndGV4dGFyZWExJyIpOworc2hvdWxk
QmUoJ293bmVyLmVsZW1lbnRzWzE5XS5pZCcsICInb2JqZWN0MSciKTsKK3Nob3VsZEJlKCdvd25l
ci5lbGVtZW50c1syMF0uaWQnLCAiJ291dHB1dDEnIik7CitzaG91bGRCZSgnb3duZXIuZWxlbWVu
dHNbMjFdLmlkJywgIidzZWxlY3QxJyIpOworc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzIyXS5p
ZCcsICIndGV4dGFyZWExJyIpOwogCiAKIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="66474"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75663</attachid>
            <date>2010-12-06 03:26:22 -0800</date>
            <delta_ts>2010-12-06 17:05:02 -0800</delta_ts>
            <desc>Patch V5</desc>
            <filename>formassocV5.patch</filename>
            <type>text/plain</type>
            <size>157967</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzM1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI5IEBACisyMDEwLTEyLTA2ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTGV0IEhUTUxPYmplY3RFbGVtZW50IGJlIGEgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4ODIxCisKKyAg
ICAgICAgSW50cm9kdWNlcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgY2xhc3Mgd2hpY2ggd291bGQg
YmUgYSBzdXBlciBjbGFzcworICAgICAgICBvZiBmb3JtIGFzc29jYXRlZCBlbGVtZW50cy4gU29t
ZSBvZiBtZW1iZXIgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgb2YKKyAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCBhcmUgbWlncmF0ZWQgaW50byB0aGlzIGNsYXNzLgorICAgICAgICBGb2xs
b3dpbmcgdGhlIEhUTUw1IHNwZWMsIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgY2xhc3MgYW5kCisg
ICAgICAgIEhUTUxPYmplY3RFbGVtZW50IGNsYXNzIGFyZSBzdWJjbGFzc2VzIG9mIGl0IGZvciBu
b3cuCisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMt
b3JkZXIuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazogQWRkZWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmNwcAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogQWRkZWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkZWQgdGhlIHN5bWJvbCBmb3IgdG9IVE1MRWxlbWVudChG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqKQorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8u
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaDogRml4ZWQgY2xhc3MgZm9yd2FyZCBkZWNsYXJhdGlv
biBvcmRlci4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSk6IE1vZGlmaWVk
IHRvCisgICAgICAgIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZXNldEZvcm1FbGVtZW50c093bmVyKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
aDogRGl0dG8uCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OkRPTUZvcm1EYXRhKToKKyAgICAgICAgKiBodG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6IENvcGllZCBhbmQgcmVuYW1lZCBmcm9tIFdlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6fkZvcm1Bc3NvY2lhdGVkRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkaXR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZUZyb21Gb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXRGb3JtT3duZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0hUTUxFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lh
dGVkRWxlbWVudDo6ZGVyZWYpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50Ojpmb3JtRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6c2V0Rm9ybSk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOiBDaGFuZ2VkIHRo
ZSBhY2Nlc3MgbGV2ZWwgb2YgZmluZEZvcm1BbmNlc3RvcigpLgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1Db2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlv
bjo6aXRlbSk6IE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQKKyAgICAgICAg
aW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db2xsZWN0aW9uOjpnZXROYW1lZEZvcm1JdGVtKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6IERpdHRvLgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6IE1vZGlmaWVkIHJlZ2FyZGluZyB3
aXRoIHRoZSBjaGFuZ2Ugb2YgY2xhc3MKKyAgICAgICAgaGllcmFyY2h5LgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9s
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNl
cnRlZEludG9UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OnJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6dmlydHVhbEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojpmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmRlcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKiBodG1s
L0hUTUxGb3JtRWxlbWVudC5jcHA6IE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQKKyAgICAgICAgaW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
Ojpmb3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50Ojpjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGb3JtRWxlbWVudDo6ZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUpOgorICAgICAgICAqIGh0
bWwvSFRNTEZvcm1FbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50Ojphc3NvY2lhdGVkRWxlbWVudHMpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxl
bWVudC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dXBk
YXRlQ2hlY2tlZFJhZGlvQnV0dG9ucyk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHA6IE1vZGlmaWVkIHJlZ2FyZGluZyB3aXRoIHRoZSBjaGFuZ2Ugb2YgY2xhc3MKKyAgICAg
ICAgaGllcmFyY2h5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxP
YmplY3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojp+SFRN
TE9iamVjdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6YXR0cmlidXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6aW5zZXJ0ZWRJbnRv
VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6cmVtb3ZlZEZyb21U
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1l
KToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9iamVjdEVsZW1lbnQ6OmlzRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50Ojppc0VudW1lcmF0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MT2JqZWN0RWxlbWVudDo6cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCk6Cisg
ICAgICAgICogaHRtbC9IVE1MVGFnTmFtZXMuaW46IEFkZGVkIGNvbnN0cnVjdG9yTmVlZHNGb3Jt
RWxlbWVudCB0byBvYmplY3QgdGFnLgorICAgICAgICAqIGh0bWwvVmFsaWRhdGlvbk1lc3NhZ2Uu
Y3BwOiBNb2RpZmllZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50CisgICAgICAgIGluc3Rl
YWQgb2YgSFRNTEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRp
b25NZXNzYWdlOjpWYWxpZGF0aW9uTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0
aW9uTWVzc2FnZTo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL1ZhbGlkYXRpb25NZXNzYWdlLmg6
IERpdHRvLgorICAgICAgICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6dmFsaWRhdGlvbk1lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6c2V0Q3VzdG9tRXJyb3JNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6OnZhbHVlTWlzc2luZyk6CisgICAgICAgIChXZWJDb3Jl
OjpWYWxpZGl0eVN0YXRlOjp0eXBlTWlzbWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRp
dHlTdGF0ZTo6cGF0dGVybk1pc21hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkaXR5U3Rh
dGU6OnRvb0xvbmcpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6cmFuZ2VVbmRl
cmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6cmFuZ2VPdmVyZmxvdyk6
CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpzdGVwTWlzbWF0Y2gpOgorICAgICAg
ICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlZhbGlk
aXR5U3RhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpWYWxp
ZGl0eVN0YXRlKToKKyAgICAgICAgKiBsb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpjcmVhdGUpOgorCiAyMDEwLTEyLTA2
ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9uIDczMzUyKQorKysgV2Vi
Q29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNiArMjc3LDcgQEAgTE9DQUxf
U1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJaHRtbC9EYXRlVGltZUxvY2FsSW5w
dXRUeXBlLmNwcCBcCiAJaHRtbC9FbWFpbElucHV0VHlwZS5jcHAgXAogCWh0bWwvRmlsZUlucHV0
VHlwZS5jcHAgXAorCWh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBcCiAJaHRtbC9Gb3Jt
RGF0YUxpc3QuY3BwIFwKIAlodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCBcCiAJaHRtbC9IVE1M
Q29sbGVjdGlvbi5jcHAgXApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA3MzM1MikKKysrIFdlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk5MSw2ICs5OTEsNyBAQCBTRVQoV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgaHRtbC9FbWFpbElucHV0VHlwZS5jcHAKICAgICBodG1sL0ZUUERp
cmVjdG9yeURvY3VtZW50LmNwcAogICAgIGh0bWwvRmlsZUlucHV0VHlwZS5jcHAKKyAgICBodG1s
L0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5jcHAKICAg
ICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAogICAgIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQu
Y3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
R05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDczMzUyKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQkod29ya2luZyBjb3B5KQpAQCAtMTU4NSw2ICsxNTg1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlXZWJDb3JlL2h0bWwvRW1haWxJbnB1dFR5cGUuaCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVJ
bnB1dFR5cGUuY3BwIFwKIAlXZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oIFwKKwlXZWJDb3Jl
L2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBcCisJV2ViQ29yZS9odG1sL0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5oIFwKIAlXZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcCBcCiAJV2Vi
Q29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIFwKIAlXZWJDb3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9j
dW1lbnQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzMzNTIpCisrKyBXZWJDb3JlL1dlYkNv
cmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsNiArMjk1LDcgQEAgX19aTjdXZWJDb3Jl
MTNLZXlib2FyZEV2ZW50QzFFUktOM1dURjEyQQogX19aTjdXZWJDb3JlMTNUeXBpbmdDb21tYW5k
MzlpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRFUE5TXzhEb2N1bWVudEUK
IF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9N
R2xvYmFsT2JqZWN0RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTEzdG9EZXZpY2VTcGFjZUVSS05T
XzlGbG9hdFJlY3RFUDhOU1dpbmRvdworX19aTjdXZWJDb3JlMTN0b0hUTUxFbGVtZW50RVBOU18y
MUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9fWk43V2ViQ29yZTEzdG9KU0RPTVdpbmRvd0VOM0pT
QzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTEycmVtb3ZlQ2xpZW50RVBO
U18yMENhY2hlZFJlc291cmNlQ2xpZW50RQogX19aTjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTlh
ZGRDbGllbnRFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRFCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzMz
NTIpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTY0Miw2ICsx
NjQyLDggQEAKICAgICAgICAgICAgICdodG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmgnLAogICAg
ICAgICAgICAgJ2h0bWwvRmlsZUlucHV0VHlwZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRmls
ZUlucHV0VHlwZS5oJywKKyAgICAgICAgICAgICdodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5j
cHAnLAorICAgICAgICAgICAgJ2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgnLAogICAgICAg
ICAgICAgJ2h0bWwvRm9ybURhdGFMaXN0LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9Gb3JtRGF0
YUxpc3QuaCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAnLApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJv
CShyZXZpc2lvbiA3MzM1MikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTg4Miw2ICs4ODIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBodG1sL0VtYWlsSW5wdXRUeXBl
LmNwcCBcCiAgICAgaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAgXAogICAgIGh0bWwvRmls
ZUlucHV0VHlwZS5jcHAgXAorICAgIGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCBcCiAg
ICAgaHRtbC9Gb3JtRGF0YUxpc3QuY3BwIFwKICAgICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNw
cCBcCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAgXApAQCAtMTc5NSw2ICsxNzk2LDcg
QEAgSEVBREVSUyArPSBcCiAgICAgaHRtbC9ET01Gb3JtRGF0YS5oIFwKICAgICBodG1sL0RPTVNl
dHRhYmxlVG9rZW5MaXN0LmggXAogICAgIGh0bWwvRE9NVG9rZW5MaXN0LmggXAorICAgIGh0bWwv
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmggXAogICAgIGh0bWwvRm9ybURhdGFMaXN0LmggXAogICAg
IGh0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCBcCiAgICAgaHRtbC9IVE1MQWxsQ29sbGVjdGlv
bi5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NzMzNTIpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC01MDM2Niw2ICs1MDM2NiwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxc
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcRm9ybURhdGFMaXN0LmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gNzMzNTIpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTE2MCw2ICsxMTYwLDggQEAKIAkJNDlGRkJGMUQxMUM4NTUw
RTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGRkJGMUMxMUM4NTUwRTAwNkE3MTE4IC8qIEdy
YXBoaWNzQ29udGV4dDNETWFjLm1tICovOyB9OwogCQk0OUZGQkYzRjExQzkzRUUzMDA2QTcxMTgg
LyogV2ViR0xMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlGRkJGM0QxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCAqLzsgfTsKIAkJ
NDlGRkJGNDAxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTgg
LyogV2ViR0xMYXllci5tbSAqLzsgfTsKKwkJNEEwREEyRkUxMjlCMjQxOTAwQUI2MUUxIC8qIEZv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0QTBEQTJGQzEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmNwcCAqLzsgfTsKKwkJNEEwREEyRkYxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEEwREEyRkQxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTRBOEM5
NkVCMEJFNjkwMzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE4Qzk2RUEwQkU2OTAzMjAw
NEVFRkYwIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0gKi87IH07CiAJCTRBQ0JDMEJFMTI3
MTNDQkQwMDk0RjlCMiAvKiBDbGFzc0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEFDQkMwQkMxMjcxM0NCRDAwOTRGOUIyIC8qIENsYXNzTGlz
dC5jcHAgKi87IH07CiAJCTRBQ0JDMEJGMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFzc0xpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBQ0JDMEJEMTI3
MTNDQkQwMDk0RjlCMiAvKiBDbGFzc0xpc3QuaCAqLzsgfTsKQEAgLTczMTEsNiArNzMxMyw4IEBA
CiAJCTQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNE
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZGQkYzRDExQzkzRUUzMDA2
QTcxMTggLyogV2ViR0xMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJHTExheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RkZCRjNFMTFDOTNF
RTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViR0xMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEEwREEyRkMxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QTBEQTJGRDEyOUIyNDE5MDBBQjYx
RTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0QThDOTZFQTBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTZWxlY3Rpb25Db250
cm9sbGVyTWFjLm1tOyBwYXRoID0gbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBQ0JDMEJDMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFz
c0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xhc3NMaXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEFDQkMwQkQxMjcxM0NCRDAwOTRG
OUIyIC8qIENsYXNzTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGFz
c0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0ODE0LDYgKzE0ODE4LDgg
QEAKIAkJCQlGNTVCM0Q4ODEyNTFGMTJEMDAzRUYyNjkgLyogRW1haWxJbnB1dFR5cGUuaCAqLywK
IAkJCQlGNTVCM0Q4OTEyNTFGMTJEMDAzRUYyNjkgLyogRmlsZUlucHV0VHlwZS5jcHAgKi8sCiAJ
CQkJRjU1QjNEOEExMjUxRjEyRDAwM0VGMjY5IC8qIEZpbGVJbnB1dFR5cGUuaCAqLywKKwkJCQk0
QTBEQTJGQzEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcCAqLywK
KwkJCQk0QTBEQTJGRDEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50Lmgg
Ki8sCiAJCQkJQTgxMzZEMzcwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5jcHAgKi8s
CiAJCQkJQTgxMzZEMzYwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5oICovLAogCQkJ
CTk3MjA1QUFEMTIzOTI4Q0EwMEIxNzM4MCAvKiBGVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAgKi8s
CkBAIC0xOTc2OCw2ICsxOTc3NCw3IEBACiAJCQkJMzc4NEMzNEIwRTExQUEzNDAwN0Q4RDQ4IC8q
IEZvbnRUcmFpdHNNYXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNzM0QjE4MzExOUI5OTFEMDA2
NTg3QkQgLyogRm9udFRyYW5zY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0VEMEEx
OTg5Q0EwMDdGQjhDNSAvKiBGb250VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTRBMERBMkZG
MTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUQwNUNFRDJBMEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNEM3NjcwMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1QjkyQkIwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRh
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjQzMCw2ICsyMjQzNyw3IEBACiAJCQkJQjUz
MjBENkMxMjJBMjRFOTAwMkQxNDQwIC8qIEZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUI3MzRCMTgxMTE5Qjk5MTEwMDY1ODdCRCAvKiBGb250VHJhbnNjb2Rlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBFNkNGMTBBMTk4OUNBMDA3RkI4QzUgLyogRm9udFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRBMERBMkZFMTI5QjI0MTkwMEFCNjFFMSAvKiBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDA1Q0VEMjkwQTQw
QkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MTRDNzY2RjBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDg1QjkyQkEwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgJKHJldmlzaW9uIDcz
MzUyKQorKysgV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw4ICsyNyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTElu
cHV0RWxlbWVudDsKIGNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ7CitjbGFzcyBIVE1MSW5w
dXRFbGVtZW50OwogCiBjbGFzcyBDaGVja2VkUmFkaW9CdXR0b25zIHsKIHB1YmxpYzoKSW5kZXg6
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDczMzUyKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
QEAgLTQzODgsMjMgKzQzODksMjMgQEAgdm9pZCBEb2N1bWVudDo6c2V0SWNvblVSTChjb25zdCBT
dHJpbmcmIAogICAgICAgICBmLT5sb2FkZXIoKS0+c2V0SWNvblVSTChtX2ljb25VUkwpOwogfQog
Ci12b2lkIERvY3VtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxl
bWVudCogY29udHJvbCkKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9y
bUF0dHJpYnV0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJU
KGNvbnRyb2wtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICBtX2Zvcm1FbGVtZW50
c1dpdGhGb3JtQXR0cmlidXRlLmFkZChjb250cm9sKTsKKyAgICBBU1NFUlQodG9IVE1MRWxlbWVu
dChlbGVtZW50KS0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpOworICAgIG1fZm9ybUVsZW1l
bnRzV2l0aEZvcm1BdHRyaWJ1dGUuYWRkKGVsZW1lbnQpOwogfQogCi12b2lkIERvY3VtZW50Ojp1
bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZShFbGVtZW50KiBjb250cm9sKQor
dm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRm9y
bUFzc29jaWF0ZWRFbGVtZW50KiBlbGVtZW50KQogewotICAgIG1fZm9ybUVsZW1lbnRzV2l0aEZv
cm1BdHRyaWJ1dGUucmVtb3ZlKGNvbnRyb2wpOworICAgIG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1B
dHRyaWJ1dGUucmVtb3ZlKGVsZW1lbnQpOwogfQogCiB2b2lkIERvY3VtZW50OjpyZXNldEZvcm1F
bGVtZW50c093bmVyKEhUTUxGb3JtRWxlbWVudCogZm9ybSkKIHsKLSAgICB0eXBlZGVmIEZvcm1F
bGVtZW50TGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOworICAgIHR5cGVkZWYgRm9ybUFz
c29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIEl0ZXJh
dG9yIGVuZCA9IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUuZW5kKCk7CiAgICAgZm9y
IChJdGVyYXRvciBpdCA9IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGUuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Kj4oKml0KS0+cmVzZXRGb3JtT3duZXIoZm9ybSk7CisgICAgICAgICgqaXQpLT5yZXNldEZv
cm1Pd25lcihmb3JtKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0VXNlU2VjdXJlS2V5Ym9hcmRF
bnRyeVdoZW5BY3RpdmUoYm9vbCB1c2VzU2VjdXJlS2V5Ym9hcmQpCkluZGV4OiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlz
aW9uIDczMzUyKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NzYsNiArNzYsNyBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRW50aXR5UmVmZXJlbmNlOwogY2xh
c3MgRXZlbnQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOworY2xhc3MgRm9ybUFzc29jaWF0ZWRFbGVt
ZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBIVE1MQ2FudmFzRWxl
bWVudDsKQEAgLTQ5MCw4ICs0OTEsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTdGF0ZUZvck5l
d0Zvcm1FbGVtZW50cygpIGNvbnN0OwogICAgIGJvb2wgdGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQo
QXRvbWljU3RyaW5nSW1wbCogbmFtZSwgQXRvbWljU3RyaW5nSW1wbCogdHlwZSwgU3RyaW5nJiBz
dGF0ZSk7CiAKLSAgICB2b2lkIHJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZShF
bGVtZW50Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0
ZShFbGVtZW50Kik7CisgICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1
dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRm9ybUVsZW1l
bnRXaXRoRm9ybUF0dHJpYnV0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsKICAgICB2b2lkIHJl
c2V0Rm9ybUVsZW1lbnRzT3duZXIoSFRNTEZvcm1FbGVtZW50Kik7CiAKICAgICBGcmFtZVZpZXcq
IHZpZXcoKSBjb25zdDsgLy8gY2FuIGJlIE5VTEwKQEAgLTEyMTEsNyArMTIxMiw4IEBAIHByaXZh
dGU6CiAKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEVsZW1lbnQqLCA2ND4gRm9ybUVsZW1lbnRM
aXN0SGFzaFNldDsKICAgICBGb3JtRWxlbWVudExpc3RIYXNoU2V0IG1fZm9ybUVsZW1lbnRzV2l0
aFN0YXRlOwotICAgIEZvcm1FbGVtZW50TGlzdEhhc2hTZXQgbV9mb3JtRWxlbWVudHNXaXRoRm9y
bUF0dHJpYnV0ZTsKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCosIDMyPiBGb3JtQXNzb2NpYXRlZEVsZW1lbnRMaXN0SGFzaFNldDsKKyAgICBGb3JtQXNzb2Np
YXRlZEVsZW1lbnRMaXN0SGFzaFNldCBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlOwog
CiAgICAgdHlwZWRlZiBIYXNoTWFwPEZvcm1FbGVtZW50S2V5LCBWZWN0b3I8U3RyaW5nPiwgRm9y
bUVsZW1lbnRLZXlIYXNoLCBGb3JtRWxlbWVudEtleUhhc2hUcmFpdHM+IEZvcm1FbGVtZW50U3Rh
dGVNYXA7CiAgICAgRm9ybUVsZW1lbnRTdGF0ZU1hcCBtX3N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRz
OwpJbmRleDogV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvRE9NRm9ybURhdGEuY3BwCShyZXZpc2lvbiA3MzM1MikKKysrIFdlYkNvcmUvaHRt
bC9ET01Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDkgQEAgRE9NRm9y
bURhdGE6OkRPTUZvcm1EYXRhKEhUTUxGb3JtRWxlbWVudAogICAgICAgICByZXR1cm47CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGZv
cm0tPmFzc29jaWF0ZWRFbGVtZW50cygpW2ldOwotICAgICAgICBpZiAoIWNvbnRyb2wtPmRpc2Fi
bGVkKCkpCi0gICAgICAgICAgICBjb250cm9sLT5hcHBlbmRGb3JtRGF0YSgqdGhpcywgdHJ1ZSk7
CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZWxlbWVudCA9IGZvcm0tPmFzc29jaWF0
ZWRFbGVtZW50cygpW2ldOworICAgICAgICBpZiAoIXRvSFRNTEVsZW1lbnQoZWxlbWVudCktPmRp
c2FibGVkKCkpCisgICAgICAgICAgICBlbGVtZW50LT5hcHBlbmRGb3JtRGF0YSgqdGhpcywgdHJ1
ZSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNw
cAkocmV2aXNpb24gNzMwMDcpCShmcm9tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDo3MzAwNykKKysrIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAg
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCisKKyNpbmNs
dWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgorI2luY2x1ZGUg
IkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50UmFyZURh
dGEuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJMYWJlbHNOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5o
IgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgIlZhbGlkYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiVmFsaWRpdHlT
dGF0ZS5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKK3VzaW5nIG5h
bWVzcGFjZSBzdGQ7CisKK0hUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBI
VE1MRm9ybUVsZW1lbnQqIGZvcm0pCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCkKKyAgICAsIG1fZm9ybShmb3JtKQorICAgICwgbV9kaXNhYmxlZChmYWxzZSkKKyAgICAsIG1f
cmVhZE9ubHkoZmFsc2UpCisgICAgLCBtX3JlcXVpcmVkKGZhbHNlKQorICAgICwgbV92YWx1ZU1h
dGNoZXNSZW5kZXJlcihmYWxzZSkKKyAgICAsIG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQoZmFs
c2UpCisgICAgLCBtX3dpbGxWYWxpZGF0ZSh0cnVlKQorICAgICwgbV9pc1ZhbGlkKHRydWUpCit7
CisgICAgaWYgKCFtX2Zvcm0pCisgICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsK
KyAgICBpZiAobV9mb3JtKQorICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhp
cyk7Cit9CisKK0hUTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50
KCkKK3sKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50
KHRoaXMpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRldGFjaCgpCit7Cisg
ICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgIEhUTUxFbGVtZW50OjpkZXRh
Y2goKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtTm9WYWxpZGF0ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoZm9ybW5vdmFsaWRhdGVBdHRyKS5p
c051bGwoKTsKK30KKworVmFsaWRpdHlTdGF0ZSogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFs
aWRpdHkoKQoreworICAgIGlmICghbV92YWxpZGl0eVN0YXRlKQorICAgICAgICBtX3ZhbGlkaXR5
U3RhdGUgPSBWYWxpZGl0eVN0YXRlOjpjcmVhdGUodGhpcyk7CisKKyAgICByZXR1cm4gbV92YWxp
ZGl0eVN0YXRlLmdldCgpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IGRpc2FibGVkQXR0cikgeworICAgICAgICBib29sIG9sZERpc2FibGVkID0gbV9kaXNhYmxl
ZDsKKyAgICAgICAgbV9kaXNhYmxlZCA9ICFhdHRyLT5pc051bGwoKTsKKyAgICAgICAgaWYgKG9s
ZERpc2FibGVkICE9IG1fZGlzYWJsZWQpIHsKKyAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCkt
Pmhhc0FwcGVhcmFuY2UoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5z
dGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgRW5hYmxlZFN0YXRlKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHJlYWRvbmx5QXR0cikgeworICAgICAgICBib29sIG9s
ZFJlYWRPbmx5ID0gbV9yZWFkT25seTsKKyAgICAgICAgbV9yZWFkT25seSA9ICFhdHRyLT5pc051
bGwoKTsKKyAgICAgICAgaWYgKG9sZFJlYWRPbmx5ICE9IG1fcmVhZE9ubHkpIHsKKyAgICAgICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYm
IHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKKyAgICAgICAgICAgICAgICBy
ZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgUmVhZE9ubHlTdGF0
ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSByZXF1aXJlZEF0
dHIpIHsKKyAgICAgICAgYm9vbCBvbGRSZXF1aXJlZCA9IG1fcmVxdWlyZWQ7CisgICAgICAgIG1f
cmVxdWlyZWQgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAgICAgIGlmIChvbGRSZXF1aXJlZCAhPSBt
X3JlcXVpcmVkKSB7CisgICAgICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKKyAgICAg
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsgLy8gVXBkYXRlcyBmb3IgOnJlcXVpcmVkIDpv
cHRpb25hbCBjbGFzc2VzLgorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIEhUTUxFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICBzZXROZWVkc1dpbGxWYWxpZGF0
ZUNoZWNrKCk7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKK3sK
KyAgICBBU1NFUlQoIWF0dGFjaGVkKCkpOworCisgICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwor
CisgICAgLy8gVGhlIGNhbGwgdG8gdXBkYXRlRnJvbUVsZW1lbnQoKSBuZWVkcyB0byBnbyBhZnRl
ciB0aGUgY2FsbCB0aHJvdWdoCisgICAgLy8gdG8gdGhlIGJhc2UgY2xhc3MncyBhdHRhY2goKSBi
ZWNhdXNlIHRoYXQgY2FuIHNvbWV0aW1lcyBkbyBhIGNsb3NlCisgICAgLy8gb24gdGhlIHJlbmRl
cmVyLgorICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9t
RWxlbWVudCgpOworICAgICAgICAKKyAgICAvLyBGb2N1cyB0aGUgZWxlbWVudCBpZiBpdCBzaG91
bGQgaG9ub3VyIGl0cyBhdXRvZm9jdXMgYXR0cmlidXRlLgorICAgIC8vIFdlIGhhdmUgdG8gZGV0
ZXJtaW5lIGlmIHRoZSBlbGVtZW50IGlzIGEgVGV4dEFyZWEvSW5wdXQvQnV0dG9uL1NlbGVjdCwK
KyAgICAvLyBpZiBpbnB1dCB0eXBlIGhpZGRlbiBpZ25vcmUgYXV0b2ZvY3VzLiBTbyBpZiBkaXNh
YmxlZCBvciByZWFkb25seS4KKyAgICBib29sIGlzSW5wdXRUeXBlSGlkZGVuID0gZmFsc2U7Cisg
ICAgaWYgKGhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICBpc0lucHV0VHlwZUhpZGRlbiA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPih0aGlzKS0+aXNJbnB1dFR5cGVIaWRkZW4o
KTsKKworICAgIGlmIChhdXRvZm9jdXMoKSAmJiByZW5kZXJlcigpICYmICFkb2N1bWVudCgpLT5p
Z25vcmVBdXRvZm9jdXMoKSAmJiAhaXNSZWFkT25seUZvcm1Db250cm9sKCkgJiYKKyAgICAgICAg
ICAgICgoaGFzVGFnTmFtZShpbnB1dFRhZykgJiYgIWlzSW5wdXRUeXBlSGlkZGVuKSB8fCBoYXNU
YWdOYW1lKHNlbGVjdFRhZykgfHwKKyAgICAgICAgICAgICAgaGFzVGFnTmFtZShidXR0b25UYWcp
IHx8IGhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKSkKKyAgICAgICAgIGZvY3VzKCk7Cit9CisKK3Zv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCit7
CisgICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgICAgIGRvY3VtZW50
KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKKyAgICAgICAg
RWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRy
aWJ1dGUoZm9ybUF0dHIpKTsKKyAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFn
TmFtZShmb3JtVGFnKSkgeworICAgICAgICAgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgICAgICAg
ICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICAgICAgbV9mb3JtID0g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBtX2Zv
cm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KCFtX2Zvcm0pIHsKKyAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIGEgbmV3IGZv
cm0gZWxlbWVudCBiZWluZyBjcmVhdGVkIGJ5CisgICAgICAgIC8vIEphdmFTY3JpcHQgYW5kIGlu
c2VydGVkIGluc2lkZSBhIGZvcm0uICBJbiB0aGUgY2FzZSBvZiB0aGUgcGFyc2VyCisgICAgICAg
IC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3aWxsIGFscmVhZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVl
IGZvciBtX2Zvcm0sIAorICAgICAgICAvLyBhbmQgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0
aGluZy4KKyAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOworICAgICAgICBpZiAo
bV9mb3JtKQorICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25z
KCkuYWRkQnV0dG9uKHRoaXMpOworICAgIH0KKworICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZElu
dG9UcmVlKGRlZXApOworfQorCitzdGF0aWMgaW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4p
Cit7CisgICAgTm9kZSogcm9vdCA9IG47CisgICAgZm9yICg7IG47IG4gPSBuLT5wYXJlbnROb2Rl
KCkpCisgICAgICAgIHJvb3QgPSBuOworICAgIHJldHVybiByb290OworfQorCit2b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApCit7CisgICAgaWYg
KGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKQorICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lz
dGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKKworICAgIC8vIElmIHRoZSBm
b3JtIGFuZCBlbGVtZW50IGFyZSBib3RoIGluIHRoZSBzYW1lIHRyZWUsIHByZXNlcnZlIHRoZSBj
b25uZWN0aW9uIHRvIHRoZSBmb3JtLgorICAgIC8vIE90aGVyd2lzZSwgbnVsbCBvdXQgb3VyIGZv
cm0gYW5kIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZm9ybSdzIGxpc3Qgb2YgZWxlbWVudHMu
CisgICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9vdCh0aGlzKSAhPSBmaW5kUm9vdChtX2Zvcm0pKSB7
CisgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgIG1fZm9y
bSA9IDA7CisgICAgfQorCisgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShkZWVwKTsK
K30KKworY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtQ29u
dHJvbE5hbWUoKSBjb25zdAoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGZhc3RH
ZXRBdHRyaWJ1dGUobmFtZUF0dHIpOworICAgIHJldHVybiBuYW1lLmlzTnVsbCgpID8gZW1wdHlB
dG9tIDogbmFtZTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCit7CisgICAgc2V0QXR0cmlidXRlKG5hbWVBdHRyLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb3JtQ29u
dHJvbENoYW5nZUV2ZW50KCkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSkpOworfQorCit2b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnNldERpc2FibGVkKGJvb2wgYikKK3sKKyAgICBzZXRBdHRyaWJ1dGUo
ZGlzYWJsZWRBdHRyLCBiID8gIiIgOiAwKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjphdXRvZm9jdXMoKSBjb25zdAoreworICAgIHJldHVybiBoYXNBdHRyaWJ1dGUoYXV0b2Zv
Y3VzQXR0cik7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVxdWlyZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtX3JlcXVpcmVkOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVG
cm9tRWxlbWVudENhbGxiYWNrKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUX0FSRyhub2RlLCBu
b2RlLT5pc0VsZW1lbnROb2RlKCkpOworICAgIEFTU0VSVF9BUkcobm9kZSwgc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKTsKKyAgICBBU1NFUlQobm9k
ZS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpKQorICAgICAgICByZW5kZXJlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKK30KKwor
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFu
Z2UpCit7CisgICAgSFRNTEVsZW1lbnQ6OnJlY2FsY1N0eWxlKGNoYW5nZSk7CisKKyAgICAvLyB1
cGRhdGVGcm9tRWxlbWVudCgpIGNhbiBjYXVzZSB0aGUgc2VsZWN0aW9uIHRvIGNoYW5nZSwgYW5k
IGluIHR1cm4KKyAgICAvLyB0cmlnZ2VyIHN5bmNocm9ub3VzIGxheW91dCwgc28gaXQgbXVzdCBu
b3QgYmUgY2FsbGVkIGR1cmluZyBzdHlsZSByZWNhbGMuCisgICAgaWYgKHJlbmRlcmVyKCkpCisg
ICAgICAgIHF1ZXVlUG9zdEF0dGFjaENhbGxiYWNrKHVwZGF0ZUZyb21FbGVtZW50Q2FsbGJhY2ss
IHRoaXMpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMo
KSBjb25zdAoreworICAgIHJldHVybiAhZGlzYWJsZWQoKTsKK30KKworYm9vbCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFyZW5kZXJlcigp
IHx8IAorICAgICAgICAhcmVuZGVyZXIoKS0+aXNCb3goKSB8fCB0b1JlbmRlckJveChyZW5kZXJl
cigpKS0+c2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEhU
TUxFbGVtZW50Ojppc0ZvY3VzYWJsZSBoYW5kbGVzIHZpc2liaWxpdHkgYW5kIGNhbGxzIHN1cG9y
dHNGb2N1cyB3aGljaAorICAgIC8vIHdpbGwgY292ZXIgdGhlIGRpc2FibGVkIGNhc2UuCisgICAg
cmV0dXJuIEhUTUxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpOworfQorCitib29sIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNv
bnN0Cit7CisgICAgaWYgKGlzRm9jdXNhYmxlKCkpCisgICAgICAgIGlmIChkb2N1bWVudCgpLT5m
cmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFu
ZGxlcigpLT50YWJzVG9BbGxDb250cm9scyhldmVudCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAor
eworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCisgICAgcmV0dXJuIEhUTUxFbGVt
ZW50Ojppc01vdXNlRm9jdXNhYmxlKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCitzaG9ydCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0Cit7
CisgICAgLy8gU2tpcCB0aGUgc3VwcG9ydHNGb2N1cyBjaGVjayBpbiBIVE1MRWxlbWVudC4KKyAg
ICByZXR1cm4gRWxlbWVudDo6dGFiSW5kZXgoKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpyZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBTaG91
bGQgcmV0dXJuIGZhbHNlIGlmIHRoaXMgZWxlbWVudCBoYXMgYSBkYXRhbGlzdCBlbGVtZW50IGFz
IGFuCisgICAgLy8gYW5jZXN0b3IuIFNlZSBIVE1MNSA0LjEwLjEwICdUaGUgZGF0YWxpc3QgZWxl
bWVudC4nCisgICAgcmV0dXJuICFtX2Rpc2FibGVkICYmICFtX3JlYWRPbmx5OworfQorCitib29s
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0ZSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkKSB7CisgICAgICAgIG1fd2lsbFZhbGlkYXRlSW5p
dGlhbGl6ZWQgPSB0cnVlOworICAgICAgICBtX3dpbGxWYWxpZGF0ZSA9IHJlY2FsY1dpbGxWYWxp
ZGF0ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0
aW9uIGZhaWxzLCBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCkgaXMgbm90CisgICAgICAgIC8v
IGNhbGxlZCBjb3JyZWN0bHkgd2hlbiBzb21ldGhpbmcgd2hpY2ggY2hhbmdlcyByZWNhbGNXaWxs
VmFsaWRhdGUoKSByZXN1bHQKKyAgICAgICAgLy8gaXMgdXBkYXRlZC4KKyAgICAgICAgQVNTRVJU
KG1fd2lsbFZhbGlkYXRlID09IHJlY2FsY1dpbGxWYWxpZGF0ZSgpKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fd2lsbFZhbGlkYXRlOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNl
dE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKQoreworICAgIC8vIFdlIG5lZWQgdG8gcmVjYWxjdWxh
dGUgd2lsbFZhbGlkdGUgaW1tZWRpYXRlbHkgYmVjYXVzZSB3aWxsVmFsaWRhdGUKKyAgICAvLyBj
aGFuZ2UgY2FuIGNhdXNlcyBzdHlsZSBjaGFuZ2UuCisgICAgYm9vbCBuZXdXaWxsVmFsaWRhdGUg
PSByZWNhbGNXaWxsVmFsaWRhdGUoKTsKKyAgICBpZiAobV93aWxsVmFsaWRhdGVJbml0aWFsaXpl
ZCAmJiBtX3dpbGxWYWxpZGF0ZSA9PSBuZXdXaWxsVmFsaWRhdGUpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBtX3dpbGxWYWxpZGF0
ZSA9IG5ld1dpbGxWYWxpZGF0ZTsKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgaWYg
KCFtX3dpbGxWYWxpZGF0ZSkKKyAgICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgp
OworfQorCitTdHJpbmcgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRhdGlvbk1lc3NhZ2Uo
KQoreworICAgIHJldHVybiB2YWxpZGl0eSgpLT52YWxpZGF0aW9uTWVzc2FnZSgpOworfQorCit2
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2Fn
ZSgpCit7CisgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKKyAgICBpZiAoIXBh
Z2UpCisgICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpZiAocmVuZGVy
ZXIoKSAmJiB3aWxsVmFsaWRhdGUoKSkgeworICAgICAgICBtZXNzYWdlID0gdmFsaWRhdGlvbk1l
c3NhZ2UoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgLy8gSFRNTDUgc3BlY2lmaWNhdGlv
biBkb2Vzbid0IGFzayBVQSB0byBzaG93IHRoZSB0aXRsZSBhdHRyaWJ1dGUgdmFsdWUKKyAgICAg
ICAgLy8gd2l0aCB0aGUgdmFsaWRhdGlvbk1lc3NhZ2UuICBIb3dldmVyLCB0aGlzIGJlaGF2aW9y
IGlzIHNhbWUgYXMgT3BlcmEKKyAgICAgICAgLy8gYW5kIHRoZSBzcGVjaWZpY2F0aW9uIGRlc2Ny
aWJlcyBzdWNoIGJlaGF2aW9yIGFzIGFuIGV4YW1wbGUuCisgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdGl0bGUgPSBnZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICAgICAgaWYgKCFtZXNz
YWdlLmlzRW1wdHkoKSAmJiAhdGl0bGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtZXNzYWdl
LmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKHRpdGxlKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAoIW1fdmFsaWRhdGlvbk1lc3NhZ2UpIHsKKyAgICAgICAgbV92
YWxpZGF0aW9uTWVzc2FnZSA9IFZhbGlkYXRpb25NZXNzYWdlOjpjcmVhdGUodGhpcyk7CisgICAg
ICAgIG1fdmFsaWRhdGlvbk1lc3NhZ2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7CisgICAgfSBlbHNl
IGlmIChtZXNzYWdlLmlzRW1wdHkoKSkKKyAgICAgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVz
c2FnZSgpOworICAgIGVsc2UgaWYgKG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSAhPSBt
ZXNzYWdlKQorICAgICAgICBtX3ZhbGlkYXRpb25NZXNzYWdlLT5zZXRNZXNzYWdlKG1lc3NhZ2Up
OworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmhpZGVWaXNpYmxlVmFsaWRhdGlv
bk1lc3NhZ2UoKQoreworICAgIG1fdmFsaWRhdGlvbk1lc3NhZ2UgPSAwOworfQorCitTdHJpbmcg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV92YWxpZGF0aW9uTWVzc2FnZSA/IG1fdmFsaWRhdGlvbk1lc3NhZ2Ut
Pm1lc3NhZ2UoKSA6IFN0cmluZygpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1
bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCit7CisgICAgaWYgKCF3aWxsVmFsaWRhdGUoKSB8fCBp
c1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8v
IEFuIGV2ZW50IGhhbmRsZXIgY2FuIGRlcmVmIHRoaXMgb2JqZWN0LgorICAgIFJlZlB0cjxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmUHRyPERvY3VtZW50
PiBvcmlnaW5hbERvY3VtZW50KGRvY3VtZW50KCkpOworICAgIGJvb2wgbmVlZHNEZWZhdWx0QWN0
aW9uID0gZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlkRXZl
bnQsIGZhbHNlLCB0cnVlKSk7CisgICAgaWYgKG5lZWRzRGVmYXVsdEFjdGlvbiAmJiB1bmhhbmRs
ZWRJbnZhbGlkQ29udHJvbHMgJiYgaW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0g
ZG9jdW1lbnQoKSkKKyAgICAgICAgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLT5hcHBlbmQodGhp
cyk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKQoreworICAgIC8vIElmIHRoZSBmb2xsb3dpbmcg
YXNzZXJ0aW9uIGZhaWxzLCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKSBpcyBub3QgY2FsbGVkCisg
ICAgLy8gY29ycmVjdGx5IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMgdmFsaWRpdHkgaXMg
dXBkYXRlZC4KKyAgICBBU1NFUlQobV9pc1ZhbGlkID09IHZhbGlkaXR5KCktPnZhbGlkKCkpOwor
ICAgIHJldHVybiBtX2lzVmFsaWQ7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCkKK3sKKyAgICBib29sIG5ld0lzVmFsaWQgPSB2YWxpZGl0
eSgpLT52YWxpZCgpOworICAgIGlmICh3aWxsVmFsaWRhdGUoKSAmJiBuZXdJc1ZhbGlkICE9IG1f
aXNWYWxpZCkgeworICAgICAgICAvLyBVcGRhdGUgc3R5bGUgZm9yIHBzZXVkbyBjbGFzc2VzIHN1
Y2ggYXMgOnZhbGlkIDppbnZhbGlkLgorICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cisg
ICAgfQorICAgIG1faXNWYWxpZCA9IG5ld0lzVmFsaWQ7CisKKyAgICAvLyBVcGRhdGVzIG9ubHkg
aWYgdGhpcyBjb250cm9sIGFscmVhZHkgaGFzIGEgdmFsaWR0aW9uIG1lc3NhZ2UuCisgICAgaWYg
KCF2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gQ2Fs
bHMgdXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgZXZlbiBpZiBtX2lzVmFsaWQgaXMg
bm90CisgICAgICAgIC8vIGNoYW5nZWQgYmVjYXVzZSBhIHZhbGlkYXRpb24gbWVzc2FnZSBjYW4g
YmUgY2hhZ25lZC4KKyAgICAgICAgdXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Cisg
ICAgfQorfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEN1c3RvbVZhbGlkaXR5
KGNvbnN0IFN0cmluZyYgZXJyb3IpCit7CisgICAgdmFsaWRpdHkoKS0+c2V0Q3VzdG9tRXJyb3JN
ZXNzYWdlKGVycm9yKTsKK30KKyAgICAKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlz
cGF0Y2hGb2N1c0V2ZW50KCkKK3sKKyAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAg
ICBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+Zm9ybURpZEZvY3VzKHRo
aXMpOworCisgICAgSFRNTEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCgpOworfQorCit2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKK3sKKyAgICBpZiAo
ZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgp
LT5jbGllbnQoKS0+Zm9ybURpZEJsdXIodGhpcyk7CisKKyAgICBIVE1MRWxlbWVudDo6ZGlzcGF0
Y2hCbHVyRXZlbnQoKTsKKyAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Cit9CisK
K0hUTUxGb3JtRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlydHVhbEZvcm0oKSBj
b25zdAoreworICAgIHJldHVybiBtX2Zvcm07Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzU3Vj
Y2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpICYmIG1fZm9ybSAmJiBtX2Zvcm0tPmRlZmF1bHRCdXR0b24o
KSA9PSB0aGlzOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZUZyb21G
b3JtKCkKK3sKKyAgICBpZiAoIW1fZm9ybSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZm9ybS0+
cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAgbV9mb3JtID0gMDsKK30KKwordm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpyZXNldEZvcm1Pd25lcihIVE1MRm9ybUVsZW1lbnQqIGZvcm0p
Cit7CisgICAgaWYgKG1fZm9ybSkgeworICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9y
bUF0dHIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1F
bGVtZW50KHRoaXMpOworICAgIH0KKyAgICBtX2Zvcm0gPSAwOworICAgIGlmIChmYXN0SGFzQXR0
cmlidXRlKGZvcm1BdHRyKSkgeworICAgICAgICAvLyBUaGUgSFRNTDUgc3BlYyBzYXlzIHRoYXQg
dGhlIGVsZW1lbnQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAvLyB0aGUgZmly
c3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQgdG8gaGF2ZSBhbiBJRCB0aGF0IGVxdWFsIHRvCisg
ICAgICAgIC8vIHRoZSB2YWx1ZSBvZiBmb3JtIGF0dHJpYnV0ZSwgc28gd2UgcHV0IHRoZSByZXN1
bHQgb2YKKyAgICAgICAgLy8gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoKSBvdmVyIHRoZSBn
aXZlbiBlbGVtZW50LgorICAgICAgICBFbGVtZW50KiBmaXJzdEVsZW1lbnQgPSBkb2N1bWVudCgp
LT5nZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7CisgICAgICAgIGlm
IChmaXJzdEVsZW1lbnQgJiYgZmlyc3RFbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpKQorICAg
ICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZmlyc3RFbGVt
ZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9mb3JtID0gZm9ybTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOworICAgIGlmIChtX2Zvcm0p
CisgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICBlbHNlCisg
ICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7
Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRy
aWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IGZvcm1BdHRyKSB7CisgICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikp
IHsKKyAgICAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1vdmVkLiBXZSBuZWVkIHRv
IHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KKyAgICAgICAgICAgIGlmIChtX2Zvcm0pCisgICAgICAg
ICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1f
Zm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0pCisgICAg
ICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMo
KS5hZGRCdXR0b24odGhpcyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzZXRGb3Jt
T3duZXIoMCk7CisgICAgfQorICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIs
IHByZXNlcnZlRGVjbHMpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzTGFi
ZWxhYmxlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQWRkIG1ldGVyVGFnIGFuZCBvdXRwdXRU
YWcgdG8gdGhlIGxpc3Qgb25jZSB3ZSBzdXBwb3J0IHRoZW0uCisgICAgcmV0dXJuIGhhc1RhZ05h
bWUoYnV0dG9uVGFnKSB8fCBoYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBoYXNUYWdOYW1lKGtleWdl
blRhZykKKyNpZiBFTkFCTEUoTUVURVJfVEFHKQorICAgICAgICB8fCBoYXNUYWdOYW1lKG1ldGVy
VGFnKQorI2VuZGlmCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKKyAgICAgICAgfHwgaGFzVGFn
TmFtZShwcm9ncmVzc1RhZykKKyNlbmRpZgorICAgICAgICB8fCBoYXNUYWdOYW1lKHNlbGVjdFRh
ZykgfHwgaGFzVGFnTmFtZSh0ZXh0YXJlYVRhZyk7Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZUxpc3Q+
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmxhYmVscygpCit7CisgICAgaWYgKCFpc0xhYmVsYWJs
ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWRvY3VtZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IE5vZGU6OmVuc3VyZVJhcmVE
YXRhKCk7CisgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkgeworICAgICAgICBkYXRhLT5zZXRO
b2RlTGlzdHMoTm9kZUxpc3RzTm9kZURhdGE6OmNyZWF0ZSgpKTsKKyAgICAgICAgZG9jdW1lbnQo
KS0+YWRkTm9kZUxpc3RDYWNoZSgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gTGFiZWxzTm9k
ZUxpc3Q6OmNyZWF0ZSh0aGlzKTsKK30KKyAgICAKK0hUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQorICAgIDogSFRN
TEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2MsIGYpCit7CisgICAgZG9jdW1lbnQoKS0+
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKK30KKworSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZTo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoKQorewor
ICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKK30K
Kwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp3aWxsTW92ZVRvTmV3T3du
ZXJEb2N1bWVudCgpCit7CisgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0
aFN0YXRlKHRoaXMpOworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdP
d25lckRvY3VtZW50KCk7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZTo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpCit7CisgICAgZG9jdW1lbnQoKS0+cmVnaXN0
ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpkaWRNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZTo6YXV0b0NvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBpZiAoIWZvcm0o
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZvcm0oKS0+YXV0b0NvbXBsZXRl
KCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6c2hvdWxkU2F2
ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3QKK3sKKyAgICAvLyBXZSBkb24ndCBz
YXZlL3Jlc3RvcmUgY29udHJvbCBzdGF0ZSBpbiBhIGZvcm0gd2l0aCBhdXRvY29tcGxldGU9b2Zm
LgorICAgIHJldHVybiBhdHRhY2hlZCgpICYmIGF1dG9Db21wbGV0ZSgpOworfQorCit2b2lkIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCit7
CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisK
KyAgICAvLyBXZSBkb24ndCBzYXZlIHN0YXRlIG9mIGEgY29udHJvbCB3aXRoIHNob3VsZFNhdmVB
bmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpPWZhbHNlLgorICAgIC8vIEJ1dCB3ZSBuZWVkIHRv
IHNraXAgcmVzdG9yaW5nIHByb2Nlc3MgdG9vIGJlY2F1c2UgYSBjb250cm9sIGluIGFub3RoZXIK
KyAgICAvLyBmb3JtIG1pZ2h0IGhhdmUgdGhlIHNhbWUgcGFpciBvZiBuYW1lIGFuZCB0eXBlIGFu
ZCBzYXZlZCBpdHMgc3RhdGUuCisgICAgaWYgKCFzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250
cm9sU3RhdGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3Vt
ZW50KCk7CisgICAgaWYgKGRvYy0+aGFzU3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoKSkgeworICAg
ICAgICBTdHJpbmcgc3RhdGU7CisgICAgICAgIGlmIChkb2MtPnRha2VTdGF0ZUZvckZvcm1FbGVt
ZW50KG5hbWUoKS5pbXBsKCksIHR5cGUoKS5pbXBsKCksIHN0YXRlKSkKKyAgICAgICAgICAgIHJl
c3RvcmVGb3JtQ29udHJvbFN0YXRlKHN0YXRlKTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
Cit7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxl
Q29udGVudENoYW5nZWRFdmVudCAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzVGV4dENv
bnRyb2woKSkgeworICAgICAgICB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zdWJ0
cmVlSGFzQ2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0p
CisgICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRhZ05hbWUsIGRvYywgZm9y
bSkKK3sKK30KKworSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRp
c3BhdGNoRm9jdXNFdmVudCgpCit7CisgICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIoKSkKKyAg
ICAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKKyAgICBoYW5kbGVGb2N1
c0V2ZW50KCk7CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hG
b2N1c0V2ZW50KCk7Cit9CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3Bh
dGNoQmx1ckV2ZW50KCkKK3sKKyAgICBpZiAoc3VwcG9ydHNQbGFjZWhvbGRlcigpKQorICAgICAg
ICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOworICAgIGhhbmRsZUJsdXJFdmVu
dCgpOworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNoQmx1ckV2
ZW50KCk7Cit9CisKK1N0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c3RyaXBwZWRQ
bGFjZWhvbGRlcigpIGNvbnN0Cit7CisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVE1MNSBzcGVj
aWZpY2F0aW9uLCB3ZSBuZWVkIHRvIHJlbW92ZSBDUiBhbmQgTEYgZnJvbQorICAgIC8vIHRoZSBh
dHRyaWJ1dGUgdmFsdWUuCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9
IGdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpOworICAgIGlmICghYXR0cmlidXRlVmFsdWUu
Y29udGFpbnMobmV3bGluZUNoYXJhY3RlcikgJiYgIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKGNh
cnJpYWdlUmV0dXJuKSkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlOworCisgICAgVmVj
dG9yPFVDaGFyPiBzdHJpcHBlZDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVWYWx1
ZS5sZW5ndGgoKTsKKyAgICBzdHJpcHBlZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgY2hh
cmFjdGVyID0gYXR0cmlidXRlVmFsdWVbaV07CisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gbmV3
bGluZUNoYXJhY3RlciB8fCBjaGFyYWN0ZXIgPT0gY2FycmlhZ2VSZXR1cm4pCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgc3RyaXBwZWQuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgfQor
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHN0cmlwcGVkKTsKK30KKworc3RhdGljIGJvb2wgaXNO
b3RMaW5lQnJlYWsoVUNoYXIgY2gpIHsgcmV0dXJuIGNoICE9IG5ld2xpbmVDaGFyYWN0ZXIgJiYg
Y2ggIT0gY2FycmlhZ2VSZXR1cm47IH0KKworYm9vbCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6aXNQbGFjZWhvbGRlckVtcHR5KCkgY29uc3QKK3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0cik7CisgICAgcmV0
dXJuIGF0dHJpYnV0ZVZhbHVlLnN0cmluZygpLmZpbmQoaXNOb3RMaW5lQnJlYWspID09IG5vdEZv
dW5kOworfQorCitib29sIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpwbGFjZWhvbGRlclNo
b3VsZEJlVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1cHBvcnRzUGxhY2Vob2xkZXIo
KQorICAgICAgICAmJiBpc0VtcHR5VmFsdWUoKQorICAgICAgICAmJiBkb2N1bWVudCgpLT5mb2N1
c2VkTm9kZSgpICE9IHRoaXMKKyAgICAgICAgJiYgIWlzUGxhY2Vob2xkZXJFbXB0eSgpOworfQor
Cit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVQbGFjZWhvbGRlclZpc2li
aWxpdHkoYm9vbCBwbGFjZWhvbGRlclZhbHVlQ2hhbmdlZCkKK3sKKyAgICBpZiAoc3VwcG9ydHNQ
bGFjZWhvbGRlcigpICYmIHJlbmRlcmVyKCkpCisgICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2wo
cmVuZGVyZXIoKSktPnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShwbGFjZWhvbGRlclNob3Vs
ZEJlVmlzaWJsZSgpLCBwbGFjZWhvbGRlclZhbHVlQ2hhbmdlZCk7Cit9CisKK1JlbmRlclRleHRD
b250cm9sKiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dGV4dFJlbmRlcmVyQWZ0ZXJVcGRh
dGVMYXlvdXQoKQoreworICAgIGlmICghaXNUZXh0Rm9ybUNvbnRyb2woKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CisgICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSk7Cit9CisK
K3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvblN0YXJ0KGludCBz
dGFydCkKK3sKKyAgICBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgbWF4KHN0YXJ0LCBzZWxlY3Rp
b25FbmQoKSkpOworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxl
Y3Rpb25FbmQoaW50IGVuZCkKK3sKKyAgICBzZXRTZWxlY3Rpb25SYW5nZShtaW4oZW5kLCBzZWxl
Y3Rpb25TdGFydCgpKSwgZW5kKTsKK30KKwordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6c2VsZWN0KCkKK3sKKyAgICBzZXRTZWxlY3Rpb25SYW5nZSgwLCBudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSk7Cit9CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNl
bGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCkKK3sKKyAgICBXZWJDb3JlOjpzZXRTZWxl
Y3Rpb25SYW5nZSh0aGlzLCBzdGFydCwgZW5kKTsKK30KKworaW50IEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50OjpzZWxlY3Rpb25TdGFydCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1RleHRGb3Jt
Q29udHJvbCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNl
ZE5vZGUoKSAhPSB0aGlzICYmIGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPj0gMCkKKyAgICAgICAg
cmV0dXJuIGNhY2hlZFNlbGVjdGlvblN0YXJ0KCk7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigp
KS0+c2VsZWN0aW9uU3RhcnQoKTsKK30KKworaW50IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjpzZWxlY3Rpb25FbmQoKSBjb25zdAoreworICAgIGlmICghaXNUZXh0Rm9ybUNvbnRyb2woKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0g
dGhpcyAmJiBjYWNoZWRTZWxlY3Rpb25FbmQoKSA+PSAwKQorICAgICAgICByZXR1cm4gY2FjaGVk
U2VsZWN0aW9uRW5kKCk7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uRW5k
KCk7Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpz
ZWxlY3Rpb24oKSBjb25zdAoreworICAgIGlmICghcmVuZGVyZXIoKSB8fCAhaXNUZXh0Rm9ybUNv
bnRyb2woKSB8fCBjYWNoZWRTZWxlY3Rpb25TdGFydCgpIDwgMCB8fCBjYWNoZWRTZWxlY3Rpb25F
bmQoKSA8IDApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0b1JlbmRlclRleHRDb250
cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rpb24oY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSwgY2FjaGVk
U2VsZWN0aW9uRW5kKCkpOworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBwbGFjZWhvbGRlckF0dHIpCisgICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJp
bGl0eSh0cnVlKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxlY3RBdHRyKQor
ICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVu
dCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CisgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG9uY2hhbmdlQXR0cikKKyAgICAgICAgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIodGhpcywgYXR0cikpOworICAgIGVsc2UKKyAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYmNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3MyArMjMsMjggQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1
ZGUgIkZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0j
aW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRl
ICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50UGFyc2VyLmgiCi0jaW5jbHVkZSAiRWxlbWVudFJhcmVEYXRhLmgiCi0jaW5jbHVkZSAiRXZl
bnQuaCIKLSNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkxhYmVsc05vZGVMaXN0Lmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJl
bmRlclRleHRDb250cm9sLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRlICJT
Y3JpcHRFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiVmFsaWRhdGlvbk1lc3NhZ2UuaCIKKyNp
bmNsdWRlICJIVE1MT2JqZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIlZhbGlkaXR5U3RhdGUuaCIK
LSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2Ug
c3RkOwotCi1IVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1F
bGVtZW50KiBmb3JtKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAg
LCBtX2Zvcm0oZm9ybSkKLSAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCi0gICAgLCBtX3JlYWRPbmx5
KGZhbHNlKQotICAgICwgbV9yZXF1aXJlZChmYWxzZSkKLSAgICAsIG1fdmFsdWVNYXRjaGVzUmVu
ZGVyZXIoZmFsc2UpCi0gICAgLCBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkKGZhbHNlKQotICAg
ICwgbV93aWxsVmFsaWRhdGUodHJ1ZSkKLSAgICAsIG1faXNWYWxpZCh0cnVlKQotewotICAgIGlm
ICghbV9mb3JtKQotICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgaWYg
KG1fZm9ybSkKLSAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwotfQog
Ci1IVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVudCgpCitGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQq
IGZvcm0pCisgICAgOiBtX2Zvcm0oZm9ybSkKIHsKLSAgICBpZiAobV9mb3JtKQotICAgICAgICBt
X2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRldGFjaCgpCitGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6On5Gb3JtQXNzb2NpYXRl
ZEVsZW1lbnQoKQogewotICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICBI
VE1MRWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
Zm9ybU5vVmFsaWRhdGUoKSBjb25zdAotewotICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGZvcm1u
b3ZhbGlkYXRlQXR0cikuaXNOdWxsKCk7Ci19Ci0KLVZhbGlkaXR5U3RhdGUqIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnZhbGlkaXR5KCkKK1ZhbGlkaXR5U3RhdGUqIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6dmFsaWRpdHkoKQogewogICAgIGlmICghbV92YWxpZGl0eVN0YXRlKQogICAgICAgICBt
X3ZhbGlkaXR5U3RhdGUgPSBWYWxpZGl0eVN0YXRlOjpjcmVhdGUodGhpcyk7CkBAIC05Nyw4NiAr
NTIsMjggQEAgVmFsaWRpdHlTdGF0ZSogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dgogICAgIHJl
dHVybiBtX3ZhbGlkaXR5U3RhdGUuZ2V0KCk7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQordm9pZCBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKQogewotICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gZGlzYWJsZWRBdHRyKSB7Ci0gICAgICAgIGJvb2wgb2xkRGlzYWJsZWQgPSBtX2Rpc2Fi
bGVkOwotICAgICAgICBtX2Rpc2FibGVkID0gIWF0dHItPmlzTnVsbCgpOwotICAgICAgICBpZiAo
b2xkRGlzYWJsZWQgIT0gbV9kaXNhYmxlZCkgewotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUo
KS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkt
PnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBFbmFibGVkU3RhdGUpOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVhZG9ubHlBdHRyKSB7Ci0gICAgICAgIGJvb2wg
b2xkUmVhZE9ubHkgPSBtX3JlYWRPbmx5OwotICAgICAgICBtX3JlYWRPbmx5ID0gIWF0dHItPmlz
TnVsbCgpOwotICAgICAgICBpZiAob2xkUmVhZE9ubHkgIT0gbV9yZWFkT25seSkgewotICAgICAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkg
JiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICAgICAgICAg
IHJlbmRlcmVyKCktPnRoZW1lKCktPnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBSZWFkT25seVN0
YXRlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHJlcXVpcmVk
QXR0cikgewotICAgICAgICBib29sIG9sZFJlcXVpcmVkID0gbV9yZXF1aXJlZDsKLSAgICAgICAg
bV9yZXF1aXJlZCA9ICFhdHRyLT5pc051bGwoKTsKLSAgICAgICAgaWYgKG9sZFJlcXVpcmVkICE9
IG1fcmVxdWlyZWQpIHsKLSAgICAgICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwotICAg
ICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOyAvLyBVcGRhdGVzIGZvciA6cmVxdWlyZWQg
Om9wdGlvbmFsIGNsYXNzZXMuCi0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgSFRNTEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwotICAgIHNldE5lZWRzV2lsbFZhbGlk
YXRlQ2hlY2soKTsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdHRhY2goKQot
ewotICAgIEFTU0VSVCghYXR0YWNoZWQoKSk7Ci0KLSAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7
Ci0KLSAgICAvLyBUaGUgY2FsbCB0byB1cGRhdGVGcm9tRWxlbWVudCgpIG5lZWRzIHRvIGdvIGFm
dGVyIHRoZSBjYWxsIHRocm91Z2gKLSAgICAvLyB0byB0aGUgYmFzZSBjbGFzcydzIGF0dGFjaCgp
IGJlY2F1c2UgdGhhdCBjYW4gc29tZXRpbWVzIGRvIGEgY2xvc2UKLSAgICAvLyBvbiB0aGUgcmVu
ZGVyZXIuCi0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZy
b21FbGVtZW50KCk7Ci0gICAgICAgIAotICAgIC8vIEZvY3VzIHRoZSBlbGVtZW50IGlmIGl0IHNo
b3VsZCBob25vdXIgaXRzIGF1dG9mb2N1cyBhdHRyaWJ1dGUuCi0gICAgLy8gV2UgaGF2ZSB0byBk
ZXRlcm1pbmUgaWYgdGhlIGVsZW1lbnQgaXMgYSBUZXh0QXJlYS9JbnB1dC9CdXR0b24vU2VsZWN0
LAotICAgIC8vIGlmIGlucHV0IHR5cGUgaGlkZGVuIGlnbm9yZSBhdXRvZm9jdXMuIFNvIGlmIGRp
c2FibGVkIG9yIHJlYWRvbmx5LgotICAgIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4gPSBmYWxzZTsK
LSAgICBpZiAoaGFzVGFnTmFtZShpbnB1dFRhZykpCi0gICAgICAgIGlzSW5wdXRUeXBlSGlkZGVu
ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHRoaXMpLT5pc0lucHV0VHlwZUhpZGRl
bigpOwotCi0gICAgaWYgKGF1dG9mb2N1cygpICYmIHJlbmRlcmVyKCkgJiYgIWRvY3VtZW50KCkt
Pmlnbm9yZUF1dG9mb2N1cygpICYmICFpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKSAmJgotICAgICAg
ICAgICAgKChoYXNUYWdOYW1lKGlucHV0VGFnKSAmJiAhaXNJbnB1dFR5cGVIaWRkZW4pIHx8IGhh
c1RhZ05hbWUoc2VsZWN0VGFnKSB8fAotICAgICAgICAgICAgICBoYXNUYWdOYW1lKGJ1dHRvblRh
ZykgfHwgaGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpKQotICAgICAgICAgZm9jdXMoKTsKLX0KLQot
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkK
LXsKLSAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKLSAgICAgICAgZG9jdW1l
bnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOwotICAgICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZmFzdEdldEF0
dHJpYnV0ZShmb3JtQXR0cikpOwotICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5oYXNU
YWdOYW1lKGZvcm1UYWcpKSB7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVt
ZW50KHRoaXMpOworICAgIGlmIChlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkg
eworICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZv
cm1BdHRyaWJ1dGUodGhpcyk7CisgICAgICAgIEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShm
b3JtQXR0cikpOworICAgICAgICBpZiAoZm9ybUVsZW1lbnQgJiYgZm9ybUVsZW1lbnQtPmhhc1Rh
Z05hbWUoZm9ybVRhZykpIHsKICAgICAgICAgICAgIGlmIChtX2Zvcm0pCiAgICAgICAgICAgICAg
ICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgICAgIG1fZm9ybSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgbV9m
b3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZm9ybUVsZW1lbnQpOwogICAgICAg
ICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwogICAgICAgICB9CiAgICAg
fQogICAgIGlmICghbV9mb3JtKSB7CiAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBv
ZiBhIG5ldyBmb3JtIGVsZW1lbnQgYmVpbmcgY3JlYXRlZCBieQogICAgICAgICAvLyBKYXZhU2Ny
aXB0IGFuZCBpbnNlcnRlZCBpbnNpZGUgYSBmb3JtLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIHBhcnNl
cgotICAgICAgICAvLyBzZXR0aW5nIGEgZm9ybSwgd2Ugd2lsbCBhbHJlYWR5IGhhdmUgYSBub24t
bnVsbCB2YWx1ZSBmb3IgbV9mb3JtLCAKKyAgICAgICAgLy8gc2V0dGluZyBhIGZvcm0sIHdlIHdp
bGwgYWxyZWFkeSBoYXZlIGEgbm9uLW51bGwgdmFsdWUgZm9yIG1fZm9ybSwKICAgICAgICAgLy8g
YW5kIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCi0gICAgICAgIG1fZm9ybSA9IGZp
bmRGb3JtQW5jZXN0b3IoKTsKKyAgICAgICAgbV9mb3JtID0gZWxlbWVudC0+ZmluZEZvcm1BbmNl
c3RvcigpOwogICAgICAgICBpZiAobV9mb3JtKQogICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3Rl
ckZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVudCgp
LT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogICAgIH0KLQotICAgIEhU
TUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOwogfQogCiBzdGF0aWMgaW5saW5lIE5v
ZGUqIGZpbmRSb290KE5vZGUqIG4pCkBAIC0xODcsMjU2ICs4NCwxOSBAQCBzdGF0aWMgaW5saW5l
IE5vZGUqIGZpbmRSb290KE5vZGUqIG4pCiAgICAgcmV0dXJuIHJvb3Q7CiB9CiAKLXZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkKK3ZvaWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoKQogewotICAgIGlmIChmYXN0SGFz
QXR0cmlidXRlKGZvcm1BdHRyKSkKLSAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1F
bGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0hUTUxFbGVtZW50KHRoaXMpOworICAgIGlmIChlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRl
KGZvcm1BdHRyKSkKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1F
bGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CiAKICAgICAvLyBJZiB0aGUgZm9ybSBhbmQg
ZWxlbWVudCBhcmUgYm90aCBpbiB0aGUgc2FtZSB0cmVlLCBwcmVzZXJ2ZSB0aGUgY29ubmVjdGlv
biB0byB0aGUgZm9ybS4KICAgICAvLyBPdGhlcndpc2UsIG51bGwgb3V0IG91ciBmb3JtIGFuZCBy
ZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGZvcm0ncyBsaXN0IG9mIGVsZW1lbnRzLgotICAgIGlm
IChtX2Zvcm0gJiYgZmluZFJvb3QodGhpcykgIT0gZmluZFJvb3QobV9mb3JtKSkgewotICAgICAg
ICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICBtX2Zvcm0gPSAwOwot
ICAgIH0KLQotICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoZGVlcCk7Ci19Ci0KLWNv
bnN0IEF0b21pY1N0cmluZyYgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1l
KCkgY29uc3QKLXsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBmYXN0R2V0QXR0cmli
dXRlKG5hbWVBdHRyKTsKLSAgICByZXR1cm4gbmFtZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IG5h
bWU7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmFtZShjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOwot
fQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFu
Z2VFdmVudCgpCi17Ci0gICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpzZXREaXNhYmxlZChib29sIGIpCi17Ci0gICAgc2V0QXR0cmlidXRlKGRpc2FibGVk
QXR0ciwgYiA/ICIiIDogMCk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXV0
b2ZvY3VzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzQXR0cmlidXRlKGF1dG9mb2N1c0F0dHIp
OwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9yZXF1aXJlZDsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlRnJvbUVsZW1l
bnRDYWxsYmFjayhOb2RlKiBub2RlKQotewotICAgIEFTU0VSVF9BUkcobm9kZSwgbm9kZS0+aXNF
bGVtZW50Tm9kZSgpKTsKLSAgICBBU1NFUlRfQVJHKG5vZGUsIHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSk7Ci0gICAgQVNTRVJUKG5vZGUtPnJlbmRl
cmVyKCkpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIo
KSkKLSAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUZyb21FbGVtZW50KCk7Ci19Ci0KLXZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQotewot
ICAgIEhUTUxFbGVtZW50OjpyZWNhbGNTdHlsZShjaGFuZ2UpOwotCi0gICAgLy8gdXBkYXRlRnJv
bUVsZW1lbnQoKSBjYW4gY2F1c2UgdGhlIHNlbGVjdGlvbiB0byBjaGFuZ2UsIGFuZCBpbiB0dXJu
Ci0gICAgLy8gdHJpZ2dlciBzeW5jaHJvbm91cyBsYXlvdXQsIHNvIGl0IG11c3Qgbm90IGJlIGNh
bGxlZCBkdXJpbmcgc3R5bGUgcmVjYWxjLgotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICBx
dWV1ZVBvc3RBdHRhY2hDYWxsYmFjayh1cGRhdGVGcm9tRWxlbWVudENhbGxiYWNrLCB0aGlzKTsK
LX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIWRpc2FibGVkKCk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIoKSB8fCAKLSAg
ICAgICAgIXJlbmRlcmVyKCktPmlzQm94KCkgfHwgdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPnNp
emUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBIVE1MRWxlbWVu
dDo6aXNGb2N1c2FibGUgaGFuZGxlcyB2aXNpYmlsaXR5IGFuZCBjYWxscyBzdXBvcnRzRm9jdXMg
d2hpY2gKLSAgICAvLyB3aWxsIGNvdmVyIHRoZSBkaXNhYmxlZCBjYXNlLgotICAgIHJldHVybiBI
VE1MRWxlbWVudDo6aXNGb2N1c2FibGUoKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAotewot
ICAgIGlmIChpc0ZvY3VzYWJsZSgpKQotICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkK
LSAgICAgICAgICAgIHJldHVybiBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
dGFic1RvQWxsQ29udHJvbHMoZXZlbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QKLXsKLSNpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQotICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNN
b3VzZUZvY3VzYWJsZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQot
c2hvcnQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdAotewotICAgIC8v
IFNraXAgdGhlIHN1cHBvcnRzRm9jdXMgY2hlY2sgaW4gSFRNTEVsZW1lbnQuCi0gICAgcmV0dXJu
IEVsZW1lbnQ6OnRhYkluZGV4KCk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
cmVjYWxjV2lsbFZhbGlkYXRlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHJldHVy
biBmYWxzZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgZGF0YWxpc3QgZWxlbWVudCBhcyBhbgotICAg
IC8vIGFuY2VzdG9yLiBTZWUgSFRNTDUgNC4xMC4xMCAnVGhlIGRhdGFsaXN0IGVsZW1lbnQuJwot
ICAgIHJldHVybiAhbV9kaXNhYmxlZCAmJiAhbV9yZWFkT25seTsKLX0KLQotYm9vbCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojp3aWxsVmFsaWRhdGUoKSBjb25zdAotewotICAgIGlmICghbV93aWxs
VmFsaWRhdGVJbml0aWFsaXplZCkgewotICAgICAgICBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVk
ID0gdHJ1ZTsKLSAgICAgICAgbV93aWxsVmFsaWRhdGUgPSByZWNhbGNXaWxsVmFsaWRhdGUoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIGFzc2VydGlvbiBmYWls
cywgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpIGlzIG5vdAotICAgICAgICAvLyBjYWxsZWQg
Y29ycmVjdGx5IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMgcmVjYWxjV2lsbFZhbGlkYXRl
KCkgcmVzdWx0Ci0gICAgICAgIC8vIGlzIHVwZGF0ZWQuCi0gICAgICAgIEFTU0VSVChtX3dpbGxW
YWxpZGF0ZSA9PSByZWNhbGNXaWxsVmFsaWRhdGUoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX3dp
bGxWYWxpZGF0ZTsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROZWVkc1dp
bGxWYWxpZGF0ZUNoZWNrKCkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHdpbGxW
YWxpZHRlIGltbWVkaWF0ZWx5IGJlY2F1c2Ugd2lsbFZhbGlkYXRlCi0gICAgLy8gY2hhbmdlIGNh
biBjYXVzZXMgc3R5bGUgY2hhbmdlLgotICAgIGJvb2wgbmV3V2lsbFZhbGlkYXRlID0gcmVjYWxj
V2lsbFZhbGlkYXRlKCk7Ci0gICAgaWYgKG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQgJiYgbV93
aWxsVmFsaWRhdGUgPT0gbmV3V2lsbFZhbGlkYXRlKQotICAgICAgICByZXR1cm47Ci0gICAgbV93
aWxsVmFsaWRhdGVJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgbV93aWxsVmFsaWRhdGUgPSBuZXdX
aWxsVmFsaWRhdGU7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIGlmICghbV93aWxs
VmFsaWRhdGUpCi0gICAgICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLX0KLQot
U3RyaW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkKLXsKLSAg
ICByZXR1cm4gdmFsaWRpdHkoKS0+dmFsaWRhdGlvbk1lc3NhZ2UoKTsKLX0KLQotdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQotewot
ICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAg
ICAgICByZXR1cm47Ci0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYg
d2lsbFZhbGlkYXRlKCkpIHsKLSAgICAgICAgbWVzc2FnZSA9IHZhbGlkYXRpb25NZXNzYWdlKCku
c3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgIC8vIEhUTUw1IHNwZWNpZmljYXRpb24gZG9lc24n
dCBhc2sgVUEgdG8gc2hvdyB0aGUgdGl0bGUgYXR0cmlidXRlIHZhbHVlCi0gICAgICAgIC8vIHdp
dGggdGhlIHZhbGlkYXRpb25NZXNzYWdlLiAgSG93ZXZlciwgdGhpcyBiZWhhdmlvciBpcyBzYW1l
IGFzIE9wZXJhCi0gICAgICAgIC8vIGFuZCB0aGUgc3BlY2lmaWNhdGlvbiBkZXNjcmliZXMgc3Vj
aCBiZWhhdmlvciBhcyBhbiBleGFtcGxlLgotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRp
dGxlID0gZ2V0QXR0cmlidXRlKHRpdGxlQXR0cik7Ci0gICAgICAgIGlmICghbWVzc2FnZS5pc0Vt
cHR5KCkgJiYgIXRpdGxlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQo
J1xuJyk7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCh0aXRsZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgaWYgKCFtX3ZhbGlkYXRpb25NZXNzYWdlKSB7Ci0gICAgICAgIG1fdmFsaWRhdGlv
bk1lc3NhZ2UgPSBWYWxpZGF0aW9uTWVzc2FnZTo6Y3JlYXRlKHRoaXMpOwotICAgICAgICBtX3Zh
bGlkYXRpb25NZXNzYWdlLT5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIH0gZWxzZSBpZiAobWVz
c2FnZS5pc0VtcHR5KCkpCi0gICAgICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsK
LSAgICBlbHNlIGlmIChtX3ZhbGlkYXRpb25NZXNzYWdlLT5tZXNzYWdlKCkgIT0gbWVzc2FnZSkK
LSAgICAgICAgbV92YWxpZGF0aW9uTWVzc2FnZS0+c2V0TWVzc2FnZShtZXNzYWdlKTsKLX0KLQot
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdl
KCkKLXsKLSAgICBtX3ZhbGlkYXRpb25NZXNzYWdlID0gMDsKLX0KLQotU3RyaW5nIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fdmFsaWRhdGlvbk1lc3NhZ2UgPyBtX3ZhbGlkYXRpb25NZXNzYWdlLT5tZXNzYWdl
KCkgOiBTdHJpbmcoKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1Zh
bGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVk
SW52YWxpZENvbnRyb2xzKQotewotICAgIGlmICghd2lsbFZhbGlkYXRlKCkgfHwgaXNWYWxpZEZv
cm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBBbiBldmVu
dCBoYW5kbGVyIGNhbiBkZXJlZiB0aGlzIG9iamVjdC4KLSAgICBSZWZQdHI8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOwotICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2lu
YWxEb2N1bWVudChkb2N1bWVudCgpKTsKLSAgICBib29sIG5lZWRzRGVmYXVsdEFjdGlvbiA9IGRp
c3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxz
ZSwgdHJ1ZSkpOwotICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52YWxp
ZENvbnRyb2xzICYmIGluRG9jdW1lbnQoKSAmJiBvcmlnaW5hbERvY3VtZW50ID09IGRvY3VtZW50
KCkpCi0gICAgICAgIHVuaGFuZGxlZEludmFsaWRDb250cm9scy0+YXBwZW5kKHRoaXMpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlk
Rm9ybUNvbnRyb2xFbGVtZW50KCkKLXsKLSAgICAvLyBJZiB0aGUgZm9sbG93aW5nIGFzc2VydGlv
biBmYWlscywgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCkgaXMgbm90IGNhbGxlZAotICAgIC8vIGNv
cnJlY3RseSB3aGVuIHNvbWV0aGluZyB3aGljaCBjaGFuZ2VzIHZhbGlkaXR5IGlzIHVwZGF0ZWQu
Ci0gICAgQVNTRVJUKG1faXNWYWxpZCA9PSB2YWxpZGl0eSgpLT52YWxpZCgpKTsKLSAgICByZXR1
cm4gbV9pc1ZhbGlkOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRz
VmFsaWRpdHlDaGVjaygpCi17Ci0gICAgYm9vbCBuZXdJc1ZhbGlkID0gdmFsaWRpdHkoKS0+dmFs
aWQoKTsKLSAgICBpZiAod2lsbFZhbGlkYXRlKCkgJiYgbmV3SXNWYWxpZCAhPSBtX2lzVmFsaWQp
IHsKLSAgICAgICAgLy8gVXBkYXRlIHN0eWxlIGZvciBwc2V1ZG8gY2xhc3NlcyBzdWNoIGFzIDp2
YWxpZCA6aW52YWxpZC4KLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIH0KLSAg
ICBtX2lzVmFsaWQgPSBuZXdJc1ZhbGlkOwotCi0gICAgLy8gVXBkYXRlcyBvbmx5IGlmIHRoaXMg
Y29udHJvbCBhbHJlYWR5IGhhcyBhIHZhbGlkdGlvbiBtZXNzYWdlLgotICAgIGlmICghdmlzaWJs
ZVZhbGlkYXRpb25NZXNzYWdlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIENhbGxzIHVwZGF0
ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGV2ZW4gaWYgbV9pc1ZhbGlkIGlzIG5vdAotICAg
ICAgICAvLyBjaGFuZ2VkIGJlY2F1c2UgYSB2YWxpZGF0aW9uIG1lc3NhZ2UgY2FuIGJlIGNoYWdu
ZWQuCi0gICAgICAgIHVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwotICAgIH0KLX0K
LQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRDdXN0b21WYWxpZGl0eShjb25zdCBT
dHJpbmcmIGVycm9yKQotewotICAgIHZhbGlkaXR5KCktPnNldEN1c3RvbUVycm9yTWVzc2FnZShl
cnJvcik7Ci19Ci0gICAgCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9j
dXNFdmVudCgpCi17Ci0gICAgaWYgKGRvY3VtZW50KCktPnBhZ2UoKSkKLSAgICAgICAgZG9jdW1l
bnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZvcm1EaWRGb2N1cyh0aGlzKTsKLQot
ICAgIEhUTUxFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKTsKKyAgICBpZiAobV9mb3JtICYm
IGZpbmRSb290KGVsZW1lbnQpICE9IGZpbmRSb290KG1fZm9ybSkpCisgICAgICAgIHJlbW92ZUZy
b21Gb3JtKCk7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hCbHVy
RXZlbnQoKQotewotICAgIGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCi0gICAgICAgIGRvY3VtZW50
KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtRGlkQmx1cih0aGlzKTsKLQotICAg
IEhUTUxFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpOwotICAgIGhpZGVWaXNpYmxlVmFsaWRh
dGlvbk1lc3NhZ2UoKTsKLX0KLQotSFRNTEZvcm1FbGVtZW50KiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Ojp2aXJ0dWFsRm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9ybTsKLX0KLQotYm9v
bCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgbV9mb3JtICYmIG1f
Zm9ybS0+ZGVmYXVsdEJ1dHRvbigpID09IHRoaXM7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0oKQordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJl
bW92ZUZyb21Gb3JtKCkKIHsKICAgICBpZiAoIW1fZm9ybSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NDQ0LDI3NyArMTA0LDU5IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlRnJv
bUYKICAgICBtX2Zvcm0gPSAwOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJl
c2V0Rm9ybU93bmVyKEhUTUxGb3JtRWxlbWVudCogZm9ybSkKK3ZvaWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjpyZXNldEZvcm1Pd25lcihIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiB7CisgICAgSFRN
TEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KHRoaXMpOworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgZm9ybUlkKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKICAg
ICBpZiAobV9mb3JtKSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikp
CisgICAgICAgIGlmIChmb3JtSWQuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CiAgICAgfQogICAgIG1fZm9ybSA9
IDA7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgaWYgKCFmb3Jt
SWQuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gVGhlIEhUTUw1IHNwZWMgc2F5cyB0aGF0IHRoZSBl
bGVtZW50IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgLy8gdGhlIGZpcnN0IGVs
ZW1lbnQgaW4gdGhlIGRvY3VtZW50IHRvIGhhdmUgYW4gSUQgdGhhdCBlcXVhbCB0bwogICAgICAg
ICAvLyB0aGUgdmFsdWUgb2YgZm9ybSBhdHRyaWJ1dGUsIHNvIHdlIHB1dCB0aGUgcmVzdWx0IG9m
CiAgICAgICAgIC8vIGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKCkgb3ZlciB0aGUgZ2l2ZW4g
ZWxlbWVudC4KLSAgICAgICAgRWxlbWVudCogZmlyc3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0
RWxlbWVudEJ5SWQoZmFzdEdldEF0dHJpYnV0ZShmb3JtQXR0cikpOworICAgICAgICBFbGVtZW50
KiBmaXJzdEVsZW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChmb3Jt
SWQpOwogICAgICAgICBpZiAoZmlyc3RFbGVtZW50ICYmIGZpcnN0RWxlbWVudC0+aGFzVGFnTmFt
ZShmb3JtVGFnKSkKICAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxl
bWVudCo+KGZpcnN0RWxlbWVudCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZm9ybSA9
IGZvcm07CiAgICAgfSBlbHNlCi0gICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsK
KyAgICAgICAgbV9mb3JtID0gZWxlbWVudC0+ZmluZEZvcm1BbmNlc3RvcigpOwogICAgIGlmICht
X2Zvcm0pCiAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLSAgICBl
bHNlCi0gICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24o
dGhpcyk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdl
ZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKLXsKLSAgICBpZiAoYXR0ci0+
bmFtZSgpID09IGZvcm1BdHRyKSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShmb3Jt
QXR0cikpIHsKLSAgICAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1vdmVkLiBXZSBu
ZWVkIHRvIHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KLSAgICAgICAgICAgIGlmIChtX2Zvcm0pCi0g
ICAgICAgICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAg
ICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICAgICAgICAgIGlmIChtX2Zvcm0p
Ci0gICAgICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1
dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVz
ZXRGb3JtT3duZXIoMCk7Ci0gICAgfQotICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHIsIHByZXNlcnZlRGVjbHMpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmlzTGFiZWxhYmxlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogQWRkIG1ldGVyVGFnIGFuZCBv
dXRwdXRUYWcgdG8gdGhlIGxpc3Qgb25jZSB3ZSBzdXBwb3J0IHRoZW0uCi0gICAgcmV0dXJuIGhh
c1RhZ05hbWUoYnV0dG9uVGFnKSB8fCBoYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBoYXNUYWdOYW1l
KGtleWdlblRhZykKLSNpZiBFTkFCTEUoTUVURVJfVEFHKQotICAgICAgICB8fCBoYXNUYWdOYW1l
KG1ldGVyVGFnKQotI2VuZGlmCi0jaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKLSAgICAgICAgfHwg
aGFzVGFnTmFtZShwcm9ncmVzc1RhZykKLSNlbmRpZgotICAgICAgICB8fCBoYXNUYWdOYW1lKHNl
bGVjdFRhZykgfHwgaGFzVGFnTmFtZSh0ZXh0YXJlYVRhZyk7Ci19Ci0KLVBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmxhYmVscygpCi17Ci0gICAgaWYgKCFpc0xh
YmVsYWJsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWRvY3VtZW50KCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIAotICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IE5vZGU6OmVuc3Vy
ZVJhcmVEYXRhKCk7Ci0gICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkgewotICAgICAgICBkYXRh
LT5zZXROb2RlTGlzdHMoTm9kZUxpc3RzTm9kZURhdGE6OmNyZWF0ZSgpKTsKLSAgICAgICAgZG9j
dW1lbnQoKS0+YWRkTm9kZUxpc3RDYWNoZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gTGFi
ZWxzTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzKTsKLX0KLSAgICAKLUhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQotICAg
IDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2MsIGYpCi17Ci0gICAgZG9jdW1l
bnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKLX0KLQotSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZTo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUo
KQotewotICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlz
KTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp3aWxsTW92ZVRv
TmV3T3duZXJEb2N1bWVudCgpCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybUF0dHJp
YnV0ZUNoYW5nZWQoKQogewotICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdp
dGhTdGF0ZSh0aGlzKTsKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp3aWxsTW92ZVRvTmV3
T3duZXJEb2N1bWVudCgpOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGU6OmRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQotewotICAgIGRvY3VtZW50KCktPnJlZ2lz
dGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Ci0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGU6OmF1dG9Db21wbGV0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFmb3Jt
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmb3JtKCktPmF1dG9Db21wbGV0
ZSgpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnNob3VsZFNh
dmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpIGNvbnN0Ci17Ci0gICAgLy8gV2UgZG9uJ3Qg
c2F2ZS9yZXN0b3JlIGNvbnRyb2wgc3RhdGUgaW4gYSBmb3JtIHdpdGggYXV0b2NvbXBsZXRlPW9m
Zi4KLSAgICByZXR1cm4gYXR0YWNoZWQoKSAmJiBhdXRvQ29tcGxldGUoKTsKLX0KLQotdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQot
ewotICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwot
Ci0gICAgLy8gV2UgZG9uJ3Qgc2F2ZSBzdGF0ZSBvZiBhIGNvbnRyb2wgd2l0aCBzaG91bGRTYXZl
QW5kUmVzdG9yZUZvcm1Db250cm9sU3RhdGUoKT1mYWxzZS4KLSAgICAvLyBCdXQgd2UgbmVlZCB0
byBza2lwIHJlc3RvcmluZyBwcm9jZXNzIHRvbyBiZWNhdXNlIGEgY29udHJvbCBpbiBhbm90aGVy
Ci0gICAgLy8gZm9ybSBtaWdodCBoYXZlIHRoZSBzYW1lIHBhaXIgb2YgbmFtZSBhbmQgdHlwZSBh
bmQgc2F2ZWQgaXRzIHN0YXRlLgotICAgIGlmICghc2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29u
dHJvbFN0YXRlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERvY3VtZW50KiBkb2MgPSBkb2N1
bWVudCgpOwotICAgIGlmIChkb2MtPmhhc1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkpIHsKLSAg
ICAgICAgU3RyaW5nIHN0YXRlOwotICAgICAgICBpZiAoZG9jLT50YWtlU3RhdGVGb3JGb3JtRWxl
bWVudChuYW1lKCkuaW1wbCgpLCB0eXBlKCkuaW1wbCgpLCBzdGF0ZSkpCi0gICAgICAgICAgICBy
ZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShzdGF0ZSk7Ci0gICAgfQotfQotCi12b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50
KQotewotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJs
ZUNvbnRlbnRDaGFuZ2VkRXZlbnQgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RleHRD
b250cm9sKCkpIHsKLSAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c3Vi
dHJlZUhhc0NoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwotfQotCi1IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudDo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
KQotICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSh0YWdOYW1lLCBkb2MsIGZv
cm0pCi17Ci19Ci0KLUhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQoKQotewotfQotCi12b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpk
aXNwYXRjaEZvY3VzRXZlbnQoKQotewotICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVyKCkpCi0g
ICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7Ci0gICAgaGFuZGxlRm9j
dXNFdmVudCgpOwotICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNo
Rm9jdXNFdmVudCgpOwotfQotCi12b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNw
YXRjaEJsdXJFdmVudCgpCi17Ci0gICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIoKSkKLSAgICAg
ICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKLSAgICBoYW5kbGVCbHVyRXZl
bnQoKTsKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEJsdXJF
dmVudCgpOwotfQotCi1TdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwcGVk
UGxhY2Vob2xkZXIoKSBjb25zdAotewotICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRNTDUgc3Bl
Y2lmaWNhdGlvbiwgd2UgbmVlZCB0byByZW1vdmUgQ1IgYW5kIExGIGZyb20KLSAgICAvLyB0aGUg
YXR0cmlidXRlIHZhbHVlLgotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUg
PSBnZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKTsKLSAgICBpZiAoIWF0dHJpYnV0ZVZhbHVl
LmNvbnRhaW5zKG5ld2xpbmVDaGFyYWN0ZXIpICYmICFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhj
YXJyaWFnZVJldHVybikpCi0gICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTsKLQotICAgIFZl
Y3RvcjxVQ2hhcj4gc3RyaXBwZWQ7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlVmFs
dWUubGVuZ3RoKCk7Ci0gICAgc3RyaXBwZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGNo
YXJhY3RlciA9IGF0dHJpYnV0ZVZhbHVlW2ldOwotICAgICAgICBpZiAoY2hhcmFjdGVyID09IG5l
d2xpbmVDaGFyYWN0ZXIgfHwgY2hhcmFjdGVyID09IGNhcnJpYWdlUmV0dXJuKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIHN0cmlwcGVkLmFwcGVuZChjaGFyYWN0ZXIpOwotICAgIH0K
LSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChzdHJpcHBlZCk7Ci19Ci0KLXN0YXRpYyBib29sIGlz
Tm90TGluZUJyZWFrKFVDaGFyIGNoKSB7IHJldHVybiBjaCAhPSBuZXdsaW5lQ2hhcmFjdGVyICYm
IGNoICE9IGNhcnJpYWdlUmV0dXJuOyB9Ci0KLWJvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6OmlzUGxhY2Vob2xkZXJFbXB0eSgpIGNvbnN0Ci17Ci0gICAgY29uc3QgQXRvbWljU3RyaW5n
JiBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpOwotICAgIHJl
dHVybiBhdHRyaWJ1dGVWYWx1ZS5zdHJpbmcoKS5maW5kKGlzTm90TGluZUJyZWFrKSA9PSBub3RG
b3VuZDsKLX0KLQotYm9vbCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGxhY2Vob2xkZXJT
aG91bGRCZVZpc2libGUoKSBjb25zdAotewotICAgIHJldHVybiBzdXBwb3J0c1BsYWNlaG9sZGVy
KCkKLSAgICAgICAgJiYgaXNFbXB0eVZhbHVlKCkKLSAgICAgICAgJiYgZG9jdW1lbnQoKS0+Zm9j
dXNlZE5vZGUoKSAhPSB0aGlzCi0gICAgICAgICYmICFpc1BsYWNlaG9sZGVyRW1wdHkoKTsKLX0K
LQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlUGxhY2Vob2xkZXJWaXNp
YmlsaXR5KGJvb2wgcGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQpCi17Ci0gICAgaWYgKHN1cHBvcnRz
UGxhY2Vob2xkZXIoKSAmJiByZW5kZXJlcigpKQotICAgICAgICB0b1JlbmRlclRleHRDb250cm9s
KHJlbmRlcmVyKCkpLT51cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkocGxhY2Vob2xkZXJTaG91
bGRCZVZpc2libGUoKSwgcGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQpOwotfQotCi1SZW5kZXJUZXh0
Q29udHJvbCogSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnRleHRSZW5kZXJlckFmdGVyVXBk
YXRlTGF5b3V0KCkKLXsKLSAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwotICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpOwotfQot
Ci12b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydChpbnQg
c3RhcnQpCi17Ci0gICAgc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIG1heChzdGFydCwgc2VsZWN0
aW9uRW5kKCkpKTsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2Vs
ZWN0aW9uRW5kKGludCBlbmQpCi17Ci0gICAgc2V0U2VsZWN0aW9uUmFuZ2UobWluKGVuZCwgc2Vs
ZWN0aW9uU3RhcnQoKSksIGVuZCk7Ci19Ci0KLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6OnNlbGVjdCgpCi17Ci0gICAgc2V0U2VsZWN0aW9uUmFuZ2UoMCwgbnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpOwotfQotCi12b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRT
ZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQpCi17Ci0gICAgV2ViQ29yZTo6c2V0U2Vs
ZWN0aW9uUmFuZ2UodGhpcywgc3RhcnQsIGVuZCk7Ci19Ci0KLWludCBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudDo6c2VsZWN0aW9uU3RhcnQoKSBjb25zdAotewotICAgIGlmICghaXNUZXh0Rm9y
bUNvbnRyb2woKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGRvY3VtZW50KCktPmZvY3Vz
ZWROb2RlKCkgIT0gdGhpcyAmJiBjYWNoZWRTZWxlY3Rpb25TdGFydCgpID49IDApCi0gICAgICAg
IHJldHVybiBjYWNoZWRTZWxlY3Rpb25TdGFydCgpOwotICAgIGlmICghcmVuZGVyZXIoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIo
KSktPnNlbGVjdGlvblN0YXJ0KCk7Ci19Ci0KLWludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6c2VsZWN0aW9uRW5kKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9
IHRoaXMgJiYgY2FjaGVkU2VsZWN0aW9uRW5kKCkgPj0gMCkKLSAgICAgICAgcmV0dXJuIGNhY2hl
ZFNlbGVjdGlvbkVuZCgpOwotICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbkVu
ZCgpOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKKyAg
ICBpZiAoIWVsZW1lbnQtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgICAgIC8v
IFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1vdmVkLiBXZSBuZWVkIHRvIHJlc2V0IGZvcm0gb3duZXIg
aGVyZS4KKyAgICAgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9y
bUVsZW1lbnQodGhpcyk7CisgICAgICAgIG1fZm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0
b3IoKTsKKyAgICAgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgICAgIGZvcm0oKS0+cmVnaXN0ZXJG
b3JtRWxlbWVudCh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzZXRGb3JtT3duZXIoMCk7
CiB9CiAKLVBhc3NSZWZQdHI8UmFuZ2U+IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxl
Y3Rpb24oKSBjb25zdAorY29uc3QgSFRNTEVsZW1lbnQqIHRvSFRNTEVsZW1lbnQoY29uc3QgRm9y
bUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVudCkKIHsKLSAgICBpZiAoIXJlbmRl
cmVyKCkgfHwgIWlzVGV4dEZvcm1Db250cm9sKCkgfHwgY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSA8
IDAgfHwgY2FjaGVkU2VsZWN0aW9uRW5kKCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c2VsZWN0aW9uKGNhY2hlZFNl
bGVjdGlvblN0YXJ0KCksIGNhY2hlZFNlbGVjdGlvbkVuZCgpKTsKKyAgICBpZiAoYXNzb2NpYXRl
ZEVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oYXNzb2NpYXRlZEVsZW1lbnQpOwor
ICAgIC8vIEFzc3VtZXMgdGhlIGVsZW1lbnQgaXMgYW4gSFRNTE9iamVjdEVsZW1lbnQKKyAgICBj
b25zdCBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxPYmplY3RF
bGVtZW50Kj4oYXNzb2NpYXRlZEVsZW1lbnQpOworICAgIEFTU0VSVChlbGVtZW50LT5oYXNUYWdO
YW1lKG9iamVjdFRhZykpOworICAgIHJldHVybiBlbGVtZW50OwogfQogCi12b2lkIEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CitIVE1MRWxlbWVudCogdG9IVE1MRWxlbWVudChGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGFzc29j
aWF0ZWRFbGVtZW50KQogewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcGxhY2Vob2xkZXJBdHRy
KQotICAgICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkodHJ1ZSk7Ci0gICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG9uc2VsZWN0QXR0cikKLSAgICAgICAgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIodGhpcywgYXR0cikpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNo
YW5nZUF0dHIpCi0gICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LmNoYW5nZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsK
LSAgICBlbHNlCi0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgIHJldHVybiBjb25zdF9jYXN0PEhUTUxFbGVtZW50
Kj4odG9IVE1MRWxlbWVudChzdGF0aWNfY2FzdDxjb25zdCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQq
Pihhc3NvY2lhdGVkRWxlbWVudCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViY29yZQpJbmRl
eDogV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAkocmV2aXNpb24gNzMwMDcpCShmcm9t
IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6NzMwMDcpCisrKyBXZWJDb3Jl
L2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKKyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnRfaAorI2RlZmluZSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKKworI2luY2x1
ZGUgIkhUTUxFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9ybURh
dGFMaXN0OworY2xhc3MgSFRNTEZvcm1FbGVtZW50OworY2xhc3MgUmVuZGVyVGV4dENvbnRyb2w7
CitjbGFzcyBWYWxpZGF0aW9uTWVzc2FnZTsKK2NsYXNzIFZhbGlkaXR5U3RhdGU7CitjbGFzcyBW
aXNpYmxlU2VsZWN0aW9uOworCisvLyBGSVhNRTogVGhlIEhUTUw1IHNwZWNpZmljYXRpb24gY2Fs
bHMgdGhlc2UgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzLgorLy8gU28gY29uc2lkZXIgcmVuYW1p
bmcgdGhpcyB0byBIVE1MRm9ybUFzc29jaWF0ZWRFbGVtZW50LgorY2xhc3MgSFRNTEZvcm1Db250
cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
SFRNTEZvcm1Db250cm9sRWxlbWVudCgpOworCisgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9mb3JtOyB9CisgICAgVmFsaWRpdHlTdGF0ZSogdmFsaWRpdHkoKTsK
KworICAgIGJvb2wgZm9ybU5vVmFsaWRhdGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBy
ZXNldCgpIHsgfQorCisgICAgdmlydHVhbCBib29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiKSB7IG1f
dmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hG
b3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CisKKyAgICBib29sIGRpc2FibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9kaXNhYmxlZDsgfQorICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVt
ZXJhdGFibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgLy8gRGV0ZXJtaW5lcyB3
aGV0aGVyIG9yIG5vdCBhIGNvbnRyb2wgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQuCisg
ICAgdmlydHVhbCBib29sIGF1dG9mb2N1cygpIGNvbnN0OworCisgICAgYm9vbCByZXF1aXJlZCgp
IGNvbnN0OworCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4g
Zm9ybUNvbnRyb2xUeXBlKCk7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25z
dCB7IHJldHVybiBmb3JtQ29udHJvbE5hbWUoKTsgfQorCisgICAgdm9pZCBzZXROYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkRm9ybUNv
bnRyb2woKSBjb25zdCB7IHJldHVybiAhZGlzYWJsZWQoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c1JlYWRPbmx5Rm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiByZWFkT25seSgpOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGNhblRyaWdnZXJJbXBsaWNpdFN1Ym1pc3Npb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgLy8gT3ZlcnJpZGUgaW4gZGVyaXZlZCBjbGFzc2VzIHRvIGdl
dCB0aGUgZW5jb2RlZCBuYW1lPXZhbHVlIHBhaXIgZm9yIHN1Ym1pdHRpbmcuCisgICAgLy8gUmV0
dXJuIHRydWUgZm9yIGEgc3VjY2Vzc2Z1bCBjb250cm9sIChzZWUgSFRNTDQtMTcuMTMuMikuCisg
ICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpIHsgcmV0
dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9u
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmF0ZWRT
dWJtaXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRBY3Rp
dmF0ZWRTdWJtaXQoYm9vbCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkg
Y29uc3Q7CisgICAgU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCk7CisgICAgdm9pZCB1cGRhdGVW
aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICB2b2lkIGhpZGVWaXNpYmxlVmFsaWRhdGlv
bk1lc3NhZ2UoKTsKKyAgICBib29sIGNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMgPSAwKTsKKyAgICAv
LyBUaGlzIG11c3QgYmUgY2FsbGVkIHdoZW4gYSB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgb3IgY29u
dHJvbCB2YWx1ZSBpcyBjaGFuZ2VkLgorICAgIHZvaWQgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7
CisgICAgdm9pZCBzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQg
Zm9ybURlc3Ryb3llZCgpIHsgbV9mb3JtID0gMDsgfQorCisgICAgYm9vbCBpc0xhYmVsYWJsZSgp
IGNvbnN0OworICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGxhYmVscygpOworICAgIAorICAgIGJv
b2wgcmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5OyB9CisKKyAgICB2b2lkIHJl
c2V0Rm9ybU93bmVyKEhUTUxGb3JtRWxlbWVudCopOworICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1
dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNscyA9IGZhbHNlKTsKKworcHJv
dGVjdGVkOgorICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoKCk7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBy
ZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1
c0V2ZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CisgICAgdmly
dHVhbCB2b2lkIGRldGFjaCgpOworCisgICAgdm9pZCByZW1vdmVGcm9tRm9ybSgpOworCisgICAg
Ly8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhbnkgdGltZSB0aGUgcmVzdWx0IG9mIHdpbGxWYWxpZGF0
ZSgpIGhhcyBjaGFuZ2VkLgorICAgIHZvaWQgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwor
ICAgIHZpcnR1YWwgYm9vbCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3Q7
CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0
ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHNob3J0IHRhYkluZGV4KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEhU
TUxGb3JtRWxlbWVudCogdmlydHVhbEZvcm0oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNE
ZWZhdWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkRm9y
bUNvbnRyb2xFbGVtZW50KCk7CisgICAgU3RyaW5nIHZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgp
IGNvbnN0OworCisgICAgSFRNTEZvcm1FbGVtZW50KiBtX2Zvcm07CisgICAgT3duUHRyPFZhbGlk
aXR5U3RhdGU+IG1fdmFsaWRpdHlTdGF0ZTsKKyAgICBPd25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+
IG1fdmFsaWRhdGlvbk1lc3NhZ2U7CisgICAgYm9vbCBtX2Rpc2FibGVkIDogMTsKKyAgICBib29s
IG1fcmVhZE9ubHkgOiAxOworICAgIGJvb2wgbV9yZXF1aXJlZCA6IDE7CisgICAgYm9vbCBtX3Zh
bHVlTWF0Y2hlc1JlbmRlcmVyIDogMTsKKworICAgIC8vIFRoZSBpbml0aWFsIHZhbHVlIG9mIG1f
d2lsbFZhbGlkYXRlIGRlcGVuZHMgb24gdGhlIGRlcml2ZWQgY2xhc3MuIFdlIGNhbid0CisgICAg
Ly8gaW5pdGlhbGl6ZSBpdCB3aXRoIGEgdmlydHVhbCBmdW5jdGlvbiBpbiB0aGUgY29uc3RydWN0
b3IuIG1fd2lsbFZhbGlkYXRlCisgICAgLy8gaXMgbm90IGRldGVybWluaXN0aWMgYXMgbG9uZyBh
cyBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkIGlzIGZhbHNlLgorICAgIG11dGFibGUgYm9vbCBt
X3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkOiAxOworICAgIG11dGFibGUgYm9vbCBtX3dpbGxWYWxp
ZGF0ZSA6IDE7CisKKyAgICAvLyBDYWNoZSBvZiB2YWxpZGl0eSgpLT52YWxpZCgpLgorICAgIC8v
IEJ1dCAiY2FuZGlkYXRlIGZvciBjb25zdHJhaW50IHZhbGlkYXRpb24iIGRvZXNuJ3QgYWZmZWN0
IG1faXNWYWxpZC4KKyAgICBib29sIG1faXNWYWxpZCA6IDE7Cit9OworCisvLyBGSVhNRTogR2l2
ZSB0aGlzIGNsYXNzIGl0cyBvd24gaGVhZGVyIGZpbGUuCitjbGFzcyBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlIDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoKTsKKworcHJv
dGVjdGVkOgorICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKKworICAgIHZp
cnR1YWwgYm9vbCBhdXRvQ29tcGxldGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCB3aWxs
TW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9OZXdP
d25lckRvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2F2ZUFuZFJlc3RvcmVG
b3JtQ29udHJvbFN0YXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdD
aGlsZHJlbigpOworfTsKKworLy8gRklYTUU6IEdpdmUgdGhpcyBjbGFzcyBpdHMgb3duIGhlYWRl
ciBmaWxlLgorY2xhc3MgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgOiBwdWJsaWMgSFRNTEZv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSB7CitwdWJsaWM6CisgICAgLy8gQ29tbW9uIGZsYWcg
Zm9yIEhUTUxJbnB1dEVsZW1lbnQ6OnRvb0xvbmcoKSBhbmQgSFRNTFRleHRBcmVhRWxlbWVudDo6
dG9vTG9uZygpLgorICAgIGVudW0gTmVlZHNUb0NoZWNrRGlydHlGbGFnIHtDaGVja0RpcnR5Rmxh
ZywgSWdub3JlRGlydHlGbGFnfTsKKworICAgIHZpcnR1YWwgfkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50KCk7CisKKyAgICAvLyBUaGUgZGVyaXZlZCBjbGFzcyBzaG91bGQgcmV0dXJuIHRydWUg
aWYgcGxhY2Vob2xkZXIgcHJvY2Vzc2luZyBpcyBuZWVkZWQuCisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzUGxhY2Vob2xkZXIoKSBjb25zdCA9IDA7CisgICAgU3RyaW5nIHN0cmlwcGVkUGxhY2Vo
b2xkZXIoKSBjb25zdDsKKyAgICBib29sIHBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxlKCkgY29u
c3Q7CisKKyAgICBpbnQgc2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKKyAgICBpbnQgc2VsZWN0aW9u
RW5kKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydChpbnQpOworICAgIHZvaWQg
c2V0U2VsZWN0aW9uRW5kKGludCk7CisgICAgdm9pZCBzZWxlY3QoKTsKKyAgICB2b2lkIHNldFNl
bGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCk7CisgICAgUGFzc1JlZlB0cjxSYW5nZT4g
c2VsZWN0aW9uKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGludCBtYXhMZW5ndGgoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoK
KyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKKworICAgIHZvaWQgdXBkYXRlUGxhY2Vob2xkZXJW
aXNpYmlsaXR5KGJvb2wpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSopOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvY3Vz
RXZlbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQoKTsKKworICAgIGJv
b2wgaXNQbGFjZWhvbGRlckVtcHR5KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGludCBjYWNoZWRT
ZWxlY3Rpb25TdGFydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBjYWNoZWRTZWxlY3Rp
b25FbmQoKSBjb25zdCA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdXNlci1lZGl0YWJs
ZSB2YWx1ZSBpcyBlbXB0eS4gVXNlZCB0byBjaGVjayBwbGFjZWhvbGRlciB2aXNpYmlsaXR5Lgor
ICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCA9IDA7CisgICAgLy8gQ2FsbGVk
IGluIGRpc3BhdGNoRm9jdXNFdmVudCgpLCBhZnRlciBwbGFjZWhvbGRlciBwcm9jZXNzLCBiZWZv
cmUgY2FsbGluZyBwYXJlbnQncyBkaXNwYXRjaEZvY3VzRXZlbnQoKS4KKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRm9jdXNFdmVudCgpIHsgfQorICAgIC8vIENhbGxlZCBpbiBkaXNwYXRjaEJsdXJF
dmVudCgpLCBhZnRlciBwbGFjZWhvbGRlciBwcm9jZXNzLCBiZWZvcmUgY2FsbGluZyBwYXJlbnQn
cyBkaXNwYXRjaEJsdXJFdmVudCgpLgorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCbHVyRXZlbnQo
KSB7IH0KKworICAgIFJlbmRlclRleHRDb250cm9sKiB0ZXh0UmVuZGVyZXJBZnRlclVwZGF0ZUxh
eW91dCgpOworfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0
bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5oCShyZXZpc2lvbiA3MzAwNykKKysrIFdlYkNvcmUvaHRtbC9G
b3JtQXNzb2NpYXRlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsOCArMjEsOCBAQAog
ICoKICAqLwogCi0jaWZuZGVmIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRfaAotI2RlZmluZSBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50X2gKKyNpZm5kZWYgRm9ybUFzc29jaWF0ZWRFbGVtZW50X2gKKyNk
ZWZpbmUgRm9ybUFzc29jaWF0ZWRFbGVtZW50X2gKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CiAKQEAgLTMwLDIwNCArMzAsNTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb3Jt
RGF0YUxpc3Q7CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJUZXh0Q29udHJv
bDsKIGNsYXNzIFZhbGlkYXRpb25NZXNzYWdlOwogY2xhc3MgVmFsaWRpdHlTdGF0ZTsKIGNsYXNz
IFZpc2libGVTZWxlY3Rpb247CiAKLS8vIEZJWE1FOiBUaGUgSFRNTDUgc3BlY2lmaWNhdGlvbiBj
YWxscyB0aGVzZSBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMuCi0vLyBTbyBjb25zaWRlciByZW5h
bWluZyB0aGlzIHRvIEhUTUxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuCi1jbGFzcyBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKK2NsYXNzIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+SFRNTEZvcm1Db250cm9sRWxlbWVudCgp
OworICAgIHZpcnR1YWwgfkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpOworCisgICAgdm9pZCByZWYo
KSB7IHJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpOyB9CisgICAgdm9pZCBkZXJlZigpIHsgZGVy
ZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsgfQogCiAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtOyB9CiAgICAgVmFsaWRpdHlTdGF0ZSogdmFsaWRpdHko
KTsKIAotICAgIGJvb2wgZm9ybU5vVmFsaWRhdGUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9p
ZCByZXNldCgpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVz
UmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiKSB7
IG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBiOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7Ci0KLSAgICBib29sIGRpc2FibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNhYmxlZDsgfQotICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNF
bnVtZXJhdGFibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVt
ZXJhdGFibGUoKSBjb25zdCA9IDA7CiAKLSAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90
IGEgY29udHJvbCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZC4KLSAgICB2aXJ0dWFsIGJv
b2wgYXV0b2ZvY3VzKCkgY29uc3Q7Ci0KLSAgICBib29sIHJlcXVpcmVkKCkgY29uc3Q7Ci0KLSAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBmb3JtQ29udHJvbFR5
cGUoKTsgfQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZv
cm1Db250cm9sTmFtZSgpOyB9CiAKLSAgICB2b2lkIHNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWRGb3JtQ29udHJvbCgpIGNvbnN0
IHsgcmV0dXJuICFkaXNhYmxlZCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUmVhZE9ubHlGb3Jt
Q29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHJlYWRPbmx5KCk7IH0KLQotICAgIHZpcnR1YWwgYm9v
bCBpc1JhZGlvQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgY2FuVHJpZ2dlckltcGxpY2l0U3VibWlzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0KICAgICAvLyBPdmVycmlkZSBpbiBkZXJpdmVkIGNsYXNzZXMgdG8gZ2V0IHRoZSBlbmNvZGVk
IG5hbWU9dmFsdWUgcGFpciBmb3Igc3VibWl0dGluZy4KICAgICAvLyBSZXR1cm4gdHJ1ZSBmb3Ig
YSBzdWNjZXNzZnVsIGNvbnRyb2wgKHNlZSBIVE1MNC0xNy4xMy4yKS4KICAgICB2aXJ0dWFsIGJv
b2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIHZpcnR1YWwgYm9vbCBpc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2YXRlZFN1Ym1pdCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEFjdGl2YXRlZFN1Ym1pdChi
b29sKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCB3aWxsVmFsaWRhdGUoKSBjb25zdDsKLSAgICBT
dHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICB2b2lkIHVwZGF0ZVZpc2libGVWYWxpZGF0
aW9uTWVzc2FnZSgpOwotICAgIHZvaWQgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwot
ICAgIGJvb2wgY2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scyA9IDApOwotICAgIC8vIFRoaXMgbXVzdCBi
ZSBjYWxsZWQgd2hlbiBhIHZhbGlkYXRpb24gY29uc3RyYWludCBvciBjb250cm9sIHZhbHVlIGlz
IGNoYW5nZWQuCi0gICAgdm9pZCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKLSAgICB2b2lkIHNl
dEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgdm9pZCBmb3JtRGVzdHJveWVk
KCkgeyBtX2Zvcm0gPSAwOyB9Ci0KLSAgICBib29sIGlzTGFiZWxhYmxlKCkgY29uc3Q7Ci0gICAg
UGFzc1JlZlB0cjxOb2RlTGlzdD4gbGFiZWxzKCk7Ci0gICAgCi0gICAgYm9vbCByZWFkT25seSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZm9ybURlc3Ry
b3llZCgpIHsgbV9mb3JtID0gMDsgfQogCiAgICAgdm9pZCByZXNldEZvcm1Pd25lcihIVE1MRm9y
bUVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUq
LCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CiAKIHByb3RlY3RlZDoKLSAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kiwg
SFRNTEZvcm1FbGVtZW50Kik7CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KEhUTUxGb3JtRWxl
bWVudCopOwogCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSopOwotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
ZWRJbnRvVHJlZShib29sIGRlZXApOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbVRyZWUo
Ym9vbCBkZWVwKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJv
YXJkRXZlbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNv
bnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvY3VzRXZlbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hCbHVyRXZlbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisgICAgdm9pZCBp
bnNlcnRlZEludG9UcmVlKCk7CisgICAgdm9pZCByZW1vdmVkRnJvbVRyZWUoKTsKIAorICAgIHZv
aWQgc2V0Rm9ybShIVE1MRm9ybUVsZW1lbnQqIGZvcm0pIHsgbV9mb3JtID0gZm9ybTsgfQogICAg
IHZvaWQgcmVtb3ZlRnJvbUZvcm0oKTsKLQotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYW55
IHRpbWUgdGhlIHJlc3VsdCBvZiB3aWxsVmFsaWRhdGUoKSBoYXMgY2hhbmdlZC4KLSAgICB2b2lk
IHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVjYWxjV2ls
bFZhbGlkYXRlKCkgY29uc3Q7CisgICAgdm9pZCBmb3JtQXR0cmlidXRlQ2hhbmdlZCgpOwogCiBw
cml2YXRlOgotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBl
KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzRm9ybUNvbnRyb2xFbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBm
b3JtQ29udHJvbE5hbWUoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNG
b2N1cygpIGNvbnN0OwotCi0gICAgdmlydHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0OwotCi0g
ICAgdmlydHVhbCBIVE1MRm9ybUVsZW1lbnQqIHZpcnR1YWxGb3JtKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpOwotICAgIFN0cmluZyB2aXNpYmxlVmFsaWRh
dGlvbk1lc3NhZ2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRm9ybUFzc29jaWF0ZWRF
bGVtZW50KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCgpID0gMDsKIAogICAgIEhUTUxGb3JtRWxlbWVudCogbV9mb3JtOwogICAgIE93blB0cjxWYWxp
ZGl0eVN0YXRlPiBtX3ZhbGlkaXR5U3RhdGU7Ci0gICAgT3duUHRyPFZhbGlkYXRpb25NZXNzYWdl
PiBtX3ZhbGlkYXRpb25NZXNzYWdlOwotICAgIGJvb2wgbV9kaXNhYmxlZCA6IDE7Ci0gICAgYm9v
bCBtX3JlYWRPbmx5IDogMTsKLSAgICBib29sIG1fcmVxdWlyZWQgOiAxOwotICAgIGJvb2wgbV92
YWx1ZU1hdGNoZXNSZW5kZXJlciA6IDE7Ci0KLSAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBvZiBt
X3dpbGxWYWxpZGF0ZSBkZXBlbmRzIG9uIHRoZSBkZXJpdmVkIGNsYXNzLiBXZSBjYW4ndAotICAg
IC8vIGluaXRpYWxpemUgaXQgd2l0aCBhIHZpcnR1YWwgZnVuY3Rpb24gaW4gdGhlIGNvbnN0cnVj
dG9yLiBtX3dpbGxWYWxpZGF0ZQotICAgIC8vIGlzIG5vdCBkZXRlcm1pbmlzdGljIGFzIGxvbmcg
YXMgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCBpcyBmYWxzZS4KLSAgICBtdXRhYmxlIGJvb2wg
bV93aWxsVmFsaWRhdGVJbml0aWFsaXplZDogMTsKLSAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFs
aWRhdGUgOiAxOwotCi0gICAgLy8gQ2FjaGUgb2YgdmFsaWRpdHkoKS0+dmFsaWQoKS4KLSAgICAv
LyBCdXQgImNhbmRpZGF0ZSBmb3IgY29uc3RyYWludCB2YWxpZGF0aW9uIiBkb2Vzbid0IGFmZmVj
dCBtX2lzVmFsaWQuCi0gICAgYm9vbCBtX2lzVmFsaWQgOiAxOwotfTsKLQotLy8gRklYTUU6IEdp
dmUgdGhpcyBjbGFzcyBpdHMgb3duIGhlYWRlciBmaWxlLgotY2xhc3MgSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZSA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCk7Ci0KLXBy
b3RlY3RlZDoKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgYXV0b0NvbXBsZXRlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2ls
bE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3
T3duZXJEb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50Kik7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFNhdmVBbmRSZXN0b3Jl
Rm9ybUNvbnRyb2xTdGF0ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5n
Q2hpbGRyZW4oKTsKIH07CiAKLS8vIEZJWE1FOiBHaXZlIHRoaXMgY2xhc3MgaXRzIG93biBoZWFk
ZXIgZmlsZS4KLWNsYXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgewotcHVibGljOgotICAgIC8vIENvbW1vbiBmbGFn
IGZvciBIVE1MSW5wdXRFbGVtZW50Ojp0b29Mb25nKCkgYW5kIEhUTUxUZXh0QXJlYUVsZW1lbnQ6
OnRvb0xvbmcoKS4KLSAgICBlbnVtIE5lZWRzVG9DaGVja0RpcnR5RmxhZyB7Q2hlY2tEaXJ0eUZs
YWcsIElnbm9yZURpcnR5RmxhZ307Ci0KLSAgICB2aXJ0dWFsIH5IVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCgpOwotCi0gICAgLy8gVGhlIGRlcml2ZWQgY2xhc3Mgc2hvdWxkIHJldHVybiB0cnVl
IGlmIHBsYWNlaG9sZGVyIHByb2Nlc3NpbmcgaXMgbmVlZGVkLgotICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c1BsYWNlaG9sZGVyKCkgY29uc3QgPSAwOwotICAgIFN0cmluZyBzdHJpcHBlZFBsYWNl
aG9sZGVyKCkgY29uc3Q7Ci0gICAgYm9vbCBwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpIGNv
bnN0OwotCi0gICAgaW50IHNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7Ci0gICAgaW50IHNlbGVjdGlv
bkVuZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50KTsKLSAgICB2b2lk
IHNldFNlbGVjdGlvbkVuZChpbnQpOwotICAgIHZvaWQgc2VsZWN0KCk7Ci0gICAgdm9pZCBzZXRT
ZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQpOwotICAgIFBhc3NSZWZQdHI8UmFuZ2U+
IHNlbGVjdGlvbigpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgbWF4TGVuZ3RoKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOwotCi1wcm90ZWN0ZWQ6
Ci0gICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7Ci0KLSAgICB2b2lkIHVwZGF0ZVBsYWNlaG9sZGVy
VmlzaWJpbGl0eShib29sKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShBdHRyaWJ1dGUqKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1
c0V2ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7Ci0KLSAgICBi
b29sIGlzUGxhY2Vob2xkZXJFbXB0eSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgY2FjaGVk
U2VsZWN0aW9uU3RhcnQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0
aW9uRW5kKCkgY29uc3QgPSAwOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHVzZXItZWRpdGFi
bGUgdmFsdWUgaXMgZW1wdHkuIFVzZWQgdG8gY2hlY2sgcGxhY2Vob2xkZXIgdmlzaWJpbGl0eS4K
LSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgPSAwOwotICAgIC8vIENhbGxl
ZCBpbiBkaXNwYXRjaEZvY3VzRXZlbnQoKSwgYWZ0ZXIgcGxhY2Vob2xkZXIgcHJvY2VzcywgYmVm
b3JlIGNhbGxpbmcgcGFyZW50J3MgZGlzcGF0Y2hGb2N1c0V2ZW50KCkuCi0gICAgdmlydHVhbCB2
b2lkIGhhbmRsZUZvY3VzRXZlbnQoKSB7IH0KLSAgICAvLyBDYWxsZWQgaW4gZGlzcGF0Y2hCbHVy
RXZlbnQoKSwgYWZ0ZXIgcGxhY2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcgcGFyZW50
J3MgZGlzcGF0Y2hCbHVyRXZlbnQoKS4KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQmx1ckV2ZW50
KCkgeyB9Ci0KLSAgICBSZW5kZXJUZXh0Q29udHJvbCogdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVM
YXlvdXQoKTsKLX07CitIVE1MRWxlbWVudCogdG9IVE1MRWxlbWVudChGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQqKTsKK2NvbnN0IEhUTUxFbGVtZW50KiB0b0hUTUxFbGVtZW50KGNvbnN0IEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudCopOwogCiB9IC8vIG5hbWVzcGFjZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBG
b3JtQXNzb2NpYXRlZEVsZW1lbnRfaApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHJldmlzaW9uIDczMzUy
KQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYg
KzgyLDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYWRkSFRNTEFsaWdubWVudFRvU3R5
bGVkRWxlbWVudChTdHlsZWRFbGVtZW50KiwgQXR0cmlidXRlKik7CiAKKyAgICBIVE1MRm9ybUVs
ZW1lbnQqIGZpbmRGb3JtQW5jZXN0b3IoKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIEhUTUxF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CiAKQEAgLTkw
LDggKzkyLDYgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7
CiAKLSAgICBIVE1MRm9ybUVsZW1lbnQqIGZpbmRGb3JtQW5jZXN0b3IoKSBjb25zdDsKLQogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAkocmV2aXNpb24gNzMzNTIpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTIgKzc4LDEy
IEBAIE5vZGUqIEhUTUxGb3JtQ29sbGVjdGlvbjo6aXRlbSh1bnNpZ25lZCAKICAgICAgICAgaW5m
bygpLT5lbGVtZW50c0FycmF5UG9zaXRpb24gPSAwOwogICAgIH0KIAotICAgIFZlY3RvcjxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Kj4mIGVsZW1lbnRzQXJyYXkgPSBzdGF0aWNfY2FzdDxIVE1MRm9y
bUVsZW1lbnQqPihiYXNlKCkpLT5tX2Fzc29jaWF0ZWRFbGVtZW50czsKKyAgICBWZWN0b3I8Rm9y
bUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzQXJyYXkgPSBzdGF0aWNfY2FzdDxIVE1MRm9y
bUVsZW1lbnQqPihiYXNlKCkpLT5tX2Fzc29jaWF0ZWRFbGVtZW50czsKICAgICB1bnNpZ25lZCBj
dXJyZW50SW5kZXggPSBpbmZvKCktPnBvc2l0aW9uOwogICAgIAogICAgIGZvciAodW5zaWduZWQg
aSA9IGluZm8oKS0+ZWxlbWVudHNBcnJheVBvc2l0aW9uOyBpIDwgZWxlbWVudHNBcnJheS5zaXpl
KCk7IGkrKykgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50ID0gZWxl
bWVudHNBcnJheVtpXTsKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzRW51bWVyYXRhYmxlKCkpIHsK
KyAgICAgICAgaWYgKGVsZW1lbnRzQXJyYXlbaV0tPmlzRW51bWVyYXRhYmxlKCkpIHsKKyAgICAg
ICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChlbGVtZW50c0FycmF5
W2ldKTsKICAgICAgICAgICAgIGlmIChpbmRleCA9PSBjdXJyZW50SW5kZXgpIHsKICAgICAgICAg
ICAgICAgICBpbmZvKCktPnBvc2l0aW9uID0gaW5kZXg7CiAgICAgICAgICAgICAgICAgaW5mbygp
LT5jdXJyZW50ID0gZWxlbWVudDsKQEAgLTExMCwyMSArMTEwLDIyIEBAIEVsZW1lbnQqIEhUTUxG
b3JtQ29sbGVjdGlvbjo6Z2V0TmFtZWRGb3IKIAogICAgIGJvb2wgZm91bmRJbnB1dEVsZW1lbnRz
ID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPm1fYXNzb2NpYXRl
ZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
IGUgPSBmb3JtLT5tX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGUtPmlzRW51
bWVyYXRhYmxlKCkgJiYgZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7CisgICAg
ICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW1lbnQgPSBmb3JtLT5tX2Fz
c29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hU
TUxFbGVtZW50KGFzc29jaWF0ZWRFbGVtZW50KTsKKyAgICAgICAgaWYgKGFzc29jaWF0ZWRFbGVt
ZW50LT5pc0VudW1lcmF0YWJsZSgpICYmIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkg
PT0gbmFtZSkgewogICAgICAgICAgICAgZm91bmRJbnB1dEVsZW1lbnRzID0gdHJ1ZTsKICAgICAg
ICAgICAgIGlmICghZHVwbGljYXRlTnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiBlOwor
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICAgICAgLS1kdXBsaWNhdGVO
dW1iZXI7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIWZvdW5kSW5wdXRFbGVtZW50cykg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+bV9pbWFnZUVsZW1lbnRz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBlID0gZm9ybS0+
bV9pbWFnZUVsZW1lbnRzW2ldOwotICAgICAgICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShhdHRy
TmFtZSkgPT0gbmFtZSkgeworICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogZWxlbWVudCA9
IGZvcm0tPm1faW1hZ2VFbGVtZW50c1tpXTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5nZXRB
dHRyaWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpIHsKICAgICAgICAgICAgICAgICBpZiAoIWR1cGxp
Y2F0ZU51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICAgICAgICAgIC0tZHVwbGljYXRlTnVtYmVy
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xOTEsMTAgKzE5MiwxMSBAQCB2b2lkIEhU
TUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAgICAgSFRNTEZvcm1FbGVtZW50KiBm
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYmFzZSgpKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmLT5tX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlID0gZi0+bV9hc3NvY2lhdGVkRWxlbWVu
dHNbaV07Ci0gICAgICAgIGlmIChlLT5pc0VudW1lcmF0YWJsZSgpKSB7Ci0gICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldElkQXR0cmlidXRlKCk7Ci0gICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRl
KG5hbWVBdHRyKTsKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxl
bWVudCA9IGYtPm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBpZiAoYXNzb2NpYXRl
ZEVsZW1lbnQtPmlzRW51bWVyYXRhYmxlKCkpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBl
bGVtZW50ID0gdG9IVE1MRWxlbWVudChhc3NvY2lhdGVkRWxlbWVudCk7CisgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7
CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZWxlbWVudC0+
Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKICAgICAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgIC8vIGFkZCB0byBpZCBjYWNoZQogICAgICAgICAgICAg
ICAgIFZlY3RvcjxFbGVtZW50Kj4qIGlkVmVjdG9yID0gaW5mbygpLT5pZENhY2hlLmdldChpZEF0
dHJWYWwuaW1wbCgpKTsKQEAgLTIwMiw3ICsyMDQsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlv
bjo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAgICAgICAgICAgICAgIGlkVmVjdG9yID0gbmV3IFZl
Y3RvcjxFbGVtZW50Kj47CiAgICAgICAgICAgICAgICAgICAgIGluZm8oKS0+aWRDYWNoZS5hZGQo
aWRBdHRyVmFsLmltcGwoKSwgaWRWZWN0b3IpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpZFZlY3Rvci0+YXBwZW5kKGUpOworICAgICAgICAgICAgICAgIGlkVmVjdG9yLT5h
cHBlbmQoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgZm91bmRJbnB1dEVsZW1lbnRzLmFkZChp
ZEF0dHJWYWwuaW1wbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghbmFtZUF0
dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1lQXR0clZhbCkgewpAQCAtMjEyLDE2
ICsyMTQsMTYgQEAgdm9pZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAg
ICAgICAgICAgICAgICAgICBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcjxFbGVtZW50Kj47CiAgICAg
ICAgICAgICAgICAgICAgIGluZm8oKS0+bmFtZUNhY2hlLmFkZChuYW1lQXR0clZhbC5pbXBsKCks
IG5hbWVWZWN0b3IpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lVmVj
dG9yLT5hcHBlbmQoZSk7CisgICAgICAgICAgICAgICAgbmFtZVZlY3Rvci0+YXBwZW5kKGVsZW1l
bnQpOwogICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cy5hZGQobmFtZUF0dHJWYWwu
aW1wbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmLT5tX2ltYWdlRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgSFRNTEltYWdlRWxlbWVudCogZSA9IGYtPm1faW1hZ2VFbGVtZW50c1tpXTsKLSAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRJZEF0dHJpYnV0ZSgpOwotICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5h
bWVBdHRyKTsKKyAgICAgICAgSFRNTEltYWdlRWxlbWVudCogZWxlbWVudCA9IGYtPm1faW1hZ2VF
bGVtZW50c1tpXTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlbGVt
ZW50LT5nZXRJZEF0dHJpYnV0ZSgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVB
dHRyVmFsID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKICAgICAgICAgaWYgKCFp
ZEF0dHJWYWwuaXNFbXB0eSgpICYmICFmb3VuZElucHV0RWxlbWVudHMuY29udGFpbnMoaWRBdHRy
VmFsLmltcGwoKSkpIHsKICAgICAgICAgICAgIC8vIGFkZCB0byBpZCBjYWNoZQogICAgICAgICAg
ICAgVmVjdG9yPEVsZW1lbnQqPiogaWRWZWN0b3IgPSBpbmZvKCktPmlkQ2FjaGUuZ2V0KGlkQXR0
clZhbC5pbXBsKCkpOwpAQCAtMjI5LDcgKzIzMSw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9u
Ojp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgICAgICAgICBpZFZlY3RvciA9IG5ldyBWZWN0b3I8
RWxlbWVudCo+OwogICAgICAgICAgICAgICAgIGluZm8oKS0+aWRDYWNoZS5hZGQoaWRBdHRyVmFs
LmltcGwoKSwgaWRWZWN0b3IpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWRWZWN0b3It
PmFwcGVuZChlKTsKKyAgICAgICAgICAgIGlkVmVjdG9yLT5hcHBlbmQoZWxlbWVudCk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9
IG5hbWVBdHRyVmFsICYmICFmb3VuZElucHV0RWxlbWVudHMuY29udGFpbnMobmFtZUF0dHJWYWwu
aW1wbCgpKSkgewogICAgICAgICAgICAgLy8gYWRkIHRvIG5hbWUgY2FjaGUKQEAgLTIzOCw3ICsy
NDAsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAg
ICAgICAgICAgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3I8RWxlbWVudCo+OwogICAgICAgICAgICAg
ICAgIGluZm8oKS0+bmFtZUNhY2hlLmFkZChuYW1lQXR0clZhbC5pbXBsKCksIG5hbWVWZWN0b3Ip
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbmFtZVZlY3Rvci0+YXBwZW5kKGUpOworICAg
ICAgICAgICAgbmFtZVZlY3Rvci0+YXBwZW5kKGVsZW1lbnQpOwogICAgICAgICB9CiAgICAgfQog
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3
MzM1MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQog
ICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2Zvcm0oZm9ybSkK
KyAgICAsIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChmb3JtKQogICAgICwgbV9kaXNhYmxlZChmYWxz
ZSkKICAgICAsIG1fcmVhZE9ubHkoZmFsc2UpCiAgICAgLCBtX3JlcXVpcmVkKGZhbHNlKQpAQCAt
NjYsMTYgKzY2LDE2IEBAIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEUK
ICAgICAsIG1fd2lsbFZhbGlkYXRlKHRydWUpCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKIHsKLSAg
ICBpZiAoIW1fZm9ybSkKLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwotICAg
IGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsK
KyAgICBpZiAoIXRoaXMtPmZvcm0oKSkKKyAgICAgICAgc2V0Rm9ybShmaW5kRm9ybUFuY2VzdG9y
KCkpOworICAgIGlmICh0aGlzLT5mb3JtKCkpCisgICAgICAgIHRoaXMtPmZvcm0oKS0+cmVnaXN0
ZXJGb3JtRWxlbWVudCh0aGlzKTsKIH0KIAogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxG
b3JtQ29udHJvbEVsZW1lbnQoKQogewotICAgIGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+
cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAgaWYgKGZvcm0oKSkKKyAgICAgICAgZm9ybSgp
LT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpkZXRhY2goKQpAQCAtODksMTQgKzg5LDYgQEAgYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Ojpmb3JtTm9WYWxpZAogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGZvcm1ub3ZhbGlkYXRl
QXR0cikuaXNOdWxsKCk7CiB9CiAKLVZhbGlkaXR5U3RhdGUqIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnZhbGlkaXR5KCkKLXsKLSAgICBpZiAoIW1fdmFsaWRpdHlTdGF0ZSkKLSAgICAgICAgbV92
YWxpZGl0eVN0YXRlID0gVmFsaWRpdHlTdGF0ZTo6Y3JlYXRlKHRoaXMpOwotCi0gICAgcmV0dXJu
IG1fdmFsaWRpdHlTdGF0ZS5nZXQoKTsKLX0KLQogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIpIHsKQEAgLTE1NCw1MSArMTQ2LDE2IEBAIHZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKIHsKLSAgICBpZiAoZmFzdEhhc0F0dHJp
YnV0ZShmb3JtQXR0cikpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVu
dFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOwotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG9j
dW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZmFzdEdldEF0dHJpYnV0ZShmb3JtQXR0cikpOwotICAg
ICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpKSB7Ci0gICAg
ICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVs
ZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVs
ZW1lbnQqPihlbGVtZW50KTsKLSAgICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVu
dCh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIW1fZm9ybSkgewotICAgICAgICAv
LyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgYSBuZXcgZm9ybSBlbGVtZW50IGJlaW5nIGNyZWF0
ZWQgYnkKLSAgICAgICAgLy8gSmF2YVNjcmlwdCBhbmQgaW5zZXJ0ZWQgaW5zaWRlIGEgZm9ybS4g
IEluIHRoZSBjYXNlIG9mIHRoZSBwYXJzZXIKLSAgICAgICAgLy8gc2V0dGluZyBhIGZvcm0sIHdl
IHdpbGwgYWxyZWFkeSBoYXZlIGEgbm9uLW51bGwgdmFsdWUgZm9yIG1fZm9ybSwgCi0gICAgICAg
IC8vIGFuZCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgICAgICBtX2Zvcm0g
PSBmaW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgICAgIGlmIChtX2Zvcm0pCi0gICAgICAgICAgICBt
X2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Ci0g
ICAgfQorICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSgpOworICAg
IGlmICghZm9ybSgpKQorICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCku
YWRkQnV0dG9uKHRoaXMpOwogCiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoZGVl
cCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgTm9kZSogZmluZFJvb3QoTm9kZSogbikKLXsKLSAgICBO
b2RlKiByb290ID0gbjsKLSAgICBmb3IgKDsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkKLSAgICAg
ICAgcm9vdCA9IG47Ci0gICAgcmV0dXJuIHJvb3Q7Ci19Ci0KIHZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkKIHsKLSAgICBpZiAoZmFzdEhhc0F0
dHJpYnV0ZShmb3JtQXR0cikpCi0gICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxl
bWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMpOwotCi0gICAgLy8gSWYgdGhlIGZvcm0gYW5kIGVs
ZW1lbnQgYXJlIGJvdGggaW4gdGhlIHNhbWUgdHJlZSwgcHJlc2VydmUgdGhlIGNvbm5lY3Rpb24g
dG8gdGhlIGZvcm0uCi0gICAgLy8gT3RoZXJ3aXNlLCBudWxsIG91dCBvdXIgZm9ybSBhbmQgcmVt
b3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBmb3JtJ3MgbGlzdCBvZiBlbGVtZW50cy4KLSAgICBpZiAo
bV9mb3JtICYmIGZpbmRSb290KHRoaXMpICE9IGZpbmRSb290KG1fZm9ybSkpIHsKLSAgICAgICAg
bV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgbV9mb3JtID0gMDsKLSAg
ICB9Ci0KKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSgpOwogICAg
IEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoZGVlcCk7CiB9CiAKQEAgLTI1NCw3ICsyMTEs
NyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlY2FsY1N0eWxlCiAKIGJvb2wgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
ICFkaXNhYmxlZCgpOworICAgIHJldHVybiAhbV9kaXNhYmxlZDsKIH0KIAogYm9vbCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CkBAIC0zNjYsNyArMzIzLDcgQEAg
U3RyaW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpc2libGVWYQogICAgIHJldHVybiBtX3Zh
bGlkYXRpb25NZXNzYWdlID8gbV92YWxpZGF0aW9uTWVzc2FnZS0+bWVzc2FnZSgpIDogU3RyaW5n
KCk7CiB9CiAKLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0
b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250
cm9scykKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0b3I8
UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xz
KQogewogICAgIGlmICghd2lsbFZhbGlkYXRlKCkgfHwgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVu
dCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQwOCw3ICszNjUsNyBAQCB2b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnNldEN1c3RvbVZhCiB7CiAgICAgdmFsaWRpdHkoKS0+c2V0Q3Vz
dG9tRXJyb3JNZXNzYWdlKGVycm9yKTsKIH0KLSAgICAKKwogdm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKQogewogICAgIGlmIChkb2N1bWVudCgpLT5wYWdl
KCkpCkBAIC00MjgsNjQgKzM4NSwyMiBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRp
c3BhdGNoQmx1CiAKIEhUTUxGb3JtRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmly
dHVhbEZvcm0oKSBjb25zdAogewotICAgIHJldHVybiBtX2Zvcm07CisgICAgcmV0dXJuIEZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6Zm9ybSgpOwogfQogCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdAogewotICAgIHJldHVybiBpc1N1Y2Nl
c3NmdWxTdWJtaXRCdXR0b24oKSAmJiBtX2Zvcm0gJiYgbV9mb3JtLT5kZWZhdWx0QnV0dG9uKCkg
PT0gdGhpczsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVGcm9tRm9y
bSgpCi17Ci0gICAgaWYgKCFtX2Zvcm0pCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Zvcm0tPnJl
bW92ZUZvcm1FbGVtZW50KHRoaXMpOwotICAgIG1fZm9ybSA9IDA7Ci19Ci0KLXZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQot
ewotICAgIGlmIChtX2Zvcm0pIHsKLSAgICAgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKGZvcm1B
dHRyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxl
bWVudCh0aGlzKTsKLSAgICB9Ci0gICAgbV9mb3JtID0gMDsKLSAgICBpZiAoZmFzdEhhc0F0dHJp
YnV0ZShmb3JtQXR0cikpIHsKLSAgICAgICAgLy8gVGhlIEhUTUw1IHNwZWMgc2F5cyB0aGF0IHRo
ZSBlbGVtZW50IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgICAgLy8gdGhlIGZpcnN0
IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IHRvIGhhdmUgYW4gSUQgdGhhdCBlcXVhbCB0bwotICAg
ICAgICAvLyB0aGUgdmFsdWUgb2YgZm9ybSBhdHRyaWJ1dGUsIHNvIHdlIHB1dCB0aGUgcmVzdWx0
IG9mCi0gICAgICAgIC8vIGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKCkgb3ZlciB0aGUgZ2l2
ZW4gZWxlbWVudC4KLSAgICAgICAgRWxlbWVudCogZmlyc3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+
Z2V0RWxlbWVudEJ5SWQoZmFzdEdldEF0dHJpYnV0ZShmb3JtQXR0cikpOwotICAgICAgICBpZiAo
Zmlyc3RFbGVtZW50ICYmIGZpcnN0RWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKLSAgICAg
ICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVu
dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZm9ybSA9IGZvcm07Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICBpZiAobV9mb3JtKQot
ICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgZWxzZQotICAg
ICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwor
ICAgIHJldHVybiBpc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSAmJiBmb3JtKCkgJiYgZm9ybSgp
LT5kZWZhdWx0QnV0dG9uKCkgPT0gdGhpczsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xz
KQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybUF0dHIpIHsKLSAgICAgICAgaWYgKCFm
YXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgewotICAgICAgICAgICAgLy8gVGhlIGZvcm0gYXR0
cmlidXRlIHJlbW92ZWQuIFdlIG5lZWQgdG8gcmVzZXQgZm9ybSBvd25lciBoZXJlLgotICAgICAg
ICAgICAgaWYgKG1fZm9ybSkKLSAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVt
ZW50KHRoaXMpOwotICAgICAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwotICAg
ICAgICAgICAgaWYgKG1fZm9ybSkKLSAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9y
bUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZG9jdW1l
bnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICByZXNldEZvcm1Pd25lcigwKTsKLSAgICB9Ci0gICAgSFRNTEVsZW1l
bnQ6OmF0dHJpYnV0ZUNoYW5nZWQoYXR0ciwgcHJlc2VydmVEZWNscyk7CisgICAgICAgIGZvcm1B
dHRyaWJ1dGVDaGFuZ2VkKCk7CisgICAgICAgIGlmICghZm9ybSgpKQorICAgICAgICAgICAgZG9j
dW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgSFRNTEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoYXR0ciwgcHJlc2VydmVE
ZWNscyk7CiB9CiAKIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNMYWJlbGFibGUoKSBj
b25zdApAQCAtNTE2LDcgKzQzMSw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IEhUTUxGb3JtQ29u
dHJvbEVsZW0KICAgICAKICAgICByZXR1cm4gTGFiZWxzTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzKTsK
IH0KLSAgICAKKwogSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6SFRNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCiAgICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KHRhZ05hbWUsIGRvYywgZikKIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuaAkocmV2aXNpb24gNzMzNTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZuZGVmIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnRfaAogI2RlZmluZSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKIAorI2lu
Y2x1ZGUgIkZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM1LDE0ICszNiwxNCBAQCBjbGFzcyBWYWxpZGF0
aW9uTWVzc2FnZTsKIGNsYXNzIFZhbGlkaXR5U3RhdGU7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9u
OwogCi0vLyBGSVhNRTogVGhlIEhUTUw1IHNwZWNpZmljYXRpb24gY2FsbHMgdGhlc2UgZm9ybS1h
c3NvY2lhdGVkIGVsZW1lbnRzLgotLy8gU28gY29uc2lkZXIgcmVuYW1pbmcgdGhpcyB0byBIVE1M
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LgotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudCB7CisvLyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IGlzIHRoZSBkZWZh
dWx0IGltcGxlbWVudGF0aW9uIG9mIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCwKKy8vIGFuZCBmb3Jt
LWFzc29jaWF0ZWQgZWxlbWVudCBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHVzZSBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50CisvLyB1bmxlc3MgdGhlcmUgaXMgYSBzcGVjaWFsIHJlYXNvbi4KK2NsYXNz
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQoKTsKIAotICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9ybTsgfQotICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlkaXR5KCk7CisgICAgSFRNTEZvcm1F
bGVtZW50KiBmb3JtKCkgY29uc3QgeyByZXR1cm4gRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3Jt
KCk7IH0KIAogICAgIGJvb2wgZm9ybU5vVmFsaWRhdGUoKSBjb25zdDsKIApAQCAtNTMsNyArNTQs
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5n
ZUV2ZW50KCk7CiAKLSAgICBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxl
ZDsgfQorICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJs
ZWQ7IH0KICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwogCiAgICAgdmlydHVhbCBib29sIGlz
Rm9jdXNhYmxlKCkgY29uc3Q7CkBAIC02NSw3ICs2Niw2IEBAIHB1YmxpYzoKICAgICBib29sIHJl
cXVpcmVkKCkgY29uc3Q7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdCB7
IHJldHVybiBmb3JtQ29udHJvbFR5cGUoKTsgfQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1Db250cm9sTmFtZSgpOyB9CiAKICAgICB2b2lkIHNldE5h
bWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKIApAQCAtODcsMjEgKzg3LDIxIEBAIHB1Ymxp
YzoKICAgICBTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2UoKTsKICAgICB2b2lkIHVwZGF0ZVZpc2li
bGVWYWxpZGF0aW9uTWVzc2FnZSgpOwogICAgIHZvaWQgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVz
c2FnZSgpOwotICAgIGJvb2wgY2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scyA9IDApOworICAgIGJvb2wg
Y2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiogdW5o
YW5kbGVkSW52YWxpZENvbnRyb2xzID0gMCk7CiAgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCB3
aGVuIGEgdmFsaWRhdGlvbiBjb25zdHJhaW50IG9yIGNvbnRyb2wgdmFsdWUgaXMgY2hhbmdlZC4K
ICAgICB2b2lkIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogICAgIHZvaWQgc2V0Q3VzdG9tVmFs
aWRpdHkoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2b2lkIGZvcm1EZXN0cm95ZWQoKSB7IG1fZm9y
bSA9IDA7IH0KLQogICAgIGJvb2wgaXNMYWJlbGFibGUoKSBjb25zdDsKICAgICBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBsYWJlbHMoKTsKLSAgICAKKwogICAgIGJvb2wgcmVhZE9ubHkoKSBjb25zdCB7
IHJldHVybiBtX3JlYWRPbmx5OyB9CiAKLSAgICB2b2lkIHJlc2V0Rm9ybU93bmVyKEhUTUxGb3Jt
RWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSos
IGJvb2wgcHJlc2VydmVEZWNscyA9IGZhbHNlKTsKIAorICAgIHVzaW5nIFRyZWVTaGFyZWQ8Q29u
dGFpbmVyTm9kZT46OnJlZjsKKyAgICB1c2luZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+Ojpk
ZXJlZjsKKwogcHJvdGVjdGVkOgogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKIApAQCAt
MTE5LDggKzExOSw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hCbHVy
RXZlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAKLSAgICB2b2lkIHJlbW92ZUZy
b21Gb3JtKCk7Ci0KICAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFueSB0aW1lIHRoZSByZXN1
bHQgb2Ygd2lsbFZhbGlkYXRlKCkgaGFzIGNoYW5nZWQuCiAgICAgdm9pZCBzZXROZWVkc1dpbGxW
YWxpZGF0ZUNoZWNrKCk7CiAgICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNv
bnN0OwpAQCAtMTI5LDYgKzEyNyw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCA9IDA7CiAKKyAgICB2aXJ0dWFsIHZv
aWQgcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpIHsgZGVyZWYoKTsgfQorCiAgICAgdmlydHVh
bCBib29sIGlzRm9ybUNvbnRyb2xFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKQEAgLTE0MCw4ICsxNDEsNiBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCk7
CiAgICAgU3RyaW5nIHZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0OwogCi0gICAgSFRN
TEZvcm1FbGVtZW50KiBtX2Zvcm07Ci0gICAgT3duUHRyPFZhbGlkaXR5U3RhdGU+IG1fdmFsaWRp
dHlTdGF0ZTsKICAgICBPd25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+IG1fdmFsaWRhdGlvbk1lc3Nh
Z2U7CiAgICAgYm9vbCBtX2Rpc2FibGVkIDogMTsKICAgICBib29sIG1fcmVhZE9ubHkgOiAxOwpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDczMzUyKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzks
MTAgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdEltcGxpY2l0bHkoRQogewogICAgIGlu
dCBzdWJtaXNzaW9uVHJpZ2dlckNvdW50ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKKyAg
ICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBmb3JtQXNzb2NpYXRlZEVsZW1lbnQgPSBtX2Fz
c29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFmb3JtQXNzb2NpYXRlZEVsZW1lbnQt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Kj4oZm9ybUFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAgICAgaWYgKGZv
cm1FbGVtZW50LT5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSkgewogICAgICAgICAgICAgaWYg
KGZvcm1FbGVtZW50LT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAgICAgZm9ybUVsZW1lbnQt
PmRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soZXZlbnQpOwpAQCAtMjEzLDEwICsyMTYsMTIgQEAgYm9v
bCBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdgogICAgIGlmIChzdWJtaXRFbGVt
ZW50ICYmIHN1Ym1pdEVsZW1lbnQtPmZvcm1Ob1ZhbGlkYXRlKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRz
LnNpemUoKTsgKytpKQotICAgICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+aGlkZVZpc2li
bGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fz
c29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hc3NvY2lhdGVk
RWxlbWVudHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLT5o
aWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7CisgICAgfQogCi0gICAgVmVjdG9yPFJlZlB0
cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+IHVuaGFuZGxlZEludmFsaWRDb250cm9sczsKKyAg
ICBWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiB1bmhhbmRsZWRJbnZhbGlk
Q29udHJvbHM7CiAgICAgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyh1bmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHMpOwogICAgIGlmICh1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIyNSw3ICsyMzAsOCBAQCBib29sIEhUTUxG
b3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2CiAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVu
dD4gcHJvdGVjdG9yKHRoaXMpOwogICAgIC8vIEZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUg
Y29udHJvbCBhbmQgc2hvdyBhIHZhbGlkYXRpb24gbWVzc2FnZS4KICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIHVuaGFuZGxlZCA9IHVuaGFuZGxlZEludmFsaWRD
b250cm9sc1tpXS5nZXQoKTsKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiB1bmhhbmRs
ZWRBc3NvY2lhdGVkRWxlbWVudCA9IHVuaGFuZGxlZEludmFsaWRDb250cm9sc1tpXS5nZXQoKTsK
KyAgICAgICAgSFRNTEVsZW1lbnQqIHVuaGFuZGxlZCA9IHRvSFRNTEVsZW1lbnQodW5oYW5kbGVk
QXNzb2NpYXRlZEVsZW1lbnQpOwogICAgICAgICBpZiAodW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgp
ICYmIHVuaGFuZGxlZC0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8RG9jdW1l
bnQ+IG9yaWdpbmFsRG9jdW1lbnQodW5oYW5kbGVkLT5kb2N1bWVudCgpKTsKICAgICAgICAgICAg
IHVuaGFuZGxlZC0+c2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7CkBAIC0yMzQsNyArMjQw
LDggQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdgogICAgICAgICAg
ICAgLy8gbW92ZWQgdG8gYW5vdGhlciBkb2N1bWVudC4KICAgICAgICAgICAgIGlmICh1bmhhbmRs
ZWQtPmlzRm9jdXNhYmxlKCkgJiYgdW5oYW5kbGVkLT5pbkRvY3VtZW50KCkgJiYgb3JpZ2luYWxE
b2N1bWVudCA9PSB1bmhhbmRsZWQtPmRvY3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICB1bmhh
bmRsZWQtPmZvY3VzKCk7Ci0gICAgICAgICAgICAgICAgdW5oYW5kbGVkLT51cGRhdGVWaXNpYmxl
VmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICAgICAgICAgICAgICBpZiAodW5oYW5kbGVkLT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Kj4odW5oYW5kbGVkKS0+dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25N
ZXNzYWdlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTI0MiwxMSArMjQ5LDEyIEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUlu
dGVyYWN0aXYKICAgICAvLyBXYXJuIGFib3V0IGFsbCBvZiB1bmZvY3VzYWJsZSBjb250cm9scy4K
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiB1bmhhbmRsZWQgPSB1
bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0KCk7CisgICAgICAgICAgICBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQqIHVuaGFuZGxlZEFzc29jaWF0ZWRFbGVtZW50ID0gdW5oYW5kbGVkSW52YWxp
ZENvbnRyb2xzW2ldLmdldCgpOworICAgICAgICAgICAgSFRNTEVsZW1lbnQqIHVuaGFuZGxlZCA9
IHRvSFRNTEVsZW1lbnQodW5oYW5kbGVkQXNzb2NpYXRlZEVsZW1lbnQpOwogICAgICAgICAgICAg
aWYgKHVuaGFuZGxlZC0+aXNGb2N1c2FibGUoKSAmJiB1bmhhbmRsZWQtPmluRG9jdW1lbnQoKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlKCJB
biBpbnZhbGlkIGZvcm0gY29udHJvbCB3aXRoIG5hbWU9JyVuYW1lJyBpcyBub3QgZm9jdXNhYmxl
LiIpOwotICAgICAgICAgICAgbWVzc2FnZS5yZXBsYWNlKCIlbmFtZSIsIHVuaGFuZGxlZC0+bmFt
ZSgpKTsKKyAgICAgICAgICAgIG1lc3NhZ2UucmVwbGFjZSgiJW5hbWUiLCB1bmhhbmRsZWRBc3Nv
Y2lhdGVkRWxlbWVudC0+bmFtZSgpKTsKICAgICAgICAgICAgIGZyYW1lLT5kb21XaW5kb3coKS0+
Y29uc29sZSgpLT5hZGRNZXNzYWdlKEhUTUxNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwg
RXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIDAsIGRvY3VtZW50KCktPnVybCgpLnN0cmluZygp
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTMwNyw4ICszMTUsMTEgQEAgdm9pZCBIVE1MRm9ybUVs
ZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbgogICAgIGJvb2wgbmVlZEJ1dHRvbkFjdGl2YXRpb24g
PSBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbjsgLy8gZG8gd2UgbmVlZCB0byBhY3RpdmF0ZSBhIHN1Ym1p
dCBidXR0b24/CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxl
bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29u
dHJvbCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVudHNbaV07CisgICAg
ICAgIGlmICghYXNzb2NpYXRlZEVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uKSB7Cisg
ICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gc3RhdGljX2Nhc3Q8
SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAgICAgICAg
IGlmIChjb250cm9sLT5pc0FjdGl2YXRlZFN1Ym1pdCgpKQogICAgICAgICAgICAgICAgIG5lZWRC
dXR0b25BY3RpdmF0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICBlbHNlIGlmIChmaXJzdFN1Y2Nl
c3NmdWxTdWJtaXRCdXR0b24gPT0gMCAmJiBjb250cm9sLT5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0
b24oKSkKQEAgLTM0Miw4ICszNTMsMTAgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlc2V0KCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9hc3NvY2lhdGVkRWxl
bWVudHNbaV0tPnJlc2V0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2Np
YXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2Fzc29jaWF0ZWRFbGVt
ZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXSktPnJlc2V0
KCk7CisgICAgfQogCiAgICAgbV9pbnJlc2V0ID0gZmFsc2U7CiB9CkBAIC0zOTYsNyArNDA5LDcg
QEAgdGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IG4+IHN0YXRpYyB2b2lkIAogICAgICAgICB9CiB9
CiAKLXVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0
cmlidXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCit1bnNpZ25lZCBIVE1MRm9y
bUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShFbGVtZW50KiBlbGVt
ZW50KQogewogICAgIC8vIENvbXBhcmVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZm9ybSBlbGVtZW50
IGFuZCB0aGUgaW5zZXJ0ZWQgZWxlbWVudC4KICAgICAvLyBVcGRhdGVzIHRoZSBpbmRlY2VzIGlu
IG9yZGVyIHRvIHRoZSByZWxhdGlvbiBvZiB0aGUgcG9zaXRpb246CkBAIC00MTYsNTcgKzQyOSw2
NCBAQCB1bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kCiAgICAgdW5zaWdu
ZWQgbGVmdCA9IDAsIHJpZ2h0ID0gbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpIC0gMTsKICAg
ICB3aGlsZSAobGVmdCAhPSByaWdodCkgewogICAgICAgICB1bnNpZ25lZCBtaWRkbGUgPSBsZWZ0
ICsgKChyaWdodCAtIGxlZnQpIC8gMik7Ci0gICAgICAgIHBvc2l0aW9uID0gZWxlbWVudC0+Y29t
cGFyZURvY3VtZW50UG9zaXRpb24obV9hc3NvY2lhdGVkRWxlbWVudHNbbWlkZGxlXSk7CisgICAg
ICAgIHBvc2l0aW9uID0gZWxlbWVudC0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24odG9IVE1MRWxl
bWVudChtX2Fzc29jaWF0ZWRFbGVtZW50c1ttaWRkbGVdKSk7CiAgICAgICAgIGlmIChwb3NpdGlv
biAmIERPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORykKICAgICAgICAgICAgIHJpZ2h0ID0gbWlk
ZGxlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsZWZ0ID0gbWlkZGxlICsgMTsKICAgICB9
CiAKLSAgICBwb3NpdGlvbiA9IGVsZW1lbnQtPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG1fYXNz
b2NpYXRlZEVsZW1lbnRzW2xlZnRdKTsKKyAgICBwb3NpdGlvbiA9IGVsZW1lbnQtPmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uKHRvSFRNTEVsZW1lbnQobV9hc3NvY2lhdGVkRWxlbWVudHNbbGVmdF0p
KTsKICAgICBpZiAocG9zaXRpb24gJiBET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcpCiAgICAg
ICAgIHJldHVybiBsZWZ0OwogICAgIHJldHVybiBsZWZ0ICsgMTsKIH0KIAotdW5zaWduZWQgSFRN
TEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUp
Cit1bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXgoRm9ybUFzc29jaWF0
ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVudCkKIHsKKyAgICBIVE1MRWxlbWVudCogZWxlbWVu
dCA9IHRvSFRNTEVsZW1lbnQoYXNzb2NpYXRlZEVsZW1lbnQpOwogICAgIC8vIFRyZWF0cyBzZXBh
cmF0ZWx5IHRoZSBjYXNlIHdoZXJlIHRoaXMgZWxlbWVudCBoYXMgdGhlIGZvcm0gYXR0cmlidXRl
CiAgICAgLy8gZm9yIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb24uCi0gICAgaWYgKGUtPmZhc3RI
YXNBdHRyaWJ1dGUoZm9ybUF0dHIpKQotICAgICAgICByZXR1cm4gZm9ybUVsZW1lbnRJbmRleFdp
dGhGb3JtQXR0cmlidXRlKGUpOworICAgIGlmIChlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZv
cm1BdHRyKSkKKyAgICAgICAgcmV0dXJuIGZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0
ZShlbGVtZW50KTsKIAogICAgIC8vIENoZWNrIGZvciB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHRo
aXMgZWxlbWVudCBpcyB0aGUgdmVyeSBsYXN0IHRoaW5nIGluCiAgICAgLy8gdGhlIGZvcm0ncyB0
cmVlIG9mIGNoaWxkcmVuOyB3ZSBkb24ndCB3YW50IHRvIHdhbGsgdGhlIGVudGlyZSB0cmVlIGlu
IHRoYXQKICAgICAvLyBjb21tb24gY2FzZSB0aGF0IG9jY3VycyBkdXJpbmcgcGFyc2luZzsgaW5z
dGVhZCB3ZSdsbCBqdXN0IHJldHVybiBhIHZhbHVlCiAgICAgLy8gdGhhdCBzYXlzICJhZGQgdGhp
cyBmb3JtIGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkiLgotICAgIGlmIChlLT50cmF2
ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgaWYgKGVsZW1lbnQtPnRyYXZlcnNlTmV4dE5vZGUo
dGhpcykpIHsKICAgICAgICAgdW5zaWduZWQgaSA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzQmVmb3Jl
SW5kZXg7CiAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBlKSB7
CisgICAgICAgICAgICBpZiAobm9kZSA9PSBlbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgKytt
X2Fzc29jaWF0ZWRFbGVtZW50c0FmdGVySW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpCi0g
ICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNGb3Jt
Q29udHJvbEVsZW1lbnQoKQotICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSktPmZvcm0oKSA9PSB0aGlzKQorICAgICAgICAgICAg
ICAgICAgICAmJiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKG9iamVj
dFRhZykpCisgICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4o
bm9kZSktPmZvcm0oKSA9PSB0aGlzKQogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gbV9hc3NvY2lhdGVkRWxlbWVudHNBZnRlckluZGV4Kys7CiB9CiAK
LXZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50KEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIGUpCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudChG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqIGUpCiB7Ci0gICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlv
QnV0dG9ucygpLnJlbW92ZUJ1dHRvbihlKTsKLSAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMuYWRk
QnV0dG9uKGUpOworICAgIGlmIChlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSB7CisgICAgICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4oZSk7CisgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRv
bnMoKS5yZW1vdmVCdXR0b24oZWxlbWVudCk7CisgICAgICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9u
cy5hZGRCdXR0b24oZWxlbWVudCk7CisgICAgfQogICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmlu
c2VydChmb3JtRWxlbWVudEluZGV4KGUpLCBlKTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnJlbW92ZUZvcm1FbGVtZW50KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUpCit2b2lkIEhUTUxG
b3JtRWxlbWVudDo6cmVtb3ZlRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlKQog
ewotICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5yZW1vdmVCdXR0b24oZSk7Ci0gICAgaWYgKGUt
PmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgaWYgKGUtPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpCisgICAgICAgIG1fY2hlY2tlZFJhZGlvQnV0dG9ucy5yZW1vdmVCdXR0b24oc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGUpKTsKKyAgICBIVE1MRWxlbWVudCog
ZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZSk7CisgICAgaWYgKGVsZW1lbnQtPmZhc3RIYXNBdHRy
aWJ1dGUoZm9ybUF0dHIpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4OwogICAgICAgICBmb3Ig
KGluZGV4ID0gMDsgaW5kZXggPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraW5kZXgp
CiAgICAgICAgICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVudHNbaW5kZXhdID09IGUpCkBAIC01
NTQsNyArNTc0LDkgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6Ondhc1VzZXJTdWJtaXR0ZWQoKQog
SFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1FbGVtZW50OjpkZWZhdWx0QnV0dG9uKCkg
Y29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVu
dHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJv
bCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBpZiAoIW1fYXNzb2NpYXRlZEVs
ZW1lbnRzW2ldLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBzdGF0aWNfY2FzdDxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pOwogICAgICAg
ICBpZiAoY29udHJvbC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gY29udHJvbDsKICAgICB9CkBAIC01NjQsMjMgKzU4NiwyMyBAQCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiBIVE1MRm9ybUVsZW1lbnQ6CiAKIGJvb2wgSFRNTEZvcm1FbGVtZW50OjpjaGVj
a1ZhbGlkaXR5KCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
ID4gY29udHJvbHM7CisgICAgVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4g
Y29udHJvbHM7CiAgICAgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyhjb250cm9scyk7
CiAgICAgcmV0dXJuIGNvbnRyb2xzLmlzRW1wdHkoKTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1l
bnQ6OmNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoVmVjdG9yPFJlZlB0cjxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50PiA+JiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCit2b2lkIEhUTUxG
b3JtRWxlbWVudDo6Y29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyhWZWN0b3I8UmVmUHRy
PEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4gPiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQogewog
ICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IHByb3RlY3Rvcih0aGlzKTsKICAgICAvLyBDb3B5
IG1fYXNzb2NpYXRlZEVsZW1lbnRzIGJlY2F1c2UgZXZlbnQgaGFuZGxlcnMgY2FsbGVkIGZyb20K
ICAgICAvLyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkgbWlnaHQgY2hh
bmdlIG1fYXNzb2NpYXRlZEVsZW1lbnRzLgotICAgIFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4gPiBlbGVtZW50czsKKyAgICBWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVk
RWxlbWVudD4gPiBlbGVtZW50czsKICAgICBlbGVtZW50cy5yZXNlcnZlQ2FwYWNpdHkobV9hc3Nv
Y2lhdGVkRWxlbWVudHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
c3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGVsZW1lbnRzLmFwcGVuZCht
X2Fzc29jaWF0ZWRFbGVtZW50c1tpXSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVs
ZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChlbGVtZW50c1tpXS0+Zm9ybSgpID09
IHRoaXMpCi0gICAgICAgICAgICBlbGVtZW50c1tpXS0+Y2hlY2tWYWxpZGl0eSgmdW5oYW5kbGVk
SW52YWxpZENvbnRyb2xzKTsKKyAgICAgICAgaWYgKGVsZW1lbnRzW2ldLT5mb3JtKCkgPT0gdGhp
cyAmJiBlbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50c1tpXS5nZXQoKSktPmNo
ZWNrVmFsaWRpdHkoJnVuaGFuZGxlZEludmFsaWRDb250cm9scyk7CiAgICAgfQogfQogCkBAIC02
MjcsOCArNjQ5LDEwIEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50Ojpkb2N1bWVudERpZEJlY29tZUEK
IHsKICAgICBBU1NFUlQoIW1fYXV0b2NvbXBsZXRlKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9hc3Nv
Y2lhdGVkRWxlbWVudHNbaV0tPnJlc2V0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2Fzc29j
aWF0ZWRFbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihtX2Fzc29jaWF0ZWRFbGVtZW50c1tp
XSktPnJlc2V0KCk7CisgICAgfQogfQogCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6d2lsbE1vdmVU
b05ld093bmVyRG9jdW1lbnQoKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24g
NzMzNTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXZlbnQ7Citj
bGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ7CiBjbGFzcyBGb3JtRGF0YTsKIGNsYXNzIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ7CiBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OwpAQCAtNjQsOCArNjUs
OCBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIHJlbmFtZSB0aGVzZSB0d28gZnVu
Y3Rpb25zIHRvIHNheSAiZm9ybSBjb250cm9sIgogICAgIC8vIG9yICJmb3JtLWFzc29jaWF0ZWQg
ZWxlbWVudCIgaW5zdGVhZCBvZiAiZm9ybSBlbGVtZW50Ii4KLSAgICB2b2lkIHJlZ2lzdGVyRm9y
bUVsZW1lbnQoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlRm9ybUVs
ZW1lbnQoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgIHZvaWQgcmVnaXN0ZXJGb3JtRWxl
bWVudChGb3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZUZvcm1FbGVtZW50
KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCopOwogICAgIHZvaWQgcmVnaXN0ZXJJbWdFbGVtZW50KEhU
TUxJbWFnZUVsZW1lbnQqKTsKICAgICB2b2lkIHJlbW92ZUltZ0VsZW1lbnQoSFRNTEltYWdlRWxl
bWVudCopOwogCkBAIC0xMDksNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgQ2hlY2tlZFJhZGlv
QnV0dG9ucyYgY2hlY2tlZFJhZGlvQnV0dG9ucygpIHsgcmV0dXJuIG1fY2hlY2tlZFJhZGlvQnV0
dG9uczsgfQogCi0gICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgYXNz
b2NpYXRlZEVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hc3NvY2lhdGVkRWxlbWVudHM7IH0K
KyAgICBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGFzc29jaWF0ZWRFbGVt
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXNzb2NpYXRlZEVsZW1lbnRzOyB9CiAKIHByaXZhdGU6
CiAgICAgSFRNTEZvcm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpA
QCAtMTMxLDEzICsxMzIsMTMgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc3VibWl0KEV2ZW50Kiwg
Ym9vbCBhY3RpdmF0ZVN1Ym1pdEJ1dHRvbiwgYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUsIEZv
cm1TdWJtaXNzaW9uVHJpZ2dlcik7CiAKLSAgICB1bnNpZ25lZCBmb3JtRWxlbWVudEluZGV4V2l0
aEZvcm1BdHRyaWJ1dGUoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOwotICAgIHVuc2lnbmVkIGZv
cm1FbGVtZW50SW5kZXgoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgIHVuc2lnbmVkIGZv
cm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShFbGVtZW50Kik7CisgICAgdW5zaWduZWQg
Zm9ybUVsZW1lbnRJbmRleChGb3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsKICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHN1Ym1pc3Npb24gc2hvdWxkIGJlIHByb2NlZWRlZC4KICAgICBib29sIHZh
bGlkYXRlSW50ZXJhY3RpdmVseShFdmVudCopOwogICAgIC8vIFZhbGlkYXRlcyBlYWNoIG9mIHRo
ZSBjb250cm9scywgYW5kIHN0b3JlcyBjb250cm9scyBvZiB3aGljaCAnaW52YWxpZCcKICAgICAv
LyBldmVudCB3YXMgbm90IGNhbmNlbGVkIHRvIHRoZSBzcGVjaWZpZWQgdmVjdG9yLgotICAgIHZv
aWQgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyhWZWN0b3I8UmVmUHRyPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+ID4mKTsKKyAgICB2b2lkIGNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29u
dHJvbHMoVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4mKTsKIAogICAgIGZy
aWVuZCBjbGFzcyBIVE1MRm9ybUNvbGxlY3Rpb247CiAKQEAgLTE1MSw3ICsxNTIsNyBAQCBwcml2
YXRlOgogCiAgICAgdW5zaWduZWQgbV9hc3NvY2lhdGVkRWxlbWVudHNCZWZvcmVJbmRleDsKICAg
ICB1bnNpZ25lZCBtX2Fzc29jaWF0ZWRFbGVtZW50c0FmdGVySW5kZXg7Ci0gICAgVmVjdG9yPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqPiBtX2Fzc29jaWF0ZWRFbGVtZW50czsKKyAgICBWZWN0b3I8
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4gbV9hc3NvY2lhdGVkRWxlbWVudHM7CiAgICAgVmVjdG9y
PEhUTUxJbWFnZUVsZW1lbnQqPiBtX2ltYWdlRWxlbWVudHM7CiAKICAgICBib29sIG1fd2FzVXNl
clN1Ym1pdHRlZDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDcz
MzUyKQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzksOSArMTM5LDExIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRlQ2hlY2tl
ZFJhZGkKICAgICAgICAgY2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKIAog
ICAgIGlmIChmb3JtKCkpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqPiYgY29udHJvbHMgPSBmb3JtKCktPmFzc29jaWF0ZWRFbGVtZW50cygpOworICAgICAg
ICBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGNvbnRyb2xzID0gZm9ybSgp
LT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNvbnRyb2xzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50KiBjb250cm9sID0gY29udHJvbHNbaV07CisgICAgICAgICAgICBpZiAoIWNvbnRyb2xzW2ld
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IHN0YXRpY19jYXN0PEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqPihjb250cm9sc1tpXSk7CiAgICAgICAgICAgICBpZiAoY29u
dHJvbC0+bmFtZSgpICE9IG5hbWUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGlmIChjb250cm9sLT50eXBlKCkgIT0gdHlwZSgpKQpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzM1MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE3ICs0NiwyOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWlubGluZSBIVE1M
T2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikgCitpbmxpbmUg
SFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29s
IGNyZWF0ZWRCeVBhcnNlcikgCiAgICAgOiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpCisgICAgLCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQo
Zm9ybSkKICAgICAsIG1fZG9jTmFtZWRJdGVtKHRydWUpCiAgICAgLCBtX3VzZUZhbGxiYWNrQ29u
dGVudChmYWxzZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShvYmplY3RUYWcpKTsKKyAgICBp
ZiAoIXRoaXMtPmZvcm0oKSkKKyAgICAgICAgc2V0Rm9ybShmaW5kRm9ybUFuY2VzdG9yKCkpOwor
ICAgIGlmICh0aGlzLT5mb3JtKCkpCisgICAgICAgIHRoaXMtPmZvcm0oKS0+cmVnaXN0ZXJGb3Jt
RWxlbWVudCh0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gSFRNTE9i
amVjdEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoraW5saW5lIEhUTUxPYmplY3RFbGVt
ZW50Ojp+SFRNTE9iamVjdEVsZW1lbnQoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRN
TE9iamVjdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikpOworICAg
IGlmIChmb3JtKCkpCisgICAgICAgIGZvcm0oKS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Cit9
CisKK1Bhc3NSZWZQdHI8SFRNTE9iamVjdEVsZW1lbnQ+IEhUTUxPYmplY3RFbGVtZW50OjpjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSFRNTE9iamVjdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0sIGNy
ZWF0ZWRCeVBhcnNlcikpOwogfQogCiBSZW5kZXJXaWRnZXQqIEhUTUxPYmplY3RFbGVtZW50Ojpy
ZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKQEAgLTMxMyw2ICszMjQsMTQgQEAgdm9p
ZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bQogICAgIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIH0KIAordm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNs
cykKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IGZvcm1BdHRyKQorICAgICAgICBmb3JtQXR0
cmlidXRlQ2hhbmdlZCgpOworICAgIGVsc2UKKyAgICAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsKK30KKwogdm9pZCBIVE1M
T2JqZWN0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2Rl
KiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQog
ewogICAgIHVwZGF0ZURvY05hbWVkSXRlbSgpOwpAQCAtNDUzLDQgKzQ3MiwyNyBAQCB2b2lkIEhU
TUxPYmplY3RFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0CiAgICAgICAgIGFkZFN1YnJlc291cmNl
VVJMKHVybHMsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVzZU1hcCkpOwogfQogCit2b2lkIEhU
TUxPYmplY3RFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKK3sKKyAgICBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKTsKKyAgICBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOworfQorCit2b2lkIEhUTUxPYmplY3RF
bGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKQoreworICAgIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKCk7CisgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
cmVtb3ZlZEZyb21UcmVlKGRlZXApOworfQorCitib29sIEhUTUxPYmplY3RFbGVtZW50OjphcHBl
bmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnRzIHRoaXMgZnVuY3Rpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBBdG9taWNT
dHJpbmcmIEhUTUxPYmplY3RFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUoKSBjb25zdAoreworICAg
IHJldHVybiBtX25hbWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiBtX25hbWU7Cit9CisKIH0KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCShyZXZpc2lvbiA3MzM1MikKKysrIFdlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMyArMjMsMTcg
QEAKICNpZm5kZWYgSFRNTE9iamVjdEVsZW1lbnRfaAogI2RlZmluZSBIVE1MT2JqZWN0RWxlbWVu
dF9oCiAKKyNpbmNsdWRlICJGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRN
TE9iamVjdEVsZW1lbnQgOiBwdWJsaWMgSFRNTFBsdWdJbkltYWdlRWxlbWVudCB7CitjbGFzcyBI
VE1MRm9ybUVsZW1lbnQ7CisKK2NsYXNzIEhUTUxPYmplY3RFbGVtZW50IDogcHVibGljIEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQsIHB1YmxpYyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
OworICAgIHZpcnR1YWwgfkhUTUxPYmplY3RFbGVtZW50KCk7CiAKICAgICBib29sIGlzRG9jTmFt
ZWRJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9kb2NOYW1lZEl0ZW07IH0KIApAQCAtNDAsMTAgKzQ0
LDI1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgdXNlRmFsbGJhY2tDb250ZW50KCkgY29u
c3QgeyByZXR1cm4gbV91c2VGYWxsYmFja0NvbnRlbnQ7IH0KICAgICB2b2lkIHJlbmRlckZhbGxi
YWNrQ29udGVudCgpOwogCisgICAgLy8gSW1wbGVtZW50YXRpb25zIG9mIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudAorICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6Zm9ybSgpOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBib29s
IGlzRW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSosIGJvb2wgcHJlc2VydmVEZWNscyA9IGZhbHNl
KTsKKworICAgIHVzaW5nIFRyZWVTaGFyZWQ8Q29udGFpbmVyTm9kZT46OnJlZjsKKyAgICB1c2lu
ZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+OjpkZXJlZjsKKwogcHJpdmF0ZToKLSAgICBIVE1M
T2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0
ZWRCeVBhcnNlcik7CisgICAgSFRNTE9iamVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOworICAgIHZp
cnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApOwogCiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVy
SXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKTsKQEAgLTY5LDYgKzg4LDExIEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoYXNW
YWxpZENsYXNzSWQoKTsKIAorICAgIHZpcnR1YWwgdm9pZCByZWZGb3JtQXNzb2NpYXRlZEVsZW1l
bnQoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRm9ybUFzc29jaWF0ZWRFbGVt
ZW50KCkgeyBkZXJlZigpOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9y
bUNvbnRyb2xOYW1lKCkgY29uc3Q7CisKICAgICBBdG9taWNTdHJpbmcgbV9pZDsKICAgICBTdHJp
bmcgbV9jbGFzc0lkOwogICAgIGJvb2wgbV9kb2NOYW1lZEl0ZW0gOiAxOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxUYWdOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRh
Z05hbWVzLmluCShyZXZpc2lvbiA3MzM1MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMu
aW4JKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgbm9iciBpbnRlcmZhY2VOYW1lPUhU
TUxFbGVtZW50CiBub2VtYmVkIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIG5vZnJhbWVzIGlu
dGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIG5vbGF5ZXIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVu
dAotb2JqZWN0IGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIKK29iamVjdCBjb25zdHJ1
Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIKIG9s
IGludGVyZmFjZU5hbWU9SFRNTE9MaXN0RWxlbWVudAogb3B0Z3JvdXAgaW50ZXJmYWNlTmFtZT1I
VE1MT3B0R3JvdXBFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKIG9wdGlvbiBj
b25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKSW5kZXg6IFdlYkNvcmUvaHRtbC9WYWxpZGF0aW9u
TWVzc2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdl
LmNwcAkocmV2aXNpb24gNzMzNTIpCisrKyBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQUxXQVlTX0lOTElORSBWYWxpZGF0aW9uTWVzc2FnZTo6VmFsaWRhdGlvbk1lc3NhZ2Uo
SFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCkKK0FMV0FZU19JTkxJTkUgVmFsaWRhdGlv
bk1lc3NhZ2U6OlZhbGlkYXRpb25NZXNzYWdlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZWxlbWVu
dCkKICAgICA6IG1fZWxlbWVudChlbGVtZW50KQogewogfQpAQCAtNDUsNyArNDUsNyBAQCBWYWxp
ZGF0aW9uTWVzc2FnZTo6flZhbGlkYXRpb25NZXNzYWdlKCkKICAgICBoaWRlTWVzc2FnZSgpOwog
fQogCi1QYXNzT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBWYWxpZGF0aW9uTWVzc2FnZTo6Y3Jl
YXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCitQYXNzT3duUHRyPFZhbGlkYXRp
b25NZXNzYWdlPiBWYWxpZGF0aW9uTWVzc2FnZTo6Y3JlYXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFZhbGlkYXRpb25NZXNzYWdl
KGVsZW1lbnQpKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5oCShyZXZpc2lvbiA3
MzM1MikKKysrIFdlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCwyMCArMzgsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OworY2xhc3MgRm9ybUFzc29jaWF0ZWRFbGVtZW50OwogCiBjbGFz
cyBWYWxpZGF0aW9uTWVzc2FnZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+IGNyZWF0ZShIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8VmFsaWRhdGlvbk1lc3NhZ2U+IGNy
ZWF0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsKICAgICB+VmFsaWRhdGlvbk1lc3NhZ2UoKTsK
ICAgICBTdHJpbmcgbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZTsgfQogICAgIHZv
aWQgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKLSAgICBWYWxpZGF0aW9u
TWVzc2FnZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgVmFsaWRhdGlvbk1lc3NhZ2Uo
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CiAgICAgdm9pZCBoaWRlTWVzc2FnZShUaW1lcjxWYWxp
ZGF0aW9uTWVzc2FnZT4qID0gMCk7CiAKLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBtX2Vs
ZW1lbnQ7CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgU3RyaW5n
IG1fbWVzc2FnZTsKICAgICBPd25QdHI8VGltZXI8VmFsaWRhdGlvbk1lc3NhZ2U+ID4gbV90aW1l
cjsKIH07CkluZGV4OiBXZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuY3BwCShyZXZpc2lvbiA3MzM1MikKKysrIFdl
YkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMjUgKzM3
LDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIFN0cmluZyBWYWxpZGl0eVN0YXRl
Ojp2YWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NvbnRyb2wtPndpbGxW
YWxpZGF0ZSgpKQorICAgIGlmICghdG9IVE1MRWxlbWVudChtX2NvbnRyb2wpLT53aWxsVmFsaWRh
dGUoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaWYgKGN1c3RvbUVycm9yKCkp
CiAgICAgICAgIHJldHVybiBtX2N1c3RvbUVycm9yTWVzc2FnZTsKLSAgICBib29sIGlzSW5wdXRF
bGVtZW50ID0gbV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKTsKLSAgICBib29sIGlzVGV4
dEFyZWFFbGVtZW50ID0gbV9jb250cm9sLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKTsKKyAgICBI
VE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQobV9jb250cm9sKTsKKyAgICBib29s
IGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSAmJiBlbGVt
ZW50LT5oYXNUYWdOYW1lKGlucHV0VGFnKTsKKyAgICBib29sIGlzVGV4dEFyZWFFbGVtZW50ID0g
ZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKHRl
eHRhcmVhVGFnKTsKICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIGZvbGxvd2luZyBjaGVja3MgaXMg
bWVhbmluZ2Z1bC4gZS5nLiBXZSdkIGxpa2UgdG8gc2hvdyB0aGUKICAgICAvLyB2YWx1ZU1pc3Np
bmcgbWVzc2FnZSBldmVuIGlmIHRoZSBjb250cm9sIGhhcyBvdGhlciB2YWxpZGF0aW9uIGVycm9y
cy4KICAgICBpZiAodmFsdWVNaXNzaW5nKCkpIHsKLSAgICAgICAgaWYgKG1fY29udHJvbC0+aGFz
VGFnTmFtZShzZWxlY3RUYWcpKQorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShzZWxl
Y3RUYWcpKQogICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5n
Rm9yU2VsZWN0VGV4dCgpOwogICAgICAgICBpZiAoaXNJbnB1dEVsZW1lbnQpCi0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCktPnZhbHVl
TWlzc2luZ1RleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Kj4oZWxlbWVudCktPnZhbHVlTWlzc2luZ1RleHQoKTsKICAgICAgICAgcmV0dXJuIHZh
bGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nVGV4dCgpOwogICAgIH0KICAgICBpZiAodHlwZU1p
c21hdGNoKCkpIHsKICAgICAgICAgaWYgKGlzSW5wdXRFbGVtZW50KQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpLT50eXBlTWlzbWF0
Y2hUZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KGVsZW1lbnQpLT50eXBlTWlzbWF0Y2hUZXh0KCk7CiAgICAgICAgIHJldHVybiB2YWxpZGF0
aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRleHQoKTsKICAgICB9CiAgICAgaWYgKHBhdHRlcm5NaXNt
YXRjaCgpKQpAQCAtNjUsNyArNjYsNyBAQCBTdHJpbmcgVmFsaWRpdHlTdGF0ZTo6dmFsaWRhdGlv
bk1lc3NhZ2UoCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Kj4o
bV9jb250cm9sKTsKKyAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHQgPSBz
dGF0aWNfY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAg
ICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUb29Mb25nVGV4dChudW1HcmFwaGVtZUNsdXN0ZXJz
KHRleHQtPnZhbHVlKCkpLCB0ZXh0LT5tYXhMZW5ndGgoKSk7CiAgICAgfQogICAgIGlmIChyYW5n
ZVVuZGVyZmxvdygpKSB7CkBAIC03MywyMSArNzQsMjEgQEAgU3RyaW5nIFZhbGlkaXR5U3RhdGU6
OnZhbGlkYXRpb25NZXNzYWdlKAogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZh
bGlkYXRpb25NZXNzYWdlUmFuZ2VVbmRlcmZsb3dUZXh0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihtX2NvbnRyb2wpLT5taW5pbXVtU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gdmFs
aWRhdGlvbk1lc3NhZ2VSYW5nZVVuZGVyZmxvd1RleHQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxl
bWVudCo+KGVsZW1lbnQpLT5taW5pbXVtU3RyaW5nKCkpOwogICAgIH0KICAgICBpZiAocmFuZ2VP
dmVyZmxvdygpKSB7CiAgICAgICAgIGlmICghaXNJbnB1dEVsZW1lbnQpIHsKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVJhbmdlT3ZlcmZsb3dUZXh0
KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpLT5tYXhpbXVtU3RyaW5n
KCkpOworICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZU92ZXJmbG93VGV4dChz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCktPm1heGltdW1TdHJpbmcoKSk7
CiAgICAgfQogICAgIGlmIChzdGVwTWlzbWF0Y2goKSkgewogICAgICAgICBpZiAoIWlzSW5wdXRF
bGVtZW50KSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOworICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
PihlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlU3RlcE1pc21hdGNo
VGV4dChpbnB1dC0+c3RlcEJhc2VTdHJpbmcoKSwgaW5wdXQtPnN0ZXBTdHJpbmcoKSk7CiAgICAg
fQogCkBAIC05NywxNyArOTgsMTkgQEAgU3RyaW5nIFZhbGlkaXR5U3RhdGU6OnZhbGlkYXRpb25N
ZXNzYWdlKAogdm9pZCBWYWxpZGl0eVN0YXRlOjpzZXRDdXN0b21FcnJvck1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQogewogICAgIG1fY3VzdG9tRXJyb3JNZXNzYWdlID0gbWVzc2FnZTsK
LSAgICBtX2NvbnRyb2wtPnNldE5lZWRzVmFsaWRpdHlDaGVjaygpOworICAgIGlmIChtX2NvbnRy
b2wtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIHN0YXRpY19jYXN0PEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqPihtX2NvbnRyb2wpLT5zZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIH0K
IAogYm9vbCBWYWxpZGl0eVN0YXRlOjp2YWx1ZU1pc3NpbmcoKSBjb25zdAogewotICAgIGlmICht
X2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCk7Cisg
ICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG1fY29udHJvbCk7CisgICAg
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpOwog
ICAgICAgICByZXR1cm4gaW5wdXQtPnZhbHVlTWlzc2luZyhpbnB1dC0+dmFsdWUoKSk7CiAgICAg
fQotICAgIGlmIChtX2NvbnRyb2wtPmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKSB7Ci0gICAgICAg
IEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRBcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVh
RWxlbWVudCo+KG1fY29udHJvbCk7CisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUodGV4dGFy
ZWFUYWcpKSB7CisgICAgICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQqIHRleHRBcmVhID0gc3RhdGlj
X2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICByZXR1cm4gdGV4
dEFyZWEtPnZhbHVlTWlzc2luZyh0ZXh0QXJlYS0+dmFsdWUoKSk7CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKQEAgLTExNSwxNCArMTE4LDE0IEBAIGJvb2wgVmFsaWRpdHlTdGF0ZTo6dmFsdWVN
aXNzaW5nKCkgY29uc3QKIAogYm9vbCBWYWxpZGl0eVN0YXRlOjp0eXBlTWlzbWF0Y2goKSBjb25z
dAogewotICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICBpZiAo
IXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KG1fY29udHJvbCktPnR5cGVNaXNtYXRjaCgpOwogfQogCiBib29sIFZhbGlkaXR5U3RhdGU6OnBh
dHRlcm5NaXNtYXRjaCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NvbnRyb2wtPmhhc1RhZ05hbWUo
aW5wdXRUYWcpKQorICAgIGlmICghdG9IVE1MRWxlbWVudChtX2NvbnRyb2wpLT5oYXNUYWdOYW1l
KGlucHV0VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCk7CiAgICAg
cmV0dXJuIGlucHV0LT5wYXR0ZXJuTWlzbWF0Y2goaW5wdXQtPnZhbHVlKCkpOwpAQCAtMTMwLDEx
ICsxMzMsMTEgQEAgYm9vbCBWYWxpZGl0eVN0YXRlOjpwYXR0ZXJuTWlzbWF0Y2goKSBjbwogCiBi
b29sIFZhbGlkaXR5U3RhdGU6OnRvb0xvbmcoKSBjb25zdAogewotICAgIGlmIChtX2NvbnRyb2wt
Pmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgaWYgKHRvSFRNTEVsZW1lbnQobV9jb250cm9s
KS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKTsKICAgICAgICAg
cmV0dXJuIGlucHV0LT50b29Mb25nKGlucHV0LT52YWx1ZSgpLCBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6Q2hlY2tEaXJ0eUZsYWcpOwogICAgIH0KLSAgICBpZiAobV9jb250cm9sLT5oYXNU
YWdOYW1lKHRleHRhcmVhVGFnKSkgeworICAgIGlmICh0b0hUTUxFbGVtZW50KG1fY29udHJvbCkt
Pmhhc1RhZ05hbWUodGV4dGFyZWFUYWcpKSB7CiAgICAgICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQq
IHRleHRBcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudCo+KG1fY29udHJvbCk7
CiAgICAgICAgIHJldHVybiB0ZXh0QXJlYS0+dG9vTG9uZyh0ZXh0QXJlYS0+dmFsdWUoKSwgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OkNoZWNrRGlydHlGbGFnKTsKICAgICB9CkBAIC0xNDMs
NyArMTQ2LDcgQEAgYm9vbCBWYWxpZGl0eVN0YXRlOjp0b29Mb25nKCkgY29uc3QKIAogYm9vbCBW
YWxpZGl0eVN0YXRlOjpyYW5nZVVuZGVyZmxvdygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NvbnRy
b2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgIGlmICghdG9IVE1MRWxlbWVudChtX2NvbnRy
b2wpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1f
Y29udHJvbCk7CiAgICAgcmV0dXJuIGlucHV0LT5yYW5nZVVuZGVyZmxvdyhpbnB1dC0+dmFsdWUo
KSk7CkBAIC0xNTEsNyArMTU0LDcgQEAgYm9vbCBWYWxpZGl0eVN0YXRlOjpyYW5nZVVuZGVyZmxv
dygpIGNvbgogCiBib29sIFZhbGlkaXR5U3RhdGU6OnJhbmdlT3ZlcmZsb3coKSBjb25zdAogewot
ICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICBpZiAoIXRvSFRN
TEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgIHJldHVybiBpbnB1dC0+cmFuZ2VPdmVyZmxv
dyhpbnB1dC0+dmFsdWUoKSk7CkBAIC0xNTksNyArMTYyLDcgQEAgYm9vbCBWYWxpZGl0eVN0YXRl
OjpyYW5nZU92ZXJmbG93KCkgY29ucwogCiBib29sIFZhbGlkaXR5U3RhdGU6OnN0ZXBNaXNtYXRj
aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NvbnRyb2wtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQor
ICAgIGlmICghdG9IVE1MRWxlbWVudChtX2NvbnRyb2wpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCk7CiAgICAgcmV0dXJuIGlucHV0
LT5zdGVwTWlzbWF0Y2goaW5wdXQtPnZhbHVlKCkpOwpJbmRleDogV2ViQ29yZS9odG1sL1ZhbGlk
aXR5U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5oCShy
ZXZpc2lvbiA3MzM1MikKKysrIFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDE0ICsyNCwxNCBAQAogI2lmbmRlZiBWYWxpZGl0eVN0YXRlX2gKICNkZWZp
bmUgVmFsaWRpdHlTdGF0ZV9oCiAKLSNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmgi
CisjaW5jbHVkZSAiRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBWYWxpZGl0eVN0YXRlIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxWYWxp
ZGl0eVN0YXRlPiBjcmVhdGUoSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCkKKyAgICBz
dGF0aWMgUGFzc093blB0cjxWYWxpZGl0eVN0YXRlPiBjcmVhdGUoRm9ybUFzc29jaWF0ZWRFbGVt
ZW50KiBjb250cm9sKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWYWxpZGl0
eVN0YXRlKGNvbnRyb2wpKTsKICAgICB9CkBAIC01NCwxMiArNTQsMTIgQEAgcHVibGljOgogICAg
IGJvb2wgdmFsaWQoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBWYWxpZGl0eVN0YXRlKEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wpIDogbV9jb250cm9sKGNvbnRyb2wpIHsgfQorICAg
IFZhbGlkaXR5U3RhdGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBjb250cm9sKSA6IG1fY29udHJv
bChjb250cm9sKSB7IH0KIAogICAgIHN0YXRpYyBib29sIGlzVmFsaWRDb2xvclN0cmluZyhjb25z
dCBTdHJpbmcmKTsKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRW1haWxBZGRyZXNzKGNvbnN0IFN0
cmluZyYpOwogCi0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogbV9jb250cm9sOworICAgIEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCogbV9jb250cm9sOwogICAgIFN0cmluZyBtX2N1c3RvbUVycm9y
TWVzc2FnZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAJKHJldmlzaW9u
IDczMzUyKQorKysgV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzUsMTAgKzE3NSwxMSBAQCBQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3Jt
U3VibWlzc2lvCiAgICAgVmVjdG9yPHBhaXI8U3RyaW5nLCBTdHJpbmc+ID4gZm9ybVZhbHVlczsK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMo
KS5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9s
ID0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKClbaV07Ci0gICAgICAgIGlmICghY29udHJvbC0+
ZGlzYWJsZWQoKSkKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBjb250cm9sID0gZm9y
bS0+YXNzb2NpYXRlZEVsZW1lbnRzKClbaV07CisgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50
ID0gdG9IVE1MRWxlbWVudChjb250cm9sKTsKKyAgICAgICAgaWYgKCFlbGVtZW50LT5kaXNhYmxl
ZCgpKQogICAgICAgICAgICAgY29udHJvbC0+YXBwZW5kRm9ybURhdGEoKmRvbUZvcm1EYXRhLCBp
c011bHRpUGFydEZvcm0pOwotICAgICAgICBpZiAoY29udHJvbC0+aGFzTG9jYWxOYW1lKGlucHV0
VGFnKSkgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzTG9jYWxOYW1lKGlucHV0VGFnKSkgewog
ICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4oY29udHJvbCk7CiAgICAgICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxk
KCkpIHsKICAgICAgICAgICAgICAgICBmb3JtVmFsdWVzLmFwcGVuZChwYWlyPFN0cmluZywgU3Ry
aW5nPihpbnB1dC0+bmFtZSgpLCBpbnB1dC0+dmFsdWUoKSkpOwpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShy
ZXZpc2lvbiA3MzM1MikKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMi0wNiAgS2VuaWNoaSBJc2hpYmFzaGkgIDxiYXNo
aUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIExldCBIVE1MT2JqZWN0RWxlbWVudCBiZSBhIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODgyMQor
CisgICAgICAgIE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBv
ZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorCisgICAgICAgICogc3JjL1dlYkZvcm1FbGVtZW50
LmNwcDogCisgICAgICAgIChXZWJLaXQ6OldlYkZvcm1FbGVtZW50OjpnZXRGb3JtQ29udHJvbEVs
ZW1lbnRzKTogTW9kaWZpZWQgdG8gdXNlCisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCBp
bnN0ZWFkIG9mIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQuCisgICAgICAgICogc3JjL1dlYlBhc3N3
b3JkRm9ybVV0aWxzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZmluZFBhc3N3b3JkRm9ybUZpZWxk
cyk6IERpdHRvLgorICAgICAgICAqIHNyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R2V0QnV0dG9uVG9BY3RpdmF0ZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SGFzU3VpdGFibGVUZXh0RWxlbWVudCk6IERpdHRvLgorCiAyMDEwLTEyLTAzICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByNzMzMDIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZv
cm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvcm1F
bGVtZW50LmNwcAkocmV2aXNpb24gNzMzNTIpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZv
cm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsOSArOTIsMTIgQEAgdm9pZCBXZWJG
b3JtRWxlbWVudDo6Z2V0Rm9ybUNvbnRyb2xFbGVtZQogICAgIC8vIHJlLWV2YWx1YXRpbmcgc2l6
ZSBlYWNoIHRpbWUuIEFsc28sIGNvbnNpZGVyIHJlZmFjdG9yaW5nIHRoaXMgY29kZSBzbyB0aGF0
CiAgICAgLy8gd2UgZG9uJ3QgY2FsbCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKSBtdWx0aXBs
ZSB0aW1lcy4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZvcm0tPmFzc29jaWF0ZWRFbGVt
ZW50cygpLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChmb3JtLT5hc3NvY2lhdGVkRWxlbWVu
dHMoKVtpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpCi0gICAgICAgICAgICB8
fCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
c2VsZWN0VGFnKSkKLSAgICAgICAgICAgIHRlbXBWZWN0b3IuYXBwZW5kKGZvcm0tPmFzc29jaWF0
ZWRFbGVtZW50cygpW2ldKTsKKyAgICAgICAgaWYgKCFmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMo
KVtpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpW2ldKTsKKyAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKQorICAgICAg
ICAgICAgfHwgZWxlbWVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0VGFnKSkKKyAg
ICAgICAgICAgIHRlbXBWZWN0b3IuYXBwZW5kKGVsZW1lbnQpOwogICAgIH0KICAgICByZXN1bHQu
YXNzaWduKHRlbXBWZWN0b3IpOwogfQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYXNz
d29yZEZvcm1VdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
YXNzd29yZEZvcm1VdGlscy5jcHAJKHJldmlzaW9uIDczMzUyKQorKysgV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDkgKzY1
LDExIEBAIHZvaWQgZmluZFBhc3N3b3JkRm9ybUZpZWxkcyhIVE1MRm9ybUVsZW0KIAogICAgIGlu
dCBmaXJzdFBhc3N3b3JkSW5kZXggPSAwOwogICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBwYXNzd29y
ZCBmaWVsZHMgYW5kIGFjdGl2YXRlZCBzdWJtaXQgYnV0dG9uCi0gICAgY29uc3QgVmVjdG9yPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZm9ybUVsZW1lbnRzID0gZm9ybS0+YXNzb2NpYXRlZEVs
ZW1lbnRzKCk7CisgICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBmb3Jt
RWxlbWVudHMgPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7IGkrKykgewotICAgICAgICBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50c1tpXTsKKyAgICAgICAgaWYg
KCFmb3JtRWxlbWVudHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZm9ybUVsZW1lbnRzW2ldKTsKICAg
ICAgICAgaWYgKGZvcm1FbGVtZW50LT5pc0FjdGl2YXRlZFN1Ym1pdCgpKQogICAgICAgICAgICAg
ZmllbGRzLT5zdWJtaXQgPSBmb3JtRWxlbWVudDsKIApAQCAtOTAsNyArOTIsOSBAQCB2b2lkIGZp
bmRQYXNzd29yZEZvcm1GaWVsZHMoSFRNTEZvcm1FbGVtCiAgICAgaWYgKCFmaWVsZHMtPnBhc3N3
b3Jkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVGhlbiwgc2VhcmNoIGJhY2t3YXJkcyBmb3Ig
dGhlIHVzZXJuYW1lIGZpZWxkCiAgICAgICAgIGZvciAoaW50IGkgPSBmaXJzdFBhc3N3b3JkSW5k
ZXggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dCogZm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudHNbaV07CisgICAgICAgICAgICBpZiAoIWZvcm1F
bGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1FbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGZvcm1FbGVtZW50c1tpXSk7CiAg
ICAgICAgICAgICBpZiAoIWZvcm1FbGVtZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1
dFRhZykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAJKHJldmlzaW9uIDczMzUyKQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw4ICs3OCwxMCBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBHZXRCdXR0b25U
b0FjdGl2CiB7CiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZmlyc3RTdWJtaXRCdXR0b24g
PSAwOwogICAgIC8vIEZJWE1FOiBDb25zaWRlciByZWZhY3RvcmluZyB0aGlzIGNvZGUgc28gdGhh
dCB3ZSBkb24ndCBjYWxsIGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpIHR3aWNlLgotICAgIGZv
ciAoVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaShmb3Jt
LT5hc3NvY2lhdGVkRWxlbWVudHMoKS5iZWdpbigpKTsgaSAhPSBmb3JtLT5hc3NvY2lhdGVkRWxl
bWVudHMoKS5lbmQoKTsgKytpKSB7Ci0gICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3Jt
RWxlbWVudCA9ICppOworICAgIGZvciAoVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+Ojpj
b25zdF9pdGVyYXRvciBpKGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLmJlZ2luKCkpOyBpICE9
IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLmVuZCgpOyArK2kpIHsKKyAgICAgIGlmICghKCpp
KS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1D
b250cm9sRWxlbWVudCo+KCppKTsKICAgICAgIGlmIChmb3JtRWxlbWVudC0+aXNBY3RpdmF0ZWRT
dWJtaXQoKSkKICAgICAgICAgICAvLyBUaGVyZSdzIGEgYnV0dG9uIHRoYXQgaXMgYWxyZWFkeSBh
Y3RpdmF0ZWQgZm9yIHN1Ym1pdCwgcmV0dXJuIDAuCiAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0x
NTYsOCArMTU4LDEwIEBAIGJvb2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBIVE1MRm8K
IAogICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVtZW50ID0gMDsKICAgICAvLyBGSVhNRTog
Q29uc2lkZXIgcmVmYWN0b3JpbmcgdGhpcyBjb2RlIHNvIHRoYXQgd2UgZG9uJ3QgY2FsbCBmb3Jt
LT5hc3NvY2lhdGVkRWxlbWVudHMoKSB0d2ljZS4KLSAgICBmb3IgKFZlY3RvcjxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGkoZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRz
KCkuYmVnaW4oKSk7IGkgIT0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuZW5kKCk7ICsraSkg
ewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9ICppOworICAg
IGZvciAoVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpKGZv
cm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLmJlZ2luKCkpOyBpICE9IGZvcm0tPmFzc29jaWF0ZWRF
bGVtZW50cygpLmVuZCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCEoKmkpLT5pc0Zvcm1Db250cm9s
RWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KCppKTsKICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVt
ZW50LT5uYW1lKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDczMzUyKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxMC0xMi0wNiAgS2VuaWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IExldCBIVE1MT2JqZWN0RWxlbWVudCBiZSBhIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODgyMQorCisgICAg
ICAgIE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50
YXRpb24ubW06CisgICAgICAgICgtW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBlbGVtZW50V2l0aE5h
bWU6aW5Gb3JtOl0pOiBNb2RpZmllZCB0byB1c2UKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVt
ZW50IGluc3RlYWQgb2YgSFRNTEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKC1bV2ViSFRN
TFJlcHJlc2VudGF0aW9uIGNvbnRyb2xzSW5Gb3JtOl0pOiBEaXR0by4KKwogMjAxMC0xMi0wNCAg
RGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNh
bSBXZWluaWcuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9u
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRp
b24ubW0JKHJldmlzaW9uIDczMzUyKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXBy
ZXNlbnRhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg1LDEyICsyODUsMTIgQEAgLSAoRE9N
RWxlbWVudCAqKWVsZW1lbnRXaXRoTmFtZTooTlNTdHJpbgogICAgIEhUTUxGb3JtRWxlbWVudCog
Zm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KGZvcm0pOwogICAgIGlmICgh
Zm9ybUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVs
ZW1lbnRzKCk7CisgICAgY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVt
ZW50cyA9IGZvcm1FbGVtZW50LT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKICAgICBBdG9taWNTdHJp
bmcgdGFyZ2V0TmFtZSA9IG5hbWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1l
bnRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsdCA9
IGVsZW1lbnRzW2ldOworICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsdCA9IGVsZW1l
bnRzW2ldOwogICAgICAgICBpZiAoZWx0LT5uYW1lKCkgPT0gdGFyZ2V0TmFtZSkKLSAgICAgICAg
ICAgIHJldHVybiBraXQoZWx0KTsKKyAgICAgICAgICAgIHJldHVybiBraXQodG9IVE1MRWxlbWVu
dChlbHQpKTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKIH0KQEAgLTMzMywxMCArMzMzLDEwIEBA
IC0gKE5TQXJyYXkgKiljb250cm9sc0luRm9ybTooRE9NRWxlbWVudCAKICAgICBpZiAoIWZvcm1F
bGVtZW50KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHRz
ID0gbmlsOwotICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGVsZW1l
bnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0ZWRFbGVtZW50cygpOworICAgIGNvbnN0IFZlY3Rv
cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2Np
YXRlZEVsZW1lbnRzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNp
emUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChlbGVtZW50c1tpXS0+aXNFbnVtZXJhdGFibGUoKSkg
eyAvLyBTa2lwIG9wdGlvbiBlbGVtZW50cywgb3RoZXIgZHVkcwotICAgICAgICAgICAgRE9NRWxl
bWVudCogZGUgPSBraXQoZWxlbWVudHNbaV0pOworICAgICAgICAgICAgRE9NRWxlbWVudCogZGUg
PSBraXQodG9IVE1MRWxlbWVudChlbGVtZW50c1tpXSkpOwogICAgICAgICAgICAgaWYgKCFyZXN1
bHRzKQogICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRo
T2JqZWN0OmRlXTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzM1MikKKysr
IFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MTAtMTItMDYgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZXQgSFRNTE9iamVjdEVs
ZW1lbnQgYmUgYSBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MjEKKworICAgICAgICBNb2RpZmllZCB0byB1
c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50IGluc3RlYWQgb2YgSFRNTEZvcm1Db250cm9sRWxlbWVu
dC4KKworICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjplbGVtZW50
V2l0aE5hbWUpOiBNb2RpZmllZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50CisgICAgICAg
IGluc3RlYWQgb2YgSFRNTEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKFdlYkZyYW1lOjpj
b250cm9sc0luRm9ybSk6IERpdHRvLgorCiAyMDEwLTEyLTA1ICBBZGFtIFJvYmVuICA8YXJvYmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIHByb2R1Y3Rpb24gYnVpbGQgZml4CkluZGV4
OiBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkZy
YW1lLmNwcAkocmV2aXNpb24gNzMzNTIpCisrKyBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTEzNiwxMCArMTEzNiwxMiBAQCBIUkVTVUxUIFdlYkZyYW1lOjplbGVt
ZW50V2l0aE5hbWUoQlNUUiBuCiAKICAgICBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50ID0g
Zm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChmb3JtKTsKICAgICBpZiAoZm9ybUVsZW1lbnQpIHsK
LSAgICAgICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZWxlbWVudHMg
PSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgICAgIGNvbnN0IFZlY3Rv
cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2Np
YXRlZEVsZW1lbnRzKCk7CiAgICAgICAgIEF0b21pY1N0cmluZyB0YXJnZXROYW1lKChVQ2hhciop
bmFtZSwgU3lzU3RyaW5nTGVuKG5hbWUpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBlbGVtZW50cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudCAqZWx0ID0gZWxlbWVudHNbaV07CisgICAgICAgICAgICBpZiAoIWVsZW1lbnRz
W2ldLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCAqZWx0ID0gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1Db250cm9sRWxlbWVudCo+KGVsZW1lbnRzW2ldKTsKICAgICAgICAgICAgIC8vIFNraXAg
b3B0aW9uIGVsZW1lbnRzLCBvdGhlciBkdWRzCiAgICAgICAgICAgICBpZiAoZWx0LT5uYW1lKCkg
PT0gdGFyZ2V0TmFtZSkgewogICAgICAgICAgICAgICAgICplbGVtZW50ID0gRE9NRWxlbWVudDo6
Y3JlYXRlSW5zdGFuY2UoZWx0KTsKQEAgLTEzNjIsMTAgKzEzNjQsMTAgQEAgSFJFU1VMVCBXZWJG
cmFtZTo6Y29udHJvbHNJbkZvcm0oSURPTUVsZQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCiAg
ICAgKmNDb250cm9scyA9IDA7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQqPiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAg
Y29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVt
ZW50LT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKICAgICAgICAgaWYgKGVsZW1lbnRzLmF0KGkpLT5pc0VudW1lcmF0YWJsZSgpKSB7
IC8vIFNraXAgb3B0aW9uIGVsZW1lbnRzLCBvdGhlciBkdWRzCi0gICAgICAgICAgICBjb250cm9s
c1sqY0NvbnRyb2xzXSA9IERPTUVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGVsZW1lbnRzLmF0KGkp
KTsKKyAgICAgICAgICAgIGNvbnRyb2xzWypjQ29udHJvbHNdID0gRE9NRWxlbWVudDo6Y3JlYXRl
SW5zdGFuY2UodG9IVE1MRWxlbWVudChlbGVtZW50cy5hdChpKSkpOwogICAgICAgICAgICAgKCpj
Q29udHJvbHMpKys7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzM1MikK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDEwLTEyLTA2ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV0IEhUTUxPYmpl
Y3RFbGVtZW50IGJlIGEgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4ODIxCisKKyAgICAgICAgQWRkcyBhIHRl
c3QgdG8gZW5zdXJlIHRoZSBvcmRlciBvZiBmb3JtLmVsZW1lbnRzIGF0dHJpYnV0ZS4KKyAgICAg
ICAgVXBkYXRlcyB0d28gdGVzdHMgdG8gY2hlY2sgd2hldGhlciBvYmplY3QgZWxlbWVudHMgYXJl
IGhhbmRsZWQKKyAgICAgICAgY29ycmVjdGx5IGluIGZvcm0uZWxlbWVudHMgYXR0cmlidXRlLgor
CisgICAgICAgICogZmFzdC9mb3Jtcy9mb3JtLWF0dHJpYnV0ZS1leHBlY3RlZC50eHQ6IFVwZGF0
ZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlv
bi1lbGVtZW50cy1vcmRlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL3Njcmlw
dC10ZXN0cy9mb3JtLWF0dHJpYnV0ZS5qczogVXBkYXRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1z
L3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanM6IEFkZGVkLgor
ICAgICAgICAoY2hlY2tPcmRlcik6CisgICAgICAgICogZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMv
Zm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLmpzOiBVcGRhdGVkLgorCiAyMDEwLTEyLTA1ICBSb2Ig
QnVpcyAgPHJ3bGJ1aXNAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMg
WmltbWVybWFubi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1hdHRyaWJ1dGUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1h
dHRyaWJ1dGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MzM1MikKKysrIExheW91dFRlc3RzL2Zh
c3QvZm9ybXMvZm9ybS1hdHRyaWJ1dGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00
LDE0ICs0LDE0IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAog
CiAtIENoZWNrcyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmb3JtIGF0dHJpYnV0ZSBmb3IgZWFjaCBm
b3JtLWFzc29jaWF0ZWQgZWxlbWVudHMuCi1GSVhNRTogPGxhYmVsPiBhbmQgPG9iamVjdD4gZG9u
J3Qgc3VwcG9ydCB0aGUgZm9ybSBhdHRyaWJ1dGUgZm9yIG5vdy4KK0ZJWE1FOiA8bGFiZWw+IGRv
ZXNuJ3Qgc3VwcG9ydCB0aGUgZm9ybSBhdHRyaWJ1dGUgZm9yIG5vdy4KIFBBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoImJ1dHRvbiIpWzBdLmZvcm0gaXMgb3duZXIKIFBBU1MgZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZpZWxkc2V0IilbMF0uZm9ybSBpcyBvd25lcgog
UEFTUyBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5mb3JtIGlzIG93
bmVyCiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJrZXlnZW4iKVswXS5mb3Jt
IGlzIG93bmVyCiBGQUlMIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIpWzBd
LmZvcm0gc2hvdWxkIGJlIFtvYmplY3QgSFRNTEZvcm1FbGVtZW50XS4gV2FzIG51bGwuCiBQQVNT
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRlciIpWzBdLmZvcm0gaXMgb3duZXIK
LUZBSUwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdLmZvcm0gc2hv
dWxkIGJlIFtvYmplY3QgSFRNTEZvcm1FbGVtZW50XS4gV2FzIG51bGwuCitQQVNTIGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvdXRwdXQiKVswXS5mb3JtIGlzIG93bmVyCiBQ
QVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcm9ncmVzcyIpWzBdLmZvcm0gaXMg
b3duZXIKIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpWzBdLmZv
cm0gaXMgb3duZXIKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9u
LWVsZW1lbnRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDczMzUy
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQCBPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIAogVGhpcyB0ZXN0IGRvZXMgbm90IGFkZCBvYmpl
Y3QgZWxlbWVudCBhcyBhIGxpc3RlZCBlbGVtZW50LiBTZXBhcmF0ZSB0ZXN0IHdpbGwgY292ZXIg
dGhhdC4KLVBBU1Mgb3duZXIuZWxlbWVudHMubGVuZ3RoIGlzIDIyCitQQVNTIG93bmVyLmVsZW1l
bnRzLmxlbmd0aCBpcyAyMwogUEFTUyBvd25lci5lbGVtZW50c1swXS5pZCBpcyAnYnV0dG9uMScK
IFBBU1Mgb3duZXIuZWxlbWVudHNbMV0uaWQgaXMgJ2ZpZWxkc2V0MScKIFBBU1Mgb3duZXIuZWxl
bWVudHNbMl0uaWQgaXMgJ2lucHV0aGlkZGVuJwpAQCAtMjQsOSArMjQsMTAgQEAgUEFTUyBvd25l
ci5lbGVtZW50c1sxNV0uaWQgaXMgJ2lucHV0c3VibQogUEFTUyBvd25lci5lbGVtZW50c1sxNl0u
aWQgaXMgJ2lucHV0cmVzZXQnCiBQQVNTIG93bmVyLmVsZW1lbnRzWzE3XS5pZCBpcyAnaW5wdXRi
dXR0b24nCiBQQVNTIG93bmVyLmVsZW1lbnRzWzE4XS5pZCBpcyAna2V5Z2VuMScKLVBBU1Mgb3du
ZXIuZWxlbWVudHNbMTldLmlkIGlzICdvdXRwdXQxJwotUEFTUyBvd25lci5lbGVtZW50c1syMF0u
aWQgaXMgJ3NlbGVjdDEnCi1QQVNTIG93bmVyLmVsZW1lbnRzWzIxXS5pZCBpcyAndGV4dGFyZWEx
JworUEFTUyBvd25lci5lbGVtZW50c1sxOV0uaWQgaXMgJ29iamVjdDEnCitQQVNTIG93bmVyLmVs
ZW1lbnRzWzIwXS5pZCBpcyAnb3V0cHV0MScKK1BBU1Mgb3duZXIuZWxlbWVudHNbMjFdLmlkIGlz
ICdzZWxlY3QxJworUEFTUyBvd25lci5lbGVtZW50c1syMl0uaWQgaXMgJ3RleHRhcmVhMScKIFBB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXItZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0
aW9uLWVsZW1lbnRzLW9yZGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMSBAQAorVGhpcyB0ZXN0IGV4YW1pbmVzIHRoZSBv
cmRlciBvZiBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudHMgd2hpY2ggYXJlIGNsYXNzaWZpZWQgYXMg
J2xpc3RlZCcuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCistIENoZWNrcyB0aGUg
b3JkZXIgb2YgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnRzLgorUEFTUyBjaGVja09yZGVyKFtidXR0
b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCB0ZXh0
YXJlYV0pIGlzICJPSyIKKworLSBDaGVja3MgdGhlIG9yZGVyIGFmdGVyIHNvbWUgZWxlbWVudHMg
cmVtb3ZlZC9pbnNlcnRlZC4KK1BBU1MgY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5w
dXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorUEFTUyBjaGVj
a09yZGVyKFtmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVh
XSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFtvYmplY3QsIGZpZWxkc2V0LCBpbnB1dCwga2V5
Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIo
W29iamVjdCwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJl
YSwgYnV0dG9uXSkgaXMgIk9LIgorCistIENoZWNrcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lh
dGVkIGVsZW1lbnRzIHdpdGggZm9ybSBhdHRyaWJ1dGUuCitQQVNTIGNoZWNrT3JkZXIoW2J1dHRv
biwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIHRleHRh
cmVhXSkgaXMgIk9LIgorCistIENoZWNrcyB0aGUgb3JkZXIgYWZ0ZXIgc29tZSBlbGVtZW50cyBy
ZW1vdmVkL2luc2VydGVkIHdpdGggZm9ybSBhdHRyaWJ1dGUuCitQQVNTIGNoZWNrT3JkZXIoW2J1
dHRvbiwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0p
IGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1
dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbZmllbGRzZXQs
IGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0XSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVy
KFtmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdF0pIGlzICJP
SyIKK1BBU1MgY2hlY2tPcmRlcihbdGV4dGFyZWEsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBv
YmplY3QsIG91dHB1dCwgc2VsZWN0XSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFt0ZXh0YXJl
YSwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIGJ1dHRv
bl0pIGlzICJPSyIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorVGVzdAorCisKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxl
Y3Rpb24tZWxlbWVudHMtb3JkZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZm9ybS1jb2xs
ZWN0aW9uLWVsZW1lbnRzLW9yZGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1hdHRy
aWJ1dGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVz
dHMvZm9ybS1hdHRyaWJ1dGUuanMJKHJldmlzaW9uIDczMzUyKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1hdHRyaWJ1dGUuanMJKHdvcmtpbmcgY29weSkKQEAg
LTQsNyArNCw3IEBAIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCcKIGRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKIAogZGVidWcoJy0gQ2hlY2tzIHRo
ZSBleGlzdGVuY2Ugb2YgdGhlIGZvcm0gYXR0cmlidXRlIGZvciBlYWNoIGZvcm0tYXNzb2NpYXRl
ZCBlbGVtZW50cy4nKTsKLWRlYnVnKCdGSVhNRTogJmx0O2xhYmVsJmd0OyBhbmQgJmx0O29iamVj
dCZndDsgZG9uXCd0IHN1cHBvcnQgdGhlIGZvcm0gYXR0cmlidXRlIGZvciBub3cuJyk7CitkZWJ1
ZygnRklYTUU6ICZsdDtsYWJlbCZndDsgZG9lc25cJ3Qgc3VwcG9ydCB0aGUgZm9ybSBhdHRyaWJ1
dGUgZm9yIG5vdy4nKTsKIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPGZvcm0gaWQ9b3duZXI+PC9m
b3JtPicgKwogICAgICc8YnV0dG9uIG5hbWU9dmljdGltIGZvcm09b3duZXIgLz4nICsKICAgICAn
PGZpZWxkc2V0IG5hbWU9dmljdGltIGZvcm09b3duZXIgLz4nICsKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3Jt
LWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIu
anMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAwIEBACitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0
IGV4YW1pbmVzIHRoZSBvcmRlciBvZiBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudHMgd2hpY2ggYXJl
IGNsYXNzaWZpZWQgYXMgJ2xpc3RlZCcuIik7CisKK3ZhciBjb250YWluZXIgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVy
KTsKK3ZhciBvd25lcjsKKworZnVuY3Rpb24gY2hlY2tPcmRlcih2aWN0aW1zKSB7CisgICAgaWYg
KG93bmVyLmVsZW1lbnRzLmxlbmd0aCAhPSB2aWN0aW1zLmxlbmd0aCkKKyAgICAgICAgcmV0dXJu
ICdsZW5ndGggbWlzbWF0Y2gsIGVsZW1lbnRzLmxlbmd0aCA9ICcgKyBvd25lci5lbGVtZW50cy5s
ZW5ndGggKworICAgICAgICAgICAgICAgJywgZXhwZWN0ZWQgbGVuZ3RoID0gJyArIHZpY3RpbXMu
bGVuZ3RoOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmljdGltcy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgaWYgKG93bmVyLmVsZW1lbnRzW2ldICE9IHZpY3RpbXNbaV0pCisgICAgICAgICAgICBy
ZXR1cm4gJ2VsZW1lbnQgbWlzbWF0Y2ggYXQgaW5kZXggJyArIGk7CisgICAgcmV0dXJuICdPSyc7
Cit9CisKK2RlYnVnKCctIENoZWNrcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lhdGVkIGVsZW1l
bnRzLicpOworY29udGFpbmVyLmlubmVySFRNTCA9ICc8Zm9ybSBpZD1vd25lcj4nICsKKyAgICAn
PGJ1dHRvbiBuYW1lPXZpY3RpbT48L2J1dHRvbj4nICsKKyAgICAnPGZpZWxkc2V0IG5hbWU9dmlj
dGltPlRlc3Q8L2ZpZWxkc2V0PicgKworICAgICc8aW5wdXQgbmFtZT12aWN0aW0vPicgKworICAg
ICc8a2V5Z2VuIG5hbWU9dmljdGltPjwva2V5Z2VuPicgKworICAgICc8bGFiZWwgbmFtZT12aWN0
aW0+PC9sYWJlbD4nICsKKyAgICAnPG1ldGVyIG5hbWU9dmljdGltPjwvbWV0ZXI+JyArCisgICAg
JzxvYmplY3QgbmFtZT12aWN0aW0+PC9vYmplY3Q+JyArCisgICAgJzxvdXRwdXQgbmFtZT12aWN0
aW0+PC9vdXRwdXQ+JyArCisgICAgJzxwcm9ncmVzcyBuYW1lPXZpY3RpbT48L3Byb2dyZXNzPicg
KworICAgICc8c2VsZWN0IG5hbWU9dmljdGltPjwvc2VsZWN0PicgKworICAgICc8dGV4dGFyZWEg
bmFtZT12aWN0aW0+PC90ZXh0YXJlYT4nKworICAgICc8L2Zvcm0+JzsKK293bmVyID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ293bmVyJyk7Cit2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpWzBdOwordmFyIGZpZWxkc2V0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ2ZpZWxkc2V0JylbMF07Cit2YXIgaW5wdXQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXTsKK3ZhciBrZXlnZW4gPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgna2V5Z2VuJylbMF07Cit2YXIgbGFiZWwgPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgnbGFiZWwnKVswXTsKK3ZhciBtZXRlciA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdtZXRlcicpWzBdOwordmFyIG9iamVjdCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKVswXTsKK3ZhciBvdXRwdXQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgnb3V0cHV0JylbMF07Cit2YXIgcHJvZ3Jlc3MgPSBkb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncHJvZ3Jlc3MnKVswXTsKK3ZhciBzZWxlY3QgPSBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0JylbMF07Cit2YXIgdGV4dGFyZWEgPSBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKVswXTsKK3Nob3VsZEJlKCdj
aGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1
dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWcoJy0g
Q2hlY2tzIHRoZSBvcmRlciBhZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQuJyk7
Citvd25lci5yZW1vdmVDaGlsZChvYmplY3QpOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2J1dHRv
biwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywg
JyJPSyInKTsKK293bmVyLnJlbW92ZUNoaWxkKGJ1dHRvbik7CitzaG91bGRCZSgnY2hlY2tPcmRl
cihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywg
JyJPSyInKTsKK293bmVyLmluc2VydEJlZm9yZShvYmplY3QsIGZpZWxkc2V0KTsKK3Nob3VsZEJl
KCdjaGVja09yZGVyKFtvYmplY3QsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNl
bGVjdCwgdGV4dGFyZWFdKScsICciT0siJyk7Citvd25lci5hcHBlbmRDaGlsZChidXR0b24pOwor
c2hvdWxkQmUoJ2NoZWNrT3JkZXIoW29iamVjdCwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91
dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uXSknLCAnIk9LIicpOworCitkZWJ1ZygnJyk7
CitkZWJ1ZygnLSBDaGVja3MgdGhlIG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50cyB3
aXRoIGZvcm0gYXR0cmlidXRlLicpOworY29udGFpbmVyLmlubmVySFRNTCA9ICc8YnV0dG9uIG5h
bWU9dmljdGltIGZvcm09b3duZXI+PC9idXR0b24+JyArCisgICAgJzxmaWVsZHNldCBuYW1lPXZp
Y3RpbSBmb3JtPW93bmVyPlRlc3Q8L2ZpZWxkc2V0PicgKworICAgICc8aW5wdXQgbmFtZT12aWN0
aW0gZm9ybT1vd25lci8+JyArCisgICAgJzxrZXlnZW4gbmFtZT12aWN0aW0gZm9ybT1vd25lcj48
L2tleWdlbj4nICsKKyAgICAnPGZvcm0gaWQ9b3duZXI+JyArCisgICAgJzxsYWJlbCBuYW1lPXZp
Y3RpbT48L2xhYmVsPicgKworICAgICc8bWV0ZXIgbmFtZT12aWN0aW0+PC9tZXRlcj4nICsKKyAg
ICAnPG9iamVjdCBuYW1lPXZpY3RpbT48L29iamVjdD4nICsKKyAgICAnPC9mb3JtPicgKworICAg
ICc8b3V0cHV0IG5hbWU9dmljdGltIGZvcm09b3duZXI+PC9vdXRwdXQ+JyArCisgICAgJzxwcm9n
cmVzcyBuYW1lPXZpY3RpbSBmb3JtPW93bmVyPjwvcHJvZ3Jlc3M+JyArCisgICAgJzxzZWxlY3Qg
bmFtZT12aWN0aW0gZm9ybT1vd25lcj48L3NlbGVjdD4nICsKKyAgICAnPHRleHRhcmVhIG5hbWU9
dmljdGltIGZvcm09b3duZXI+PC90ZXh0YXJlYT4nOworb3duZXIgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnb3duZXInKTsKK2J1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdidXR0b24nKVswXTsKK2ZpZWxkc2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2ZpZWxkc2V0JylbMF07CitpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdp
bnB1dCcpWzBdOwora2V5Z2VuID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tleWdl
bicpWzBdOworbGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGFiZWwnKVsw
XTsKK21ldGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21ldGVyJylbMF07Citv
YmplY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JylbMF07CitvdXRw
dXQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3V0cHV0JylbMF07Citwcm9ncmVz
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwcm9ncmVzcycpWzBdOworc2VsZWN0
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NlbGVjdCcpWzBdOwordGV4dGFyZWEg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKVswXTsKK3Nob3VsZEJl
KCdjaGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91
dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWco
Jy0gQ2hlY2tzIHRoZSBvcmRlciBhZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQg
d2l0aCBmb3JtIGF0dHJpYnV0ZS4nKTsKK293bmVyLnJlbW92ZUNoaWxkKG9iamVjdCk7CitzaG91
bGRCZSgnY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0
LCBzZWxlY3QsIHRleHRhcmVhXSknLCAnIk9LIicpOworY29udGFpbmVyLnJlbW92ZUNoaWxkKGJ1
dHRvbik7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91
dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKK2NvbnRhaW5lci5yZW1vdmVDaGls
ZCh0ZXh0YXJlYSk7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXln
ZW4sIG91dHB1dCwgc2VsZWN0XSknLCAnIk9LIicpOworb3duZXIuYXBwZW5kQ2hpbGQob2JqZWN0
KTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0
LCBvdXRwdXQsIHNlbGVjdF0pJywgJyJPSyInKTsKK2NvbnRhaW5lci5pbnNlcnRCZWZvcmUodGV4
dGFyZWEsIGZpZWxkc2V0KTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmllbGRz
ZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3RdKScsICciT0siJyk7Citj
b250YWluZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFt0ZXh0
YXJlYSwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIGJ1
dHRvbl0pJywgJyJPSyInKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxl
bWVudHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVz
dHMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLmpzCShyZXZpc2lvbiA3MzM1MikKKysrIExheW91
dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQCBjb250YWluZXIuaW5uZXJIVE1MID0g
Jzxmb3JtIGlkPSJmb3JtMSI+CiAgICAgJzxrZXlnZW4gaWQ9a2V5Z2VuMT48L2tleWdlbj4nICsK
ICAgICAnPGxhYmVsIGlkPWxhYmVsMT48L2xhYmVsPicgKwogICAgICc8bWV0ZXIgaWQ9bWV0ZXIx
PjwvbWV0ZXI+JyArCisgICAgJzxvYmplY3QgaWQ9b2JqZWN0MT48L29iamVjdD4nICsKICAgICAn
PG91dHB1dCBpZD1vdXRwdXQxPjwvb3V0cHV0PicgKwogICAgICc8cHJvZ3Jlc3MgaWQ9cHJvZ3Jl
c3MxPjwvcHJvZ3Jlc3M+JyArCiAgICAgJzxzZWxlY3QgaWQ9c2VsZWN0MT4nICsKQEAgLTM4LDcg
KzM5LDcgQEAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8Zm9ybSBpZD0iZm9ybTEiPgogCiB2YXIg
b3duZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTEnKTsKIAotc2hvdWxkQmUoJ293
bmVyLmVsZW1lbnRzLmxlbmd0aCcsICcyMicpOworc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzLmxl
bmd0aCcsICcyMycpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzBdLmlkJywgIididXR0b24x
JyIpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzFdLmlkJywgIidmaWVsZHNldDEnIik7CiBz
aG91bGRCZSgnb3duZXIuZWxlbWVudHNbMl0uaWQnLCAiJ2lucHV0aGlkZGVuJyIpOwpAQCAtNTgs
OSArNTksMTAgQEAgc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzE1XS5pZCcsICInaW5wdQogc2hv
dWxkQmUoJ293bmVyLmVsZW1lbnRzWzE2XS5pZCcsICInaW5wdXRyZXNldCciKTsKIHNob3VsZEJl
KCdvd25lci5lbGVtZW50c1sxN10uaWQnLCAiJ2lucHV0YnV0dG9uJyIpOwogc2hvdWxkQmUoJ293
bmVyLmVsZW1lbnRzWzE4XS5pZCcsICIna2V5Z2VuMSciKTsKLXNob3VsZEJlKCdvd25lci5lbGVt
ZW50c1sxOV0uaWQnLCAiJ291dHB1dDEnIik7Ci1zaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMjBd
LmlkJywgIidzZWxlY3QxJyIpOwotc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzIxXS5pZCcsICIn
dGV4dGFyZWExJyIpOworc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzE5XS5pZCcsICInb2JqZWN0
MSciKTsKK3Nob3VsZEJlKCdvd25lci5lbGVtZW50c1syMF0uaWQnLCAiJ291dHB1dDEnIik7Citz
aG91bGRCZSgnb3duZXIuZWxlbWVudHNbMjFdLmlkJywgIidzZWxlY3QxJyIpOworc2hvdWxkQmUo
J293bmVyLmVsZW1lbnRzWzIyXS5pZCcsICIndGV4dGFyZWExJyIpOwogCiAKIHZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75756</attachid>
            <date>2010-12-06 17:05:02 -0800</date>
            <delta_ts>2010-12-06 19:25:27 -0800</delta_ts>
            <desc>Patch V6</desc>
            <filename>formassocV6.patch</filename>
            <type>text/plain</type>
            <size>158345</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI5IEBACisyMDEwLTEyLTA2ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTGV0IEhUTUxPYmplY3RFbGVtZW50IGJlIGEgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4ODIxCisKKyAg
ICAgICAgSW50cm9kdWNlcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgY2xhc3Mgd2hpY2ggd291bGQg
YmUgYSBzdXBlciBjbGFzcworICAgICAgICBvZiBmb3JtIGFzc29jYXRlZCBlbGVtZW50cy4gU29t
ZSBvZiBtZW1iZXIgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgb2YKKyAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCBhcmUgbWlncmF0ZWQgaW50byB0aGlzIGNsYXNzLgorICAgICAgICBGb2xs
b3dpbmcgdGhlIEhUTUw1IHNwZWMsIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgY2xhc3MgYW5kCisg
ICAgICAgIEhUTUxPYmplY3RFbGVtZW50IGNsYXNzIGFyZSBzdWJjbGFzc2VzIG9mIGl0IGZvciBu
b3cuCisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMt
b3JkZXIuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazogQWRkZWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmNwcAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogQWRkZWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkZWQgdGhlIHN5bWJvbCBmb3IgdG9IVE1MRWxlbWVudChG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqKQorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8u
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaDogRml4ZWQgY2xhc3MgZm9yd2FyZCBkZWNsYXJhdGlv
biBvcmRlci4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSk6IE1vZGlmaWVk
IHRvCisgICAgICAgIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZXNldEZvcm1FbGVtZW50c093bmVyKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
aDogRGl0dG8uCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OkRPTUZvcm1EYXRhKToKKyAgICAgICAgKiBodG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6IENvcGllZCBhbmQgcmVuYW1lZCBmcm9tIFdlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6fkZvcm1Bc3NvY2lhdGVkRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkaXR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZUZyb21Gb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXRGb3JtT3duZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0hUTUxFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lh
dGVkRWxlbWVudDo6ZGVyZWYpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50Ojpmb3JtRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6c2V0Rm9ybSk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOiBDaGFuZ2VkIHRo
ZSBhY2Nlc3MgbGV2ZWwgb2YgZmluZEZvcm1BbmNlc3RvcigpLgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1Db2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlv
bjo6aXRlbSk6IE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQKKyAgICAgICAg
aW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db2xsZWN0aW9uOjpnZXROYW1lZEZvcm1JdGVtKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6IERpdHRvLgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6IE1vZGlmaWVkIHJlZ2FyZGluZyB3
aXRoIHRoZSBjaGFuZ2Ugb2YgY2xhc3MKKyAgICAgICAgaGllcmFyY2h5LgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9s
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNl
cnRlZEludG9UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OnJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6dmlydHVhbEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojpmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmRlcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKiBodG1s
L0hUTUxGb3JtRWxlbWVudC5jcHA6IE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQKKyAgICAgICAgaW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
Ojpmb3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50Ojpjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGb3JtRWxlbWVudDo6ZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUpOgorICAgICAgICAqIGh0
bWwvSFRNTEZvcm1FbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50Ojphc3NvY2lhdGVkRWxlbWVudHMpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxl
bWVudC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dXBk
YXRlQ2hlY2tlZFJhZGlvQnV0dG9ucyk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHA6IE1vZGlmaWVkIHJlZ2FyZGluZyB3aXRoIHRoZSBjaGFuZ2Ugb2YgY2xhc3MKKyAgICAg
ICAgaGllcmFyY2h5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxP
YmplY3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojp+SFRN
TE9iamVjdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6YXR0cmlidXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6aW5zZXJ0ZWRJbnRv
VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6cmVtb3ZlZEZyb21U
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1l
KToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9iamVjdEVsZW1lbnQ6OmlzRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50Ojppc0VudW1lcmF0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MT2JqZWN0RWxlbWVudDo6cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCk6Cisg
ICAgICAgICogaHRtbC9IVE1MVGFnTmFtZXMuaW46IEFkZGVkIGNvbnN0cnVjdG9yTmVlZHNGb3Jt
RWxlbWVudCB0byBvYmplY3QgdGFnLgorICAgICAgICAqIGh0bWwvVmFsaWRhdGlvbk1lc3NhZ2Uu
Y3BwOiBNb2RpZmllZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50CisgICAgICAgIGluc3Rl
YWQgb2YgSFRNTEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRp
b25NZXNzYWdlOjpWYWxpZGF0aW9uTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0
aW9uTWVzc2FnZTo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL1ZhbGlkYXRpb25NZXNzYWdlLmg6
IERpdHRvLgorICAgICAgICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6dmFsaWRhdGlvbk1lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6c2V0Q3VzdG9tRXJyb3JNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6OnZhbHVlTWlzc2luZyk6CisgICAgICAgIChXZWJDb3Jl
OjpWYWxpZGl0eVN0YXRlOjp0eXBlTWlzbWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRp
dHlTdGF0ZTo6cGF0dGVybk1pc21hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkaXR5U3Rh
dGU6OnRvb0xvbmcpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6cmFuZ2VVbmRl
cmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6cmFuZ2VPdmVyZmxvdyk6
CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpzdGVwTWlzbWF0Y2gpOgorICAgICAg
ICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlZhbGlk
aXR5U3RhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpWYWxp
ZGl0eVN0YXRlKToKKyAgICAgICAgKiBsb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpjcmVhdGUpOgorCiAyMDEwLTEyLTA1
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFRvbnkgQ2hhbmcuCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA3MzQxMikKKysrIFdlYkNvcmUvQW5kcm9pZC5tawko
d29ya2luZyBjb3B5KQpAQCAtMjc3LDYgKzI3Nyw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExP
Q0FMX1NSQ19GSUxFUykgXAogCWh0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAgXAogCWh0
bWwvRW1haWxJbnB1dFR5cGUuY3BwIFwKIAlodG1sL0ZpbGVJbnB1dFR5cGUuY3BwIFwKKwlodG1s
L0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgXAogCWh0bWwvRm9ybURhdGFMaXN0LmNwcCBcCiAJ
aHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXAogCWh0bWwvSFRNTENvbGxlY3Rpb24uY3BwIFwK
SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gNzM0MTIpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC05OTEsNiArOTkxLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IGh0bWwvRW1haWxJbnB1dFR5cGUuY3BwCiAgICAgaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5j
cHAKICAgICBodG1sL0ZpbGVJbnB1dFR5cGUuY3BwCisgICAgaHRtbC9Gb3JtQXNzb2NpYXRlZEVs
ZW1lbnQuY3BwCiAgICAgaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCiAgICAgaHRtbC9IVE1MQWxsQ29s
bGVjdGlvbi5jcHAKICAgICBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcApJbmRleDogV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShy
ZXZpc2lvbiA3MzQxMikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkK
QEAgLTE1ODUsNiArMTU4NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9odG1s
L0VtYWlsSW5wdXRUeXBlLmggXAogCVdlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcCBcCiAJ
V2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaCBcCisJV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudC5jcHAgXAorCVdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCBc
CiAJV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogCVdlYkNvcmUvaHRtbC9Gb3JtRGF0
YUxpc3QuaCBcCiAJV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBcCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5l
eHAuaW4JKHJldmlzaW9uIDczNDEyKQorKysgV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw3IEBAIF9fWk43V2ViQ29yZTEzS2V5Ym9hcmRFdmVudEMx
RVJLTjNXVEYxMkEKIF9fWk43V2ViQ29yZTEzVHlwaW5nQ29tbWFuZDM5aW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9ySW5RdW90ZWRDb250ZW50RVBOU184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUxM2Ny
ZWF0ZVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNf
NE5vZGVFCiBfX1pON1dlYkNvcmUxM3RvRGV2aWNlU3BhY2VFUktOU185RmxvYXRSZWN0RVA4TlNX
aW5kb3cKK19fWk43V2ViQ29yZTEzdG9IVE1MRWxlbWVudEVQTlNfMjFGb3JtQXNzb2NpYXRlZEVs
ZW1lbnRFCiBfX1pON1dlYkNvcmUxM3RvSlNET01XaW5kb3dFTjNKU0M3SlNWYWx1ZUUKIF9fWk43
V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2UxMnJlbW92ZUNsaWVudEVQTlNfMjBDYWNoZWRSZXNvdXJj
ZUNsaWVudEUKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2U5YWRkQ2xpZW50RVBOU18yMENh
Y2hlZFJlc291cmNlQ2xpZW50RQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDczNDEyKQorKysgV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE2NDIsNiArMTY0Miw4IEBACiAgICAgICAg
ICAgICAnaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5oJywKICAgICAgICAgICAgICdodG1sL0Zp
bGVJbnB1dFR5cGUuY3BwJywKICAgICAgICAgICAgICdodG1sL0ZpbGVJbnB1dFR5cGUuaCcsCisg
ICAgICAgICAgICAnaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwJywKKyAgICAgICAgICAg
ICdodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oJywKICAgICAgICAgICAgICdodG1sL0Zvcm1E
YXRhTGlzdC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRm9ybURhdGFMaXN0LmgnLAogICAgICAg
ICAgICAgJ2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNzM0MTIp
CisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC04ODIsNiArODgyLDcg
QEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9FbWFpbElucHV0VHlwZS5jcHAgXAogICAgIGh0bWwv
RlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIFwKICAgICBodG1sL0ZpbGVJbnB1dFR5cGUuY3BwIFwK
KyAgICBodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgXAogICAgIGh0bWwvRm9ybURhdGFM
aXN0LmNwcCBcCiAgICAgaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXAogICAgIGh0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwIFwKQEAgLTE3OTUsNiArMTc5Niw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIGh0bWwvRE9NRm9ybURhdGEuaCBcCiAgICAgaHRtbC9ET01TZXR0YWJsZVRva2VuTGlzdC5o
IFwKICAgICBodG1sL0RPTVRva2VuTGlzdC5oIFwKKyAgICBodG1sL0Zvcm1Bc3NvY2lhdGVkRWxl
bWVudC5oIFwKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5oIFwKICAgICBodG1sL0ZUUERpcmVjdG9y
eURvY3VtZW50LmggXAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uaCBcCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDczNDEyKQorKysgV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAzNjYs
NiArNTAzNjYsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIgorCQkJCT4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZvcm1Bc3NvY2lhdGVkRWxl
bWVudC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlxodG1sXEZvcm1EYXRhTGlzdC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczNDEyKQorKysg
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTExNjQsNiArMTE2NCw4IEBACiAJCTQ5RkZCRjFEMTFDODU1MEUwMDZBNzExOCAvKiBHcmFw
aGljc0NvbnRleHQzRE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQzRE1h
Yy5tbSAqLzsgfTsKIAkJNDlGRkJGM0YxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RkZCRjNEMTFD
OTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggKi87IH07CiAJCTQ5RkZCRjQwMTFDOTNFRTMw
MDZBNzExOCAvKiBXZWJHTExheWVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0g
Ki87IH07CisJCTRBMERBMkZFMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEEw
REEyRkMxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgKi87IH07
CisJCTRBMERBMkZGMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBMERBMkZEMTI5
QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0QThDOTZFQjBCRTY5MDMyMDA0RUVG
RjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBOEM5NkVBMEJFNjkwMzIwMDRFRUZGMCAvKiBTZWxlY3Rp
b25Db250cm9sbGVyTWFjLm1tICovOyB9OwogCQk0QUNCQzBCRTEyNzEzQ0JEMDA5NEY5QjIgLyog
Q2xhc3NMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRBQ0JDMEJDMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFzc0xpc3QuY3BwICovOyB9OwogCQk0
QUNCQzBCRjEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUNCQzBCRDEyNzEzQ0JEMDA5NEY5QjIgLyog
Q2xhc3NMaXN0LmggKi87IH07CkBAIC03MzE5LDYgKzczMjEsOCBAQAogCQk0OUZGQkYxQzExQzg1
NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRE1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGRkJGM0QxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xMYXllci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTggLyogV2Vi
R0xMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkdM
TGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRBMERBMkZDMTI5QjI0MTkw
MEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNEEwREEyRkQxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEE4Qzk2RUEwQkU2
OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbTsgcGF0
aCA9IG1hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0QUNCQzBCQzEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsYXNzTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTRBQ0JDMEJEMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFzc0xpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xhc3NMaXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDg0Myw2ICsxNDg0Nyw4IEBACiAJCQkJRjU1QjNEODgx
MjUxRjEyRDAwM0VGMjY5IC8qIEVtYWlsSW5wdXRUeXBlLmggKi8sCiAJCQkJRjU1QjNEODkxMjUx
RjEyRDAwM0VGMjY5IC8qIEZpbGVJbnB1dFR5cGUuY3BwICovLAogCQkJCUY1NUIzRDhBMTI1MUYx
MkQwMDNFRjI2OSAvKiBGaWxlSW5wdXRUeXBlLmggKi8sCisJCQkJNEEwREEyRkMxMjlCMjQxOTAw
QUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgKi8sCisJCQkJNEEwREEyRkQxMjlC
MjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oICovLAogCQkJCUE4MTM2RDM3
MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3BwICovLAogCQkJCUE4MTM2RDM2MDk3
M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuaCAqLywKIAkJCQk5NzIwNUFBRDEyMzkyOENB
MDBCMTczODAgLyogRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwICovLApAQCAtMTk3OTYsNiArMTk4
MDIsNyBAQAogCQkJCTM3ODRDMzRCMEUxMUFBMzQwMDdEOEQ0OCAvKiBGb250VHJhaXRzTWFzay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjczNEIxODMxMTlCOTkxRDAwNjU4N0JEIC8qIEZvbnRUcmFu
c2NvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNFRDBBMTk4OUNBMDA3RkI4QzUgLyog
Rm9udFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0QTBEQTJGRjEyOUIyNDE5MDBBQjYxRTEg
LyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEMDVDRUQyQTBB
NDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTRDNzY3MDBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA4NUI5MkJCMEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjI0NjEsNiArMjI0NjgsNyBAQAogCQkJCUI1MzIwRDZDMTIyQTI0RTkwMDJE
MTQ0MCAvKiBGb250UGxhdGZvcm1EYXRhQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlCNzM0
QjE4MTExOUI5OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTgwRTZDRjEwQTE5ODlDQTAwN0ZCOEM1IC8qIEZvbnRWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0QTBEQTJGRTEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBG
b3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NkYwQ0U5MjNB
MTAwN0VGM0NEIC8qIEZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4NUI5MkJBMEVG
REU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oCShyZXZpc2lvbiA3MzQxMikKKysrIFdlYkNvcmUv
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFz
cyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OworY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIAogY2xh
c3MgQ2hlY2tlZFJhZGlvQnV0dG9ucyB7CiBwdWJsaWM6CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biA3MzQxMikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjEsNiArNjEsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRm9ybUFz
c29jaWF0ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC00Mzg4LDIzICs0Mzg5
LDIzIEBAIHZvaWQgRG9jdW1lbnQ6OnNldEljb25VUkwoY29uc3QgU3RyaW5nJiAKICAgICAgICAg
Zi0+bG9hZGVyKCktPnNldEljb25VUkwobV9pY29uVVJMKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEVsZW1lbnQqIGNvbnRyb2wpCit2
b2lkIERvY3VtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRm9ybUFz
c29jaWF0ZWRFbGVtZW50KiBlbGVtZW50KQogewotICAgIEFTU0VSVChjb250cm9sLT5mYXN0SGFz
QXR0cmlidXRlKGZvcm1BdHRyKSk7Ci0gICAgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0
ZS5hZGQoY29udHJvbCk7CisgICAgQVNTRVJUKHRvSFRNTEVsZW1lbnQoZWxlbWVudCktPmZhc3RI
YXNBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKKyAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmli
dXRlLmFkZChlbGVtZW50KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZvcm1FbGVt
ZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCogY29udHJvbCkKK3ZvaWQgRG9jdW1lbnQ6OnVu
cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCogZWxlbWVudCkKIHsKLSAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLnJlbW92
ZShjb250cm9sKTsKKyAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLnJlbW92ZShl
bGVtZW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVzZXRGb3JtRWxlbWVudHNPd25lcihIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0pCiB7Ci0gICAgdHlwZWRlZiBGb3JtRWxlbWVudExpc3RIYXNoU2V0
OjppdGVyYXRvciBJdGVyYXRvcjsKKyAgICB0eXBlZGVmIEZvcm1Bc3NvY2lhdGVkRWxlbWVudExp
c3RIYXNoU2V0OjppdGVyYXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQgPSBtX2Zvcm1F
bGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLmVuZCgpOwogICAgIGZvciAoSXRlcmF0b3IgaXQgPSBt
X2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KCppdCktPnJlc2V0
Rm9ybU93bmVyKGZvcm0pOworICAgICAgICAoKml0KS0+cmVzZXRGb3JtT3duZXIoZm9ybSk7CiB9
CiAKIHZvaWQgRG9jdW1lbnQ6OnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKGJv
b2wgdXNlc1NlY3VyZUtleWJvYXJkKQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA3MzQxMikKKysrIFdl
YkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgY2xh
c3MgRWxlbWVudDsKIGNsYXNzIEVudGl0eVJlZmVyZW5jZTsKIGNsYXNzIEV2ZW50OwogY2xhc3Mg
RXZlbnRMaXN0ZW5lcjsKK2NsYXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKIGNsYXNzIEZyYW1l
OwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CkBAIC00OTEsOCAr
NDkyLDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzU3RhdGVGb3JOZXdGb3JtRWxlbWVudHMoKSBj
b25zdDsKICAgICBib29sIHRha2VTdGF0ZUZvckZvcm1FbGVtZW50KEF0b21pY1N0cmluZ0ltcGwq
IG5hbWUsIEF0b21pY1N0cmluZ0ltcGwqIHR5cGUsIFN0cmluZyYgc3RhdGUpOwogCi0gICAgdm9p
ZCByZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCopOwotICAgIHZv
aWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCopOworICAg
IHZvaWQgcmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCopOworICAgIHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1
dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CiAgICAgdm9pZCByZXNldEZvcm1FbGVtZW50c093
bmVyKEhUTUxGb3JtRWxlbWVudCopOwogCiAgICAgRnJhbWVWaWV3KiB2aWV3KCkgY29uc3Q7IC8v
IGNhbiBiZSBOVUxMCkBAIC0xMjE2LDcgKzEyMTcsOCBAQCBwcml2YXRlOgogCiAgICAgdHlwZWRl
ZiBMaXN0SGFzaFNldDxFbGVtZW50KiwgNjQ+IEZvcm1FbGVtZW50TGlzdEhhc2hTZXQ7CiAgICAg
Rm9ybUVsZW1lbnRMaXN0SGFzaFNldCBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZTsKLSAgICBGb3Jt
RWxlbWVudExpc3RIYXNoU2V0IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGU7CisgICAg
dHlwZWRlZiBMaXN0SGFzaFNldDxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqLCAzMj4gRm9ybUFzc29j
aWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQ7CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50TGlzdEhh
c2hTZXQgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZTsKIAogICAgIHR5cGVkZWYgSGFz
aE1hcDxGb3JtRWxlbWVudEtleSwgVmVjdG9yPFN0cmluZz4sIEZvcm1FbGVtZW50S2V5SGFzaCwg
Rm9ybUVsZW1lbnRLZXlIYXNoVHJhaXRzPiBGb3JtRWxlbWVudFN0YXRlTWFwOwogICAgIEZvcm1F
bGVtZW50U3RhdGVNYXAgbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50czsKSW5kZXg6IFdlYkNvcmUv
aHRtbC9ET01Gb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0RPTUZvcm1E
YXRhLmNwcAkocmV2aXNpb24gNzM0MTIpCisrKyBXZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw5IEBAIERPTUZvcm1EYXRhOjpET01Gb3JtRGF0
YShIVE1MRm9ybUVsZW1lbnQKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtLT5hc3NvY2lhdGVkRWxl
bWVudHMoKVtpXTsKLSAgICAgICAgaWYgKCFjb250cm9sLT5kaXNhYmxlZCgpKQotICAgICAgICAg
ICAgY29udHJvbC0+YXBwZW5kRm9ybURhdGEoKnRoaXMsIHRydWUpOworICAgICAgICBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQgPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXTsK
KyAgICAgICAgaWYgKCF0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5kaXNhYmxlZCgpKQorICAgICAg
ICAgICAgZWxlbWVudC0+YXBwZW5kRm9ybURhdGEoKnRoaXMsIHRydWUpOwogICAgIH0KIH0KIApJ
bmRleDogV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDczMDA3
KQkoZnJvbSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6NzMwMDcpCisr
KyBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDcyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxl
ckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQXR0cmlidXRlLmgi
CisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiRWxlbWVudFJhcmVEYXRhLmgiCisjaW5jbHVkZSAi
RXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiTGFiZWxzTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKKyNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJW
YWxpZGF0aW9uTWVzc2FnZS5oIgorI2luY2x1ZGUgIlZhbGlkaXR5U3RhdGUuaCIKKyNpbmNsdWRl
IDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBm
b3JtKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX2Zvcm0o
Zm9ybSkKKyAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCisgICAgLCBtX3JlYWRPbmx5KGZhbHNlKQor
ICAgICwgbV9yZXF1aXJlZChmYWxzZSkKKyAgICAsIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFs
c2UpCisgICAgLCBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV93aWxs
VmFsaWRhdGUodHJ1ZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQoreworICAgIGlmICghbV9mb3Jt
KQorICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7CisgICAgaWYgKG1fZm9ybSkK
KyAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworfQorCitIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVudCgpCit7CisgICAgaWYgKG1f
Zm9ybSkKKyAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKK30KKwordm9p
ZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKQoreworICAgIGhpZGVWaXNpYmxlVmFs
aWRhdGlvbk1lc3NhZ2UoKTsKKyAgICBIVE1MRWxlbWVudDo6ZGV0YWNoKCk7Cit9CisKK2Jvb2wg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybU5vVmFsaWRhdGUoKSBjb25zdAoreworICAgIHJl
dHVybiAhZ2V0QXR0cmlidXRlKGZvcm1ub3ZhbGlkYXRlQXR0cikuaXNOdWxsKCk7Cit9CisKK1Zh
bGlkaXR5U3RhdGUqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkaXR5KCkKK3sKKyAgICBp
ZiAoIW1fdmFsaWRpdHlTdGF0ZSkKKyAgICAgICAgbV92YWxpZGl0eVN0YXRlID0gVmFsaWRpdHlT
dGF0ZTo6Y3JlYXRlKHRoaXMpOworCisgICAgcmV0dXJuIG1fdmFsaWRpdHlTdGF0ZS5nZXQoKTsK
K30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqIGF0dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIp
IHsKKyAgICAgICAgYm9vbCBvbGREaXNhYmxlZCA9IG1fZGlzYWJsZWQ7CisgICAgICAgIG1fZGlz
YWJsZWQgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAgICAgIGlmIChvbGREaXNhYmxlZCAhPSBtX2Rp
c2FibGVkKSB7CisgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAg
ICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkp
CisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRl
cmVyKCksIEVuYWJsZWRTdGF0ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSByZWFkb25seUF0dHIpIHsKKyAgICAgICAgYm9vbCBvbGRSZWFkT25seSA9IG1fcmVh
ZE9ubHk7CisgICAgICAgIG1fcmVhZE9ubHkgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAgICAgIGlm
IChvbGRSZWFkT25seSAhPSBtX3JlYWRPbmx5KSB7CisgICAgICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisgICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHls
ZSgpLT5oYXNBcHBlYXJhbmNlKCkpCisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUo
KS0+c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIFJlYWRPbmx5U3RhdGUpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVxdWlyZWRBdHRyKSB7CisgICAgICAgIGJv
b2wgb2xkUmVxdWlyZWQgPSBtX3JlcXVpcmVkOworICAgICAgICBtX3JlcXVpcmVkID0gIWF0dHIt
PmlzTnVsbCgpOworICAgICAgICBpZiAob2xkUmVxdWlyZWQgIT0gbV9yZXF1aXJlZCkgeworICAg
ICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CisgICAgICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7IC8vIFVwZGF0ZXMgZm9yIDpyZXF1aXJlZCA6b3B0aW9uYWwgY2xhc3Nlcy4K
KyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOworfQorCit2
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCgpCit7CisgICAgQVNTRVJUKCFhdHRh
Y2hlZCgpKTsKKworICAgIEhUTUxFbGVtZW50OjphdHRhY2goKTsKKworICAgIC8vIFRoZSBjYWxs
IHRvIHVwZGF0ZUZyb21FbGVtZW50KCkgbmVlZHMgdG8gZ28gYWZ0ZXIgdGhlIGNhbGwgdGhyb3Vn
aAorICAgIC8vIHRvIHRoZSBiYXNlIGNsYXNzJ3MgYXR0YWNoKCkgYmVjYXVzZSB0aGF0IGNhbiBz
b21ldGltZXMgZG8gYSBjbG9zZQorICAgIC8vIG9uIHRoZSByZW5kZXJlci4KKyAgICBpZiAocmVu
ZGVyZXIoKSkKKyAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKKyAgICAg
ICAgCisgICAgLy8gRm9jdXMgdGhlIGVsZW1lbnQgaWYgaXQgc2hvdWxkIGhvbm91ciBpdHMgYXV0
b2ZvY3VzIGF0dHJpYnV0ZS4KKyAgICAvLyBXZSBoYXZlIHRvIGRldGVybWluZSBpZiB0aGUgZWxl
bWVudCBpcyBhIFRleHRBcmVhL0lucHV0L0J1dHRvbi9TZWxlY3QsCisgICAgLy8gaWYgaW5wdXQg
dHlwZSBoaWRkZW4gaWdub3JlIGF1dG9mb2N1cy4gU28gaWYgZGlzYWJsZWQgb3IgcmVhZG9ubHku
CisgICAgYm9vbCBpc0lucHV0VHlwZUhpZGRlbiA9IGZhbHNlOworICAgIGlmIChoYXNUYWdOYW1l
KGlucHV0VGFnKSkKKyAgICAgICAgaXNJbnB1dFR5cGVIaWRkZW4gPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4odGhpcyktPmlzSW5wdXRUeXBlSGlkZGVuKCk7CisKKyAgICBpZiAoYXV0
b2ZvY3VzKCkgJiYgcmVuZGVyZXIoKSAmJiAhZG9jdW1lbnQoKS0+aWdub3JlQXV0b2ZvY3VzKCkg
JiYgIWlzUmVhZE9ubHlGb3JtQ29udHJvbCgpICYmCisgICAgICAgICAgICAoKGhhc1RhZ05hbWUo
aW5wdXRUYWcpICYmICFpc0lucHV0VHlwZUhpZGRlbikgfHwgaGFzVGFnTmFtZShzZWxlY3RUYWcp
IHx8CisgICAgICAgICAgICAgIGhhc1RhZ05hbWUoYnV0dG9uVGFnKSB8fCBoYXNUYWdOYW1lKHRl
eHRhcmVhVGFnKSkpCisgICAgICAgICBmb2N1cygpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIGlmIChmYXN0SGFz
QXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1F
bGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7
CisgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpIHsK
KyAgICAgICAgICAgIGlmIChtX2Zvcm0pCisgICAgICAgICAgICAgICAgbV9mb3JtLT5yZW1vdmVG
b3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1F
bGVtZW50KHRoaXMpOworICAgICAgICB9CisgICAgfQorICAgIGlmICghbV9mb3JtKSB7CisgICAg
ICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiBhIG5ldyBmb3JtIGVsZW1lbnQgYmVpbmcg
Y3JlYXRlZCBieQorICAgICAgICAvLyBKYXZhU2NyaXB0IGFuZCBpbnNlcnRlZCBpbnNpZGUgYSBm
b3JtLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIHBhcnNlcgorICAgICAgICAvLyBzZXR0aW5nIGEgZm9y
bSwgd2Ugd2lsbCBhbHJlYWR5IGhhdmUgYSBub24tbnVsbCB2YWx1ZSBmb3IgbV9mb3JtLCAKKyAg
ICAgICAgLy8gYW5kIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAgICAgIG1f
Zm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICAgICAgaWYgKG1fZm9ybSkKKyAgICAgICAg
ICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlz
KTsKKyAgICB9CisKKyAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKK30K
Kworc3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9vdChOb2RlKiBuKQoreworICAgIE5vZGUqIHJv
b3QgPSBuOworICAgIGZvciAoOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKQorICAgICAgICByb290
ID0gbjsKKyAgICByZXR1cm4gcm9vdDsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpyZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKQoreworICAgIGlmIChmYXN0SGFzQXR0cmlidXRl
KGZvcm1BdHRyKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVtZW50V2l0
aEZvcm1BdHRyaWJ1dGUodGhpcyk7CisKKyAgICAvLyBJZiB0aGUgZm9ybSBhbmQgZWxlbWVudCBh
cmUgYm90aCBpbiB0aGUgc2FtZSB0cmVlLCBwcmVzZXJ2ZSB0aGUgY29ubmVjdGlvbiB0byB0aGUg
Zm9ybS4KKyAgICAvLyBPdGhlcndpc2UsIG51bGwgb3V0IG91ciBmb3JtIGFuZCByZW1vdmUgb3Vy
c2VsdmVzIGZyb20gdGhlIGZvcm0ncyBsaXN0IG9mIGVsZW1lbnRzLgorICAgIGlmIChtX2Zvcm0g
JiYgZmluZFJvb3QodGhpcykgIT0gZmluZFJvb3QobV9mb3JtKSkgeworICAgICAgICBtX2Zvcm0t
PnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICBtX2Zvcm0gPSAwOworICAgIH0KKwor
ICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoZGVlcCk7Cit9CisKK2NvbnN0IEF0b21p
Y1N0cmluZyYgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3QK
K3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBmYXN0R2V0QXR0cmlidXRlKG5hbWVB
dHRyKTsKKyAgICByZXR1cm4gbmFtZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IG5hbWU7Cit9CisK
K3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlKQoreworICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOworfQorCit2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgp
Cit7CisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jaGFuZ2VF
dmVudCwgdHJ1ZSwgZmFsc2UpKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpz
ZXREaXNhYmxlZChib29sIGIpCit7CisgICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwgYiA/
ICIiIDogMCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXV0b2ZvY3VzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaGFzQXR0cmlidXRlKGF1dG9mb2N1c0F0dHIpOworfQorCiti
b29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9yZXF1aXJlZDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnRDYWxsYmFj
ayhOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9BUkcobm9kZSwgbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKTsKKyAgICBBU1NFUlRfQVJHKG5vZGUsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+
aXNGb3JtQ29udHJvbEVsZW1lbnQoKSk7CisgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVyKCkpOwor
ICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKSkKKyAgICAg
ICAgcmVuZGVyZXItPnVwZGF0ZUZyb21FbGVtZW50KCk7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQoreworICAgIEhUTUxF
bGVtZW50OjpyZWNhbGNTdHlsZShjaGFuZ2UpOworCisgICAgLy8gdXBkYXRlRnJvbUVsZW1lbnQo
KSBjYW4gY2F1c2UgdGhlIHNlbGVjdGlvbiB0byBjaGFuZ2UsIGFuZCBpbiB0dXJuCisgICAgLy8g
dHJpZ2dlciBzeW5jaHJvbm91cyBsYXlvdXQsIHNvIGl0IG11c3Qgbm90IGJlIGNhbGxlZCBkdXJp
bmcgc3R5bGUgcmVjYWxjLgorICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICBxdWV1ZVBvc3RB
dHRhY2hDYWxsYmFjayh1cGRhdGVGcm9tRWxlbWVudENhbGxiYWNrLCB0aGlzKTsKK30KKworYm9v
bCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIWRpc2FibGVkKCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNG
b2N1c2FibGUoKSBjb25zdAoreworICAgIGlmICghcmVuZGVyZXIoKSB8fCAKKyAgICAgICAgIXJl
bmRlcmVyKCktPmlzQm94KCkgfHwgdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPnNpemUoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBIVE1MRWxlbWVudDo6aXNGb2N1
c2FibGUgaGFuZGxlcyB2aXNpYmlsaXR5IGFuZCBjYWxscyBzdXBvcnRzRm9jdXMgd2hpY2gKKyAg
ICAvLyB3aWxsIGNvdmVyIHRoZSBkaXNhYmxlZCBjYXNlLgorICAgIHJldHVybiBIVE1MRWxlbWVu
dDo6aXNGb2N1c2FibGUoKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0tl
eWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIGlmIChp
c0ZvY3VzYWJsZSgpKQorICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+dGFic1RvQWxs
Q29udHJvbHMoZXZlbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Ojppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKFFUKQorICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNNb3VzZUZvY3Vz
YWJsZSgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworc2hvcnQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdAoreworICAgIC8vIFNraXAgdGhl
IHN1cHBvcnRzRm9jdXMgY2hlY2sgaW4gSFRNTEVsZW1lbnQuCisgICAgcmV0dXJuIEVsZW1lbnQ6
OnRhYkluZGV4KCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVjYWxjV2ls
bFZhbGlkYXRlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIHJldHVybiBmYWxzZSBp
ZiB0aGlzIGVsZW1lbnQgaGFzIGEgZGF0YWxpc3QgZWxlbWVudCBhcyBhbgorICAgIC8vIGFuY2Vz
dG9yLiBTZWUgSFRNTDUgNC4xMC4xMCAnVGhlIGRhdGFsaXN0IGVsZW1lbnQuJworICAgIHJldHVy
biAhbV9kaXNhYmxlZCAmJiAhbV9yZWFkT25seTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Ojp3aWxsVmFsaWRhdGUoKSBjb25zdAoreworICAgIGlmICghbV93aWxsVmFsaWRhdGVJ
bml0aWFsaXplZCkgeworICAgICAgICBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0gdHJ1ZTsK
KyAgICAgICAgbV93aWxsVmFsaWRhdGUgPSByZWNhbGNXaWxsVmFsaWRhdGUoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIGFzc2VydGlvbiBmYWlscywgc2V0TmVl
ZHNXaWxsVmFsaWRhdGVDaGVjaygpIGlzIG5vdAorICAgICAgICAvLyBjYWxsZWQgY29ycmVjdGx5
IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMgcmVjYWxjV2lsbFZhbGlkYXRlKCkgcmVzdWx0
CisgICAgICAgIC8vIGlzIHVwZGF0ZWQuCisgICAgICAgIEFTU0VSVChtX3dpbGxWYWxpZGF0ZSA9
PSByZWNhbGNXaWxsVmFsaWRhdGUoKSk7CisgICAgfQorICAgIHJldHVybiBtX3dpbGxWYWxpZGF0
ZTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROZWVkc1dpbGxWYWxpZGF0
ZUNoZWNrKCkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHdpbGxWYWxpZHRlIGlt
bWVkaWF0ZWx5IGJlY2F1c2Ugd2lsbFZhbGlkYXRlCisgICAgLy8gY2hhbmdlIGNhbiBjYXVzZXMg
c3R5bGUgY2hhbmdlLgorICAgIGJvb2wgbmV3V2lsbFZhbGlkYXRlID0gcmVjYWxjV2lsbFZhbGlk
YXRlKCk7CisgICAgaWYgKG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQgJiYgbV93aWxsVmFsaWRh
dGUgPT0gbmV3V2lsbFZhbGlkYXRlKQorICAgICAgICByZXR1cm47CisgICAgbV93aWxsVmFsaWRh
dGVJbml0aWFsaXplZCA9IHRydWU7CisgICAgbV93aWxsVmFsaWRhdGUgPSBuZXdXaWxsVmFsaWRh
dGU7CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGlmICghbV93aWxsVmFsaWRhdGUp
CisgICAgICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKK30KKworU3RyaW5nIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkKK3sKKyAgICByZXR1cm4g
dmFsaWRpdHkoKS0+dmFsaWRhdGlvbk1lc3NhZ2UoKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQoreworICAgIFBhZ2Uq
IHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1
cm47CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAgaWYgKHJlbmRlcmVyKCkgJiYgd2lsbFZhbGlk
YXRlKCkpIHsKKyAgICAgICAgbWVzc2FnZSA9IHZhbGlkYXRpb25NZXNzYWdlKCkuc3RyaXBXaGl0
ZVNwYWNlKCk7CisgICAgICAgIC8vIEhUTUw1IHNwZWNpZmljYXRpb24gZG9lc24ndCBhc2sgVUEg
dG8gc2hvdyB0aGUgdGl0bGUgYXR0cmlidXRlIHZhbHVlCisgICAgICAgIC8vIHdpdGggdGhlIHZh
bGlkYXRpb25NZXNzYWdlLiAgSG93ZXZlciwgdGhpcyBiZWhhdmlvciBpcyBzYW1lIGFzIE9wZXJh
CisgICAgICAgIC8vIGFuZCB0aGUgc3BlY2lmaWNhdGlvbiBkZXNjcmliZXMgc3VjaCBiZWhhdmlv
ciBhcyBhbiBleGFtcGxlLgorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZ2V0
QXR0cmlidXRlKHRpdGxlQXR0cik7CisgICAgICAgIGlmICghbWVzc2FnZS5pc0VtcHR5KCkgJiYg
IXRpdGxlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ1xuJyk7Cisg
ICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCh0aXRsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKCFtX3ZhbGlkYXRpb25NZXNzYWdlKSB7CisgICAgICAgIG1fdmFsaWRhdGlvbk1lc3NhZ2Ug
PSBWYWxpZGF0aW9uTWVzc2FnZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX3ZhbGlkYXRpb25N
ZXNzYWdlLT5zZXRNZXNzYWdlKG1lc3NhZ2UpOworICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pc0Vt
cHR5KCkpCisgICAgICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICBlbHNl
IGlmIChtX3ZhbGlkYXRpb25NZXNzYWdlLT5tZXNzYWdlKCkgIT0gbWVzc2FnZSkKKyAgICAgICAg
bV92YWxpZGF0aW9uTWVzc2FnZS0+c2V0TWVzc2FnZShtZXNzYWdlKTsKK30KKwordm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkKK3sKKyAg
ICBtX3ZhbGlkYXRpb25NZXNzYWdlID0gMDsKK30KKworU3RyaW5nIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
dmFsaWRhdGlvbk1lc3NhZ2UgPyBtX3ZhbGlkYXRpb25NZXNzYWdlLT5tZXNzYWdlKCkgOiBTdHJp
bmcoKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KFZl
Y3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENv
bnRyb2xzKQoreworICAgIGlmICghd2lsbFZhbGlkYXRlKCkgfHwgaXNWYWxpZEZvcm1Db250cm9s
RWxlbWVudCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBBbiBldmVudCBoYW5kbGVy
IGNhbiBkZXJlZiB0aGlzIG9iamVjdC4KKyAgICBSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4gcHJvdGVjdG9yKHRoaXMpOworICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2luYWxEb2N1bWVu
dChkb2N1bWVudCgpKTsKKyAgICBib29sIG5lZWRzRGVmYXVsdEFjdGlvbiA9IGRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxzZSwgdHJ1ZSkp
OworICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xz
ICYmIGluRG9jdW1lbnQoKSAmJiBvcmlnaW5hbERvY3VtZW50ID09IGRvY3VtZW50KCkpCisgICAg
ICAgIHVuaGFuZGxlZEludmFsaWRDb250cm9scy0+YXBwZW5kKHRoaXMpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRy
b2xFbGVtZW50KCkKK3sKKyAgICAvLyBJZiB0aGUgZm9sbG93aW5nIGFzc2VydGlvbiBmYWlscywg
c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCkgaXMgbm90IGNhbGxlZAorICAgIC8vIGNvcnJlY3RseSB3
aGVuIHNvbWV0aGluZyB3aGljaCBjaGFuZ2VzIHZhbGlkaXR5IGlzIHVwZGF0ZWQuCisgICAgQVNT
RVJUKG1faXNWYWxpZCA9PSB2YWxpZGl0eSgpLT52YWxpZCgpKTsKKyAgICByZXR1cm4gbV9pc1Zh
bGlkOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzVmFsaWRpdHlD
aGVjaygpCit7CisgICAgYm9vbCBuZXdJc1ZhbGlkID0gdmFsaWRpdHkoKS0+dmFsaWQoKTsKKyAg
ICBpZiAod2lsbFZhbGlkYXRlKCkgJiYgbmV3SXNWYWxpZCAhPSBtX2lzVmFsaWQpIHsKKyAgICAg
ICAgLy8gVXBkYXRlIHN0eWxlIGZvciBwc2V1ZG8gY2xhc3NlcyBzdWNoIGFzIDp2YWxpZCA6aW52
YWxpZC4KKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIH0KKyAgICBtX2lzVmFs
aWQgPSBuZXdJc1ZhbGlkOworCisgICAgLy8gVXBkYXRlcyBvbmx5IGlmIHRoaXMgY29udHJvbCBh
bHJlYWR5IGhhcyBhIHZhbGlkdGlvbiBtZXNzYWdlLgorICAgIGlmICghdmlzaWJsZVZhbGlkYXRp
b25NZXNzYWdlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIENhbGxzIHVwZGF0ZVZpc2libGVW
YWxpZGF0aW9uTWVzc2FnZSgpIGV2ZW4gaWYgbV9pc1ZhbGlkIGlzIG5vdAorICAgICAgICAvLyBj
aGFuZ2VkIGJlY2F1c2UgYSB2YWxpZGF0aW9uIG1lc3NhZ2UgY2FuIGJlIGNoYWduZWQuCisgICAg
ICAgIHVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgIH0KK30KKwordm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJpbmcmIGVy
cm9yKQoreworICAgIHZhbGlkaXR5KCktPnNldEN1c3RvbUVycm9yTWVzc2FnZShlcnJvcik7Cit9
CisgICAgCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCgp
Cit7CisgICAgaWYgKGRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFn
ZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZvcm1EaWRGb2N1cyh0aGlzKTsKKworICAgIEhUTUxF
bGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpCit7CisgICAgaWYgKGRvY3VtZW50KCktPnBhZ2Uo
KSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZvcm1E
aWRCbHVyKHRoaXMpOworCisgICAgSFRNTEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCk7Cisg
ICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworfQorCitIVE1MRm9ybUVsZW1lbnQq
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9mb3JtOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRGVmYXVsdEJ1
dHRvbkZvckZvcm0oKSBjb25zdAoreworICAgIHJldHVybiBpc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0
b24oKSAmJiBtX2Zvcm0gJiYgbV9mb3JtLT5kZWZhdWx0QnV0dG9uKCkgPT0gdGhpczsKK30KKwor
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVGcm9tRm9ybSgpCit7CisgICAgaWYg
KCFtX2Zvcm0pCisgICAgICAgIHJldHVybjsKKyAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50
KHRoaXMpOworICAgIG1fZm9ybSA9IDA7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6cmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQoreworICAgIGlmIChtX2Zv
cm0pIHsKKyAgICAgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAg
ICB9CisgICAgbV9mb3JtID0gMDsKKyAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikp
IHsKKyAgICAgICAgLy8gVGhlIEhUTUw1IHNwZWMgc2F5cyB0aGF0IHRoZSBlbGVtZW50IHNob3Vs
ZCBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgLy8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhl
IGRvY3VtZW50IHRvIGhhdmUgYW4gSUQgdGhhdCBlcXVhbCB0bworICAgICAgICAvLyB0aGUgdmFs
dWUgb2YgZm9ybSBhdHRyaWJ1dGUsIHNvIHdlIHB1dCB0aGUgcmVzdWx0IG9mCisgICAgICAgIC8v
IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKCkgb3ZlciB0aGUgZ2l2ZW4gZWxlbWVudC4KKyAg
ICAgICAgRWxlbWVudCogZmlyc3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQo
ZmFzdEdldEF0dHJpYnV0ZShmb3JtQXR0cikpOworICAgICAgICBpZiAoZmlyc3RFbGVtZW50ICYm
IGZpcnN0RWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKKyAgICAgICAgICAgIG1fZm9ybSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVudCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fZm9ybSA9IGZvcm07CisgICAgfSBlbHNlCisgICAgICAgIG1fZm9y
bSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBtX2Zvcm0t
PnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgZWxzZQorICAgICAgICBkb2N1bWVudCgp
LT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworfQorCit2b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29s
IHByZXNlcnZlRGVjbHMpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBmb3JtQXR0cikgewor
ICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgICAgICAgICAv
LyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBmb3JtIG93bmVy
IGhlcmUuCisgICAgICAgICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAgICAgIG1fZm9ybS0+
cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFu
Y2VzdG9yKCk7CisgICAgICAgICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAgICAgIG1fZm9y
bS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc2V0Rm9ybU93bmVyKDApOworICAgIH0K
KyAgICBIVE1MRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsK
K30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0xhYmVsYWJsZSgpIGNvbnN0Cit7
CisgICAgLy8gRklYTUU6IEFkZCBtZXRlclRhZyBhbmQgb3V0cHV0VGFnIHRvIHRoZSBsaXN0IG9u
Y2Ugd2Ugc3VwcG9ydCB0aGVtLgorICAgIHJldHVybiBoYXNUYWdOYW1lKGJ1dHRvblRhZykgfHwg
aGFzVGFnTmFtZShpbnB1dFRhZykgfHwgaGFzVGFnTmFtZShrZXlnZW5UYWcpCisjaWYgRU5BQkxF
KE1FVEVSX1RBRykKKyAgICAgICAgfHwgaGFzVGFnTmFtZShtZXRlclRhZykKKyNlbmRpZgorI2lm
IEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgICAgIHx8IGhhc1RhZ05hbWUocHJvZ3Jlc3NUYWcp
CisjZW5kaWYKKyAgICAgICAgfHwgaGFzVGFnTmFtZShzZWxlY3RUYWcpIHx8IGhhc1RhZ05hbWUo
dGV4dGFyZWFUYWcpOworfQorCitQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpsYWJlbHMoKQoreworICAgIGlmICghaXNMYWJlbGFibGUoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgaWYgKCFkb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICBOb2RlUmFyZURhdGEqIGRhdGEgPSBOb2RlOjplbnN1cmVSYXJlRGF0YSgpOworICAgIGlmICgh
ZGF0YS0+bm9kZUxpc3RzKCkpIHsKKyAgICAgICAgZGF0YS0+c2V0Tm9kZUxpc3RzKE5vZGVMaXN0
c05vZGVEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVMaXN0Q2Fj
aGUoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIExhYmVsc05vZGVMaXN0OjpjcmVhdGUodGhp
cyk7Cit9CisgICAgCitIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpIVE1MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKKyAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQodGFnTmFtZSwgZG9jLCBmKQoreworICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1l
bnRXaXRoU3RhdGUodGhpcyk7Cit9CisKK0hUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6
On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCkKK3sKKyAgICBkb2N1bWVudCgpLT51
bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Cit9CisKK3ZvaWQgSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZTo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKQorewor
ICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKKyAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwor
fQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpZE1vdmVUb05ld093
bmVyRG9jdW1lbnQoKQoreworICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRo
U3RhdGUodGhpcyk7CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlkTW92ZVRvTmV3T3du
ZXJEb2N1bWVudCgpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6
OmF1dG9Db21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFmb3JtKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmb3JtKCktPmF1dG9Db21wbGV0ZSgpOworfQorCitib29sIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNv
bnRyb2xTdGF0ZSgpIGNvbnN0Cit7CisgICAgLy8gV2UgZG9uJ3Qgc2F2ZS9yZXN0b3JlIGNvbnRy
b2wgc3RhdGUgaW4gYSBmb3JtIHdpdGggYXV0b2NvbXBsZXRlPW9mZi4KKyAgICByZXR1cm4gYXR0
YWNoZWQoKSAmJiBhdXRvQ29tcGxldGUoKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQoreworICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworCisgICAgLy8gV2UgZG9uJ3Qg
c2F2ZSBzdGF0ZSBvZiBhIGNvbnRyb2wgd2l0aCBzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250
cm9sU3RhdGUoKT1mYWxzZS4KKyAgICAvLyBCdXQgd2UgbmVlZCB0byBza2lwIHJlc3RvcmluZyBw
cm9jZXNzIHRvbyBiZWNhdXNlIGEgY29udHJvbCBpbiBhbm90aGVyCisgICAgLy8gZm9ybSBtaWdo
dCBoYXZlIHRoZSBzYW1lIHBhaXIgb2YgbmFtZSBhbmQgdHlwZSBhbmQgc2F2ZWQgaXRzIHN0YXRl
LgorICAgIGlmICghc2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOworICAgIGlmIChk
b2MtPmhhc1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkpIHsKKyAgICAgICAgU3RyaW5nIHN0YXRl
OworICAgICAgICBpZiAoZG9jLT50YWtlU3RhdGVGb3JGb3JtRWxlbWVudChuYW1lKCkuaW1wbCgp
LCB0eXBlKCkuaW1wbCgpLCBzdGF0ZSkpCisgICAgICAgICAgICByZXN0b3JlRm9ybUNvbnRyb2xT
dGF0ZShzdGF0ZSk7CisgICAgfQorfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZl
bnQgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RleHRDb250cm9sKCkpIHsKKyAgICAg
ICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c3VidHJlZUhhc0NoYW5nZWQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCitIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZSh0YWdOYW1lLCBkb2MsIGZvcm0pCit7Cit9CisKK0hUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKQorewor
fQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQo
KQoreworICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVyKCkpCisgICAgICAgIHVwZGF0ZVBsYWNl
aG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CisgICAgaGFuZGxlRm9jdXNFdmVudCgpOworICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNoRm9jdXNFdmVudCgpOworfQor
Cit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpCit7
CisgICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIoKSkKKyAgICAgICAgdXBkYXRlUGxhY2Vob2xk
ZXJWaXNpYmlsaXR5KGZhbHNlKTsKKyAgICBoYW5kbGVCbHVyRXZlbnQoKTsKKyAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEJsdXJFdmVudCgpOworfQorCitTdHJp
bmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwcGVkUGxhY2Vob2xkZXIoKSBjb25z
dAoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRNTDUgc3BlY2lmaWNhdGlvbiwgd2UgbmVl
ZCB0byByZW1vdmUgQ1IgYW5kIExGIGZyb20KKyAgICAvLyB0aGUgYXR0cmlidXRlIHZhbHVlLgor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1dGUocGxh
Y2Vob2xkZXJBdHRyKTsKKyAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKG5ld2xpbmVD
aGFyYWN0ZXIpICYmICFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhjYXJyaWFnZVJldHVybikpCisg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTsKKworICAgIFZlY3RvcjxVQ2hhcj4gc3RyaXBw
ZWQ7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlVmFsdWUubGVuZ3RoKCk7CisgICAg
c3RyaXBwZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IGF0dHJpYnV0
ZVZhbHVlW2ldOworICAgICAgICBpZiAoY2hhcmFjdGVyID09IG5ld2xpbmVDaGFyYWN0ZXIgfHwg
Y2hhcmFjdGVyID09IGNhcnJpYWdlUmV0dXJuKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIHN0cmlwcGVkLmFwcGVuZChjaGFyYWN0ZXIpOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5n
OjphZG9wdChzdHJpcHBlZCk7Cit9CisKK3N0YXRpYyBib29sIGlzTm90TGluZUJyZWFrKFVDaGFy
IGNoKSB7IHJldHVybiBjaCAhPSBuZXdsaW5lQ2hhcmFjdGVyICYmIGNoICE9IGNhcnJpYWdlUmV0
dXJuOyB9CisKK2Jvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlzUGxhY2Vob2xkZXJF
bXB0eSgpIGNvbnN0Cit7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9
IGdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpOworICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1
ZS5zdHJpbmcoKS5maW5kKGlzTm90TGluZUJyZWFrKSA9PSBub3RGb3VuZDsKK30KKworYm9vbCBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBj
b25zdAoreworICAgIHJldHVybiBzdXBwb3J0c1BsYWNlaG9sZGVyKCkKKyAgICAgICAgJiYgaXNF
bXB0eVZhbHVlKCkKKyAgICAgICAgJiYgZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlz
CisgICAgICAgICYmICFpc1BsYWNlaG9sZGVyRW1wdHkoKTsKK30KKwordm9pZCBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDo6dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGJvb2wgcGxhY2Vo
b2xkZXJWYWx1ZUNoYW5nZWQpCit7CisgICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIoKSAmJiBy
ZW5kZXJlcigpKQorICAgICAgICB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT51cGRh
dGVQbGFjZWhvbGRlclZpc2liaWxpdHkocGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSwgcGxh
Y2Vob2xkZXJWYWx1ZUNoYW5nZWQpOworfQorCitSZW5kZXJUZXh0Q29udHJvbCogSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQ6OnRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0KCkKK3sKKyAg
ICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgIHJldHVy
biB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpOworfQorCit2b2lkIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCit7CisgICAgc2V0
U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIG1heChzdGFydCwgc2VsZWN0aW9uRW5kKCkpKTsKK30KKwor
dm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKGludCBlbmQp
Cit7CisgICAgc2V0U2VsZWN0aW9uUmFuZ2UobWluKGVuZCwgc2VsZWN0aW9uU3RhcnQoKSksIGVu
ZCk7Cit9CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdCgpCit7Cisg
ICAgc2V0U2VsZWN0aW9uUmFuZ2UoMCwgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOworfQor
Cit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShpbnQg
c3RhcnQsIGludCBlbmQpCit7CisgICAgV2ViQ29yZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywg
c3RhcnQsIGVuZCk7Cit9CisKK2ludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0
aW9uU3RhcnQoKSBjb25zdAoreworICAgIGlmICghaXNUZXh0Rm9ybUNvbnRyb2woKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhpcyAm
JiBjYWNoZWRTZWxlY3Rpb25TdGFydCgpID49IDApCisgICAgICAgIHJldHVybiBjYWNoZWRTZWxl
Y3Rpb25TdGFydCgpOworICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvblN0YXJ0
KCk7Cit9CisKK2ludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uRW5kKCkg
Y29uc3QKK3sKKyAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYgY2FjaGVkU2Vs
ZWN0aW9uRW5kKCkgPj0gMCkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFNlbGVjdGlvbkVuZCgpOwor
ICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHRvUmVu
ZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbkVuZCgpOworfQorCitQYXNzUmVm
UHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKCkgY29uc3QK
K3sKKyAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWlzVGV4dEZvcm1Db250cm9sKCkgfHwgY2FjaGVk
U2VsZWN0aW9uU3RhcnQoKSA8IDAgfHwgY2FjaGVkU2VsZWN0aW9uRW5kKCkgPCAwKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+
c2VsZWN0aW9uKGNhY2hlZFNlbGVjdGlvblN0YXJ0KCksIGNhY2hlZFNlbGVjdGlvbkVuZCgpKTsK
K30KKwordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKiBhdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcGxhY2Vob2xk
ZXJBdHRyKQorICAgICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkodHJ1ZSk7CisgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc2VsZWN0QXR0cikKKyAgICAgICAgc2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIGNyZWF0ZUF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbmNoYW5nZUF0dHIpCisgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLmNoYW5nZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIGF0
dHIpKTsKKyAgICBlbHNlCisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJjb3Jl
CkluZGV4OiBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNzMw
MDcpCisrKyBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMsNzMgKzIzLDI4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkNoYXJhY3Rl
ck5hbWVzLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudFBhcnNlci5oIgotI2lu
Y2x1ZGUgIkVsZW1lbnRSYXJlRGF0YS5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAi
RXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMYWJlbHNOb2RlTGlzdC5oIgotI2luY2x1ZGUgIlBhZ2Uu
aCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5l
ci5oIgotI2luY2x1ZGUgIlZhbGlkYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiSFRNTE9iamVj
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJWYWxpZGl0eVN0YXRlLmgiCi0jaW5jbHVkZSA8bGltaXRz
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLSAg
ICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9mb3JtKGZvcm0pCi0g
ICAgLCBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwgbV9yZWFkT25seShmYWxzZSkKLSAgICAsIG1f
cmVxdWlyZWQoZmFsc2UpCi0gICAgLCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQotICAg
ICwgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1fd2lsbFZhbGlkYXRl
KHRydWUpCi0gICAgLCBtX2lzVmFsaWQodHJ1ZSkKLXsKLSAgICBpZiAoIW1fZm9ybSkKLSAgICAg
ICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwotICAgIGlmIChtX2Zvcm0pCi0gICAgICAg
IG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLX0KIAotSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKQorRm9ybUFzc29jaWF0ZWRFbGVtZW50
OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogbV9m
b3JtKGZvcm0pCiB7Ci0gICAgaWYgKG1fZm9ybSkKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3Jt
RWxlbWVudCh0aGlzKTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2go
KQorRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KCkKIHsKLSAg
ICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgSFRNTEVsZW1lbnQ6OmRldGFj
aCgpOwogfQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1Ob1ZhbGlkYXRlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0dHIpLmlz
TnVsbCgpOwotfQotCi1WYWxpZGl0eVN0YXRlKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2YWxp
ZGl0eSgpCitWYWxpZGl0eVN0YXRlKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkaXR5KCkK
IHsKICAgICBpZiAoIW1fdmFsaWRpdHlTdGF0ZSkKICAgICAgICAgbV92YWxpZGl0eVN0YXRlID0g
VmFsaWRpdHlTdGF0ZTo6Y3JlYXRlKHRoaXMpOwpAQCAtOTcsODYgKzUyLDI4IEBAIFZhbGlkaXR5
U3RhdGUqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnYKICAgICByZXR1cm4gbV92YWxpZGl0eVN0
YXRlLmdldCgpOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpp
bnNlcnRlZEludG9UcmVlKCkKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGRpc2FibGVkQXR0
cikgewotICAgICAgICBib29sIG9sZERpc2FibGVkID0gbV9kaXNhYmxlZDsKLSAgICAgICAgbV9k
aXNhYmxlZCA9ICFhdHRyLT5pc051bGwoKTsKLSAgICAgICAgaWYgKG9sZERpc2FibGVkICE9IG1f
ZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICAgICAg
ICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2Uo
KSkKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNoYW5nZWQocmVu
ZGVyZXIoKSwgRW5hYmxlZFN0YXRlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IHJlYWRvbmx5QXR0cikgewotICAgICAgICBib29sIG9sZFJlYWRPbmx5ID0gbV9y
ZWFkT25seTsKLSAgICAgICAgbV9yZWFkT25seSA9ICFhdHRyLT5pc051bGwoKTsKLSAgICAgICAg
aWYgKG9sZFJlYWRPbmx5ICE9IG1fcmVhZE9ubHkpIHsKLSAgICAgICAgICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0
eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVt
ZSgpLT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgUmVhZE9ubHlTdGF0ZSk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSByZXF1aXJlZEF0dHIpIHsKLSAgICAgICAg
Ym9vbCBvbGRSZXF1aXJlZCA9IG1fcmVxdWlyZWQ7Ci0gICAgICAgIG1fcmVxdWlyZWQgPSAhYXR0
ci0+aXNOdWxsKCk7Ci0gICAgICAgIGlmIChvbGRSZXF1aXJlZCAhPSBtX3JlcXVpcmVkKSB7Ci0g
ICAgICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKLSAgICAgICAgICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoKTsgLy8gVXBkYXRlcyBmb3IgOnJlcXVpcmVkIDpvcHRpb25hbCBjbGFzc2Vz
LgotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKLSAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7Ci19Ci0K
LXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKLXsKLSAgICBBU1NFUlQoIWF0
dGFjaGVkKCkpOwotCi0gICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwotCi0gICAgLy8gVGhlIGNh
bGwgdG8gdXBkYXRlRnJvbUVsZW1lbnQoKSBuZWVkcyB0byBnbyBhZnRlciB0aGUgY2FsbCB0aHJv
dWdoCi0gICAgLy8gdG8gdGhlIGJhc2UgY2xhc3MncyBhdHRhY2goKSBiZWNhdXNlIHRoYXQgY2Fu
IHNvbWV0aW1lcyBkbyBhIGNsb3NlCi0gICAgLy8gb24gdGhlIHJlbmRlcmVyLgotICAgIGlmIChy
ZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwotICAg
ICAgICAKLSAgICAvLyBGb2N1cyB0aGUgZWxlbWVudCBpZiBpdCBzaG91bGQgaG9ub3VyIGl0cyBh
dXRvZm9jdXMgYXR0cmlidXRlLgotICAgIC8vIFdlIGhhdmUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBl
bGVtZW50IGlzIGEgVGV4dEFyZWEvSW5wdXQvQnV0dG9uL1NlbGVjdCwKLSAgICAvLyBpZiBpbnB1
dCB0eXBlIGhpZGRlbiBpZ25vcmUgYXV0b2ZvY3VzLiBTbyBpZiBkaXNhYmxlZCBvciByZWFkb25s
eS4KLSAgICBib29sIGlzSW5wdXRUeXBlSGlkZGVuID0gZmFsc2U7Ci0gICAgaWYgKGhhc1RhZ05h
bWUoaW5wdXRUYWcpKQotICAgICAgICBpc0lucHV0VHlwZUhpZGRlbiA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPih0aGlzKS0+aXNJbnB1dFR5cGVIaWRkZW4oKTsKLQotICAgIGlmIChh
dXRvZm9jdXMoKSAmJiByZW5kZXJlcigpICYmICFkb2N1bWVudCgpLT5pZ25vcmVBdXRvZm9jdXMo
KSAmJiAhaXNSZWFkT25seUZvcm1Db250cm9sKCkgJiYKLSAgICAgICAgICAgICgoaGFzVGFnTmFt
ZShpbnB1dFRhZykgJiYgIWlzSW5wdXRUeXBlSGlkZGVuKSB8fCBoYXNUYWdOYW1lKHNlbGVjdFRh
ZykgfHwKLSAgICAgICAgICAgICAgaGFzVGFnTmFtZShidXR0b25UYWcpIHx8IGhhc1RhZ05hbWUo
dGV4dGFyZWFUYWcpKSkKLSAgICAgICAgIGZvY3VzKCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCi17Ci0gICAgaWYgKGZhc3RI
YXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9y
bUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIp
KTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkg
eworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKKyAgICBp
ZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKKyAgICAgICAgZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKHRoaXMp
OworICAgICAgICBFbGVtZW50KiBmb3JtRWxlbWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmdl
dEVsZW1lbnRCeUlkKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKKyAgICAg
ICAgaWYgKGZvcm1FbGVtZW50ICYmIGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpKSB7
CiAgICAgICAgICAgICBpZiAobV9mb3JtKQogICAgICAgICAgICAgICAgIG1fZm9ybS0+cmVtb3Zl
Rm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudCo+KGZvcm1FbGVtZW50KTsKICAgICAgICAgICAgIG1fZm9ybS0+cmVn
aXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW1fZm9y
bSkgewogICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgYSBuZXcgZm9ybSBlbGVt
ZW50IGJlaW5nIGNyZWF0ZWQgYnkKICAgICAgICAgLy8gSmF2YVNjcmlwdCBhbmQgaW5zZXJ0ZWQg
aW5zaWRlIGEgZm9ybS4gIEluIHRoZSBjYXNlIG9mIHRoZSBwYXJzZXIKLSAgICAgICAgLy8gc2V0
dGluZyBhIGZvcm0sIHdlIHdpbGwgYWxyZWFkeSBoYXZlIGEgbm9uLW51bGwgdmFsdWUgZm9yIG1f
Zm9ybSwgCisgICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3aWxsIGFscmVhZHkgaGF2ZSBh
IG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sCiAgICAgICAgIC8vIGFuZCBzbyB3ZSBkb24ndCBu
ZWVkIHRvIGRvIGFueXRoaW5nLgotICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7
CisgICAgICAgIG1fZm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKICAgICAgICAg
aWYgKG1fZm9ybSkKICAgICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlz
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0
dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKICAgICB9Ci0KLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZShkZWVwKTsKIH0KIAogc3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9vdChOb2Rl
KiBuKQpAQCAtMTg3LDI1NiArODQsMTkgQEAgc3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9vdChO
b2RlKiBuKQogICAgIHJldHVybiByb290OwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dDo6cmVtb3ZlZEZyb21UcmVlKCkKIHsKLSAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0
cikpCi0gICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0
cmlidXRlKHRoaXMpOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0
aGlzKTsKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCisgICAg
ICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0
cmlidXRlKHRoaXMpOwogCiAgICAgLy8gSWYgdGhlIGZvcm0gYW5kIGVsZW1lbnQgYXJlIGJvdGgg
aW4gdGhlIHNhbWUgdHJlZSwgcHJlc2VydmUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGZvcm0uCiAg
ICAgLy8gT3RoZXJ3aXNlLCBudWxsIG91dCBvdXIgZm9ybSBhbmQgcmVtb3ZlIG91cnNlbHZlcyBm
cm9tIHRoZSBmb3JtJ3MgbGlzdCBvZiBlbGVtZW50cy4KLSAgICBpZiAobV9mb3JtICYmIGZpbmRS
b290KHRoaXMpICE9IGZpbmRSb290KG1fZm9ybSkpIHsKLSAgICAgICAgbV9mb3JtLT5yZW1vdmVG
b3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgbV9mb3JtID0gMDsKLSAgICB9Ci0KLSAgICBIVE1M
RWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGRlZXApOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcm
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1Db250cm9sTmFtZSgpIGNvbnN0Ci17Ci0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci0g
ICAgcmV0dXJuIG5hbWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiBuYW1lOwotfQotCi12b2lkIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotdm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKQotewotICAg
IGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIHRy
dWUsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0RGlzYWJs
ZWQoYm9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGIgPyAiIiA6IDAp
OwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF1dG9mb2N1cygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShhdXRvZm9jdXNBdHRyKTsKLX0KLQotYm9vbCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVx
dWlyZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZUZyb21FbGVtZW50Q2FsbGJhY2soTm9kZSog
bm9kZSkKLXsKLSAgICBBU1NFUlRfQVJHKG5vZGUsIG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7Ci0g
ICAgQVNTRVJUX0FSRyhub2RlLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpOwotICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcigpKTsKLSAgICBpZiAo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRl
cmVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKLXsKLSAgICBIVE1MRWxlbWVudDo6
cmVjYWxjU3R5bGUoY2hhbmdlKTsKLQotICAgIC8vIHVwZGF0ZUZyb21FbGVtZW50KCkgY2FuIGNh
dXNlIHRoZSBzZWxlY3Rpb24gdG8gY2hhbmdlLCBhbmQgaW4gdHVybgotICAgIC8vIHRyaWdnZXIg
c3luY2hyb25vdXMgbGF5b3V0LCBzbyBpdCBtdXN0IG5vdCBiZSBjYWxsZWQgZHVyaW5nIHN0eWxl
IHJlY2FsYy4KLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcXVldWVQb3N0QXR0YWNoQ2Fs
bGJhY2sodXBkYXRlRnJvbUVsZW1lbnRDYWxsYmFjaywgdGhpcyk7Ci19Ci0KLWJvb2wgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFk
aXNhYmxlZCgpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9jdXNhYmxl
KCkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkgfHwgCi0gICAgICAgICFyZW5kZXJlcigp
LT5pc0JveCgpIHx8IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5zaXplKCkuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gSFRNTEVsZW1lbnQ6OmlzRm9jdXNhYmxlIGhh
bmRsZXMgdmlzaWJpbGl0eSBhbmQgY2FsbHMgc3Vwb3J0c0ZvY3VzIHdoaWNoCi0gICAgLy8gd2ls
bCBjb3ZlciB0aGUgZGlzYWJsZWQgY2FzZS4KLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzRm9j
dXNhYmxlKCk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNLZXlib2FyZEZv
Y3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKLXsKLSAgICBpZiAoaXNGb2N1c2Fi
bGUoKSkKLSAgICAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICByZXR1
cm4gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnRhYnNUb0FsbENvbnRyb2xz
KGV2ZW50KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShRVCkKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKTsK
LSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXNob3J0IEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKLXsKLSAgICAvLyBTa2lwIHRoZSBzdXBwb3J0
c0ZvY3VzIGNoZWNrIGluIEhUTUxFbGVtZW50LgotICAgIHJldHVybiBFbGVtZW50Ojp0YWJJbmRl
eCgpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlY2FsY1dpbGxWYWxpZGF0
ZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFNob3VsZCByZXR1cm4gZmFsc2UgaWYgdGhpcyBl
bGVtZW50IGhhcyBhIGRhdGFsaXN0IGVsZW1lbnQgYXMgYW4KLSAgICAvLyBhbmNlc3Rvci4gU2Vl
IEhUTUw1IDQuMTAuMTAgJ1RoZSBkYXRhbGlzdCBlbGVtZW50LicKLSAgICByZXR1cm4gIW1fZGlz
YWJsZWQgJiYgIW1fcmVhZE9ubHk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
d2lsbFZhbGlkYXRlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6
ZWQpIHsKLSAgICAgICAgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAg
IG1fd2lsbFZhbGlkYXRlID0gcmVjYWxjV2lsbFZhbGlkYXRlKCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmFpbHMsIHNldE5lZWRzV2lsbFZh
bGlkYXRlQ2hlY2soKSBpcyBub3QKLSAgICAgICAgLy8gY2FsbGVkIGNvcnJlY3RseSB3aGVuIHNv
bWV0aGluZyB3aGljaCBjaGFuZ2VzIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIHJlc3VsdAotICAgICAg
ICAvLyBpcyB1cGRhdGVkLgotICAgICAgICBBU1NFUlQobV93aWxsVmFsaWRhdGUgPT0gcmVjYWxj
V2lsbFZhbGlkYXRlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV93aWxsVmFsaWRhdGU7Ci19Ci0K
LXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygp
Ci17Ci0gICAgLy8gV2UgbmVlZCB0byByZWNhbGN1bGF0ZSB3aWxsVmFsaWR0ZSBpbW1lZGlhdGVs
eSBiZWNhdXNlIHdpbGxWYWxpZGF0ZQotICAgIC8vIGNoYW5nZSBjYW4gY2F1c2VzIHN0eWxlIGNo
YW5nZS4KLSAgICBib29sIG5ld1dpbGxWYWxpZGF0ZSA9IHJlY2FsY1dpbGxWYWxpZGF0ZSgpOwot
ICAgIGlmIChtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkICYmIG1fd2lsbFZhbGlkYXRlID09IG5l
d1dpbGxWYWxpZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2lsbFZhbGlkYXRlSW5pdGlh
bGl6ZWQgPSB0cnVlOwotICAgIG1fd2lsbFZhbGlkYXRlID0gbmV3V2lsbFZhbGlkYXRlOwotICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICBpZiAoIW1fd2lsbFZhbGlkYXRlKQotICAgICAg
ICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci19Ci0KLVN0cmluZyBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Ojp2YWxpZGF0aW9uTWVzc2FnZSgpCi17Ci0gICAgcmV0dXJuIHZhbGlkaXR5
KCktPnZhbGlkYXRpb25NZXNzYWdlKCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkKLXsKLSAgICBQYWdlKiBwYWdlID0g
ZG9jdW1lbnQoKS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IFN0cmluZyBtZXNzYWdlOwotICAgIGlmIChyZW5kZXJlcigpICYmIHdpbGxWYWxpZGF0ZSgpKSB7
Ci0gICAgICAgIG1lc3NhZ2UgPSB2YWxpZGF0aW9uTWVzc2FnZSgpLnN0cmlwV2hpdGVTcGFjZSgp
OwotICAgICAgICAvLyBIVE1MNSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgYXNrIFVBIHRvIHNob3cg
dGhlIHRpdGxlIGF0dHJpYnV0ZSB2YWx1ZQotICAgICAgICAvLyB3aXRoIHRoZSB2YWxpZGF0aW9u
TWVzc2FnZS4gIEhvd2V2ZXIsIHRoaXMgYmVoYXZpb3IgaXMgc2FtZSBhcyBPcGVyYQotICAgICAg
ICAvLyBhbmQgdGhlIHNwZWNpZmljYXRpb24gZGVzY3JpYmVzIHN1Y2ggYmVoYXZpb3IgYXMgYW4g
ZXhhbXBsZS4KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGdldEF0dHJpYnV0
ZSh0aXRsZUF0dHIpOwotICAgICAgICBpZiAoIW1lc3NhZ2UuaXNFbXB0eSgpICYmICF0aXRsZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCdcbicpOwotICAgICAgICAg
ICAgbWVzc2FnZS5hcHBlbmQodGl0bGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghbV92
YWxpZGF0aW9uTWVzc2FnZSkgewotICAgICAgICBtX3ZhbGlkYXRpb25NZXNzYWdlID0gVmFsaWRh
dGlvbk1lc3NhZ2U6OmNyZWF0ZSh0aGlzKTsKLSAgICAgICAgbV92YWxpZGF0aW9uTWVzc2FnZS0+
c2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaXNFbXB0eSgpKQot
ICAgICAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgZWxzZSBpZiAobV92
YWxpZGF0aW9uTWVzc2FnZS0+bWVzc2FnZSgpICE9IG1lc3NhZ2UpCi0gICAgICAgIG1fdmFsaWRh
dGlvbk1lc3NhZ2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCi17Ci0gICAgbV92YWxp
ZGF0aW9uTWVzc2FnZSA9IDA7Ci19Ci0KLVN0cmluZyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2
aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX3ZhbGlkYXRp
b25NZXNzYWdlID8gbV92YWxpZGF0aW9uTWVzc2FnZS0+bWVzc2FnZSgpIDogU3RyaW5nKCk7Ci19
Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0b3I8UmVm
UHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scykK
LXsKLSAgICBpZiAoIXdpbGxWYWxpZGF0ZSgpIHx8IGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gZGVy
ZWYgdGhpcyBvYmplY3QuCi0gICAgUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+IHByb3Rl
Y3Rvcih0aGlzKTsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG9yaWdpbmFsRG9jdW1lbnQoZG9jdW1l
bnQoKSk7Ci0gICAgYm9vbCBuZWVkc0RlZmF1bHRBY3Rpb24gPSBkaXNwYXRjaEV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmludmFsaWRFdmVudCwgZmFsc2UsIHRydWUpKTsKLSAgICBp
ZiAobmVlZHNEZWZhdWx0QWN0aW9uICYmIHVuaGFuZGxlZEludmFsaWRDb250cm9scyAmJiBpbkRv
Y3VtZW50KCkgJiYgb3JpZ2luYWxEb2N1bWVudCA9PSBkb2N1bWVudCgpKQotICAgICAgICB1bmhh
bmRsZWRJbnZhbGlkQ29udHJvbHMtPmFwcGVuZCh0aGlzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9sRWxlbWVu
dCgpCi17Ci0gICAgLy8gSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmFpbHMsIHNldE5lZWRz
VmFsaWRpdHlDaGVjaygpIGlzIG5vdCBjYWxsZWQKLSAgICAvLyBjb3JyZWN0bHkgd2hlbiBzb21l
dGhpbmcgd2hpY2ggY2hhbmdlcyB2YWxpZGl0eSBpcyB1cGRhdGVkLgotICAgIEFTU0VSVChtX2lz
VmFsaWQgPT0gdmFsaWRpdHkoKS0+dmFsaWQoKSk7Ci0gICAgcmV0dXJuIG1faXNWYWxpZDsKLX0K
LQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKQot
ewotICAgIGJvb2wgbmV3SXNWYWxpZCA9IHZhbGlkaXR5KCktPnZhbGlkKCk7Ci0gICAgaWYgKHdp
bGxWYWxpZGF0ZSgpICYmIG5ld0lzVmFsaWQgIT0gbV9pc1ZhbGlkKSB7Ci0gICAgICAgIC8vIFVw
ZGF0ZSBzdHlsZSBmb3IgcHNldWRvIGNsYXNzZXMgc3VjaCBhcyA6dmFsaWQgOmludmFsaWQuCi0g
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9Ci0gICAgbV9pc1ZhbGlkID0gbmV3
SXNWYWxpZDsKLQotICAgIC8vIFVwZGF0ZXMgb25seSBpZiB0aGlzIGNvbnRyb2wgYWxyZWFkeSBo
YXMgYSB2YWxpZHRpb24gbWVzc2FnZS4KLSAgICBpZiAoIXZpc2libGVWYWxpZGF0aW9uTWVzc2Fn
ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBDYWxscyB1cGRhdGVWaXNpYmxlVmFsaWRhdGlv
bk1lc3NhZ2UoKSBldmVuIGlmIG1faXNWYWxpZCBpcyBub3QKLSAgICAgICAgLy8gY2hhbmdlZCBi
ZWNhdXNlIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGNhbiBiZSBjaGFnbmVkLgotICAgICAgICB1cGRh
dGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6c2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJiBlcnJvcikKLXsK
LSAgICB2YWxpZGl0eSgpLT5zZXRDdXN0b21FcnJvck1lc3NhZ2UoZXJyb3IpOwotfQotICAgIAot
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKQotewotICAg
IGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hy
b21lKCktPmNsaWVudCgpLT5mb3JtRGlkRm9jdXModGhpcyk7Ci0KLSAgICBIVE1MRWxlbWVudDo6
ZGlzcGF0Y2hGb2N1c0V2ZW50KCk7CisgICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9vdChlbGVtZW50
KSAhPSBmaW5kUm9vdChtX2Zvcm0pKQorICAgICAgICByZW1vdmVGcm9tRm9ybSgpOwogfQogCi12
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKLXsKLSAgICBp
ZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9t
ZSgpLT5jbGllbnQoKS0+Zm9ybURpZEJsdXIodGhpcyk7Ci0KLSAgICBIVE1MRWxlbWVudDo6ZGlz
cGF0Y2hCbHVyRXZlbnQoKTsKLSAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci19
Ci0KLUhUTUxGb3JtRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlydHVhbEZvcm0o
KSBjb25zdAotewotICAgIHJldHVybiBtX2Zvcm07Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlz
U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpICYmIG1fZm9ybSAmJiBtX2Zvcm0tPmRlZmF1bHRCdXR0
b24oKSA9PSB0aGlzOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZUZy
b21Gb3JtKCkKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVGcm9tRm9ybSgpCiB7
CiAgICAgaWYgKCFtX2Zvcm0pCiAgICAgICAgIHJldHVybjsKQEAgLTQ0NCwyNzcgKzEwNCw1OSBA
QCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZUZyb21GCiAgICAgbV9mb3JtID0g
MDsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXNldEZvcm1Pd25lcihIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0pCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXRGb3Jt
T3duZXIoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogeworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50
ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1JZChl
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7CiAgICAgaWYgKG1fZm9ybSkgewot
ICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKQorICAgICAgICBpZiAoZm9y
bUlkLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2Zvcm0tPnJlbW92
ZUZvcm1FbGVtZW50KHRoaXMpOwogICAgIH0KICAgICBtX2Zvcm0gPSAwOwotICAgIGlmIChmYXN0
SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAgIGlmICghZm9ybUlkLmlzTnVsbCgpKSB7CiAg
ICAgICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNheXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUg
YXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBkb2N1
bWVudCB0byBoYXZlIGFuIElEIHRoYXQgZXF1YWwgdG8KICAgICAgICAgLy8gdGhlIHZhbHVlIG9m
IGZvcm0gYXR0cmlidXRlLCBzbyB3ZSBwdXQgdGhlIHJlc3VsdCBvZgogICAgICAgICAvLyBkb2N1
bWVudCgpLT5nZXRFbGVtZW50QnlJZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAgICAg
IEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZhc3RH
ZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKKyAgICAgICAgRWxlbWVudCogZmlyc3RFbGVtZW50ID0g
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZm9ybUlkKTsKICAgICAgICAgaWYg
KGZpcnN0RWxlbWVudCAmJiBmaXJzdEVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpCiAgICAg
ICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihmaXJzdEVsZW1l
bnQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2Zvcm0gPSBmb3JtOwogICAgIH0gZWxz
ZQotICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7CisgICAgICAgIG1fZm9ybSA9
IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKICAgICBpZiAobV9mb3JtKQogICAgICAgICBt
X2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgZWxzZQotICAgICAgICBkb2N1
bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwotfQotCi12b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRy
LCBib29sIHByZXNlcnZlRGVjbHMpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBmb3JtQXR0
cikgewotICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7Ci0gICAgICAg
ICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBmb3Jt
IG93bmVyIGhlcmUuCi0gICAgICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAgICAgIG1f
Zm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBtX2Zvcm0gPSBmaW5k
Rm9ybUFuY2VzdG9yKCk7Ci0gICAgICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAgICAg
IG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9u
KHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc2V0Rm9ybU93bmVyKDApOwot
ICAgIH0KLSAgICBIVE1MRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURl
Y2xzKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0xhYmVsYWJsZSgpIGNv
bnN0Ci17Ci0gICAgLy8gRklYTUU6IEFkZCBtZXRlclRhZyBhbmQgb3V0cHV0VGFnIHRvIHRoZSBs
aXN0IG9uY2Ugd2Ugc3VwcG9ydCB0aGVtLgotICAgIHJldHVybiBoYXNUYWdOYW1lKGJ1dHRvblRh
ZykgfHwgaGFzVGFnTmFtZShpbnB1dFRhZykgfHwgaGFzVGFnTmFtZShrZXlnZW5UYWcpCi0jaWYg
RU5BQkxFKE1FVEVSX1RBRykKLSAgICAgICAgfHwgaGFzVGFnTmFtZShtZXRlclRhZykKLSNlbmRp
ZgotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgICAgIHx8IGhhc1RhZ05hbWUocHJvZ3Jl
c3NUYWcpCi0jZW5kaWYKLSAgICAgICAgfHwgaGFzVGFnTmFtZShzZWxlY3RUYWcpIHx8IGhhc1Rh
Z05hbWUodGV4dGFyZWFUYWcpOwotfQotCi1QYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpsYWJlbHMoKQotewotICAgIGlmICghaXNMYWJlbGFibGUoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFkb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICAKLSAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBOb2RlOjplbnN1cmVSYXJlRGF0YSgpOwotICAg
IGlmICghZGF0YS0+bm9kZUxpc3RzKCkpIHsKLSAgICAgICAgZGF0YS0+c2V0Tm9kZUxpc3RzKE5v
ZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKSk7Ci0gICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVM
aXN0Q2FjaGUoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIExhYmVsc05vZGVMaXN0OjpjcmVh
dGUodGhpcyk7Ci19Ci0gICAgCi1IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKLSAgICA6IEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQotewotICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9y
bUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Ci19Ci0KLUhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCkKLXsKLSAgICBkb2N1bWVu
dCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7CiB9CiAKLXZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KQordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1BdHRyaWJ1dGVDaGFuZ2VkKCkKIHsK
LSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Ci0g
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsK
LX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaWRNb3ZlVG9OZXdP
d25lckRvY3VtZW50KCkKLXsKLSAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVtZW50V2l0
aFN0YXRlKHRoaXMpOwotICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpZE1vdmVUb05ld093
bmVyRG9jdW1lbnQoKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
OjphdXRvQ29tcGxldGUoKSBjb25zdAotewotICAgIGlmICghZm9ybSgpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICByZXR1cm4gZm9ybSgpLT5hdXRvQ29tcGxldGUoKTsKLX0KLQotYm9vbCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1D
b250cm9sU3RhdGUoKSBjb25zdAotewotICAgIC8vIFdlIGRvbid0IHNhdmUvcmVzdG9yZSBjb250
cm9sIHN0YXRlIGluIGEgZm9ybSB3aXRoIGF1dG9jb21wbGV0ZT1vZmYuCi0gICAgcmV0dXJuIGF0
dGFjaGVkKCkgJiYgYXV0b0NvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZTo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKLXsKLSAgICBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAgIC8vIFdlIGRvbid0
IHNhdmUgc3RhdGUgb2YgYSBjb250cm9sIHdpdGggc2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29u
dHJvbFN0YXRlKCk9ZmFsc2UuCi0gICAgLy8gQnV0IHdlIG5lZWQgdG8gc2tpcCByZXN0b3Jpbmcg
cHJvY2VzcyB0b28gYmVjYXVzZSBhIGNvbnRyb2wgaW4gYW5vdGhlcgotICAgIC8vIGZvcm0gbWln
aHQgaGF2ZSB0aGUgc2FtZSBwYWlyIG9mIG5hbWUgYW5kIHR5cGUgYW5kIHNhdmVkIGl0cyBzdGF0
ZS4KLSAgICBpZiAoIXNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBpZiAo
ZG9jLT5oYXNTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygpKSB7Ci0gICAgICAgIFN0cmluZyBzdGF0
ZTsKLSAgICAgICAgaWYgKGRvYy0+dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQobmFtZSgpLmltcGwo
KSwgdHlwZSgpLmltcGwoKSwgc3RhdGUpKQotICAgICAgICAgICAgcmVzdG9yZUZvcm1Db250cm9s
U3RhdGUoc3RhdGUpOwotICAgIH0KLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2
ZW50ICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNUZXh0Q29udHJvbCgpKSB7Ci0gICAg
ICAgIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnN1YnRyZWVIYXNDaGFuZ2VkKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLSAgICA6IEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGFnTmFtZSwgZG9jLCBmb3JtKQotewotfQotCi1IVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkKLXsK
LX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50
KCkKLXsKLSAgICBpZiAoc3VwcG9ydHNQbGFjZWhvbGRlcigpKQotICAgICAgICB1cGRhdGVQbGFj
ZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwotICAgIGhhbmRsZUZvY3VzRXZlbnQoKTsKLSAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEZvY3VzRXZlbnQoKTsKLX0K
LQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKQot
ewotICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVyKCkpCi0gICAgICAgIHVwZGF0ZVBsYWNlaG9s
ZGVyVmlzaWJpbGl0eShmYWxzZSk7Ci0gICAgaGFuZGxlQmx1ckV2ZW50KCk7Ci0gICAgSFRNTEZv
cm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hCbHVyRXZlbnQoKTsKLX0KLQotU3Ry
aW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcHBlZFBsYWNlaG9sZGVyKCkgY29u
c3QKLXsKLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUTUw1IHNwZWNpZmljYXRpb24sIHdlIG5l
ZWQgdG8gcmVtb3ZlIENSIGFuZCBMRiBmcm9tCi0gICAgLy8gdGhlIGF0dHJpYnV0ZSB2YWx1ZS4K
LSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlKHBs
YWNlaG9sZGVyQXR0cik7Ci0gICAgaWYgKCFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhuZXdsaW5l
Q2hhcmFjdGVyKSAmJiAhYXR0cmlidXRlVmFsdWUuY29udGFpbnMoY2FycmlhZ2VSZXR1cm4pKQot
ICAgICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7Ci0KLSAgICBWZWN0b3I8VUNoYXI+IHN0cmlw
cGVkOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCgpOwotICAg
IHN0cmlwcGVkLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBhdHRyaWJ1
dGVWYWx1ZVtpXTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBuZXdsaW5lQ2hhcmFjdGVyIHx8
IGNoYXJhY3RlciA9PSBjYXJyaWFnZVJldHVybikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBzdHJpcHBlZC5hcHBlbmQoY2hhcmFjdGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6YWRvcHQoc3RyaXBwZWQpOwotfQotCi1zdGF0aWMgYm9vbCBpc05vdExpbmVCcmVhayhVQ2hh
ciBjaCkgeyByZXR1cm4gY2ggIT0gbmV3bGluZUNoYXJhY3RlciAmJiBjaCAhPSBjYXJyaWFnZVJl
dHVybjsgfQotCi1ib29sIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppc1BsYWNlaG9sZGVy
RW1wdHkoKSBjb25zdAotewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUg
PSBnZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKTsKLSAgICByZXR1cm4gYXR0cmlidXRlVmFs
dWUuc3RyaW5nKCkuZmluZChpc05vdExpbmVCcmVhaykgPT0gbm90Rm91bmQ7Ci19Ci0KLWJvb2wg
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gc3VwcG9ydHNQbGFjZWhvbGRlcigpCi0gICAgICAgICYmIGlz
RW1wdHlWYWx1ZSgpCi0gICAgICAgICYmIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gdGhp
cwotICAgICAgICAmJiAhaXNQbGFjZWhvbGRlckVtcHR5KCk7Ci19Ci0KLXZvaWQgSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShib29sIHBsYWNl
aG9sZGVyVmFsdWVDaGFuZ2VkKQotewotICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVyKCkgJiYg
cmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+dXBk
YXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KHBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxlKCksIHBs
YWNlaG9sZGVyVmFsdWVDaGFuZ2VkKTsKLX0KLQotUmVuZGVyVGV4dENvbnRyb2wqIEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50Ojp0ZXh0UmVuZGVyZXJBZnRlclVwZGF0ZUxheW91dCgpCi17Ci0g
ICAgaWYgKCFpc1RleHRGb3JtQ29udHJvbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBkb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1
cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKTsKLX0KLQotdm9pZCBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQoaW50IHN0YXJ0KQotewotICAgIHNl
dFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBtYXgoc3RhcnQsIHNlbGVjdGlvbkVuZCgpKSk7Ci19Ci0K
LXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZChpbnQgZW5k
KQotewotICAgIHNldFNlbGVjdGlvblJhbmdlKG1pbihlbmQsIHNlbGVjdGlvblN0YXJ0KCkpLCBl
bmQpOwotfQotCi12b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3QoKQotewot
ICAgIHNldFNlbGVjdGlvblJhbmdlKDAsIG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLX0K
LQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50
IHN0YXJ0LCBpbnQgZW5kKQotewotICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdlKHRoaXMs
IHN0YXJ0LCBlbmQpOwotfQotCi1pbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVj
dGlvblN0YXJ0KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMg
JiYgY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSA+PSAwKQotICAgICAgICByZXR1cm4gY2FjaGVkU2Vs
ZWN0aW9uU3RhcnQoKTsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rpb25TdGFy
dCgpOwotfQotCi1pbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvbkVuZCgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpc1RleHRGb3JtQ29udHJvbCgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIGNhY2hlZFNl
bGVjdGlvbkVuZCgpID49IDApCi0gICAgICAgIHJldHVybiBjYWNoZWRTZWxlY3Rpb25FbmQoKTsK
LSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b1Jl
bmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rpb25FbmQoKTsKKyAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQodGhpcyk7CisgICAgaWYgKCFlbGVtZW50LT5m
YXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAgICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1
dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBmb3JtIG93bmVyIGhlcmUuCisgICAgICAgIGlm
IChtX2Zvcm0pCisgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwor
ICAgICAgICBtX2Zvcm0gPSBlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCk7CisgICAgICAgIGlm
IChtX2Zvcm0pCisgICAgICAgICAgICBmb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7
CisgICAgfSBlbHNlCisgICAgICAgIHJlc2V0Rm9ybU93bmVyKDApOwogfQogCi1QYXNzUmVmUHRy
PFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKCkgY29uc3QKK2Nv
bnN0IEhUTUxFbGVtZW50KiB0b0hUTUxFbGVtZW50KGNvbnN0IEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCogYXNzb2NpYXRlZEVsZW1lbnQpCiB7Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFpc1RleHRG
b3JtQ29udHJvbCgpIHx8IGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPCAwIHx8IGNhY2hlZFNlbGVj
dGlvbkVuZCgpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRvUmVuZGVyVGV4
dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbihjYWNoZWRTZWxlY3Rpb25TdGFydCgpLCBj
YWNoZWRTZWxlY3Rpb25FbmQoKSk7CisgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5pc0Zvcm1D
b250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KGFzc29jaWF0ZWRFbGVtZW50KTsKKyAgICAvLyBBc3N1bWVzIHRo
ZSBlbGVtZW50IGlzIGFuIEhUTUxPYmplY3RFbGVtZW50CisgICAgY29uc3QgSFRNTEVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MT2JqZWN0RWxlbWVudCo+KGFzc29jaWF0
ZWRFbGVtZW50KTsKKyAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKTsK
KyAgICByZXR1cm4gZWxlbWVudDsKIH0KIAotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQorSFRNTEVsZW1lbnQqIHRv
SFRNTEVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVudCkKIHsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHBsYWNlaG9sZGVyQXR0cikKLSAgICAgICAgdXBkYXRl
UGxhY2Vob2xkZXJWaXNpYmlsaXR5KHRydWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbnNlbGVjdEF0dHIpCi0gICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLnNlbGVjdEV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIGF0
dHIpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jaGFuZ2VBdHRyKQotICAgICAg
ICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgY3Jl
YXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7Ci0gICAgZWxzZQotICAgICAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxIVE1MRWxlbWVudCo+KHRvSFRNTEVsZW1lbnQo
c3RhdGljX2Nhc3Q8Y29uc3QgRm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4oYXNzb2NpYXRlZEVsZW1l
bnQpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYmNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9G
b3JtQXNzb2NpYXRlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRm9ybUFz
c29jaWF0ZWRFbGVtZW50LmgJKHJldmlzaW9uIDczMDA3KQkoZnJvbSBXZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5oOjczMDA3KQorKysgV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAg
KEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKKyNk
ZWZpbmUgSFRNTEZvcm1Db250cm9sRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvcm1EYXRhTGlzdDsKK2NsYXNzIEhU
TUxGb3JtRWxlbWVudDsKK2NsYXNzIFJlbmRlclRleHRDb250cm9sOworY2xhc3MgVmFsaWRhdGlv
bk1lc3NhZ2U7CitjbGFzcyBWYWxpZGl0eVN0YXRlOworY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsK
KworLy8gRklYTUU6IFRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoZXNlIGZvcm0tYXNz
b2NpYXRlZCBlbGVtZW50cy4KKy8vIFNvIGNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgdG8gSFRNTEZv
cm1Bc3NvY2lhdGVkRWxlbWVudC4KK2NsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQoKTsKKworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9ybTsgfQorICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlkaXR5KCk7CisKKyAgICBib29sIGZvcm1O
b1ZhbGlkYXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IH0KKworICAg
IHZpcnR1YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRGb3Jt
Q29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRl
cmVyID0gYjsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VF
dmVudCgpOworCisgICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7
IH0KKyAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOworCisgICAgdmlydHVhbCBib29sIGlzRm9j
dXNhYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBj
b250cm9sIHdpbGwgYmUgYXV0b21hdGljYWxseSBmb2N1c2VkLgorICAgIHZpcnR1YWwgYm9vbCBh
dXRvZm9jdXMoKSBjb25zdDsKKworICAgIGJvb2wgcmVxdWlyZWQoKSBjb25zdDsKKworICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1Db250cm9sVHlwZSgp
OyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gZm9ybUNv
bnRyb2xOYW1lKCk7IH0KKworICAgIHZvaWQgc2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUpOworCisgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkgY29uc3QgeyBy
ZXR1cm4gIWRpc2FibGVkKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFkT25seUZvcm1Db250
cm9sKCkgY29uc3QgeyByZXR1cm4gcmVhZE9ubHkoKTsgfQorCisgICAgdmlydHVhbCBib29sIGlz
UmFkaW9CdXR0b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBj
YW5UcmlnZ2VySW1wbGljaXRTdWJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwor
ICAgIC8vIE92ZXJyaWRlIGluIGRlcml2ZWQgY2xhc3NlcyB0byBnZXQgdGhlIGVuY29kZWQgbmFt
ZT12YWx1ZSBwYWlyIGZvciBzdWJtaXR0aW5nLgorICAgIC8vIFJldHVybiB0cnVlIGZvciBhIHN1
Y2Nlc3NmdWwgY29udHJvbCAoc2VlIEhUTUw0LTE3LjEzLjIpLgorICAgIHZpcnR1YWwgYm9vbCBh
cHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQorCisg
ICAgdmlydHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGVkU3VibWl0KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZhdGVkU3VibWl0KGJvb2wp
IHsgfQorCisgICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgpIGNvbnN0OworICAgIFN0cmlu
ZyB2YWxpZGF0aW9uTWVzc2FnZSgpOworICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZhbGlkYXRpb25N
ZXNzYWdlKCk7CisgICAgdm9pZCBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7CisgICAg
Ym9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4g
PiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzID0gMCk7CisgICAgLy8gVGhpcyBtdXN0IGJlIGNh
bGxlZCB3aGVuIGEgdmFsaWRhdGlvbiBjb25zdHJhaW50IG9yIGNvbnRyb2wgdmFsdWUgaXMgY2hh
bmdlZC4KKyAgICB2b2lkIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOworICAgIHZvaWQgc2V0Q3Vz
dG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIGZvcm1EZXN0cm95ZWQoKSB7
IG1fZm9ybSA9IDA7IH0KKworICAgIGJvb2wgaXNMYWJlbGFibGUoKSBjb25zdDsKKyAgICBQYXNz
UmVmUHRyPE5vZGVMaXN0PiBsYWJlbHMoKTsKKyAgICAKKyAgICBib29sIHJlYWRPbmx5KCkgY29u
c3QgeyByZXR1cm4gbV9yZWFkT25seTsgfQorCisgICAgdm9pZCByZXNldEZvcm1Pd25lcihIVE1M
Rm9ybUVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1
dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CisKK3Byb3RlY3RlZDoKKyAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiwgSFRNTEZvcm1FbGVtZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7CisgICAgdmlydHVhbCB2b2lkIHJl
bW92ZWRGcm9tVHJlZShib29sIGRlZXApOworCisgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRG
b2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01vdXNl
Rm9jdXNhYmxlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVD
aGFuZ2UpOworCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOworICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2go
KTsKKworICAgIHZvaWQgcmVtb3ZlRnJvbUZvcm0oKTsKKworICAgIC8vIFRoaXMgbXVzdCBiZSBj
YWxsZWQgYW55IHRpbWUgdGhlIHJlc3VsdCBvZiB3aWxsVmFsaWRhdGUoKSBoYXMgY2hhbmdlZC4K
KyAgICB2b2lkIHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cmVjYWxjV2lsbFZhbGlkYXRlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29u
c3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OworCisgICAgdmlydHVhbCBz
aG9ydCB0YWJJbmRleCgpIGNvbnN0OworCisgICAgdmlydHVhbCBIVE1MRm9ybUVsZW1lbnQqIHZp
cnR1YWxGb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRGVmYXVsdEJ1dHRvbkZvckZv
cm0oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
OworICAgIFN0cmluZyB2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKKworICAgIEhU
TUxGb3JtRWxlbWVudCogbV9mb3JtOworICAgIE93blB0cjxWYWxpZGl0eVN0YXRlPiBtX3ZhbGlk
aXR5U3RhdGU7CisgICAgT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRpb25NZXNz
YWdlOworICAgIGJvb2wgbV9kaXNhYmxlZCA6IDE7CisgICAgYm9vbCBtX3JlYWRPbmx5IDogMTsK
KyAgICBib29sIG1fcmVxdWlyZWQgOiAxOworICAgIGJvb2wgbV92YWx1ZU1hdGNoZXNSZW5kZXJl
ciA6IDE7CisKKyAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBvZiBtX3dpbGxWYWxpZGF0ZSBkZXBl
bmRzIG9uIHRoZSBkZXJpdmVkIGNsYXNzLiBXZSBjYW4ndAorICAgIC8vIGluaXRpYWxpemUgaXQg
d2l0aCBhIHZpcnR1YWwgZnVuY3Rpb24gaW4gdGhlIGNvbnN0cnVjdG9yLiBtX3dpbGxWYWxpZGF0
ZQorICAgIC8vIGlzIG5vdCBkZXRlcm1pbmlzdGljIGFzIGxvbmcgYXMgbV93aWxsVmFsaWRhdGVJ
bml0aWFsaXplZCBpcyBmYWxzZS4KKyAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGVJbml0
aWFsaXplZDogMTsKKyAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGUgOiAxOworCisgICAg
Ly8gQ2FjaGUgb2YgdmFsaWRpdHkoKS0+dmFsaWQoKS4KKyAgICAvLyBCdXQgImNhbmRpZGF0ZSBm
b3IgY29uc3RyYWludCB2YWxpZGF0aW9uIiBkb2Vzbid0IGFmZmVjdCBtX2lzVmFsaWQuCisgICAg
Ym9vbCBtX2lzVmFsaWQgOiAxOworfTsKKworLy8gRklYTUU6IEdpdmUgdGhpcyBjbGFzcyBpdHMg
b3duIGhlYWRlciBmaWxlLgorY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSA6
IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5I
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCk7CisKK3Byb3RlY3RlZDoKKyAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wgYXV0b0Nv
bXBsZXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093bmVyRG9j
dW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCBib29sIHNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKK307CisK
Ky8vIEZJWE1FOiBHaXZlIHRoaXMgY2xhc3MgaXRzIG93biBoZWFkZXIgZmlsZS4KK2NsYXNzIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUgeworcHVibGljOgorICAgIC8vIENvbW1vbiBmbGFnIGZvciBIVE1MSW5wdXRFbGVt
ZW50Ojp0b29Mb25nKCkgYW5kIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnRvb0xvbmcoKS4KKyAgICBl
bnVtIE5lZWRzVG9DaGVja0RpcnR5RmxhZyB7Q2hlY2tEaXJ0eUZsYWcsIElnbm9yZURpcnR5Rmxh
Z307CisKKyAgICB2aXJ0dWFsIH5IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgpOworCisgICAg
Ly8gVGhlIGRlcml2ZWQgY2xhc3Mgc2hvdWxkIHJldHVybiB0cnVlIGlmIHBsYWNlaG9sZGVyIHBy
b2Nlc3NpbmcgaXMgbmVlZGVkLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1BsYWNlaG9sZGVy
KCkgY29uc3QgPSAwOworICAgIFN0cmluZyBzdHJpcHBlZFBsYWNlaG9sZGVyKCkgY29uc3Q7Cisg
ICAgYm9vbCBwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpIGNvbnN0OworCisgICAgaW50IHNl
bGVjdGlvblN0YXJ0KCkgY29uc3Q7CisgICAgaW50IHNlbGVjdGlvbkVuZCgpIGNvbnN0OworICAg
IHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50KTsKKyAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChp
bnQpOworICAgIHZvaWQgc2VsZWN0KCk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShpbnQg
c3RhcnQsIGludCBlbmQpOworICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbigpIGNvbnN0
OworCisgICAgdmlydHVhbCBpbnQgbWF4TGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
U3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1F
bGVtZW50Kik7CisKKyAgICB2b2lkIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShib29sKTsK
KworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CisKKyAgICBib29sIGlzUGxhY2Vob2xkZXJF
bXB0eSgpIGNvbnN0OworCisgICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkgY29uc3QgPSAw
OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHVzZXItZWRpdGFibGUgdmFsdWUgaXMgZW1wdHku
IFVzZWQgdG8gY2hlY2sgcGxhY2Vob2xkZXIgdmlzaWJpbGl0eS4KKyAgICB2aXJ0dWFsIGJvb2wg
aXNFbXB0eVZhbHVlKCkgY29uc3QgPSAwOworICAgIC8vIENhbGxlZCBpbiBkaXNwYXRjaEZvY3Vz
RXZlbnQoKSwgYWZ0ZXIgcGxhY2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcgcGFyZW50
J3MgZGlzcGF0Y2hGb2N1c0V2ZW50KCkuCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUZvY3VzRXZl
bnQoKSB7IH0KKyAgICAvLyBDYWxsZWQgaW4gZGlzcGF0Y2hCbHVyRXZlbnQoKSwgYWZ0ZXIgcGxh
Y2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZGlzcGF0Y2hCbHVyRXZl
bnQoKS4KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQmx1ckV2ZW50KCkgeyB9CisKKyAgICBSZW5k
ZXJUZXh0Q29udHJvbCogdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQoKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVk
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1l
bnQuaAkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAKICAqCiAgKi8KIAotI2lmbmRl
ZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKLSNkZWZpbmUgSFRNTEZvcm1Db250cm9sRWxlbWVu
dF9oCisjaWZuZGVmIEZvcm1Bc3NvY2lhdGVkRWxlbWVudF9oCisjZGVmaW5lIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudF9oCiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCkBAIC0zMCwyMDQgKzMw
LDU2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9ybURhdGFMaXN0OwogY2xhc3Mg
SFRNTEZvcm1FbGVtZW50OwotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2w7CiBjbGFzcyBWYWxpZGF0
aW9uTWVzc2FnZTsKIGNsYXNzIFZhbGlkaXR5U3RhdGU7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9u
OwogCi0vLyBGSVhNRTogVGhlIEhUTUw1IHNwZWNpZmljYXRpb24gY2FsbHMgdGhlc2UgZm9ybS1h
c3NvY2lhdGVkIGVsZW1lbnRzLgotLy8gU28gY29uc2lkZXIgcmVuYW1pbmcgdGhpcyB0byBIVE1M
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LgotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudCB7CitjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgewogcHVibGlj
OgotICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIH5G
b3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsKKworICAgIHZvaWQgcmVmKCkgeyByZWZGb3JtQXNzb2Np
YXRlZEVsZW1lbnQoKTsgfQorICAgIHZvaWQgZGVyZWYoKSB7IGRlcmVmRm9ybUFzc29jaWF0ZWRF
bGVtZW50KCk7IH0KIAogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9ybTsgfQogICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlkaXR5KCk7CiAKLSAgICBib29sIGZv
cm1Ob1ZhbGlkYXRlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IH0KLQot
ICAgIHZpcnR1YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRG
b3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0Y2hlc1Jl
bmRlcmVyID0gYjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFu
Z2VFdmVudCgpOwotCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJs
ZWQ7IH0KLSAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwotCi0gICAgdmlydHVhbCBib29sIGlz
Rm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1l
bnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3Qg
PSAwOwogCi0gICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIGNvbnRyb2wgd2lsbCBi
ZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQuCi0gICAgdmlydHVhbCBib29sIGF1dG9mb2N1cygpIGNv
bnN0OwotCi0gICAgYm9vbCByZXF1aXJlZCgpIGNvbnN0OwotCi0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gZm9ybUNvbnRyb2xUeXBlKCk7IH0KICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBmb3JtQ29udHJvbE5hbWUoKTsg
fQogCi0gICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNFbmFibGVkRm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiAhZGlzYWJs
ZWQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKSBjb25zdCB7
IHJldHVybiByZWFkT25seSgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGNhblRyaWdnZXJJbXBs
aWNpdFN1Ym1pc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCiAgICAgLy8gT3ZlcnJp
ZGUgaW4gZGVyaXZlZCBjbGFzc2VzIHRvIGdldCB0aGUgZW5jb2RlZCBuYW1lPXZhbHVlIHBhaXIg
Zm9yIHN1Ym1pdHRpbmcuCiAgICAgLy8gUmV0dXJuIHRydWUgZm9yIGEgc3VjY2Vzc2Z1bCBjb250
cm9sIChzZWUgSFRNTDQtMTcuMTMuMikuCiAgICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1EYXRh
KEZvcm1EYXRhTGlzdCYsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIGJv
b2wgaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmF0ZWRTdWJtaXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmF0ZWRTdWJtaXQoYm9vbCkgeyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHZhbGlkYXRpb25N
ZXNzYWdlKCk7Ci0gICAgdm9pZCB1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAg
ICB2b2lkIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICBib29sIGNoZWNrVmFs
aWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHMgPSAwKTsKLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdoZW4gYSB2
YWxpZGF0aW9uIGNvbnN0cmFpbnQgb3IgY29udHJvbCB2YWx1ZSBpcyBjaGFuZ2VkLgotICAgIHZv
aWQgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci0gICAgdm9pZCBzZXRDdXN0b21WYWxpZGl0eShj
b25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgZm9ybURlc3Ryb3llZCgpIHsgbV9mb3JtID0gMDsg
fQotCi0gICAgYm9vbCBpc0xhYmVsYWJsZSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8Tm9kZUxp
c3Q+IGxhYmVscygpOwotICAgIAotICAgIGJvb2wgcmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBt
X3JlYWRPbmx5OyB9CisgICAgdmlydHVhbCB2b2lkIGZvcm1EZXN0cm95ZWQoKSB7IG1fZm9ybSA9
IDA7IH0KIAogICAgIHZvaWQgcmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50Kik7Ci0gICAg
dmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVzZXJ2ZURl
Y2xzID0gZmFsc2UpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCop
OworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQqKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBk
ZWVwKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCk7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hGb2N1c0V2ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAgIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZSgp
OworICAgIHZvaWQgcmVtb3ZlZEZyb21UcmVlKCk7CiAKKyAgICB2b2lkIHNldEZvcm0oSFRNTEZv
cm1FbGVtZW50KiBmb3JtKSB7IG1fZm9ybSA9IGZvcm07IH0KICAgICB2b2lkIHJlbW92ZUZyb21G
b3JtKCk7Ci0KLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFueSB0aW1lIHRoZSByZXN1bHQg
b2Ygd2lsbFZhbGlkYXRlKCkgaGFzIGNoYW5nZWQuCi0gICAgdm9pZCBzZXROZWVkc1dpbGxWYWxp
ZGF0ZUNoZWNrKCk7Ci0gICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0
OworICAgIHZvaWQgZm9ybUF0dHJpYnV0ZUNoYW5nZWQoKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0ID0gMDsKLQot
ICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkg
Y29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgSFRNTEZv
cm1FbGVtZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0RlZmF1
bHRCdXR0b25Gb3JGb3JtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzVmFsaWRGb3JtQ29u
dHJvbEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgdmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVyZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSA9IDA7CiAKICAgICBI
VE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKICAgICBPd25QdHI8VmFsaWRpdHlTdGF0ZT4gbV92YWxp
ZGl0eVN0YXRlOwotICAgIE93blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gbV92YWxpZGF0aW9uTWVz
c2FnZTsKLSAgICBib29sIG1fZGlzYWJsZWQgOiAxOwotICAgIGJvb2wgbV9yZWFkT25seSA6IDE7
Ci0gICAgYm9vbCBtX3JlcXVpcmVkIDogMTsKLSAgICBib29sIG1fdmFsdWVNYXRjaGVzUmVuZGVy
ZXIgOiAxOwotCi0gICAgLy8gVGhlIGluaXRpYWwgdmFsdWUgb2YgbV93aWxsVmFsaWRhdGUgZGVw
ZW5kcyBvbiB0aGUgZGVyaXZlZCBjbGFzcy4gV2UgY2FuJ3QKLSAgICAvLyBpbml0aWFsaXplIGl0
IHdpdGggYSB2aXJ0dWFsIGZ1bmN0aW9uIGluIHRoZSBjb25zdHJ1Y3Rvci4gbV93aWxsVmFsaWRh
dGUKLSAgICAvLyBpcyBub3QgZGV0ZXJtaW5pc3RpYyBhcyBsb25nIGFzIG1fd2lsbFZhbGlkYXRl
SW5pdGlhbGl6ZWQgaXMgZmFsc2UuCi0gICAgbXV0YWJsZSBib29sIG1fd2lsbFZhbGlkYXRlSW5p
dGlhbGl6ZWQ6IDE7Ci0gICAgbXV0YWJsZSBib29sIG1fd2lsbFZhbGlkYXRlIDogMTsKLQotICAg
IC8vIENhY2hlIG9mIHZhbGlkaXR5KCktPnZhbGlkKCkuCi0gICAgLy8gQnV0ICJjYW5kaWRhdGUg
Zm9yIGNvbnN0cmFpbnQgdmFsaWRhdGlvbiIgZG9lc24ndCBhZmZlY3QgbV9pc1ZhbGlkLgotICAg
IGJvb2wgbV9pc1ZhbGlkIDogMTsKLX07Ci0KLS8vIEZJWE1FOiBHaXZlIHRoaXMgY2xhc3MgaXRz
IG93biBoZWFkZXIgZmlsZS4KLWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUg
OiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSFRN
TEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwotCi0gICAgdmlydHVhbCBib29sIGF1dG9D
b21wbGV0ZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdPd25lckRv
Y3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotCi1wcml2YXRl
OgotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9sU3RhdGUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiB9Owog
Ci0vLyBGSVhNRTogR2l2ZSB0aGlzIGNsYXNzIGl0cyBvd24gaGVhZGVyIGZpbGUuCi1jbGFzcyBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
V2l0aFN0YXRlIHsKLXB1YmxpYzoKLSAgICAvLyBDb21tb24gZmxhZyBmb3IgSFRNTElucHV0RWxl
bWVudDo6dG9vTG9uZygpIGFuZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp0b29Mb25nKCkuCi0gICAg
ZW51bSBOZWVkc1RvQ2hlY2tEaXJ0eUZsYWcge0NoZWNrRGlydHlGbGFnLCBJZ25vcmVEaXJ0eUZs
YWd9OwotCi0gICAgdmlydHVhbCB+SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKTsKLQotICAg
IC8vIFRoZSBkZXJpdmVkIGNsYXNzIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwbGFjZWhvbGRlciBw
cm9jZXNzaW5nIGlzIG5lZWRlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQbGFjZWhvbGRl
cigpIGNvbnN0ID0gMDsKLSAgICBTdHJpbmcgc3RyaXBwZWRQbGFjZWhvbGRlcigpIGNvbnN0Owot
ICAgIGJvb2wgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBjb25zdDsKLQotICAgIGludCBz
ZWxlY3Rpb25TdGFydCgpIGNvbnN0OwotICAgIGludCBzZWxlY3Rpb25FbmQoKSBjb25zdDsKLSAg
ICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQo
aW50KTsKLSAgICB2b2lkIHNlbGVjdCgpOwotICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoaW50
IHN0YXJ0LCBpbnQgZW5kKTsKLSAgICBQYXNzUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24oKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgaW50IG1heExlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3Jt
RWxlbWVudCopOwotCi0gICAgdm9pZCB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoYm9vbCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0K
LXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOwotCi0gICAgYm9vbCBpc1BsYWNlaG9sZGVy
RW1wdHkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0ID0g
MDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB1c2VyLWVkaXRhYmxlIHZhbHVlIGlzIGVtcHR5
LiBVc2VkIHRvIGNoZWNrIHBsYWNlaG9sZGVyIHZpc2liaWxpdHkuCi0gICAgdmlydHVhbCBib29s
IGlzRW1wdHlWYWx1ZSgpIGNvbnN0ID0gMDsKLSAgICAvLyBDYWxsZWQgaW4gZGlzcGF0Y2hGb2N1
c0V2ZW50KCksIGFmdGVyIHBsYWNlaG9sZGVyIHByb2Nlc3MsIGJlZm9yZSBjYWxsaW5nIHBhcmVu
dCdzIGRpc3BhdGNoRm9jdXNFdmVudCgpLgotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVGb2N1c0V2
ZW50KCkgeyB9Ci0gICAgLy8gQ2FsbGVkIGluIGRpc3BhdGNoQmx1ckV2ZW50KCksIGFmdGVyIHBs
YWNlaG9sZGVyIHByb2Nlc3MsIGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGRpc3BhdGNoQmx1ckV2
ZW50KCkuCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUJsdXJFdmVudCgpIHsgfQotCi0gICAgUmVu
ZGVyVGV4dENvbnRyb2wqIHRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0KCk7Ci19OworSFRN
TEVsZW1lbnQqIHRvSFRNTEVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7Citjb25zdCBI
VE1MRWxlbWVudCogdG9IVE1MRWxlbWVudChjb25zdCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqKTsK
IAogfSAvLyBuYW1lc3BhY2UKIAotI2VuZGlmCisjZW5kaWYgLy8gRm9ybUFzc29jaWF0ZWRFbGVt
ZW50X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCShyZXZpc2lvbiA3MzQxMikKKysrIFdlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxBbGlnbm1lbnRUb1N0eWxlZEVsZW1lbnQoU3R5bGVk
RWxlbWVudCosIEF0dHJpYnV0ZSopOwogCisgICAgSFRNTEZvcm1FbGVtZW50KiBmaW5kRm9ybUFu
Y2VzdG9yKCkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBIVE1MRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwogCkBAIC05MCw4ICs5Miw2IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCi0gICAgSFRNTEZvcm1F
bGVtZW50KiBmaW5kRm9ybUFuY2VzdG9yKCkgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAgdmlydHVh
bCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVj
dGlvbi5jcHAJKHJldmlzaW9uIDczNDEyKQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVj
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDEyICs3OCwxMiBAQCBOb2RlKiBIVE1MRm9y
bUNvbGxlY3Rpb246Oml0ZW0odW5zaWduZWQgCiAgICAgICAgIGluZm8oKS0+ZWxlbWVudHNBcnJh
eVBvc2l0aW9uID0gMDsKICAgICB9CiAKLSAgICBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+JiBlbGVtZW50c0FycmF5ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYmFzZSgp
KS0+bV9hc3NvY2lhdGVkRWxlbWVudHM7CisgICAgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCo+JiBlbGVtZW50c0FycmF5ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYmFzZSgp
KS0+bV9hc3NvY2lhdGVkRWxlbWVudHM7CiAgICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gaW5m
bygpLT5wb3NpdGlvbjsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmZvKCktPmVsZW1l
bnRzQXJyYXlQb3NpdGlvbjsgaSA8IGVsZW1lbnRzQXJyYXkuc2l6ZSgpOyBpKyspIHsKLSAgICAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRzQXJyYXlbaV07Ci0g
ICAgICAgIGlmIChlbGVtZW50LT5pc0VudW1lcmF0YWJsZSgpKSB7CisgICAgICAgIGlmIChlbGVt
ZW50c0FycmF5W2ldLT5pc0VudW1lcmF0YWJsZSgpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVu
dCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZWxlbWVudHNBcnJheVtpXSk7CiAgICAgICAgICAg
ICBpZiAoaW5kZXggPT0gY3VycmVudEluZGV4KSB7CiAgICAgICAgICAgICAgICAgaW5mbygpLT5w
b3NpdGlvbiA9IGluZGV4OwogICAgICAgICAgICAgICAgIGluZm8oKS0+Y3VycmVudCA9IGVsZW1l
bnQ7CkBAIC0xMTAsMjEgKzExMCwyMiBAQCBFbGVtZW50KiBIVE1MRm9ybUNvbGxlY3Rpb246Omdl
dE5hbWVkRm9yCiAKICAgICBib29sIGZvdW5kSW5wdXRFbGVtZW50cyA9IGZhbHNlOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtLT5tX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7
ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlID0gZm9ybS0+bV9hc3Nv
Y2lhdGVkRWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChlLT5pc0VudW1lcmF0YWJsZSgpICYmIGUt
PmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgeworICAgICAgICBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gZm9ybS0+bV9hc3NvY2lhdGVkRWxlbWVudHNb
aV07CisgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChhc3NvY2lh
dGVkRWxlbWVudCk7CisgICAgICAgIGlmIChhc3NvY2lhdGVkRWxlbWVudC0+aXNFbnVtZXJhdGFi
bGUoKSAmJiBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpIHsKICAgICAg
ICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cyA9IHRydWU7CiAgICAgICAgICAgICBpZiAoIWR1cGxp
Y2F0ZU51bWJlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKICAgICAgICAgICAgIC0tZHVwbGljYXRlTnVtYmVyOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMpIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPm1faW1hZ2VFbGVtZW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogZSA9IGZvcm0tPm1faW1hZ2VFbGVtZW50c1tp
XTsKLSAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpIHsK
KyAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGVsZW1lbnQgPSBmb3JtLT5tX2ltYWdlRWxl
bWVudHNbaV07CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHJOYW1l
KSA9PSBuYW1lKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bWVudDsKICAgICAgICAgICAgICAgICAtLWR1cGxpY2F0ZU51bWJlcjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMTkxLDEwICsxOTIsMTEgQEAgdm9pZCBIVE1MRm9ybUNvbGxlY3Rpb246
OnVwZGF0ZU5hbWVDYWNoZQogICAgIEhUTUxGb3JtRWxlbWVudCogZiA9IHN0YXRpY19jYXN0PEhU
TUxGb3JtRWxlbWVudCo+KGJhc2UoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Zi0+bV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCogZSA9IGYtPm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwotICAgICAgICBp
ZiAoZS0+aXNFbnVtZXJhdGFibGUoKSkgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBpZEF0dHJWYWwgPSBlLT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CisgICAg
ICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW1lbnQgPSBmLT5tX2Fzc29j
aWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5pc0VudW1l
cmF0YWJsZSgpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVs
ZW1lbnQoYXNzb2NpYXRlZEVsZW1lbnQpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBpZEF0dHJWYWwgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOworICAgICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1l
QXR0cik7CiAgICAgICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKICAgICAgICAgICAgICAgICBWZWN0b3I8RWxlbWVu
dCo+KiBpZFZlY3RvciA9IGluZm8oKS0+aWRDYWNoZS5nZXQoaWRBdHRyVmFsLmltcGwoKSk7CkBA
IC0yMDIsNyArMjA0LDcgQEAgdm9pZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNo
ZQogICAgICAgICAgICAgICAgICAgICBpZFZlY3RvciA9IG5ldyBWZWN0b3I8RWxlbWVudCo+Owog
ICAgICAgICAgICAgICAgICAgICBpbmZvKCktPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5pbXBsKCks
IGlkVmVjdG9yKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWRWZWN0b3It
PmFwcGVuZChlKTsKKyAgICAgICAgICAgICAgICBpZFZlY3Rvci0+YXBwZW5kKGVsZW1lbnQpOwog
ICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cy5hZGQoaWRBdHRyVmFsLmltcGwoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAm
JiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwpIHsKQEAgLTIxMiwxNiArMjE0LDE2IEBAIHZvaWQg
SFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgICAgICAgICAgICAg
bmFtZVZlY3RvciA9IG5ldyBWZWN0b3I8RWxlbWVudCo+OwogICAgICAgICAgICAgICAgICAgICBp
bmZvKCktPm5hbWVDYWNoZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBuYW1lVmVjdG9yKTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmFtZVZlY3Rvci0+YXBwZW5kKGUpOwor
ICAgICAgICAgICAgICAgIG5hbWVWZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgICAg
ICAgICBmb3VuZElucHV0RWxlbWVudHMuYWRkKG5hbWVBdHRyVmFsLmltcGwoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Zi0+bV9pbWFnZUVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxJbWFnZUVsZW1l
bnQqIGUgPSBmLT5tX2ltYWdlRWxlbWVudHNbaV07Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWRBdHRyVmFsID0gZS0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CisgICAgICAg
IEhUTUxJbWFnZUVsZW1lbnQqIGVsZW1lbnQgPSBmLT5tX2ltYWdlRWxlbWVudHNbaV07CisgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1
dGUoKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGVsZW1lbnQt
PmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHko
KSAmJiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKGlkQXR0clZhbC5pbXBsKCkpKSB7CiAg
ICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50
Kj4qIGlkVmVjdG9yID0gaW5mbygpLT5pZENhY2hlLmdldChpZEF0dHJWYWwuaW1wbCgpKTsKQEAg
LTIyOSw3ICsyMzEsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hl
CiAgICAgICAgICAgICAgICAgaWRWZWN0b3IgPSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsKICAgICAg
ICAgICAgICAgICBpbmZvKCktPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5pbXBsKCksIGlkVmVjdG9y
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlkVmVjdG9yLT5hcHBlbmQoZSk7CisgICAg
ICAgICAgICBpZFZlY3Rvci0+YXBwZW5kKGVsZW1lbnQpOwogICAgICAgICB9CiAgICAgICAgIGlm
ICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1lQXR0clZhbCAmJiAh
Zm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKG5hbWVBdHRyVmFsLmltcGwoKSkpIHsKICAgICAg
ICAgICAgIC8vIGFkZCB0byBuYW1lIGNhY2hlCkBAIC0yMzgsNyArMjQwLDcgQEAgdm9pZCBIVE1M
Rm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICAgICAgICAgIG5hbWVWZWN0
b3IgPSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsKICAgICAgICAgICAgICAgICBpbmZvKCktPm5hbWVD
YWNoZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBuYW1lVmVjdG9yKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG5hbWVWZWN0b3ItPmFwcGVuZChlKTsKKyAgICAgICAgICAgIG5hbWVWZWN0
b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNzM0MTIpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9mb3JtKGZvcm0pCisgICAgLCBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQoZm9ybSkKICAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3JlYWRP
bmx5KGZhbHNlKQogICAgICwgbV9yZXF1aXJlZChmYWxzZSkKQEAgLTY2LDE2ICs2NiwxNiBAQCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFCiAgICAgLCBtX3dpbGxWYWxp
ZGF0ZSh0cnVlKQogICAgICwgbV9pc1ZhbGlkKHRydWUpCiB7Ci0gICAgaWYgKCFtX2Zvcm0pCi0g
ICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICBpZiAobV9mb3JtKQotICAg
ICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgaWYgKCF0aGlzLT5m
b3JtKCkpCisgICAgICAgIHNldEZvcm0oZmluZEZvcm1BbmNlc3RvcigpKTsKKyAgICBpZiAodGhp
cy0+Zm9ybSgpKQorICAgICAgICB0aGlzLT5mb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhp
cyk7CiB9CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50
KCkKIHsKLSAgICBpZiAobV9mb3JtKQotICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50
KHRoaXMpOworICAgIGlmIChmb3JtKCkpCisgICAgICAgIGZvcm0oKS0+cmVtb3ZlRm9ybUVsZW1l
bnQodGhpcyk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGV0YWNoKCkKQEAg
LTg5LDE0ICs4OSw2IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybU5vVmFsaWQK
ICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0dHIpLmlzTnVsbCgpOwog
fQogCi1WYWxpZGl0eVN0YXRlKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2YWxpZGl0eSgpCi17
Ci0gICAgaWYgKCFtX3ZhbGlkaXR5U3RhdGUpCi0gICAgICAgIG1fdmFsaWRpdHlTdGF0ZSA9IFZh
bGlkaXR5U3RhdGU6OmNyZWF0ZSh0aGlzKTsKLQotICAgIHJldHVybiBtX3ZhbGlkaXR5U3RhdGUu
Z2V0KCk7Ci19Ci0KIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZGlzYWJs
ZWRBdHRyKSB7CkBAIC0xNTQsNTEgKzE0NiwxNiBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmF0dGFjaCgpCiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
VHJlZShib29sIGRlZXApCiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7
Ci0gICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0
ZSh0aGlzKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1l
bnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQg
JiYgZWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewotICAgICAgICAgICAgaWYgKG1fZm9y
bSkKLSAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwotICAg
ICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZWxlbWVudCk7
Ci0gICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgaWYgKCFtX2Zvcm0pIHsKLSAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRo
ZSBjYXNlIG9mIGEgbmV3IGZvcm0gZWxlbWVudCBiZWluZyBjcmVhdGVkIGJ5Ci0gICAgICAgIC8v
IEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBhIGZvcm0uICBJbiB0aGUgY2FzZSBvZiB0
aGUgcGFyc2VyCi0gICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3aWxsIGFscmVhZHkgaGF2
ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sIAotICAgICAgICAvLyBhbmQgc28gd2UgZG9u
J3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3Rv
cigpOwotICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZv
cm1FbGVtZW50KHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5j
aGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwotICAgIH0KKyAgICBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKTsKKyAgICBpZiAoIWZvcm0oKSkKKyAg
ICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsK
IAogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOwogfQogCi1zdGF0aWMg
aW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4pCi17Ci0gICAgTm9kZSogcm9vdCA9IG47Ci0g
ICAgZm9yICg7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIHJvb3QgPSBuOwotICAg
IHJldHVybiByb290OwotfQotCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZWRG
cm9tVHJlZShib29sIGRlZXApCiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIp
KQotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJp
YnV0ZSh0aGlzKTsKLQotICAgIC8vIElmIHRoZSBmb3JtIGFuZCBlbGVtZW50IGFyZSBib3RoIGlu
IHRoZSBzYW1lIHRyZWUsIHByZXNlcnZlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBmb3JtLgotICAg
IC8vIE90aGVyd2lzZSwgbnVsbCBvdXQgb3VyIGZvcm0gYW5kIHJlbW92ZSBvdXJzZWx2ZXMgZnJv
bSB0aGUgZm9ybSdzIGxpc3Qgb2YgZWxlbWVudHMuCi0gICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9v
dCh0aGlzKSAhPSBmaW5kUm9vdChtX2Zvcm0pKSB7Ci0gICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9y
bUVsZW1lbnQodGhpcyk7Ci0gICAgICAgIG1fZm9ybSA9IDA7Ci0gICAgfQotCisgICAgRm9ybUFz
c29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoKTsKICAgICBIVE1MRWxlbWVudDo6cmVt
b3ZlZEZyb21UcmVlKGRlZXApOwogfQogCkBAIC0yNTQsNyArMjExLDcgQEAgdm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpyZWNhbGNTdHlsZQogCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiAhZGlzYWJsZWQoKTsKKyAg
ICByZXR1cm4gIW1fZGlzYWJsZWQ7CiB9CiAKIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
aXNGb2N1c2FibGUoKSBjb25zdApAQCAtMzY2LDcgKzMyMyw3IEBAIFN0cmluZyBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Ojp2aXNpYmxlVmEKICAgICByZXR1cm4gbV92YWxpZGF0aW9uTWVzc2FnZSA/
IG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSA6IFN0cmluZygpOwogfQogCi1ib29sIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCitib29sIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKIHsKICAgICBpZiAoIXdp
bGxWYWxpZGF0ZSgpIHx8IGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC00MDgsNyArMzY1LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpzZXRDdXN0b21WYQogewogICAgIHZhbGlkaXR5KCktPnNldEN1c3RvbUVycm9yTWVzc2FnZShl
cnJvcik7CiB9Ci0gICAgCisKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hG
b2N1c0V2ZW50KCkKIHsKICAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQpAQCAtNDI4LDY0ICsz
ODUsMjIgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEJsdQogCiBIVE1M
Rm9ybUVsZW1lbnQqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9mb3JtOworICAgIHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6
OmZvcm0oKTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0RlZmF1bHRCdXR0
b25Gb3JGb3JtKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9u
KCkgJiYgbV9mb3JtICYmIG1fZm9ybS0+ZGVmYXVsdEJ1dHRvbigpID09IHRoaXM7Ci19Ci0KLXZv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0oKQotewotICAgIGlmICgh
bV9mb3JtKQotICAgICAgICByZXR1cm47Ci0gICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0
aGlzKTsKLSAgICBtX2Zvcm0gPSAwOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OnJlc2V0Rm9ybU93bmVyKEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLXsKLSAgICBpZiAobV9mb3Jt
KSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAg
fQotICAgIG1fZm9ybSA9IDA7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7
Ci0gICAgICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNheXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQg
YmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBk
b2N1bWVudCB0byBoYXZlIGFuIElEIHRoYXQgZXF1YWwgdG8KLSAgICAgICAgLy8gdGhlIHZhbHVl
IG9mIGZvcm0gYXR0cmlidXRlLCBzbyB3ZSBwdXQgdGhlIHJlc3VsdCBvZgotICAgICAgICAvLyBk
b2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1lbnQuCi0gICAg
ICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZh
c3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICAgICAgaWYgKGZpcnN0RWxlbWVudCAmJiBm
aXJzdEVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpCi0gICAgICAgICAgICBtX2Zvcm0gPSBz
dGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihmaXJzdEVsZW1lbnQpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtX2Zvcm0gPSBmb3JtOwotICAgIH0gZWxzZQotICAgICAgICBtX2Zvcm0g
PSBmaW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgaWYgKG1fZm9ybSkKLSAgICAgICAgbV9mb3JtLT5y
ZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgZG9jdW1lbnQoKS0+
Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICByZXR1cm4gaXNTdWNj
ZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgZm9ybSgpICYmIGZvcm0oKS0+ZGVmYXVsdEJ1dHRvbigp
ID09IHRoaXM7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0cmlidXRlQ2hh
bmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKIHsKICAgICBpZiAoYXR0
ci0+bmFtZSgpID09IGZvcm1BdHRyKSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShm
b3JtQXR0cikpIHsKLSAgICAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1vdmVkLiBX
ZSBuZWVkIHRvIHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KLSAgICAgICAgICAgIGlmIChtX2Zvcm0p
Ci0gICAgICAgICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAg
ICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICAgICAgICAgIGlmIChtX2Zv
cm0pCi0gICAgICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRp
b0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
cmVzZXRGb3JtT3duZXIoMCk7Ci0gICAgfQotICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFu
Z2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOworICAgICAgICBmb3JtQXR0cmlidXRlQ2hhbmdlZCgp
OworICAgICAgICBpZiAoIWZvcm0oKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRS
YWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIEhUTUxF
bGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOwogfQogCiBib29s
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzTGFiZWxhYmxlKCkgY29uc3QKQEAgLTUxNiw3ICs0
MzEsNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MRm9ybUNvbnRyb2xFbGVtCiAgICAgCiAg
ICAgcmV0dXJuIExhYmVsc05vZGVMaXN0OjpjcmVhdGUodGhpcyk7CiB9Ci0gICAgCisKIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1F
bGVtZW50KiBmKQogICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2MsIGYp
CiB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJldmlzaW9uIDcz
NDEyKQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gK
ICNkZWZpbmUgSFRNTEZvcm1Db250cm9sRWxlbWVudF9oCiAKKyNpbmNsdWRlICJGb3JtQXNzb2Np
YXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zNSwxNCArMzYsMTQgQEAgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2U7CiBjbGFz
cyBWYWxpZGl0eVN0YXRlOwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAotLy8gRklYTUU6IFRo
ZSBIVE1MNSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoZXNlIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50
cy4KLS8vIFNvIGNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgdG8gSFRNTEZvcm1Bc3NvY2lhdGVkRWxl
bWVudC4KLWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQg
eworLy8gSFRNTEZvcm1Db250cm9sRWxlbWVudCBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlv
biBvZiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQsCisvLyBhbmQgZm9ybS1hc3NvY2lhdGVkIGVsZW1l
bnQgaW1wbGVtZW50YXRpb25zIHNob3VsZCB1c2UgSFRNTEZvcm1Db250cm9sRWxlbWVudAorLy8g
dW5sZXNzIHRoZXJlIGlzIGEgc3BlY2lhbCByZWFzb24uCitjbGFzcyBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgRm9ybUFzc29jaWF0ZWRFbGVtZW50
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKLSAg
ICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0oKSBjb25zdCB7IHJldHVybiBtX2Zvcm07IH0KLSAgICBW
YWxpZGl0eVN0YXRlKiB2YWxpZGl0eSgpOworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybSgpOyB9CiAKICAgICBib29s
IGZvcm1Ob1ZhbGlkYXRlKCkgY29uc3Q7CiAKQEAgLTUzLDcgKzU0LDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogCi0gICAg
Ym9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgZGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkOyB9CiAgICAgdm9pZCBz
ZXREaXNhYmxlZChib29sKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0
OwpAQCAtNjUsNyArNjYsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCByZXF1aXJlZCgpIGNvbnN0Owog
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gZm9ybUNvbnRy
b2xUeXBlKCk7IH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVy
biBmb3JtQ29udHJvbE5hbWUoKTsgfQogCiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSk7CiAKQEAgLTg3LDIxICs4NywyMSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHZh
bGlkYXRpb25NZXNzYWdlKCk7CiAgICAgdm9pZCB1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3Nh
Z2UoKTsKICAgICB2b2lkIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICBib29s
IGNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1
bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMgPSAwKTsKKyAgICBib29sIGNoZWNrVmFsaWRpdHkoVmVj
dG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250
cm9scyA9IDApOwogICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBhIHZhbGlkYXRpb24g
Y29uc3RyYWludCBvciBjb250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCiAgICAgdm9pZCBzZXROZWVk
c1ZhbGlkaXR5Q2hlY2soKTsKICAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmlu
ZyYpOwogCi0gICAgdm9pZCBmb3JtRGVzdHJveWVkKCkgeyBtX2Zvcm0gPSAwOyB9Ci0KICAgICBi
b29sIGlzTGFiZWxhYmxlKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbGFiZWxz
KCk7Ci0gICAgCisKICAgICBib29sIHJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9yZWFkT25s
eTsgfQogCi0gICAgdm9pZCByZXNldEZvcm1Pd25lcihIVE1MRm9ybUVsZW1lbnQqKTsKICAgICB2
aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVj
bHMgPSBmYWxzZSk7CiAKKyAgICB1c2luZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+OjpyZWY7
CisgICAgdXNpbmcgVHJlZVNoYXJlZDxDb250YWluZXJOb2RlPjo6ZGVyZWY7CisKIHByb3RlY3Rl
ZDoKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAKQEAgLTExOSw4ICsxMTksNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CiAgICAgdmly
dHVhbCB2b2lkIGRldGFjaCgpOwogCi0gICAgdm9pZCByZW1vdmVGcm9tRm9ybSgpOwotCiAgICAg
Ly8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhbnkgdGltZSB0aGUgcmVzdWx0IG9mIHdpbGxWYWxpZGF0
ZSgpIGhhcyBjaGFuZ2VkLgogICAgIHZvaWQgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwog
ICAgIHZpcnR1YWwgYm9vbCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdDsKQEAgLTEyOSw2ICsx
MjcsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29u
dHJvbE5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNv
bnRyb2xUeXBlKCkgY29uc3QgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIHJlZkZvcm1Bc3NvY2lh
dGVkRWxlbWVudCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZGb3JtQXNzb2Np
YXRlZEVsZW1lbnQoKSB7IGRlcmVmKCk7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1Db250
cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0ZvY3VzKCkgY29uc3Q7CkBAIC0xNDAsOCArMTQxLDYgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpOwogICAgIFN0cmluZyB2aXNp
YmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKIAotICAgIEhUTUxGb3JtRWxlbWVudCogbV9m
b3JtOwotICAgIE93blB0cjxWYWxpZGl0eVN0YXRlPiBtX3ZhbGlkaXR5U3RhdGU7CiAgICAgT3du
UHRyPFZhbGlkYXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRpb25NZXNzYWdlOwogICAgIGJvb2wgbV9k
aXNhYmxlZCA6IDE7CiAgICAgYm9vbCBtX3JlYWRPbmx5IDogMTsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9y
bUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzQxMikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDEwIEBAIHZvaWQgSFRNTEZv
cm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KEUKIHsKICAgICBpbnQgc3VibWlzc2lvblRyaWdn
ZXJDb3VudCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVs
ZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZv
cm1FbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVudHNbaV07CisgICAgICAgIEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCogZm9ybUFzc29jaWF0ZWRFbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVudHNb
aV07CisgICAgICAgIGlmICghZm9ybUFzc29jaWF0ZWRFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIGZvcm1FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+
KGZvcm1Bc3NvY2lhdGVkRWxlbWVudCk7CiAgICAgICAgIGlmIChmb3JtRWxlbWVudC0+aXNTdWNj
ZXNzZnVsU3VibWl0QnV0dG9uKCkpIHsKICAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudC0+cmVu
ZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50LT5kaXNwYXRjaFNpbXVsYXRl
ZENsaWNrKGV2ZW50KTsKQEAgLTIxMywxMCArMjE2LDEyIEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50
Ojp2YWxpZGF0ZUludGVyYWN0aXYKICAgICBpZiAoc3VibWl0RWxlbWVudCAmJiBzdWJtaXRFbGVt
ZW50LT5mb3JtTm9WYWxpZGF0ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsraSkKLSAg
ICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3Nh
Z2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250
cm9sRWxlbWVudCo+KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKS0+aGlkZVZpc2libGVWYWxpZGF0
aW9uTWVzc2FnZSgpOworICAgIH0KIAotICAgIFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4gPiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHM7CisgICAgVmVjdG9yPFJlZlB0cjxG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzOwogICAgIGNv
bGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHModW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKTsK
ICAgICBpZiAodW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0yMjUsNyArMjMwLDggQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlk
YXRlSW50ZXJhY3RpdgogICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IHByb3RlY3Rvcih0aGlz
KTsKICAgICAvLyBGb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGNvbnRyb2wgYW5kIHNob3cg
YSB2YWxpZGF0aW9uIG1lc3NhZ2UuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVuaGFu
ZGxlZEludmFsaWRDb250cm9scy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiB1bmhhbmRsZWQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0KCk7
CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogdW5oYW5kbGVkQXNzb2NpYXRlZEVsZW1l
bnQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0KCk7CisgICAgICAgIEhUTUxFbGVt
ZW50KiB1bmhhbmRsZWQgPSB0b0hUTUxFbGVtZW50KHVuaGFuZGxlZEFzc29jaWF0ZWRFbGVtZW50
KTsKICAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb2N1c2FibGUoKSAmJiB1bmhhbmRsZWQtPmlu
RG9jdW1lbnQoKSkgewogICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBvcmlnaW5hbERvY3Vt
ZW50KHVuaGFuZGxlZC0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICB1bmhhbmRsZWQtPnNjcm9s
bEludG9WaWV3SWZOZWVkZWQoZmFsc2UpOwpAQCAtMjM0LDcgKzI0MCw4IEBAIGJvb2wgSFRNTEZv
cm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXYKICAgICAgICAgICAgIC8vIG1vdmVkIHRvIGFu
b3RoZXIgZG9jdW1lbnQuCiAgICAgICAgICAgICBpZiAodW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgp
ICYmIHVuaGFuZGxlZC0+aW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0gdW5oYW5k
bGVkLT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgdW5oYW5kbGVkLT5mb2N1cygpOwot
ICAgICAgICAgICAgICAgIHVuaGFuZGxlZC0+dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdl
KCk7CisgICAgICAgICAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KHVuaGFuZGxlZCktPnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDIsMTEgKzI0
OSwxMiBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2CiAgICAgLy8g
V2FybiBhYm91dCBhbGwgb2YgdW5mb2N1c2FibGUgY29udHJvbHMuCiAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHVuaGFuZGxlZEludmFsaWRDb250cm9scy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogdW5oYW5kbGVkID0gdW5oYW5kbGVkSW52YWxpZENv
bnRyb2xzW2ldLmdldCgpOworICAgICAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiB1bmhh
bmRsZWRBc3NvY2lhdGVkRWxlbWVudCA9IHVuaGFuZGxlZEludmFsaWRDb250cm9sc1tpXS5nZXQo
KTsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiB1bmhhbmRsZWQgPSB0b0hUTUxFbGVtZW50KHVu
aGFuZGxlZEFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAgICAgICAgIGlmICh1bmhhbmRsZWQtPmlz
Rm9jdXNhYmxlKCkgJiYgdW5oYW5kbGVkLT5pbkRvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSgiQW4gaW52YWxpZCBmb3JtIGNv
bnRyb2wgd2l0aCBuYW1lPSclbmFtZScgaXMgbm90IGZvY3VzYWJsZS4iKTsKLSAgICAgICAgICAg
IG1lc3NhZ2UucmVwbGFjZSgiJW5hbWUiLCB1bmhhbmRsZWQtPm5hbWUoKSk7CisgICAgICAgICAg
ICBtZXNzYWdlLnJlcGxhY2UoIiVuYW1lIiwgdW5oYW5kbGVkQXNzb2NpYXRlZEVsZW1lbnQtPm5h
bWUoKSk7CiAgICAgICAgICAgICBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+YWRkTWVz
c2FnZShIVE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVs
LCBtZXNzYWdlLCAwLCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0zMDcsOCArMzE1LDExIEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoRXZl
bnQqIGV2ZW4KICAgICBib29sIG5lZWRCdXR0b25BY3RpdmF0aW9uID0gYWN0aXZhdGVTdWJtaXRC
dXR0b247IC8vIGRvIHdlIG5lZWQgdG8gYWN0aXZhdGUgYSBzdWJtaXQgYnV0dG9uPwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBtX2Fzc29jaWF0
ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVk
RWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBpZiAoIWFzc29jaWF0
ZWRFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlvbikgeworICAgICAgICAgICAgSFRNTEZv
cm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqPihhc3NvY2lhdGVkRWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoY29udHJvbC0+aXNB
Y3RpdmF0ZWRTdWJtaXQoKSkKICAgICAgICAgICAgICAgICBuZWVkQnV0dG9uQWN0aXZhdGlvbiA9
IGZhbHNlOwogICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9u
ID09IDAgJiYgY29udHJvbC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpCkBAIC0zNDIsOCAr
MzUzLDEwIEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldCgpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVu
dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5yZXNldCgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Kj4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLT5yZXNldCgpOworICAgIH0KIAogICAg
IG1faW5yZXNldCA9IGZhbHNlOwogfQpAQCAtMzk2LDcgKzQwOSw3IEBAIHRlbXBsYXRlPGNsYXNz
IFQsIHNpemVfdCBuPiBzdGF0aWMgdm9pZCAKICAgICAgICAgfQogfQogCi11bnNpZ25lZCBIVE1M
Rm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBlbGVtZW50KQordW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxl
bWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICAvLyBD
b21wYXJlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZvcm0gZWxlbWVudCBhbmQgdGhlIGluc2VydGVk
IGVsZW1lbnQuCiAgICAgLy8gVXBkYXRlcyB0aGUgaW5kZWNlcyBpbiBvcmRlciB0byB0aGUgcmVs
YXRpb24gb2YgdGhlIHBvc2l0aW9uOgpAQCAtNDE2LDU3ICs0MjksNjQgQEAgdW5zaWduZWQgSFRN
TEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZAogICAgIHVuc2lnbmVkIGxlZnQgPSAwLCByaWdo
dCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKSAtIDE7CiAgICAgd2hpbGUgKGxlZnQgIT0g
cmlnaHQpIHsKICAgICAgICAgdW5zaWduZWQgbWlkZGxlID0gbGVmdCArICgocmlnaHQgLSBsZWZ0
KSAvIDIpOwotICAgICAgICBwb3NpdGlvbiA9IGVsZW1lbnQtPmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKG1fYXNzb2NpYXRlZEVsZW1lbnRzW21pZGRsZV0pOworICAgICAgICBwb3NpdGlvbiA9IGVs
ZW1lbnQtPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRvSFRNTEVsZW1lbnQobV9hc3NvY2lhdGVk
RWxlbWVudHNbbWlkZGxlXSkpOwogICAgICAgICBpZiAocG9zaXRpb24gJiBET0NVTUVOVF9QT1NJ
VElPTl9GT0xMT1dJTkcpCiAgICAgICAgICAgICByaWdodCA9IG1pZGRsZTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgbGVmdCA9IG1pZGRsZSArIDE7CiAgICAgfQogCi0gICAgcG9zaXRpb24g
PSBlbGVtZW50LT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihtX2Fzc29jaWF0ZWRFbGVtZW50c1ts
ZWZ0XSk7CisgICAgcG9zaXRpb24gPSBlbGVtZW50LT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0
b0hUTUxFbGVtZW50KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2xlZnRdKSk7CiAgICAgaWYgKHBvc2l0
aW9uICYgRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKQogICAgICAgICByZXR1cm4gbGVmdDsK
ICAgICByZXR1cm4gbGVmdCArIDE7CiB9CiAKLXVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9y
bUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlKQordW5zaWduZWQgSFRNTEZv
cm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2Np
YXRlZEVsZW1lbnQpCiB7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50
KGFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAvLyBUcmVhdHMgc2VwYXJhdGVseSB0aGUgY2FzZSB3
aGVyZSB0aGlzIGVsZW1lbnQgaGFzIHRoZSBmb3JtIGF0dHJpYnV0ZQogICAgIC8vIGZvciBwZXJm
b3JtYW5jZSBjb25zaWRlcmF0aW9uLgotICAgIGlmIChlLT5mYXN0SGFzQXR0cmlidXRlKGZvcm1B
dHRyKSkKLSAgICAgICAgcmV0dXJuIGZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShl
KTsKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCisgICAgICAg
IHJldHVybiBmb3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUoZWxlbWVudCk7CiAKICAg
ICAvLyBDaGVjayBmb3IgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGlzIGVsZW1lbnQgaXMgdGhl
IHZlcnkgbGFzdCB0aGluZyBpbgogICAgIC8vIHRoZSBmb3JtJ3MgdHJlZSBvZiBjaGlsZHJlbjsg
d2UgZG9uJ3Qgd2FudCB0byB3YWxrIHRoZSBlbnRpcmUgdHJlZSBpbiB0aGF0CiAgICAgLy8gY29t
bW9uIGNhc2UgdGhhdCBvY2N1cnMgZHVyaW5nIHBhcnNpbmc7IGluc3RlYWQgd2UnbGwganVzdCBy
ZXR1cm4gYSB2YWx1ZQogICAgIC8vIHRoYXQgc2F5cyAiYWRkIHRoaXMgZm9ybSBlbGVtZW50IHRv
IHRoZSBlbmQgb2YgdGhlIGFycmF5Ii4KLSAgICBpZiAoZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlz
KSkgeworICAgIGlmIChlbGVtZW50LT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CiAgICAgICAg
IHVuc2lnbmVkIGkgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4OwogICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSh0aGlzKSkgewotICAgICAgICAgICAgaWYgKG5vZGUgPT0gZSkgeworICAgICAgICAgICAgaWYg
KG5vZGUgPT0gZWxlbWVudCkgewogICAgICAgICAgICAgICAgICsrbV9hc3NvY2lhdGVkRWxlbWVu
dHNBZnRlckluZGV4OwogICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAgICAgICAgICAg
ICAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkK
LSAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KG5vZGUpLT5mb3JtKCkgPT0gdGhpcykKKyAgICAgICAgICAgICAgICAgICAgJiYgKHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAg
ICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpLT5mb3JtKCkgPT0g
dGhpcykKICAgICAgICAgICAgICAgICArK2k7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJu
IG1fYXNzb2NpYXRlZEVsZW1lbnRzQWZ0ZXJJbmRleCsrOwogfQogCi12b2lkIEhUTUxGb3JtRWxl
bWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlKQordm9p
ZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVt
ZW50KiBlKQogewotICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVC
dXR0b24oZSk7Ci0gICAgbV9jaGVja2VkUmFkaW9CdXR0b25zLmFkZEJ1dHRvbihlKTsKKyAgICBp
ZiAoZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGUp
OworICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9u
KGVsZW1lbnQpOworICAgICAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMuYWRkQnV0dG9uKGVsZW1l
bnQpOworICAgIH0KICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5pbnNlcnQoZm9ybUVsZW1lbnRJ
bmRleChlKSwgZSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3JtRWxlbWVu
dChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92
ZUZvcm1FbGVtZW50KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZSkKIHsKLSAgICBtX2NoZWNrZWRS
YWRpb0J1dHRvbnMucmVtb3ZlQnV0dG9uKGUpOwotICAgIGlmIChlLT5mYXN0SGFzQXR0cmlidXRl
KGZvcm1BdHRyKSkgeworICAgIGlmIChlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAg
ICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMucmVtb3ZlQnV0dG9uKHN0YXRpY19jYXN0PEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqPihlKSk7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxF
bGVtZW50KGUpOworICAgIGlmIChlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkg
ewogICAgICAgICB1bnNpZ25lZCBpbmRleDsKICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4
IDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2luZGV4KQogICAgICAgICAgICAgaWYg
KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2luZGV4XSA9PSBlKQpAQCAtNTU0LDcgKzU3NCw5IEBAIGJv
b2wgSFRNTEZvcm1FbGVtZW50Ojp3YXNVc2VyU3VibWl0dGVkKCkKIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIEhUTUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbigpIGNvbnN0CiB7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBtX2Fzc29jaWF0ZWRF
bGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+aXNGb3Jt
Q29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxl
bWVudCo+KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKTsKICAgICAgICAgaWYgKGNvbnRyb2wtPmlz
U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7CiAg
ICAgfQpAQCAtNTY0LDIzICs1ODYsMjMgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZv
cm1FbGVtZW50OgogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpCiB7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+IGNvbnRyb2xzOworICAg
IFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50PiA+IGNvbnRyb2xzOwogICAgIGNv
bGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoY29udHJvbHMpOwogICAgIHJldHVybiBjb250
cm9scy5pc0VtcHR5KCk7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50Ojpjb2xsZWN0VW5oYW5k
bGVkSW52YWxpZENvbnRyb2xzKFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4g
PiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmNvbGxl
Y3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ+ID4mIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKIHsKICAgICBSZWZQdHI8SFRNTEZv
cm1FbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CiAgICAgLy8gQ29weSBtX2Fzc29jaWF0ZWRFbGVt
ZW50cyBiZWNhdXNlIGV2ZW50IGhhbmRsZXJzIGNhbGxlZCBmcm9tCiAgICAgLy8gSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpIG1pZ2h0IGNoYW5nZSBtX2Fzc29jaWF0ZWRF
bGVtZW50cy4KLSAgICBWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4gZWxl
bWVudHM7CisgICAgVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4gZWxlbWVu
dHM7CiAgICAgZWxlbWVudHMucmVzZXJ2ZUNhcGFjaXR5KG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNp
emUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRz
LnNpemUoKTsgKytpKQogICAgICAgICBlbGVtZW50cy5hcHBlbmQobV9hc3NvY2lhdGVkRWxlbWVu
dHNbaV0pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50cy5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAoZWxlbWVudHNbaV0tPmZvcm0oKSA9PSB0aGlzKQotICAgICAgICAg
ICAgZWxlbWVudHNbaV0tPmNoZWNrVmFsaWRpdHkoJnVuaGFuZGxlZEludmFsaWRDb250cm9scyk7
CisgICAgICAgIGlmIChlbGVtZW50c1tpXS0+Zm9ybSgpID09IHRoaXMgJiYgZWxlbWVudHNbaV0t
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Kj4oZWxlbWVudHNbaV0uZ2V0KCkpLT5jaGVja1ZhbGlkaXR5KCZ1bmhh
bmRsZWRJbnZhbGlkQ29udHJvbHMpOwogICAgIH0KIH0KIApAQCAtNjI3LDggKzY0OSwxMCBAQCB2
b2lkIEhUTUxGb3JtRWxlbWVudDo6ZG9jdW1lbnREaWRCZWNvbWVBCiB7CiAgICAgQVNTRVJUKCFt
X2F1dG9jb21wbGV0ZSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lh
dGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ld
LT5yZXNldCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVt
ZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVudHNbaV0t
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Kj4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLT5yZXNldCgpOworICAg
IH0KIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50
KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHJldmlzaW9uIDczNDEyKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OworY2xhc3MgRm9ybUFzc29jaWF0
ZWRFbGVtZW50OwogY2xhc3MgRm9ybURhdGE7CiBjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OwogY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKQEAgLTY0LDggKzY1LDggQEAgcHVibGljOgogCiAg
ICAgLy8gRklYTUU6IFNob3VsZCByZW5hbWUgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byBzYXkgImZv
cm0gY29udHJvbCIKICAgICAvLyBvciAiZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnQiIGluc3RlYWQg
b2YgImZvcm0gZWxlbWVudCIuCi0gICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50KEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUZvcm1FbGVtZW50KEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0
ZWRFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVGb3JtRWxlbWVudChGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQqKTsKICAgICB2b2lkIHJlZ2lzdGVySW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50Kik7
CiAgICAgdm9pZCByZW1vdmVJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqKTsKIApAQCAtMTA5
LDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAgIENoZWNrZWRSYWRpb0J1dHRvbnMmIGNoZWNrZWRS
YWRpb0J1dHRvbnMoKSB7IHJldHVybiBtX2NoZWNrZWRSYWRpb0J1dHRvbnM7IH0KIAotICAgIGNv
bnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGFzc29jaWF0ZWRFbGVtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fYXNzb2NpYXRlZEVsZW1lbnRzOyB9CisgICAgY29uc3QgVmVjdG9y
PEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBhc3NvY2lhdGVkRWxlbWVudHMoKSBjb25zdCB7IHJl
dHVybiBtX2Fzc29jaWF0ZWRFbGVtZW50czsgfQogCiBwcml2YXRlOgogICAgIEhUTUxGb3JtRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTEzMSwxMyArMTMyLDEz
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHN1Ym1pdChFdmVudCosIGJvb2wgYWN0aXZhdGVTdWJt
aXRCdXR0b24sIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBGb3JtU3VibWlzc2lvblRyaWdn
ZXIpOwogCi0gICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmlidXRlKEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKLSAgICB1bnNpZ25lZCBmb3JtRWxlbWVudEluZGV4KEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKKyAgICB1bnNpZ25lZCBmb3JtRWxlbWVudEluZGV4V2l0
aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCopOworICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50SW5kZXgo
Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzdWJt
aXNzaW9uIHNob3VsZCBiZSBwcm9jZWVkZWQuCiAgICAgYm9vbCB2YWxpZGF0ZUludGVyYWN0aXZl
bHkoRXZlbnQqKTsKICAgICAvLyBWYWxpZGF0ZXMgZWFjaCBvZiB0aGUgY29udHJvbHMsIGFuZCBz
dG9yZXMgY29udHJvbHMgb2Ygd2hpY2ggJ2ludmFsaWQnCiAgICAgLy8gZXZlbnQgd2FzIG5vdCBj
YW5jZWxlZCB0byB0aGUgc3BlY2lmaWVkIHZlY3Rvci4KLSAgICB2b2lkIGNvbGxlY3RVbmhhbmRs
ZWRJbnZhbGlkQ29udHJvbHMoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+
Jik7CisgICAgdm9pZCBjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKFZlY3RvcjxSZWZQ
dHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50PiA+Jik7CiAKICAgICBmcmllbmQgY2xhc3MgSFRNTEZv
cm1Db2xsZWN0aW9uOwogCkBAIC0xNTEsNyArMTUyLDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2ln
bmVkIG1fYXNzb2NpYXRlZEVsZW1lbnRzQmVmb3JlSW5kZXg7CiAgICAgdW5zaWduZWQgbV9hc3Nv
Y2lhdGVkRWxlbWVudHNBZnRlckluZGV4OwotICAgIFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Kj4gbV9hc3NvY2lhdGVkRWxlbWVudHM7CisgICAgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxl
bWVudCo+IG1fYXNzb2NpYXRlZEVsZW1lbnRzOwogICAgIFZlY3RvcjxIVE1MSW1hZ2VFbGVtZW50
Kj4gbV9pbWFnZUVsZW1lbnRzOwogCiAgICAgYm9vbCBtX3dhc1VzZXJTdWJtaXR0ZWQ7CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzQxMikKKysrIFdlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDkgKzEzOSwx
MSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUNoZWNrZWRSYWRpCiAgICAgICAgIGNo
ZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAKICAgICBpZiAoZm9ybSgpKSB7
Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGNvbnRyb2xz
ID0gZm9ybSgpLT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBjb250cm9scyA9IGZvcm0oKS0+YXNzb2NpYXRlZEVsZW1l
bnRzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb250cm9scy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGNv
bnRyb2xzW2ldOworICAgICAgICAgICAgaWYgKCFjb250cm9sc1tpXS0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Kj4oY29udHJvbHNbaV0pOwogICAgICAgICAgICAgaWYgKGNvbnRyb2wtPm5hbWUoKSAhPSBu
YW1lKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoY29udHJv
bC0+dHlwZSgpICE9IHR5cGUoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAko
cmV2aXNpb24gNzM0MTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxNyArNDYsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1pbmxpbmUgSFRNTE9iamVjdEVsZW1lbnQ6OkhU
TUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpIAoraW5saW5lIEhUTUxPYmplY3RFbGVtZW50
OjpIVE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
IAogICAgIDogSFRNTFBsdWdJbkltYWdlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRl
ZEJ5UGFyc2VyKQorICAgICwgRm9ybUFzc29jaWF0ZWRFbGVtZW50KGZvcm0pCiAgICAgLCBtX2Rv
Y05hbWVkSXRlbSh0cnVlKQogICAgICwgbV91c2VGYWxsYmFja0NvbnRlbnQoZmFsc2UpCiB7CiAg
ICAgQVNTRVJUKGhhc1RhZ05hbWUob2JqZWN0VGFnKSk7CisgICAgaWYgKCF0aGlzLT5mb3JtKCkp
CisgICAgICAgIHNldEZvcm0oZmluZEZvcm1BbmNlc3RvcigpKTsKKyAgICBpZiAodGhpcy0+Zm9y
bSgpKQorICAgICAgICB0aGlzLT5mb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CiB9
CiAKLVBhc3NSZWZQdHI8SFRNTE9iamVjdEVsZW1lbnQ+IEhUTUxPYmplY3RFbGVtZW50OjpjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29s
IGNyZWF0ZWRCeVBhcnNlcikKK2lubGluZSBIVE1MT2JqZWN0RWxlbWVudDo6fkhUTUxPYmplY3RF
bGVtZW50KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxPYmplY3RFbGVtZW50KHRh
Z05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpKTsKKyAgICBpZiAoZm9ybSgpKQorICAg
ICAgICBmb3JtKCktPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworfQorCitQYXNzUmVmUHRyPEhU
TUxPYmplY3RFbGVtZW50PiBIVE1MT2JqZWN0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxP
YmplY3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtLCBjcmVhdGVkQnlQYXJzZXIpKTsK
IH0KIAogUmVuZGVyV2lkZ2V0KiBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNC
aW5kaW5ncygpIGNvbnN0CkBAIC0zMTMsNiArMzI0LDE0IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1l
bnQ6OnJlbW92ZWRGcm9tRG9jdW0KICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KCk7CiB9CiAKK3ZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmF0dHJpYnV0ZUNo
YW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCit7CisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBmb3JtQXR0cikKKyAgICAgICAgZm9ybUF0dHJpYnV0ZUNoYW5nZWQoKTsK
KyAgICBlbHNlCisgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5n
ZWQoYXR0ciwgcHJlc2VydmVEZWNscyk7Cit9CisKIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmNo
aWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBO
b2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKIHsKICAgICB1cGRhdGVEb2NO
YW1lZEl0ZW0oKTsKQEAgLTQ1Myw0ICs0NzIsMjcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6
YWRkU3VicmVzb3VyY2VBdAogICAgICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTCh1c2VNYXApKTsKIH0KIAordm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6
aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCit7CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50
OjppbnNlcnRlZEludG9UcmVlKCk7CisgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZShkZWVwKTsKK30KKwordm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVtb3ZlZEZy
b21UcmVlKGJvb2wgZGVlcCkKK3sKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRG
cm9tVHJlZSgpOworICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShk
ZWVwKTsKK30KKworYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRm9ybURh
dGFMaXN0JiwgYm9vbCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50cyB0aGlzIGZ1bmN0aW9u
LgorICAgIHJldHVybiBmYWxzZTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MT2JqZWN0
RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uYW1lLmlz
TnVsbCgpID8gZW1wdHlBdG9tIDogbV9uYW1lOworfQorCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTE9iamVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9iamVj
dEVsZW1lbnQuaAkocmV2aXNpb24gNzM0MTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTMgKzIzLDE3IEBACiAjaWZuZGVmIEhUTUxP
YmplY3RFbGVtZW50X2gKICNkZWZpbmUgSFRNTE9iamVjdEVsZW1lbnRfaAogCisjaW5jbHVkZSAi
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxPYmplY3RFbGVtZW50IDog
cHVibGljIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQgeworY2xhc3MgSFRNTEZvcm1FbGVtZW50Owor
CitjbGFzcyBIVE1MT2JqZWN0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LCBwdWJsaWMgRm9ybUFzc29jaWF0ZWRFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MT2JqZWN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCos
IEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICB2aXJ0dWFsIH5I
VE1MT2JqZWN0RWxlbWVudCgpOwogCiAgICAgYm9vbCBpc0RvY05hbWVkSXRlbSgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jTmFtZWRJdGVtOyB9CiAKQEAgLTQwLDEwICs0NCwyNSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIHVzZUZhbGxiYWNrQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
RmFsbGJhY2tDb250ZW50OyB9CiAgICAgdm9pZCByZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKIAor
ICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQKKyAgICBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0oKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6
OmZvcm0oKTsgfQorCisgICAgdmlydHVhbCBib29sIGlzRm9ybUNvbnRyb2xFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEo
Rm9ybURhdGFMaXN0JiwgYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdl
ZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CisKKyAgICB1c2luZyBU
cmVlU2hhcmVkPENvbnRhaW5lck5vZGU+OjpyZWY7CisgICAgdXNpbmcgVHJlZVNoYXJlZDxDb250
YWluZXJOb2RlPjo6ZGVyZWY7CisKIHByaXZhdGU6Ci0gICAgSFRNTE9iamVjdEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOworICAg
IEhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxG
b3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
ZWRJbnRvVHJlZShib29sIGRlZXApOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbVRyZWUo
Ym9vbCBkZWVwKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0
eWxlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CkBAIC02OSw2
ICs4OCwxMSBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDbGFzc0lkKCk7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgeyByZWYoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpIHsgZGVyZWYoKTsg
fQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNv
bnN0OworCiAgICAgQXRvbWljU3RyaW5nIG1faWQ7CiAgICAgU3RyaW5nIG1fY2xhc3NJZDsKICAg
ICBib29sIG1fZG9jTmFtZWRJdGVtIDogMTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFt
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgkocmV2aXNp
b24gNzM0MTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCSh3b3JraW5nIGNvcHkp
CkBAIC04OSw3ICs4OSw3IEBAIG5vYnIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogbm9lbWJl
ZCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBub2ZyYW1lcyBpbnRlcmZhY2VOYW1lPUhUTUxF
bGVtZW50CiBub2xheWVyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLW9iamVjdCBjb25zdHJ1
Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyCitvYmplY3QgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVt
ZW50LCBjb25zdHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyCiBvbCBpbnRlcmZhY2VOYW1lPUhU
TUxPTGlzdEVsZW1lbnQKIG9wdGdyb3VwIGludGVyZmFjZU5hbWU9SFRNTE9wdEdyb3VwRWxlbWVu
dCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50CiBvcHRpb24gY29uc3RydWN0b3JOZWVkc0Zv
cm1FbGVtZW50CkluZGV4OiBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAJKHJldmlzaW9uIDcz
NDEyKQorKysgV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUFMV0FZU19JTkxJ
TkUgVmFsaWRhdGlvbk1lc3NhZ2U6OlZhbGlkYXRpb25NZXNzYWdlKEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIGVsZW1lbnQpCitBTFdBWVNfSU5MSU5FIFZhbGlkYXRpb25NZXNzYWdlOjpWYWxpZGF0
aW9uTWVzc2FnZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgOiBtX2VsZW1l
bnQoZWxlbWVudCkKIHsKIH0KQEAgLTQ1LDcgKzQ1LDcgQEAgVmFsaWRhdGlvbk1lc3NhZ2U6On5W
YWxpZGF0aW9uTWVzc2FnZSgpCiAgICAgaGlkZU1lc3NhZ2UoKTsKIH0KIAotUGFzc093blB0cjxW
YWxpZGF0aW9uTWVzc2FnZT4gVmFsaWRhdGlvbk1lc3NhZ2U6OmNyZWF0ZShIVE1MRm9ybUNvbnRy
b2xFbGVtZW50KiBlbGVtZW50KQorUGFzc093blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gVmFsaWRh
dGlvbk1lc3NhZ2U6OmNyZWF0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWYWxpZGF0aW9uTWVzc2FnZShlbGVtZW50KSk7CiB9Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAkocmV2aXNpb24gNzM0MTIpCisrKyBXZWJDb3Jl
L2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjAgKzM4LDIw
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDsKK2NsYXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKIAogY2xhc3MgVmFsaWRhdGlvbk1lc3Nh
Z2UgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PFZhbGlkYXRpb25NZXNzYWdlPiBjcmVhdGUoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAg
IHN0YXRpYyBQYXNzT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBjcmVhdGUoRm9ybUFzc29jaWF0
ZWRFbGVtZW50Kik7CiAgICAgflZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAgU3RyaW5nIG1lc3Nh
Z2UoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2U7IH0KICAgICB2b2lkIHNldE1lc3NhZ2UoY29u
c3QgU3RyaW5nJik7CiAKIHByaXZhdGU6Ci0gICAgVmFsaWRhdGlvbk1lc3NhZ2UoSFRNTEZvcm1D
b250cm9sRWxlbWVudCopOworICAgIFZhbGlkYXRpb25NZXNzYWdlKEZvcm1Bc3NvY2lhdGVkRWxl
bWVudCopOwogICAgIHZvaWQgaGlkZU1lc3NhZ2UoVGltZXI8VmFsaWRhdGlvbk1lc3NhZ2U+KiA9
IDApOwogCi0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogbV9lbGVtZW50OworICAgIEZvcm1B
c3NvY2lhdGVkRWxlbWVudCogbV9lbGVtZW50OwogICAgIFN0cmluZyBtX21lc3NhZ2U7CiAgICAg
T3duUHRyPFRpbWVyPFZhbGlkYXRpb25NZXNzYWdlPiA+IG1fdGltZXI7CiB9OwpJbmRleDogV2Vi
Q29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9W
YWxpZGl0eVN0YXRlLmNwcAkocmV2aXNpb24gNzM0MTIpCisrKyBXZWJDb3JlL2h0bWwvVmFsaWRp
dHlTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDI1ICszNywyNiBAQCB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCiBTdHJpbmcgVmFsaWRpdHlTdGF0ZTo6dmFsaWRhdGlvbk1lc3Nh
Z2UoKSBjb25zdAogewotICAgIGlmICghbV9jb250cm9sLT53aWxsVmFsaWRhdGUoKSkKKyAgICBp
ZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+d2lsbFZhbGlkYXRlKCkpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAogICAgIGlmIChjdXN0b21FcnJvcigpKQogICAgICAgICByZXR1cm4g
bV9jdXN0b21FcnJvck1lc3NhZ2U7Ci0gICAgYm9vbCBpc0lucHV0RWxlbWVudCA9IG1fY29udHJv
bC0+aGFzVGFnTmFtZShpbnB1dFRhZyk7Ci0gICAgYm9vbCBpc1RleHRBcmVhRWxlbWVudCA9IG1f
Y29udHJvbC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZyk7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1l
bnQgPSB0b0hUTUxFbGVtZW50KG1fY29udHJvbCk7CisgICAgYm9vbCBpc0lucHV0RWxlbWVudCA9
IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShp
bnB1dFRhZyk7CisgICAgYm9vbCBpc1RleHRBcmVhRWxlbWVudCA9IGVsZW1lbnQtPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZyk7CiAgICAg
Ly8gVGhlIG9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgY2hlY2tzIGlzIG1lYW5pbmdmdWwuIGUuZy4g
V2UnZCBsaWtlIHRvIHNob3cgdGhlCiAgICAgLy8gdmFsdWVNaXNzaW5nIG1lc3NhZ2UgZXZlbiBp
ZiB0aGUgY29udHJvbCBoYXMgb3RoZXIgdmFsaWRhdGlvbiBlcnJvcnMuCiAgICAgaWYgKHZhbHVl
TWlzc2luZygpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRyb2wtPmhhc1RhZ05hbWUoc2VsZWN0VGFn
KSkKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKICAgICAgICAg
ICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclNlbGVjdFRleHQoKTsK
ICAgICAgICAgaWYgKGlzSW5wdXRFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpLT52YWx1ZU1pc3NpbmdUZXh0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQp
LT52YWx1ZU1pc3NpbmdUZXh0KCk7CiAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZh
bHVlTWlzc2luZ1RleHQoKTsKICAgICB9CiAgICAgaWYgKHR5cGVNaXNtYXRjaCgpKSB7CiAgICAg
ICAgIGlmIChpc0lucHV0RWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKS0+dHlwZU1pc21hdGNoVGV4dCgpOworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KS0+dHlw
ZU1pc21hdGNoVGV4dCgpOwogICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VUeXBlTWlz
bWF0Y2hUZXh0KCk7CiAgICAgfQogICAgIGlmIChwYXR0ZXJuTWlzbWF0Y2goKSkKQEAgLTY1LDcg
KzY2LDcgQEAgU3RyaW5nIFZhbGlkaXR5U3RhdGU6OnZhbGlkYXRpb25NZXNzYWdlKAogICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAgICAgICAgIH0KLSAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHQgPSBz
dGF0aWNfY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCo+KG1fY29udHJvbCk7CisgICAg
ICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8SFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHZhbGlkYXRp
b25NZXNzYWdlVG9vTG9uZ1RleHQobnVtR3JhcGhlbWVDbHVzdGVycyh0ZXh0LT52YWx1ZSgpKSwg
dGV4dC0+bWF4TGVuZ3RoKCkpOwogICAgIH0KICAgICBpZiAocmFuZ2VVbmRlcmZsb3coKSkgewpA
QCAtNzMsMjEgKzc0LDIxIEBAIFN0cmluZyBWYWxpZGl0eVN0YXRlOjp2YWxpZGF0aW9uTWVzc2Fn
ZSgKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVJh
bmdlVW5kZXJmbG93VGV4dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9s
KS0+bWluaW11bVN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlUmFu
Z2VVbmRlcmZsb3dUZXh0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KS0+
bWluaW11bVN0cmluZygpKTsKICAgICB9CiAgICAgaWYgKHJhbmdlT3ZlcmZsb3coKSkgewogICAg
ICAgICBpZiAoIWlzSW5wdXRFbGVtZW50KSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZU92ZXJmbG93VGV4dChzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4obV9jb250cm9sKS0+bWF4aW11bVN0cmluZygpKTsKKyAgICAgICAgcmV0
dXJuIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VPdmVyZmxvd1RleHQoc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudCo+KGVsZW1lbnQpLT5tYXhpbXVtU3RyaW5nKCkpOwogICAgIH0KICAgICBpZiAo
c3RlcE1pc21hdGNoKCkpIHsKICAgICAgICAgaWYgKCFpc0lucHV0RWxlbWVudCkgewogICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAgICAgICAgIH0KLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVu
dCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAg
ICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVN0ZXBNaXNtYXRjaFRleHQoaW5wdXQtPnN0ZXBC
YXNlU3RyaW5nKCksIGlucHV0LT5zdGVwU3RyaW5nKCkpOwogICAgIH0KIApAQCAtOTcsMTcgKzk4
LDE5IEBAIFN0cmluZyBWYWxpZGl0eVN0YXRlOjp2YWxpZGF0aW9uTWVzc2FnZSgKIHZvaWQgVmFs
aWRpdHlTdGF0ZTo6c2V0Q3VzdG9tRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IHsKICAgICBtX2N1c3RvbUVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgbV9jb250cm9sLT5z
ZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKKyAgICBpZiAobV9jb250cm9sLT5pc0Zvcm1Db250cm9s
RWxlbWVudCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4o
bV9jb250cm9sKS0+c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiB9CiAKIGJvb2wgVmFsaWRpdHlT
dGF0ZTo6dmFsdWVNaXNzaW5nKCkgY29uc3QKIHsKLSAgICBpZiAobV9jb250cm9sLT5oYXNUYWdO
YW1lKGlucHV0VGFnKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOworICAgIEhUTUxFbGVtZW50KiBl
bGVtZW50ID0gdG9IVE1MRWxlbWVudChtX2NvbnRyb2wpOworICAgIGlmIChlbGVtZW50LT5oYXNU
YWdOYW1lKGlucHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIGlu
cHV0LT52YWx1ZU1pc3NpbmcoaW5wdXQtPnZhbHVlKCkpOwogICAgIH0KLSAgICBpZiAobV9jb250
cm9sLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgewotICAgICAgICBIVE1MVGV4dEFyZWFFbGVt
ZW50KiB0ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihtX2NvbnRy
b2wpOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgeworICAgICAg
ICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJl
YUVsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHRleHRBcmVhLT52YWx1ZU1pc3Np
bmcodGV4dEFyZWEtPnZhbHVlKCkpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTUs
MTQgKzExOCwxNCBAQCBib29sIFZhbGlkaXR5U3RhdGU6OnZhbHVlTWlzc2luZygpIGNvbnN0CiAK
IGJvb2wgVmFsaWRpdHlTdGF0ZTo6dHlwZU1pc21hdGNoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
Y29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgaWYgKCF0b0hUTUxFbGVtZW50KG1f
Y29udHJvbCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpLT50eXBl
TWlzbWF0Y2goKTsKIH0KIAogYm9vbCBWYWxpZGl0eVN0YXRlOjpwYXR0ZXJuTWlzbWF0Y2goKSBj
b25zdAogewotICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICBp
ZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgIHJldHVybiBpbnB1dC0+cGF0
dGVybk1pc21hdGNoKGlucHV0LT52YWx1ZSgpKTsKQEAgLTEzMCwxMSArMTMzLDExIEBAIGJvb2wg
VmFsaWRpdHlTdGF0ZTo6cGF0dGVybk1pc21hdGNoKCkgY28KIAogYm9vbCBWYWxpZGl0eVN0YXRl
Ojp0b29Mb25nKCkgY29uc3QKIHsKLSAgICBpZiAobV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0
VGFnKSkgeworICAgIGlmICh0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUoaW5w
dXRUYWcpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCk7CiAgICAgICAgIHJldHVybiBpbnB1dC0+dG9v
TG9uZyhpbnB1dC0+dmFsdWUoKSwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OkNoZWNrRGly
dHlGbGFnKTsKICAgICB9Ci0gICAgaWYgKG1fY29udHJvbC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRh
ZykpIHsKKyAgICBpZiAodG9IVE1MRWxlbWVudChtX2NvbnRyb2wpLT5oYXNUYWdOYW1lKHRleHRh
cmVhVGFnKSkgewogICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYSA9IHN0YXRp
Y19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgICAgICByZXR1cm4g
dGV4dEFyZWEtPnRvb0xvbmcodGV4dEFyZWEtPnZhbHVlKCksIEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50OjpDaGVja0RpcnR5RmxhZyk7CiAgICAgfQpAQCAtMTQzLDcgKzE0Niw3IEBAIGJvb2wg
VmFsaWRpdHlTdGF0ZTo6dG9vTG9uZygpIGNvbnN0CiAKIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cmFu
Z2VVbmRlcmZsb3coKSBjb25zdAogewotICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdOYW1lKGlu
cHV0VGFnKSkKKyAgICBpZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFtZShp
bnB1dFRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgIHJl
dHVybiBpbnB1dC0+cmFuZ2VVbmRlcmZsb3coaW5wdXQtPnZhbHVlKCkpOwpAQCAtMTUxLDcgKzE1
NCw3IEBAIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cmFuZ2VVbmRlcmZsb3coKSBjb24KIAogYm9vbCBW
YWxpZGl0eVN0YXRlOjpyYW5nZU92ZXJmbG93KCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29udHJv
bC0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgaWYgKCF0b0hUTUxFbGVtZW50KG1fY29udHJv
bCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9j
b250cm9sKTsKICAgICByZXR1cm4gaW5wdXQtPnJhbmdlT3ZlcmZsb3coaW5wdXQtPnZhbHVlKCkp
OwpAQCAtMTU5LDcgKzE2Miw3IEBAIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cmFuZ2VPdmVyZmxvdygp
IGNvbnMKIAogYm9vbCBWYWxpZGl0eVN0YXRlOjpzdGVwTWlzbWF0Y2goKSBjb25zdAogewotICAg
IGlmICghbV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICBpZiAoIXRvSFRNTEVs
ZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgIHJldHVybiBpbnB1dC0+c3RlcE1pc21hdGNoKGlu
cHV0LT52YWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuaAkocmV2aXNpb24gNzM0MTIpCisr
KyBXZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNCAr
MjQsMTQgQEAKICNpZm5kZWYgVmFsaWRpdHlTdGF0ZV9oCiAjZGVmaW5lIFZhbGlkaXR5U3RhdGVf
aAogCi0jaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIkZvcm1B
c3NvY2lhdGVkRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVmFsaWRpdHlTdGF0ZSA6IHB1YmxpYyBOb25jb3B5YWJs
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VmFsaWRpdHlTdGF0ZT4gY3JlYXRl
KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wpCisgICAgc3RhdGljIFBhc3NPd25QdHI8
VmFsaWRpdHlTdGF0ZT4gY3JlYXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogY29udHJvbCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVmFsaWRpdHlTdGF0ZShjb250cm9sKSk7
CiAgICAgfQpAQCAtNTQsMTIgKzU0LDEyIEBAIHB1YmxpYzoKICAgICBib29sIHZhbGlkKCkgY29u
c3Q7CiAKIHByaXZhdGU6Ci0gICAgVmFsaWRpdHlTdGF0ZShIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBjb250cm9sKSA6IG1fY29udHJvbChjb250cm9sKSB7IH0KKyAgICBWYWxpZGl0eVN0YXRlKEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCogY29udHJvbCkgOiBtX2NvbnRyb2woY29udHJvbCkgeyB9CiAK
ICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkQ29sb3JTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAg
c3RhdGljIGJvb2wgaXNWYWxpZEVtYWlsQWRkcmVzcyhjb25zdCBTdHJpbmcmKTsKIAotICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIG1fY29udHJvbDsKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqIG1fY29udHJvbDsKICAgICBTdHJpbmcgbV9jdXN0b21FcnJvck1lc3NhZ2U7CiB9OwogCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCShyZXZpc2lvbiA3MzQxMikKKysrIFdlYkNv
cmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDEwICsx
NzUsMTEgQEAgUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lvbj4gRm9ybVN1Ym1pc3NpbwogICAgIFZl
Y3RvcjxwYWlyPFN0cmluZywgU3RyaW5nPiA+IGZvcm1WYWx1ZXM7CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGZvcm0tPmFzc29jaWF0
ZWRFbGVtZW50cygpW2ldOwotICAgICAgICBpZiAoIWNvbnRyb2wtPmRpc2FibGVkKCkpCisgICAg
ICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogY29udHJvbCA9IGZvcm0tPmFzc29jaWF0ZWRFbGVt
ZW50cygpW2ldOworICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQo
Y29udHJvbCk7CisgICAgICAgIGlmICghZWxlbWVudC0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAg
IGNvbnRyb2wtPmFwcGVuZEZvcm1EYXRhKCpkb21Gb3JtRGF0YSwgaXNNdWx0aVBhcnRGb3JtKTsK
LSAgICAgICAgaWYgKGNvbnRyb2wtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKKyAgICAgICAg
aWYgKGVsZW1lbnQtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKICAgICAgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGNvbnRy
b2wpOwogICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7CiAgICAgICAgICAg
ICAgICAgZm9ybVZhbHVlcy5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4oaW5wdXQtPm5hbWUo
KSwgaW5wdXQtPnZhbHVlKCkpKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzM0MTIpCisr
KyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTAtMTItMDYgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZXQgSFRNTE9i
amVjdEVsZW1lbnQgYmUgYSBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MjEKKworICAgICAgICBNb2RpZmll
ZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50IGluc3RlYWQgb2YgSFRNTEZvcm1Db250cm9s
RWxlbWVudC4KKworICAgICAgICAqIHNyYy9XZWJGb3JtRWxlbWVudC5jcHA6IAorICAgICAgICAo
V2ViS2l0OjpXZWJGb3JtRWxlbWVudDo6Z2V0Rm9ybUNvbnRyb2xFbGVtZW50cyk6IE1vZGlmaWVk
IHRvIHVzZQorICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50LgorICAgICAgICAqIHNyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OmZpbmRQYXNzd29yZEZvcm1GaWVsZHMpOiBEaXR0by4KKyAgICAg
ICAgKiBzcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdl
dEJ1dHRvblRvQWN0aXZhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Okhhc1N1aXRhYmxl
VGV4dEVsZW1lbnQpOiBEaXR0by4KKwogMjAxMC0xMi0wNiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gNzM0MTIpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTIsOSArOTIsMTIgQEAgdm9pZCBXZWJGb3JtRWxlbWVudDo6Z2V0Rm9ybUNvbnRyb2xFbGVtZQog
ICAgIC8vIHJlLWV2YWx1YXRpbmcgc2l6ZSBlYWNoIHRpbWUuIEFsc28sIGNvbnNpZGVyIHJlZmFj
dG9yaW5nIHRoaXMgY29kZSBzbyB0aGF0CiAgICAgLy8gd2UgZG9uJ3QgY2FsbCBmb3JtLT5hc3Nv
Y2lhdGVkRWxlbWVudHMoKSBtdWx0aXBsZSB0aW1lcy4KICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlm
IChmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
aW5wdXRUYWcpCi0gICAgICAgICAgICB8fCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0VGFnKSkKLSAgICAgICAgICAgIHRlbXBWZWN0
b3IuYXBwZW5kKGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpW2ldKTsKKyAgICAgICAgaWYgKCFm
b3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGZvcm0tPmFzc29jaWF0
ZWRFbGVtZW50cygpW2ldKTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmlucHV0VGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6c2VsZWN0VGFnKSkKKyAgICAgICAgICAgIHRlbXBWZWN0b3IuYXBwZW5kKGVsZW1l
bnQpOwogICAgIH0KICAgICByZXN1bHQuYXNzaWduKHRlbXBWZWN0b3IpOwogfQpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5jcHAJKHJldmlzaW9uIDcz
NDEyKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY1LDkgKzY1LDExIEBAIHZvaWQgZmluZFBhc3N3b3JkRm9ybUZpZWxk
cyhIVE1MRm9ybUVsZW0KIAogICAgIGludCBmaXJzdFBhc3N3b3JkSW5kZXggPSAwOwogICAgIC8v
IEZpcnN0LCBmaW5kIHRoZSBwYXNzd29yZCBmaWVsZHMgYW5kIGFjdGl2YXRlZCBzdWJtaXQgYnV0
dG9uCi0gICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZm9ybUVsZW1l
bnRzID0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgY29uc3QgVmVjdG9yPEZvcm1B
c3NvY2lhdGVkRWxlbWVudCo+JiBmb3JtRWxlbWVudHMgPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVu
dHMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7IGkr
KykgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm1F
bGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFmb3JtRWxlbWVudHNbaV0tPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogZm9ybUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Kj4oZm9ybUVsZW1lbnRzW2ldKTsKICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5pc0FjdGl2YXRl
ZFN1Ym1pdCgpKQogICAgICAgICAgICAgZmllbGRzLT5zdWJtaXQgPSBmb3JtRWxlbWVudDsKIApA
QCAtOTAsNyArOTIsOSBAQCB2b2lkIGZpbmRQYXNzd29yZEZvcm1GaWVsZHMoSFRNTEZvcm1FbGVt
CiAgICAgaWYgKCFmaWVsZHMtPnBhc3N3b3Jkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVGhl
biwgc2VhcmNoIGJhY2t3YXJkcyBmb3IgdGhlIHVzZXJuYW1lIGZpZWxkCiAgICAgICAgIGZvciAo
aW50IGkgPSBmaXJzdFBhc3N3b3JkSW5kZXggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudHNbaV07
CisgICAgICAgICAgICBpZiAoIWZvcm1FbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KGZvcm1FbGVtZW50c1tpXSk7CiAgICAgICAgICAgICBpZiAoIWZvcm1FbGVtZW50LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5j
cHAJKHJldmlzaW9uIDczNDEyKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxl
Rm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3NywxMCBAQCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBHZXRCdXR0b25Ub0FjdGl2CiB7CiAgICAgSFRNTEZvcm1Db250cm9sRWxl
bWVudCogZmlyc3RTdWJtaXRCdXR0b24gPSAwOwogICAgIC8vIEZJWE1FOiBDb25zaWRlciByZWZh
Y3RvcmluZyB0aGlzIGNvZGUgc28gdGhhdCB3ZSBkb24ndCBjYWxsIGZvcm0tPmFzc29jaWF0ZWRF
bGVtZW50cygpIHR3aWNlLgotICAgIGZvciAoVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
Pjo6Y29uc3RfaXRlcmF0b3IgaShmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5iZWdpbigpKTsg
aSAhPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5lbmQoKTsgKytpKSB7Ci0gICAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9ICppOworICAgIGZvciAoVmVjdG9yPEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpKGZvcm0tPmFzc29jaWF0ZWRF
bGVtZW50cygpLmJlZ2luKCkpOyBpICE9IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLmVuZCgp
OyArK2kpIHsKKyAgICAgIGlmICghKCppKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1FbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KCppKTsKICAgICAgIGlmIChm
b3JtRWxlbWVudC0+aXNBY3RpdmF0ZWRTdWJtaXQoKSkKICAgICAgICAgICAvLyBUaGVyZSdzIGEg
YnV0dG9uIHRoYXQgaXMgYWxyZWFkeSBhY3RpdmF0ZWQgZm9yIHN1Ym1pdCwgcmV0dXJuIDAuCiAg
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTUsOCArMTU3LDEwIEBAIGJvb2wgSGFzU3VpdGFibGVU
ZXh0RWxlbWVudChjb25zdCBIVE1MRm8KIAogICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRleHRFbGVt
ZW50ID0gMDsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgcmVmYWN0b3JpbmcgdGhpcyBjb2RlIHNv
IHRoYXQgd2UgZG9uJ3QgY2FsbCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKSB0d2ljZS4KLSAg
ICBmb3IgKFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGko
Zm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuYmVnaW4oKSk7IGkgIT0gZm9ybS0+YXNzb2NpYXRl
ZEVsZW1lbnRzKCkuZW5kKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBmb3JtRWxlbWVudCA9ICppOworICAgIGZvciAoVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCo+Ojpjb25zdF9pdGVyYXRvciBpKGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLmJlZ2luKCkp
OyBpICE9IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLmVuZCgpOyArK2kpIHsKKyAgICAgICAg
aWYgKCEoKmkpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KCppKTsKICAgICAgICAgaWYgKGZvcm1FbGVtZW50
LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVtZW50LT5uYW1lKCkuaXNOdWxsKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIApJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDEyKQorKysgV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0xMi0wNiAgS2VuaWNo
aSBJc2hpYmFzaGkgIDxiYXNoaUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIExldCBIVE1MT2JqZWN0RWxlbWVudCBiZSBhIGZvcm0g
YXNzb2NpYXRlZCBlbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00ODgyMQorCisgICAgICAgIE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorCisgICAgICAgICog
V2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAgICAgICgtW1dlYkhUTUxSZXBy
ZXNlbnRhdGlvbiBlbGVtZW50V2l0aE5hbWU6aW5Gb3JtOl0pOiBNb2RpZmllZCB0byB1c2UKKyAg
ICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50IGluc3RlYWQgb2YgSFRNTEZvcm1Db250cm9sRWxl
bWVudC4KKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGNvbnRyb2xzSW5Gb3JtOl0p
OiBEaXR0by4KKwogMjAxMC0xMi0wNiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0JKHJldmlzaW9uIDczNDEyKQorKysgV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjg1LDEyICsyODUsMTIgQEAgLSAoRE9NRWxlbWVudCAqKWVsZW1lbnRXaXRoTmFtZTooTlNT
dHJpbgogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudEZyb21E
T01FbGVtZW50KGZvcm0pOwogICAgIGlmICghZm9ybUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZWxlbWVudHMg
PSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgY29uc3QgVmVjdG9yPEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5hc3NvY2lhdGVk
RWxlbWVudHMoKTsKICAgICBBdG9taWNTdHJpbmcgdGFyZ2V0TmFtZSA9IG5hbWU7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsdCA9IGVsZW1lbnRzW2ldOworICAgICAgICBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQqIGVsdCA9IGVsZW1lbnRzW2ldOwogICAgICAgICBpZiAoZWx0LT5uYW1l
KCkgPT0gdGFyZ2V0TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBraXQoZWx0KTsKKyAgICAgICAg
ICAgIHJldHVybiBraXQodG9IVE1MRWxlbWVudChlbHQpKTsKICAgICB9CiAgICAgcmV0dXJuIG5p
bDsKIH0KQEAgLTMzMywxMCArMzMzLDEwIEBAIC0gKE5TQXJyYXkgKiljb250cm9sc0luRm9ybToo
RE9NRWxlbWVudCAKICAgICBpZiAoIWZvcm1FbGVtZW50KQogICAgICAgICByZXR1cm4gbmlsOwog
ICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHRzID0gbmlsOwotICAgIGNvbnN0IFZlY3RvcjxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0ZWRF
bGVtZW50cygpOworICAgIGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqPiYgZWxl
bWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChlbGVt
ZW50c1tpXS0+aXNFbnVtZXJhdGFibGUoKSkgeyAvLyBTa2lwIG9wdGlvbiBlbGVtZW50cywgb3Ro
ZXIgZHVkcwotICAgICAgICAgICAgRE9NRWxlbWVudCogZGUgPSBraXQoZWxlbWVudHNbaV0pOwor
ICAgICAgICAgICAgRE9NRWxlbWVudCogZGUgPSBraXQodG9IVE1MRWxlbWVudChlbGVtZW50c1tp
XSkpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHRzKQogICAgICAgICAgICAgICAgIHJlc3VsdHMg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmRlXTsKICAgICAgICAgICAgIGVsc2UK
SW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiA3MzQxMikKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTItMDYgIEtlbmljaGkgSXNoaWJhc2hpICA8
YmFzaGlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBMZXQgSFRNTE9iamVjdEVsZW1lbnQgYmUgYSBmb3JtIGFzc29jaWF0ZWQgZWxl
bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4
MjEKKworICAgICAgICBNb2RpZmllZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50IGluc3Rl
YWQgb2YgSFRNTEZvcm1Db250cm9sRWxlbWVudC4KKworICAgICAgICAqIFdlYkZyYW1lLmNwcDoK
KyAgICAgICAgKFdlYkZyYW1lOjplbGVtZW50V2l0aE5hbWUpOiBNb2RpZmllZCB0byB1c2UgRm9y
bUFzc29jaWF0ZWRFbGVtZW50CisgICAgICAgIGluc3RlYWQgb2YgSFRNTEZvcm1Db250cm9sRWxl
bWVudC4KKyAgICAgICAgKFdlYkZyYW1lOjpjb250cm9sc0luRm9ybSk6IERpdHRvLgorCiAyMDEw
LTEyLTA1ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dz
IHByb2R1Y3Rpb24gYnVpbGQgZml4CkluZGV4OiBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gNzM0MTIpCisrKyBX
ZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNCwxMiArMTEzNCwx
NCBAQCBIUkVTVUxUIFdlYkZyYW1lOjplbGVtZW50V2l0aE5hbWUoQlNUUiBuCiAgICAgaWYgKCFm
b3JtKQogICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOwogCi0gICAgSFRNTEZvcm1FbGVtZW50
ICpmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQoZm9ybSk7CisgICAgSFRN
TEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQoZm9y
bSk7CiAgICAgaWYgKGZvcm1FbGVtZW50KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0ZWRFbGVt
ZW50cygpOworICAgICAgICBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVs
ZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0ZWRFbGVtZW50cygpOwogICAgICAgICBBdG9t
aWNTdHJpbmcgdGFyZ2V0TmFtZSgoVUNoYXIqKW5hbWUsIFN5c1N0cmluZ0xlbihuYW1lKSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgKmVsdCA9IGVsZW1lbnRzW2ld
OworICAgICAgICAgICAgaWYgKCFlbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIGVsdCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50
c1tpXSk7CiAgICAgICAgICAgICAvLyBTa2lwIG9wdGlvbiBlbGVtZW50cywgb3RoZXIgZHVkcwog
ICAgICAgICAgICAgaWYgKGVsdC0+bmFtZSgpID09IHRhcmdldE5hbWUpIHsKICAgICAgICAgICAg
ICAgICAqZWxlbWVudCA9IERPTUVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGVsdCk7CkBAIC0xMzQ5
LDcgKzEzNTEsNyBAQCBIUkVTVUxUIFdlYkZyYW1lOjpjb250cm9sc0luRm9ybShJRE9NRWxlCiAg
ICAgaWYgKCFmb3JtKQogICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOwogCi0gICAgSFRNTEZv
cm1FbGVtZW50ICpmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQoZm9ybSk7
CisgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50RnJvbURPTUVs
ZW1lbnQoZm9ybSk7CiAgICAgaWYgKCFmb3JtRWxlbWVudCkKICAgICAgICAgcmV0dXJuIEVfRkFJ
TDsKIApAQCAtMTM2MiwxMCArMTM2NCwxMCBAQCBIUkVTVUxUIFdlYkZyYW1lOjpjb250cm9sc0lu
Rm9ybShJRE9NRWxlCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKICAgICAqY0NvbnRyb2xzID0g
MDsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBlbGVtZW50cyA9
IGZvcm1FbGVtZW50LT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKKyAgICBjb25zdCBWZWN0b3I8Rm9y
bUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0ZWRF
bGVtZW50cygpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAg
ICBpZiAoZWxlbWVudHMuYXQoaSktPmlzRW51bWVyYXRhYmxlKCkpIHsgLy8gU2tpcCBvcHRpb24g
ZWxlbWVudHMsIG90aGVyIGR1ZHMKLSAgICAgICAgICAgIGNvbnRyb2xzWypjQ29udHJvbHNdID0g
RE9NRWxlbWVudDo6Y3JlYXRlSW5zdGFuY2UoZWxlbWVudHMuYXQoaSkpOworICAgICAgICAgICAg
Y29udHJvbHNbKmNDb250cm9sc10gPSBET01FbGVtZW50OjpjcmVhdGVJbnN0YW5jZSh0b0hUTUxF
bGVtZW50KGVsZW1lbnRzLmF0KGkpKSk7CiAgICAgICAgICAgICAoKmNDb250cm9scykrKzsKICAg
ICAgICAgfQogICAgIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDEyKQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMTItMDYgIEtl
bmljaGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZXQgSFRNTE9iamVjdEVsZW1lbnQgYmUgYSBm
b3JtIGFzc29jaWF0ZWQgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDg4MjEKKworICAgICAgICBBZGRzIGEgdGVzdCB0byBlbnN1cmUgdGhl
IG9yZGVyIG9mIGZvcm0uZWxlbWVudHMgYXR0cmlidXRlLgorICAgICAgICBVcGRhdGVzIHR3byB0
ZXN0cyB0byBjaGVjayB3aGV0aGVyIG9iamVjdCBlbGVtZW50cyBhcmUgaGFuZGxlZAorICAgICAg
ICBjb3JyZWN0bHkgaW4gZm9ybS5lbGVtZW50cyBhdHRyaWJ1dGUuCisKKyAgICAgICAgKiBmYXN0
L2Zvcm1zL2Zvcm0tYXR0cmlidXRlLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiBm
YXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVy
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tYXR0
cmlidXRlLmpzOiBVcGRhdGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zv
cm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5qczogQWRkZWQuCisgICAgICAgIChjaGVja09y
ZGVyKToKKyAgICAgICAgKiBmYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24t
ZWxlbWVudHMuanM6IFVwZGF0ZWQuCisKIDIwMTAtMTItMDUgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1hdHRyaWJ1dGUtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1hdHRyaWJ1dGUtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiA3MzQxMikKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1hdHRyaWJ1
dGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDE0ICs0LDE0IEBAIE9uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiAtIENoZWNrcyB0aGUgZXhpc3Rl
bmNlIG9mIHRoZSBmb3JtIGF0dHJpYnV0ZSBmb3IgZWFjaCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVu
dHMuCi1GSVhNRTogPGxhYmVsPiBhbmQgPG9iamVjdD4gZG9uJ3Qgc3VwcG9ydCB0aGUgZm9ybSBh
dHRyaWJ1dGUgZm9yIG5vdy4KK0ZJWE1FOiA8bGFiZWw+IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZm9y
bSBhdHRyaWJ1dGUgZm9yIG5vdy4KIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
ImJ1dHRvbiIpWzBdLmZvcm0gaXMgb3duZXIKIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoImZpZWxkc2V0IilbMF0uZm9ybSBpcyBvd25lcgogUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJrZXlnZW4iKVswXS5mb3JtIGlzIG93bmVyCiBGQUlMIGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIpWzBdLmZvcm0gc2hvdWxkIGJlIFtvYmpl
Y3QgSFRNTEZvcm1FbGVtZW50XS4gV2FzIG51bGwuCiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJtZXRlciIpWzBdLmZvcm0gaXMgb3duZXIKLUZBSUwgZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdLmZvcm0gc2hvdWxkIGJlIFtvYmplY3QgSFRNTEZv
cm1FbGVtZW50XS4gV2FzIG51bGwuCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJvYmplY3QiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJvdXRwdXQiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJwcm9ncmVzcyIpWzBdLmZvcm0gaXMgb3duZXIKIFBBU1MgZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpWzBdLmZvcm0gaXMgb3duZXIKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1l
bGVtZW50cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDczNDEyKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC00LDcgKzQsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBCiAKIAogVGhpcyB0ZXN0IGRvZXMgbm90IGFkZCBvYmplY3QgZWxlbWVudCBhcyBhIGxpc3Rl
ZCBlbGVtZW50LiBTZXBhcmF0ZSB0ZXN0IHdpbGwgY292ZXIgdGhhdC4KLVBBU1Mgb3duZXIuZWxl
bWVudHMubGVuZ3RoIGlzIDIyCitQQVNTIG93bmVyLmVsZW1lbnRzLmxlbmd0aCBpcyAyMwogUEFT
UyBvd25lci5lbGVtZW50c1swXS5pZCBpcyAnYnV0dG9uMScKIFBBU1Mgb3duZXIuZWxlbWVudHNb
MV0uaWQgaXMgJ2ZpZWxkc2V0MScKIFBBU1Mgb3duZXIuZWxlbWVudHNbMl0uaWQgaXMgJ2lucHV0
aGlkZGVuJwpAQCAtMjQsOSArMjQsMTAgQEAgUEFTUyBvd25lci5lbGVtZW50c1sxNV0uaWQgaXMg
J2lucHV0c3VibQogUEFTUyBvd25lci5lbGVtZW50c1sxNl0uaWQgaXMgJ2lucHV0cmVzZXQnCiBQ
QVNTIG93bmVyLmVsZW1lbnRzWzE3XS5pZCBpcyAnaW5wdXRidXR0b24nCiBQQVNTIG93bmVyLmVs
ZW1lbnRzWzE4XS5pZCBpcyAna2V5Z2VuMScKLVBBU1Mgb3duZXIuZWxlbWVudHNbMTldLmlkIGlz
ICdvdXRwdXQxJwotUEFTUyBvd25lci5lbGVtZW50c1syMF0uaWQgaXMgJ3NlbGVjdDEnCi1QQVNT
IG93bmVyLmVsZW1lbnRzWzIxXS5pZCBpcyAndGV4dGFyZWExJworUEFTUyBvd25lci5lbGVtZW50
c1sxOV0uaWQgaXMgJ29iamVjdDEnCitQQVNTIG93bmVyLmVsZW1lbnRzWzIwXS5pZCBpcyAnb3V0
cHV0MScKK1BBU1Mgb3duZXIuZWxlbWVudHNbMjFdLmlkIGlzICdzZWxlY3QxJworUEFTUyBvd25l
ci5lbGVtZW50c1syMl0uaWQgaXMgJ3RleHRhcmVhMScKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9m
b3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1j
b2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzMSBAQAorVGhpcyB0ZXN0IGV4YW1pbmVzIHRoZSBvcmRlciBvZiBmb3JtIGFzc29jaWF0
ZWQgZWxlbWVudHMgd2hpY2ggYXJlIGNsYXNzaWZpZWQgYXMgJ2xpc3RlZCcuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCistIENoZWNrcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lh
dGVkIGVsZW1lbnRzLgorUEFTUyBjaGVja09yZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwg
a2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJPSyIKKworLSBD
aGVja3MgdGhlIG9yZGVyIGFmdGVyIHNvbWUgZWxlbWVudHMgcmVtb3ZlZC9pbnNlcnRlZC4KK1BB
U1MgY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBz
ZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFtmaWVsZHNldCwgaW5w
dXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorUEFTUyBjaGVj
a09yZGVyKFtvYmplY3QsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwg
dGV4dGFyZWFdKSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIoW29iamVjdCwgZmllbGRzZXQsIGlu
cHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uXSkgaXMgIk9LIgor
CistIENoZWNrcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnRzIHdpdGggZm9y
bSBhdHRyaWJ1dGUuCitQQVNTIGNoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorCistIENo
ZWNrcyB0aGUgb3JkZXIgYWZ0ZXIgc29tZSBlbGVtZW50cyByZW1vdmVkL2luc2VydGVkIHdpdGgg
Zm9ybSBhdHRyaWJ1dGUuCitQQVNTIGNoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0
LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJPSyIKK1BBU1MgY2hlY2tP
cmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0p
IGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1
dCwgc2VsZWN0XSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFtmaWVsZHNldCwgaW5wdXQsIGtl
eWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdF0pIGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihb
dGV4dGFyZWEsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0
XSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIGJ1dHRvbl0pIGlzICJPSyIKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorVGVzdAorCisKKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlv
bi1lbGVtZW50cy1vcmRlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVy
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1hdHRyaWJ1dGUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1hdHRyaWJ1dGUuanMJ
KHJldmlzaW9uIDczNDEyKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMv
Zm9ybS1hdHRyaWJ1dGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBAIHZhciBjb250
YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCcKIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoY29udGFpbmVyKTsKIAogZGVidWcoJy0gQ2hlY2tzIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZv
cm0gYXR0cmlidXRlIGZvciBlYWNoIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cy4nKTsKLWRlYnVn
KCdGSVhNRTogJmx0O2xhYmVsJmd0OyBhbmQgJmx0O29iamVjdCZndDsgZG9uXCd0IHN1cHBvcnQg
dGhlIGZvcm0gYXR0cmlidXRlIGZvciBub3cuJyk7CitkZWJ1ZygnRklYTUU6ICZsdDtsYWJlbCZn
dDsgZG9lc25cJ3Qgc3VwcG9ydCB0aGUgZm9ybSBhdHRyaWJ1dGUgZm9yIG5vdy4nKTsKIGNvbnRh
aW5lci5pbm5lckhUTUwgPSAnPGZvcm0gaWQ9b3duZXI+PC9mb3JtPicgKwogICAgICc8YnV0dG9u
IG5hbWU9dmljdGltIGZvcm09b3duZXIgLz4nICsKICAgICAnPGZpZWxkc2V0IG5hbWU9dmljdGlt
IGZvcm09b3duZXIgLz4nICsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRl
c3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMt
b3JkZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10
ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTAwIEBACitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGV4YW1pbmVzIHRoZSBvcmRlciBv
ZiBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudHMgd2hpY2ggYXJlIGNsYXNzaWZpZWQgYXMgJ2xpc3Rl
ZCcuIik7CisKK3ZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
K2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKK3ZhciBvd25lcjsKKworZnVu
Y3Rpb24gY2hlY2tPcmRlcih2aWN0aW1zKSB7CisgICAgaWYgKG93bmVyLmVsZW1lbnRzLmxlbmd0
aCAhPSB2aWN0aW1zLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuICdsZW5ndGggbWlzbWF0Y2gsIGVs
ZW1lbnRzLmxlbmd0aCA9ICcgKyBvd25lci5lbGVtZW50cy5sZW5ndGggKworICAgICAgICAgICAg
ICAgJywgZXhwZWN0ZWQgbGVuZ3RoID0gJyArIHZpY3RpbXMubGVuZ3RoOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdmljdGltcy5sZW5ndGg7ICsraSkKKyAgICAgICAgaWYgKG93bmVyLmVsZW1l
bnRzW2ldICE9IHZpY3RpbXNbaV0pCisgICAgICAgICAgICByZXR1cm4gJ2VsZW1lbnQgbWlzbWF0
Y2ggYXQgaW5kZXggJyArIGk7CisgICAgcmV0dXJuICdPSyc7Cit9CisKK2RlYnVnKCctIENoZWNr
cyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnRzLicpOworY29udGFpbmVyLmlu
bmVySFRNTCA9ICc8Zm9ybSBpZD1vd25lcj4nICsKKyAgICAnPGJ1dHRvbiBuYW1lPXZpY3RpbT48
L2J1dHRvbj4nICsKKyAgICAnPGZpZWxkc2V0IG5hbWU9dmljdGltPlRlc3Q8L2ZpZWxkc2V0Picg
KworICAgICc8aW5wdXQgbmFtZT12aWN0aW0vPicgKworICAgICc8a2V5Z2VuIG5hbWU9dmljdGlt
Pjwva2V5Z2VuPicgKworICAgICc8bGFiZWwgbmFtZT12aWN0aW0+PC9sYWJlbD4nICsKKyAgICAn
PG1ldGVyIG5hbWU9dmljdGltPjwvbWV0ZXI+JyArCisgICAgJzxvYmplY3QgbmFtZT12aWN0aW0+
PC9vYmplY3Q+JyArCisgICAgJzxvdXRwdXQgbmFtZT12aWN0aW0+PC9vdXRwdXQ+JyArCisgICAg
Jzxwcm9ncmVzcyBuYW1lPXZpY3RpbT48L3Byb2dyZXNzPicgKworICAgICc8c2VsZWN0IG5hbWU9
dmljdGltPjwvc2VsZWN0PicgKworICAgICc8dGV4dGFyZWEgbmFtZT12aWN0aW0+PC90ZXh0YXJl
YT4nKworICAgICc8L2Zvcm0+JzsKK293bmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ293
bmVyJyk7Cit2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRv
bicpWzBdOwordmFyIGZpZWxkc2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Zp
ZWxkc2V0JylbMF07Cit2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
aW5wdXQnKVswXTsKK3ZhciBrZXlnZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
a2V5Z2VuJylbMF07Cit2YXIgbGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
bGFiZWwnKVswXTsKK3ZhciBtZXRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdt
ZXRlcicpWzBdOwordmFyIG9iamVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdv
YmplY3QnKVswXTsKK3ZhciBvdXRwdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
b3V0cHV0JylbMF07Cit2YXIgcHJvZ3Jlc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgncHJvZ3Jlc3MnKVswXTsKK3ZhciBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnc2VsZWN0JylbMF07Cit2YXIgdGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgndGV4dGFyZWEnKVswXTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtidXR0b24sIGZp
ZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0p
JywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWcoJy0gQ2hlY2tzIHRoZSBvcmRlciBhZnRl
ciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQuJyk7Citvd25lci5yZW1vdmVDaGlsZChv
YmplY3QpOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKK293bmVyLnJlbW92
ZUNoaWxkKGJ1dHRvbik7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKK293bmVyLmluc2Vy
dEJlZm9yZShvYmplY3QsIGZpZWxkc2V0KTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtvYmplY3Qs
IGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4dGFyZWFdKScsICci
T0siJyk7Citvd25lci5hcHBlbmRDaGlsZChidXR0b24pOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIo
W29iamVjdCwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJl
YSwgYnV0dG9uXSknLCAnIk9LIicpOworCitkZWJ1ZygnJyk7CitkZWJ1ZygnLSBDaGVja3MgdGhl
IG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50cyB3aXRoIGZvcm0gYXR0cmlidXRlLicp
OworY29udGFpbmVyLmlubmVySFRNTCA9ICc8YnV0dG9uIG5hbWU9dmljdGltIGZvcm09b3duZXI+
PC9idXR0b24+JyArCisgICAgJzxmaWVsZHNldCBuYW1lPXZpY3RpbSBmb3JtPW93bmVyPlRlc3Q8
L2ZpZWxkc2V0PicgKworICAgICc8aW5wdXQgbmFtZT12aWN0aW0gZm9ybT1vd25lci8+JyArCisg
ICAgJzxrZXlnZW4gbmFtZT12aWN0aW0gZm9ybT1vd25lcj48L2tleWdlbj4nICsKKyAgICAnPGZv
cm0gaWQ9b3duZXI+JyArCisgICAgJzxsYWJlbCBuYW1lPXZpY3RpbT48L2xhYmVsPicgKworICAg
ICc8bWV0ZXIgbmFtZT12aWN0aW0+PC9tZXRlcj4nICsKKyAgICAnPG9iamVjdCBuYW1lPXZpY3Rp
bT48L29iamVjdD4nICsKKyAgICAnPC9mb3JtPicgKworICAgICc8b3V0cHV0IG5hbWU9dmljdGlt
IGZvcm09b3duZXI+PC9vdXRwdXQ+JyArCisgICAgJzxwcm9ncmVzcyBuYW1lPXZpY3RpbSBmb3Jt
PW93bmVyPjwvcHJvZ3Jlc3M+JyArCisgICAgJzxzZWxlY3QgbmFtZT12aWN0aW0gZm9ybT1vd25l
cj48L3NlbGVjdD4nICsKKyAgICAnPHRleHRhcmVhIG5hbWU9dmljdGltIGZvcm09b3duZXI+PC90
ZXh0YXJlYT4nOworb3duZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3duZXInKTsKK2J1
dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVswXTsKK2ZpZWxk
c2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ZpZWxkc2V0JylbMF07CitpbnB1
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdOwora2V5Z2VuID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tleWdlbicpWzBdOworbGFiZWwgPSBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGFiZWwnKVswXTsKK21ldGVyID0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ21ldGVyJylbMF07CitvYmplY3QgPSBkb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JylbMF07CitvdXRwdXQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgnb3V0cHV0JylbMF07Citwcm9ncmVzcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCdwcm9ncmVzcycpWzBdOworc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ3NlbGVjdCcpWzBdOwordGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgndGV4dGFyZWEnKVswXTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFtidXR0b24s
IGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJl
YV0pJywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWcoJy0gQ2hlY2tzIHRoZSBvcmRlciBh
ZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQgd2l0aCBmb3JtIGF0dHJpYnV0ZS4n
KTsKK293bmVyLnJlbW92ZUNoaWxkKG9iamVjdCk7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbYnV0
dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkn
LCAnIk9LIicpOworY29udGFpbmVyLnJlbW92ZUNoaWxkKGJ1dHRvbik7CitzaG91bGRCZSgnY2hl
Y2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJl
YV0pJywgJyJPSyInKTsKK2NvbnRhaW5lci5yZW1vdmVDaGlsZCh0ZXh0YXJlYSk7CitzaG91bGRC
ZSgnY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0XSkn
LCAnIk9LIicpOworb3duZXIuYXBwZW5kQ2hpbGQob2JqZWN0KTsKK3Nob3VsZEJlKCdjaGVja09y
ZGVyKFtmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdF0pJywg
JyJPSyInKTsKK2NvbnRhaW5lci5pbnNlcnRCZWZvcmUodGV4dGFyZWEsIGZpZWxkc2V0KTsKK3No
b3VsZEJlKCdjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG9i
amVjdCwgb3V0cHV0LCBzZWxlY3RdKScsICciT0siJyk7Citjb250YWluZXIuYXBwZW5kQ2hpbGQo
YnV0dG9uKTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmllbGRzZXQsIGlucHV0
LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIGJ1dHRvbl0pJywgJyJPSyInKTsKKwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVs
ZW1lbnRzLmpzCShyZXZpc2lvbiA3MzQxMikKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2Ny
aXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQCBjb250YWluZXIuaW5uZXJIVE1MID0gJzxmb3JtIGlkPSJmb3JtMSI+CiAg
ICAgJzxrZXlnZW4gaWQ9a2V5Z2VuMT48L2tleWdlbj4nICsKICAgICAnPGxhYmVsIGlkPWxhYmVs
MT48L2xhYmVsPicgKwogICAgICc8bWV0ZXIgaWQ9bWV0ZXIxPjwvbWV0ZXI+JyArCisgICAgJzxv
YmplY3QgaWQ9b2JqZWN0MT48L29iamVjdD4nICsKICAgICAnPG91dHB1dCBpZD1vdXRwdXQxPjwv
b3V0cHV0PicgKwogICAgICc8cHJvZ3Jlc3MgaWQ9cHJvZ3Jlc3MxPjwvcHJvZ3Jlc3M+JyArCiAg
ICAgJzxzZWxlY3QgaWQ9c2VsZWN0MT4nICsKQEAgLTM4LDcgKzM5LDcgQEAgY29udGFpbmVyLmlu
bmVySFRNTCA9ICc8Zm9ybSBpZD0iZm9ybTEiPgogCiB2YXIgb3duZXIgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZm9ybTEnKTsKIAotc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzLmxlbmd0aCcs
ICcyMicpOworc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzLmxlbmd0aCcsICcyMycpOwogc2hvdWxk
QmUoJ293bmVyLmVsZW1lbnRzWzBdLmlkJywgIididXR0b24xJyIpOwogc2hvdWxkQmUoJ293bmVy
LmVsZW1lbnRzWzFdLmlkJywgIidmaWVsZHNldDEnIik7CiBzaG91bGRCZSgnb3duZXIuZWxlbWVu
dHNbMl0uaWQnLCAiJ2lucHV0aGlkZGVuJyIpOwpAQCAtNTgsOSArNTksMTAgQEAgc2hvdWxkQmUo
J293bmVyLmVsZW1lbnRzWzE1XS5pZCcsICInaW5wdQogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRz
WzE2XS5pZCcsICInaW5wdXRyZXNldCciKTsKIHNob3VsZEJlKCdvd25lci5lbGVtZW50c1sxN10u
aWQnLCAiJ2lucHV0YnV0dG9uJyIpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzE4XS5pZCcs
ICIna2V5Z2VuMSciKTsKLXNob3VsZEJlKCdvd25lci5lbGVtZW50c1sxOV0uaWQnLCAiJ291dHB1
dDEnIik7Ci1zaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMjBdLmlkJywgIidzZWxlY3QxJyIpOwot
c2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzIxXS5pZCcsICIndGV4dGFyZWExJyIpOworc2hvdWxk
QmUoJ293bmVyLmVsZW1lbnRzWzE5XS5pZCcsICInb2JqZWN0MSciKTsKK3Nob3VsZEJlKCdvd25l
ci5lbGVtZW50c1syMF0uaWQnLCAiJ291dHB1dDEnIik7CitzaG91bGRCZSgnb3duZXIuZWxlbWVu
dHNbMjFdLmlkJywgIidzZWxlY3QxJyIpOworc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzIyXS5p
ZCcsICIndGV4dGFyZWExJyIpOwogCiAKIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="66587"
          type_id="1"
          status="+"
          setter="tkent"
    />
    <flag name="commit-queue"
          id="66589"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75772</attachid>
            <date>2010-12-06 19:25:27 -0800</date>
            <delta_ts>2010-12-07 01:41:47 -0800</delta_ts>
            <desc>Patch V7</desc>
            <filename>formassocV7.patch</filename>
            <type>text/plain</type>
            <size>158357</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI5IEBACisyMDEwLTEyLTA2ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTGV0IEhUTUxPYmplY3RFbGVtZW50IGJlIGEgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4ODIxCisKKyAg
ICAgICAgSW50cm9kdWNlcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgY2xhc3Mgd2hpY2ggd291bGQg
YmUgYSBzdXBlciBjbGFzcworICAgICAgICBvZiBmb3JtIGFzc29jYXRlZCBlbGVtZW50cy4gU29t
ZSBvZiBtZW1iZXIgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgb2YKKyAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCBhcmUgbWlncmF0ZWQgaW50byB0aGlzIGNsYXNzLgorICAgICAgICBGb2xs
b3dpbmcgdGhlIEhUTUw1IHNwZWMsIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgY2xhc3MgYW5kCisg
ICAgICAgIEhUTUxPYmplY3RFbGVtZW50IGNsYXNzIGFyZSBzdWJjbGFzc2VzIG9mIGl0IGZvciBu
b3cuCisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMt
b3JkZXIuaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazogQWRkZWQgRm9ybUFzc29jaWF0ZWRF
bGVtZW50LmNwcAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogQWRkZWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkZWQgdGhlIHN5bWJvbCBmb3IgdG9IVE1MRWxlbWVudChG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqKQorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgRm9y
bUFzc29jaWF0ZWRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8u
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICog
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaDogRml4ZWQgY2xhc3MgZm9yd2FyZCBkZWNsYXJhdGlv
biBvcmRlci4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSk6IE1vZGlmaWVk
IHRvCisgICAgICAgIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpyZXNldEZvcm1FbGVtZW50c093bmVyKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
aDogRGl0dG8uCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OkRPTUZvcm1EYXRhKToKKyAgICAgICAgKiBodG1sL0Zv
cm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA6IENvcGllZCBhbmQgcmVuYW1lZCBmcm9tIFdlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6fkZvcm1Bc3NvY2lhdGVkRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlkaXR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJlbW92ZUZyb21Gb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVzZXRGb3JtT3duZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50Ojpmb3JtQXR0cmlidXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0hUTUxFbGVtZW50KToKKyAgICAgICAgKiBo
dG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lh
dGVkRWxlbWVudDo6ZGVyZWYpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVt
ZW50Ojpmb3JtRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1Bc3NvY2lhdGVkRWxl
bWVudDo6c2V0Rm9ybSk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOiBDaGFuZ2VkIHRo
ZSBhY2Nlc3MgbGV2ZWwgb2YgZmluZEZvcm1BbmNlc3RvcigpLgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1Db2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29sbGVjdGlv
bjo6aXRlbSk6IE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1lbnQKKyAgICAgICAg
aW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db2xsZWN0aW9uOjpnZXROYW1lZEZvcm1JdGVtKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6IERpdHRvLgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6IE1vZGlmaWVkIHJlZ2FyZGluZyB3
aXRoIHRoZSBjaGFuZ2Ugb2YgY2xhc3MKKyAgICAgICAgaGllcmFyY2h5LgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9s
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNl
cnRlZEludG9UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OnJlbW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6dmlydHVhbEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojpmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6
cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OmRlcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKiBodG1s
L0hUTUxGb3JtRWxlbWVudC5jcHA6IE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQKKyAgICAgICAgaW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6c3VibWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
Ojpmb3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50Ojpjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGb3JtRWxlbWVudDo6ZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUpOgorICAgICAgICAqIGh0
bWwvSFRNTEZvcm1FbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50Ojphc3NvY2lhdGVkRWxlbWVudHMpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxl
bWVudC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dXBk
YXRlQ2hlY2tlZFJhZGlvQnV0dG9ucyk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHA6IE1vZGlmaWVkIHJlZ2FyZGluZyB3aXRoIHRoZSBjaGFuZ2Ugb2YgY2xhc3MKKyAgICAg
ICAgaGllcmFyY2h5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxP
YmplY3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojp+SFRN
TE9iamVjdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6YXR0cmlidXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6aW5zZXJ0ZWRJbnRv
VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6cmVtb3ZlZEZyb21U
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1l
KToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50Lmg6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9iamVjdEVsZW1lbnQ6OmlzRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50Ojppc0VudW1lcmF0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MT2JqZWN0RWxlbWVudDo6cmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCk6Cisg
ICAgICAgICogaHRtbC9IVE1MVGFnTmFtZXMuaW46IEFkZGVkIGNvbnN0cnVjdG9yTmVlZHNGb3Jt
RWxlbWVudCB0byBvYmplY3QgdGFnLgorICAgICAgICAqIGh0bWwvVmFsaWRhdGlvbk1lc3NhZ2Uu
Y3BwOiBNb2RpZmllZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50CisgICAgICAgIGluc3Rl
YWQgb2YgSFRNTEZvcm1Db250cm9sRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkYXRp
b25NZXNzYWdlOjpWYWxpZGF0aW9uTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0
aW9uTWVzc2FnZTo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL1ZhbGlkYXRpb25NZXNzYWdlLmg6
IERpdHRvLgorICAgICAgICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6dmFsaWRhdGlvbk1lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6c2V0Q3VzdG9tRXJyb3JNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU6OnZhbHVlTWlzc2luZyk6CisgICAgICAgIChXZWJDb3Jl
OjpWYWxpZGl0eVN0YXRlOjp0eXBlTWlzbWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRp
dHlTdGF0ZTo6cGF0dGVybk1pc21hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlkaXR5U3Rh
dGU6OnRvb0xvbmcpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6cmFuZ2VVbmRl
cmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZTo6cmFuZ2VPdmVyZmxvdyk6
CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpzdGVwTWlzbWF0Y2gpOgorICAgICAg
ICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlZhbGlk
aXR5U3RhdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGl0eVN0YXRlOjpWYWxp
ZGl0eVN0YXRlKToKKyAgICAgICAgKiBsb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpjcmVhdGUpOgorCiAyMDEwLTEyLTA2
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEJldGggRGFraW4uCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA3MzQyMikKKysrIFdlYkNvcmUvQW5kcm9p
ZC5tawkod29ya2luZyBjb3B5KQpAQCAtMjc3LDYgKzI3Nyw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6
PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCWh0bWwvRGF0ZVRpbWVMb2NhbElucHV0VHlwZS5jcHAg
XAogCWh0bWwvRW1haWxJbnB1dFR5cGUuY3BwIFwKIAlodG1sL0ZpbGVJbnB1dFR5cGUuY3BwIFwK
KwlodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgXAogCWh0bWwvRm9ybURhdGFMaXN0LmNw
cCBcCiAJaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXAogCWh0bWwvSFRNTENvbGxlY3Rpb24u
Y3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzM0MjIpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OTEsNiArOTkxLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNF
UwogICAgIGh0bWwvRW1haWxJbnB1dFR5cGUuY3BwCiAgICAgaHRtbC9GVFBEaXJlY3RvcnlEb2N1
bWVudC5jcHAKICAgICBodG1sL0ZpbGVJbnB1dFR5cGUuY3BwCisgICAgaHRtbC9Gb3JtQXNzb2Np
YXRlZEVsZW1lbnQuY3BwCiAgICAgaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCiAgICAgaHRtbC9IVE1M
QWxsQ29sbGVjdGlvbi5jcHAKICAgICBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcApJbmRleDog
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA3MzQyMikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE1ODUsNiArMTU4NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9odG1sL0VtYWlsSW5wdXRUeXBlLmggXAogCVdlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNw
cCBcCiAJV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaCBcCisJV2ViQ29yZS9odG1sL0Zvcm1B
c3NvY2lhdGVkRWxlbWVudC5jcHAgXAorCVdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1l
bnQuaCBcCiAJV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogCVdlYkNvcmUvaHRtbC9G
b3JtRGF0YUxpc3QuaCBcCiAJV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcCBc
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDczNDIyKQorKysgV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgko
d29ya2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw3IEBAIF9fWk43V2ViQ29yZTEzS2V5Ym9hcmRF
dmVudEMxRVJLTjNXVEYxMkEKIF9fWk43V2ViQ29yZTEzVHlwaW5nQ29tbWFuZDM5aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50RVBOU184RG9jdW1lbnRFCiBfX1pON1dlYkNv
cmUxM2NyZWF0ZVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVj
dEVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUxM3RvRGV2aWNlU3BhY2VFUktOU185RmxvYXRSZWN0
RVA4TlNXaW5kb3cKK19fWk43V2ViQ29yZTEzdG9IVE1MRWxlbWVudEVQTlNfMjFGb3JtQXNzb2Np
YXRlZEVsZW1lbnRFCiBfX1pON1dlYkNvcmUxM3RvSlNET01XaW5kb3dFTjNKU0M3SlNWYWx1ZUUK
IF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2UxMnJlbW92ZUNsaWVudEVQTlNfMjBDYWNoZWRS
ZXNvdXJjZUNsaWVudEUKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2U5YWRkQ2xpZW50RVBO
U18yMENhY2hlZFJlc291cmNlQ2xpZW50RQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDczNDIyKQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE2NDIsNiArMTY0Miw4IEBACiAg
ICAgICAgICAgICAnaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5oJywKICAgICAgICAgICAgICdo
dG1sL0ZpbGVJbnB1dFR5cGUuY3BwJywKICAgICAgICAgICAgICdodG1sL0ZpbGVJbnB1dFR5cGUu
aCcsCisgICAgICAgICAgICAnaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwJywKKyAgICAg
ICAgICAgICdodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oJywKICAgICAgICAgICAgICdodG1s
L0Zvcm1EYXRhTGlzdC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvRm9ybURhdGFMaXN0LmgnLAog
ICAgICAgICAgICAgJ2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwJywKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24g
NzM0MjIpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC04ODIsNiAr
ODgyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9FbWFpbElucHV0VHlwZS5jcHAgXAogICAg
IGh0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIFwKICAgICBodG1sL0ZpbGVJbnB1dFR5cGUu
Y3BwIFwKKyAgICBodG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgXAogICAgIGh0bWwvRm9y
bURhdGFMaXN0LmNwcCBcCiAgICAgaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAgXAogICAgIGh0
bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwIFwKQEAgLTE3OTUsNiArMTc5Niw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIGh0bWwvRE9NRm9ybURhdGEuaCBcCiAgICAgaHRtbC9ET01TZXR0YWJsZVRva2Vu
TGlzdC5oIFwKICAgICBodG1sL0RPTVRva2VuTGlzdC5oIFwKKyAgICBodG1sL0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudC5oIFwKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5oIFwKICAgICBodG1sL0ZUUERp
cmVjdG9yeURvY3VtZW50LmggXAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uaCBcCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDczNDIyKQorKysg
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
NTAzNjYsNiArNTAzNjYsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5caHRtbFxGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEZvcm1Bc3NvY2lh
dGVkRWxlbWVudC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxodG1sXEZvcm1EYXRhTGlzdC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczNDIy
KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTExNjQsNiArMTE2NCw4IEBACiAJCTQ5RkZCRjFEMTFDODU1MEUwMDZBNzExOCAv
KiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRl
eHQzRE1hYy5tbSAqLzsgfTsKIAkJNDlGRkJGM0YxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RkZC
RjNEMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggKi87IH07CiAJCTQ5RkZCRjQwMTFD
OTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5
ZXIubW0gKi87IH07CisJCTRBMERBMkZFMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEEwREEyRkMxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAg
Ki87IH07CisJCTRBMERBMkZGMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBMERB
MkZEMTI5QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0QThDOTZFQjBCRTY5MDMy
MDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBOEM5NkVBMEJFNjkwMzIwMDRFRUZGMCAvKiBT
ZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tICovOyB9OwogCQk0QUNCQzBCRTEyNzEzQ0JEMDA5NEY5
QjIgLyogQ2xhc3NMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRBQ0JDMEJDMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFzc0xpc3QuY3BwICovOyB9
OwogCQk0QUNCQzBCRjEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUNCQzBCRDEyNzEzQ0JEMDA5NEY5
QjIgLyogQ2xhc3NMaXN0LmggKi87IH07CkBAIC03MzE5LDYgKzczMjEsOCBAQAogCQk0OUZGQkYx
QzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRE1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGRkJGM0QxMUM5M0VFMzAwNkE3MTE4IC8qIFdl
YkdMTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xMYXllci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTgg
LyogV2ViR0xMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYkdMTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRBMERBMkZDMTI5
QjI0MTkwMEFCNjFFMSAvKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEEwREEyRkQxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1B
c3NvY2lhdGVkRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEE4Qzk2
RUEwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gU2VsZWN0aW9uQ29udHJvbGxlck1hYy5t
bTsgcGF0aCA9IG1hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0QUNCQzBCQzEyNzEzQ0JEMDA5NEY5QjIgLyogQ2xhc3NMaXN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsYXNzTGlzdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBQ0JDMEJEMTI3MTNDQkQwMDk0RjlCMiAvKiBDbGFz
c0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xhc3NMaXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDg0Myw2ICsxNDg0Nyw4IEBACiAJCQkJRjU1
QjNEODgxMjUxRjEyRDAwM0VGMjY5IC8qIEVtYWlsSW5wdXRUeXBlLmggKi8sCiAJCQkJRjU1QjNE
ODkxMjUxRjEyRDAwM0VGMjY5IC8qIEZpbGVJbnB1dFR5cGUuY3BwICovLAogCQkJCUY1NUIzRDhB
MTI1MUYxMkQwMDNFRjI2OSAvKiBGaWxlSW5wdXRUeXBlLmggKi8sCisJCQkJNEEwREEyRkMxMjlC
MjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAgKi8sCisJCQkJNEEwREEy
RkQxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oICovLAogCQkJCUE4
MTM2RDM3MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3BwICovLAogCQkJCUE4MTM2
RDM2MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuaCAqLywKIAkJCQk5NzIwNUFBRDEy
MzkyOENBMDBCMTczODAgLyogRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwICovLApAQCAtMTk3OTYs
NiArMTk4MDIsNyBAQAogCQkJCTM3ODRDMzRCMEUxMUFBMzQwMDdEOEQ0OCAvKiBGb250VHJhaXRz
TWFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjczNEIxODMxMTlCOTkxRDAwNjU4N0JEIC8qIEZv
bnRUcmFuc2NvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNFRDBBMTk4OUNBMDA3RkI4
QzUgLyogRm9udFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0QTBEQTJGRjEyOUIyNDE5MDBB
QjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEMDVD
RUQyQTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTRDNzY3MDBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA4NUI5MkJCMEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCBp
biBIZWFkZXJzICovLApAQCAtMjI0NjEsNiArMjI0NjgsNyBAQAogCQkJCUI1MzIwRDZDMTIyQTI0
RTkwMDJEMTQ0MCAvKiBGb250UGxhdGZvcm1EYXRhQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlCNzM0QjE4MTExOUI5OTExMDA2NTg3QkQgLyogRm9udFRyYW5zY29kZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgwRTZDRjEwQTE5ODlDQTAwN0ZCOEM1IC8qIEZvbnRWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk0QTBEQTJGRTEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0
ZWRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYz
OCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2NkYw
Q0U5MjNBMTAwN0VGM0NEIC8qIEZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4NUI5
MkJBMEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBXZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5oCShyZXZpc2lvbiA3MzQyMikKKysrIFdl
YkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCAr
MjcsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7
CiBjbGFzcyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OworY2xhc3MgSFRNTElucHV0RWxlbWVudDsK
IAogY2xhc3MgQ2hlY2tlZFJhZGlvQnV0dG9ucyB7CiBwdWJsaWM6CkluZGV4OiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiA3MzQyMikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC00Mzg4LDIz
ICs0Mzg5LDIzIEBAIHZvaWQgRG9jdW1lbnQ6OnNldEljb25VUkwoY29uc3QgU3RyaW5nJiAKICAg
ICAgICAgZi0+bG9hZGVyKCktPnNldEljb25VUkwobV9pY29uVVJMKTsKIH0KIAotdm9pZCBEb2N1
bWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEVsZW1lbnQqIGNvbnRy
b2wpCit2b2lkIERvY3VtZW50OjpyZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUo
Rm9ybUFzc29jaWF0ZWRFbGVtZW50KiBlbGVtZW50KQogewotICAgIEFTU0VSVChjb250cm9sLT5m
YXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSk7Ci0gICAgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0
dHJpYnV0ZS5hZGQoY29udHJvbCk7CisgICAgQVNTRVJUKHRvSFRNTEVsZW1lbnQoZWxlbWVudCkt
PmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKKyAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3Jt
QXR0cmlidXRlLmFkZChlbGVtZW50KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6dW5yZWdpc3RlckZv
cm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCogY29udHJvbCkKK3ZvaWQgRG9jdW1l
bnQ6OnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRl
LnJlbW92ZShjb250cm9sKTsKKyAgICBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLnJl
bW92ZShlbGVtZW50KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6cmVzZXRGb3JtRWxlbWVudHNPd25l
cihIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiB7Ci0gICAgdHlwZWRlZiBGb3JtRWxlbWVudExpc3RI
YXNoU2V0OjppdGVyYXRvciBJdGVyYXRvcjsKKyAgICB0eXBlZGVmIEZvcm1Bc3NvY2lhdGVkRWxl
bWVudExpc3RIYXNoU2V0OjppdGVyYXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQgPSBt
X2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLmVuZCgpOwogICAgIGZvciAoSXRlcmF0b3Ig
aXQgPSBtX2Zvcm1FbGVtZW50c1dpdGhGb3JtQXR0cmlidXRlLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KCppdCkt
PnJlc2V0Rm9ybU93bmVyKGZvcm0pOworICAgICAgICAoKml0KS0+cmVzZXRGb3JtT3duZXIoZm9y
bSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0
aXZlKGJvb2wgdXNlc1NlY3VyZUtleWJvYXJkKQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA3MzQyMikK
KysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcg
QEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEVudGl0eVJlZmVyZW5jZTsKIGNsYXNzIEV2ZW50Owog
Y2xhc3MgRXZlbnRMaXN0ZW5lcjsKK2NsYXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKIGNsYXNz
IEZyYW1lOwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CkBAIC00
OTEsOCArNDkyLDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzU3RhdGVGb3JOZXdGb3JtRWxlbWVu
dHMoKSBjb25zdDsKICAgICBib29sIHRha2VTdGF0ZUZvckZvcm1FbGVtZW50KEF0b21pY1N0cmlu
Z0ltcGwqIG5hbWUsIEF0b21pY1N0cmluZ0ltcGwqIHR5cGUsIFN0cmluZyYgc3RhdGUpOwogCi0g
ICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCopOwot
ICAgIHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCop
OworICAgIHZvaWQgcmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRlKEZvcm1Bc3Nv
Y2lhdGVkRWxlbWVudCopOworICAgIHZvaWQgdW5yZWdpc3RlckZvcm1FbGVtZW50V2l0aEZvcm1B
dHRyaWJ1dGUoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CiAgICAgdm9pZCByZXNldEZvcm1FbGVt
ZW50c093bmVyKEhUTUxGb3JtRWxlbWVudCopOwogCiAgICAgRnJhbWVWaWV3KiB2aWV3KCkgY29u
c3Q7IC8vIGNhbiBiZSBOVUxMCkBAIC0xMjE2LDcgKzEyMTcsOCBAQCBwcml2YXRlOgogCiAgICAg
dHlwZWRlZiBMaXN0SGFzaFNldDxFbGVtZW50KiwgNjQ+IEZvcm1FbGVtZW50TGlzdEhhc2hTZXQ7
CiAgICAgRm9ybUVsZW1lbnRMaXN0SGFzaFNldCBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZTsKLSAg
ICBGb3JtRWxlbWVudExpc3RIYXNoU2V0IG1fZm9ybUVsZW1lbnRzV2l0aEZvcm1BdHRyaWJ1dGU7
CisgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxGb3JtQXNzb2NpYXRlZEVsZW1lbnQqLCAzMj4gRm9y
bUFzc29jaWF0ZWRFbGVtZW50TGlzdEhhc2hTZXQ7CisgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50
TGlzdEhhc2hTZXQgbV9mb3JtRWxlbWVudHNXaXRoRm9ybUF0dHJpYnV0ZTsKIAogICAgIHR5cGVk
ZWYgSGFzaE1hcDxGb3JtRWxlbWVudEtleSwgVmVjdG9yPFN0cmluZz4sIEZvcm1FbGVtZW50S2V5
SGFzaCwgRm9ybUVsZW1lbnRLZXlIYXNoVHJhaXRzPiBGb3JtRWxlbWVudFN0YXRlTWFwOwogICAg
IEZvcm1FbGVtZW50U3RhdGVNYXAgbV9zdGF0ZUZvck5ld0Zvcm1FbGVtZW50czsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0RP
TUZvcm1EYXRhLmNwcAkocmV2aXNpb24gNzM0MjIpCisrKyBXZWJDb3JlL2h0bWwvRE9NRm9ybURh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw5IEBAIERPTUZvcm1EYXRhOjpET01G
b3JtRGF0YShIVE1MRm9ybUVsZW1lbnQKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtLT5hc3NvY2lh
dGVkRWxlbWVudHMoKVtpXTsKLSAgICAgICAgaWYgKCFjb250cm9sLT5kaXNhYmxlZCgpKQotICAg
ICAgICAgICAgY29udHJvbC0+YXBwZW5kRm9ybURhdGEoKnRoaXMsIHRydWUpOworICAgICAgICBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQgPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMo
KVtpXTsKKyAgICAgICAgaWYgKCF0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5kaXNhYmxlZCgpKQor
ICAgICAgICAgICAgZWxlbWVudC0+YXBwZW5kRm9ybURhdGEoKnRoaXMsIHRydWUpOwogICAgIH0K
IH0KIApJbmRleDogV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAJKHJldmlzaW9u
IDczMDA3KQkoZnJvbSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6NzMw
MDcpCisrKyBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNiBB
bGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQXR0cmli
dXRlLmgiCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkRvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiRWxlbWVudFJhcmVEYXRhLmgiCisjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiTGFiZWxzTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJWYWxpZGF0aW9uTWVzc2FnZS5oIgorI2luY2x1ZGUgIlZhbGlkaXR5U3RhdGUuaCIKKyNp
bmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2Ugc3Rk
OworCitIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVt
ZW50KiBmb3JtKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBt
X2Zvcm0oZm9ybSkKKyAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCisgICAgLCBtX3JlYWRPbmx5KGZh
bHNlKQorICAgICwgbV9yZXF1aXJlZChmYWxzZSkKKyAgICAsIG1fdmFsdWVNYXRjaGVzUmVuZGVy
ZXIoZmFsc2UpCisgICAgLCBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwg
bV93aWxsVmFsaWRhdGUodHJ1ZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQoreworICAgIGlmICgh
bV9mb3JtKQorICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7CisgICAgaWYgKG1f
Zm9ybSkKKyAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOworfQorCitI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVudCgpCit7CisgICAg
aWYgKG1fZm9ybSkKKyAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKK30K
Kwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKQoreworICAgIGhpZGVWaXNp
YmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAgICBIVE1MRWxlbWVudDo6ZGV0YWNoKCk7Cit9CisK
K2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybU5vVmFsaWRhdGUoKSBjb25zdAorewor
ICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKGZvcm1ub3ZhbGlkYXRlQXR0cikuaXNOdWxsKCk7Cit9
CisKK1ZhbGlkaXR5U3RhdGUqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkaXR5KCkKK3sK
KyAgICBpZiAoIW1fdmFsaWRpdHlTdGF0ZSkKKyAgICAgICAgbV92YWxpZGl0eVN0YXRlID0gVmFs
aWRpdHlTdGF0ZTo6Y3JlYXRlKHRoaXMpOworCisgICAgcmV0dXJuIG1fdmFsaWRpdHlTdGF0ZS5n
ZXQoKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXNhYmxl
ZEF0dHIpIHsKKyAgICAgICAgYm9vbCBvbGREaXNhYmxlZCA9IG1fZGlzYWJsZWQ7CisgICAgICAg
IG1fZGlzYWJsZWQgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAgICAgIGlmIChvbGREaXNhYmxlZCAh
PSBtX2Rpc2FibGVkKSB7CisgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAg
ICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJh
bmNlKCkpCisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2Vk
KHJlbmRlcmVyKCksIEVuYWJsZWRTdGF0ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSByZWFkb25seUF0dHIpIHsKKyAgICAgICAgYm9vbCBvbGRSZWFkT25seSA9
IG1fcmVhZE9ubHk7CisgICAgICAgIG1fcmVhZE9ubHkgPSAhYXR0ci0+aXNOdWxsKCk7CisgICAg
ICAgIGlmIChvbGRSZWFkT25seSAhPSBtX3JlYWRPbmx5KSB7CisgICAgICAgICAgICBzZXROZWVk
c1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigp
LT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+
dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIFJlYWRPbmx5U3RhdGUpOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVxdWlyZWRBdHRyKSB7CisgICAg
ICAgIGJvb2wgb2xkUmVxdWlyZWQgPSBtX3JlcXVpcmVkOworICAgICAgICBtX3JlcXVpcmVkID0g
IWF0dHItPmlzTnVsbCgpOworICAgICAgICBpZiAob2xkUmVxdWlyZWQgIT0gbV9yZXF1aXJlZCkg
eworICAgICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CisgICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7IC8vIFVwZGF0ZXMgZm9yIDpyZXF1aXJlZCA6b3B0aW9uYWwgY2xh
c3Nlcy4KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpOwor
fQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCgpCit7CisgICAgQVNTRVJU
KCFhdHRhY2hlZCgpKTsKKworICAgIEhUTUxFbGVtZW50OjphdHRhY2goKTsKKworICAgIC8vIFRo
ZSBjYWxsIHRvIHVwZGF0ZUZyb21FbGVtZW50KCkgbmVlZHMgdG8gZ28gYWZ0ZXIgdGhlIGNhbGwg
dGhyb3VnaAorICAgIC8vIHRvIHRoZSBiYXNlIGNsYXNzJ3MgYXR0YWNoKCkgYmVjYXVzZSB0aGF0
IGNhbiBzb21ldGltZXMgZG8gYSBjbG9zZQorICAgIC8vIG9uIHRoZSByZW5kZXJlci4KKyAgICBp
ZiAocmVuZGVyZXIoKSkKKyAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsK
KyAgICAgICAgCisgICAgLy8gRm9jdXMgdGhlIGVsZW1lbnQgaWYgaXQgc2hvdWxkIGhvbm91ciBp
dHMgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4KKyAgICAvLyBXZSBoYXZlIHRvIGRldGVybWluZSBpZiB0
aGUgZWxlbWVudCBpcyBhIFRleHRBcmVhL0lucHV0L0J1dHRvbi9TZWxlY3QsCisgICAgLy8gaWYg
aW5wdXQgdHlwZSBoaWRkZW4gaWdub3JlIGF1dG9mb2N1cy4gU28gaWYgZGlzYWJsZWQgb3IgcmVh
ZG9ubHkuCisgICAgYm9vbCBpc0lucHV0VHlwZUhpZGRlbiA9IGZhbHNlOworICAgIGlmIChoYXNU
YWdOYW1lKGlucHV0VGFnKSkKKyAgICAgICAgaXNJbnB1dFR5cGVIaWRkZW4gPSBzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Kj4odGhpcyktPmlzSW5wdXRUeXBlSGlkZGVuKCk7CisKKyAgICBp
ZiAoYXV0b2ZvY3VzKCkgJiYgcmVuZGVyZXIoKSAmJiAhZG9jdW1lbnQoKS0+aWdub3JlQXV0b2Zv
Y3VzKCkgJiYgIWlzUmVhZE9ubHlGb3JtQ29udHJvbCgpICYmCisgICAgICAgICAgICAoKGhhc1Rh
Z05hbWUoaW5wdXRUYWcpICYmICFpc0lucHV0VHlwZUhpZGRlbikgfHwgaGFzVGFnTmFtZShzZWxl
Y3RUYWcpIHx8CisgICAgICAgICAgICAgIGhhc1RhZ05hbWUoYnV0dG9uVGFnKSB8fCBoYXNUYWdO
YW1lKHRleHRhcmVhVGFnKSkpCisgICAgICAgICBmb2N1cygpOworfQorCit2b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIGlmIChm
YXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAgICAgICBkb2N1bWVudCgpLT5yZWdpc3Rl
ckZvcm1FbGVtZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CisgICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChmYXN0R2V0QXR0cmlidXRlKGZvcm1B
dHRyKSk7CisgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRh
ZykpIHsKKyAgICAgICAgICAgIGlmIChtX2Zvcm0pCisgICAgICAgICAgICAgICAgbV9mb3JtLT5y
ZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3Rl
ckZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICB9CisgICAgfQorICAgIGlmICghbV9mb3JtKSB7
CisgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiBhIG5ldyBmb3JtIGVsZW1lbnQg
YmVpbmcgY3JlYXRlZCBieQorICAgICAgICAvLyBKYXZhU2NyaXB0IGFuZCBpbnNlcnRlZCBpbnNp
ZGUgYSBmb3JtLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIHBhcnNlcgorICAgICAgICAvLyBzZXR0aW5n
IGEgZm9ybSwgd2Ugd2lsbCBhbHJlYWR5IGhhdmUgYSBub24tbnVsbCB2YWx1ZSBmb3IgbV9mb3Jt
LCAKKyAgICAgICAgLy8gYW5kIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAg
ICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICAgICAgaWYgKG1fZm9ybSkKKyAg
ICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRv
bih0aGlzKTsKKyAgICB9CisKKyAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVw
KTsKK30KKworc3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9vdChOb2RlKiBuKQoreworICAgIE5v
ZGUqIHJvb3QgPSBuOworICAgIGZvciAoOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKQorICAgICAg
ICByb290ID0gbjsKKyAgICByZXR1cm4gcm9vdDsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKQoreworICAgIGlmIChmYXN0SGFzQXR0
cmlidXRlKGZvcm1BdHRyKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvcm1FbGVt
ZW50V2l0aEZvcm1BdHRyaWJ1dGUodGhpcyk7CisKKyAgICAvLyBJZiB0aGUgZm9ybSBhbmQgZWxl
bWVudCBhcmUgYm90aCBpbiB0aGUgc2FtZSB0cmVlLCBwcmVzZXJ2ZSB0aGUgY29ubmVjdGlvbiB0
byB0aGUgZm9ybS4KKyAgICAvLyBPdGhlcndpc2UsIG51bGwgb3V0IG91ciBmb3JtIGFuZCByZW1v
dmUgb3Vyc2VsdmVzIGZyb20gdGhlIGZvcm0ncyBsaXN0IG9mIGVsZW1lbnRzLgorICAgIGlmICht
X2Zvcm0gJiYgZmluZFJvb3QodGhpcykgIT0gZmluZFJvb3QobV9mb3JtKSkgeworICAgICAgICBt
X2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworICAgICAgICBtX2Zvcm0gPSAwOworICAg
IH0KKworICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoZGVlcCk7Cit9CisKK2NvbnN0
IEF0b21pY1N0cmluZyYgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkg
Y29uc3QKK3sKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBmYXN0R2V0QXR0cmlidXRl
KG5hbWVBdHRyKTsKKyAgICByZXR1cm4gbmFtZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IG5hbWU7
Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmFtZShjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlKQoreworICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOworfQor
Cit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VF
dmVudCgpCit7CisgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5j
aGFuZ2VFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpzZXREaXNhYmxlZChib29sIGIpCit7CisgICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0
ciwgYiA/ICIiIDogMCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXV0b2Zv
Y3VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzQXR0cmlidXRlKGF1dG9mb2N1c0F0dHIpOwor
fQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yZXF1aXJlZDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnRD
YWxsYmFjayhOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9BUkcobm9kZSwgbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKTsKKyAgICBBU1NFUlRfQVJHKG5vZGUsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
b2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSk7CisgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVy
KCkpOworICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKSkK
KyAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUZyb21FbGVtZW50KCk7Cit9CisKK3ZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQoreworICAg
IEhUTUxFbGVtZW50OjpyZWNhbGNTdHlsZShjaGFuZ2UpOworCisgICAgLy8gdXBkYXRlRnJvbUVs
ZW1lbnQoKSBjYW4gY2F1c2UgdGhlIHNlbGVjdGlvbiB0byBjaGFuZ2UsIGFuZCBpbiB0dXJuCisg
ICAgLy8gdHJpZ2dlciBzeW5jaHJvbm91cyBsYXlvdXQsIHNvIGl0IG11c3Qgbm90IGJlIGNhbGxl
ZCBkdXJpbmcgc3R5bGUgcmVjYWxjLgorICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICBxdWV1
ZVBvc3RBdHRhY2hDYWxsYmFjayh1cGRhdGVGcm9tRWxlbWVudENhbGxiYWNrLCB0aGlzKTsKK30K
KworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIWRpc2FibGVkKCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6aXNGb2N1c2FibGUoKSBjb25zdAoreworICAgIGlmICghcmVuZGVyZXIoKSB8fCAKKyAgICAg
ICAgIXJlbmRlcmVyKCktPmlzQm94KCkgfHwgdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPnNpemUo
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBIVE1MRWxlbWVudDo6
aXNGb2N1c2FibGUgaGFuZGxlcyB2aXNpYmlsaXR5IGFuZCBjYWxscyBzdXBvcnRzRm9jdXMgd2hp
Y2gKKyAgICAvLyB3aWxsIGNvdmVyIHRoZSBkaXNhYmxlZCBjYXNlLgorICAgIHJldHVybiBIVE1M
RWxlbWVudDo6aXNGb2N1c2FibGUoKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAg
IGlmIChpc0ZvY3VzYWJsZSgpKQorICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+dGFi
c1RvQWxsQ29udHJvbHMoZXZlbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QKK3sKKyNpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQorICAgIHJldHVybiBIVE1MRWxlbWVudDo6aXNNb3Vz
ZUZvY3VzYWJsZSgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworc2hv
cnQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdAoreworICAgIC8vIFNr
aXAgdGhlIHN1cHBvcnRzRm9jdXMgY2hlY2sgaW4gSFRNTEVsZW1lbnQuCisgICAgcmV0dXJuIEVs
ZW1lbnQ6OnRhYkluZGV4KCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVj
YWxjV2lsbFZhbGlkYXRlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogU2hvdWxkIHJldHVybiBm
YWxzZSBpZiB0aGlzIGVsZW1lbnQgaGFzIGEgZGF0YWxpc3QgZWxlbWVudCBhcyBhbgorICAgIC8v
IGFuY2VzdG9yLiBTZWUgSFRNTDUgNC4xMC4xMCAnVGhlIGRhdGFsaXN0IGVsZW1lbnQuJworICAg
IHJldHVybiAhbV9kaXNhYmxlZCAmJiAhbV9yZWFkT25seTsKK30KKworYm9vbCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Ojp3aWxsVmFsaWRhdGUoKSBjb25zdAoreworICAgIGlmICghbV93aWxsVmFs
aWRhdGVJbml0aWFsaXplZCkgeworICAgICAgICBtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkID0g
dHJ1ZTsKKyAgICAgICAgbV93aWxsVmFsaWRhdGUgPSByZWNhbGNXaWxsVmFsaWRhdGUoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIGFzc2VydGlvbiBmYWlscywg
c2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVjaygpIGlzIG5vdAorICAgICAgICAvLyBjYWxsZWQgY29y
cmVjdGx5IHdoZW4gc29tZXRoaW5nIHdoaWNoIGNoYW5nZXMgcmVjYWxjV2lsbFZhbGlkYXRlKCkg
cmVzdWx0CisgICAgICAgIC8vIGlzIHVwZGF0ZWQuCisgICAgICAgIEFTU0VSVChtX3dpbGxWYWxp
ZGF0ZSA9PSByZWNhbGNXaWxsVmFsaWRhdGUoKSk7CisgICAgfQorICAgIHJldHVybiBtX3dpbGxW
YWxpZGF0ZTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROZWVkc1dpbGxW
YWxpZGF0ZUNoZWNrKCkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHdpbGxWYWxp
ZHRlIGltbWVkaWF0ZWx5IGJlY2F1c2Ugd2lsbFZhbGlkYXRlCisgICAgLy8gY2hhbmdlIGNhbiBj
YXVzZXMgc3R5bGUgY2hhbmdlLgorICAgIGJvb2wgbmV3V2lsbFZhbGlkYXRlID0gcmVjYWxjV2ls
bFZhbGlkYXRlKCk7CisgICAgaWYgKG1fd2lsbFZhbGlkYXRlSW5pdGlhbGl6ZWQgJiYgbV93aWxs
VmFsaWRhdGUgPT0gbmV3V2lsbFZhbGlkYXRlKQorICAgICAgICByZXR1cm47CisgICAgbV93aWxs
VmFsaWRhdGVJbml0aWFsaXplZCA9IHRydWU7CisgICAgbV93aWxsVmFsaWRhdGUgPSBuZXdXaWxs
VmFsaWRhdGU7CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGlmICghbV93aWxsVmFs
aWRhdGUpCisgICAgICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKK30KKworU3Ry
aW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkKK3sKKyAgICBy
ZXR1cm4gdmFsaWRpdHkoKS0+dmFsaWRhdGlvbk1lc3NhZ2UoKTsKK30KKwordm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQoreworICAg
IFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAgaWYgKHJlbmRlcmVyKCkgJiYgd2ls
bFZhbGlkYXRlKCkpIHsKKyAgICAgICAgbWVzc2FnZSA9IHZhbGlkYXRpb25NZXNzYWdlKCkuc3Ry
aXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIC8vIEhUTUw1IHNwZWNpZmljYXRpb24gZG9lc24ndCBh
c2sgVUEgdG8gc2hvdyB0aGUgdGl0bGUgYXR0cmlidXRlIHZhbHVlCisgICAgICAgIC8vIHdpdGgg
dGhlIHZhbGlkYXRpb25NZXNzYWdlLiAgSG93ZXZlciwgdGhpcyBiZWhhdmlvciBpcyBzYW1lIGFz
IE9wZXJhCisgICAgICAgIC8vIGFuZCB0aGUgc3BlY2lmaWNhdGlvbiBkZXNjcmliZXMgc3VjaCBi
ZWhhdmlvciBhcyBhbiBleGFtcGxlLgorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxl
ID0gZ2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CisgICAgICAgIGlmICghbWVzc2FnZS5pc0VtcHR5
KCkgJiYgIXRpdGxlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ1xu
Jyk7CisgICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCh0aXRsZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKCFtX3ZhbGlkYXRpb25NZXNzYWdlKSB7CisgICAgICAgIG1fdmFsaWRhdGlvbk1l
c3NhZ2UgPSBWYWxpZGF0aW9uTWVzc2FnZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX3ZhbGlk
YXRpb25NZXNzYWdlLT5zZXRNZXNzYWdlKG1lc3NhZ2UpOworICAgIH0gZWxzZSBpZiAobWVzc2Fn
ZS5pc0VtcHR5KCkpCisgICAgICAgIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKKyAg
ICBlbHNlIGlmIChtX3ZhbGlkYXRpb25NZXNzYWdlLT5tZXNzYWdlKCkgIT0gbWVzc2FnZSkKKyAg
ICAgICAgbV92YWxpZGF0aW9uTWVzc2FnZS0+c2V0TWVzc2FnZShtZXNzYWdlKTsKK30KKwordm9p
ZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkK
K3sKKyAgICBtX3ZhbGlkYXRpb25NZXNzYWdlID0gMDsKK30KKworU3RyaW5nIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OnZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdmFsaWRhdGlvbk1lc3NhZ2UgPyBtX3ZhbGlkYXRpb25NZXNzYWdlLT5tZXNzYWdlKCkg
OiBTdHJpbmcoKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlk
aXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52
YWxpZENvbnRyb2xzKQoreworICAgIGlmICghd2lsbFZhbGlkYXRlKCkgfHwgaXNWYWxpZEZvcm1D
b250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBBbiBldmVudCBo
YW5kbGVyIGNhbiBkZXJlZiB0aGlzIG9iamVjdC4KKyAgICBSZWZQdHI8SFRNTEZvcm1Db250cm9s
RWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOworICAgIFJlZlB0cjxEb2N1bWVudD4gb3JpZ2luYWxE
b2N1bWVudChkb2N1bWVudCgpKTsKKyAgICBib29sIG5lZWRzRGVmYXVsdEFjdGlvbiA9IGRpc3Bh
dGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxzZSwg
dHJ1ZSkpOworICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52YWxpZENv
bnRyb2xzICYmIGluRG9jdW1lbnQoKSAmJiBvcmlnaW5hbERvY3VtZW50ID09IGRvY3VtZW50KCkp
CisgICAgICAgIHVuaGFuZGxlZEludmFsaWRDb250cm9scy0+YXBwZW5kKHRoaXMpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlkRm9y
bUNvbnRyb2xFbGVtZW50KCkKK3sKKyAgICAvLyBJZiB0aGUgZm9sbG93aW5nIGFzc2VydGlvbiBm
YWlscywgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCkgaXMgbm90IGNhbGxlZAorICAgIC8vIGNvcnJl
Y3RseSB3aGVuIHNvbWV0aGluZyB3aGljaCBjaGFuZ2VzIHZhbGlkaXR5IGlzIHVwZGF0ZWQuCisg
ICAgQVNTRVJUKG1faXNWYWxpZCA9PSB2YWxpZGl0eSgpLT52YWxpZCgpKTsKKyAgICByZXR1cm4g
bV9pc1ZhbGlkOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzVmFs
aWRpdHlDaGVjaygpCit7CisgICAgYm9vbCBuZXdJc1ZhbGlkID0gdmFsaWRpdHkoKS0+dmFsaWQo
KTsKKyAgICBpZiAod2lsbFZhbGlkYXRlKCkgJiYgbmV3SXNWYWxpZCAhPSBtX2lzVmFsaWQpIHsK
KyAgICAgICAgLy8gVXBkYXRlIHN0eWxlIGZvciBwc2V1ZG8gY2xhc3NlcyBzdWNoIGFzIDp2YWxp
ZCA6aW52YWxpZC4KKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIH0KKyAgICBt
X2lzVmFsaWQgPSBuZXdJc1ZhbGlkOworCisgICAgLy8gVXBkYXRlcyBvbmx5IGlmIHRoaXMgY29u
dHJvbCBhbHJlYWR5IGhhcyBhIHZhbGlkdGlvbiBtZXNzYWdlLgorICAgIGlmICghdmlzaWJsZVZh
bGlkYXRpb25NZXNzYWdlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIENhbGxzIHVwZGF0ZVZp
c2libGVWYWxpZGF0aW9uTWVzc2FnZSgpIGV2ZW4gaWYgbV9pc1ZhbGlkIGlzIG5vdAorICAgICAg
ICAvLyBjaGFuZ2VkIGJlY2F1c2UgYSB2YWxpZGF0aW9uIG1lc3NhZ2UgY2FuIGJlIGNoYWduZWQu
CisgICAgICAgIHVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworICAgIH0KK30KKwor
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJp
bmcmIGVycm9yKQoreworICAgIHZhbGlkaXR5KCktPnNldEN1c3RvbUVycm9yTWVzc2FnZShlcnJv
cik7Cit9CisgICAgCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNF
dmVudCgpCit7CisgICAgaWYgKGRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQo
KS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZvcm1EaWRGb2N1cyh0aGlzKTsKKworICAg
IEhUTUxFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKTsKK30KKwordm9pZCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpCit7CisgICAgaWYgKGRvY3VtZW50KCkt
PnBhZ2UoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCkt
PmZvcm1EaWRCbHVyKHRoaXMpOworCisgICAgSFRNTEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50
KCk7CisgICAgaGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOworfQorCitIVE1MRm9ybUVs
ZW1lbnQqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9mb3JtOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRGVm
YXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdAoreworICAgIHJldHVybiBpc1N1Y2Nlc3NmdWxTdWJt
aXRCdXR0b24oKSAmJiBtX2Zvcm0gJiYgbV9mb3JtLT5kZWZhdWx0QnV0dG9uKCkgPT0gdGhpczsK
K30KKwordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVGcm9tRm9ybSgpCit7Cisg
ICAgaWYgKCFtX2Zvcm0pCisgICAgICAgIHJldHVybjsKKyAgICBtX2Zvcm0tPnJlbW92ZUZvcm1F
bGVtZW50KHRoaXMpOworICAgIG1fZm9ybSA9IDA7Cit9CisKK3ZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6cmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQoreworICAgIGlm
IChtX2Zvcm0pIHsKKyAgICAgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlz
KTsKKyAgICB9CisgICAgbV9mb3JtID0gMDsKKyAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShmb3Jt
QXR0cikpIHsKKyAgICAgICAgLy8gVGhlIEhUTUw1IHNwZWMgc2F5cyB0aGF0IHRoZSBlbGVtZW50
IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgLy8gdGhlIGZpcnN0IGVsZW1lbnQg
aW4gdGhlIGRvY3VtZW50IHRvIGhhdmUgYW4gSUQgdGhhdCBlcXVhbCB0bworICAgICAgICAvLyB0
aGUgdmFsdWUgb2YgZm9ybSBhdHRyaWJ1dGUsIHNvIHdlIHB1dCB0aGUgcmVzdWx0IG9mCisgICAg
ICAgIC8vIGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKCkgb3ZlciB0aGUgZ2l2ZW4gZWxlbWVu
dC4KKyAgICAgICAgRWxlbWVudCogZmlyc3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVu
dEJ5SWQoZmFzdEdldEF0dHJpYnV0ZShmb3JtQXR0cikpOworICAgICAgICBpZiAoZmlyc3RFbGVt
ZW50ICYmIGZpcnN0RWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKKyAgICAgICAgICAgIG1f
Zm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGZpcnN0RWxlbWVudCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fZm9ybSA9IGZvcm07CisgICAgfSBlbHNlCisgICAgICAg
IG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBt
X2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgZWxzZQorICAgICAgICBkb2N1
bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOworfQorCit2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRy
LCBib29sIHByZXNlcnZlRGVjbHMpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBmb3JtQXR0
cikgeworICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7CisgICAgICAg
ICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBmb3Jt
IG93bmVyIGhlcmUuCisgICAgICAgICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAgICAgIG1f
Zm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7CisgICAgICAgICAgICBtX2Zvcm0gPSBmaW5k
Rm9ybUFuY2VzdG9yKCk7CisgICAgICAgICAgICBpZiAobV9mb3JtKQorICAgICAgICAgICAgICAg
IG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9u
KHRoaXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc2V0Rm9ybU93bmVyKDApOwor
ICAgIH0KKyAgICBIVE1MRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURl
Y2xzKTsKK30KKworYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0xhYmVsYWJsZSgpIGNv
bnN0Cit7CisgICAgLy8gRklYTUU6IEFkZCBtZXRlclRhZyBhbmQgb3V0cHV0VGFnIHRvIHRoZSBs
aXN0IG9uY2Ugd2Ugc3VwcG9ydCB0aGVtLgorICAgIHJldHVybiBoYXNUYWdOYW1lKGJ1dHRvblRh
ZykgfHwgaGFzVGFnTmFtZShpbnB1dFRhZykgfHwgaGFzVGFnTmFtZShrZXlnZW5UYWcpCisjaWYg
RU5BQkxFKE1FVEVSX1RBRykKKyAgICAgICAgfHwgaGFzVGFnTmFtZShtZXRlclRhZykKKyNlbmRp
ZgorI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgICAgIHx8IGhhc1RhZ05hbWUocHJvZ3Jl
c3NUYWcpCisjZW5kaWYKKyAgICAgICAgfHwgaGFzVGFnTmFtZShzZWxlY3RUYWcpIHx8IGhhc1Rh
Z05hbWUodGV4dGFyZWFUYWcpOworfQorCitQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpsYWJlbHMoKQoreworICAgIGlmICghaXNMYWJlbGFibGUoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKCFkb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBOb2RlOjplbnN1cmVSYXJlRGF0YSgpOworICAg
IGlmICghZGF0YS0+bm9kZUxpc3RzKCkpIHsKKyAgICAgICAgZGF0YS0+c2V0Tm9kZUxpc3RzKE5v
ZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgIGRvY3VtZW50KCktPmFkZE5vZGVM
aXN0Q2FjaGUoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIExhYmVsc05vZGVMaXN0OjpjcmVh
dGUodGhpcyk7Cit9CisgICAgCitIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKKyAgICA6IEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQoreworICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9y
bUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Cit9CisKK0hUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCkKK3sKKyAgICBkb2N1bWVu
dCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Cit9CisKK3ZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1lbnQo
KQoreworICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlz
KTsKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3duZXJEb2N1bWVu
dCgpOworfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpZE1vdmVU
b05ld093bmVyRG9jdW1lbnQoKQoreworICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1l
bnRXaXRoU3RhdGUodGhpcyk7CisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlkTW92ZVRv
TmV3T3duZXJEb2N1bWVudCgpOworfQorCitib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6OmF1dG9Db21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFmb3JtKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBmb3JtKCktPmF1dG9Db21wbGV0ZSgpOworfQorCiti
b29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnNob3VsZFNhdmVBbmRSZXN0b3Jl
Rm9ybUNvbnRyb2xTdGF0ZSgpIGNvbnN0Cit7CisgICAgLy8gV2UgZG9uJ3Qgc2F2ZS9yZXN0b3Jl
IGNvbnRyb2wgc3RhdGUgaW4gYSBmb3JtIHdpdGggYXV0b2NvbXBsZXRlPW9mZi4KKyAgICByZXR1
cm4gYXR0YWNoZWQoKSAmJiBhdXRvQ29tcGxldGUoKTsKK30KKwordm9pZCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlOjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQoreworICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworCisgICAgLy8gV2Ug
ZG9uJ3Qgc2F2ZSBzdGF0ZSBvZiBhIGNvbnRyb2wgd2l0aCBzaG91bGRTYXZlQW5kUmVzdG9yZUZv
cm1Db250cm9sU3RhdGUoKT1mYWxzZS4KKyAgICAvLyBCdXQgd2UgbmVlZCB0byBza2lwIHJlc3Rv
cmluZyBwcm9jZXNzIHRvbyBiZWNhdXNlIGEgY29udHJvbCBpbiBhbm90aGVyCisgICAgLy8gZm9y
bSBtaWdodCBoYXZlIHRoZSBzYW1lIHBhaXIgb2YgbmFtZSBhbmQgdHlwZSBhbmQgc2F2ZWQgaXRz
IHN0YXRlLgorICAgIGlmICghc2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOworICAg
IGlmIChkb2MtPmhhc1N0YXRlRm9yTmV3Rm9ybUVsZW1lbnRzKCkpIHsKKyAgICAgICAgU3RyaW5n
IHN0YXRlOworICAgICAgICBpZiAoZG9jLT50YWtlU3RhdGVGb3JGb3JtRWxlbWVudChuYW1lKCku
aW1wbCgpLCB0eXBlKCkuaW1wbCgpLCBzdGF0ZSkpCisgICAgICAgICAgICByZXN0b3JlRm9ybUNv
bnRyb2xTdGF0ZShzdGF0ZSk7CisgICAgfQorfQorCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFu
Z2VkRXZlbnQgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RleHRDb250cm9sKCkpIHsK
KyAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+c3VidHJlZUhhc0NoYW5n
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCitIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRN
TEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSh0YWdOYW1lLCBkb2MsIGZvcm0pCit7Cit9CisK
K0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp+SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQo
KQoreworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvY3Vz
RXZlbnQoKQoreworICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVyKCkpCisgICAgICAgIHVwZGF0
ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CisgICAgaGFuZGxlRm9jdXNFdmVudCgpOwor
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRpc3BhdGNoRm9jdXNFdmVudCgp
OworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVu
dCgpCit7CisgICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIoKSkKKyAgICAgICAgdXBkYXRlUGxh
Y2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKKyAgICBoYW5kbGVCbHVyRXZlbnQoKTsKKyAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEJsdXJFdmVudCgpOworfQor
CitTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwcGVkUGxhY2Vob2xkZXIo
KSBjb25zdAoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRNTDUgc3BlY2lmaWNhdGlvbiwg
d2UgbmVlZCB0byByZW1vdmUgQ1IgYW5kIExGIGZyb20KKyAgICAvLyB0aGUgYXR0cmlidXRlIHZh
bHVlLgorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBnZXRBdHRyaWJ1
dGUocGxhY2Vob2xkZXJBdHRyKTsKKyAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKG5l
d2xpbmVDaGFyYWN0ZXIpICYmICFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhjYXJyaWFnZVJldHVy
bikpCisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTsKKworICAgIFZlY3RvcjxVQ2hhcj4g
c3RyaXBwZWQ7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlVmFsdWUubGVuZ3RoKCk7
CisgICAgc3RyaXBwZWQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IGF0
dHJpYnV0ZVZhbHVlW2ldOworICAgICAgICBpZiAoY2hhcmFjdGVyID09IG5ld2xpbmVDaGFyYWN0
ZXIgfHwgY2hhcmFjdGVyID09IGNhcnJpYWdlUmV0dXJuKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIHN0cmlwcGVkLmFwcGVuZChjaGFyYWN0ZXIpOworICAgIH0KKyAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChzdHJpcHBlZCk7Cit9CisKK3N0YXRpYyBib29sIGlzTm90TGluZUJyZWFr
KFVDaGFyIGNoKSB7IHJldHVybiBjaCAhPSBuZXdsaW5lQ2hhcmFjdGVyICYmIGNoICE9IGNhcnJp
YWdlUmV0dXJuOyB9CisKK2Jvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlzUGxhY2Vo
b2xkZXJFbXB0eSgpIGNvbnN0Cit7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVW
YWx1ZSA9IGdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpOworICAgIHJldHVybiBhdHRyaWJ1
dGVWYWx1ZS5zdHJpbmcoKS5maW5kKGlzTm90TGluZUJyZWFrKSA9PSBub3RGb3VuZDsKK30KKwor
Ym9vbCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGxhY2Vob2xkZXJTaG91bGRCZVZpc2li
bGUoKSBjb25zdAoreworICAgIHJldHVybiBzdXBwb3J0c1BsYWNlaG9sZGVyKCkKKyAgICAgICAg
JiYgaXNFbXB0eVZhbHVlKCkKKyAgICAgICAgJiYgZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAh
PSB0aGlzCisgICAgICAgICYmICFpc1BsYWNlaG9sZGVyRW1wdHkoKTsKK30KKwordm9pZCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGJvb2wg
cGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQpCit7CisgICAgaWYgKHN1cHBvcnRzUGxhY2Vob2xkZXIo
KSAmJiByZW5kZXJlcigpKQorICAgICAgICB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkp
LT51cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkocGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUo
KSwgcGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQpOworfQorCitSZW5kZXJUZXh0Q29udHJvbCogSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0KCkK
K3sKKyAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCisgICAgICAgIHJldHVybiAwOworICAg
IGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAg
IHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpOworfQorCit2b2lkIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCit7Cisg
ICAgc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIG1heChzdGFydCwgc2VsZWN0aW9uRW5kKCkpKTsK
K30KKwordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uRW5kKGlu
dCBlbmQpCit7CisgICAgc2V0U2VsZWN0aW9uUmFuZ2UobWluKGVuZCwgc2VsZWN0aW9uU3RhcnQo
KSksIGVuZCk7Cit9CisKK3ZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdCgp
Cit7CisgICAgc2V0U2VsZWN0aW9uUmFuZ2UoMCwgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp
OworfQorCit2b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5n
ZShpbnQgc3RhcnQsIGludCBlbmQpCit7CisgICAgV2ViQ29yZTo6c2V0U2VsZWN0aW9uUmFuZ2Uo
dGhpcywgc3RhcnQsIGVuZCk7Cit9CisKK2ludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
c2VsZWN0aW9uU3RhcnQoKSBjb25zdAoreworICAgIGlmICghaXNUZXh0Rm9ybUNvbnRyb2woKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0g
dGhpcyAmJiBjYWNoZWRTZWxlY3Rpb25TdGFydCgpID49IDApCisgICAgICAgIHJldHVybiBjYWNo
ZWRTZWxlY3Rpb25TdGFydCgpOworICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlv
blN0YXJ0KCk7Cit9CisKK2ludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9u
RW5kKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IHRoaXMgJiYgY2Fj
aGVkU2VsZWN0aW9uRW5kKCkgPj0gMCkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFNlbGVjdGlvbkVu
ZCgpOworICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbkVuZCgpOworfQorCitQ
YXNzUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKCkg
Y29uc3QKK3sKKyAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWlzVGV4dEZvcm1Db250cm9sKCkgfHwg
Y2FjaGVkU2VsZWN0aW9uU3RhcnQoKSA8IDAgfHwgY2FjaGVkU2VsZWN0aW9uRW5kKCkgPCAwKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJl
cigpKS0+c2VsZWN0aW9uKGNhY2hlZFNlbGVjdGlvblN0YXJ0KCksIGNhY2hlZFNlbGVjdGlvbkVu
ZCgpKTsKK30KKwordm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcGxh
Y2Vob2xkZXJBdHRyKQorICAgICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkodHJ1ZSk7
CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc2VsZWN0QXR0cikKKyAgICAgICAgc2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIGNyZWF0ZUF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOworICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmNoYW5nZUF0dHIpCisgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRo
aXMsIGF0dHIpKTsKKyAgICBlbHNlCisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGU6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJjb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkocmV2aXNp
b24gNzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMsNzMgKzIzLDI4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb3JtQXNz
b2NpYXRlZEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkNo
YXJhY3Rlck5hbWVzLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudFBhcnNlci5o
IgotI2luY2x1ZGUgIkVsZW1lbnRSYXJlRGF0YS5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5j
bHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxGb3JtRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMYWJlbHNOb2RlTGlzdC5oIgotI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29u
dHJvbC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXZlbnRM
aXN0ZW5lci5oIgotI2luY2x1ZGUgIlZhbGlkYXRpb25NZXNzYWdlLmgiCisjaW5jbHVkZSAiSFRN
TE9iamVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJWYWxpZGl0eVN0YXRlLmgiCi0jaW5jbHVkZSA8
bGltaXRzPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9y
bSkKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9mb3JtKGZv
cm0pCi0gICAgLCBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwgbV9yZWFkT25seShmYWxzZSkKLSAg
ICAsIG1fcmVxdWlyZWQoZmFsc2UpCi0gICAgLCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNl
KQotICAgICwgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1fd2lsbFZh
bGlkYXRlKHRydWUpCi0gICAgLCBtX2lzVmFsaWQodHJ1ZSkKLXsKLSAgICBpZiAoIW1fZm9ybSkK
LSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1BbmNlc3RvcigpOwotICAgIGlmIChtX2Zvcm0pCi0g
ICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLX0KIAotSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKQorRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAg
IDogbV9mb3JtKGZvcm0pCiB7Ci0gICAgaWYgKG1fZm9ybSkKLSAgICAgICAgbV9mb3JtLT5yZW1v
dmVGb3JtRWxlbWVudCh0aGlzKTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpk
ZXRhY2goKQorRm9ybUFzc29jaWF0ZWRFbGVtZW50Ojp+Rm9ybUFzc29jaWF0ZWRFbGVtZW50KCkK
IHsKLSAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgSFRNTEVsZW1lbnQ6
OmRldGFjaCgpOwogfQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1Ob1ZhbGlk
YXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0
dHIpLmlzTnVsbCgpOwotfQotCi1WYWxpZGl0eVN0YXRlKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Ojp2YWxpZGl0eSgpCitWYWxpZGl0eVN0YXRlKiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnZhbGlk
aXR5KCkKIHsKICAgICBpZiAoIW1fdmFsaWRpdHlTdGF0ZSkKICAgICAgICAgbV92YWxpZGl0eVN0
YXRlID0gVmFsaWRpdHlTdGF0ZTo6Y3JlYXRlKHRoaXMpOwpAQCAtOTcsODYgKzUyLDI4IEBAIFZh
bGlkaXR5U3RhdGUqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnYKICAgICByZXR1cm4gbV92YWxp
ZGl0eVN0YXRlLmdldCgpOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVt
ZW50OjppbnNlcnRlZEludG9UcmVlKCkKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGRpc2Fi
bGVkQXR0cikgewotICAgICAgICBib29sIG9sZERpc2FibGVkID0gbV9kaXNhYmxlZDsKLSAgICAg
ICAgbV9kaXNhYmxlZCA9ICFhdHRyLT5pc051bGwoKTsKLSAgICAgICAgaWYgKG9sZERpc2FibGVk
ICE9IG1fZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAg
ICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVh
cmFuY2UoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5zdGF0ZUNoYW5n
ZWQocmVuZGVyZXIoKSwgRW5hYmxlZFN0YXRlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IHJlYWRvbmx5QXR0cikgewotICAgICAgICBib29sIG9sZFJlYWRPbmx5
ID0gbV9yZWFkT25seTsKLSAgICAgICAgbV9yZWFkT25seSA9ICFhdHRyLT5pc051bGwoKTsKLSAg
ICAgICAgaWYgKG9sZFJlYWRPbmx5ICE9IG1fcmVhZE9ubHkpIHsKLSAgICAgICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJlcigp
LT50aGVtZSgpLT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgUmVhZE9ubHlTdGF0ZSk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSByZXF1aXJlZEF0dHIpIHsKLSAg
ICAgICAgYm9vbCBvbGRSZXF1aXJlZCA9IG1fcmVxdWlyZWQ7Ci0gICAgICAgIG1fcmVxdWlyZWQg
PSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgICAgIGlmIChvbGRSZXF1aXJlZCAhPSBtX3JlcXVpcmVk
KSB7Ci0gICAgICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKLSAgICAgICAgICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsgLy8gVXBkYXRlcyBmb3IgOnJlcXVpcmVkIDpvcHRpb25hbCBj
bGFzc2VzLgotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIEhUTUxFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLSAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7
Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCkKLXsKLSAgICBBU1NF
UlQoIWF0dGFjaGVkKCkpOwotCi0gICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwotCi0gICAgLy8g
VGhlIGNhbGwgdG8gdXBkYXRlRnJvbUVsZW1lbnQoKSBuZWVkcyB0byBnbyBhZnRlciB0aGUgY2Fs
bCB0aHJvdWdoCi0gICAgLy8gdG8gdGhlIGJhc2UgY2xhc3MncyBhdHRhY2goKSBiZWNhdXNlIHRo
YXQgY2FuIHNvbWV0aW1lcyBkbyBhIGNsb3NlCi0gICAgLy8gb24gdGhlIHJlbmRlcmVyLgotICAg
IGlmIChyZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgp
OwotICAgICAgICAKLSAgICAvLyBGb2N1cyB0aGUgZWxlbWVudCBpZiBpdCBzaG91bGQgaG9ub3Vy
IGl0cyBhdXRvZm9jdXMgYXR0cmlidXRlLgotICAgIC8vIFdlIGhhdmUgdG8gZGV0ZXJtaW5lIGlm
IHRoZSBlbGVtZW50IGlzIGEgVGV4dEFyZWEvSW5wdXQvQnV0dG9uL1NlbGVjdCwKLSAgICAvLyBp
ZiBpbnB1dCB0eXBlIGhpZGRlbiBpZ25vcmUgYXV0b2ZvY3VzLiBTbyBpZiBkaXNhYmxlZCBvciBy
ZWFkb25seS4KLSAgICBib29sIGlzSW5wdXRUeXBlSGlkZGVuID0gZmFsc2U7Ci0gICAgaWYgKGhh
c1RhZ05hbWUoaW5wdXRUYWcpKQotICAgICAgICBpc0lucHV0VHlwZUhpZGRlbiA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPih0aGlzKS0+aXNJbnB1dFR5cGVIaWRkZW4oKTsKLQotICAg
IGlmIChhdXRvZm9jdXMoKSAmJiByZW5kZXJlcigpICYmICFkb2N1bWVudCgpLT5pZ25vcmVBdXRv
Zm9jdXMoKSAmJiAhaXNSZWFkT25seUZvcm1Db250cm9sKCkgJiYKLSAgICAgICAgICAgICgoaGFz
VGFnTmFtZShpbnB1dFRhZykgJiYgIWlzSW5wdXRUeXBlSGlkZGVuKSB8fCBoYXNUYWdOYW1lKHNl
bGVjdFRhZykgfHwKLSAgICAgICAgICAgICAgaGFzVGFnTmFtZShidXR0b25UYWcpIHx8IGhhc1Rh
Z05hbWUodGV4dGFyZWFUYWcpKSkKLSAgICAgICAgIGZvY3VzKCk7Ci19Ci0KLXZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCi17Ci0gICAgaWYg
KGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnJlZ2lz
dGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0dHJpYnV0ZSh0aGlzKTsKLSAgICAgICAgRWxlbWVudCog
ZWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUoZm9y
bUF0dHIpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShmb3Jt
VGFnKSkgeworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsK
KyAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpIHsKKyAgICAgICAg
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+cmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhGb3JtQXR0cmlidXRl
KHRoaXMpOworICAgICAgICBFbGVtZW50KiBmb3JtRWxlbWVudCA9IGVsZW1lbnQtPmRvY3VtZW50
KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsK
KyAgICAgICAgaWYgKGZvcm1FbGVtZW50ICYmIGZvcm1FbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1U
YWcpKSB7CiAgICAgICAgICAgICBpZiAobV9mb3JtKQogICAgICAgICAgICAgICAgIG1fZm9ybS0+
cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIG1fZm9ybSA9IHN0YXRp
Y19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KGZvcm1FbGVtZW50KTsKICAgICAgICAgICAgIG1fZm9y
bS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAo
IW1fZm9ybSkgewogICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgYSBuZXcgZm9y
bSBlbGVtZW50IGJlaW5nIGNyZWF0ZWQgYnkKICAgICAgICAgLy8gSmF2YVNjcmlwdCBhbmQgaW5z
ZXJ0ZWQgaW5zaWRlIGEgZm9ybS4gIEluIHRoZSBjYXNlIG9mIHRoZSBwYXJzZXIKLSAgICAgICAg
Ly8gc2V0dGluZyBhIGZvcm0sIHdlIHdpbGwgYWxyZWFkeSBoYXZlIGEgbm9uLW51bGwgdmFsdWUg
Zm9yIG1fZm9ybSwgCisgICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3aWxsIGFscmVhZHkg
aGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sCiAgICAgICAgIC8vIGFuZCBzbyB3ZSBk
b24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2Vz
dG9yKCk7CisgICAgICAgIG1fZm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKICAg
ICAgICAgaWYgKG1fZm9ybSkKICAgICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVu
dCh0aGlzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJh
ZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKICAgICB9Ci0KLSAgICBIVE1MRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKIH0KIAogc3RhdGljIGlubGluZSBOb2RlKiBmaW5kUm9v
dChOb2RlKiBuKQpAQCAtMTg3LDI1NiArODQsMTkgQEAgc3RhdGljIGlubGluZSBOb2RlKiBmaW5k
Um9vdChOb2RlKiBuKQogICAgIHJldHVybiByb290OwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApCit2b2lkIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKCkKIHsKLSAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShm
b3JtQXR0cikpCi0gICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhG
b3JtQXR0cmlidXRlKHRoaXMpOworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxl
bWVudCh0aGlzKTsKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikp
CisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JtRWxlbWVudFdpdGhG
b3JtQXR0cmlidXRlKHRoaXMpOwogCiAgICAgLy8gSWYgdGhlIGZvcm0gYW5kIGVsZW1lbnQgYXJl
IGJvdGggaW4gdGhlIHNhbWUgdHJlZSwgcHJlc2VydmUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGZv
cm0uCiAgICAgLy8gT3RoZXJ3aXNlLCBudWxsIG91dCBvdXIgZm9ybSBhbmQgcmVtb3ZlIG91cnNl
bHZlcyBmcm9tIHRoZSBmb3JtJ3MgbGlzdCBvZiBlbGVtZW50cy4KLSAgICBpZiAobV9mb3JtICYm
IGZpbmRSb290KHRoaXMpICE9IGZpbmRSb290KG1fZm9ybSkpIHsKLSAgICAgICAgbV9mb3JtLT5y
ZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgbV9mb3JtID0gMDsKLSAgICB9Ci0KLSAg
ICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGRlZXApOwotfQotCi1jb25zdCBBdG9taWNT
dHJpbmcmIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1Db250cm9sTmFtZSgpIGNvbnN0Ci17
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0
cik7Ci0gICAgcmV0dXJuIG5hbWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiBuYW1lOwotfQotCi12
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsKLX0KLQotdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKQot
ewotICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2hhbmdlRXZl
bnQsIHRydWUsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0
RGlzYWJsZWQoYm9vbCBiKQotewotICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIsIGIgPyAi
IiA6IDApOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF1dG9mb2N1cygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShhdXRvZm9jdXNBdHRyKTsKLX0KLQotYm9v
bCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcmVxdWlyZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZUZyb21FbGVtZW50Q2FsbGJhY2so
Tm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlRfQVJHKG5vZGUsIG5vZGUtPmlzRWxlbWVudE5vZGUo
KSk7Ci0gICAgQVNTRVJUX0FSRyhub2RlLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpOwotICAgIEFTU0VSVChub2RlLT5yZW5kZXJlcigpKTsKLSAg
ICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAg
IHJlbmRlcmVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKLXsKLSAgICBIVE1MRWxl
bWVudDo6cmVjYWxjU3R5bGUoY2hhbmdlKTsKLQotICAgIC8vIHVwZGF0ZUZyb21FbGVtZW50KCkg
Y2FuIGNhdXNlIHRoZSBzZWxlY3Rpb24gdG8gY2hhbmdlLCBhbmQgaW4gdHVybgotICAgIC8vIHRy
aWdnZXIgc3luY2hyb25vdXMgbGF5b3V0LCBzbyBpdCBtdXN0IG5vdCBiZSBjYWxsZWQgZHVyaW5n
IHN0eWxlIHJlY2FsYy4KLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcXVldWVQb3N0QXR0
YWNoQ2FsbGJhY2sodXBkYXRlRnJvbUVsZW1lbnRDYWxsYmFjaywgdGhpcyk7Ci19Ci0KLWJvb2wg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICFkaXNhYmxlZCgpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzRm9j
dXNhYmxlKCkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkgfHwgCi0gICAgICAgICFyZW5k
ZXJlcigpLT5pc0JveCgpIHx8IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5zaXplKCkuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gSFRNTEVsZW1lbnQ6OmlzRm9jdXNh
YmxlIGhhbmRsZXMgdmlzaWJpbGl0eSBhbmQgY2FsbHMgc3Vwb3J0c0ZvY3VzIHdoaWNoCi0gICAg
Ly8gd2lsbCBjb3ZlciB0aGUgZGlzYWJsZWQgY2FzZS4KLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6
OmlzRm9jdXNhYmxlKCk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNLZXli
b2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKLXsKLSAgICBpZiAoaXNG
b2N1c2FibGUoKSkKLSAgICAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnRhYnNUb0FsbENv
bnRyb2xzKGV2ZW50KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShRVCkKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmlzTW91c2VGb2N1c2Fi
bGUoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXNob3J0IEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKLXsKLSAgICAvLyBTa2lwIHRoZSBz
dXBwb3J0c0ZvY3VzIGNoZWNrIGluIEhUTUxFbGVtZW50LgotICAgIHJldHVybiBFbGVtZW50Ojp0
YWJJbmRleCgpOwotfQotCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlY2FsY1dpbGxW
YWxpZGF0ZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFNob3VsZCByZXR1cm4gZmFsc2UgaWYg
dGhpcyBlbGVtZW50IGhhcyBhIGRhdGFsaXN0IGVsZW1lbnQgYXMgYW4KLSAgICAvLyBhbmNlc3Rv
ci4gU2VlIEhUTUw1IDQuMTAuMTAgJ1RoZSBkYXRhbGlzdCBlbGVtZW50LicKLSAgICByZXR1cm4g
IW1fZGlzYWJsZWQgJiYgIW1fcmVhZE9ubHk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6d2lsbFZhbGlkYXRlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fd2lsbFZhbGlkYXRlSW5p
dGlhbGl6ZWQpIHsKLSAgICAgICAgbV93aWxsVmFsaWRhdGVJbml0aWFsaXplZCA9IHRydWU7Ci0g
ICAgICAgIG1fd2lsbFZhbGlkYXRlID0gcmVjYWxjV2lsbFZhbGlkYXRlKCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmFpbHMsIHNldE5lZWRz
V2lsbFZhbGlkYXRlQ2hlY2soKSBpcyBub3QKLSAgICAgICAgLy8gY2FsbGVkIGNvcnJlY3RseSB3
aGVuIHNvbWV0aGluZyB3aGljaCBjaGFuZ2VzIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIHJlc3VsdAot
ICAgICAgICAvLyBpcyB1cGRhdGVkLgotICAgICAgICBBU1NFUlQobV93aWxsVmFsaWRhdGUgPT0g
cmVjYWxjV2lsbFZhbGlkYXRlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV93aWxsVmFsaWRhdGU7
Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmVlZHNXaWxsVmFsaWRhdGVD
aGVjaygpCi17Ci0gICAgLy8gV2UgbmVlZCB0byByZWNhbGN1bGF0ZSB3aWxsVmFsaWR0ZSBpbW1l
ZGlhdGVseSBiZWNhdXNlIHdpbGxWYWxpZGF0ZQotICAgIC8vIGNoYW5nZSBjYW4gY2F1c2VzIHN0
eWxlIGNoYW5nZS4KLSAgICBib29sIG5ld1dpbGxWYWxpZGF0ZSA9IHJlY2FsY1dpbGxWYWxpZGF0
ZSgpOwotICAgIGlmIChtX3dpbGxWYWxpZGF0ZUluaXRpYWxpemVkICYmIG1fd2lsbFZhbGlkYXRl
ID09IG5ld1dpbGxWYWxpZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2lsbFZhbGlkYXRl
SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIG1fd2lsbFZhbGlkYXRlID0gbmV3V2lsbFZhbGlkYXRl
OwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICBpZiAoIW1fd2lsbFZhbGlkYXRlKQot
ICAgICAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci19Ci0KLVN0cmluZyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojp2YWxpZGF0aW9uTWVzc2FnZSgpCi17Ci0gICAgcmV0dXJuIHZh
bGlkaXR5KCktPnZhbGlkYXRpb25NZXNzYWdlKCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCkKLXsKLSAgICBQYWdlKiBw
YWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGlmIChyZW5kZXJlcigpICYmIHdpbGxWYWxpZGF0
ZSgpKSB7Ci0gICAgICAgIG1lc3NhZ2UgPSB2YWxpZGF0aW9uTWVzc2FnZSgpLnN0cmlwV2hpdGVT
cGFjZSgpOwotICAgICAgICAvLyBIVE1MNSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgYXNrIFVBIHRv
IHNob3cgdGhlIHRpdGxlIGF0dHJpYnV0ZSB2YWx1ZQotICAgICAgICAvLyB3aXRoIHRoZSB2YWxp
ZGF0aW9uTWVzc2FnZS4gIEhvd2V2ZXIsIHRoaXMgYmVoYXZpb3IgaXMgc2FtZSBhcyBPcGVyYQot
ICAgICAgICAvLyBhbmQgdGhlIHNwZWNpZmljYXRpb24gZGVzY3JpYmVzIHN1Y2ggYmVoYXZpb3Ig
YXMgYW4gZXhhbXBsZS4KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGdldEF0
dHJpYnV0ZSh0aXRsZUF0dHIpOwotICAgICAgICBpZiAoIW1lc3NhZ2UuaXNFbXB0eSgpICYmICF0
aXRsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCdcbicpOwotICAg
ICAgICAgICAgbWVzc2FnZS5hcHBlbmQodGl0bGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
ICghbV92YWxpZGF0aW9uTWVzc2FnZSkgewotICAgICAgICBtX3ZhbGlkYXRpb25NZXNzYWdlID0g
VmFsaWRhdGlvbk1lc3NhZ2U6OmNyZWF0ZSh0aGlzKTsKLSAgICAgICAgbV92YWxpZGF0aW9uTWVz
c2FnZS0+c2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaXNFbXB0
eSgpKQotICAgICAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgZWxzZSBp
ZiAobV92YWxpZGF0aW9uTWVzc2FnZS0+bWVzc2FnZSgpICE9IG1lc3NhZ2UpCi0gICAgICAgIG1f
dmFsaWRhdGlvbk1lc3NhZ2UtPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KLXZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aGlkZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpCi17Ci0gICAg
bV92YWxpZGF0aW9uTWVzc2FnZSA9IDA7Ci19Ci0KLVN0cmluZyBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Ojp2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX3Zh
bGlkYXRpb25NZXNzYWdlID8gbV92YWxpZGF0aW9uTWVzc2FnZS0+bWVzc2FnZSgpIDogU3RyaW5n
KCk7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0
b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250
cm9scykKLXsKLSAgICBpZiAoIXdpbGxWYWxpZGF0ZSgpIHx8IGlzVmFsaWRGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gQW4gZXZlbnQgaGFuZGxlciBj
YW4gZGVyZWYgdGhpcyBvYmplY3QuCi0gICAgUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
IHByb3RlY3Rvcih0aGlzKTsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IG9yaWdpbmFsRG9jdW1lbnQo
ZG9jdW1lbnQoKSk7Ci0gICAgYm9vbCBuZWVkc0RlZmF1bHRBY3Rpb24gPSBkaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmludmFsaWRFdmVudCwgZmFsc2UsIHRydWUpKTsK
LSAgICBpZiAobmVlZHNEZWZhdWx0QWN0aW9uICYmIHVuaGFuZGxlZEludmFsaWRDb250cm9scyAm
JiBpbkRvY3VtZW50KCkgJiYgb3JpZ2luYWxEb2N1bWVudCA9PSBkb2N1bWVudCgpKQotICAgICAg
ICB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMtPmFwcGVuZCh0aGlzKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9s
RWxlbWVudCgpCi17Ci0gICAgLy8gSWYgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gZmFpbHMsIHNl
dE5lZWRzVmFsaWRpdHlDaGVjaygpIGlzIG5vdCBjYWxsZWQKLSAgICAvLyBjb3JyZWN0bHkgd2hl
biBzb21ldGhpbmcgd2hpY2ggY2hhbmdlcyB2YWxpZGl0eSBpcyB1cGRhdGVkLgotICAgIEFTU0VS
VChtX2lzVmFsaWQgPT0gdmFsaWRpdHkoKS0+dmFsaWQoKSk7Ci0gICAgcmV0dXJuIG1faXNWYWxp
ZDsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROZWVkc1ZhbGlkaXR5Q2hl
Y2soKQotewotICAgIGJvb2wgbmV3SXNWYWxpZCA9IHZhbGlkaXR5KCktPnZhbGlkKCk7Ci0gICAg
aWYgKHdpbGxWYWxpZGF0ZSgpICYmIG5ld0lzVmFsaWQgIT0gbV9pc1ZhbGlkKSB7Ci0gICAgICAg
IC8vIFVwZGF0ZSBzdHlsZSBmb3IgcHNldWRvIGNsYXNzZXMgc3VjaCBhcyA6dmFsaWQgOmludmFs
aWQuCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICB9Ci0gICAgbV9pc1ZhbGlk
ID0gbmV3SXNWYWxpZDsKLQotICAgIC8vIFVwZGF0ZXMgb25seSBpZiB0aGlzIGNvbnRyb2wgYWxy
ZWFkeSBoYXMgYSB2YWxpZHRpb24gbWVzc2FnZS4KLSAgICBpZiAoIXZpc2libGVWYWxpZGF0aW9u
TWVzc2FnZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBDYWxscyB1cGRhdGVWaXNpYmxlVmFs
aWRhdGlvbk1lc3NhZ2UoKSBldmVuIGlmIG1faXNWYWxpZCBpcyBub3QKLSAgICAgICAgLy8gY2hh
bmdlZCBiZWNhdXNlIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGNhbiBiZSBjaGFnbmVkLgotICAgICAg
ICB1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6c2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJiBlcnJv
cikKLXsKLSAgICB2YWxpZGl0eSgpLT5zZXRDdXN0b21FcnJvck1lc3NhZ2UoZXJyb3IpOwotfQot
ICAgIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoKQot
ewotICAgIGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCi0gICAgICAgIGRvY3VtZW50KCktPnBhZ2Uo
KS0+Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtRGlkRm9jdXModGhpcyk7Ci0KLSAgICBIVE1MRWxl
bWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCk7CisgICAgaWYgKG1fZm9ybSAmJiBmaW5kUm9vdChl
bGVtZW50KSAhPSBmaW5kUm9vdChtX2Zvcm0pKQorICAgICAgICByZW1vdmVGcm9tRm9ybSgpOwog
fQogCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKLXsK
LSAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCkt
PmNocm9tZSgpLT5jbGllbnQoKS0+Zm9ybURpZEJsdXIodGhpcyk7Ci0KLSAgICBIVE1MRWxlbWVu
dDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKTsKLSAgICBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdl
KCk7Ci19Ci0KLUhUTUxGb3JtRWxlbWVudCogSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmlydHVh
bEZvcm0oKSBjb25zdAotewotICAgIHJldHVybiBtX2Zvcm07Ci19Ci0KLWJvb2wgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpICYmIG1fZm9ybSAmJiBtX2Zvcm0tPmRlZmF1
bHRCdXR0b24oKSA9PSB0aGlzOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJl
bW92ZUZyb21Gb3JtKCkKK3ZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVGcm9tRm9y
bSgpCiB7CiAgICAgaWYgKCFtX2Zvcm0pCiAgICAgICAgIHJldHVybjsKQEAgLTQ0NCwyNzcgKzEw
NCw1OSBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZUZyb21GCiAgICAgbV9m
b3JtID0gMDsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXNldEZvcm1Pd25l
cihIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCit2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6cmVz
ZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogeworICAgIEhUTUxFbGVtZW50KiBl
bGVtZW50ID0gdG9IVE1MRWxlbWVudCh0aGlzKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZv
cm1JZChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGZvcm1BdHRyKSk7CiAgICAgaWYgKG1fZm9y
bSkgewotICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKQorICAgICAgICBp
ZiAoZm9ybUlkLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2Zvcm0t
PnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwogICAgIH0KICAgICBtX2Zvcm0gPSAwOwotICAgIGlm
IChmYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAgIGlmICghZm9ybUlkLmlzTnVsbCgp
KSB7CiAgICAgICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNheXMgdGhhdCB0aGUgZWxlbWVudCBzaG91
bGQgYmUgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRo
ZSBkb2N1bWVudCB0byBoYXZlIGFuIElEIHRoYXQgZXF1YWwgdG8KICAgICAgICAgLy8gdGhlIHZh
bHVlIG9mIGZvcm0gYXR0cmlidXRlLCBzbyB3ZSBwdXQgdGhlIHJlc3VsdCBvZgogICAgICAgICAv
LyBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1lbnQuCi0g
ICAgICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlk
KGZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKKyAgICAgICAgRWxlbWVudCogZmlyc3RFbGVt
ZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZm9ybUlkKTsKICAgICAg
ICAgaWYgKGZpcnN0RWxlbWVudCAmJiBmaXJzdEVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykp
CiAgICAgICAgICAgICBtX2Zvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihmaXJz
dEVsZW1lbnQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2Zvcm0gPSBmb3JtOwogICAg
IH0gZWxzZQotICAgICAgICBtX2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7CisgICAgICAgIG1f
Zm9ybSA9IGVsZW1lbnQtPmZpbmRGb3JtQW5jZXN0b3IoKTsKICAgICBpZiAobV9mb3JtKQogICAg
ICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgZWxzZQotICAgICAg
ICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwotfQot
Ci12b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRl
KiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBm
b3JtQXR0cikgewotICAgICAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7Ci0g
ICAgICAgICAgICAvLyBUaGUgZm9ybSBhdHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNl
dCBmb3JtIG93bmVyIGhlcmUuCi0gICAgICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAg
ICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgICAgICBtX2Zvcm0g
PSBmaW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAg
ICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlzKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRk
QnV0dG9uKHRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc2V0Rm9ybU93bmVy
KDApOwotICAgIH0KLSAgICBIVE1MRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVz
ZXJ2ZURlY2xzKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0xhYmVsYWJs
ZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEFkZCBtZXRlclRhZyBhbmQgb3V0cHV0VGFnIHRv
IHRoZSBsaXN0IG9uY2Ugd2Ugc3VwcG9ydCB0aGVtLgotICAgIHJldHVybiBoYXNUYWdOYW1lKGJ1
dHRvblRhZykgfHwgaGFzVGFnTmFtZShpbnB1dFRhZykgfHwgaGFzVGFnTmFtZShrZXlnZW5UYWcp
Ci0jaWYgRU5BQkxFKE1FVEVSX1RBRykKLSAgICAgICAgfHwgaGFzVGFnTmFtZShtZXRlclRhZykK
LSNlbmRpZgotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgICAgIHx8IGhhc1RhZ05hbWUo
cHJvZ3Jlc3NUYWcpCi0jZW5kaWYKLSAgICAgICAgfHwgaGFzVGFnTmFtZShzZWxlY3RUYWcpIHx8
IGhhc1RhZ05hbWUodGV4dGFyZWFUYWcpOwotfQotCi1QYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpsYWJlbHMoKQotewotICAgIGlmICghaXNMYWJlbGFibGUoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFkb2N1bWVudCgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBOb2RlOjplbnN1cmVSYXJlRGF0YSgp
OwotICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpIHsKLSAgICAgICAgZGF0YS0+c2V0Tm9kZUxp
c3RzKE5vZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKSk7Ci0gICAgICAgIGRvY3VtZW50KCktPmFk
ZE5vZGVMaXN0Q2FjaGUoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIExhYmVsc05vZGVMaXN0
OjpjcmVhdGUodGhpcyk7Ci19Ci0gICAgCi1IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKLSAgICA6IEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQotewotICAgIGRvY3VtZW50KCktPnJlZ2lz
dGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7Ci19Ci0KLUhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6On5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCkKLXsKLSAgICBk
b2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhpcyk7CiB9CiAKLXZv
aWQgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6d2lsbE1vdmVUb05ld093bmVyRG9j
dW1lbnQoKQordm9pZCBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZvcm1BdHRyaWJ1dGVDaGFuZ2Vk
KCkKIHsKLSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoU3RhdGUodGhp
cyk7Ci0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6d2lsbE1vdmVUb05ld093bmVyRG9jdW1l
bnQoKTsKLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaWRNb3Zl
VG9OZXdPd25lckRvY3VtZW50KCkKLXsKLSAgICBkb2N1bWVudCgpLT5yZWdpc3RlckZvcm1FbGVt
ZW50V2l0aFN0YXRlKHRoaXMpOwotICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpZE1vdmVU
b05ld093bmVyRG9jdW1lbnQoKTsKLX0KLQotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0
aFN0YXRlOjphdXRvQ29tcGxldGUoKSBjb25zdAotewotICAgIGlmICghZm9ybSgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZm9ybSgpLT5hdXRvQ29tcGxldGUoKTsKLX0KLQot
Ym9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpzaG91bGRTYXZlQW5kUmVzdG9y
ZUZvcm1Db250cm9sU3RhdGUoKSBjb25zdAotewotICAgIC8vIFdlIGRvbid0IHNhdmUvcmVzdG9y
ZSBjb250cm9sIHN0YXRlIGluIGEgZm9ybSB3aXRoIGF1dG9jb21wbGV0ZT1vZmYuCi0gICAgcmV0
dXJuIGF0dGFjaGVkKCkgJiYgYXV0b0NvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKLXsKLSAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAgIC8vIFdl
IGRvbid0IHNhdmUgc3RhdGUgb2YgYSBjb250cm9sIHdpdGggc2hvdWxkU2F2ZUFuZFJlc3RvcmVG
b3JtQ29udHJvbFN0YXRlKCk9ZmFsc2UuCi0gICAgLy8gQnV0IHdlIG5lZWQgdG8gc2tpcCByZXN0
b3JpbmcgcHJvY2VzcyB0b28gYmVjYXVzZSBhIGNvbnRyb2wgaW4gYW5vdGhlcgotICAgIC8vIGZv
cm0gbWlnaHQgaGF2ZSB0aGUgc2FtZSBwYWlyIG9mIG5hbWUgYW5kIHR5cGUgYW5kIHNhdmVkIGl0
cyBzdGF0ZS4KLSAgICBpZiAoIXNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAg
ICBpZiAoZG9jLT5oYXNTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygpKSB7Ci0gICAgICAgIFN0cmlu
ZyBzdGF0ZTsKLSAgICAgICAgaWYgKGRvYy0+dGFrZVN0YXRlRm9yRm9ybUVsZW1lbnQobmFtZSgp
LmltcGwoKSwgdHlwZSgpLmltcGwoKSwgc3RhdGUpKQotICAgICAgICAgICAgcmVzdG9yZUZvcm1D
b250cm9sU3RhdGUoc3RhdGUpOwotICAgIH0KLX0KLQotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKLXsKLSAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2Via2l0RWRpdGFibGVDb250ZW50Q2hh
bmdlZEV2ZW50ICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNUZXh0Q29udHJvbCgpKSB7
Ci0gICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnN1YnRyZWVIYXNDaGFu
Z2VkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKLX0KLQotSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLSAgICA6IEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGFnTmFtZSwgZG9jLCBmb3JtKQotewotfQot
Ci1IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
KCkKLXsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hGb2N1
c0V2ZW50KCkKLXsKLSAgICBpZiAoc3VwcG9ydHNQbGFjZWhvbGRlcigpKQotICAgICAgICB1cGRh
dGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwotICAgIGhhbmRsZUZvY3VzRXZlbnQoKTsK
LSAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEZvY3VzRXZlbnQo
KTsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZl
bnQoKQotewotICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVyKCkpCi0gICAgICAgIHVwZGF0ZVBs
YWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7Ci0gICAgaGFuZGxlQmx1ckV2ZW50KCk7Ci0gICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hCbHVyRXZlbnQoKTsKLX0K
LQotU3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzdHJpcHBlZFBsYWNlaG9sZGVy
KCkgY29uc3QKLXsKLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUTUw1IHNwZWNpZmljYXRpb24s
IHdlIG5lZWQgdG8gcmVtb3ZlIENSIGFuZCBMRiBmcm9tCi0gICAgLy8gdGhlIGF0dHJpYnV0ZSB2
YWx1ZS4KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmli
dXRlKHBsYWNlaG9sZGVyQXR0cik7Ci0gICAgaWYgKCFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhu
ZXdsaW5lQ2hhcmFjdGVyKSAmJiAhYXR0cmlidXRlVmFsdWUuY29udGFpbnMoY2FycmlhZ2VSZXR1
cm4pKQotICAgICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7Ci0KLSAgICBWZWN0b3I8VUNoYXI+
IHN0cmlwcGVkOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCgp
OwotICAgIHN0cmlwcGVkLnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBh
dHRyaWJ1dGVWYWx1ZVtpXTsKLSAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBuZXdsaW5lQ2hhcmFj
dGVyIHx8IGNoYXJhY3RlciA9PSBjYXJyaWFnZVJldHVybikKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBzdHJpcHBlZC5hcHBlbmQoY2hhcmFjdGVyKTsKLSAgICB9Ci0gICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQoc3RyaXBwZWQpOwotfQotCi1zdGF0aWMgYm9vbCBpc05vdExpbmVCcmVh
ayhVQ2hhciBjaCkgeyByZXR1cm4gY2ggIT0gbmV3bGluZUNoYXJhY3RlciAmJiBjaCAhPSBjYXJy
aWFnZVJldHVybjsgfQotCi1ib29sIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppc1BsYWNl
aG9sZGVyRW1wdHkoKSBjb25zdAotewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRl
VmFsdWUgPSBnZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKTsKLSAgICByZXR1cm4gYXR0cmli
dXRlVmFsdWUuc3RyaW5nKCkuZmluZChpc05vdExpbmVCcmVhaykgPT0gbm90Rm91bmQ7Ci19Ci0K
LWJvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnBsYWNlaG9sZGVyU2hvdWxkQmVWaXNp
YmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3VwcG9ydHNQbGFjZWhvbGRlcigpCi0gICAgICAg
ICYmIGlzRW1wdHlWYWx1ZSgpCi0gICAgICAgICYmIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkg
IT0gdGhpcwotICAgICAgICAmJiAhaXNQbGFjZWhvbGRlckVtcHR5KCk7Ci19Ci0KLXZvaWQgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShib29s
IHBsYWNlaG9sZGVyVmFsdWVDaGFuZ2VkKQotewotICAgIGlmIChzdXBwb3J0c1BsYWNlaG9sZGVy
KCkgJiYgcmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigp
KS0+dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KHBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxl
KCksIHBsYWNlaG9sZGVyVmFsdWVDaGFuZ2VkKTsKLX0KLQotUmVuZGVyVGV4dENvbnRyb2wqIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojp0ZXh0UmVuZGVyZXJBZnRlclVwZGF0ZUxheW91dCgp
Ci17Ci0gICAgaWYgKCFpc1RleHRGb3JtQ29udHJvbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAg
ICByZXR1cm4gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKTsKLX0KLQotdm9pZCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uU3RhcnQoaW50IHN0YXJ0KQotewot
ICAgIHNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBtYXgoc3RhcnQsIHNlbGVjdGlvbkVuZCgpKSk7
Ci19Ci0KLXZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldFNlbGVjdGlvbkVuZChp
bnQgZW5kKQotewotICAgIHNldFNlbGVjdGlvblJhbmdlKG1pbihlbmQsIHNlbGVjdGlvblN0YXJ0
KCkpLCBlbmQpOwotfQotCi12b2lkIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Qo
KQotewotICAgIHNldFNlbGVjdGlvblJhbmdlKDAsIG51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KTsKLX0KLQotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0U2VsZWN0aW9uUmFu
Z2UoaW50IHN0YXJ0LCBpbnQgZW5kKQotewotICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdl
KHRoaXMsIHN0YXJ0LCBlbmQpOwotfQotCi1pbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9
IHRoaXMgJiYgY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSA+PSAwKQotICAgICAgICByZXR1cm4gY2Fj
aGVkU2VsZWN0aW9uU3RhcnQoKTsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rp
b25TdGFydCgpOwotfQotCi1pbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlv
bkVuZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc1RleHRGb3JtQ29udHJvbCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSB0aGlzICYmIGNh
Y2hlZFNlbGVjdGlvbkVuZCgpID49IDApCi0gICAgICAgIHJldHVybiBjYWNoZWRTZWxlY3Rpb25F
bmQoKTsKLSAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT5zZWxlY3Rpb25FbmQoKTsKKyAgICBI
VE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQodGhpcyk7CisgICAgaWYgKCFlbGVt
ZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAgICAgICAvLyBUaGUgZm9ybSBh
dHRyaWJ1dGUgcmVtb3ZlZC4gV2UgbmVlZCB0byByZXNldCBmb3JtIG93bmVyIGhlcmUuCisgICAg
ICAgIGlmIChtX2Zvcm0pCisgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRo
aXMpOworICAgICAgICBtX2Zvcm0gPSBlbGVtZW50LT5maW5kRm9ybUFuY2VzdG9yKCk7CisgICAg
ICAgIGlmIChtX2Zvcm0pCisgICAgICAgICAgICBmb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQo
dGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc2V0Rm9ybU93bmVyKDApOwogfQogCi1QYXNz
UmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKCkgY29u
c3QKK2NvbnN0IEhUTUxFbGVtZW50KiB0b0hUTUxFbGVtZW50KGNvbnN0IEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCogYXNzb2NpYXRlZEVsZW1lbnQpCiB7Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFp
c1RleHRGb3JtQ29udHJvbCgpIHx8IGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPCAwIHx8IGNhY2hl
ZFNlbGVjdGlvbkVuZCgpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRvUmVu
ZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnNlbGVjdGlvbihjYWNoZWRTZWxlY3Rpb25TdGFy
dCgpLCBjYWNoZWRTZWxlY3Rpb25FbmQoKSk7CisgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGFzc29jaWF0ZWRFbGVtZW50KTsKKyAgICAvLyBBc3N1
bWVzIHRoZSBlbGVtZW50IGlzIGFuIEhUTUxPYmplY3RFbGVtZW50CisgICAgY29uc3QgSFRNTEVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MT2JqZWN0RWxlbWVudCo+KGFz
c29jaWF0ZWRFbGVtZW50KTsKKyAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RU
YWcpKTsKKyAgICByZXR1cm4gZWxlbWVudDsKIH0KIAotdm9pZCBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQorSFRNTEVsZW1l
bnQqIHRvSFRNTEVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBhc3NvY2lhdGVkRWxlbWVu
dCkKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IHBsYWNlaG9sZGVyQXR0cikKLSAgICAgICAg
dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KHRydWUpOwotICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbnNlbGVjdEF0dHIpCi0gICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRo
aXMsIGF0dHIpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jaGFuZ2VBdHRyKQot
ICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVu
dCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7Ci0gICAgZWxzZQot
ICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxIVE1MRWxlbWVudCo+KHRvSFRNTEVs
ZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3QgRm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4oYXNzb2NpYXRl
ZEVsZW1lbnQpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYmNvcmUKSW5kZXg6IFdlYkNvcmUv
aHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Rm9ybUFzc29jaWF0ZWRFbGVtZW50LmgJKHJldmlzaW9uIDczMDA3KQkoZnJvbSBXZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oOjczMDA3KQorKysgV2ViQ29yZS9odG1sL0Zvcm1B
c3NvY2lhdGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAg
ICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
X2gKKyNkZWZpbmUgSFRNTEZvcm1Db250cm9sRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvcm1EYXRhTGlzdDsKK2Ns
YXNzIEhUTUxGb3JtRWxlbWVudDsKK2NsYXNzIFJlbmRlclRleHRDb250cm9sOworY2xhc3MgVmFs
aWRhdGlvbk1lc3NhZ2U7CitjbGFzcyBWYWxpZGl0eVN0YXRlOworY2xhc3MgVmlzaWJsZVNlbGVj
dGlvbjsKKworLy8gRklYTUU6IFRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoZXNlIGZv
cm0tYXNzb2NpYXRlZCBlbGVtZW50cy4KKy8vIFNvIGNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgdG8g
SFRNTEZvcm1Bc3NvY2lhdGVkRWxlbWVudC4KK2NsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQoKTsKKworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9ybTsgfQorICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlkaXR5KCk7CisKKyAgICBib29s
IGZvcm1Ob1ZhbGlkYXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IH0K
KworICAgIHZpcnR1YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0Y2hl
c1JlbmRlcmVyID0gYjsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xD
aGFuZ2VFdmVudCgpOworCisgICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlz
YWJsZWQ7IH0KKyAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOworCisgICAgdmlydHVhbCBib29s
IGlzRm9jdXNhYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIERldGVybWluZXMgd2hldGhlciBvciBu
b3QgYSBjb250cm9sIHdpbGwgYmUgYXV0b21hdGljYWxseSBmb2N1c2VkLgorICAgIHZpcnR1YWwg
Ym9vbCBhdXRvZm9jdXMoKSBjb25zdDsKKworICAgIGJvb2wgcmVxdWlyZWQoKSBjb25zdDsKKwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1Db250cm9s
VHlwZSgpOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
Zm9ybUNvbnRyb2xOYW1lKCk7IH0KKworICAgIHZvaWQgc2V0TmFtZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpOworCisgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZEZvcm1Db250cm9sKCkgY29u
c3QgeyByZXR1cm4gIWRpc2FibGVkKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFkT25seUZv
cm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gcmVhZE9ubHkoKTsgfQorCisgICAgdmlydHVhbCBi
b29sIGlzUmFkaW9CdXR0b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBjYW5UcmlnZ2VySW1wbGljaXRTdWJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKworICAgIC8vIE92ZXJyaWRlIGluIGRlcml2ZWQgY2xhc3NlcyB0byBnZXQgdGhlIGVuY29k
ZWQgbmFtZT12YWx1ZSBwYWlyIGZvciBzdWJtaXR0aW5nLgorICAgIC8vIFJldHVybiB0cnVlIGZv
ciBhIHN1Y2Nlc3NmdWwgY29udHJvbCAoc2VlIEhUTUw0LTE3LjEzLjIpLgorICAgIHZpcnR1YWwg
Ym9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKSB7IHJldHVybiBmYWxzZTsg
fQorCisgICAgdmlydHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGVkU3VibWl0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZhdGVkU3VibWl0
KGJvb2wpIHsgfQorCisgICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgpIGNvbnN0OworICAg
IFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpOworICAgIHZvaWQgdXBkYXRlVmlzaWJsZVZhbGlk
YXRpb25NZXNzYWdlKCk7CisgICAgdm9pZCBoaWRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKCk7
CisgICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxl
bWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzID0gMCk7CisgICAgLy8gVGhpcyBtdXN0
IGJlIGNhbGxlZCB3aGVuIGEgdmFsaWRhdGlvbiBjb25zdHJhaW50IG9yIGNvbnRyb2wgdmFsdWUg
aXMgY2hhbmdlZC4KKyAgICB2b2lkIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOworICAgIHZvaWQg
c2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIGZvcm1EZXN0cm95
ZWQoKSB7IG1fZm9ybSA9IDA7IH0KKworICAgIGJvb2wgaXNMYWJlbGFibGUoKSBjb25zdDsKKyAg
ICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBsYWJlbHMoKTsKKyAgICAKKyAgICBib29sIHJlYWRPbmx5
KCkgY29uc3QgeyByZXR1cm4gbV9yZWFkT25seTsgfQorCisgICAgdm9pZCByZXNldEZvcm1Pd25l
cihIVE1MRm9ybUVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChB
dHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CisKK3Byb3RlY3RlZDoKKyAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAg
IHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7CisgICAgdmlydHVhbCB2
b2lkIHJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApOworCisgICAgdmlydHVhbCBib29sIGlzS2V5
Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBp
c01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUo
U3R5bGVDaGFuZ2UpOworCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2goKTsKKworICAgIHZvaWQgcmVtb3ZlRnJvbUZvcm0oKTsKKworICAgIC8vIFRoaXMgbXVz
dCBiZSBjYWxsZWQgYW55IHRpbWUgdGhlIHJlc3VsdCBvZiB3aWxsVmFsaWRhdGUoKSBoYXMgY2hh
bmdlZC4KKyAgICB2b2lkIHNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcmVjYWxjV2lsbFZhbGlkYXRlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdCA9IDA7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJvbEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OworCisgICAgdmly
dHVhbCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0OworCisgICAgdmlydHVhbCBIVE1MRm9ybUVsZW1l
bnQqIHZpcnR1YWxGb3JtKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRGVmYXVsdEJ1dHRv
bkZvckZvcm0oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxl
bWVudCgpOworICAgIFN0cmluZyB2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKKwor
ICAgIEhUTUxGb3JtRWxlbWVudCogbV9mb3JtOworICAgIE93blB0cjxWYWxpZGl0eVN0YXRlPiBt
X3ZhbGlkaXR5U3RhdGU7CisgICAgT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRp
b25NZXNzYWdlOworICAgIGJvb2wgbV9kaXNhYmxlZCA6IDE7CisgICAgYm9vbCBtX3JlYWRPbmx5
IDogMTsKKyAgICBib29sIG1fcmVxdWlyZWQgOiAxOworICAgIGJvb2wgbV92YWx1ZU1hdGNoZXNS
ZW5kZXJlciA6IDE7CisKKyAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBvZiBtX3dpbGxWYWxpZGF0
ZSBkZXBlbmRzIG9uIHRoZSBkZXJpdmVkIGNsYXNzLiBXZSBjYW4ndAorICAgIC8vIGluaXRpYWxp
emUgaXQgd2l0aCBhIHZpcnR1YWwgZnVuY3Rpb24gaW4gdGhlIGNvbnN0cnVjdG9yLiBtX3dpbGxW
YWxpZGF0ZQorICAgIC8vIGlzIG5vdCBkZXRlcm1pbmlzdGljIGFzIGxvbmcgYXMgbV93aWxsVmFs
aWRhdGVJbml0aWFsaXplZCBpcyBmYWxzZS4KKyAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRh
dGVJbml0aWFsaXplZDogMTsKKyAgICBtdXRhYmxlIGJvb2wgbV93aWxsVmFsaWRhdGUgOiAxOwor
CisgICAgLy8gQ2FjaGUgb2YgdmFsaWRpdHkoKS0+dmFsaWQoKS4KKyAgICAvLyBCdXQgImNhbmRp
ZGF0ZSBmb3IgY29uc3RyYWludCB2YWxpZGF0aW9uIiBkb2Vzbid0IGFmZmVjdCBtX2lzVmFsaWQu
CisgICAgYm9vbCBtX2lzVmFsaWQgOiAxOworfTsKKworLy8gRklYTUU6IEdpdmUgdGhpcyBjbGFz
cyBpdHMgb3duIGhlYWRlciBmaWxlLgorY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZSA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CisKKyAgICB2aXJ0dWFsIGJvb2wg
YXV0b0NvbXBsZXRlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE1vdmVUb05ld093
bmVyRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVu
dCgpOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKK3By
aXZhdGU6CisgICAgdmlydHVhbCBib29sIHNob3VsZFNhdmVBbmRSZXN0b3JlRm9ybUNvbnRyb2xT
dGF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsK
K307CisKKy8vIEZJWE1FOiBHaXZlIHRoaXMgY2xhc3MgaXRzIG93biBoZWFkZXIgZmlsZS4KK2Ns
YXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnRXaXRoU3RhdGUgeworcHVibGljOgorICAgIC8vIENvbW1vbiBmbGFnIGZvciBIVE1MSW5w
dXRFbGVtZW50Ojp0b29Mb25nKCkgYW5kIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnRvb0xvbmcoKS4K
KyAgICBlbnVtIE5lZWRzVG9DaGVja0RpcnR5RmxhZyB7Q2hlY2tEaXJ0eUZsYWcsIElnbm9yZURp
cnR5RmxhZ307CisKKyAgICB2aXJ0dWFsIH5IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCgpOwor
CisgICAgLy8gVGhlIGRlcml2ZWQgY2xhc3Mgc2hvdWxkIHJldHVybiB0cnVlIGlmIHBsYWNlaG9s
ZGVyIHByb2Nlc3NpbmcgaXMgbmVlZGVkLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1BsYWNl
aG9sZGVyKCkgY29uc3QgPSAwOworICAgIFN0cmluZyBzdHJpcHBlZFBsYWNlaG9sZGVyKCkgY29u
c3Q7CisgICAgYm9vbCBwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpIGNvbnN0OworCisgICAg
aW50IHNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7CisgICAgaW50IHNlbGVjdGlvbkVuZCgpIGNvbnN0
OworICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoaW50KTsKKyAgICB2b2lkIHNldFNlbGVjdGlv
bkVuZChpbnQpOworICAgIHZvaWQgc2VsZWN0KCk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5n
ZShpbnQgc3RhcnQsIGludCBlbmQpOworICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbigp
IGNvbnN0OworCisgICAgdmlydHVhbCBpbnQgbWF4TGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRN
TEZvcm1FbGVtZW50Kik7CisKKyAgICB2b2lkIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShi
b29sKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CisKKyAgICBib29sIGlzUGxhY2Vo
b2xkZXJFbXB0eSgpIGNvbnN0OworCisgICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uU3Rh
cnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkgY29u
c3QgPSAwOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHVzZXItZWRpdGFibGUgdmFsdWUgaXMg
ZW1wdHkuIFVzZWQgdG8gY2hlY2sgcGxhY2Vob2xkZXIgdmlzaWJpbGl0eS4KKyAgICB2aXJ0dWFs
IGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgPSAwOworICAgIC8vIENhbGxlZCBpbiBkaXNwYXRj
aEZvY3VzRXZlbnQoKSwgYWZ0ZXIgcGxhY2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcg
cGFyZW50J3MgZGlzcGF0Y2hGb2N1c0V2ZW50KCkuCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUZv
Y3VzRXZlbnQoKSB7IH0KKyAgICAvLyBDYWxsZWQgaW4gZGlzcGF0Y2hCbHVyRXZlbnQoKSwgYWZ0
ZXIgcGxhY2Vob2xkZXIgcHJvY2VzcywgYmVmb3JlIGNhbGxpbmcgcGFyZW50J3MgZGlzcGF0Y2hC
bHVyRXZlbnQoKS4KKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQmx1ckV2ZW50KCkgeyB9CisKKyAg
ICBSZW5kZXJUZXh0Q29udHJvbCogdGV4dFJlbmRlcmVyQWZ0ZXJVcGRhdGVMYXlvdXQoKTsKK307
CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRl
ZEVsZW1lbnQuaAkocmV2aXNpb24gNzMwMDcpCisrKyBXZWJDb3JlL2h0bWwvRm9ybUFzc29jaWF0
ZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAKICAqCiAgKi8KIAot
I2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50X2gKLSNkZWZpbmUgSFRNTEZvcm1Db250cm9s
RWxlbWVudF9oCisjaWZuZGVmIEZvcm1Bc3NvY2lhdGVkRWxlbWVudF9oCisjZGVmaW5lIEZvcm1B
c3NvY2lhdGVkRWxlbWVudF9oCiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCkBAIC0zMCwy
MDQgKzMwLDU2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9ybURhdGFMaXN0Owog
Y2xhc3MgSFRNTEZvcm1FbGVtZW50OwotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2w7CiBjbGFzcyBW
YWxpZGF0aW9uTWVzc2FnZTsKIGNsYXNzIFZhbGlkaXR5U3RhdGU7CiBjbGFzcyBWaXNpYmxlU2Vs
ZWN0aW9uOwogCi0vLyBGSVhNRTogVGhlIEhUTUw1IHNwZWNpZmljYXRpb24gY2FsbHMgdGhlc2Ug
Zm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzLgotLy8gU28gY29uc2lkZXIgcmVuYW1pbmcgdGhpcyB0
byBIVE1MRm9ybUFzc29jaWF0ZWRFbGVtZW50LgotY2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVu
dCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CitjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgewog
cHVibGljOgotICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICB2aXJ0
dWFsIH5Gb3JtQXNzb2NpYXRlZEVsZW1lbnQoKTsKKworICAgIHZvaWQgcmVmKCkgeyByZWZGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQoKTsgfQorICAgIHZvaWQgZGVyZWYoKSB7IGRlcmVmRm9ybUFzc29j
aWF0ZWRFbGVtZW50KCk7IH0KIAogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9ybTsgfQogICAgIFZhbGlkaXR5U3RhdGUqIHZhbGlkaXR5KCk7CiAKLSAgICBi
b29sIGZvcm1Ob1ZhbGlkYXRlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJvb2wgYikgeyBtX3ZhbHVlTWF0
Y2hlc1JlbmRlcmVyID0gYjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRy
b2xDaGFuZ2VFdmVudCgpOwotCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzYWJsZWQ7IH0KLSAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwotCi0gICAgdmlydHVhbCBi
b29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtQ29udHJv
bEVsZW1lbnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkg
Y29uc3QgPSAwOwogCi0gICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIGNvbnRyb2wg
d2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQuCi0gICAgdmlydHVhbCBib29sIGF1dG9mb2N1
cygpIGNvbnN0OwotCi0gICAgYm9vbCByZXF1aXJlZCgpIGNvbnN0OwotCi0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gZm9ybUNvbnRyb2xUeXBlKCk7IH0KICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBmb3JtQ29udHJvbE5h
bWUoKTsgfQogCi0gICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkRm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiAh
ZGlzYWJsZWQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKSBj
b25zdCB7IHJldHVybiByZWFkT25seSgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1
dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGNhblRyaWdn
ZXJJbXBsaWNpdFN1Ym1pc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCiAgICAgLy8g
T3ZlcnJpZGUgaW4gZGVyaXZlZCBjbGFzc2VzIHRvIGdldCB0aGUgZW5jb2RlZCBuYW1lPXZhbHVl
IHBhaXIgZm9yIHN1Ym1pdHRpbmcuCiAgICAgLy8gUmV0dXJuIHRydWUgZm9yIGEgc3VjY2Vzc2Z1
bCBjb250cm9sIChzZWUgSFRNTDQtMTcuMTMuMikuCiAgICAgdmlydHVhbCBib29sIGFwcGVuZEZv
cm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0
dWFsIGJvb2wgaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmF0ZWRTdWJtaXQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmF0ZWRTdWJtaXQoYm9vbCkgeyB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHZhbGlk
YXRpb25NZXNzYWdlKCk7Ci0gICAgdm9pZCB1cGRhdGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2Uo
KTsKLSAgICB2b2lkIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAgICBib29sIGNo
ZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhh
bmRsZWRJbnZhbGlkQ29udHJvbHMgPSAwKTsKLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdo
ZW4gYSB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgb3IgY29udHJvbCB2YWx1ZSBpcyBjaGFuZ2VkLgot
ICAgIHZvaWQgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci0gICAgdm9pZCBzZXRDdXN0b21WYWxp
ZGl0eShjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgZm9ybURlc3Ryb3llZCgpIHsgbV9mb3Jt
ID0gMDsgfQotCi0gICAgYm9vbCBpc0xhYmVsYWJsZSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IGxhYmVscygpOwotICAgIAotICAgIGJvb2wgcmVhZE9ubHkoKSBjb25zdCB7IHJl
dHVybiBtX3JlYWRPbmx5OyB9CisgICAgdmlydHVhbCB2b2lkIGZvcm1EZXN0cm95ZWQoKSB7IG1f
Zm9ybSA9IDA7IH0KIAogICAgIHZvaWQgcmVzZXRGb3JtT3duZXIoSFRNTEZvcm1FbGVtZW50Kik7
Ci0gICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9vbCBwcmVz
ZXJ2ZURlY2xzID0gZmFsc2UpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSFRNTEZvcm1Db250cm9sRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxl
bWVudCopOworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudChIVE1MRm9ybUVsZW1lbnQqKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUo
Ym9vbCBkZWVwKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50Kikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2
ZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAgIHZvaWQgaW5zZXJ0ZWRJbnRv
VHJlZSgpOworICAgIHZvaWQgcmVtb3ZlZEZyb21UcmVlKCk7CiAKKyAgICB2b2lkIHNldEZvcm0o
SFRNTEZvcm1FbGVtZW50KiBmb3JtKSB7IG1fZm9ybSA9IGZvcm07IH0KICAgICB2b2lkIHJlbW92
ZUZyb21Gb3JtKCk7Ci0KLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFueSB0aW1lIHRoZSBy
ZXN1bHQgb2Ygd2lsbFZhbGlkYXRlKCkgaGFzIGNoYW5nZWQuCi0gICAgdm9pZCBzZXROZWVkc1dp
bGxWYWxpZGF0ZUNoZWNrKCk7Ci0gICAgdmlydHVhbCBib29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgp
IGNvbnN0OworICAgIHZvaWQgZm9ybUF0dHJpYnV0ZUNoYW5nZWQoKTsKIAogcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xOYW1lKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0ID0g
MDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xO
YW1lKCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
SFRNTEZvcm1FbGVtZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBp
c0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzVmFsaWRG
b3JtQ29udHJvbEVsZW1lbnQoKTsKLSAgICBTdHJpbmcgdmlzaWJsZVZhbGlkYXRpb25NZXNzYWdl
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZGb3JtQXNzb2NpYXRlZEVsZW1lbnQoKSA9IDA7CiAK
ICAgICBIVE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKICAgICBPd25QdHI8VmFsaWRpdHlTdGF0ZT4g
bV92YWxpZGl0eVN0YXRlOwotICAgIE93blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gbV92YWxpZGF0
aW9uTWVzc2FnZTsKLSAgICBib29sIG1fZGlzYWJsZWQgOiAxOwotICAgIGJvb2wgbV9yZWFkT25s
eSA6IDE7Ci0gICAgYm9vbCBtX3JlcXVpcmVkIDogMTsKLSAgICBib29sIG1fdmFsdWVNYXRjaGVz
UmVuZGVyZXIgOiAxOwotCi0gICAgLy8gVGhlIGluaXRpYWwgdmFsdWUgb2YgbV93aWxsVmFsaWRh
dGUgZGVwZW5kcyBvbiB0aGUgZGVyaXZlZCBjbGFzcy4gV2UgY2FuJ3QKLSAgICAvLyBpbml0aWFs
aXplIGl0IHdpdGggYSB2aXJ0dWFsIGZ1bmN0aW9uIGluIHRoZSBjb25zdHJ1Y3Rvci4gbV93aWxs
VmFsaWRhdGUKLSAgICAvLyBpcyBub3QgZGV0ZXJtaW5pc3RpYyBhcyBsb25nIGFzIG1fd2lsbFZh
bGlkYXRlSW5pdGlhbGl6ZWQgaXMgZmFsc2UuCi0gICAgbXV0YWJsZSBib29sIG1fd2lsbFZhbGlk
YXRlSW5pdGlhbGl6ZWQ6IDE7Ci0gICAgbXV0YWJsZSBib29sIG1fd2lsbFZhbGlkYXRlIDogMTsK
LQotICAgIC8vIENhY2hlIG9mIHZhbGlkaXR5KCktPnZhbGlkKCkuCi0gICAgLy8gQnV0ICJjYW5k
aWRhdGUgZm9yIGNvbnN0cmFpbnQgdmFsaWRhdGlvbiIgZG9lc24ndCBhZmZlY3QgbV9pc1ZhbGlk
LgotICAgIGJvb2wgbV9pc1ZhbGlkIDogMTsKLX07Ci0KLS8vIEZJWE1FOiBHaXZlIHRoaXMgY2xh
c3MgaXRzIG93biBoZWFkZXIgZmlsZS4KLWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGUgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgpOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwotCi0gICAgdmlydHVhbCBib29s
IGF1dG9Db21wbGV0ZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9OZXdP
d25lckRvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1l
bnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotCi1w
cml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTYXZlQW5kUmVzdG9yZUZvcm1Db250cm9s
U3RhdGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7
CiB9OwogCi0vLyBGSVhNRTogR2l2ZSB0aGlzIGNsYXNzIGl0cyBvd24gaGVhZGVyIGZpbGUuCi1j
bGFzcyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlIHsKLXB1YmxpYzoKLSAgICAvLyBDb21tb24gZmxhZyBmb3IgSFRNTElu
cHV0RWxlbWVudDo6dG9vTG9uZygpIGFuZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojp0b29Mb25nKCku
Ci0gICAgZW51bSBOZWVkc1RvQ2hlY2tEaXJ0eUZsYWcge0NoZWNrRGlydHlGbGFnLCBJZ25vcmVE
aXJ0eUZsYWd9OwotCi0gICAgdmlydHVhbCB+SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQoKTsK
LQotICAgIC8vIFRoZSBkZXJpdmVkIGNsYXNzIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwbGFjZWhv
bGRlciBwcm9jZXNzaW5nIGlzIG5lZWRlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQbGFj
ZWhvbGRlcigpIGNvbnN0ID0gMDsKLSAgICBTdHJpbmcgc3RyaXBwZWRQbGFjZWhvbGRlcigpIGNv
bnN0OwotICAgIGJvb2wgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBjb25zdDsKLQotICAg
IGludCBzZWxlY3Rpb25TdGFydCgpIGNvbnN0OwotICAgIGludCBzZWxlY3Rpb25FbmQoKSBjb25z
dDsKLSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KGludCk7Ci0gICAgdm9pZCBzZXRTZWxlY3Rp
b25FbmQoaW50KTsKLSAgICB2b2lkIHNlbGVjdCgpOwotICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFu
Z2UoaW50IHN0YXJ0LCBpbnQgZW5kKTsKLSAgICBQYXNzUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24o
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IG1heExlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhU
TUxGb3JtRWxlbWVudCopOwotCi0gICAgdm9pZCB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHko
Ym9vbCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
Kik7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwot
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOwotCi0gICAgYm9vbCBpc1BsYWNl
aG9sZGVyRW1wdHkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvblN0
YXJ0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNv
bnN0ID0gMDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB1c2VyLWVkaXRhYmxlIHZhbHVlIGlz
IGVtcHR5LiBVc2VkIHRvIGNoZWNrIHBsYWNlaG9sZGVyIHZpc2liaWxpdHkuCi0gICAgdmlydHVh
bCBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0ID0gMDsKLSAgICAvLyBDYWxsZWQgaW4gZGlzcGF0
Y2hGb2N1c0V2ZW50KCksIGFmdGVyIHBsYWNlaG9sZGVyIHByb2Nlc3MsIGJlZm9yZSBjYWxsaW5n
IHBhcmVudCdzIGRpc3BhdGNoRm9jdXNFdmVudCgpLgotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVG
b2N1c0V2ZW50KCkgeyB9Ci0gICAgLy8gQ2FsbGVkIGluIGRpc3BhdGNoQmx1ckV2ZW50KCksIGFm
dGVyIHBsYWNlaG9sZGVyIHByb2Nlc3MsIGJlZm9yZSBjYWxsaW5nIHBhcmVudCdzIGRpc3BhdGNo
Qmx1ckV2ZW50KCkuCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUJsdXJFdmVudCgpIHsgfQotCi0g
ICAgUmVuZGVyVGV4dENvbnRyb2wqIHRleHRSZW5kZXJlckFmdGVyVXBkYXRlTGF5b3V0KCk7Ci19
OworSFRNTEVsZW1lbnQqIHRvSFRNTEVsZW1lbnQoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7Citj
b25zdCBIVE1MRWxlbWVudCogdG9IVE1MRWxlbWVudChjb25zdCBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqKTsKIAogfSAvLyBuYW1lc3BhY2UKIAotI2VuZGlmCisjZW5kaWYgLy8gRm9ybUFzc29jaWF0
ZWRFbGVtZW50X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCShyZXZpc2lvbiA3MzQyMikKKysrIFdlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxBbGlnbm1lbnRUb1N0eWxlZEVsZW1lbnQo
U3R5bGVkRWxlbWVudCosIEF0dHJpYnV0ZSopOwogCisgICAgSFRNTEZvcm1FbGVtZW50KiBmaW5k
Rm9ybUFuY2VzdG9yKCkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBIVE1MRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwogCkBAIC05MCw4ICs5Miw2IEBA
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCi0gICAgSFRN
TEZvcm1FbGVtZW50KiBmaW5kRm9ybUFuY2VzdG9yKCkgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAg
dmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDczNDIyKQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDEyICs3OCwxMiBAQCBOb2RlKiBI
VE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0odW5zaWduZWQgCiAgICAgICAgIGluZm8oKS0+ZWxlbWVu
dHNBcnJheVBvc2l0aW9uID0gMDsKICAgICB9CiAKLSAgICBWZWN0b3I8SFRNTEZvcm1Db250cm9s
RWxlbWVudCo+JiBlbGVtZW50c0FycmF5ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4o
YmFzZSgpKS0+bV9hc3NvY2lhdGVkRWxlbWVudHM7CisgICAgVmVjdG9yPEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCo+JiBlbGVtZW50c0FycmF5ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4o
YmFzZSgpKS0+bV9hc3NvY2lhdGVkRWxlbWVudHM7CiAgICAgdW5zaWduZWQgY3VycmVudEluZGV4
ID0gaW5mbygpLT5wb3NpdGlvbjsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmZvKCkt
PmVsZW1lbnRzQXJyYXlQb3NpdGlvbjsgaSA8IGVsZW1lbnRzQXJyYXkuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRzQXJyYXlb
aV07Ci0gICAgICAgIGlmIChlbGVtZW50LT5pc0VudW1lcmF0YWJsZSgpKSB7CisgICAgICAgIGlm
IChlbGVtZW50c0FycmF5W2ldLT5pc0VudW1lcmF0YWJsZSgpKSB7CisgICAgICAgICAgICBIVE1M
RWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoZWxlbWVudHNBcnJheVtpXSk7CiAgICAg
ICAgICAgICBpZiAoaW5kZXggPT0gY3VycmVudEluZGV4KSB7CiAgICAgICAgICAgICAgICAgaW5m
bygpLT5wb3NpdGlvbiA9IGluZGV4OwogICAgICAgICAgICAgICAgIGluZm8oKS0+Y3VycmVudCA9
IGVsZW1lbnQ7CkBAIC0xMTAsMjEgKzExMCwyMiBAQCBFbGVtZW50KiBIVE1MRm9ybUNvbGxlY3Rp
b246OmdldE5hbWVkRm9yCiAKICAgICBib29sIGZvdW5kSW5wdXRFbGVtZW50cyA9IGZhbHNlOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtLT5tX2Fzc29jaWF0ZWRFbGVtZW50cy5z
aXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlID0gZm9ybS0+
bV9hc3NvY2lhdGVkRWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChlLT5pc0VudW1lcmF0YWJsZSgp
ICYmIGUtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgeworICAgICAgICBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50ID0gZm9ybS0+bV9hc3NvY2lhdGVkRWxl
bWVudHNbaV07CisgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChh
c3NvY2lhdGVkRWxlbWVudCk7CisgICAgICAgIGlmIChhc3NvY2lhdGVkRWxlbWVudC0+aXNFbnVt
ZXJhdGFibGUoKSAmJiBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpIHsK
ICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cyA9IHRydWU7CiAgICAgICAgICAgICBpZiAo
IWR1cGxpY2F0ZU51bWJlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgICAgIC0tZHVwbGljYXRlTnVtYmVyOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMpIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPm1faW1hZ2VFbGVtZW50cy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogZSA9IGZvcm0tPm1faW1hZ2VFbGVt
ZW50c1tpXTsKLSAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09IG5h
bWUpIHsKKyAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGVsZW1lbnQgPSBmb3JtLT5tX2lt
YWdlRWxlbWVudHNbaV07CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0
dHJOYW1lKSA9PSBuYW1lKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZWxlbWVudDsKICAgICAgICAgICAgICAgICAtLWR1cGxpY2F0ZU51bWJlcjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMTkxLDEwICsxOTIsMTEgQEAgdm9pZCBIVE1MRm9ybUNvbGxl
Y3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAgIEhUTUxGb3JtRWxlbWVudCogZiA9IHN0YXRpY19j
YXN0PEhUTUxGb3JtRWxlbWVudCo+KGJhc2UoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZi0+bV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRN
TEZvcm1Db250cm9sRWxlbWVudCogZSA9IGYtPm1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwotICAg
ICAgICBpZiAoZS0+aXNFbnVtZXJhdGFibGUoKSkgewotICAgICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7
CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW1lbnQgPSBmLT5t
X2Fzc29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5p
c0VudW1lcmF0YWJsZSgpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRv
SFRNTEVsZW1lbnQoYXNzb2NpYXRlZEVsZW1lbnQpOworICAgICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBpZEF0dHJWYWwgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOworICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGVsZW1lbnQtPmdldEF0dHJpYnV0
ZShuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKICAgICAgICAgICAgICAgICBWZWN0b3I8
RWxlbWVudCo+KiBpZFZlY3RvciA9IGluZm8oKS0+aWRDYWNoZS5nZXQoaWRBdHRyVmFsLmltcGwo
KSk7CkBAIC0yMDIsNyArMjA0LDcgQEAgdm9pZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5h
bWVDYWNoZQogICAgICAgICAgICAgICAgICAgICBpZFZlY3RvciA9IG5ldyBWZWN0b3I8RWxlbWVu
dCo+OwogICAgICAgICAgICAgICAgICAgICBpbmZvKCktPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5p
bXBsKCksIGlkVmVjdG9yKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWRW
ZWN0b3ItPmFwcGVuZChlKTsKKyAgICAgICAgICAgICAgICBpZFZlY3Rvci0+YXBwZW5kKGVsZW1l
bnQpOwogICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cy5hZGQoaWRBdHRyVmFsLmlt
cGwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1w
dHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwpIHsKQEAgLTIxMiwxNiArMjE0LDE2IEBA
IHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgICAgICAg
ICAgICAgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3I8RWxlbWVudCo+OwogICAgICAgICAgICAgICAg
ICAgICBpbmZvKCktPm5hbWVDYWNoZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBuYW1lVmVjdG9y
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmFtZVZlY3Rvci0+YXBwZW5k
KGUpOworICAgICAgICAgICAgICAgIG5hbWVWZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAg
ICAgICAgICAgICBmb3VuZElucHV0RWxlbWVudHMuYWRkKG5hbWVBdHRyVmFsLmltcGwoKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZi0+bV9pbWFnZUVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxJbWFn
ZUVsZW1lbnQqIGUgPSBmLT5tX2ltYWdlRWxlbWVudHNbaV07Ci0gICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7Cisg
ICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGVsZW1lbnQgPSBmLT5tX2ltYWdlRWxlbWVudHNbaV07
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZWxlbWVudC0+Z2V0SWRB
dHRyaWJ1dGUoKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGVs
ZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgIGlmICghaWRBdHRyVmFsLmlz
RW1wdHkoKSAmJiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKGlkQXR0clZhbC5pbXBsKCkp
KSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKICAgICAgICAgICAgIFZlY3RvcjxF
bGVtZW50Kj4qIGlkVmVjdG9yID0gaW5mbygpLT5pZENhY2hlLmdldChpZEF0dHJWYWwuaW1wbCgp
KTsKQEAgLTIyOSw3ICsyMzEsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFt
ZUNhY2hlCiAgICAgICAgICAgICAgICAgaWRWZWN0b3IgPSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsK
ICAgICAgICAgICAgICAgICBpbmZvKCktPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5pbXBsKCksIGlk
VmVjdG9yKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlkVmVjdG9yLT5hcHBlbmQoZSk7
CisgICAgICAgICAgICBpZFZlY3Rvci0+YXBwZW5kKGVsZW1lbnQpOwogICAgICAgICB9CiAgICAg
ICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1lQXR0clZh
bCAmJiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKG5hbWVBdHRyVmFsLmltcGwoKSkpIHsK
ICAgICAgICAgICAgIC8vIGFkZCB0byBuYW1lIGNhY2hlCkBAIC0yMzgsNyArMjQwLDcgQEAgdm9p
ZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICAgICAgICAgIG5h
bWVWZWN0b3IgPSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsKICAgICAgICAgICAgICAgICBpbmZvKCkt
Pm5hbWVDYWNoZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBuYW1lVmVjdG9yKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG5hbWVWZWN0b3ItPmFwcGVuZChlKTsKKyAgICAgICAgICAgIG5h
bWVWZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNzM0MjIpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDcgKzU3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKICAgICA6IEhUTUxF
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQotICAgICwgbV9mb3JtKGZvcm0pCisgICAgLCBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQoZm9ybSkKICAgICAsIG1fZGlzYWJsZWQoZmFsc2UpCiAgICAgLCBt
X3JlYWRPbmx5KGZhbHNlKQogICAgICwgbV9yZXF1aXJlZChmYWxzZSkKQEAgLTY2LDE2ICs2Niwx
NiBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFCiAgICAgLCBtX3dp
bGxWYWxpZGF0ZSh0cnVlKQogICAgICwgbV9pc1ZhbGlkKHRydWUpCiB7Ci0gICAgaWYgKCFtX2Zv
cm0pCi0gICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICBpZiAobV9mb3Jt
KQotICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7CisgICAgaWYgKCF0
aGlzLT5mb3JtKCkpCisgICAgICAgIHNldEZvcm0oZmluZEZvcm1BbmNlc3RvcigpKTsKKyAgICBp
ZiAodGhpcy0+Zm9ybSgpKQorICAgICAgICB0aGlzLT5mb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1l
bnQodGhpcyk7CiB9CiAKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6On5IVE1MRm9ybUNvbnRyb2xF
bGVtZW50KCkKIHsKLSAgICBpZiAobV9mb3JtKQotICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1F
bGVtZW50KHRoaXMpOworICAgIGlmIChmb3JtKCkpCisgICAgICAgIGZvcm0oKS0+cmVtb3ZlRm9y
bUVsZW1lbnQodGhpcyk7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGV0YWNo
KCkKQEAgLTg5LDE0ICs4OSw2IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybU5v
VmFsaWQKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShmb3Jtbm92YWxpZGF0ZUF0dHIpLmlzTnVs
bCgpOwogfQogCi1WYWxpZGl0eVN0YXRlKiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2YWxpZGl0
eSgpCi17Ci0gICAgaWYgKCFtX3ZhbGlkaXR5U3RhdGUpCi0gICAgICAgIG1fdmFsaWRpdHlTdGF0
ZSA9IFZhbGlkaXR5U3RhdGU6OmNyZWF0ZSh0aGlzKTsKLQotICAgIHJldHVybiBtX3ZhbGlkaXR5
U3RhdGUuZ2V0KCk7Ci19Ci0KIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
ZGlzYWJsZWRBdHRyKSB7CkBAIC0xNTQsNTEgKzE0NiwxNiBAQCB2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmF0dGFjaCgpCiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZShib29sIGRlZXApCiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0
dHIpKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9ybUF0
dHJpYnV0ZSh0aGlzKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50KCktPmdl
dEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICAgICAgaWYgKGVs
ZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewotICAgICAgICAgICAgaWYg
KG1fZm9ybSkKLSAgICAgICAgICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMp
OwotICAgICAgICAgICAgbV9mb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oZWxl
bWVudCk7Ci0gICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhpcyk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFtX2Zvcm0pIHsKLSAgICAgICAgLy8gVGhpcyBoYW5k
bGVzIHRoZSBjYXNlIG9mIGEgbmV3IGZvcm0gZWxlbWVudCBiZWluZyBjcmVhdGVkIGJ5Ci0gICAg
ICAgIC8vIEphdmFTY3JpcHQgYW5kIGluc2VydGVkIGluc2lkZSBhIGZvcm0uICBJbiB0aGUgY2Fz
ZSBvZiB0aGUgcGFyc2VyCi0gICAgICAgIC8vIHNldHRpbmcgYSBmb3JtLCB3ZSB3aWxsIGFscmVh
ZHkgaGF2ZSBhIG5vbi1udWxsIHZhbHVlIGZvciBtX2Zvcm0sIAotICAgICAgICAvLyBhbmQgc28g
d2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICAgICAgbV9mb3JtID0gZmluZEZvcm1B
bmNlc3RvcigpOwotICAgICAgICBpZiAobV9mb3JtKQotICAgICAgICAgICAgbV9mb3JtLT5yZWdp
c3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVu
dCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwotICAgIH0KKyAgICBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoKTsKKyAgICBpZiAoIWZvcm0o
KSkKKyAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0
aGlzKTsKIAogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOwogfQogCi1z
dGF0aWMgaW5saW5lIE5vZGUqIGZpbmRSb290KE5vZGUqIG4pCi17Ci0gICAgTm9kZSogcm9vdCA9
IG47Ci0gICAgZm9yICg7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIHJvb3QgPSBu
OwotICAgIHJldHVybiByb290OwotfQotCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJl
bW92ZWRGcm9tVHJlZShib29sIGRlZXApCiB7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9y
bUF0dHIpKQotICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9ybUVsZW1lbnRXaXRoRm9y
bUF0dHJpYnV0ZSh0aGlzKTsKLQotICAgIC8vIElmIHRoZSBmb3JtIGFuZCBlbGVtZW50IGFyZSBi
b3RoIGluIHRoZSBzYW1lIHRyZWUsIHByZXNlcnZlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBmb3Jt
LgotICAgIC8vIE90aGVyd2lzZSwgbnVsbCBvdXQgb3VyIGZvcm0gYW5kIHJlbW92ZSBvdXJzZWx2
ZXMgZnJvbSB0aGUgZm9ybSdzIGxpc3Qgb2YgZWxlbWVudHMuCi0gICAgaWYgKG1fZm9ybSAmJiBm
aW5kUm9vdCh0aGlzKSAhPSBmaW5kUm9vdChtX2Zvcm0pKSB7Ci0gICAgICAgIG1fZm9ybS0+cmVt
b3ZlRm9ybUVsZW1lbnQodGhpcyk7Ci0gICAgICAgIG1fZm9ybSA9IDA7Ci0gICAgfQotCisgICAg
Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZW1vdmVkRnJvbVRyZWUoKTsKICAgICBIVE1MRWxlbWVu
dDo6cmVtb3ZlZEZyb21UcmVlKGRlZXApOwogfQogCkBAIC0yNTQsNyArMjExLDcgQEAgdm9pZCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZWNhbGNTdHlsZQogCiBib29sIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiAhZGlzYWJsZWQo
KTsKKyAgICByZXR1cm4gIW1fZGlzYWJsZWQ7CiB9CiAKIGJvb2wgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6aXNGb2N1c2FibGUoKSBjb25zdApAQCAtMzY2LDcgKzMyMyw3IEBAIFN0cmluZyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojp2aXNpYmxlVmEKICAgICByZXR1cm4gbV92YWxpZGF0aW9uTWVz
c2FnZSA/IG1fdmFsaWRhdGlvbk1lc3NhZ2UtPm1lc3NhZ2UoKSA6IFN0cmluZygpOwogfQogCi1i
b29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCitib29s
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKIHsKICAgICBp
ZiAoIXdpbGxWYWxpZGF0ZSgpIHx8IGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC00MDgsNyArMzY1LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpzZXRDdXN0b21WYQogewogICAgIHZhbGlkaXR5KCktPnNldEN1c3RvbUVycm9yTWVz
c2FnZShlcnJvcik7CiB9Ci0gICAgCisKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlz
cGF0Y2hGb2N1c0V2ZW50KCkKIHsKICAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQpAQCAtNDI4
LDY0ICszODUsMjIgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkaXNwYXRjaEJsdQog
CiBIVE1MRm9ybUVsZW1lbnQqIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZpcnR1YWxGb3JtKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9mb3JtOworICAgIHJldHVybiBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ6OmZvcm0oKTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc0RlZmF1
bHRCdXR0b25Gb3JGb3JtKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNTdWNjZXNzZnVsU3VibWl0
QnV0dG9uKCkgJiYgbV9mb3JtICYmIG1fZm9ybS0+ZGVmYXVsdEJ1dHRvbigpID09IHRoaXM7Ci19
Ci0KLXZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0oKQotewotICAg
IGlmICghbV9mb3JtKQotICAgICAgICByZXR1cm47Ci0gICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxl
bWVudCh0aGlzKTsKLSAgICBtX2Zvcm0gPSAwOwotfQotCi12b2lkIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnJlc2V0Rm9ybU93bmVyKEhUTUxGb3JtRWxlbWVudCogZm9ybSkKLXsKLSAgICBpZiAo
bV9mb3JtKSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7
Ci0gICAgfQotICAgIG1fZm9ybSA9IDA7Ci0gICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0
dHIpKSB7Ci0gICAgICAgIC8vIFRoZSBIVE1MNSBzcGVjIHNheXMgdGhhdCB0aGUgZWxlbWVudCBz
aG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICAgIC8vIHRoZSBmaXJzdCBlbGVtZW50IGlu
IHRoZSBkb2N1bWVudCB0byBoYXZlIGFuIElEIHRoYXQgZXF1YWwgdG8KLSAgICAgICAgLy8gdGhl
IHZhbHVlIG9mIGZvcm0gYXR0cmlidXRlLCBzbyB3ZSBwdXQgdGhlIHJlc3VsdCBvZgotICAgICAg
ICAvLyBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCgpIG92ZXIgdGhlIGdpdmVuIGVsZW1lbnQu
Ci0gICAgICAgIEVsZW1lbnQqIGZpcnN0RWxlbWVudCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRC
eUlkKGZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpKTsKLSAgICAgICAgaWYgKGZpcnN0RWxlbWVu
dCAmJiBmaXJzdEVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpCi0gICAgICAgICAgICBtX2Zv
cm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihmaXJzdEVsZW1lbnQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2Zvcm0gPSBmb3JtOwotICAgIH0gZWxzZQotICAgICAgICBt
X2Zvcm0gPSBmaW5kRm9ybUFuY2VzdG9yKCk7Ci0gICAgaWYgKG1fZm9ybSkKLSAgICAgICAgbV9m
b3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgZG9jdW1l
bnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICByZXR1cm4g
aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgZm9ybSgpICYmIGZvcm0oKS0+ZGVmYXVsdEJ1
dHRvbigpID09IHRoaXM7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0cmli
dXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKIHsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IGZvcm1BdHRyKSB7Ci0gICAgICAgIGlmICghZmFzdEhhc0F0dHJp
YnV0ZShmb3JtQXR0cikpIHsKLSAgICAgICAgICAgIC8vIFRoZSBmb3JtIGF0dHJpYnV0ZSByZW1v
dmVkLiBXZSBuZWVkIHRvIHJlc2V0IGZvcm0gb3duZXIgaGVyZS4KLSAgICAgICAgICAgIGlmICht
X2Zvcm0pCi0gICAgICAgICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsK
LSAgICAgICAgICAgIG1fZm9ybSA9IGZpbmRGb3JtQW5jZXN0b3IoKTsKLSAgICAgICAgICAgIGlm
IChtX2Zvcm0pCi0gICAgICAgICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRo
aXMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNr
ZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgcmVzZXRGb3JtT3duZXIoMCk7Ci0gICAgfQotICAgIEhUTUxFbGVtZW50OjphdHRyaWJ1
dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOworICAgICAgICBmb3JtQXR0cmlidXRlQ2hh
bmdlZCgpOworICAgICAgICBpZiAoIWZvcm0oKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmNo
ZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CisgICAgfSBlbHNlCisgICAgICAg
IEhUTUxFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOwogfQog
CiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzTGFiZWxhYmxlKCkgY29uc3QKQEAgLTUx
Niw3ICs0MzEsNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBIVE1MRm9ybUNvbnRyb2xFbGVtCiAg
ICAgCiAgICAgcmV0dXJuIExhYmVsc05vZGVMaXN0OjpjcmVhdGUodGhpcyk7CiB9Ci0gICAgCisK
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRN
TEZvcm1FbGVtZW50KiBmKQogICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBk
b2MsIGYpCiB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJKHJldmlz
aW9uIDczNDIyKQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50X2gKICNkZWZpbmUgSFRNTEZvcm1Db250cm9sRWxlbWVudF9oCiAKKyNpbmNsdWRlICJGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zNSwxNCArMzYsMTQgQEAgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2U7
CiBjbGFzcyBWYWxpZGl0eVN0YXRlOwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAotLy8gRklY
TUU6IFRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uIGNhbGxzIHRoZXNlIGZvcm0tYXNzb2NpYXRlZCBl
bGVtZW50cy4KLS8vIFNvIGNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgdG8gSFRNTEZvcm1Bc3NvY2lh
dGVkRWxlbWVudC4KLWNsYXNzIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVs
ZW1lbnQgeworLy8gSFRNTEZvcm1Db250cm9sRWxlbWVudCBpcyB0aGUgZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBvZiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQsCisvLyBhbmQgZm9ybS1hc3NvY2lhdGVk
IGVsZW1lbnQgaW1wbGVtZW50YXRpb25zIHNob3VsZCB1c2UgSFRNTEZvcm1Db250cm9sRWxlbWVu
dAorLy8gdW5sZXNzIHRoZXJlIGlzIGEgc3BlY2lhbCByZWFzb24uCitjbGFzcyBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgRm9ybUFzc29jaWF0ZWRF
bGVtZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRyb2xFbGVtZW50KCk7
CiAKLSAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0oKSBjb25zdCB7IHJldHVybiBtX2Zvcm07IH0K
LSAgICBWYWxpZGl0eVN0YXRlKiB2YWxpZGl0eSgpOworICAgIEhUTUxGb3JtRWxlbWVudCogZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6Zm9ybSgpOyB9CiAKICAg
ICBib29sIGZvcm1Ob1ZhbGlkYXRlKCkgY29uc3Q7CiAKQEAgLTUzLDcgKzU0LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwog
Ci0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWQ7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgZGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkOyB9CiAgICAg
dm9pZCBzZXREaXNhYmxlZChib29sKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgp
IGNvbnN0OwpAQCAtNjUsNyArNjYsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCByZXF1aXJlZCgpIGNv
bnN0OwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gZm9y
bUNvbnRyb2xUeXBlKCk7IH0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7
IHJldHVybiBmb3JtQ29udHJvbE5hbWUoKTsgfQogCiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSk7CiAKQEAgLTg3LDIxICs4NywyMSBAQCBwdWJsaWM6CiAgICAgU3Ry
aW5nIHZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAgdm9pZCB1cGRhdGVWaXNpYmxlVmFsaWRhdGlv
bk1lc3NhZ2UoKTsKICAgICB2b2lkIGhpZGVWaXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKTsKLSAg
ICBib29sIGNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMgPSAwKTsKKyAgICBib29sIGNoZWNrVmFsaWRp
dHkoVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFs
aWRDb250cm9scyA9IDApOwogICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBhIHZhbGlk
YXRpb24gY29uc3RyYWludCBvciBjb250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCiAgICAgdm9pZCBz
ZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKICAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KGNvbnN0
IFN0cmluZyYpOwogCi0gICAgdm9pZCBmb3JtRGVzdHJveWVkKCkgeyBtX2Zvcm0gPSAwOyB9Ci0K
ICAgICBib29sIGlzTGFiZWxhYmxlKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4g
bGFiZWxzKCk7Ci0gICAgCisKICAgICBib29sIHJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFkT25seTsgfQogCi0gICAgdm9pZCByZXNldEZvcm1Pd25lcihIVE1MRm9ybUVsZW1lbnQqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNl
cnZlRGVjbHMgPSBmYWxzZSk7CiAKKyAgICB1c2luZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+
OjpyZWY7CisgICAgdXNpbmcgVHJlZVNoYXJlZDxDb250YWluZXJOb2RlPjo6ZGVyZWY7CisKIHBy
b3RlY3RlZDoKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CiAKQEAgLTExOSw4ICsxMTks
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogCi0gICAgdm9pZCByZW1vdmVGcm9tRm9ybSgpOwot
CiAgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhbnkgdGltZSB0aGUgcmVzdWx0IG9mIHdpbGxW
YWxpZGF0ZSgpIGhhcyBjaGFuZ2VkLgogICAgIHZvaWQgc2V0TmVlZHNXaWxsVmFsaWRhdGVDaGVj
aygpOwogICAgIHZpcnR1YWwgYm9vbCByZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdDsKQEAgLTEy
OSw2ICsxMjcsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBm
b3JtQ29udHJvbE5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIHJlZkZvcm1B
c3NvY2lhdGVkRWxlbWVudCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQoKSB7IGRlcmVmKCk7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBpc0Zv
cm1Db250cm9sRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CkBAIC0xNDAsOCArMTQxLDYgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpOwogICAgIFN0cmlu
ZyB2aXNpYmxlVmFsaWRhdGlvbk1lc3NhZ2UoKSBjb25zdDsKIAotICAgIEhUTUxGb3JtRWxlbWVu
dCogbV9mb3JtOwotICAgIE93blB0cjxWYWxpZGl0eVN0YXRlPiBtX3ZhbGlkaXR5U3RhdGU7CiAg
ICAgT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBtX3ZhbGlkYXRpb25NZXNzYWdlOwogICAgIGJv
b2wgbV9kaXNhYmxlZCA6IDE7CiAgICAgYm9vbCBtX3JlYWRPbmx5IDogMTsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzQyMikKKysrIFdlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDEwIEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50OjpzdWJtaXRJbXBsaWNpdGx5KEUKIHsKICAgICBpbnQgc3VibWlzc2lv
blRyaWdnZXJDb3VudCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2Np
YXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQqIGZvcm1FbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxlbWVudHNbaV07CisgICAgICAgIEZvcm1B
c3NvY2lhdGVkRWxlbWVudCogZm9ybUFzc29jaWF0ZWRFbGVtZW50ID0gbV9hc3NvY2lhdGVkRWxl
bWVudHNbaV07CisgICAgICAgIGlmICghZm9ybUFzc29jaWF0ZWRFbGVtZW50LT5pc0Zvcm1Db250
cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxl
bWVudCo+KGZvcm1Bc3NvY2lhdGVkRWxlbWVudCk7CiAgICAgICAgIGlmIChmb3JtRWxlbWVudC0+
aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpIHsKICAgICAgICAgICAgIGlmIChmb3JtRWxlbWVu
dC0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50LT5kaXNwYXRjaFNp
bXVsYXRlZENsaWNrKGV2ZW50KTsKQEAgLTIxMywxMCArMjE2LDEyIEBAIGJvb2wgSFRNTEZvcm1F
bGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXYKICAgICBpZiAoc3VibWl0RWxlbWVudCAmJiBzdWJt
aXRFbGVtZW50LT5mb3JtTm9WYWxpZGF0ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmhpZGVWaXNpYmxlVmFsaWRhdGlv
bk1lc3NhZ2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxl
bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ld
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZv
cm1Db250cm9sRWxlbWVudCo+KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKS0+aGlkZVZpc2libGVW
YWxpZGF0aW9uTWVzc2FnZSgpOworICAgIH0KIAotICAgIFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4gPiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHM7CisgICAgVmVjdG9yPFJl
ZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzOwog
ICAgIGNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHModW5oYW5kbGVkSW52YWxpZENvbnRy
b2xzKTsKICAgICBpZiAodW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yMjUsNyArMjMwLDggQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6
OnZhbGlkYXRlSW50ZXJhY3RpdgogICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IHByb3RlY3Rv
cih0aGlzKTsKICAgICAvLyBGb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGNvbnRyb2wgYW5k
IHNob3cgYSB2YWxpZGF0aW9uIG1lc3NhZ2UuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHVuaGFuZGxlZEludmFsaWRDb250cm9scy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiB1bmhhbmRsZWQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0u
Z2V0KCk7CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogdW5oYW5kbGVkQXNzb2NpYXRl
ZEVsZW1lbnQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0KCk7CisgICAgICAgIEhU
TUxFbGVtZW50KiB1bmhhbmRsZWQgPSB0b0hUTUxFbGVtZW50KHVuaGFuZGxlZEFzc29jaWF0ZWRF
bGVtZW50KTsKICAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb2N1c2FibGUoKSAmJiB1bmhhbmRs
ZWQtPmluRG9jdW1lbnQoKSkgewogICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBvcmlnaW5h
bERvY3VtZW50KHVuaGFuZGxlZC0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICB1bmhhbmRsZWQt
PnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2UpOwpAQCAtMjM0LDcgKzI0MCw4IEBAIGJvb2wg
SFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXYKICAgICAgICAgICAgIC8vIG1vdmVk
IHRvIGFub3RoZXIgZG9jdW1lbnQuCiAgICAgICAgICAgICBpZiAodW5oYW5kbGVkLT5pc0ZvY3Vz
YWJsZSgpICYmIHVuaGFuZGxlZC0+aW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0g
dW5oYW5kbGVkLT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgdW5oYW5kbGVkLT5mb2N1
cygpOwotICAgICAgICAgICAgICAgIHVuaGFuZGxlZC0+dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25N
ZXNzYWdlKCk7CisgICAgICAgICAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9s
RWxlbWVudCo+KHVuaGFuZGxlZCktPnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2FnZSgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDIs
MTEgKzI0OSwxMiBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2CiAg
ICAgLy8gV2FybiBhYm91dCBhbGwgb2YgdW5mb2N1c2FibGUgY29udHJvbHMuCiAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHVuaGFuZGxlZEludmFsaWRDb250cm9scy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogdW5oYW5kbGVkID0gdW5oYW5kbGVkSW52
YWxpZENvbnRyb2xzW2ldLmdldCgpOworICAgICAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50
KiB1bmhhbmRsZWRBc3NvY2lhdGVkRWxlbWVudCA9IHVuaGFuZGxlZEludmFsaWRDb250cm9sc1tp
XS5nZXQoKTsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiB1bmhhbmRsZWQgPSB0b0hUTUxFbGVt
ZW50KHVuaGFuZGxlZEFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAgICAgICAgIGlmICh1bmhhbmRs
ZWQtPmlzRm9jdXNhYmxlKCkgJiYgdW5oYW5kbGVkLT5pbkRvY3VtZW50KCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSgiQW4gaW52YWxpZCBm
b3JtIGNvbnRyb2wgd2l0aCBuYW1lPSclbmFtZScgaXMgbm90IGZvY3VzYWJsZS4iKTsKLSAgICAg
ICAgICAgIG1lc3NhZ2UucmVwbGFjZSgiJW5hbWUiLCB1bmhhbmRsZWQtPm5hbWUoKSk7CisgICAg
ICAgICAgICBtZXNzYWdlLnJlcGxhY2UoIiVuYW1lIiwgdW5oYW5kbGVkQXNzb2NpYXRlZEVsZW1l
bnQtPm5hbWUoKSk7CiAgICAgICAgICAgICBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+
YWRkTWVzc2FnZShIVE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2Fn
ZUxldmVsLCBtZXNzYWdlLCAwLCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0zMDcsOCArMzE1LDExIEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJt
aXQoRXZlbnQqIGV2ZW4KICAgICBib29sIG5lZWRCdXR0b25BY3RpdmF0aW9uID0gYWN0aXZhdGVT
dWJtaXRCdXR0b247IC8vIGRvIHdlIG5lZWQgdG8gYWN0aXZhdGUgYSBzdWJtaXQgYnV0dG9uPwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBtX2Fz
c29jaWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiBhc3Nv
Y2lhdGVkRWxlbWVudCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOworICAgICAgICBpZiAoIWFz
c29jaWF0ZWRFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGlmIChuZWVkQnV0dG9uQWN0aXZhdGlvbikgeworICAgICAgICAgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqPihhc3NvY2lhdGVkRWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoY29udHJv
bC0+aXNBY3RpdmF0ZWRTdWJtaXQoKSkKICAgICAgICAgICAgICAgICBuZWVkQnV0dG9uQWN0aXZh
dGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RTdWNjZXNzZnVsU3VibWl0
QnV0dG9uID09IDAgJiYgY29udHJvbC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkpCkBAIC0z
NDIsOCArMzUzLDEwIEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZXNldCgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVk
RWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldLT5y
ZXNldCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0ZWRFbGVtZW50
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVudHNbaV0tPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLT5yZXNldCgpOworICAgIH0K
IAogICAgIG1faW5yZXNldCA9IGZhbHNlOwogfQpAQCAtMzk2LDcgKzQwOSw3IEBAIHRlbXBsYXRl
PGNsYXNzIFQsIHNpemVfdCBuPiBzdGF0aWMgdm9pZCAKICAgICAgICAgfQogfQogCi11bnNpZ25l
ZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJpYnV0ZShIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQordW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpm
b3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCogZWxlbWVudCkKIHsKICAg
ICAvLyBDb21wYXJlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZvcm0gZWxlbWVudCBhbmQgdGhlIGlu
c2VydGVkIGVsZW1lbnQuCiAgICAgLy8gVXBkYXRlcyB0aGUgaW5kZWNlcyBpbiBvcmRlciB0byB0
aGUgcmVsYXRpb24gb2YgdGhlIHBvc2l0aW9uOgpAQCAtNDE2LDU3ICs0MjksNjQgQEAgdW5zaWdu
ZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZAogICAgIHVuc2lnbmVkIGxlZnQgPSAw
LCByaWdodCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKSAtIDE7CiAgICAgd2hpbGUgKGxl
ZnQgIT0gcmlnaHQpIHsKICAgICAgICAgdW5zaWduZWQgbWlkZGxlID0gbGVmdCArICgocmlnaHQg
LSBsZWZ0KSAvIDIpOwotICAgICAgICBwb3NpdGlvbiA9IGVsZW1lbnQtPmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uKG1fYXNzb2NpYXRlZEVsZW1lbnRzW21pZGRsZV0pOworICAgICAgICBwb3NpdGlv
biA9IGVsZW1lbnQtPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRvSFRNTEVsZW1lbnQobV9hc3Nv
Y2lhdGVkRWxlbWVudHNbbWlkZGxlXSkpOwogICAgICAgICBpZiAocG9zaXRpb24gJiBET0NVTUVO
VF9QT1NJVElPTl9GT0xMT1dJTkcpCiAgICAgICAgICAgICByaWdodCA9IG1pZGRsZTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgbGVmdCA9IG1pZGRsZSArIDE7CiAgICAgfQogCi0gICAgcG9z
aXRpb24gPSBlbGVtZW50LT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihtX2Fzc29jaWF0ZWRFbGVt
ZW50c1tsZWZ0XSk7CisgICAgcG9zaXRpb24gPSBlbGVtZW50LT5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbih0b0hUTUxFbGVtZW50KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2xlZnRdKSk7CiAgICAgaWYg
KHBvc2l0aW9uICYgRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKQogICAgICAgICByZXR1cm4g
bGVmdDsKICAgICByZXR1cm4gbGVmdCArIDE7CiB9CiAKLXVuc2lnbmVkIEhUTUxGb3JtRWxlbWVu
dDo6Zm9ybUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlKQordW5zaWduZWQg
SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCog
YXNzb2NpYXRlZEVsZW1lbnQpCiB7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxF
bGVtZW50KGFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAvLyBUcmVhdHMgc2VwYXJhdGVseSB0aGUg
Y2FzZSB3aGVyZSB0aGlzIGVsZW1lbnQgaGFzIHRoZSBmb3JtIGF0dHJpYnV0ZQogICAgIC8vIGZv
ciBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9uLgotICAgIGlmIChlLT5mYXN0SGFzQXR0cmlidXRl
KGZvcm1BdHRyKSkKLSAgICAgICAgcmV0dXJuIGZvcm1FbGVtZW50SW5kZXhXaXRoRm9ybUF0dHJp
YnV0ZShlKTsKKyAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShmb3JtQXR0cikpCisg
ICAgICAgIHJldHVybiBmb3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUoZWxlbWVudCk7
CiAKICAgICAvLyBDaGVjayBmb3IgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGlzIGVsZW1lbnQg
aXMgdGhlIHZlcnkgbGFzdCB0aGluZyBpbgogICAgIC8vIHRoZSBmb3JtJ3MgdHJlZSBvZiBjaGls
ZHJlbjsgd2UgZG9uJ3Qgd2FudCB0byB3YWxrIHRoZSBlbnRpcmUgdHJlZSBpbiB0aGF0CiAgICAg
Ly8gY29tbW9uIGNhc2UgdGhhdCBvY2N1cnMgZHVyaW5nIHBhcnNpbmc7IGluc3RlYWQgd2UnbGwg
anVzdCByZXR1cm4gYSB2YWx1ZQogICAgIC8vIHRoYXQgc2F5cyAiYWRkIHRoaXMgZm9ybSBlbGVt
ZW50IHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5Ii4KLSAgICBpZiAoZS0+dHJhdmVyc2VOZXh0Tm9k
ZSh0aGlzKSkgeworICAgIGlmIChlbGVtZW50LT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGkgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4OwogICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSh0aGlzKSkgewotICAgICAgICAgICAgaWYgKG5vZGUgPT0gZSkgeworICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gZWxlbWVudCkgewogICAgICAgICAgICAgICAgICsrbV9hc3NvY2lhdGVk
RWxlbWVudHNBZnRlckluZGV4OwogICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAgICAg
ICAgICAgICAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVt
ZW50KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9s
RWxlbWVudCo+KG5vZGUpLT5mb3JtKCkgPT0gdGhpcykKKyAgICAgICAgICAgICAgICAgICAgJiYg
KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAg
ICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpLT5mb3Jt
KCkgPT0gdGhpcykKICAgICAgICAgICAgICAgICArK2k7CiAgICAgICAgIH0KICAgICB9CiAgICAg
cmV0dXJuIG1fYXNzb2NpYXRlZEVsZW1lbnRzQWZ0ZXJJbmRleCsrOwogfQogCi12b2lkIEhUTUxG
b3JtRWxlbWVudDo6cmVnaXN0ZXJGb3JtRWxlbWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBl
KQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlZ2lzdGVyRm9ybUVsZW1lbnQoRm9ybUFzc29jaWF0
ZWRFbGVtZW50KiBlKQogewotICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKS5y
ZW1vdmVCdXR0b24oZSk7Ci0gICAgbV9jaGVja2VkUmFkaW9CdXR0b25zLmFkZEJ1dHRvbihlKTsK
KyAgICBpZiAoZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KGUpOworICAgICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3Zl
QnV0dG9uKGVsZW1lbnQpOworICAgICAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMuYWRkQnV0dG9u
KGVsZW1lbnQpOworICAgIH0KICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5pbnNlcnQoZm9ybUVs
ZW1lbnRJbmRleChlKSwgZSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVGb3Jt
RWxlbWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OnJlbW92ZUZvcm1FbGVtZW50KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogZSkKIHsKLSAgICBtX2No
ZWNrZWRSYWRpb0J1dHRvbnMucmVtb3ZlQnV0dG9uKGUpOwotICAgIGlmIChlLT5mYXN0SGFzQXR0
cmlidXRlKGZvcm1BdHRyKSkgeworICAgIGlmIChlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQor
ICAgICAgICBtX2NoZWNrZWRSYWRpb0J1dHRvbnMucmVtb3ZlQnV0dG9uKHN0YXRpY19jYXN0PEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqPihlKSk7CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0
b0hUTUxFbGVtZW50KGUpOworICAgIGlmIChlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1B
dHRyKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleDsKICAgICAgICAgZm9yIChpbmRleCA9IDA7
IGluZGV4IDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2luZGV4KQogICAgICAgICAg
ICAgaWYgKG1fYXNzb2NpYXRlZEVsZW1lbnRzW2luZGV4XSA9PSBlKQpAQCAtNTU0LDcgKzU3NCw5
IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojp3YXNVc2VyU3VibWl0dGVkKCkKIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIEhUTUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbigpIGNvbnN0CiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBtX2Fzc29j
aWF0ZWRFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFtX2Fzc29jaWF0ZWRFbGVtZW50c1tpXS0+
aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250
cm9sRWxlbWVudCo+KG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldKTsKICAgICAgICAgaWYgKGNvbnRy
b2wtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpKQogICAgICAgICAgICAgcmV0dXJuIGNvbnRy
b2w7CiAgICAgfQpAQCAtNTY0LDIzICs1ODYsMjMgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudCog
SFRNTEZvcm1FbGVtZW50OgogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgp
CiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+IGNvbnRyb2xz
OworICAgIFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50PiA+IGNvbnRyb2xzOwog
ICAgIGNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoY29udHJvbHMpOwogICAgIHJldHVy
biBjb250cm9scy5pc0VtcHR5KCk7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50Ojpjb2xsZWN0
VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxl
bWVudD4gPiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OmNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ+ID4mIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKIHsKICAgICBSZWZQdHI8
SFRNTEZvcm1FbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CiAgICAgLy8gQ29weSBtX2Fzc29jaWF0
ZWRFbGVtZW50cyBiZWNhdXNlIGV2ZW50IGhhbmRsZXJzIGNhbGxlZCBmcm9tCiAgICAgLy8gSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpIG1pZ2h0IGNoYW5nZSBtX2Fzc29j
aWF0ZWRFbGVtZW50cy4KLSAgICBWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
ID4gZWxlbWVudHM7CisgICAgVmVjdG9yPFJlZlB0cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4g
ZWxlbWVudHM7CiAgICAgZWxlbWVudHMucmVzZXJ2ZUNhcGFjaXR5KG1fYXNzb2NpYXRlZEVsZW1l
bnRzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXNzb2NpYXRlZEVs
ZW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICBlbGVtZW50cy5hcHBlbmQobV9hc3NvY2lhdGVk
RWxlbWVudHNbaV0pOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50cy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAoZWxlbWVudHNbaV0tPmZvcm0oKSA9PSB0aGlzKQotICAg
ICAgICAgICAgZWxlbWVudHNbaV0tPmNoZWNrVmFsaWRpdHkoJnVuaGFuZGxlZEludmFsaWRDb250
cm9scyk7CisgICAgICAgIGlmIChlbGVtZW50c1tpXS0+Zm9ybSgpID09IHRoaXMgJiYgZWxlbWVu
dHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZWxlbWVudHNbaV0uZ2V0KCkpLT5jaGVja1ZhbGlkaXR5
KCZ1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpOwogICAgIH0KIH0KIApAQCAtNjI3LDggKzY0OSwx
MCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6ZG9jdW1lbnREaWRCZWNvbWVBCiB7CiAgICAgQVNT
RVJUKCFtX2F1dG9jb21wbGV0ZSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
c3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXNzb2NpYXRlZEVsZW1l
bnRzW2ldLT5yZXNldCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fzc29jaWF0
ZWRFbGVtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hc3NvY2lhdGVkRWxlbWVu
dHNbaV0tPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obV9hc3NvY2lhdGVkRWxlbWVudHNbaV0pLT5yZXNldCgp
OworICAgIH0KIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRv
Y3VtZW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHJldmlzaW9uIDczNDIyKQorKysg
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OworY2xhc3MgRm9ybUFz
c29jaWF0ZWRFbGVtZW50OwogY2xhc3MgRm9ybURhdGE7CiBjbGFzcyBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OwogY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKQEAgLTY0LDggKzY1LDggQEAgcHVibGlj
OgogCiAgICAgLy8gRklYTUU6IFNob3VsZCByZW5hbWUgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byBz
YXkgImZvcm0gY29udHJvbCIKICAgICAvLyBvciAiZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnQiIGlu
c3RlYWQgb2YgImZvcm0gZWxlbWVudCIuCi0gICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50KEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUZvcm1FbGVtZW50KEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRm9ybUVsZW1lbnQoRm9ybUFz
c29jaWF0ZWRFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVGb3JtRWxlbWVudChGb3JtQXNzb2Np
YXRlZEVsZW1lbnQqKTsKICAgICB2b2lkIHJlZ2lzdGVySW1nRWxlbWVudChIVE1MSW1hZ2VFbGVt
ZW50Kik7CiAgICAgdm9pZCByZW1vdmVJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqKTsKIApA
QCAtMTA5LDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAgIENoZWNrZWRSYWRpb0J1dHRvbnMmIGNo
ZWNrZWRSYWRpb0J1dHRvbnMoKSB7IHJldHVybiBtX2NoZWNrZWRSYWRpb0J1dHRvbnM7IH0KIAot
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGFzc29jaWF0ZWRFbGVt
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXNzb2NpYXRlZEVsZW1lbnRzOyB9CisgICAgY29uc3Qg
VmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBhc3NvY2lhdGVkRWxlbWVudHMoKSBjb25z
dCB7IHJldHVybiBtX2Fzc29jaWF0ZWRFbGVtZW50czsgfQogCiBwcml2YXRlOgogICAgIEhUTUxG
b3JtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKQEAgLTEzMSwxMyAr
MTMyLDEzIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHN1Ym1pdChFdmVudCosIGJvb2wgYWN0aXZh
dGVTdWJtaXRCdXR0b24sIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCBGb3JtU3VibWlzc2lv
blRyaWdnZXIpOwogCi0gICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmli
dXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKLSAgICB1bnNpZ25lZCBmb3JtRWxlbWVudElu
ZGV4KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKKyAgICB1bnNpZ25lZCBmb3JtRWxlbWVudElu
ZGV4V2l0aEZvcm1BdHRyaWJ1dGUoRWxlbWVudCopOworICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50
SW5kZXgoRm9ybUFzc29jaWF0ZWRFbGVtZW50Kik7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBzdWJtaXNzaW9uIHNob3VsZCBiZSBwcm9jZWVkZWQuCiAgICAgYm9vbCB2YWxpZGF0ZUludGVy
YWN0aXZlbHkoRXZlbnQqKTsKICAgICAvLyBWYWxpZGF0ZXMgZWFjaCBvZiB0aGUgY29udHJvbHMs
IGFuZCBzdG9yZXMgY29udHJvbHMgb2Ygd2hpY2ggJ2ludmFsaWQnCiAgICAgLy8gZXZlbnQgd2Fz
IG5vdCBjYW5jZWxlZCB0byB0aGUgc3BlY2lmaWVkIHZlY3Rvci4KLSAgICB2b2lkIGNvbGxlY3RV
bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PiA+Jik7CisgICAgdm9pZCBjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKFZlY3Rv
cjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50PiA+Jik7CiAKICAgICBmcmllbmQgY2xhc3Mg
SFRNTEZvcm1Db2xsZWN0aW9uOwogCkBAIC0xNTEsNyArMTUyLDcgQEAgcHJpdmF0ZToKIAogICAg
IHVuc2lnbmVkIG1fYXNzb2NpYXRlZEVsZW1lbnRzQmVmb3JlSW5kZXg7CiAgICAgdW5zaWduZWQg
bV9hc3NvY2lhdGVkRWxlbWVudHNBZnRlckluZGV4OwotICAgIFZlY3RvcjxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Kj4gbV9hc3NvY2lhdGVkRWxlbWVudHM7CisgICAgVmVjdG9yPEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCo+IG1fYXNzb2NpYXRlZEVsZW1lbnRzOwogICAgIFZlY3RvcjxIVE1MSW1hZ2VF
bGVtZW50Kj4gbV9pbWFnZUVsZW1lbnRzOwogCiAgICAgYm9vbCBtX3dhc1VzZXJTdWJtaXR0ZWQ7
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzQyMikKKysrIFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDkg
KzEzOSwxMSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUNoZWNrZWRSYWRpCiAgICAg
ICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAKICAgICBpZiAoZm9y
bSgpKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGNv
bnRyb2xzID0gZm9ybSgpLT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKKyAgICAgICAgY29uc3QgVmVj
dG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBjb250cm9scyA9IGZvcm0oKS0+YXNzb2NpYXRl
ZEVsZW1lbnRzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb250cm9scy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJv
bCA9IGNvbnRyb2xzW2ldOworICAgICAgICAgICAgaWYgKCFjb250cm9sc1tpXS0+aXNGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Kj4oY29udHJvbHNbaV0pOwogICAgICAgICAgICAgaWYgKGNvbnRyb2wtPm5hbWUo
KSAhPSBuYW1lKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAo
Y29udHJvbC0+dHlwZSgpICE9IHR5cGUoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcAkocmV2aXNpb24gNzM0MjIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNyArNDYsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1pbmxpbmUgSFRNTE9iamVjdEVsZW1l
bnQ6OkhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpIAoraW5saW5lIEhUTUxPYmplY3RF
bGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpIAogICAgIDogSFRNTFBsdWdJbkltYWdlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwg
Y3JlYXRlZEJ5UGFyc2VyKQorICAgICwgRm9ybUFzc29jaWF0ZWRFbGVtZW50KGZvcm0pCiAgICAg
LCBtX2RvY05hbWVkSXRlbSh0cnVlKQogICAgICwgbV91c2VGYWxsYmFja0NvbnRlbnQoZmFsc2Up
CiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUob2JqZWN0VGFnKSk7CisgICAgaWYgKCF0aGlzLT5m
b3JtKCkpCisgICAgICAgIHNldEZvcm0oZmluZEZvcm1BbmNlc3RvcigpKTsKKyAgICBpZiAodGhp
cy0+Zm9ybSgpKQorICAgICAgICB0aGlzLT5mb3JtKCktPnJlZ2lzdGVyRm9ybUVsZW1lbnQodGhp
cyk7CiB9CiAKLVBhc3NSZWZQdHI8SFRNTE9iamVjdEVsZW1lbnQ+IEhUTUxPYmplY3RFbGVtZW50
OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50
LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK2lubGluZSBIVE1MT2JqZWN0RWxlbWVudDo6fkhUTUxP
YmplY3RFbGVtZW50KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxPYmplY3RFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpKTsKKyAgICBpZiAoZm9ybSgp
KQorICAgICAgICBmb3JtKCktPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOworfQorCitQYXNzUmVm
UHRyPEhUTUxPYmplY3RFbGVtZW50PiBIVE1MT2JqZWN0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50
KiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhUTUxPYmplY3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtLCBjcmVhdGVkQnlQYXJz
ZXIpKTsKIH0KIAogUmVuZGVyV2lkZ2V0KiBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyV2lkZ2V0
Rm9ySlNCaW5kaW5ncygpIGNvbnN0CkBAIC0zMTMsNiArMzI0LDE0IEBAIHZvaWQgSFRNTE9iamVj
dEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW0KICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpy
ZW1vdmVkRnJvbURvY3VtZW50KCk7CiB9CiAKK3ZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmF0dHJp
YnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCit7CisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBmb3JtQXR0cikKKyAgICAgICAgZm9ybUF0dHJpYnV0ZUNoYW5n
ZWQoKTsKKyAgICBlbHNlCisgICAgICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmF0dHJpYnV0
ZUNoYW5nZWQoYXR0ciwgcHJlc2VydmVEZWNscyk7Cit9CisKIHZvaWQgSFRNTE9iamVjdEVsZW1l
bnQ6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hh
bmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKIHsKICAgICB1cGRh
dGVEb2NOYW1lZEl0ZW0oKTsKQEAgLTQ1Myw0ICs0NzIsMjcgQEAgdm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6YWRkU3VicmVzb3VyY2VBdAogICAgICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBk
b2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1c2VNYXApKTsKIH0KIAordm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCit7CisgICAgRm9ybUFzc29jaWF0ZWRF
bGVtZW50OjppbnNlcnRlZEludG9UcmVlKCk7CisgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKK30KKwordm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVt
b3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkKK3sKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OnJl
bW92ZWRGcm9tVHJlZSgpOworICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlbW92ZWRGcm9t
VHJlZShkZWVwKTsKK30KKworYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEo
Rm9ybURhdGFMaXN0JiwgYm9vbCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50cyB0aGlzIGZ1
bmN0aW9uLgorICAgIHJldHVybiBmYWxzZTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBIVE1M
T2JqZWN0RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9u
YW1lLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogbV9uYW1lOworfQorCiB9CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TE9iamVjdEVsZW1lbnQuaAkocmV2aXNpb24gNzM0MjIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTMgKzIzLDE3IEBACiAjaWZuZGVm
IEhUTUxPYmplY3RFbGVtZW50X2gKICNkZWZpbmUgSFRNTE9iamVjdEVsZW1lbnRfaAogCisjaW5j
bHVkZSAiRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBsdWdJbkltYWdl
RWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxPYmplY3RFbGVt
ZW50IDogcHVibGljIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQgeworY2xhc3MgSFRNTEZvcm1FbGVt
ZW50OworCitjbGFzcyBIVE1MT2JqZWN0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50LCBwdWJsaWMgRm9ybUFzc29jaWF0ZWRFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MT2JqZWN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCosIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICB2aXJ0
dWFsIH5IVE1MT2JqZWN0RWxlbWVudCgpOwogCiAgICAgYm9vbCBpc0RvY05hbWVkSXRlbSgpIGNv
bnN0IHsgcmV0dXJuIG1fZG9jTmFtZWRJdGVtOyB9CiAKQEAgLTQwLDEwICs0NCwyNSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIHVzZUZhbGxiYWNrQ29udGVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlRmFsbGJhY2tDb250ZW50OyB9CiAgICAgdm9pZCByZW5kZXJGYWxsYmFja0NvbnRlbnQo
KTsKIAorICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBGb3JtQXNzb2NpYXRlZEVsZW1lbnQKKyAg
ICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0oKSBjb25zdCB7IHJldHVybiBGb3JtQXNzb2NpYXRlZEVs
ZW1lbnQ6OmZvcm0oKTsgfQorCisgICAgdmlydHVhbCBib29sIGlzRm9ybUNvbnRyb2xFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9y
bURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRl
Q2hhbmdlZChBdHRyaWJ1dGUqLCBib29sIHByZXNlcnZlRGVjbHMgPSBmYWxzZSk7CisKKyAgICB1
c2luZyBUcmVlU2hhcmVkPENvbnRhaW5lck5vZGU+OjpyZWY7CisgICAgdXNpbmcgVHJlZVNoYXJl
ZDxDb250YWluZXJOb2RlPjo6ZGVyZWY7CisKIHByaXZhdGU6Ci0gICAgSFRNTE9iamVjdEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
OworICAgIEhUTUxPYmplY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCos
IEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJv
bVRyZWUoYm9vbCBkZWVwKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJl
bmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CkBA
IC02OSw2ICs4OCwxMSBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgaGFzVmFsaWRDbGFzc0lk
KCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRm9ybUFzc29jaWF0ZWRFbGVtZW50KCkgeyByZWYo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkZvcm1Bc3NvY2lhdGVkRWxlbWVudCgpIHsgZGVy
ZWYoKTsgfQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFt
ZSgpIGNvbnN0OworCiAgICAgQXRvbWljU3RyaW5nIG1faWQ7CiAgICAgU3RyaW5nIG1fY2xhc3NJ
ZDsKICAgICBib29sIG1fZG9jTmFtZWRJdGVtIDogMTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
VGFnTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgko
cmV2aXNpb24gNzM0MjIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIG5vYnIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAog
bm9lbWJlZCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBub2ZyYW1lcyBpbnRlcmZhY2VOYW1l
PUhUTUxFbGVtZW50CiBub2xheWVyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLW9iamVjdCBj
b25zdHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyCitvYmplY3QgY29uc3RydWN0b3JOZWVkc0Zv
cm1FbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzQ3JlYXRlZEJ5UGFyc2VyCiBvbCBpbnRlcmZhY2VO
YW1lPUhUTUxPTGlzdEVsZW1lbnQKIG9wdGdyb3VwIGludGVyZmFjZU5hbWU9SFRNTE9wdEdyb3Vw
RWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50CiBvcHRpb24gY29uc3RydWN0b3JO
ZWVkc0Zvcm1FbGVtZW50CkluZGV4OiBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAJKHJldmlz
aW9uIDczNDIyKQorKysgV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUFMV0FZ
U19JTkxJTkUgVmFsaWRhdGlvbk1lc3NhZ2U6OlZhbGlkYXRpb25NZXNzYWdlKEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGVsZW1lbnQpCitBTFdBWVNfSU5MSU5FIFZhbGlkYXRpb25NZXNzYWdlOjpW
YWxpZGF0aW9uTWVzc2FnZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgOiBt
X2VsZW1lbnQoZWxlbWVudCkKIHsKIH0KQEAgLTQ1LDcgKzQ1LDcgQEAgVmFsaWRhdGlvbk1lc3Nh
Z2U6On5WYWxpZGF0aW9uTWVzc2FnZSgpCiAgICAgaGlkZU1lc3NhZ2UoKTsKIH0KIAotUGFzc093
blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4gVmFsaWRhdGlvbk1lc3NhZ2U6OmNyZWF0ZShIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KiBlbGVtZW50KQorUGFzc093blB0cjxWYWxpZGF0aW9uTWVzc2FnZT4g
VmFsaWRhdGlvbk1lc3NhZ2U6OmNyZWF0ZShGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsZW1lbnQp
CiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWYWxpZGF0aW9uTWVzc2FnZShlbGVtZW50KSk7
CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAkocmV2aXNpb24gNzM0MjIpCisrKyBX
ZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjAg
KzM4LDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTEZvcm1Db250cm9s
RWxlbWVudDsKK2NsYXNzIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDsKIAogY2xhc3MgVmFsaWRhdGlv
bk1lc3NhZ2UgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBjcmVhdGUoSFRNTEZvcm1Db250cm9sRWxlbWVudCop
OworICAgIHN0YXRpYyBQYXNzT3duUHRyPFZhbGlkYXRpb25NZXNzYWdlPiBjcmVhdGUoRm9ybUFz
c29jaWF0ZWRFbGVtZW50Kik7CiAgICAgflZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAgU3RyaW5n
IG1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2U7IH0KICAgICB2b2lkIHNldE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6Ci0gICAgVmFsaWRhdGlvbk1lc3NhZ2UoSFRN
TEZvcm1Db250cm9sRWxlbWVudCopOworICAgIFZhbGlkYXRpb25NZXNzYWdlKEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCopOwogICAgIHZvaWQgaGlkZU1lc3NhZ2UoVGltZXI8VmFsaWRhdGlvbk1lc3Nh
Z2U+KiA9IDApOwogCi0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogbV9lbGVtZW50OworICAg
IEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogbV9lbGVtZW50OwogICAgIFN0cmluZyBtX21lc3NhZ2U7
CiAgICAgT3duUHRyPFRpbWVyPFZhbGlkYXRpb25NZXNzYWdlPiA+IG1fdGltZXI7CiB9OwpJbmRl
eDogV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9WYWxpZGl0eVN0YXRlLmNwcAkocmV2aXNpb24gNzM0MjIpCisrKyBXZWJDb3JlL2h0bWwv
VmFsaWRpdHlTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDI1ICszNywyNiBAQCB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBTdHJpbmcgVmFsaWRpdHlTdGF0ZTo6dmFsaWRhdGlv
bk1lc3NhZ2UoKSBjb25zdAogewotICAgIGlmICghbV9jb250cm9sLT53aWxsVmFsaWRhdGUoKSkK
KyAgICBpZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+d2lsbFZhbGlkYXRlKCkpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGlmIChjdXN0b21FcnJvcigpKQogICAgICAgICBy
ZXR1cm4gbV9jdXN0b21FcnJvck1lc3NhZ2U7Ci0gICAgYm9vbCBpc0lucHV0RWxlbWVudCA9IG1f
Y29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZyk7Ci0gICAgYm9vbCBpc1RleHRBcmVhRWxlbWVu
dCA9IG1fY29udHJvbC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZyk7CisgICAgSFRNTEVsZW1lbnQq
IGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG1fY29udHJvbCk7CisgICAgYm9vbCBpc0lucHV0RWxl
bWVudCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzVGFn
TmFtZShpbnB1dFRhZyk7CisgICAgYm9vbCBpc1RleHRBcmVhRWxlbWVudCA9IGVsZW1lbnQtPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkgJiYgZWxlbWVudC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZyk7
CiAgICAgLy8gVGhlIG9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgY2hlY2tzIGlzIG1lYW5pbmdmdWwu
IGUuZy4gV2UnZCBsaWtlIHRvIHNob3cgdGhlCiAgICAgLy8gdmFsdWVNaXNzaW5nIG1lc3NhZ2Ug
ZXZlbiBpZiB0aGUgY29udHJvbCBoYXMgb3RoZXIgdmFsaWRhdGlvbiBlcnJvcnMuCiAgICAgaWYg
KHZhbHVlTWlzc2luZygpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRyb2wtPmhhc1RhZ05hbWUoc2Vs
ZWN0VGFnKSkKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKICAg
ICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclNlbGVjdFRl
eHQoKTsKICAgICAgICAgaWYgKGlzSW5wdXRFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpLT52YWx1ZU1pc3NpbmdUZXh0
KCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVs
ZW1lbnQpLT52YWx1ZU1pc3NpbmdUZXh0KCk7CiAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVz
c2FnZVZhbHVlTWlzc2luZ1RleHQoKTsKICAgICB9CiAgICAgaWYgKHR5cGVNaXNtYXRjaCgpKSB7
CiAgICAgICAgIGlmIChpc0lucHV0RWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKS0+dHlwZU1pc21hdGNoVGV4dCgpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50
KS0+dHlwZU1pc21hdGNoVGV4dCgpOwogICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VU
eXBlTWlzbWF0Y2hUZXh0KCk7CiAgICAgfQogICAgIGlmIChwYXR0ZXJuTWlzbWF0Y2goKSkKQEAg
LTY1LDcgKzY2LDcgQEAgU3RyaW5nIFZhbGlkaXR5U3RhdGU6OnZhbGlkYXRpb25NZXNzYWdlKAog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRl
eHQgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCo+KG1fY29udHJvbCk7
CisgICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHZh
bGlkYXRpb25NZXNzYWdlVG9vTG9uZ1RleHQobnVtR3JhcGhlbWVDbHVzdGVycyh0ZXh0LT52YWx1
ZSgpKSwgdGV4dC0+bWF4TGVuZ3RoKCkpOwogICAgIH0KICAgICBpZiAocmFuZ2VVbmRlcmZsb3co
KSkgewpAQCAtNzMsMjEgKzc0LDIxIEBAIFN0cmluZyBWYWxpZGl0eVN0YXRlOjp2YWxpZGF0aW9u
TWVzc2FnZSgKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVz
c2FnZVJhbmdlVW5kZXJmbG93VGV4dChzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9j
b250cm9sKS0+bWluaW11bVN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNz
YWdlUmFuZ2VVbmRlcmZsb3dUZXh0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVt
ZW50KS0+bWluaW11bVN0cmluZygpKTsKICAgICB9CiAgICAgaWYgKHJhbmdlT3ZlcmZsb3coKSkg
ewogICAgICAgICBpZiAoIWlzSW5wdXRFbGVtZW50KSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VSYW5nZU92ZXJmbG93VGV4dChzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKS0+bWF4aW11bVN0cmluZygpKTsKKyAgICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VPdmVyZmxvd1RleHQoc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpLT5tYXhpbXVtU3RyaW5nKCkpOwogICAgIH0KICAg
ICBpZiAoc3RlcE1pc21hdGNoKCkpIHsKICAgICAgICAgaWYgKCFpc0lucHV0RWxlbWVudCkgewog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obV9jb250cm9sKTsKKyAgICAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7
CiAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVN0ZXBNaXNtYXRjaFRleHQoaW5wdXQt
PnN0ZXBCYXNlU3RyaW5nKCksIGlucHV0LT5zdGVwU3RyaW5nKCkpOwogICAgIH0KIApAQCAtOTcs
MTcgKzk4LDE5IEBAIFN0cmluZyBWYWxpZGl0eVN0YXRlOjp2YWxpZGF0aW9uTWVzc2FnZSgKIHZv
aWQgVmFsaWRpdHlTdGF0ZTo6c2V0Q3VzdG9tRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKIHsKICAgICBtX2N1c3RvbUVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgbV9jb250
cm9sLT5zZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKKyAgICBpZiAobV9jb250cm9sLT5pc0Zvcm1D
b250cm9sRWxlbWVudCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Kj4obV9jb250cm9sKS0+c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiB9CiAKIGJvb2wgVmFs
aWRpdHlTdGF0ZTo6dmFsdWVNaXNzaW5nKCkgY29uc3QKIHsKLSAgICBpZiAobV9jb250cm9sLT5o
YXNUYWdOYW1lKGlucHV0VGFnKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOworICAgIEhUTUxFbGVt
ZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChtX2NvbnRyb2wpOworICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgcmV0
dXJuIGlucHV0LT52YWx1ZU1pc3NpbmcoaW5wdXQtPnZhbHVlKCkpOwogICAgIH0KLSAgICBpZiAo
bV9jb250cm9sLT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgewotICAgICAgICBIVE1MVGV4dEFy
ZWFFbGVtZW50KiB0ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPiht
X2NvbnRyb2wpOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkgewor
ICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxU
ZXh0QXJlYUVsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHRleHRBcmVhLT52YWx1
ZU1pc3NpbmcodGV4dEFyZWEtPnZhbHVlKCkpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMTUsMTQgKzExOCwxNCBAQCBib29sIFZhbGlkaXR5U3RhdGU6OnZhbHVlTWlzc2luZygpIGNv
bnN0CiAKIGJvb2wgVmFsaWRpdHlTdGF0ZTo6dHlwZU1pc21hdGNoKCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fY29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgaWYgKCF0b0hUTUxFbGVt
ZW50KG1fY29udHJvbCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wp
LT50eXBlTWlzbWF0Y2goKTsKIH0KIAogYm9vbCBWYWxpZGl0eVN0YXRlOjpwYXR0ZXJuTWlzbWF0
Y2goKSBjb25zdAogewotICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkK
KyAgICBpZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFtZShpbnB1dFRhZykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgIHJldHVybiBpbnB1
dC0+cGF0dGVybk1pc21hdGNoKGlucHV0LT52YWx1ZSgpKTsKQEAgLTEzMCwxMSArMTMzLDExIEBA
IGJvb2wgVmFsaWRpdHlTdGF0ZTo6cGF0dGVybk1pc21hdGNoKCkgY28KIAogYm9vbCBWYWxpZGl0
eVN0YXRlOjp0b29Mb25nKCkgY29uc3QKIHsKLSAgICBpZiAobV9jb250cm9sLT5oYXNUYWdOYW1l
KGlucHV0VGFnKSkgeworICAgIGlmICh0b0hUTUxFbGVtZW50KG1fY29udHJvbCktPmhhc1RhZ05h
bWUoaW5wdXRUYWcpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG1fY29udHJvbCk7CiAgICAgICAgIHJldHVybiBpbnB1
dC0+dG9vTG9uZyhpbnB1dC0+dmFsdWUoKSwgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OkNo
ZWNrRGlydHlGbGFnKTsKICAgICB9Ci0gICAgaWYgKG1fY29udHJvbC0+aGFzVGFnTmFtZSh0ZXh0
YXJlYVRhZykpIHsKKyAgICBpZiAodG9IVE1MRWxlbWVudChtX2NvbnRyb2wpLT5oYXNUYWdOYW1l
KHRleHRhcmVhVGFnKSkgewogICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYSA9
IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgICAgICBy
ZXR1cm4gdGV4dEFyZWEtPnRvb0xvbmcodGV4dEFyZWEtPnZhbHVlKCksIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjpDaGVja0RpcnR5RmxhZyk7CiAgICAgfQpAQCAtMTQzLDcgKzE0Niw3IEBA
IGJvb2wgVmFsaWRpdHlTdGF0ZTo6dG9vTG9uZygpIGNvbnN0CiAKIGJvb2wgVmFsaWRpdHlTdGF0
ZTo6cmFuZ2VVbmRlcmZsb3coKSBjb25zdAogewotICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdO
YW1lKGlucHV0VGFnKSkKKyAgICBpZiAoIXRvSFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFn
TmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwog
ICAgIHJldHVybiBpbnB1dC0+cmFuZ2VVbmRlcmZsb3coaW5wdXQtPnZhbHVlKCkpOwpAQCAtMTUx
LDcgKzE1NCw3IEBAIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cmFuZ2VVbmRlcmZsb3coKSBjb24KIAog
Ym9vbCBWYWxpZGl0eVN0YXRlOjpyYW5nZU92ZXJmbG93KCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
Y29udHJvbC0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgaWYgKCF0b0hUTUxFbGVtZW50KG1f
Y29udHJvbCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4obV9jb250cm9sKTsKICAgICByZXR1cm4gaW5wdXQtPnJhbmdlT3ZlcmZsb3coaW5wdXQtPnZh
bHVlKCkpOwpAQCAtMTU5LDcgKzE2Miw3IEBAIGJvb2wgVmFsaWRpdHlTdGF0ZTo6cmFuZ2VPdmVy
ZmxvdygpIGNvbnMKIAogYm9vbCBWYWxpZGl0eVN0YXRlOjpzdGVwTWlzbWF0Y2goKSBjb25zdAog
ewotICAgIGlmICghbV9jb250cm9sLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICBpZiAoIXRv
SFRNTEVsZW1lbnQobV9jb250cm9sKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihtX2NvbnRyb2wpOwogICAgIHJldHVybiBpbnB1dC0+c3RlcE1pc21h
dGNoKGlucHV0LT52YWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuaAkocmV2aXNpb24gNzM0
MjIpCisrKyBXZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCwxNCArMjQsMTQgQEAKICNpZm5kZWYgVmFsaWRpdHlTdGF0ZV9oCiAjZGVmaW5lIFZhbGlkaXR5
U3RhdGVfaAogCi0jaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUg
IkZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVmFsaWRpdHlTdGF0ZSA6IHB1YmxpYyBOb25j
b3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VmFsaWRpdHlTdGF0ZT4g
Y3JlYXRlKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wpCisgICAgc3RhdGljIFBhc3NP
d25QdHI8VmFsaWRpdHlTdGF0ZT4gY3JlYXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogY29udHJv
bCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVmFsaWRpdHlTdGF0ZShjb250
cm9sKSk7CiAgICAgfQpAQCAtNTQsMTIgKzU0LDEyIEBAIHB1YmxpYzoKICAgICBib29sIHZhbGlk
KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgVmFsaWRpdHlTdGF0ZShIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KiBjb250cm9sKSA6IG1fY29udHJvbChjb250cm9sKSB7IH0KKyAgICBWYWxpZGl0eVN0
YXRlKEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogY29udHJvbCkgOiBtX2NvbnRyb2woY29udHJvbCkg
eyB9CiAKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkQ29sb3JTdHJpbmcoY29uc3QgU3RyaW5nJik7
CiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZEVtYWlsQWRkcmVzcyhjb25zdCBTdHJpbmcmKTsKIAot
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIG1fY29udHJvbDsKKyAgICBGb3JtQXNzb2NpYXRl
ZEVsZW1lbnQqIG1fY29udHJvbDsKICAgICBTdHJpbmcgbV9jdXN0b21FcnJvck1lc3NhZ2U7CiB9
OwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCShyZXZpc2lvbiA3MzQyMikKKysr
IFdlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1
LDEwICsxNzUsMTEgQEAgUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lvbj4gRm9ybVN1Ym1pc3Npbwog
ICAgIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5nPiA+IGZvcm1WYWx1ZXM7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGZvcm0tPmFz
c29jaWF0ZWRFbGVtZW50cygpW2ldOwotICAgICAgICBpZiAoIWNvbnRyb2wtPmRpc2FibGVkKCkp
CisgICAgICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogY29udHJvbCA9IGZvcm0tPmFzc29jaWF0
ZWRFbGVtZW50cygpW2ldOworICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVs
ZW1lbnQoY29udHJvbCk7CisgICAgICAgIGlmICghZWxlbWVudC0+ZGlzYWJsZWQoKSkKICAgICAg
ICAgICAgIGNvbnRyb2wtPmFwcGVuZEZvcm1EYXRhKCpkb21Gb3JtRGF0YSwgaXNNdWx0aVBhcnRG
b3JtKTsKLSAgICAgICAgaWYgKGNvbnRyb2wtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKICAgICAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KGNvbnRyb2wpOwogICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7CiAgICAg
ICAgICAgICAgICAgZm9ybVZhbHVlcy5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4oaW5wdXQt
Pm5hbWUoKSwgaW5wdXQtPnZhbHVlKCkpKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzM0
MjIpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTAtMTItMDYgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZXQg
SFRNTE9iamVjdEVsZW1lbnQgYmUgYSBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MjEKKworICAgICAgICBN
b2RpZmllZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50IGluc3RlYWQgb2YgSFRNTEZvcm1D
b250cm9sRWxlbWVudC4KKworICAgICAgICAqIHNyYy9XZWJGb3JtRWxlbWVudC5jcHA6IAorICAg
ICAgICAoV2ViS2l0OjpXZWJGb3JtRWxlbWVudDo6Z2V0Rm9ybUNvbnRyb2xFbGVtZW50cyk6IE1v
ZGlmaWVkIHRvIHVzZQorICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50LgorICAgICAgICAqIHNyYy9XZWJQYXNzd29yZEZvcm1VdGls
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmZpbmRQYXNzd29yZEZvcm1GaWVsZHMpOiBEaXR0by4K
KyAgICAgICAgKiBzcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdldEJ1dHRvblRvQWN0aXZhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Okhhc1N1
aXRhYmxlVGV4dEVsZW1lbnQpOiBEaXR0by4KKwogMjAxMC0xMi0wNiAgTmF0ZSBDaGFwaW4gIDxq
YXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gNzM0MjIp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTIsOSArOTIsMTIgQEAgdm9pZCBXZWJGb3JtRWxlbWVudDo6Z2V0Rm9ybUNvbnRyb2xF
bGVtZQogICAgIC8vIHJlLWV2YWx1YXRpbmcgc2l6ZSBlYWNoIHRpbWUuIEFsc28sIGNvbnNpZGVy
IHJlZmFjdG9yaW5nIHRoaXMgY29kZSBzbyB0aGF0CiAgICAgLy8gd2UgZG9uJ3QgY2FsbCBmb3Jt
LT5hc3NvY2lhdGVkRWxlbWVudHMoKSBtdWx0aXBsZSB0aW1lcy4KICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgIGlmIChmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6aW5wdXRUYWcpCi0gICAgICAgICAgICB8fCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMo
KVtpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0VGFnKSkKLSAgICAgICAgICAgIHRl
bXBWZWN0b3IuYXBwZW5kKGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpW2ldKTsKKyAgICAgICAg
aWYgKCFmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXS0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGZvcm0tPmFz
c29jaWF0ZWRFbGVtZW50cygpW2ldKTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmlucHV0VGFnKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6c2VsZWN0VGFnKSkKKyAgICAgICAgICAgIHRlbXBWZWN0b3IuYXBwZW5k
KGVsZW1lbnQpOwogICAgIH0KICAgICByZXN1bHQuYXNzaWduKHRlbXBWZWN0b3IpOwogfQpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5jcHAJKHJldmlz
aW9uIDczNDIyKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYXNzd29yZEZvcm1VdGlscy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDkgKzY1LDExIEBAIHZvaWQgZmluZFBhc3N3b3JkRm9y
bUZpZWxkcyhIVE1MRm9ybUVsZW0KIAogICAgIGludCBmaXJzdFBhc3N3b3JkSW5kZXggPSAwOwog
ICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBwYXNzd29yZCBmaWVsZHMgYW5kIGFjdGl2YXRlZCBzdWJt
aXQgYnV0dG9uCi0gICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZm9y
bUVsZW1lbnRzID0gZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgY29uc3QgVmVjdG9y
PEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBmb3JtRWxlbWVudHMgPSBmb3JtLT5hc3NvY2lhdGVk
RWxlbWVudHMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXpl
KCk7IGkrKykgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9
IGZvcm1FbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFmb3JtRWxlbWVudHNbaV0tPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Kj4oZm9ybUVsZW1lbnRzW2ldKTsKICAgICAgICAgaWYgKGZvcm1FbGVtZW50LT5pc0Fj
dGl2YXRlZFN1Ym1pdCgpKQogICAgICAgICAgICAgZmllbGRzLT5zdWJtaXQgPSBmb3JtRWxlbWVu
dDsKIApAQCAtOTAsNyArOTIsOSBAQCB2b2lkIGZpbmRQYXNzd29yZEZvcm1GaWVsZHMoSFRNTEZv
cm1FbGVtCiAgICAgaWYgKCFmaWVsZHMtPnBhc3N3b3Jkcy5pc0VtcHR5KCkpIHsKICAgICAgICAg
Ly8gVGhlbiwgc2VhcmNoIGJhY2t3YXJkcyBmb3IgdGhlIHVzZXJuYW1lIGZpZWxkCiAgICAgICAg
IGZvciAoaW50IGkgPSBmaXJzdFBhc3N3b3JkSW5kZXggLSAxOyBpID49IDA7IGktLSkgewotICAg
ICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVu
dHNbaV07CisgICAgICAgICAgICBpZiAoIWZvcm1FbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9s
RWxlbWVudCo+KGZvcm1FbGVtZW50c1tpXSk7CiAgICAgICAgICAgICBpZiAoIWZvcm1FbGVtZW50
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3Jt
RGF0YS5jcHAJKHJldmlzaW9uIDczNDIyKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFy
Y2hhYmxlRm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3NywxMCBAQCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KiBHZXRCdXR0b25Ub0FjdGl2CiB7CiAgICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudCogZmlyc3RTdWJtaXRCdXR0b24gPSAwOwogICAgIC8vIEZJWE1FOiBDb25zaWRl
ciByZWZhY3RvcmluZyB0aGlzIGNvZGUgc28gdGhhdCB3ZSBkb24ndCBjYWxsIGZvcm0tPmFzc29j
aWF0ZWRFbGVtZW50cygpIHR3aWNlLgotICAgIGZvciAoVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaShmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5iZWdp
bigpKTsgaSAhPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKS5lbmQoKTsgKytpKSB7Ci0gICAg
ICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBmb3JtRWxlbWVudCA9ICppOworICAgIGZvciAoVmVj
dG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpKGZvcm0tPmFzc29j
aWF0ZWRFbGVtZW50cygpLmJlZ2luKCkpOyBpICE9IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygp
LmVuZCgpOyArK2kpIHsKKyAgICAgIGlmICghKCppKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
KyAgICAgICAgICBjb250aW51ZTsKKyAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1F
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KCppKTsKICAgICAg
IGlmIChmb3JtRWxlbWVudC0+aXNBY3RpdmF0ZWRTdWJtaXQoKSkKICAgICAgICAgICAvLyBUaGVy
ZSdzIGEgYnV0dG9uIHRoYXQgaXMgYWxyZWFkeSBhY3RpdmF0ZWQgZm9yIHN1Ym1pdCwgcmV0dXJu
IDAuCiAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTUsOCArMTU3LDEwIEBAIGJvb2wgSGFzU3Vp
dGFibGVUZXh0RWxlbWVudChjb25zdCBIVE1MRm8KIAogICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRl
eHRFbGVtZW50ID0gMDsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgcmVmYWN0b3JpbmcgdGhpcyBj
b2RlIHNvIHRoYXQgd2UgZG9uJ3QgY2FsbCBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKSB0d2lj
ZS4KLSAgICBmb3IgKFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj46OmNvbnN0X2l0ZXJh
dG9yIGkoZm9ybS0+YXNzb2NpYXRlZEVsZW1lbnRzKCkuYmVnaW4oKSk7IGkgIT0gZm9ybS0+YXNz
b2NpYXRlZEVsZW1lbnRzKCkuZW5kKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KiBmb3JtRWxlbWVudCA9ICppOworICAgIGZvciAoVmVjdG9yPEZvcm1Bc3NvY2lhdGVk
RWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBpKGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLmJl
Z2luKCkpOyBpICE9IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLmVuZCgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKCEoKmkpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1FbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KCppKTsKICAgICAgICAgaWYgKGZvcm1F
bGVtZW50LT5kaXNhYmxlZCgpIHx8IGZvcm1FbGVtZW50LT5uYW1lKCkuaXNOdWxsKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIApJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDIyKQorKysgV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0xMi0wNiAg
S2VuaWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExldCBIVE1MT2JqZWN0RWxlbWVudCBiZSBh
IGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00ODgyMQorCisgICAgICAgIE1vZGlmaWVkIHRvIHVzZSBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQgaW5zdGVhZCBvZiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50LgorCisgICAg
ICAgICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAgICAgICgtW1dlYkhU
TUxSZXByZXNlbnRhdGlvbiBlbGVtZW50V2l0aE5hbWU6aW5Gb3JtOl0pOiBNb2RpZmllZCB0byB1
c2UKKyAgICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50IGluc3RlYWQgb2YgSFRNTEZvcm1Db250
cm9sRWxlbWVudC4KKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGNvbnRyb2xzSW5G
b3JtOl0pOiBEaXR0by4KKwogMjAxMC0xMi0wNiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0JKHJldmlzaW9uIDczNDIyKQor
KysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjg1LDEyICsyODUsMTIgQEAgLSAoRE9NRWxlbWVudCAqKWVsZW1lbnRXaXRoTmFt
ZTooTlNTdHJpbgogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVu
dEZyb21ET01FbGVtZW50KGZvcm0pOwogICAgIGlmICghZm9ybUVsZW1lbnQpCiAgICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgY29uc3QgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiYgZWxl
bWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CisgICAgY29uc3QgVmVj
dG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5hc3Nv
Y2lhdGVkRWxlbWVudHMoKTsKICAgICBBdG9taWNTdHJpbmcgdGFyZ2V0TmFtZSA9IG5hbWU7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsdCA9IGVsZW1lbnRzW2ldOworICAgICAgICBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQqIGVsdCA9IGVsZW1lbnRzW2ldOwogICAgICAgICBpZiAoZWx0
LT5uYW1lKCkgPT0gdGFyZ2V0TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBraXQoZWx0KTsKKyAg
ICAgICAgICAgIHJldHVybiBraXQodG9IVE1MRWxlbWVudChlbHQpKTsKICAgICB9CiAgICAgcmV0
dXJuIG5pbDsKIH0KQEAgLTMzMywxMCArMzMzLDEwIEBAIC0gKE5TQXJyYXkgKiljb250cm9sc0lu
Rm9ybTooRE9NRWxlbWVudCAKICAgICBpZiAoIWZvcm1FbGVtZW50KQogICAgICAgICByZXR1cm4g
bmlsOwogICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHRzID0gbmlsOwotICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29j
aWF0ZWRFbGVtZW50cygpOworICAgIGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQq
PiYgZWxlbWVudHMgPSBmb3JtRWxlbWVudC0+YXNzb2NpYXRlZEVsZW1lbnRzKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlm
IChlbGVtZW50c1tpXS0+aXNFbnVtZXJhdGFibGUoKSkgeyAvLyBTa2lwIG9wdGlvbiBlbGVtZW50
cywgb3RoZXIgZHVkcwotICAgICAgICAgICAgRE9NRWxlbWVudCogZGUgPSBraXQoZWxlbWVudHNb
aV0pOworICAgICAgICAgICAgRE9NRWxlbWVudCogZGUgPSBraXQodG9IVE1MRWxlbWVudChlbGVt
ZW50c1tpXSkpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHRzKQogICAgICAgICAgICAgICAgIHJl
c3VsdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmRlXTsKICAgICAgICAgICAg
IGVsc2UKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93
aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQyMikKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTItMDYgIEtlbmljaGkgSXNoaWJh
c2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBMZXQgSFRNTE9iamVjdEVsZW1lbnQgYmUgYSBmb3JtIGFzc29jaWF0
ZWQgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDg4MjEKKworICAgICAgICBNb2RpZmllZCB0byB1c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50
IGluc3RlYWQgb2YgSFRNTEZvcm1Db250cm9sRWxlbWVudC4KKworICAgICAgICAqIFdlYkZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjplbGVtZW50V2l0aE5hbWUpOiBNb2RpZmllZCB0byB1
c2UgRm9ybUFzc29jaWF0ZWRFbGVtZW50CisgICAgICAgIGluc3RlYWQgb2YgSFRNTEZvcm1Db250
cm9sRWxlbWVudC4KKyAgICAgICAgKFdlYkZyYW1lOjpjb250cm9sc0luRm9ybSk6IERpdHRvLgor
CiAyMDEwLTEyLTA1ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBX
aW5kb3dzIHByb2R1Y3Rpb24gYnVpbGQgZml4CkluZGV4OiBXZWJLaXQvd2luL1dlYkZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gNzM0MjIp
CisrKyBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNCwxMiAr
MTEzNCwxNCBAQCBIUkVTVUxUIFdlYkZyYW1lOjplbGVtZW50V2l0aE5hbWUoQlNUUiBuCiAgICAg
aWYgKCFmb3JtKQogICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOwogCi0gICAgSFRNTEZvcm1F
bGVtZW50ICpmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQoZm9ybSk7Cisg
ICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50RnJvbURPTUVsZW1l
bnQoZm9ybSk7CiAgICAgaWYgKGZvcm1FbGVtZW50KSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0
ZWRFbGVtZW50cygpOworICAgICAgICBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50
Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29jaWF0ZWRFbGVtZW50cygpOwogICAgICAg
ICBBdG9taWNTdHJpbmcgdGFyZ2V0TmFtZSgoVUNoYXIqKW5hbWUsIFN5c1N0cmluZ0xlbihuYW1l
KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgKmVsdCA9IGVsZW1l
bnRzW2ldOworICAgICAgICAgICAgaWYgKCFlbGVtZW50c1tpXS0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGVsdCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihl
bGVtZW50c1tpXSk7CiAgICAgICAgICAgICAvLyBTa2lwIG9wdGlvbiBlbGVtZW50cywgb3RoZXIg
ZHVkcwogICAgICAgICAgICAgaWYgKGVsdC0+bmFtZSgpID09IHRhcmdldE5hbWUpIHsKICAgICAg
ICAgICAgICAgICAqZWxlbWVudCA9IERPTUVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlKGVsdCk7CkBA
IC0xMzQ5LDcgKzEzNTEsNyBAQCBIUkVTVUxUIFdlYkZyYW1lOjpjb250cm9sc0luRm9ybShJRE9N
RWxlCiAgICAgaWYgKCFmb3JtKQogICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOwogCi0gICAg
SFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQo
Zm9ybSk7CisgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50RnJv
bURPTUVsZW1lbnQoZm9ybSk7CiAgICAgaWYgKCFmb3JtRWxlbWVudCkKICAgICAgICAgcmV0dXJu
IEVfRkFJTDsKIApAQCAtMTM2MiwxMCArMTM2NCwxMCBAQCBIUkVTVUxUIFdlYkZyYW1lOjpjb250
cm9sc0luRm9ybShJRE9NRWxlCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKICAgICAqY0NvbnRy
b2xzID0gMDsKLSAgICBjb25zdCBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBlbGVt
ZW50cyA9IGZvcm1FbGVtZW50LT5hc3NvY2lhdGVkRWxlbWVudHMoKTsKKyAgICBjb25zdCBWZWN0
b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIGVsZW1lbnRzID0gZm9ybUVsZW1lbnQtPmFzc29j
aWF0ZWRFbGVtZW50cygpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewog
ICAgICAgICBpZiAoZWxlbWVudHMuYXQoaSktPmlzRW51bWVyYXRhYmxlKCkpIHsgLy8gU2tpcCBv
cHRpb24gZWxlbWVudHMsIG90aGVyIGR1ZHMKLSAgICAgICAgICAgIGNvbnRyb2xzWypjQ29udHJv
bHNdID0gRE9NRWxlbWVudDo6Y3JlYXRlSW5zdGFuY2UoZWxlbWVudHMuYXQoaSkpOworICAgICAg
ICAgICAgY29udHJvbHNbKmNDb250cm9sc10gPSBET01FbGVtZW50OjpjcmVhdGVJbnN0YW5jZSh0
b0hUTUxFbGVtZW50KGVsZW1lbnRzLmF0KGkpKSk7CiAgICAgICAgICAgICAoKmNDb250cm9scykr
KzsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDIyKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMTIt
MDYgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZXQgSFRNTE9iamVjdEVsZW1lbnQg
YmUgYSBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4MjEKKworICAgICAgICBBZGRzIGEgdGVzdCB0byBlbnN1
cmUgdGhlIG9yZGVyIG9mIGZvcm0uZWxlbWVudHMgYXR0cmlidXRlLgorICAgICAgICBVcGRhdGVz
IHR3byB0ZXN0cyB0byBjaGVjayB3aGV0aGVyIG9iamVjdCBlbGVtZW50cyBhcmUgaGFuZGxlZAor
ICAgICAgICBjb3JyZWN0bHkgaW4gZm9ybS5lbGVtZW50cyBhdHRyaWJ1dGUuCisKKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2Zvcm0tYXR0cmlidXRlLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAg
ICAgKiBmYXN0L2Zvcm1zL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRz
LW9yZGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zv
cm0tYXR0cmlidXRlLmpzOiBVcGRhdGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2NyaXB0LXRl
c3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5qczogQWRkZWQuCisgICAgICAgIChj
aGVja09yZGVyKToKKyAgICAgICAgKiBmYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxl
Y3Rpb24tZWxlbWVudHMuanM6IFVwZGF0ZWQuCisKIDIwMTAtMTItMDYgIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0aCBEYWtp
bi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1hdHRyaWJ1dGUtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1hdHRyaWJ1dGUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3MzQyMikKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMv
Zm9ybS1hdHRyaWJ1dGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDE0ICs0LDE0
IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiAtIENoZWNr
cyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBmb3JtIGF0dHJpYnV0ZSBmb3IgZWFjaCBmb3JtLWFzc29j
aWF0ZWQgZWxlbWVudHMuCi1GSVhNRTogPGxhYmVsPiBhbmQgPG9iamVjdD4gZG9uJ3Qgc3VwcG9y
dCB0aGUgZm9ybSBhdHRyaWJ1dGUgZm9yIG5vdy4KK0ZJWE1FOiA8bGFiZWw+IGRvZXNuJ3Qgc3Vw
cG9ydCB0aGUgZm9ybSBhdHRyaWJ1dGUgZm9yIG5vdy4KIFBBU1MgZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoImJ1dHRvbiIpWzBdLmZvcm0gaXMgb3duZXIKIFBBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoImZpZWxkc2V0IilbMF0uZm9ybSBpcyBvd25lcgogUEFTUyBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNT
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJrZXlnZW4iKVswXS5mb3JtIGlzIG93bmVy
CiBGQUlMIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYWJlbCIpWzBdLmZvcm0gc2hv
dWxkIGJlIFtvYmplY3QgSFRNTEZvcm1FbGVtZW50XS4gV2FzIG51bGwuCiBQQVNTIGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRlciIpWzBdLmZvcm0gaXMgb3duZXIKLUZBSUwgZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpWzBdLmZvcm0gc2hvdWxkIGJlIFtv
YmplY3QgSFRNTEZvcm1FbGVtZW50XS4gV2FzIG51bGwuCitQQVNTIGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJvdXRwdXQiKVswXS5mb3JtIGlzIG93bmVyCiBQQVNTIGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcm9ncmVzcyIpWzBdLmZvcm0gaXMgb3duZXIKIFBB
U1MgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpWzBdLmZvcm0gaXMgb3du
ZXIKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRz
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zvcm0t
Y29sbGVjdGlvbi1lbGVtZW50cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDczNDIyKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBCiAKIAogVGhpcyB0ZXN0IGRvZXMgbm90IGFkZCBvYmplY3QgZWxlbWVu
dCBhcyBhIGxpc3RlZCBlbGVtZW50LiBTZXBhcmF0ZSB0ZXN0IHdpbGwgY292ZXIgdGhhdC4KLVBB
U1Mgb3duZXIuZWxlbWVudHMubGVuZ3RoIGlzIDIyCitQQVNTIG93bmVyLmVsZW1lbnRzLmxlbmd0
aCBpcyAyMwogUEFTUyBvd25lci5lbGVtZW50c1swXS5pZCBpcyAnYnV0dG9uMScKIFBBU1Mgb3du
ZXIuZWxlbWVudHNbMV0uaWQgaXMgJ2ZpZWxkc2V0MScKIFBBU1Mgb3duZXIuZWxlbWVudHNbMl0u
aWQgaXMgJ2lucHV0aGlkZGVuJwpAQCAtMjQsOSArMjQsMTAgQEAgUEFTUyBvd25lci5lbGVtZW50
c1sxNV0uaWQgaXMgJ2lucHV0c3VibQogUEFTUyBvd25lci5lbGVtZW50c1sxNl0uaWQgaXMgJ2lu
cHV0cmVzZXQnCiBQQVNTIG93bmVyLmVsZW1lbnRzWzE3XS5pZCBpcyAnaW5wdXRidXR0b24nCiBQ
QVNTIG93bmVyLmVsZW1lbnRzWzE4XS5pZCBpcyAna2V5Z2VuMScKLVBBU1Mgb3duZXIuZWxlbWVu
dHNbMTldLmlkIGlzICdvdXRwdXQxJwotUEFTUyBvd25lci5lbGVtZW50c1syMF0uaWQgaXMgJ3Nl
bGVjdDEnCi1QQVNTIG93bmVyLmVsZW1lbnRzWzIxXS5pZCBpcyAndGV4dGFyZWExJworUEFTUyBv
d25lci5lbGVtZW50c1sxOV0uaWQgaXMgJ29iamVjdDEnCitQQVNTIG93bmVyLmVsZW1lbnRzWzIw
XS5pZCBpcyAnb3V0cHV0MScKK1BBU1Mgb3duZXIuZWxlbWVudHNbMjFdLmlkIGlzICdzZWxlY3Qx
JworUEFTUyBvd25lci5lbGVtZW50c1syMl0uaWQgaXMgJ3RleHRhcmVhMScKIFBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXItZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1l
bnRzLW9yZGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvZm9ybS1jb2xsZWN0aW9uLWVsZW1lbnRzLW9yZGVyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMSBAQAorVGhpcyB0ZXN0IGV4YW1pbmVzIHRoZSBvcmRlciBvZiBm
b3JtIGFzc29jaWF0ZWQgZWxlbWVudHMgd2hpY2ggYXJlIGNsYXNzaWZpZWQgYXMgJ2xpc3RlZCcu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCistIENoZWNrcyB0aGUgb3JkZXIgb2Yg
Zm9ybSBhc3NvY2lhdGVkIGVsZW1lbnRzLgorUEFTUyBjaGVja09yZGVyKFtidXR0b24sIGZpZWxk
c2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlz
ICJPSyIKKworLSBDaGVja3MgdGhlIG9yZGVyIGFmdGVyIHNvbWUgZWxlbWVudHMgcmVtb3ZlZC9p
bnNlcnRlZC4KK1BBU1MgY2hlY2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdl
biwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFtm
aWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMgIk9L
IgorUEFTUyBjaGVja09yZGVyKFtvYmplY3QsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRw
dXQsIHNlbGVjdCwgdGV4dGFyZWFdKSBpcyAiT0siCitQQVNTIGNoZWNrT3JkZXIoW29iamVjdCwg
ZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9u
XSkgaXMgIk9LIgorCistIENoZWNrcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lhdGVkIGVsZW1l
bnRzIHdpdGggZm9ybSBhdHRyaWJ1dGUuCitQQVNTIGNoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRz
ZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIHRleHRhcmVhXSkgaXMg
Ik9LIgorCistIENoZWNrcyB0aGUgb3JkZXIgYWZ0ZXIgc29tZSBlbGVtZW50cyByZW1vdmVkL2lu
c2VydGVkIHdpdGggZm9ybSBhdHRyaWJ1dGUuCitQQVNTIGNoZWNrT3JkZXIoW2J1dHRvbiwgZmll
bGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pIGlzICJPSyIK
K1BBU1MgY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0
LCB0ZXh0YXJlYV0pIGlzICJPSyIKK1BBU1MgY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBr
ZXlnZW4sIG91dHB1dCwgc2VsZWN0XSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFtmaWVsZHNl
dCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQsIHNlbGVjdF0pIGlzICJPSyIKK1BBU1Mg
Y2hlY2tPcmRlcihbdGV4dGFyZWEsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91
dHB1dCwgc2VsZWN0XSkgaXMgIk9LIgorUEFTUyBjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmllbGRz
ZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIGJ1dHRvbl0pIGlzICJP
SyIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorVGVz
dAorCisKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxl
bWVudHMtb3JkZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2Zv
cm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZm9ybS1jb2xsZWN0aW9uLWVs
ZW1lbnRzLW9yZGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1hdHRyaWJ1dGUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1h
dHRyaWJ1dGUuanMJKHJldmlzaW9uIDczNDIyKQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9z
Y3JpcHQtdGVzdHMvZm9ybS1hdHRyaWJ1dGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3
IEBAIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCcKIGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKIAogZGVidWcoJy0gQ2hlY2tzIHRoZSBleGlzdGVu
Y2Ugb2YgdGhlIGZvcm0gYXR0cmlidXRlIGZvciBlYWNoIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50
cy4nKTsKLWRlYnVnKCdGSVhNRTogJmx0O2xhYmVsJmd0OyBhbmQgJmx0O29iamVjdCZndDsgZG9u
XCd0IHN1cHBvcnQgdGhlIGZvcm0gYXR0cmlidXRlIGZvciBub3cuJyk7CitkZWJ1ZygnRklYTUU6
ICZsdDtsYWJlbCZndDsgZG9lc25cJ3Qgc3VwcG9ydCB0aGUgZm9ybSBhdHRyaWJ1dGUgZm9yIG5v
dy4nKTsKIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPGZvcm0gaWQ9b3duZXI+PC9mb3JtPicgKwog
ICAgICc8YnV0dG9uIG5hbWU9dmljdGltIGZvcm09b3duZXIgLz4nICsKICAgICAnPGZpZWxkc2V0
IG5hbWU9dmljdGltIGZvcm09b3duZXIgLz4nICsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9y
bXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy1vcmRlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rp
b24tZWxlbWVudHMtb3JkZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMtb3JkZXIuanMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTAwIEBACitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGV4YW1pbmVz
IHRoZSBvcmRlciBvZiBmb3JtIGFzc29jaWF0ZWQgZWxlbWVudHMgd2hpY2ggYXJlIGNsYXNzaWZp
ZWQgYXMgJ2xpc3RlZCcuIik7CisKK3ZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKK3ZhciBv
d25lcjsKKworZnVuY3Rpb24gY2hlY2tPcmRlcih2aWN0aW1zKSB7CisgICAgaWYgKG93bmVyLmVs
ZW1lbnRzLmxlbmd0aCAhPSB2aWN0aW1zLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuICdsZW5ndGgg
bWlzbWF0Y2gsIGVsZW1lbnRzLmxlbmd0aCA9ICcgKyBvd25lci5lbGVtZW50cy5sZW5ndGggKwor
ICAgICAgICAgICAgICAgJywgZXhwZWN0ZWQgbGVuZ3RoID0gJyArIHZpY3RpbXMubGVuZ3RoOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmljdGltcy5sZW5ndGg7ICsraSkKKyAgICAgICAgaWYg
KG93bmVyLmVsZW1lbnRzW2ldICE9IHZpY3RpbXNbaV0pCisgICAgICAgICAgICByZXR1cm4gJ2Vs
ZW1lbnQgbWlzbWF0Y2ggYXQgaW5kZXggJyArIGk7CisgICAgcmV0dXJuICdPSyc7Cit9CisKK2Rl
YnVnKCctIENoZWNrcyB0aGUgb3JkZXIgb2YgZm9ybSBhc3NvY2lhdGVkIGVsZW1lbnRzLicpOwor
Y29udGFpbmVyLmlubmVySFRNTCA9ICc8Zm9ybSBpZD1vd25lcj4nICsKKyAgICAnPGJ1dHRvbiBu
YW1lPXZpY3RpbT48L2J1dHRvbj4nICsKKyAgICAnPGZpZWxkc2V0IG5hbWU9dmljdGltPlRlc3Q8
L2ZpZWxkc2V0PicgKworICAgICc8aW5wdXQgbmFtZT12aWN0aW0vPicgKworICAgICc8a2V5Z2Vu
IG5hbWU9dmljdGltPjwva2V5Z2VuPicgKworICAgICc8bGFiZWwgbmFtZT12aWN0aW0+PC9sYWJl
bD4nICsKKyAgICAnPG1ldGVyIG5hbWU9dmljdGltPjwvbWV0ZXI+JyArCisgICAgJzxvYmplY3Qg
bmFtZT12aWN0aW0+PC9vYmplY3Q+JyArCisgICAgJzxvdXRwdXQgbmFtZT12aWN0aW0+PC9vdXRw
dXQ+JyArCisgICAgJzxwcm9ncmVzcyBuYW1lPXZpY3RpbT48L3Byb2dyZXNzPicgKworICAgICc8
c2VsZWN0IG5hbWU9dmljdGltPjwvc2VsZWN0PicgKworICAgICc8dGV4dGFyZWEgbmFtZT12aWN0
aW0+PC90ZXh0YXJlYT4nKworICAgICc8L2Zvcm0+JzsKK293bmVyID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ293bmVyJyk7Cit2YXIgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJ2J1dHRvbicpWzBdOwordmFyIGZpZWxkc2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ2ZpZWxkc2V0JylbMF07Cit2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnaW5wdXQnKVswXTsKK3ZhciBrZXlnZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgna2V5Z2VuJylbMF07Cit2YXIgbGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnbGFiZWwnKVswXTsKK3ZhciBtZXRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCdtZXRlcicpWzBdOwordmFyIG9iamVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCdvYmplY3QnKVswXTsKK3ZhciBvdXRwdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnb3V0cHV0JylbMF07Cit2YXIgcHJvZ3Jlc3MgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgncHJvZ3Jlc3MnKVswXTsKK3ZhciBzZWxlY3QgPSBkb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0JylbMF07Cit2YXIgdGV4dGFyZWEgPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKVswXTsKK3Nob3VsZEJlKCdjaGVja09yZGVy
KFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2VsZWN0
LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWcoJy0gQ2hlY2tzIHRo
ZSBvcmRlciBhZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQuJyk7Citvd25lci5y
ZW1vdmVDaGlsZChvYmplY3QpOworc2hvdWxkQmUoJ2NoZWNrT3JkZXIoW2J1dHRvbiwgZmllbGRz
ZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsK
K293bmVyLnJlbW92ZUNoaWxkKGJ1dHRvbik7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbZmllbGRz
ZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2VsZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsK
K293bmVyLmluc2VydEJlZm9yZShvYmplY3QsIGZpZWxkc2V0KTsKK3Nob3VsZEJlKCdjaGVja09y
ZGVyKFtvYmplY3QsIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvdXRwdXQsIHNlbGVjdCwgdGV4
dGFyZWFdKScsICciT0siJyk7Citvd25lci5hcHBlbmRDaGlsZChidXR0b24pOworc2hvdWxkQmUo
J2NoZWNrT3JkZXIoW29iamVjdCwgZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2Vs
ZWN0LCB0ZXh0YXJlYSwgYnV0dG9uXSknLCAnIk9LIicpOworCitkZWJ1ZygnJyk7CitkZWJ1Zygn
LSBDaGVja3MgdGhlIG9yZGVyIG9mIGZvcm0gYXNzb2NpYXRlZCBlbGVtZW50cyB3aXRoIGZvcm0g
YXR0cmlidXRlLicpOworY29udGFpbmVyLmlubmVySFRNTCA9ICc8YnV0dG9uIG5hbWU9dmljdGlt
IGZvcm09b3duZXI+PC9idXR0b24+JyArCisgICAgJzxmaWVsZHNldCBuYW1lPXZpY3RpbSBmb3Jt
PW93bmVyPlRlc3Q8L2ZpZWxkc2V0PicgKworICAgICc8aW5wdXQgbmFtZT12aWN0aW0gZm9ybT1v
d25lci8+JyArCisgICAgJzxrZXlnZW4gbmFtZT12aWN0aW0gZm9ybT1vd25lcj48L2tleWdlbj4n
ICsKKyAgICAnPGZvcm0gaWQ9b3duZXI+JyArCisgICAgJzxsYWJlbCBuYW1lPXZpY3RpbT48L2xh
YmVsPicgKworICAgICc8bWV0ZXIgbmFtZT12aWN0aW0+PC9tZXRlcj4nICsKKyAgICAnPG9iamVj
dCBuYW1lPXZpY3RpbT48L29iamVjdD4nICsKKyAgICAnPC9mb3JtPicgKworICAgICc8b3V0cHV0
IG5hbWU9dmljdGltIGZvcm09b3duZXI+PC9vdXRwdXQ+JyArCisgICAgJzxwcm9ncmVzcyBuYW1l
PXZpY3RpbSBmb3JtPW93bmVyPjwvcHJvZ3Jlc3M+JyArCisgICAgJzxzZWxlY3QgbmFtZT12aWN0
aW0gZm9ybT1vd25lcj48L3NlbGVjdD4nICsKKyAgICAnPHRleHRhcmVhIG5hbWU9dmljdGltIGZv
cm09b3duZXI+PC90ZXh0YXJlYT4nOworb3duZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
b3duZXInKTsKK2J1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24n
KVswXTsKK2ZpZWxkc2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ZpZWxkc2V0
JylbMF07CitpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBd
Owora2V5Z2VuID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2tleWdlbicpWzBdOwor
bGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGFiZWwnKVswXTsKK21ldGVy
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21ldGVyJylbMF07CitvYmplY3QgPSBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JylbMF07CitvdXRwdXQgPSBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb3V0cHV0JylbMF07Citwcm9ncmVzcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwcm9ncmVzcycpWzBdOworc2VsZWN0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NlbGVjdCcpWzBdOwordGV4dGFyZWEgPSBkb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKVswXTsKK3Nob3VsZEJlKCdjaGVja09y
ZGVyKFtidXR0b24sIGZpZWxkc2V0LCBpbnB1dCwga2V5Z2VuLCBvYmplY3QsIG91dHB1dCwgc2Vs
ZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKKworZGVidWcoJycpOworZGVidWcoJy0gQ2hlY2tz
IHRoZSBvcmRlciBhZnRlciBzb21lIGVsZW1lbnRzIHJlbW92ZWQvaW5zZXJ0ZWQgd2l0aCBmb3Jt
IGF0dHJpYnV0ZS4nKTsKK293bmVyLnJlbW92ZUNoaWxkKG9iamVjdCk7CitzaG91bGRCZSgnY2hl
Y2tPcmRlcihbYnV0dG9uLCBmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb3V0cHV0LCBzZWxlY3Qs
IHRleHRhcmVhXSknLCAnIk9LIicpOworY29udGFpbmVyLnJlbW92ZUNoaWxkKGJ1dHRvbik7Citz
aG91bGRCZSgnY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1dCwgc2Vs
ZWN0LCB0ZXh0YXJlYV0pJywgJyJPSyInKTsKK2NvbnRhaW5lci5yZW1vdmVDaGlsZCh0ZXh0YXJl
YSk7CitzaG91bGRCZSgnY2hlY2tPcmRlcihbZmllbGRzZXQsIGlucHV0LCBrZXlnZW4sIG91dHB1
dCwgc2VsZWN0XSknLCAnIk9LIicpOworb3duZXIuYXBwZW5kQ2hpbGQob2JqZWN0KTsKK3Nob3Vs
ZEJlKCdjaGVja09yZGVyKFtmaWVsZHNldCwgaW5wdXQsIGtleWdlbiwgb2JqZWN0LCBvdXRwdXQs
IHNlbGVjdF0pJywgJyJPSyInKTsKK2NvbnRhaW5lci5pbnNlcnRCZWZvcmUodGV4dGFyZWEsIGZp
ZWxkc2V0KTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmllbGRzZXQsIGlucHV0
LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3RdKScsICciT0siJyk7Citjb250YWluZXIu
YXBwZW5kQ2hpbGQoYnV0dG9uKTsKK3Nob3VsZEJlKCdjaGVja09yZGVyKFt0ZXh0YXJlYSwgZmll
bGRzZXQsIGlucHV0LCBrZXlnZW4sIG9iamVjdCwgb3V0cHV0LCBzZWxlY3QsIGJ1dHRvbl0pJywg
JyJPSyInKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9mb3JtLWNvbGxlY3Rpb24tZWxlbWVudHMuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvZm9ybS1j
b2xsZWN0aW9uLWVsZW1lbnRzLmpzCShyZXZpc2lvbiA3MzQyMikKKysrIExheW91dFRlc3RzL2Zh
c3QvZm9ybXMvc2NyaXB0LXRlc3RzL2Zvcm0tY29sbGVjdGlvbi1lbGVtZW50cy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQCBjb250YWluZXIuaW5uZXJIVE1MID0gJzxmb3JtIGlk
PSJmb3JtMSI+CiAgICAgJzxrZXlnZW4gaWQ9a2V5Z2VuMT48L2tleWdlbj4nICsKICAgICAnPGxh
YmVsIGlkPWxhYmVsMT48L2xhYmVsPicgKwogICAgICc8bWV0ZXIgaWQ9bWV0ZXIxPjwvbWV0ZXI+
JyArCisgICAgJzxvYmplY3QgaWQ9b2JqZWN0MT48L29iamVjdD4nICsKICAgICAnPG91dHB1dCBp
ZD1vdXRwdXQxPjwvb3V0cHV0PicgKwogICAgICc8cHJvZ3Jlc3MgaWQ9cHJvZ3Jlc3MxPjwvcHJv
Z3Jlc3M+JyArCiAgICAgJzxzZWxlY3QgaWQ9c2VsZWN0MT4nICsKQEAgLTM4LDcgKzM5LDcgQEAg
Y29udGFpbmVyLmlubmVySFRNTCA9ICc8Zm9ybSBpZD0iZm9ybTEiPgogCiB2YXIgb3duZXIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTEnKTsKIAotc2hvdWxkQmUoJ293bmVyLmVsZW1l
bnRzLmxlbmd0aCcsICcyMicpOworc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzLmxlbmd0aCcsICcy
MycpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzBdLmlkJywgIididXR0b24xJyIpOwogc2hv
dWxkQmUoJ293bmVyLmVsZW1lbnRzWzFdLmlkJywgIidmaWVsZHNldDEnIik7CiBzaG91bGRCZSgn
b3duZXIuZWxlbWVudHNbMl0uaWQnLCAiJ2lucHV0aGlkZGVuJyIpOwpAQCAtNTgsOSArNTksMTAg
QEAgc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzE1XS5pZCcsICInaW5wdQogc2hvdWxkQmUoJ293
bmVyLmVsZW1lbnRzWzE2XS5pZCcsICInaW5wdXRyZXNldCciKTsKIHNob3VsZEJlKCdvd25lci5l
bGVtZW50c1sxN10uaWQnLCAiJ2lucHV0YnV0dG9uJyIpOwogc2hvdWxkQmUoJ293bmVyLmVsZW1l
bnRzWzE4XS5pZCcsICIna2V5Z2VuMSciKTsKLXNob3VsZEJlKCdvd25lci5lbGVtZW50c1sxOV0u
aWQnLCAiJ291dHB1dDEnIik7Ci1zaG91bGRCZSgnb3duZXIuZWxlbWVudHNbMjBdLmlkJywgIidz
ZWxlY3QxJyIpOwotc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzIxXS5pZCcsICIndGV4dGFyZWEx
JyIpOworc2hvdWxkQmUoJ293bmVyLmVsZW1lbnRzWzE5XS5pZCcsICInb2JqZWN0MSciKTsKK3No
b3VsZEJlKCdvd25lci5lbGVtZW50c1syMF0uaWQnLCAiJ291dHB1dDEnIik7CitzaG91bGRCZSgn
b3duZXIuZWxlbWVudHNbMjFdLmlkJywgIidzZWxlY3QxJyIpOworc2hvdWxkQmUoJ293bmVyLmVs
ZW1lbnRzWzIyXS5pZCcsICIndGV4dGFyZWExJyIpOwogCiAKIHZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>