<?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>23852</bug_id>
          
          <creation_ts>2009-02-09 12:43:52 -0800</creation_ts>
          <short_desc>Rename Selection to VisibleSelection in preparation for adding new Selection class</short_desc>
          <delta_ts>2009-02-09 13:44:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>23793</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>109011</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-09 12:43:52 -0800</bug_when>
    <thetext>Rename Selection to VisibleSelection in preparation for adding new Selection class

VisibleSeleciton will eventually hold VisiblePositions instead of Positions, and Selection will hold Ranges.

The patch is just search/replace and mostly needs a rubber stamp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109014</commentid>
    <comment_count>1</comment_count>
      <attachid>27491</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-09 12:52:04 -0800</bug_when>
    <thetext>Created attachment 27491
First pass at s/Selection/VisibleSelection

 WebCore/ChangeLog                                  |  248 ++++++++
 WebCore/WebCore.base.exp                           |   15 +-
 WebCore/WebCore.pro                                |    2 +-
 WebCore/WebCore.scons                              |    2 +-
 WebCore/WebCore.vcproj/WebCore.vcproj              |   16 +-
 WebCore/WebCore.xcodeproj/project.pbxproj          |   16 +-
 WebCore/dom/Element.cpp                            |    2 +-
 WebCore/editing/ApplyStyleCommand.cpp              |    4 +-
 WebCore/editing/BreakBlockquoteCommand.cpp         |    6 +-
 WebCore/editing/CompositeEditCommand.cpp           |   18 +-
 WebCore/editing/CompositeEditCommand.h             |    2 +-
 WebCore/editing/CreateLinkCommand.cpp              |    2 +-
 WebCore/editing/DeleteButtonController.cpp         |    4 +-
 WebCore/editing/DeleteButtonController.h           |    4 +-
 WebCore/editing/DeleteSelectionCommand.cpp         |    8 +-
 WebCore/editing/DeleteSelectionCommand.h           |    6 +-
 WebCore/editing/EditCommand.cpp                    |    4 +-
 WebCore/editing/EditCommand.h                      |   14 +-
 WebCore/editing/Editor.cpp                         |   54 +-
 WebCore/editing/Editor.h                           |   10 +-
 WebCore/editing/EditorCommand.cpp                  |   12 +-
 WebCore/editing/FormatBlockCommand.cpp             |    4 +-
 WebCore/editing/IndentOutdentCommand.cpp           |   12 +-
 WebCore/editing/InsertLineBreakCommand.cpp         |   12 +-
 WebCore/editing/InsertListCommand.cpp              |    6 +-
 .../editing/InsertParagraphSeparatorCommand.cpp    |    8 +-
 WebCore/editing/InsertTextCommand.cpp              |    8 +-
 WebCore/editing/ModifySelectionListLevel.cpp       |    6 +-
 WebCore/editing/MoveSelectionCommand.cpp           |    4 +-
 WebCore/editing/RemoveFormatCommand.cpp            |    2 +-
 WebCore/editing/ReplaceSelectionCommand.cpp        |   12 +-
 WebCore/editing/Selection.cpp                      |  651 -------------------
 WebCore/editing/Selection.h                        |  146 -----
 WebCore/editing/SelectionController.cpp            |   32 +-
 WebCore/editing/SelectionController.h              |   10 +-
 WebCore/editing/TypingCommand.cpp                  |   32 +-
 WebCore/editing/TypingCommand.h                    |    2 +-
 WebCore/editing/VisiblePosition.cpp                |    4 +-
 WebCore/editing/VisibleSelection.cpp               |  652 ++++++++++++++++++++
 WebCore/editing/VisibleSelection.h                 |  147 +++++
 WebCore/editing/htmlediting.cpp                    |   16 +-
 WebCore/editing/htmlediting.h                      |    6 +-
 WebCore/editing/markup.cpp                         |    4 +-
 WebCore/html/HTMLInputElement.cpp                  |    4 +-
 WebCore/html/HTMLInputElement.h                    |    4 +-
 WebCore/html/HTMLTextAreaElement.cpp               |    6 +-
 WebCore/html/HTMLTextAreaElement.h                 |    4 +-
 WebCore/page/AccessibilityObject.cpp               |    6 +-
 WebCore/page/AccessibilityObject.h                 |    4 +-
 WebCore/page/AccessibilityRenderObject.cpp         |   10 +-
 WebCore/page/AccessibilityRenderObject.h           |    4 +-
 WebCore/page/DOMSelection.cpp                      |   24 +-
 WebCore/page/DOMSelection.h                        |    6 +-
 WebCore/page/DragController.cpp                    |   12 +-
 WebCore/page/EditorClient.h                        |    2 +-
 WebCore/page/EventHandler.cpp                      |   28 +-
 WebCore/page/Frame.cpp                             |   40 +-
 WebCore/page/Frame.h                               |   16 +-
 WebCore/page/Page.cpp                              |    2 +-
 WebCore/page/Page.h                                |    4 +-
 WebCore/page/mac/AccessibilityObjectWrapper.mm     |    2 +-
 WebCore/rendering/RenderBlock.cpp                  |    2 +-
 WebCore/rendering/RenderTextControl.cpp            |    6 +-
 WebCore/rendering/RenderTextControl.h              |    4 +-
 WebCore/rendering/RenderTreeAsText.cpp             |    2 +-
 WebCore/rendering/RootInlineBox.cpp                |    2 +-
 WebCore/svg/SVGTextContentElement.cpp              |    2 +-
 WebKit/mac/ChangeLog                               |   14 +
 WebKit/mac/WebView/WebFrame.mm                     |    2 +-
 WebKit/mac/WebView/WebView.mm                      |    2 +-
 70 files changed, 1351 insertions(+), 1088 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109017</commentid>
    <comment_count>2</comment_count>
      <attachid>27491</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-02-09 12:57:57 -0800</bug_when>
    <thetext>Comment on attachment 27491
First pass at s/Selection/VisibleSelection

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109023</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-09 13:44:05 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	R	WebCore/editing/Selection.cpp =&gt; WebCore/editing/VisibleSelection.cpp
	R	WebCore/editing/Selection.h =&gt; WebCore/editing/VisibleSelection.h
	M	WebCore/ChangeLog
	M	WebCore/WebCore.base.exp
	M	WebCore/WebCore.pro
	M	WebCore/WebCore.scons
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/dom/Element.cpp
	M	WebCore/editing/ApplyStyleCommand.cpp
	M	WebCore/editing/BreakBlockquoteCommand.cpp
	M	WebCore/editing/CompositeEditCommand.cpp
	M	WebCore/editing/CompositeEditCommand.h
	M	WebCore/editing/CreateLinkCommand.cpp
	M	WebCore/editing/DeleteButtonController.cpp
	M	WebCore/editing/DeleteButtonController.h
	M	WebCore/editing/DeleteSelectionCommand.cpp
	M	WebCore/editing/DeleteSelectionCommand.h
	M	WebCore/editing/EditCommand.cpp
	M	WebCore/editing/EditCommand.h
	M	WebCore/editing/Editor.cpp
	M	WebCore/editing/Editor.h
	M	WebCore/editing/EditorCommand.cpp
	M	WebCore/editing/FormatBlockCommand.cpp
	M	WebCore/editing/IndentOutdentCommand.cpp
	M	WebCore/editing/InsertLineBreakCommand.cpp
	M	WebCore/editing/InsertListCommand.cpp
	M	WebCore/editing/InsertParagraphSeparatorCommand.cpp
	M	WebCore/editing/InsertTextCommand.cpp
	M	WebCore/editing/ModifySelectionListLevel.cpp
	M	WebCore/editing/MoveSelectionCommand.cpp
	M	WebCore/editing/RemoveFormatCommand.cpp
	M	WebCore/editing/ReplaceSelectionCommand.cpp
	M	WebCore/editing/SelectionController.cpp
	M	WebCore/editing/SelectionController.h
	M	WebCore/editing/TypingCommand.cpp
	M	WebCore/editing/TypingCommand.h
	M	WebCore/editing/VisiblePosition.cpp
	M	WebCore/editing/htmlediting.cpp
	M	WebCore/editing/htmlediting.h
	M	WebCore/editing/markup.cpp
	M	WebCore/html/HTMLInputElement.cpp
	M	WebCore/html/HTMLInputElement.h
	M	WebCore/html/HTMLTextAreaElement.cpp
	M	WebCore/html/HTMLTextAreaElement.h
	M	WebCore/page/AccessibilityObject.cpp
	M	WebCore/page/AccessibilityObject.h
	M	WebCore/page/AccessibilityRenderObject.cpp
	M	WebCore/page/AccessibilityRenderObject.h
	M	WebCore/page/DOMSelection.cpp
	M	WebCore/page/DOMSelection.h
	M	WebCore/page/DragController.cpp
	M	WebCore/page/EditorClient.h
	M	WebCore/page/EventHandler.cpp
	M	WebCore/page/Frame.cpp
	M	WebCore/page/Frame.h
	M	WebCore/page/Page.cpp
	M	WebCore/page/Page.h
	M	WebCore/page/mac/AccessibilityObjectWrapper.mm
	M	WebCore/rendering/RenderBlock.cpp
	M	WebCore/rendering/RenderTextControl.cpp
	M	WebCore/rendering/RenderTextControl.h
	M	WebCore/rendering/RenderTreeAsText.cpp
	M	WebCore/rendering/RootInlineBox.cpp
	M	WebCore/svg/SVGTextContentElement.cpp
	M	WebKit/mac/ChangeLog
	M	WebKit/mac/WebView/WebFrame.mm
	M	WebKit/mac/WebView/WebView.mm
Committed r40793
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27491</attachid>
            <date>2009-02-09 12:52:04 -0800</date>
            <delta_ts>2009-02-09 12:57:57 -0800</delta_ts>
            <desc>First pass at s/Selection/VisibleSelection</desc>
            <filename>First-pass-at-s-Selection-VisibleSelection.patch</filename>
            <type>text/plain</type>
            <size>200847</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Mjc5NjcxZjY1YzMwMTkwMTUyZGZjOWZhY2MxOTQwZTRkNzhmNGMzZApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4OGIxMDVkLi5lOTQ2ZTAz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI1MSBAQAorMjAwOS0wMi0wOSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVu
YW1lIFNlbGVjdGlvbiB0byBWaXNpYmxlU2VsZWN0aW9uIHRvIGFsbG93IHVzIHRvIHNlcGFyYXRl
CisgICAgICAgIHRoZSBzZWxlY3Rpb25zIHRoZSB1c2VyIHdvcmtzIHdpdGggZnJvbSB0aGUgb25l
cyB1c2VkIGJ5CisgICAgICAgIHRoZSBKUyBlZGl0aW5nIEFQSXMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzg1MgorCisgICAgICAgIE5vIGZ1bmN0
aW9uYWwgY2hhbmdlcywgdGh1cyBubyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5l
eHA6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS5zY29uczoKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKToKKyAgICAg
ICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjp1cGRhdGVTdGFydEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCk6CisgICAgICAgICog
ZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJy
ZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1h
bmQ6OmlucHV0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6
ZGVsZXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZWJhbGFuY2VXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRD
b21tYW5kOjpwdXNoQW5jaG9yRWxlbWVudERvd24pOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OnB1c2hQYXJ0aWFsbHlTZWxlY3RlZEFuY2hvckVsZW1lbnRzRG93bik6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0
eUxpc3RJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVh
a091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0NyZWF0ZUxpbmtDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZUxpbmtDb21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jbG9zaW5nRGVsZXRhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVCdXR0b25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAg
ICAgKiBlZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBlZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjbGVhclRyYW5zaWVudFN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kOjpzZXRTdGFydGluZ1NlbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6c2V0RW5kaW5nU2VsZWN0aW9uKToK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
Q29tbWFuZDo6c3RhcnRpbmdTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1h
bmQ6OmVuZGluZ1NlbGVjdGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rpb25Gb3JDb21tYW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBh
cmFncmFwaFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbGllZEVkaXRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVhcHBsaWVkRWRpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnNlbGVjdENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5j
ZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjptYXJrTWlz
c3BlbGxpbmdzT3JCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01p
c3NwZWxsaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtCYWRHcmFtbWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnRyYW5zcG9zZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhw
YW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlU3dh
cFdpdGhNYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OmVuYWJsZWRWaXNpYmxlU2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmVuYWJsZWRWaXNpYmxlU2VsZWN0aW9uQW5kTWFyayk6CisgICAg
ICAgIChXZWJDb3JlOjplbmFibGVDYXJldEluRWRpdGFibGVUZXh0KToKKyAgICAgICAgKiBlZGl0
aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtYXRCbG9j
a0NvbW1hbmQ6Om1vZGlmeVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1hdEJsb2NrQ29t
bWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmRlbnRPdXRkZW50Q29tbWFuZDo6aW5kZW50UmVnaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UmVnaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRlbnRDb21tYW5kOjpkb0FwcGx5KToKKyAg
ICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGlu
Zy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0Q29t
bWFuZDo6bW9kaWZ5UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6
OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6OmlucHV0KToKKyAgICAg
ICAgKiBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRTdGFydEVuZExpc3RDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpjYW5JbmNy
ZWFzZUxpc3RMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5EZWNyZWFzZUxpc3RMZXZlbCk6
CisgICAgICAgICogZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGlu
Zy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6
OlJlcGxhY2VtZW50RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmNvbXBsZXRlSFRNTFJlcGxhY2VtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVj
dGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb24uaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3Rpb25Db250cm9sbGVyOjpub2RlV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25Db250cm9sbGVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rp
b25Db250cm9sbGVyOjpzZXRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRy
b2xsZXI6OnNldEV4dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVy
OjpzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3RBbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW5nZSk6CisgICAgICAgICogZWRp
dGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyOjpzZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJv
bGxlcjo6c2VsZWN0aW9uVHlwZSk6CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9z
aXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpob25vckVkaXRh
YmxlQm91bmRhcnlBdE9yQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlv
bjo6aG9ub3JFZGl0YWJsZUJvdW5kYXJ5QXRPckFmdGVyKToKKyAgICAgICAgKiBlZGl0aW5nL1Zp
c2libGVTZWxlY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxl
Y3Rpb246OlZpc2libGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVj
dGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlZp
c2libGVTZWxlY3Rpb246OnNldEJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVj
dGlvbjo6c2V0RXh0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OmZp
cnN0UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxp
emVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6ZXhwYW5kVXNp
bmdHcmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2VhcmNoUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6YXBwZW5kVHJhaWxpbmdXaGl0ZXNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OnNldEJhc2VBbmRFeHRlbnRU
b0RlZXBFcXVpdmFsZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpz
ZXRTdGFydEFuZEVuZEZyb21CYXNlQW5kRXh0ZW50UmVzcGVjdGluZ0dyYW51bGFyaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OnVwZGF0ZVNlbGVjdGlvblR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6dmFsaWRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6c2V0V2l0aG91dFZhbGlkYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENyb3Nz
aW5nRWRpdGluZ0JvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlv
bjo6aXNDb250ZW50RWRpdGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlv
bjo6aXNDb250ZW50UmljaGx5RWRpdGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNl
bGVjdGlvbjo6cm9vdEVkaXRhYmxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxl
U2VsZWN0aW9uOjpzaGFkb3dUcmVlUm9vdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbjo6ZGVidWdQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2Vs
ZWN0aW9uOjpmb3JtYXRGb3JEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2Vs
ZWN0aW9uOjpzaG93VHJlZUZvclRoaXMpOgorICAgICAgICAoc2hvd1RyZWUpOgorICAgICAgICAq
IGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlZp
c2libGVTZWxlY3Rpb246Oik6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpz
ZWxlY3Rpb25UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OnNldEFm
ZmluaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OmFmZmluaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OmJhc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6ZXh0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2li
bGVTZWxlY3Rpb246OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246
OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp2aXNpYmxlU3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6dmlzaWJsZUVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjppc05vbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VmlzaWJsZVNlbGVjdGlvbjo6aXNDYXJldCk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxl
U2VsZWN0aW9uOjppc1JhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246
OmlzQ2FyZXRPclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246Omlz
QmFzZUZpcnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OmdyYW51bGFy
aXR5KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3IhPSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6YXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZSk6CisgICAgICAgICogZWRpdGluZy9odG1s
ZWRpdGluZy5oOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZU1hcmt1cCk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlvbik6CisgICAgICAg
ICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNlbGVj
dGlvbik6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50Lmg6CisgICAgICAgICog
cGFnZS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OnNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclVub3JkZXJlZFBvc2l0aW9ucyk6CisgICAg
ICAgICogcGFnZS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgICogcGFnZS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRW
aXNpYmxlUG9zaXRpb25SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb0FYUmFuZ2VGb3JMaW5lKToKKyAgICAgICAgKiBwYWdlL0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFuY2hvck5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NU2VsZWN0aW9uOjphbmNob3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjpmb2N1c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpmb2N1
c09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmNvbGxhcHNlVG9FbmQp
OgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvU3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpnZXRSYW5nZUF0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVNlbGVjdGlvbjo6YWRkUmFuZ2UpOgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9u
Lmg6CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dFNlbGVjdGlvblRvRHJhZ0NhcmV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVy
Ojpjb25jbHVkZUVkaXREcmFnKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXBhcmVDbGlwYm9hcmRG
b3JJbWFnZURyYWcpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJh
Zyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6cGxhY2VEcmFnQ2FyZXQpOgor
ICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDbG9zZXN0V29y
ZEZyb21Nb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0
Q2xvc2VzdFdvcmRPckxpbmtGcm9tTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFRyaXBsZUNsaWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xpY2spOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1cGRhdGVTZWxlY3Rpb25Gb3JNb3VzZURy
YWcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VF
dmVudCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZTo6bWFyayk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0TWFyayk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZTo6c2VsZWN0aW9uTGF5b3V0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZTo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
OjpzaG91bGREZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJldmVh
bFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0U2VsZWN0aW9uRnJvbU5v
bmUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmZpbmRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWU6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAqIHBhZ2Uv
RnJhbWUuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6c2VsZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKiBwYWdlL21h
Yy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uXSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpmaWxsSW5saW5lU2VsZWN0aW9uR2Fwcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpzZXRT
ZWxlY3Rpb25SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6c2Vs
ZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3
cml0ZVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6ZmlsbExpbmVTZWxlY3Rpb25HYXApOgor
ICAgICAgICAqIHN2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzZWxlY3RTdWJTdHJpbmcpOgorCiAyMDA5LTAyLTA2
ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBK
dXN0aW4gR2FyY2lhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IDA4YTg2NmIuLjFlMjgwOGMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAK
QEAgLTM3MCw2ICszNzAsOCBAQCBfX1pON1dlYkNvcmUxNk5hdmlnYXRpb25BY3Rpb25DMUVSS05T
XzRLVVJMRU5TXzE0TmF2aWdhdGlvblR5cGVFCiBfX1pON1dlYkNvcmUxNk5hdmlnYXRpb25BY3Rp
b25DMUV2CiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxMGluaXRTY3JpcHRFdgogX19a
TjdXZWJDb3JlMTZTY3JpcHRDb250cm9sbGVyMTh3aW5kb3dTY3JpcHRPYmplY3RFdgorX19aTjdX
ZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUEtOU181UmFuZ2VFTlNfOUVBZmZpbml0eUUKK19f
Wk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FUzNf
CiBfX1pON1dlYkNvcmUxNmNvbG9yRnJvbU5TQ29sb3JFUDdOU0NvbG9yCiBfX1pON1dlYkNvcmUx
NmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1h
cmt1cEVQS05TXzVSYW5nZUUKQEAgLTM5OCw3ICs0MDAsNyBAQCBfX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXI1Y2xvc2VFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
N2luc3BlY3RFUE5TXzROb2RlRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyOXNo
b3dQYW5lbEVOUzBfMTNTcGVjaWFsUGFuZWxzRQogX19aTjdXZWJDb3JlMTlTZWxlY3Rpb25Db250
cm9sbGVyMTBzZXRGb2N1c2VkRWIKLV9fWk43V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjEy
c2V0U2VsZWN0aW9uRVJLTlNfOVNlbGVjdGlvbkViYmIKK19fWk43V2ViQ29yZTE5U2VsZWN0aW9u
Q29udHJvbGxlcjEyc2V0U2VsZWN0aW9uRVJLTlNfMTZWaXNpYmxlU2VsZWN0aW9uRWJiYgogX19a
TjdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMTZzZXRTZWxlY3RlZFJhbmdlRVBOU181UmFu
Z2VFTlNfOUVBZmZpbml0eUViCiBfX1pON1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXI1Y2xl
YXJFdgogX19aTjdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyNm1vZGlmeUVOUzBfMTFFQWx0
ZXJhdGlvbkVOUzBfMTBFRGlyZWN0aW9uRU5TXzE1VGV4dEdyYW51bGFyaXR5RWIKQEAgLTY4MCw5
ICs2ODIsNiBAQCBfX1pON1dlYkNvcmU5UGFnZUdyb3VwMTRhZGRWaXNpdGVkTGlua0VQS3RtCiBf
X1pON1dlYkNvcmU5UGFnZUdyb3VwMTdjbG9zZUxvY2FsU3RvcmFnZUV2CiBfX1pON1dlYkNvcmU5
UGFnZUdyb3VwMjFyZW1vdmVBbGxWaXNpdGVkTGlua3NFdgogX19aTjdXZWJDb3JlOVBhZ2VHcm91
cDI2c2V0U2hvdWxkVHJhY2tWaXNpdGVkTGlua3NFYgotX19aTjdXZWJDb3JlOVNlbGVjdGlvbjIy
ZXhwYW5kVXNpbmdHcmFudWxhcml0eUVOU18xNVRleHRHcmFudWxhcml0eUUKLV9fWk43V2ViQ29y
ZTlTZWxlY3Rpb25DMUVQS05TXzVSYW5nZUVOU185RUFmZmluaXR5RQotX19aTjdXZWJDb3JlOVNl
bGVjdGlvbkMxRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FUzNfCiBfX1pON1dlYkNvcmU5VGltZXJC
YXNlNHN0b3BFdgogX19aTjdXZWJDb3JlOVRpbWVyQmFzZTVzdGFydEVkZAogX19aTjdXZWJDb3Jl
OVRpbWVyQmFzZUMyRXYKQEAgLTc4OCw2ICs3ODcsMTAgQEAgX19aTks3V2ViQ29yZTE1VmlzaWJs
ZVBvc2l0aW9uNG5leHRFYgogX19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uOHByZXZpb3Vz
RWIKIF9fWk5LN1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQxMmF1dG9Db21wbGV0ZUV2CiBfX1pO
SzdXZWJDb3JlMTZSZXNvdXJjZVJlc3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKK19fWk5LN1dlYkNv
cmUxNlZpc2libGVTZWxlY3Rpb24xN2lzQ29udGVudEVkaXRhYmxlRXYKK19fWk5LN1dlYkNvcmUx
NlZpc2libGVTZWxlY3Rpb24xN3RvTm9ybWFsaXplZFJhbmdlRXYKK19fWk5LN1dlYkNvcmUxNlZp
c2libGVTZWxlY3Rpb24xOXJvb3RFZGl0YWJsZUVsZW1lbnRFdgorX19aTks3V2ViQ29yZTE2Vmlz
aWJsZVNlbGVjdGlvbjIzaXNDb250ZW50UmljaGx5RWRpdGFibGVFdgogX19aTks3V2ViQ29yZTE3
UmVzb3VyY2VFcnJvckJhc2U4bGF6eUluaXRFdgogX19aTks3V2ViQ29yZTE5QW5pbWF0aW9uQ29u
dHJvbGxlcjI0bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zRXYKIF9fWk5LN1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIxN2RyYXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29udGV4dEUK
QEAgLTkwMCwxMCArOTAzLDYgQEAgX19aTks3V2ViQ29yZTlGcmFtZVRyZWU0ZmluZEVSS05TXzEy
QXRvbWljU3RyaW5nRQogX19aTks3V2ViQ29yZTlGcmFtZVRyZWU1Y2hpbGRFUktOU18xMkF0b21p
Y1N0cmluZ0UKIF9fWk5LN1dlYkNvcmU5RnJhbWVUcmVlNnBhcmVudEViCiBfX1pOSzdXZWJDb3Jl
OUZyYW1lVmlldzExbmVlZHNMYXlvdXRFdgotX19aTks3V2ViQ29yZTlTZWxlY3Rpb24xN2lzQ29u
dGVudEVkaXRhYmxlRXYKLV9fWk5LN1dlYkNvcmU5U2VsZWN0aW9uMTd0b05vcm1hbGl6ZWRSYW5n
ZUV2Ci1fX1pOSzdXZWJDb3JlOVNlbGVjdGlvbjE5cm9vdEVkaXRhYmxlRWxlbWVudEV2Ci1fX1pO
SzdXZWJDb3JlOVNlbGVjdGlvbjIzaXNDb250ZW50UmljaGx5RWRpdGFibGVFdgogX19aTks3V2Vi
Q29yZTlUaW1lckJhc2U4aXNBY3RpdmVFdgogX19aVFZON1dlYkNvcmUxMkNocm9tZUNsaWVudEUK
IF9fWlRWTjdXZWJDb3JlMTdGaWxlQ2hvb3NlckNsaWVudEUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDhjY2RlMjkuLjdhMzVjNjYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBy
bwpAQCAtNjY1LDcgKzY2NSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIGVkaXRpbmcvUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcCBc
Ci0gICAgZWRpdGluZy9TZWxlY3Rpb24uY3BwIFwKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1
dGVDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TbWFydFJlcGxhY2UuY3BwIFwKICAgICBlZGl0
aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAgXApAQCAtNjc2LDYgKzY3NSw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvVW5saW5rQ29t
bWFuZC5jcHAgXAogICAgIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBcCisgICAgZWRpdGlu
Zy9WaXNpYmxlU2VsZWN0aW9uLmNwcCBcCiAgICAgZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcCBc
CiAgICAgZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIFwKICAgICBo
aXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
LnNjb25zIGIvV2ViQ29yZS9XZWJDb3JlLnNjb25zCmluZGV4IDQ5NjJjNWQuLjM3NmRjMGIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5zY29ucworKysgYi9XZWJDb3JlL1dlYkNvcmUuc2Nv
bnMKQEAgLTE4MCw3ICsxODAsNiBAQCBzb3VyY2VzWydlZGl0aW5nJ10gPSBbCiAgICAgJ2VkaXRp
bmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwJywKICAgICAnZWRpdGluZy9SZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAnLAogICAgICdlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcCcsCi0gICAgJ2VkaXRpbmcvU2VsZWN0aW9uLmNwcCcsCiAgICAgJ2VkaXRpbmcv
U2VsZWN0aW9uQ29udHJvbGxlci5jcHAnLAogICAgICdlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVD
b21tYW5kLmNwcCcsCiAgICAgJ2VkaXRpbmcvU21hcnRSZXBsYWNlLmNwcCcsCkBAIC0xOTQsNiAr
MTkzLDcgQEAgc291cmNlc1snZWRpdGluZyddID0gWwogICAgICdlZGl0aW5nL1VubGlua0NvbW1h
bmQuY3BwJywKICAgICAnZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcCcsCiAgICAgJ2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmNwcCcsCisgICAgJ2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAn
LAogICAgICdlZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAnLAogXQog
c291cmNlc1snaGlzdG9yeSddID0gWwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggNTg2OGZhYy4uMjk2NWJmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCkBAIC0xMjUxMCwxNCArMTI1MTAsNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNlbGVjdGlvbi5jcHAiDQotCQkJCT4N
Ci0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNl
bGVjdGlvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZWRpdGluZ1xTZWxlY3Rpb25Db250cm9sbGVyLmNwcCINCiAJCQkJPg0KIAkJCTwv
RmlsZT4NCkBAIC0xMjYxOCw2ICsxMjYxMCwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFZpc2libGVTZWxlY3Rpb24uY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZWRpdGluZ1xWaXNpYmxlU2VsZWN0aW9uLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFdyYXBDb250ZW50c0luRHVtbXlTcGFu
Q29tbWFuZC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NGNkNzAzLi44YzhkYTBhIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg5MCw4ICsxODkwLDYgQEAKIAkJ
OTMzMDlFMDcwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5D
b21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzMwOURCODA5OUU2NDkxMDA1NkU1ODEgLyogUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNv
bW1hbmQuaCAqLzsgfTsKIAkJOTMzMDlFMDkwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMzA5REJBMDk5RTY0OTEwMDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAgKi87IH07CiAJCTkzMzA5RTBBMDk5RTY0OTIwMDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTMzMDlEQkIwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJOTMzMDlF
MEIwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURCQzA5OUU2NDkxMDA1NkU1ODEgLyogU2Vs
ZWN0aW9uLmNwcCAqLzsgfTsKLQkJOTMzMDlFMEMwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlE
QkQwOTlFNjQ5MTAwNTZFNTgxIC8qIFNlbGVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMzA5RTBEMDk5RTY0OTIwMDU2RTU4MSAvKiBT
ZWxlY3Rpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzMzA5REJFMDk5RTY0OTEwMDU2RTU4MSAvKiBTZWxlY3Rpb25Db250cm9s
bGVyLmNwcCAqLzsgfTsKIAkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzMzA5REJGMDk5RTY0OTEwMDU2RTU4MSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMzMDlFMEYwOTlF
NjQ5MjAwNTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5REMwMDk5RTY0OTEwMDU2RTU4
MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgKi87IH07CkBAIC0yNDk5LDYgKzI0OTcs
OCBAQAogCQlBODcxREZFMzBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyUmVwbGFjZWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFERkRGMEExNTM3
NkIwMEIxMkE2OCAvKiBSZW5kZXJSZXBsYWNlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4NzFERkU0MEExNTM3NkIwMEIxMkE2OCAvKiBSZW5k
ZXJXaWRnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4NzFERkUwMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJXaWRnZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODcxREZFNTBBMTUzNzZCMDBC
MTJBNjggLyogUmVuZGVyV2lkZ2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4NzFERkUxMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJXaWRnZXQu
Y3BwICovOyB9OworCQlBODgzREYyNzBGM0QwNDVEMDBGMTlCRjYgLyogVmlzaWJsZVNlbGVjdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODgz
REYyNTBGM0QwNDVEMDBGMTlCRjYgLyogVmlzaWJsZVNlbGVjdGlvbi5jcHAgKi87IH07CisJCUE4
ODNERjI4MEYzRDA0NUQwMEYxOUJGNiAvKiBWaXNpYmxlU2VsZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODgzREYyNjBGM0QwNDVEMDBGMTlC
RjYgLyogVmlzaWJsZVNlbGVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUE4OEFENTJGMDk1MjRCOTIwMDFERDE5NiAvKiBRdWFydHpDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLzsg
fTsKIAkJQTg4REQ0ODcwQjQ2MjlBMzAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJzYWxTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg4REQ0ODYwQjQ2
MjlBMzAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJzYWxTdGF0ZS5oICovOyB9OwogCQlBODhERDQ4OTBC
NDYyOUIwMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4OERENDg4MEI0NjI5QjAwMEMwMjk5MCAv
KiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwICovOyB9OwpAQCAtNjc4NSw4ICs2Nzg1LDYgQEAKIAkJ
OTMzMDlEQjgwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5D
b21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZU5vZGVQcmVz
ZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
MzA5REJBMDk5RTY0OTEwMDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzA5REJCMDk5RTY0OTEwMDU2
RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5MzMwOURCQzA5OUU2NDkxMDA1NkU1ODEgLyogU2VsZWN0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzMzA5REJEMDk5RTY0OTEwMDU2RTU4MSAvKiBTZWxlY3Rp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzA5REJFMDk5RTY0OTEwMDU2RTU4MSAvKiBTZWxl
Y3Rpb25Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
MzMwOURCRjA5OUU2NDkxMDA1NkU1ODEgLyogU2VsZWN0aW9uQ29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3Rpb25Db250cm9sbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzA5REMwMDk5RTY0OTEwMDU2RTU4MSAvKiBTZXROb2Rl
QXR0cmlidXRlQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC03MjM4LDYgKzcyMzYsOCBAQAogCQlBODcxREZERjBBMTUzNzZCMDBCMTJBNjggLyogUmVu
ZGVyUmVwbGFjZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJl
cGxhY2VkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzFERkUwMEExNTM3NkIw
MEIxMkE2OCAvKiBSZW5kZXJXaWRnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlcldpZGdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODcxREZF
MTBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJXaWRnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBODgzREYyNTBGM0QwNDVEMDBGMTlCRjYgLyogVmlzaWJsZVNlbGVjdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXNpYmxlU2VsZWN0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg4M0RGMjYwRjNEMDQ1RDAwRjE5
QkY2IC8qIFZpc2libGVTZWxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlzaWJsZVNlbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODhE
RDQ4NjBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhdGhUcmF2ZXJzYWxTdGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNh
bFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhdGhUcmF2
ZXJzYWxTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OEZFMzMzMEU1
RUVFODcwMDhEOEMwRiAvKiBHcmFwaGljc0NvbnRleHRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzc3LDggKzExMzc3LDYgQEAKIAkJCQk5MzMwOURCODA5OUU2
NDkxMDA1NkU1ODEgLyogUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaCAqLywK
IAkJCQk5MzMwOURCQTA5OUU2NDkxMDA1NkU1ODEgLyogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwICovLAogCQkJCTkzMzA5REJCMDk5RTY0OTEwMDU2RTU4MSAvKiBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5oICovLAotCQkJCTkzMzA5REJDMDk5RTY0OTEwMDU2RTU4MSAvKiBTZWxlY3Rpb24u
Y3BwICovLAotCQkJCTkzMzA5REJEMDk5RTY0OTEwMDU2RTU4MSAvKiBTZWxlY3Rpb24uaCAqLywK
IAkJCQk5MzMwOURCRTA5OUU2NDkxMDA1NkU1ODEgLyogU2VsZWN0aW9uQ29udHJvbGxlci5jcHAg
Ki8sCiAJCQkJOTMzMDlEQkYwOTlFNjQ5MTAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIu
aCAqLywKIAkJCQk5MzMwOURDMDA5OUU2NDkxMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQuY3BwICovLApAQCAtMTE0MDIsNiArMTE0MDAsOCBAQAogCQkJCUQwODZGRTk2MDlENTNB
QUIwMDVCQzc0RCAvKiBVbmxpbmtDb21tYW5kLmggKi8sCiAJCQkJOTMzMDlERDAwOTlFNjQ5MTAw
NTZFNTgxIC8qIFZpc2libGVQb3NpdGlvbi5jcHAgKi8sCiAJCQkJOTMzMDlERDEwOTlFNjQ5MTAw
NTZFNTgxIC8qIFZpc2libGVQb3NpdGlvbi5oICovLAorCQkJCUE4ODNERjI1MEYzRDA0NUQwMEYx
OUJGNiAvKiBWaXNpYmxlU2VsZWN0aW9uLmNwcCAqLywKKwkJCQlBODgzREYyNjBGM0QwNDVEMDBG
MTlCRjYgLyogVmlzaWJsZVNlbGVjdGlvbi5oICovLAogCQkJCTkzMzA5REQ0MDk5RTY0OTEwMDU2
RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5
REQ1MDk5RTY0OTEwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuaCAq
LywKIAkJCQk5MzMwOUQ5ODA5OUU2NDkxMDA1NkU1ODEgLyogaHRtbGVkaXRpbmcuY3BwICovLApA
QCAtMTY0NDYsNyArMTY0NDYsNiBAQAogCQkJCUJDRDBFMEZDMEU5NzJDMzUwMDI2NURFQSAvKiBT
ZWN1cml0eU9yaWdpbkhhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCTM3MUY0RkZDMEQyNUU3RjMw
MEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RB
MkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJOTMzMDlFMEMwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTMzMDlFMEUwOTlFNjQ5MjAwNTZFNTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5v
ZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUwQkIyMzBEQTU3MkE2MDBBOUU0MTcgLyog
U2Vzc2lvblN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTY3MTUsNiArMTY3MTQsNyBAQAog
CQkJCTFBNTY5RDI1MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzk2REI0MzBGM0E4ODBFMDA1NzNDQjMgLyogUmVuZGVyQm94TW9k
ZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4ODNERjI4MEYzRDA0NUQwMEYxOUJGNiAv
KiBWaXNpYmxlU2VsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4NDUzLDcgKzE4NDUzLDYg
QEAKIAkJCQlCQ0QwRTBGQTBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzcxRjRGRkQwRDI1RTdGMzAwRUNFMEQ1IC8qIFNlZ21lbnRlZEZv
bnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTJFMEQwMDZDMUQwMEVGNkYyNiAv
KiBTZWdtZW50ZWRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTMzMDlFMEIwOTlFNjQ5
MjAwNTZFNTgxIC8qIFNlbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUwRDA5
OUU2NDkyMDA1NkU1ODEgLyogU2VsZWN0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0QThDOTZFQjBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUJDN0ZBNjgyMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rv
ck5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTg2OTUsNiArMTg2OTQsNyBAQAogCQkJ
CTFBNTY5RDI0MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTMzMDlFMUQwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2libGVfdW5pdHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM5NkRCNDYwRjNBODgyMjAwNTczQ0IzIC8qIFJlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4ODNERjI3MEYzRDA0NUQwMEYxOUJG
NiAvKiBWaXNpYmxlU2VsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAgYi9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBmYWE5
NzE1Li42ZTRkNjJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTEwNSw3ICsxMTA1LDcgQEAgdm9pZCBFbGVtZW50
Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UoYm9vbCAvKnJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbiov
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVz
dG9yZSB0aGUgcHJldmlvdXMgc2VsZWN0aW9uIGlmIHRoZXJlIGlzIG9uZS4KLSAgICAgICAgU2Vs
ZWN0aW9uIG5ld1NlbGVjdGlvbiA9IGhhc1RhZ05hbWUoaHRtbFRhZykgfHwgaGFzVGFnTmFtZShi
b2R5VGFnKSA/IFNlbGVjdGlvbihQb3NpdGlvbih0aGlzLCAwKSwgRE9XTlNUUkVBTSkgOiBTZWxl
Y3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZSh0aGlzKTsKKyAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBoYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGhhc1RhZ05h
bWUoYm9keVRhZykgPyBWaXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9uKHRoaXMsIDApLCBET1dOU1RS
RUFNKSA6IFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZSh0aGlz
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChmcmFtZS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5l
d1NlbGVjdGlvbikpIHsKICAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0
aW9uKG5ld1NlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRl
eCBmYmQ4ZmU0Li5kODg4YWVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
QEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjp1cGRhdGVTdGFydEVu
ZChjb25zdCBQb3NpdGlvbiYgbmV3U3RhcnQsIGNvbnN0IFBvc2l0aW9uJgogICAgIGlmICghbV91
c2VFbmRpbmdTZWxlY3Rpb24gJiYgKG5ld1N0YXJ0ICE9IG1fc3RhcnQgfHwgbmV3RW5kICE9IG1f
ZW5kKSkKICAgICAgICAgbV91c2VFbmRpbmdTZWxlY3Rpb24gPSB0cnVlOwogCi0gICAgc2V0RW5k
aW5nU2VsZWN0aW9uKFNlbGVjdGlvbihuZXdTdGFydCwgbmV3RW5kLCBWUF9ERUZBVUxUX0FGRklO
SVRZKSk7CisgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obmV3U3RhcnQs
IG5ld0VuZCwgVlBfREVGQVVMVF9BRkZJTklUWSkpOwogICAgIG1fc3RhcnQgPSBuZXdTdGFydDsK
ICAgICBtX2VuZCA9IG5ld0VuZDsKIH0KQEAgLTE0ODAsNyArMTQ4MCw3IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoTm9kZSogc3RhcnROb2Rl
LCBOb2RlKiBlbmROCiAgICAgfQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgY2Fs
bCB1cGRhdGVTdGFydEVuZCBpZiB0aGUgc3RhcnQgb3IgZW5kIHdhcyBpbiB0aGUgbm9kZQogICAg
IC8vIHJhbmdlIHNvIHRoYXQgdGhlIGVuZGluZ1NlbGVjdGlvbigpIGlzIGNhbm9uaWNhbGl6ZWQu
ICBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSBlbmQgb2YKLSAgICAvLyBTZWxlY3Rpb246OnZhbGlk
YXRlKCkuCisgICAgLy8gVmlzaWJsZVNlbGVjdGlvbjo6dmFsaWRhdGUoKS4KIH0KIAogdm9pZCBB
cHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShjb25zdCBTdHlsZUNoYW5nZSYgc3R5bGVD
aGFuZ2UsIEhUTUxFbGVtZW50KiBibG9jaykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9C
cmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVv
dGVDb21tYW5kLmNwcAppbmRleCA3NmEwODkwLi40NGE0NGM1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5n
L0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgQnJlYWtC
bG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaW5zZXJ0Tm9kZUFmdGVyKGJyZWFrTm9k
ZS5nZXQoKSwgdG9wQmxvY2txdW90ZSk7CiAgICAgCiAgICAgaWYgKGlzTGFzdFZpc2libGVQb3Np
dGlvbkluTm9kZSh2aXNpYmxlUG9zLCB0b3BCbG9ja3F1b3RlKSkgewotICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oU2VsZWN0aW9uKFBvc2l0aW9uKGJyZWFrTm9kZS5nZXQoKSwgMCksIERPV05T
VFJFQU0pKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oUG9z
aXRpb24oYnJlYWtOb2RlLmdldCgpLCAwKSwgRE9XTlNUUkVBTSkpOwogICAgICAgICByZWJhbGFu
Y2VXaGl0ZXNwYWNlKCk7ICAgCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05Nyw3ICs5Nyw3
IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgLy8g
SWYgdGhlcmUncyBub3RoaW5nIGluc2lkZSB0b3BCbG9ja3F1b3RlIHRvIG1vdmUsIHdlJ3JlIGZp
bmlzaGVkLgogICAgIGlmICghc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRPZih0b3BCbG9ja3F1b3Rl
KSkgewotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKFZpc2libGVQb3NpdGlv
bihQb3NpdGlvbihzdGFydE5vZGUsIDApKSkpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oc3RhcnROb2RlLCAwKSkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lk
IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGFkZEJsb2NrUGxhY2Vob2xk
ZXJJZk5lZWRlZChjbG9uZWRCbG9ja3F1b3RlLmdldCgpKTsKICAgICAKICAgICAvLyBQdXQgdGhl
IHNlbGVjdGlvbiByaWdodCBiZWZvcmUgdGhlIGJyZWFrLgotICAgIHNldEVuZGluZ1NlbGVjdGlv
bihTZWxlY3Rpb24oUG9zaXRpb24oYnJlYWtOb2RlLmdldCgpLCAwKSwgRE9XTlNUUkVBTSkpOwor
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKFBvc2l0aW9uKGJyZWFrTm9k
ZS5nZXQoKSwgMCksIERPV05TVFJFQU0pKTsKICAgICByZWJhbGFuY2VXaGl0ZXNwYWNlKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAg
Yi9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDFmNjIyNDQu
LmVjYzYxZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFu
ZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAt
Mjk2LDcgKzI5Niw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmlucHV0VGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0CiAgICAgCiAgICAgaWYgKHNl
bGVjdEluc2VydGVkVGV4dCkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50KCktPmRv
Y3VtZW50RWxlbWVudCgpLCBzdGFydEluZGV4LCBsZW5ndGgpOwotICAgICAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24oU2VsZWN0aW9uKHNlbGVjdGVkUmFuZ2UuZ2V0KCkpKTsKKyAgICAgICAgc2V0RW5k
aW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc2VsZWN0ZWRSYW5nZS5nZXQoKSkpOwogICAg
IH0KIH0KIApAQCAtMzQ1LDcgKzM0NSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRl
bGV0ZVNlbGVjdGlvbihib29sIHNtYXJ0RGVsZXRlLCBib29sIG1lcmdlQmxvY2tzQWZ0CiAgICAg
ICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCgpLCBzbWFydERlbGV0ZSwgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSwgcmVwbGFj
ZSwgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24gJnNlbGVjdGlvbiwgYm9vbCBz
bWFydERlbGV0ZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCBib29sIHJlcGxhY2UsIGJv
b2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
ZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24gJnNlbGVjdGlvbiwgYm9vbCBz
bWFydERlbGV0ZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCBib29sIHJlcGxhY2UsIGJv
b2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzKQogewogICAgIGlmIChzZWxlY3Rpb24uaXNSYW5n
ZSgpKQogICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpjcmVhdGUoc2VsZWN0aW9uLCBzbWFydERlbGV0ZSwgbWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZSwgcmVwbGFjZSwgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzKSk7CkBAIC00NTIsNyArNDUyLDcg
QEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9u
Rm9yU3BsaXQoUG9zaXRpb24mIHBvc2l0aW8KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
cmViYWxhbmNlV2hpdGVzcGFjZSgpCiB7Ci0gICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGVuZGlu
Z1NlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZW5kaW5nU2Vs
ZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKQEAgLTY5Niw3ICs2OTYsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpw
dXNoQW5jaG9yRWxlbWVudERvd24oTm9kZSogYW5jaG9yTm9kZSkKICAgICAKICAgICBBU1NFUlQo
YW5jaG9yTm9kZS0+aXNMaW5rKCkpOwogICAgIAotICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxl
Y3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShhbmNob3JOb2RlKSk7CisgICAgc2V0
RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09m
Tm9kZShhbmNob3JOb2RlKSk7CiAgICAgYXBwbHlTdHlsZWRFbGVtZW50KHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihhbmNob3JOb2RlKSk7CiAgICAgLy8gQ2xvbmVzIG9mIGFuY2hvck5vZGUgaGF2ZSBi
ZWVuIHB1c2hlZCBkb3duLCBub3cgcmVtb3ZlIGl0LgogICAgIGlmIChhbmNob3JOb2RlLT5pbkRv
Y3VtZW50KCkpCkBAIC03MDksNyArNzA5LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
cHVzaEFuY2hvckVsZW1lbnREb3duKE5vZGUqIGFuY2hvck5vZGUpCiAvLyBBbmNob3JzIGNhbm5v
dCBiZSBuZXN0ZWQuCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwdXNoUGFydGlhbGx5U2Vs
ZWN0ZWRBbmNob3JFbGVtZW50c0Rvd24oKQogewotICAgIFNlbGVjdGlvbiBvcmlnaW5hbFNlbGVj
dGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gb3JpZ2luYWxT
ZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVN0YXJ0KG9yaWdpbmFsU2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlRW5kKG9yaWdpbmFsU2VsZWN0aW9uLmVuZCgpKTsKICAgICAKQEAgLTc5Nyw3ICs3OTcs
NyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgIAogICAgIC8vIEZJWE1FICg1MDk4OTMx
KTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJXZWJWaWV3SW5zZXJ0QWN0aW9u
TW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhlcmUuCiAgICAgCi0gICAgc2V0
RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihzdGFydCwgZW5kLCBET1dOU1RSRUFNKSk7CisgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCwgRE9XTlNUUkVB
TSkpOwogICAgIGRlbGV0ZVNlbGVjdGlvbihmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAK
ICAgICBBU1NFUlQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1l
bnQoKSk7CkBAIC04NjYsNyArODY2LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92
ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICAg
ICAgUmVmUHRyPFJhbmdlPiBzdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25B
bmRMZW5ndGgoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCksIGRlc3RpbmF0aW9uSW5kZXgg
KyBzdGFydEluZGV4LCAwLCB0cnVlKTsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBlbmQgPSBUZXh0
SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpLCBkZXN0aW5hdGlvbkluZGV4ICsgZW5kSW5kZXgsIDAsIHRydWUpOwogICAgICAg
ICBpZiAoc3RhcnQgJiYgZW5kKQotICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVj
dGlvbihzdGFydC0+c3RhcnRQb3NpdGlvbigpLCBlbmQtPnN0YXJ0UG9zaXRpb24oKSwgRE9XTlNU
UkVBTSkpOworICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
c3RhcnQtPnN0YXJ0UG9zaXRpb24oKSwgZW5kLT5zdGFydFBvc2l0aW9uKCksIERPV05TVFJFQU0p
KTsKICAgICB9CiB9CiAKQEAgLTg5Nyw3ICs4OTcsNyBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpicmVha091dE9mRW1wdHlMaXN0SXRlbSgpCiAgICAgfQogICAgIAogICAgIGFwcGVuZEJs
b2NrUGxhY2Vob2xkZXIobmV3QmxvY2spOwotICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rp
b24oUG9zaXRpb24obmV3QmxvY2suZ2V0KCksIDApLCBET1dOU1RSRUFNKSk7CisgICAgc2V0RW5k
aW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oUG9zaXRpb24obmV3QmxvY2suZ2V0KCksIDAp
LCBET1dOU1RSRUFNKSk7CiAgICAgCiAgICAgY29tcHV0ZWRTdHlsZShlbmRpbmdTZWxlY3Rpb24o
KS5zdGFydCgpLm5vZGUoKSktPmRpZmYoc3R5bGUuZ2V0KCkpOwogICAgIGlmIChzdHlsZS0+bGVu
Z3RoKCkgPiAwKQpAQCAtOTM1LDcgKzkzNSw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OmJyZWFrT3V0T2ZFbXB0eU1haWxCbG9ja3F1b3RlZFBhcmFncmFwaCgpCiAgICAgLy8gYSBzZWNv
bmQgb25lLgogICAgIGlmICghaXNTdGFydE9mUGFyYWdyYXBoKGF0QlIpKQogICAgICAgICBpbnNl
cnROb2RlQmVmb3JlKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKSwgYnIpOwotICAgIHNl
dEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oYXRCUikpOworICAgIHNldEVuZGluZ1NlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKGF0QlIpKTsKICAgICAKICAgICAvLyBJZiB0aGlzIGlzIGFuIGVt
cHR5IHBhcmFncmFwaCB0aGVyZSBtdXN0IGJlIGEgbGluZSBicmVhayBoZXJlLgogICAgIGlmICgh
bGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjYXJldCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaCBiL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5oCmluZGV4IDZiYjE0MmIuLjRhM2RlZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5oCkBAIC01Miw3ICs1Miw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IGFwcGx5U3R5bGVkRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKICAgICB2b2lkIHJlbW92
ZVN0eWxlZEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAgICAgdm9pZCBkZWxldGVTZWxl
Y3Rpb24oYm9vbCBzbWFydERlbGV0ZSA9IGZhbHNlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxl
dGUgPSB0cnVlLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBleHBhbmRGb3JTcGVjaWFsRWxl
bWVudHMgPSB0cnVlKTsKLSAgICB2b2lkIGRlbGV0ZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24m
LCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9
IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50
cyA9IHRydWUpOworICAgIHZvaWQgZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZSA9IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVt
ZW50cyA9IHRydWUpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0RnJvbU5vZGUoUGFzc1Jl
ZlB0cjxUZXh0PiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCk7CiAgICAgdm9pZCBp
bnB1dFRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQgPSBmYWxzZSk7
CiAgICAgdm9pZCBpbnNlcnROb2RlQWZ0ZXIoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc1JlZlB0cjxO
b2RlPiByZWZDaGlsZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvQ3JlYXRlTGlua0Nv
bW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmNwcAppbmRleCBj
NWQ2OGRkLi4yNjNmZWFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvQ3JlYXRlTGlua0Nv
bW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5jcHAKQEAg
LTUzLDcgKzUzLDcgQEAgdm9pZCBDcmVhdGVMaW5rQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAg
IGluc2VydE5vZGVBdChhbmNob3JFbGVtZW50LmdldCgpLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFy
dCgpKTsKICAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gbmV3IFRleHQoZG9jdW1lbnQo
KSwgbV91cmwpOwogICAgICAgICBhcHBlbmROb2RlKHRleHROb2RlLmdldCgpLCBhbmNob3JFbGVt
ZW50LmdldCgpKTsKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihwb3NpdGlv
bkJlZm9yZU5vZGUoYW5jaG9yRWxlbWVudC5nZXQoKSksIHBvc2l0aW9uQWZ0ZXJOb2RlKGFuY2hv
ckVsZW1lbnQuZ2V0KCkpLCBET1dOU1RSRUFNKSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShhbmNob3JFbGVtZW50LmdldCgp
KSwgcG9zaXRpb25BZnRlck5vZGUoYW5jaG9yRWxlbWVudC5nZXQoKSksIERPV05TVFJFQU0pKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250
cm9sbGVyLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcApp
bmRleCA0YmU5ZmI3Li5mMzVhZTc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
QnV0dG9uQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNv
bnRyb2xsZXIuY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIGJvb2wgaXNEZWxldGFibGVF
bGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMg
SFRNTEVsZW1lbnQqIGVuY2xvc2luZ0RlbGV0YWJsZUVsZW1lbnQoY29uc3QgU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCitzdGF0aWMgSFRNTEVsZW1lbnQqIGVuY2xvc2luZ0RlbGV0YWJsZUVsZW1lbnQo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewogICAgIGlmICghc2VsZWN0aW9u
LmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTI4LDcgKzEyOCw3
IEBAIHN0YXRpYyBIVE1MRWxlbWVudCogZW5jbG9zaW5nRGVsZXRhYmxlRWxlbWVudChjb25zdCBT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihlbGVtZW50KTsKIH0KIAotdm9pZCBEZWxldGVCdXR0b25Db250cm9sbGVyOjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQordm9pZCBEZWxl
dGVCdXR0b25Db250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRy
b2xsZXIuaCBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmgKaW5kZXgg
YWIyZDBiMC4uNzEzYWU4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRv
bkNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxl
ci5oCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIERlbGV0ZUJ1dHRvbjsKIGNsYXNzIEZyYW1lOwog
Y2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBTZWxlY3Rpb247
CitjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCiBjbGFzcyBEZWxldGVCdXR0b25Db250cm9sbGVy
IHsKIHB1YmxpYzoKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIEhUTUxFbGVtZW50KiB0
YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsgfQogICAgIEhUTUxFbGVtZW50
KiBjb250YWluZXJFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluZXJFbGVtZW50Lmdl
dCgpOyB9CiAKLSAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgU2VsZWN0
aW9uJiBvbGRTZWxlY3Rpb24pOworICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24pOwogCiAgICAgdm9pZCBzaG93KEhU
TUxFbGVtZW50Kik7CiAgICAgdm9pZCBoaWRlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggMjFiNTk3ZS4uZThiNzQ4YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtODgsNyArODgsNyBAQCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50ICpkb2N1bWVu
dCwgYm9vbCBzbWFydERlbAogewogfQogCi1EZWxldGVTZWxlY3Rpb25Db21tYW5kOjpEZWxldGVT
ZWxlY3Rpb25Db21tYW5kKGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIHNtYXJ0RGVs
ZXRlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUsIGJvb2wgcmVwbGFjZSwgYm9vbCBleHBh
bmRGb3JTcGVjaWFsRWxlbWVudHMpCitEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpEZWxldGVTZWxl
Y3Rpb25Db21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBzbWFy
dERlbGV0ZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCBib29sIHJlcGxhY2UsIGJvb2wg
ZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzKQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoc2Vs
ZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5kb2N1bWVudCgpKSwgCiAgICAgICBtX2hhc1NlbGVjdGlv
blRvRGVsZXRlKHRydWUpLCAKICAgICAgIG1fc21hcnREZWxldGUoc21hcnREZWxldGUpLCAKQEAg
LTY5Niw3ICs2OTYsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5
cGluZ1N0eWxlQWZ0ZXJEZWxldGUoKQogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNs
ZWFyVHJhbnNpZW50U3RhdGUoKQogewotICAgIG1fc2VsZWN0aW9uVG9EZWxldGUgPSBTZWxlY3Rp
b24oKTsKKyAgICBtX3NlbGVjdGlvblRvRGVsZXRlID0gVmlzaWJsZVNlbGVjdGlvbigpOwogICAg
IG1fdXBzdHJlYW1TdGFydC5jbGVhcigpOwogICAgIG1fZG93bnN0cmVhbVN0YXJ0LmNsZWFyKCk7
CiAgICAgbV91cHN0cmVhbUVuZC5jbGVhcigpOwpAQCAtNzU1LDcgKzc1NSw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgLy8gd2FudCB0byByZXBsYWNlIGl0
IHdpdGggYSBwbGFjZWhvbGRlciBCUiEKICAgICBpZiAoaGFuZGxlU3BlY2lhbENhc2VCUkRlbGV0
ZSgpKSB7CiAgICAgICAgIGNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUoKTsKLSAgICAg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0
eSkpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihtX2VuZGlu
Z1Bvc2l0aW9uLCBhZmZpbml0eSkpOwogICAgICAgICBjbGVhclRyYW5zaWVudFN0YXRlKCk7CiAg
ICAgICAgIHJlYmFsYW5jZVdoaXRlc3BhY2UoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzc4LDcg
Kzc3OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICBj
YWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCk7CiAgICAgCi0gICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKFNlbGVjdGlvbihtX2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0eSkpOworICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1fZW5kaW5nUG9zaXRpb24sIGFmZmluaXR5
KSk7CiAgICAgY2xlYXJUcmFuc2llbnRTdGF0ZSgpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oIGIvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuaAppbmRleCAwZjlmMmY3Li42NDBjNTQ5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCisrKyBiL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmgKQEAgLTM2LDE0ICszNiwxNCBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQoZG9jdW1lbnQsIHNtYXJ0RGVsZXRlLCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCByZXBsYWNl
LCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMpKTsKICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGVsZXRlU2VsZWN0aW9uQ29tbWFuZD4gY3JlYXRlKGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0
aW9uLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZSA9IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVt
ZW50cyA9IGZhbHNlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ+IGNyZWF0ZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgc21hcnRE
ZWxldGUgPSBmYWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCBy
ZXBsYWNlID0gZmFsc2UsIGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzID0gZmFsc2UpCiAg
ICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQo
c2VsZWN0aW9uLCBzbWFydERlbGV0ZSwgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSwgcmVwbGFjZSwg
ZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzKSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQoRG9jdW1lbnQqLCBib29sIHNtYXJ0RGVsZXRlLCBib29sIG1lcmdl
QmxvY2tzQWZ0ZXJEZWxldGUsIGJvb2wgcmVwbGFjZSwgYm9vbCBleHBhbmRGb3JTcGVjaWFsRWxl
bWVudHMpOwotICAgIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQoY29uc3QgU2VsZWN0aW9uJiwgYm9v
bCBzbWFydERlbGV0ZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCBib29sIHJlcGxhY2Us
IGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzKTsKKyAgICBEZWxldGVTZWxlY3Rpb25Db21t
YW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIHNtYXJ0RGVsZXRlLCBib29sIG1lcmdl
QmxvY2tzQWZ0ZXJEZWxldGUsIGJvb2wgcmVwbGFjZSwgYm9vbCBleHBhbmRGb3JTcGVjaWFsRWxl
bWVudHMpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIEVkaXRB
Y3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0OwpAQCAtNzQsNyArNzQsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9wcnVuZVN0YXJ0QmxvY2tJZk5lY2Vzc2FyeTsKIAogICAgIC8vIFRoaXMgZGF0
YSBpcyB0cmFuc2llbnQgYW5kIHNob3VsZCBiZSBjbGVhcmVkIGF0IHRoZSBlbmQgb2YgdGhlIGRv
QXBwbHkgZnVuY3Rpb24uCi0gICAgU2VsZWN0aW9uIG1fc2VsZWN0aW9uVG9EZWxldGU7CisgICAg
VmlzaWJsZVNlbGVjdGlvbiBtX3NlbGVjdGlvblRvRGVsZXRlOwogICAgIFBvc2l0aW9uIG1fdXBz
dHJlYW1TdGFydDsKICAgICBQb3NpdGlvbiBtX2Rvd25zdHJlYW1TdGFydDsKICAgICBQb3NpdGlv
biBtX3Vwc3RyZWFtRW5kOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5k
LmNwcCBiL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKaW5kZXggN2VjMGMxOS4uY2E1
YmY0MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgRWRpdEFj
dGlvbiBFZGl0Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIEVkaXRB
Y3Rpb25VbnNwZWNpZmllZDsKIH0KIAotdm9pZCBFZGl0Q29tbWFuZDo6c2V0U3RhcnRpbmdTZWxl
Y3Rpb24oY29uc3QgU2VsZWN0aW9uJiBzKQordm9pZCBFZGl0Q29tbWFuZDo6c2V0U3RhcnRpbmdT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcykKIHsKICAgICBFbGVtZW50KiByb290
ID0gcy5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgZm9yIChFZGl0Q29tbWFuZCogY21kID0g
dGhpczsgOyBjbWQgPSBjbWQtPm1fcGFyZW50KSB7CkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBF
ZGl0Q29tbWFuZDo6c2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiBzKQogICAg
IH0KIH0KIAotdm9pZCBFZGl0Q29tbWFuZDo6c2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVj
dGlvbiAmcykKK3ZvaWQgRWRpdENvbW1hbmQ6OnNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uICZzKQogewogICAgIEVsZW1lbnQqIHJvb3QgPSBzLnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKTsKICAgICBmb3IgKEVkaXRDb21tYW5kKiBjbWQgPSB0aGlzOyBjbWQ7IGNtZCA9IGNt
ZC0+bV9wYXJlbnQpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5o
IGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgKaW5kZXggNzg0OTBmOC4uYzQ5NjlmNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgKKysrIGIvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRDb21tYW5kLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkVkaXRB
Y3Rpb24uaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uLmgiCisj
aW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQ3LDggKzQ3LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24oKSBjb25zdDsKIAotICAgIGNvbnN0IFNlbGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0aW5nU2VsZWN0aW9uOyB9Ci0gICAgY29uc3QgU2VsZWN0
aW9uJiBlbmRpbmdTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2VuZGluZ1NlbGVjdGlvbjsg
fQorICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHN0YXJ0aW5nU2VsZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGFydGluZ1NlbGVjdGlvbjsgfQorICAgIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGVuZGluZ1NlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kaW5nU2VsZWN0aW9uOyB9
CiAKICAgICBFbGVtZW50KiBzdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXJ0aW5nUm9vdEVkaXRhYmxlRWxlbWVudC5nZXQoKTsgfQogICAgIEVsZW1lbnQq
IGVuZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VuZGluZ1Jvb3RF
ZGl0YWJsZUVsZW1lbnQuZ2V0KCk7IH0KQEAgLTYzLDggKzYzLDggQEAgcHJvdGVjdGVkOgogCiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsg
fQogCi0gICAgdm9pZCBzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mKTsKLSAg
ICB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mKTsKKyAgICB2b2lkIHNl
dFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKKyAgICB2b2lkIHNl
dEVuZGluZ1NlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKICAgICBQYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUF0UG9zaXRpb24oY29uc3QgUG9z
aXRpb24mKTsKICAgICB2b2lkIHVwZGF0ZUxheW91dCgpIGNvbnN0OwpAQCAtNzUsOCArNzUsOCBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkb1JlYXBwbHkoKTsgLy8gY2FsbHMgZG9BcHBs
eSgpCiAKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7Ci0gICAgU2VsZWN0aW9uIG1f
c3RhcnRpbmdTZWxlY3Rpb247Ci0gICAgU2VsZWN0aW9uIG1fZW5kaW5nU2VsZWN0aW9uOworICAg
IFZpc2libGVTZWxlY3Rpb24gbV9zdGFydGluZ1NlbGVjdGlvbjsKKyAgICBWaXNpYmxlU2VsZWN0
aW9uIG1fZW5kaW5nU2VsZWN0aW9uOwogICAgIFJlZlB0cjxFbGVtZW50PiBtX3N0YXJ0aW5nUm9v
dEVkaXRhYmxlRWxlbWVudDsKICAgICBSZWZQdHI8RWxlbWVudD4gbV9lbmRpbmdSb290RWRpdGFi
bGVFbGVtZW50OwogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kKiBtX3BhcmVudDsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggOGNjOGMxOS4uYzE3NDBkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTc0LDkgKzc0LDkg
QEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogLy8gV2hlbiBhbiBldmVudCBoYW5kbGVy
IGhhcyBtb3ZlZCB0aGUgc2VsZWN0aW9uIG91dHNpZGUgb2YgYSB0ZXh0IGNvbnRyb2wKIC8vIHdl
IHNob3VsZCB1c2UgdGhlIHRhcmdldCBjb250cm9sJ3Mgc2VsZWN0aW9uIGZvciB0aGlzIGVkaXRp
bmcgb3BlcmF0aW9uLgotU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChFdmVu
dCogZXZlbnQpCitWaXNpYmxlU2VsZWN0aW9uIEVkaXRvcjo6c2VsZWN0aW9uRm9yQ29tbWFuZChF
dmVudCogZXZlbnQpCiB7Ci0gICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWV2ZW50KQogICAgICAg
ICByZXR1cm4gc2VsZWN0aW9uOwogICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgYSB0ZXh0IGNvbnRy
b2wsIGFuZCB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBvZiBpdHMgc2hhZG93IHRy
ZWUsCkBAIC0zNzYsMTQgKzM3NiwxNCBAQCBib29sIEVkaXRvcjo6c2hvdWxkU2hvd0RlbGV0ZUlu
dGVyZmFjZShIVE1MRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICByZXR1cm4gY2xpZW50KCkg
JiYgY2xpZW50KCktPnNob3VsZFNob3dEZWxldGVJbnRlcmZhY2UoZWxlbWVudCk7CiB9CiAKLXZv
aWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xk
U2VsZWN0aW9uKQordm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQogewogICAgIGlmIChjbGllbnQoKSkKICAg
ICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKTsKICAgICBtX2RlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXItPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9u
KTsKIH0KIAotdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBTZWxl
Y3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKK3ZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkQ29u
dGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQogewogICAgIGlm
IChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CiAgICAgICAgIE5vZGUq
IG5vZGUgPSBlbmRpbmdTZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7CkBAIC03MTEsMTMgKzcxMSwx
MyBAQCBib29sIEVkaXRvcjo6ZGlzcGF0Y2hDUFBFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2
ZW50VHlwZSwgQ2xpcGJvYXJkQWNjZXNzUG9saQogdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKICAg
ICBzd2l0Y2ggKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb25UeXBlKCkpIHsKLSAgICAg
ICAgY2FzZSBTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgorICAgICAgICBjYXNlIFZpc2libGVTZWxl
Y3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICAgICAgLy8gZG8gbm90aGluZwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKKyAgICAg
ICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKICAgICAgICAgICAgIG1f
ZnJhbWUtPmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9u
OgorICAgICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgogICAgICAg
ICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgc3R5bGUpCiAgICAgICAgICAgICAgICAg
YXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQo
KSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzMyLDEx
ICs3MzIsMTEgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUsIFJhbmdlKiByYW5nZSkKIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24p
CiB7CiAgICAgc3dpdGNoIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uVHlwZSgpKSB7
Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKKyAgICAgICAgY2FzZSBWaXNp
YmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246
Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKKyAgICAgICAgY2FzZSBW
aXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKKyAgICAgICAgY2FzZSBWaXNpYmxlU2Vs
ZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKICAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVu
dCgpICYmIHN0eWxlKQogICAgICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29t
bWFuZDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uLCBB
cHBseVN0eWxlQ29tbWFuZDo6Rm9yY2VCbG9ja1Byb3BlcnRpZXMpKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtODcwLDcgKzg3MCw3IEBAIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQYXNz
UmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCiB7CiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRD
aGFuZ2VkRXZlbnRzKCpjbWQpOwogICAgIAotICAgIFNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oY21k
LT5lbmRpbmdTZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24o
Y21kLT5lbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9u
IGNoYW5nZSwgZG9uJ3QgYm90aGVyIHNlbmRpbmcgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uLCBidXQg
c3RpbGwgY2FsbCBzZXRTZWxlY3Rpb24sCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyB3b3JrIHRo
YXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xkIHNlbGVjdGlv
biBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNlbGVjdGlvbiBj
YW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMuCkBAIC04OTksNyArODk5LDcgQEAgdm9pZCBF
ZGl0b3I6OnVuYXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQogewog
ICAgIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cygqY21kKTsKICAgICAKLSAg
ICBTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGNtZC0+c3RhcnRpbmdTZWxlY3Rpb24oKSk7CisgICAg
VmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oY21kLT5zdGFydGluZ1NlbGVjdGlvbigpKTsK
ICAgICAvLyBJZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24gY2hhbmdlLCBkb24ndCBib3RoZXIgc2Vu
ZGluZyBzaG91bGRDaGFuZ2VTZWxlY3Rpb24sIGJ1dCBzdGlsbCBjYWxsIHNldFNlbGVjdGlvbiwK
ICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIHdvcmsgdGhhdCBpdCBtdXN0IGRvIGluIHRoaXMgc2l0
dWF0aW9uLgogICAgIC8vIFRoZSBvbGQgc2VsZWN0aW9uIGNhbiBiZSBpbnZhbGlkIGhlcmUgYW5k
IGNhbGxpbmcgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uIGNhbiBwcm9kdWNlIHNvbWUgc3RyYW5nZSBj
YWxscy4KQEAgLTkxNyw3ICs5MTcsNyBAQCB2b2lkIEVkaXRvcjo6cmVhcHBsaWVkRWRpdGluZyhQ
YXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCiB7CiAgICAgZGlzcGF0Y2hFZGl0YWJsZUNvbnRl
bnRDaGFuZ2VkRXZlbnRzKCpjbWQpOwogICAgIAotICAgIFNlbGVjdGlvbiBuZXdTZWxlY3Rpb24o
Y21kLT5lbmRpbmdTZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rp
b24oY21kLT5lbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2VsZWN0
aW9uIGNoYW5nZSwgZG9uJ3QgYm90aGVyIHNlbmRpbmcgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uLCBi
dXQgc3RpbGwgY2FsbCBzZXRTZWxlY3Rpb24sCiAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyB3b3Jr
IHRoYXQgaXQgbXVzdCBkbyBpbiB0aGlzIHNpdHVhdGlvbi4KICAgICAvLyBUaGUgb2xkIHNlbGVj
dGlvbiBjYW4gYmUgaW52YWxpZCBoZXJlIGFuZCBjYWxsaW5nIHNob3VsZENoYW5nZVNlbGVjdGlv
biBjYW4gcHJvZHVjZSBzb21lIHN0cmFuZ2UgY2FsbHMuCkBAIC05NjIsNyArOTYyLDcgQEAgYm9v
bCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcm
IHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25Gb3JDb21t
YW5kKHRyaWdnZXJpbmdFdmVudCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBz
ZWxlY3Rpb25Gb3JDb21tYW5kKHRyaWdnZXJpbmdFdmVudCk7CiAgICAgaWYgKCFzZWxlY3Rpb24u
aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKQEAgLTEyMjksNyAr
MTIyOSw3IEBAIHZvaWQgRWRpdG9yOjpzZWxlY3RDb21wb3NpdGlvbigpCiAgICAgCiAgICAgLy8g
VGhlIGNvbXBvc2l0aW9uIGNhbiBzdGFydCBpbnNpZGUgYSBjb21wb3NlZCBjaGFyYWN0ZXIgc2Vx
dWVuY2UsIHNvIHdlIGhhdmUgdG8gb3ZlcnJpZGUgY2hlY2tzLgogICAgIC8vIFNlZSA8aHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODE+Ci0gICAgU2VsZWN0aW9uIHNl
bGVjdGlvbjsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbjsKICAgICBzZWxlY3Rpb24u
c2V0V2l0aG91dFZhbGlkYXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UtPmVuZFBv
c2l0aW9uKCkpOwogICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uLCBmYWxzZSwgZmFsc2UpOwogfQpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgdm9pZCBFZGl0b3I6
OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgcHJlc2VydmVTZWxl
Y3Rpb24pCiB7CiAgICAgc2V0SWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7
CiAKLSAgICBTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogCiAgICAgc2VsZWN0Q29tcG9zaXRpb24oKTsKIApA
QCAtMTU2MCw3ICsxNTYwLDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGlu
Zyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIAogICAgIC8vIFN0YXJ0IGF0IHRoZSBl
bmQgb2YgdGhlIHNlbGVjdGlvbiwgc2VhcmNoIHRvIGVkZ2Ugb2YgZG9jdW1lbnQuICBTdGFydGlu
ZyBhdCB0aGUgc2VsZWN0aW9uIGVuZCBtYWtlcwogICAgIC8vIHJlcGVhdGVkICJjaGVjayBzcGVs
bGluZyIgY29tbWFuZHMgd29yay4KLSAgICBTZWxlY3Rpb24gc2VsZWN0aW9uKGZyYW1lKCktPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24o
ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICBSZWZQdHI8UmFuZ2U+IHNw
ZWxsaW5nU2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKGZyYW1lKCktPmRvY3VtZW50KCkpKTsK
ICAgICBib29sIHN0YXJ0ZWRXaXRoU2VsZWN0aW9uID0gZmFsc2U7CiAgICAgaWYgKHNlbGVjdGlv
bi5zdGFydCgpLm5vZGUoKSkgewpAQCAtMTY3NCw3ICsxNjc0LDcgQEAgdm9pZCBFZGl0b3I6OmFk
dmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAg
ICAKICAgICAgICAgLy8gRklYTUUgNDg1OTE5MDogVGhpcyBnZXRzIGNvbmZ1c2VkIHdpdGggZG91
YmxlZCBwdW5jdHVhdGlvbiBhdCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoCiAgICAgICAgIFJlZlB0
cjxSYW5nZT4gYmFkR3JhbW1hclJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShncmFtbWFy
U2VhcmNoUmFuZ2UuZ2V0KCksIGdyYW1tYXJQaHJhc2VPZmZzZXQgKyBncmFtbWFyRGV0YWlsLmxv
Y2F0aW9uLCBncmFtbWFyRGV0YWlsLmxlbmd0aCk7Ci0gICAgICAgIGZyYW1lKCktPnNlbGVjdGlv
bigpLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgU0VMX0RF
RkFVTFRfQUZGSU5JVFkpKTsKKyAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgU0VMX0RFRkFVTFRf
QUZGSU5JVFkpKTsKICAgICAgICAgZnJhbWUoKS0+cmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAg
IAogICAgICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJh
ZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwpAQCAtMTY4NSw3ICsxNjg1LDcgQEAgdm9p
ZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0
aW9uKQogICAgICAgICAvLyBhIG1hcmtlciBzbyB3ZSBkcmF3IHRoZSByZWQgc3F1aWdnbGUgbGF0
ZXIuCiAgICAgICAgIAogICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBU
ZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxs
aW5nT2Zmc2V0LCBtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7Ci0gICAgICAgIGZyYW1lKCktPnNl
bGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCks
IERPV05TVFJFQU0pKTsKKyAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKTsK
ICAgICAgICAgZnJhbWUoKS0+cmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgICAgICBj
bGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29y
ZCk7CkBAIC0xODMzLDEzICsxODMzLDEzIEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
QWZ0ZXJUeXBpbmdUb1Bvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIC8vIENoZWNrIHNwZWxsaW5nIG9mIG9uZSB3b3JkCi0gICAgbWFy
a01pc3NwZWxsaW5ncyhTZWxlY3Rpb24oc3RhcnRPZldvcmQocCwgTGVmdFdvcmRJZk9uQm91bmRh
cnkpLCBlbmRPZldvcmQocCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSkpOworICAgIG1hcmtNaXNz
cGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChwLCBMZWZ0V29yZElmT25Cb3Vu
ZGFyeSksIGVuZE9mV29yZChwLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSk7CiAgICAgCiAgICAg
aWYgKCFpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIC8vIENoZWNrIGdyYW1tYXIgb2YgZW50aXJlIHNlbnRlbmNlCi0gICAgbWFya0JhZEdyYW1t
YXIoU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShwKSwgZW5kT2ZTZW50ZW5jZShwKSkpOworICAg
IG1hcmtCYWRHcmFtbWFyKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKHApLCBlbmRP
ZlNlbnRlbmNlKHApKSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NJblJh
bmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2UpCkBAIC0xODYxLDcg
KzE4NjEsNyBAQCBzdGF0aWMgdm9pZCBtYXJrQWxsQmFkR3JhbW1hckluUmFuZ2UoRWRpdG9yQ2xp
ZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5nZSkKIH0KICNlbmRpZgogICAgIAotc3RhdGlj
IHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihFZGl0b3IqIGVkaXRvciwgY29uc3Qg
U2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZykKK3N0YXRpYyB2b2lkIG1h
cmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoRWRpdG9yKiBlZGl0b3IsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBjaGVja1NwZWxsaW5nKQogewogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBzZWxlY3Rpb24gYWxyZWFkeSBleHBhbmRlZCB0byB3
b3JkIGJvdW5kYXJpZXMuCiAgICAgLy8gTWlnaHQgYmUgbmljZSB0byBhc3NlcnQgdGhhdCBoZXJl
LgpAQCAtMTg5NiwxMiArMTg5NiwxMiBAQCBzdGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JC
YWRHcmFtbWFyKEVkaXRvciogZWRpdG9yLCBjb25zdCBTZWxlY3Rpb24mIHNlbGVjdAogICAgIH0g
ICAgCiB9CiAKLXZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFNlbGVjdGlvbiYg
c2VsZWN0aW9uKQordm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uKQogewogICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIo
dGhpcywgc2VsZWN0aW9uLCB0cnVlKTsKIH0KICAgICAKLXZvaWQgRWRpdG9yOjptYXJrQmFkR3Jh
bW1hcihjb25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3ZvaWQgRWRpdG9yOjptYXJrQmFkR3Jh
bW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAjaWZuZGVmIEJVSUxE
SU5HX09OX1RJR0VSCiAgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcih0aGlzLCBzZWxl
Y3Rpb24sIGZhbHNlKTsKQEAgLTE5MjIsNyArMTkyMiw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IEVk
aXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCiAgICAgaWYg
KCFmcmFtZVZpZXcpCiAgICAgICAgIHJldHVybiAwOwogICAgIEludFBvaW50IGZyYW1lUG9pbnQg
PSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpOwotICAgIFNlbGVjdGlv
biBzZWxlY3Rpb24oZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpKTsK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9y
UG9pbnQoZnJhbWVQb2ludCkpOwogICAgIHJldHVybiBhdm9pZEludGVyc2VjdGlvbldpdGhOb2Rl
KHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBkZWxldGVCdXR0b25Db250cm9s
bGVyKCkgPyBkZWxldGVCdXR0b25Db250cm9sbGVyKCktPmNvbnRhaW5lckVsZW1lbnQoKSA6IDAp
OwogfQogCkBAIC0xOTgyLDcgKzE5ODIsNyBAQCB2b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkKICAg
ICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgIFNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwog
ICAgICBpZiAoIXNlbGVjdGlvbi5pc0NhcmV0KCkpCiAgICAgICAgICByZXR1cm47CiAKQEAgLTE5
OTgsNyArMTk5OCw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBtYWtlUmFuZ2UocHJldmlvdXMsIG5leHQpOwogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKLSAgICBTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKHJhbmdlLmdldCgpLCBE
T1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihyYW5nZS5nZXQo
KSwgRE9XTlNUUkVBTSk7CiAKICAgICAvLyBUcmFuc3Bvc2UgdGhlIHR3byBjaGFyYWN0ZXJzLgog
ICAgIFN0cmluZyB0ZXh0ID0gcGxhaW5UZXh0KHJhbmdlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCAx
ZGUxOWRhLi4yZjY3NzIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysr
IGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0xMTAsOCArMTEwLDggQEAgcHVibGljOgog
ICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIHNob3Vs
ZEFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIFJhbmdlKik7CiAgICAgCi0gICAgdm9p
ZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2VsZWN0aW9u
KTsKLSAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhjb25zdCBTZWxlY3Rpb24mIGVu
ZGluZ1NlbGVjdGlvbik7CisgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbik7CisgICAgdm9pZCByZXNwb25kVG9DaGFu
Z2VkQ29udGVudHMoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKTsKIAog
ICAgIFRyaVN0YXRlIHNlbGVjdGlvbkhhc1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25z
dDsKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udEZvclNlbGVjdGlvbihib29sJikgY29u
c3Q7CkBAIC0xOTYsOCArMTk2LDggQEAgcHVibGljOgogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNz
ZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCk7CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zv
clVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBZnRl
clR5cGluZ1RvUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci0gICAgdm9pZCBtYXJr
TWlzc3BlbGxpbmdzKGNvbnN0IFNlbGVjdGlvbiYpOwotICAgIHZvaWQgbWFya0JhZEdyYW1tYXIo
Y29uc3QgU2VsZWN0aW9uJik7CisgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mKTsKKyAgICB2b2lkIG1hcmtCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mKTsKICAgICB2b2lkIGFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVm
b3JlU2VsZWN0aW9uID0gZmFsc2UpOwogICAgIHZvaWQgc2hvd1NwZWxsaW5nR3Vlc3NQYW5lbCgp
OwogICAgIGJvb2wgc3BlbGxpbmdQYW5lbElzU2hvd2luZygpOwpAQCAtMjUzLDcgKzI1Myw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb25G
b3JDb21tYW5kKEV2ZW50Kik7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JDb21t
YW5kKEV2ZW50Kik7CiAKICAgICB2b2lkIGFwcGVuZFRvS2lsbFJpbmcoY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBwcmVwZW5kVG9LaWxsUmluZyhjb25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcAppbmRleCA1ODJjYTBhLi5hZmU0ZWFjIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCkBAIC0xODQsNyArMTg0LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydE5v
ZGUoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPE5vZGU+IGNvbnRlbnQpCiAKIHN0YXRpYyBib29s
IGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoRnJhbWUqIGZyYW1lLCBUZXh0R3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkpCiB7Ci0gICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBm
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAgIHNlbGVjdGlvbi5leHBhbmRVc2lu
Z0dyYW51bGFyaXR5KGdyYW51bGFyaXR5KTsKICAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0g
c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFuZXdSYW5nZSkKQEAgLTkz
NSw4ICs5MzUsOCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU3VwZXJzY3JpcHQoRnJhbWUqIGZyYW1l
LCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLAogCiBzdGF0aWMgYm9vbCBleGVj
dXRlU3dhcFdpdGhNYXJrKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb25zdCBTdHJpbmcmKQogewotICAgIGNvbnN0IFNlbGVjdGlvbiYgbWFyayA9IGZyYW1lLT5t
YXJrKCk7Ci0gICAgY29uc3QgU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG1hcmsgPSBmcmFt
ZS0+bWFyaygpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsuaXNOb25lKCkgfHwgc2Vs
ZWN0aW9uLmlzTm9uZSgpKSB7CiAgICAgICAgIHN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTA0MiwyMCArMTA0MiwyMCBAQCBzdGF0aWMgYm9vbCBlbmFibGVkKEZyYW1l
KiwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlKQogc3RhdGljIGJvb2wgZW5hYmxlZFZpc2li
bGVTZWxlY3Rpb24oRnJhbWUqIGZyYW1lLCBFdmVudCogZXZlbnQsIEVkaXRvckNvbW1hbmRTb3Vy
Y2UpCiB7CiAgICAgLy8gVGhlIHRlcm0gInZpc2libGUiIGhlcmUgaW5jbHVkZXMgYSBjYXJldCBp
biBlZGl0YWJsZSB0ZXh0IG9yIGEgcmFuZ2UgaW4gYW55IHRleHQuCi0gICAgY29uc3QgU2VsZWN0
aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkZvckNvbW1hbmQoZXZl
bnQpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLT5lZGl0
b3IoKS0+c2VsZWN0aW9uRm9yQ29tbWFuZChldmVudCk7CiAgICAgcmV0dXJuIChzZWxlY3Rpb24u
aXNDYXJldCgpICYmIHNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKSB8fCBzZWxlY3Rpb24u
aXNSYW5nZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVkVmlzaWJsZVNlbGVjdGlvbkFuZE1h
cmsoRnJhbWUqIGZyYW1lLCBFdmVudCogZXZlbnQsIEVkaXRvckNvbW1hbmRTb3VyY2UpCiB7Ci0g
ICAgY29uc3QgU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlv
bkZvckNvbW1hbmQoZXZlbnQpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uRm9yQ29tbWFuZChldmVudCk7CiAgICAgcmV0
dXJuICgoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUo
KSkgfHwgc2VsZWN0aW9uLmlzUmFuZ2UoKSkKICAgICAgICAgJiYgZnJhbWUtPm1hcmsoKS5pc0Nh
cmV0T3JSYW5nZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVDYXJldEluRWRpdGFibGVUZXh0
KEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2ZW50LCBFZGl0b3JDb21tYW5kU291cmNlKQogewotICAg
IGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25G
b3JDb21tYW5kKGV2ZW50KTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24g
PSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkZvckNvbW1hbmQoZXZlbnQpOwogICAgIHJldHVy
biBzZWxlY3Rpb24uaXNDYXJldCgpICYmIHNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpOwog
fQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBi
L1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCmluZGV4IDZhNGVlN2UuLjg4
MTY5YmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
CisrKyBiL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCkBAIC02Myw3ICs2
Myw3IEBAIGJvb2wgRm9ybWF0QmxvY2tDb21tYW5kOjptb2RpZnlSYW5nZSgpCiAgICAgc2V0RW5k
aW5nU2VsZWN0aW9uKHZpc2libGVFbmQpOwogICAgIGRvQXBwbHkoKTsKICAgICB2aXNpYmxlRW5k
ID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpOwotICAgIHNldEVuZGluZ1NlbGVjdGlv
bihTZWxlY3Rpb24odmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCksIHZpc2libGVFbmQuZGVl
cEVxdWl2YWxlbnQoKSwgRE9XTlNUUkVBTSkpOworICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLCB2aXNpYmxlRW5kLmRl
ZXBFcXVpdmFsZW50KCksIERPV05TVFJFQU0pKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
ODcsNyArODcsNyBAQCB2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgLy8g
bWFyZ2luL3BhZGRpbmcsIGJ1dCBub3Qgb3RoZXJzLiAgV2Ugc2hvdWxkIG1ha2UgdGhlIGdhcCBw
YWludGluZyBtb3JlIGNvbnNpc3RlbnQgYW5kIAogICAgIC8vIHRoZW4gdXNlIGEgbGVmdCBtYXJn
aW4vcGFkZGluZyBydWxlIGhlcmUuCiAgICAgaWYgKHZpc2libGVFbmQgIT0gdmlzaWJsZVN0YXJ0
ICYmIGlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlRW5kKSkKLSAgICAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKFNlbGVjdGlvbih2aXNpYmxlU3RhcnQsIHZpc2libGVFbmQucHJldmlvdXModHJ1ZSkp
KTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVN0
YXJ0LCB2aXNpYmxlRW5kLnByZXZpb3VzKHRydWUpKSk7CiAKICAgICBpZiAoZW5kaW5nU2VsZWN0
aW9uKCkuaXNSYW5nZSgpICYmIG1vZGlmeVJhbmdlKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAgYi9XZWJDb3Jl
L2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCmluZGV4IDI0MmFlYjAuLjI4MzhhMTkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAKKysr
IGIvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcApAQCAtMTA5LDcgKzEw
OSw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSW5kZW50T3V0ZGVudENvbW1hbmQ6OnByZXBhcmVC
bG9ja3F1b3RlTGV2ZWxGb3JJbnNlcnRpb24oVmlzCiAKIHZvaWQgSW5kZW50T3V0ZGVudENvbW1h
bmQ6OmluZGVudFJlZ2lvbigpCiB7Ci0gICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGlv
bkZvclBhcmFncmFwaEl0ZXJhdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVyYXRpb24oZW5kaW5n
U2VsZWN0aW9uKCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VsZWN0aW9uID0gc2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZlNlbGVjdGlv
biA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CiAgICAgaW50IHN0YXJ0SW5kZXggPSBpbmRleEZv
clZpc2libGVQb3NpdGlvbihzdGFydE9mU2VsZWN0aW9uKTsKQEAgLTEyNiw3ICsxMjYsNyBAQCB2
b2lkIEluZGVudE91dGRlbnRDb21tYW5kOjppbmRlbnRSZWdpb24oKQogICAgICAgICBpbnNlcnRO
b2RlQXQoYmxvY2txdW90ZSwgc3RhcnQpOwogICAgICAgICBSZWZQdHI8RWxlbWVudD4gcGxhY2Vo
b2xkZXIgPSBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAgIGFwcGVuZE5v
ZGUocGxhY2Vob2xkZXIsIGJsb2NrcXVvdGUpOwotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
U2VsZWN0aW9uKFBvc2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAwKSwgRE9XTlNUUkVBTSkpOwor
ICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihQb3NpdGlvbihwbGFj
ZWhvbGRlci5nZXQoKSwgMCksIERPV05TVFJFQU0pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIEluZGVudE91dGRlbnRDb21tYW5kOjppbmRl
bnRSZWdpb24oKQogICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCks
IHN0YXJ0SW5kZXgsIDAsIHRydWUpOwogICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2UgPSBUZXh0
SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpLCBlbmRJbmRleCwgMCwgdHJ1ZSk7CiAgICAgaWYgKHN0YXJ0UmFuZ2UgJiYgZW5k
UmFuZ2UpCi0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oc3RhcnRSYW5nZS0+
c3RhcnRQb3NpdGlvbigpLCBlbmRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBET1dOU1RSRUFNKSk7
CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0UmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSwgZW5kUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgRE9XTlNUUkVBTSkp
OwogfQogCiB2b2lkIEluZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKCkKQEAg
LTI2MiwxMyArMjYyLDEzIEBAIHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRSZWdp
b24oKQogICAgIHdoaWxlIChlbmRPZkN1cnJlbnRQYXJhZ3JhcGggIT0gZW5kQWZ0ZXJTZWxlY3Rp
b24pIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mTmV4dFBhcmFncmFwaCA9IGVuZE9m
UGFyYWdyYXBoKGVuZE9mQ3VycmVudFBhcmFncmFwaC5uZXh0KCkpOwogICAgICAgICBpZiAoZW5k
T2ZDdXJyZW50UGFyYWdyYXBoID09IGVuZE9mTGFzdFBhcmFncmFwaCkKLSAgICAgICAgICAgIHNl
dEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24ob3JpZ2luYWxTZWxlY3Rpb25FbmQsIERPV05TVFJF
QU0pKTsKKyAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG9y
aWdpbmFsU2VsZWN0aW9uRW5kLCBET1dOU1RSRUFNKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRPZkN1cnJlbnRQYXJhZ3JhcGgpOwogICAgICAgICBv
dXRkZW50UGFyYWdyYXBoKCk7CiAgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGVuZE9m
TmV4dFBhcmFncmFwaDsKICAgICB9Ci0gICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihv
cmlnaW5hbFNlbGVjdGlvblN0YXJ0LCBlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKSwgRE9XTlNUUkVB
TSkpOworICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG9yaWdpbmFsU2Vs
ZWN0aW9uU3RhcnQsIGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLCBET1dOU1RSRUFNKSk7CiB9CiAK
IHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6OmRvQXBwbHkoKQpAQCAtMjkwLDcgKzI5MCw3IEBA
IHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIG1hcmdpbi9wYWRk
aW5nLCBidXQgbm90IG90aGVycy4gIFdlIHNob3VsZCBtYWtlIHRoZSBnYXAgcGFpbnRpbmcgbW9y
ZSBjb25zaXN0ZW50IGFuZCAKICAgICAvLyB0aGVuIHVzZSBhIGxlZnQgbWFyZ2luL3BhZGRpbmcg
cnVsZSBoZXJlLgogICAgIGlmICh2aXNpYmxlRW5kICE9IHZpc2libGVTdGFydCAmJiBpc1N0YXJ0
T2ZQYXJhZ3JhcGgodmlzaWJsZUVuZCkpCi0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxl
Y3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5kLnByZXZpb3VzKHRydWUpKSk7CisgICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHZpc2libGVTdGFydCwgdmlzaWJs
ZUVuZC5wcmV2aW91cyh0cnVlKSkpOwogCiAgICAgaWYgKG1fdHlwZU9mQWN0aW9uID09IEluZGVu
dCkKICAgICAgICAgaW5kZW50UmVnaW9uKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJy
ZWFrQ29tbWFuZC5jcHAKaW5kZXggNDJjY2E0MS4uMTgxYTkxYiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcApAQCAtODgsNyArODgsNyBAQCBib29sIEluc2Vy
dExpbmVCcmVha0NvbW1hbmQ6OnNob3VsZFVzZUJyZWFrRWxlbWVudChjb25zdCBQb3NpdGlvbiYg
aW5zZXJ0aW9uUG9zKQogdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKIHsK
ICAgICBkZWxldGVTZWxlY3Rpb24oKTsKLSAgICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gZW5kaW5n
U2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxl
Y3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAg
ICAgCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0Fw
cGx5KCkKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobm9kZVRvSW5zZXJ0LT5jbG9uZU5v
ZGUoZmFsc2UpLCBub2RlVG9JbnNlcnQpOwogICAgICAgICAKICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIGVuZGluZ1Bvc2l0aW9uKFBvc2l0aW9uKG5vZGVUb0luc2VydC5nZXQoKSwgMCkpOwotICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKGVuZGluZ1Bvc2l0aW9uKSk7CisgICAg
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1Bvc2l0aW9uKSk7
CiAgICAgfSBlbHNlIGlmIChwb3Mub2Zmc2V0KCkgPD0gY2FyZXRNaW5PZmZzZXQocG9zLm5vZGUo
KSkpIHsKICAgICAgICAgaW5zZXJ0Tm9kZUF0KG5vZGVUb0luc2VydC5nZXQoKSwgcG9zKTsKICAg
ICAgICAgCkBAIC0xMjQsMTIgKzEyNCwxMiBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6
OmRvQXBwbHkoKQogICAgICAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRp
b24oUG9zaXRpb24obm9kZVRvSW5zZXJ0LmdldCgpLCAwKSkpKQogICAgICAgICAgICAgaW5zZXJ0
Tm9kZUJlZm9yZShub2RlVG9JbnNlcnQtPmNsb25lTm9kZShmYWxzZSkuZ2V0KCksIG5vZGVUb0lu
c2VydC5nZXQoKSk7CiAgICAgICAgIAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0
aW9uKHBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGVUb0luc2VydC5nZXQoKSksIERPV05TVFJFQU0pKTsK
KyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25BZnRl
ck5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSwgRE9XTlNUUkVBTSkpOwogICAgIC8vIElmIHdlJ3Jl
IGluc2VydGluZyBhZnRlciBhbGwgb2YgdGhlIHJlbmRlcmVkIHRleHQgaW4gYSB0ZXh0IG5vZGUs
IG9yIGludG8gYSBub24tdGV4dCBub2RlLAogICAgIC8vIGEgc2ltcGxlIGluc2VydGlvbiBpcyBz
dWZmaWNpZW50LgogICAgIH0gZWxzZSBpZiAocG9zLm9mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0
KHBvcy5ub2RlKCkpIHx8ICFwb3Mubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgaW5z
ZXJ0Tm9kZUF0KG5vZGVUb0luc2VydC5nZXQoKSwgcG9zKTsKLSAgICAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKFNlbGVjdGlvbihwb3NpdGlvbkFmdGVyTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBE
T1dOU1RSRUFNKSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KHBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGVUb0luc2VydC5nZXQoKSksIERPV05TVFJFQU0pKTsKICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBTcGxpdCBhIHRleHQgbm9kZQogICAgICAgICBBU1NFUlQo
cG9zLm5vZGUoKS0+aXNUZXh0Tm9kZSgpKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEluc2Vy
dExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKGVuZGluZ1Bvc2l0
aW9uLCBET1dOU1RSRUFNKSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKGVuZGluZ1Bvc2l0aW9uLCBET1dOU1RSRUFNKSk7CiAgICAgfQogCiAgICAgLy8gSGFu
ZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgpAQCAtMTcyLDcgKzE3
Miw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGFw
cGx5U3R5bGUodHlwaW5nU3R5bGUsIFBvc2l0aW9uKG5vZGVUb0luc2VydC5nZXQoKSwgMCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uKG5vZGVUb0luc2VydC5nZXQo
KSwgbWF4RGVlcE9mZnNldChub2RlVG9JbnNlcnQuZ2V0KCkpKSk7CiAgICAgICAgIC8vIEV2ZW4g
dGhvdWdoIHRoaXMgYXBwbHlTdHlsZSBvcGVyYXRlcyBvbiBhIFJhbmdlLCBpdCBzdGlsbCBzZXRz
IGFuIGVuZGluZ1NlbGVjdGlvbigpLgotICAgICAgICAvLyBJdCB0cmllcyB0byBzZXQgYSBTZWxl
Y3Rpb24gYXJvdW5kIHRoZSBjb250ZW50IGl0IG9wZXJhdGVkIG9uLiBTbywgdGhhdCBTZWxlY3Rp
b24KKyAgICAgICAgLy8gSXQgdHJpZXMgdG8gc2V0IGEgVmlzaWJsZVNlbGVjdGlvbiBhcm91bmQg
dGhlIGNvbnRlbnQgaXQgb3BlcmF0ZWQgb24uIFNvLCB0aGF0IFZpc2libGVTZWxlY3Rpb24KICAg
ICAgICAgLy8gd2lsbCBlaXRoZXIgKGEpIHNlbGVjdCB0aGUgbGluZSBicmVhayB3ZSBpbnNlcnRl
ZCwgb3IgaXQgd2lsbCAoYikgYmUgYSBjYXJldCBqdXN0IAogICAgICAgICAvLyBiZWZvcmUgdGhl
IGxpbmUgYnJlYWsgKGlmIHRoZSBsaW5lIGJyZWFrIGlzIGF0IHRoZSBlbmQgb2YgYSBibG9jayBp
dCBpc24ndCBzZWxlY3RhYmxlKS4KICAgICAgICAgLy8gU28sIHRoaXMgbmV4dCBjYWxsIHNldHMg
dGhlIGVuZGluZ1NlbGVjdGlvbigpIHRvIGEgY2FyZXQganVzdCBhZnRlciB0aGUgbGluZSBicmVh
ayAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAgYi9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IDIwYzYzYjguLjk0N2Vk
MjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKKysr
IGIvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcApAQCAtNjEsNyArNjEsNyBA
QCBJbnNlcnRMaXN0Q29tbWFuZDo6SW5zZXJ0TGlzdENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50
LCBUeXBlIHR5cGUsIGNvbnN0IFN0cmluZwogCiBib29sIEluc2VydExpc3RDb21tYW5kOjptb2Rp
ZnlSYW5nZSgpCiB7Ci0gICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGlvbkZvclBhcmFn
cmFwaEl0ZXJhdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24gPSBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVyYXRpb24oZW5kaW5nU2VsZWN0aW9u
KCkpOwogICAgIEFTU0VSVChzZWxlY3Rpb24uaXNSYW5nZSgpKTsKICAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZlNlbGVjdGlvbiA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKICAgICBWaXNp
YmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24gPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwpAQCAt
OTksNyArOTksNyBAQCBib29sIEluc2VydExpc3RDb21tYW5kOjptb2RpZnlSYW5nZSgpCiAgICAg
ZG9BcHBseSgpOwogICAgIC8vIEZldGNoIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbiwgZm9yIHRo
ZSByZWFzb24gbWVudGlvbmVkIGFib3ZlLgogICAgIGVuZE9mU2VsZWN0aW9uID0gZW5kaW5nU2Vs
ZWN0aW9uKCkudmlzaWJsZUVuZCgpOwotICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24o
c3RhcnRPZlNlbGVjdGlvbiwgZW5kT2ZTZWxlY3Rpb24pKTsKKyAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VsZWN0aW9uLCBlbmRPZlNlbGVjdGlvbikpOwog
ICAgIG1fZm9yY2VDcmVhdGVMaXN0ID0gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0x
MjMsNyArMTIzLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgLy8g
bWFyZ2luL3BhZGRpbmcsIGJ1dCBub3Qgb3RoZXJzLiAgV2Ugc2hvdWxkIG1ha2UgdGhlIGdhcCBw
YWludGluZyBtb3JlIGNvbnNpc3RlbnQgYW5kIAogICAgIC8vIHRoZW4gdXNlIGEgbGVmdCBtYXJn
aW4vcGFkZGluZyBydWxlIGhlcmUuCiAgICAgaWYgKHZpc2libGVFbmQgIT0gdmlzaWJsZVN0YXJ0
ICYmIGlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlRW5kKSkKLSAgICAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKFNlbGVjdGlvbih2aXNpYmxlU3RhcnQsIHZpc2libGVFbmQucHJldmlvdXModHJ1ZSkp
KTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVN0
YXJ0LCB2aXNpYmxlRW5kLnByZXZpb3VzKHRydWUpKSk7CiAKICAgICBpZiAoZW5kaW5nU2VsZWN0
aW9uKCkuaXNSYW5nZSgpICYmIG1vZGlmeVJhbmdlKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNw
cCBiL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcApp
bmRleCAzMGUwMDZlLi5iODE0ODllIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBJ
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgIGlu
c2VydE5vZGVBZnRlcihibG9ja1RvSW5zZXJ0LCBzdGFydEJsb2NrKTsKIAogICAgICAgICBhcHBl
bmRCbG9ja1BsYWNlaG9sZGVyKGJsb2NrVG9JbnNlcnQpOwotICAgICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oU2VsZWN0aW9uKFBvc2l0aW9uKGJsb2NrVG9JbnNlcnQuZ2V0KCksIDApLCBET1dOU1RS
RUFNKSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKFBvc2l0
aW9uKGJsb2NrVG9JbnNlcnQuZ2V0KCksIDApLCBET1dOU1RSRUFNKSk7CiAgICAgICAgIGFwcGx5
U3R5bGVBZnRlckluc2VydGlvbihzdGFydEJsb2NrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTIwOSw5ICsyMDksOSBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6
OmRvQXBwbHkoKQogICAgICAgICAKICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShibG9ja1RvSW5z
ZXJ0LCByZWZOb2RlKTsKICAgICAgICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihibG9ja1RvSW5z
ZXJ0LmdldCgpKTsKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlv
bihibG9ja1RvSW5zZXJ0LmdldCgpLCAwKSwgRE9XTlNUUkVBTSkpOworICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihQb3NpdGlvbihibG9ja1RvSW5zZXJ0LmdldCgp
LCAwKSwgRE9XTlNUUkVBTSkpOwogICAgICAgICBhcHBseVN0eWxlQWZ0ZXJJbnNlcnRpb24oc3Rh
cnRCbG9jayk7Ci0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24ocG9zLCBET1dO
U1RSRUFNKSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBv
cywgRE9XTlNUUkVBTSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMzEsNyArMzMx
LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9zaXRp
b24oYmxvY2tUb0luc2VydC5nZXQoKSwgMCksIERPV05TVFJFQU0pKTsKKyAgICBzZXRFbmRpbmdT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihQb3NpdGlvbihibG9ja1RvSW5zZXJ0LmdldCgpLCAw
KSwgRE9XTlNUUkVBTSkpOwogICAgIGFwcGx5U3R5bGVBZnRlckluc2VydGlvbihzdGFydEJsb2Nr
KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNw
cCBiL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggNDZlOWE5NC4u
NGRmZDU0MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNw
cAorKysgYi9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCkBAIC05NiwxMiAr
OTYsMTIgQEAgYm9vbCBJbnNlcnRUZXh0Q29tbWFuZDo6cGVyZm9ybVRyaXZpYWxSZXBsYWNlKGNv
bnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbnMKICAgICAvLyBXZSBjb3VsZCBoYXZlIGlu
c2VydGVkIGEgcGFydCBvZiBjb21wb3NlZCBjaGFyYWN0ZXIgc2VxdWVuY2UsCiAgICAgLy8gc28g
d2UgYXJlIGJhc2ljYWxseSB0cmVhdGluZyBlbmRpbmcgc2VsZWN0aW9uIGFzIGEgcmFuZ2UgdG8g
YXZvaWQgdmFsaWRhdGlvbi4KICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU3ODE+Ci0gICAgU2VsZWN0aW9uIGZvcmNlZEVuZGluZ1NlbGVjdGlvbjsKKyAg
ICBWaXNpYmxlU2VsZWN0aW9uIGZvcmNlZEVuZGluZ1NlbGVjdGlvbjsKICAgICBmb3JjZWRFbmRp
bmdTZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24oc3RhcnQsIGVuZFBvc2l0aW9uKTsKICAg
ICBzZXRFbmRpbmdTZWxlY3Rpb24oZm9yY2VkRW5kaW5nU2VsZWN0aW9uKTsKICAgICAKICAgICBp
ZiAoIXNlbGVjdEluc2VydGVkVGV4dCkKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVj
dGlvbihlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpKTsKKyAgICAgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgp
KSk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBJ
bnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQoY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIGJvb2wg
c2VsZWN0SW5zZXJ0ZWRUZXgKICAgICAvLyBXZSBjb3VsZCBoYXZlIGluc2VydGVkIGEgcGFydCBv
ZiBjb21wb3NlZCBjaGFyYWN0ZXIgc2VxdWVuY2UsCiAgICAgLy8gc28gd2UgYXJlIGJhc2ljYWxs
eSB0cmVhdGluZyBlbmRpbmcgc2VsZWN0aW9uIGFzIGEgcmFuZ2UgdG8gYXZvaWQgdmFsaWRhdGlv
bi4KICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3ODE+
Ci0gICAgU2VsZWN0aW9uIGZvcmNlZEVuZGluZ1NlbGVjdGlvbjsKKyAgICBWaXNpYmxlU2VsZWN0
aW9uIGZvcmNlZEVuZGluZ1NlbGVjdGlvbjsKICAgICBmb3JjZWRFbmRpbmdTZWxlY3Rpb24uc2V0
V2l0aG91dFZhbGlkYXRpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihmb3JjZWRFbmRpbmdTZWxlY3Rpb24pOwogCkBAIC0xOTksNyArMTk5LDcg
QEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQoY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRl
eHQsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXgKICAgICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHls
ZSk7CiAKICAgICBpZiAoIXNlbGVjdEluc2VydGVkVGV4dCkKLSAgICAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKFNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKSwgZW5kaW5nU2VsZWN0aW9u
KCkuYWZmaW5pdHkoKSkpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKSwgZW5kaW5nU2VsZWN0aW9uKCkuYWZmaW5pdHko
KSkpOwogfQogCiBQb3NpdGlvbiBJbnNlcnRUZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKGNvbnN0IFBv
c2l0aW9uJiBwb3MpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9u
TGlzdExldmVsLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwu
Y3BwCmluZGV4IDliYzczYzYuLjI0OTU5NzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9N
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlT
ZWxlY3Rpb25MaXN0TGV2ZWwuY3BwCkBAIC00Niw3ICs0Niw3IEBAIGJvb2wgTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsQ29tbWFuZDo6cHJlc2VydmVzVHlwaW5nU3R5bGUoKSBjb25zdAogfQogCiAv
LyBUaGlzIG5lZWRzIHRvIGJlIHN0YXRpYyBzbyBpdCBjYW4gYmUgY2FsbGVkIGJ5IGNhbkluY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsIGFuZCBjYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAot
c3RhdGljIGJvb2wgZ2V0U3RhcnRFbmRMaXN0Q2hpbGRyZW4oY29uc3QgU2VsZWN0aW9uJiBzZWxl
Y3Rpb24sIE5vZGUqJiBzdGFydCwgTm9kZSomIGVuZCkKK3N0YXRpYyBib29sIGdldFN0YXJ0RW5k
TGlzdENoaWxkcmVuKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgTm9kZSomIHN0
YXJ0LCBOb2RlKiYgZW5kKQogewogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE0MSw3ICsxNDEsNyBAQCBJbmNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbENvbW1hbmQ6OkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZChEb2N1bWVudCog
ZAogfQogCiAvLyBUaGlzIG5lZWRzIHRvIGJlIHN0YXRpYyBzbyBpdCBjYW4gYmUgY2FsbGVkIGJ5
IGNhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCi1zdGF0aWMgYm9vbCBjYW5JbmNyZWFzZUxp
c3RMZXZlbChjb25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbiwgTm9kZSomIHN0YXJ0LCBOb2RlKiYg
ZW5kKQorc3RhdGljIGJvb2wgY2FuSW5jcmVhc2VMaXN0TGV2ZWwoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uLCBOb2RlKiYgc3RhcnQsIE5vZGUqJiBlbmQpCiB7CiAgICAgaWYgKCFn
ZXRTdGFydEVuZExpc3RDaGlsZHJlbihzZWxlY3Rpb24sIHN0YXJ0LCBlbmQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yMzksNyArMjM5LDcgQEAgRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxDb21tYW5kOjpEZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQoRG9jdW1lbnQqIGQK
IH0KIAogLy8gVGhpcyBuZWVkcyB0byBiZSBzdGF0aWMgc28gaXQgY2FuIGJlIGNhbGxlZCBieSBj
YW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAotc3RhdGljIGJvb2wgY2FuRGVjcmVhc2VMaXN0
TGV2ZWwoY29uc3QgU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE5vZGUqJiBzdGFydCwgTm9kZSomIGVu
ZCkKK3N0YXRpYyBib29sIGNhbkRlY3JlYXNlTGlzdExldmVsKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgTm9kZSomIHN0YXJ0LCBOb2RlKiYgZW5kKQogewogICAgIGlmICghZ2V0
U3RhcnRFbmRMaXN0Q2hpbGRyZW4oc2VsZWN0aW9uLCBzdGFydCwgZW5kKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21t
YW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXgg
MDg1ODdjYi4uNDUzNjRiYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rp
b25Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCkBAIC0zOSw3ICszOSw3IEBAIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpNb3ZlU2VsZWN0aW9u
Q29tbWFuZChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50CiAKIHZvaWQgTW92
ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24g
PSBlbmRpbmdTZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGVu
ZGluZ1NlbGVjdGlvbigpOwogICAgIEFTU0VSVChzZWxlY3Rpb24uaXNSYW5nZSgpKTsKIAogICAg
IFBvc2l0aW9uIHBvcyA9IG1fcG9zaXRpb247CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgTW92ZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghcG9zLm5vZGUoKS0+aW5Eb2N1bWVu
dCgpKQogICAgICAgICBwb3MgPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpOwogCi0gICAgc2V0
RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigpLmFmZmluaXR5
KCkpKTsKKyAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3MsIGVuZGlu
Z1NlbGVjdGlvbigpLmFmZmluaXR5KCkpKTsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHBvc2l0aW9uTm9kZS0+ZG9jdW1lbnQoKSwg
bV9mcmFnbWVudCwgdHJ1ZSwgbV9zbWFydE1vdmUpKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1JlbW92
ZUZvcm1hdENvbW1hbmQuY3BwCmluZGV4IGU2ODg4YzMuLjYwOWFiMGUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRp
bmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJF
ZGl0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2lu
Y2x1ZGUgIlNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNs
dWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKaW5kZXggNDkwNGM3Zi4uNDBiNWQ4YSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC02MSw3ICs2MSw3IEBAIGVudW0gRUZy
YWdtZW50VHlwZSB7IEVtcHR5RnJhZ21lbnQsIFNpbmdsZVRleHROb2RlRnJhZ21lbnQsIFRyZWVG
cmFnbWVudCB9OwogCiBjbGFzcyBSZXBsYWNlbWVudEZyYWdtZW50IDogTm9uY29weWFibGUgewog
cHVibGljOgotICAgIFJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnQqLCBEb2N1bWVudEZyYWdt
ZW50KiwgYm9vbCBtYXRjaFN0eWxlLCBjb25zdCBTZWxlY3Rpb24mKTsKKyAgICBSZXBsYWNlbWVu
dEZyYWdtZW50KERvY3VtZW50KiwgRG9jdW1lbnRGcmFnbWVudCosIGJvb2wgbWF0Y2hTdHlsZSwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCiAgICAgTm9kZSogZmlyc3RDaGlsZCgpIGNvbnN0
OwogICAgIE5vZGUqIGxhc3RDaGlsZCgpIGNvbnN0OwpAQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRp
YyBib29sIGlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVNwYW4oY29uc3QgTm9kZSAqbm9kZSkK
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQgKj4obm9kZSktPmdldEF0
dHJpYnV0ZShjbGFzc0F0dHIpID09IGNvbnZlcnRlZFNwYWNlU3BhbkNsYXNzU3RyaW5nOwogfQog
Ci1SZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3VtZW50KiBkb2N1
bWVudCwgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIGJvb2wgbWF0Y2hTdHlsZSwgY29uc3Qg
U2VsZWN0aW9uJiBzZWxlY3Rpb24pCitSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZy
YWdtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIGJv
b2wgbWF0Y2hTdHlsZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogICAgIDog
bV9kb2N1bWVudChkb2N1bWVudCksCiAgICAgICBtX2ZyYWdtZW50KGZyYWdtZW50KSwKICAgICAg
IG1fbWF0Y2hTdHlsZShtYXRjaFN0eWxlKSwgCkBAIC0xMzYsNyArMTM2LDcgQEAgUmVwbGFjZW1l
bnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudCogZG9jdW1lbnQsIERvY3Vt
ZW50RnJhZ21lbnQqIGYKICAgICBOb2RlKiBzdHlsZU5vZGUgPSBzZWxlY3Rpb24uYmFzZSgpLm5v
ZGUoKTsKICAgICBSZWZQdHI8Tm9kZT4gaG9sZGVyID0gaW5zZXJ0RnJhZ21lbnRGb3JUZXN0UmVu
ZGVyaW5nKHN0eWxlTm9kZSk7CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFNlbGVj
dGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKGhvbGRlci5nZXQoKSkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gVmlzaWJsZVNlbGVjdGlvbjo6
c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKGhvbGRlci5nZXQoKSkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dChyYW5nZS5nZXQoKSk7CiAgICAgLy8g
R2l2ZSB0aGUgcm9vdCBhIGNoYW5jZSB0byBjaGFuZ2UgdGhlIHRleHQuCiAgICAgUmVmUHRyPEJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3Jl
YXRlKHRleHQpOwpAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6Om1lcmdlRW5kSWZOZWVkZWQoKQogCiB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpk
b0FwcGx5KCkKIHsKLSAgICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCk7
CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKICAg
ICBBU1NFUlQoc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpOwogICAgIEFTU0VSVChzZWxlY3Rp
b24uc3RhcnQoKS5ub2RlKCkpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkgfHwgIXNlbGVj
dGlvbi5zdGFydCgpLm5vZGUoKSkKQEAgLTEwMzEsOSArMTAzMSw5IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmNvbXBsZXRlSFRNTFJlcGxhY2VtZW50KGNvbnN0IFBvc2l0aW9uICZs
YXN0UG9zaXRpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAobV9zZWxlY3RSZXBsYWNl
bWVudCkKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihzdGFydCwgZW5kLCBT
RUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihzdGFydCwgZW5kLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogICAgIGVsc2UK
LSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihlbmQsIFNFTF9ERUZBVUxUX0FG
RklOSVRZKSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVu
ZCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKIH0KIAogRWRpdEFjdGlvbiBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Vk
aXRpbmcvU2VsZWN0aW9uLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb24uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzAxYzk3Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUv
ZWRpdGluZy9TZWxlY3Rpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjUxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0gIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNlbGVjdGlvbi5oIgotCi0jaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKLSNpbmNs
dWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50
LmgiCi0jaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKLSNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgi
Ci0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1
ZGUgPHN0ZGlvLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU2VsZWN0aW9uOjpTZWxlY3Rp
b24oKQotICAgIDogbV9hZmZpbml0eShET1dOU1RSRUFNKQotICAgICwgbV9ncmFudWxhcml0eShD
aGFyYWN0ZXJHcmFudWxhcml0eSkKLSAgICAsIG1fc2VsZWN0aW9uVHlwZShOb1NlbGVjdGlvbikK
LSAgICAsIG1fYmFzZUlzRmlyc3QodHJ1ZSkKLXsKLX0KLQotU2VsZWN0aW9uOjpTZWxlY3Rpb24o
Y29uc3QgUG9zaXRpb24mIHBvcywgRUFmZmluaXR5IGFmZmluaXR5KQotICAgIDogbV9iYXNlKHBv
cykKLSAgICAsIG1fZXh0ZW50KHBvcykKLSAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCi0gICAg
LCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQotewotICAgIHZhbGlkYXRlKCk7
Ci19Ci0KLVNlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0IFBvc2l0aW9uJiBiYXNlLCBjb25zdCBQ
b3NpdGlvbiYgZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHkpCi0gICAgOiBtX2Jhc2UoYmFzZSkK
LSAgICAsIG1fZXh0ZW50KGV4dGVudCkKLSAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCi0gICAg
LCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQotewotICAgIHZhbGlkYXRlKCk7
Ci19Ci0KLVNlbGVjdGlvbjo6U2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zKQot
ICAgIDogbV9iYXNlKHBvcy5kZWVwRXF1aXZhbGVudCgpKQotICAgICwgbV9leHRlbnQocG9zLmRl
ZXBFcXVpdmFsZW50KCkpCi0gICAgLCBtX2FmZmluaXR5KHBvcy5hZmZpbml0eSgpKQotICAgICwg
bV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKLXsKLSAgICB2YWxpZGF0ZSgpOwot
fQotCi1TZWxlY3Rpb246OlNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIGJhc2UsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgZXh0ZW50KQotICAgIDogbV9iYXNlKGJhc2UuZGVlcEVxdWl2
YWxlbnQoKSkKLSAgICAsIG1fZXh0ZW50KGV4dGVudC5kZWVwRXF1aXZhbGVudCgpKQotICAgICwg
bV9hZmZpbml0eShiYXNlLmFmZmluaXR5KCkpCi0gICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3Rl
ckdyYW51bGFyaXR5KQotewotICAgIHZhbGlkYXRlKCk7Ci19Ci0KLVNlbGVjdGlvbjo6U2VsZWN0
aW9uKGNvbnN0IFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5KQotICAgIDogbV9iYXNl
KHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpCi0gICAgLCBtX2V4dGVudChyYW5nZS0+ZW5kUG9zaXRp
b24oKSkKLSAgICAsIG1fYWZmaW5pdHkoYWZmaW5pdHkpCi0gICAgLCBtX2dyYW51bGFyaXR5KENo
YXJhY3RlckdyYW51bGFyaXR5KQotewotICAgIHZhbGlkYXRlKCk7Ci19Ci0KLVNlbGVjdGlvbiBT
ZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShOb2RlKiBub2RlKQotewotICAg
IHJldHVybiBTZWxlY3Rpb24oUG9zaXRpb24obm9kZSwgMCksIFBvc2l0aW9uKG5vZGUsIG1heERl
ZXBPZmZzZXQobm9kZSkpLCBET1dOU1RSRUFNKTsKLX0KLQotdm9pZCBTZWxlY3Rpb246OnNldEJh
c2UoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIG1fYmFzZSA9IHBvc2l0aW9uOwot
ICAgIHZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQotewotICAgIG1fYmFzZSA9IHZpc2libGVQb3Np
dGlvbi5kZWVwRXF1aXZhbGVudCgpOwotICAgIHZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgU2VsZWN0
aW9uOjpzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIG1fZXh0ZW50
ID0gcG9zaXRpb247Ci0gICAgdmFsaWRhdGUoKTsKLX0KLQotdm9pZCBTZWxlY3Rpb246OnNldEV4
dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKLXsKLSAgICBtX2V4
dGVudCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwotICAgIHZhbGlkYXRlKCk7
Ci19Ci0KLVBhc3NSZWZQdHI8UmFuZ2U+IFNlbGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzTm9uZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBQb3NpdGlvbiBzdGFy
dCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChtX3N0YXJ0KTsKLSAgICBQb3NpdGlvbiBlbmQg
PSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobV9lbmQpOwotICAgIHJldHVybiBSYW5nZTo6Y3Jl
YXRlKHN0YXJ0Lm5vZGUoKS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8UmFuZ2U+IFNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdAotewotICAgIGlm
IChpc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBNYWtlIHN1cmUgd2UgaGF2
ZSBhbiB1cGRhdGVkIGxheW91dCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAotICAgIC8v
IGluIHRoZSBjb3Vyc2Ugb2YgcnVubmluZyBlZGl0IGNvbW1hbmRzIHdoaWNoIG1vZGlmeSB0aGUg
RE9NLgotICAgIC8vIEZhaWxpbmcgdG8gY2FsbCB0aGlzIGNhbiByZXN1bHQgaW4gZXF1aXZhbGVu
dFhYWFBvc2l0aW9uIGNhbGxzIHJldHVybmluZwotICAgIC8vIGluY29ycmVjdCByZXN1bHRzLgot
ICAgIG1fc3RhcnQubm9kZSgpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKLQotICAgIC8v
IENoZWNrIGFnYWluLCBiZWNhdXNlIHVwZGF0aW5nIGxheW91dCBjYW4gY2xlYXIgdGhlIHNlbGVj
dGlvbi4KLSAgICBpZiAoaXNOb25lKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUG9zaXRp
b24gcywgZTsKLSAgICBpZiAoaXNDYXJldCgpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBzZWxlY3Rp
b24gaXMgYSBjYXJldCwgbW92ZSB0aGUgcmFuZ2Ugc3RhcnQgdXBzdHJlYW0uIFRoaXMgaGVscHMg
dXMgbWF0Y2gKLSAgICAgICAgLy8gdGhlIGNvbnZlbnRpb25zIG9mIHRleHQgZWRpdG9ycyB0ZXN0
ZWQsIHdoaWNoIG1ha2Ugc3R5bGUgZGV0ZXJtaW5hdGlvbnMgYmFzZWQKLSAgICAgICAgLy8gb24g
dGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGNhcmV0LCBpZiBhbnkuIAotICAgICAgICBzID0gcmFu
Z2VDb21wbGlhbnRFcXVpdmFsZW50KG1fc3RhcnQudXBzdHJlYW0oKSk7Ci0gICAgICAgIGUgPSBz
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgYSByYW5nZSwg
c2VsZWN0IHRoZSBtaW5pbXVtIHJhbmdlIHRoYXQgZW5jb21wYXNzZXMgdGhlIHNlbGVjdGlvbi4K
LSAgICAgICAgLy8gQWdhaW4sIHRoaXMgaXMgdG8gbWF0Y2ggdGhlIGNvbnZlbnRpb25zIG9mIHRl
eHQgZWRpdG9ycyB0ZXN0ZWQsIHdoaWNoIG1ha2Ugc3R5bGUgCi0gICAgICAgIC8vIGRldGVybWlu
YXRpb25zIGJhc2VkIG9uIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlbGVjdGlvbi4gCi0g
ICAgICAgIC8vIEZvciBpbnN0YW5jZSwgdGhpcyBvcGVyYXRpb24gaGVscHMgdG8gbWFrZSBzdXJl
IHRoYXQgdGhlICJYIiBzZWxlY3RlZCBiZWxvdyBpcyB0aGUgCi0gICAgICAgIC8vIG9ubHkgdGhp
bmcgc2VsZWN0ZWQuIFRoZSByYW5nZSBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gImxlYWsiIG91
dCB0byB0aGUgZW5kIG9mIHRoZSAKLSAgICAgICAgLy8gcHJldmlvdXMgdGV4dCBub2RlLCBvciB0
byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IHRleHQgbm9kZSwgZWFjaCBvZiB3aGljaCBoYXMg
YSAKLSAgICAgICAgLy8gZGlmZmVyZW50IHN0eWxlLgotICAgICAgICAvLyAKLSAgICAgICAgLy8g
T24gYSB0cmVhc3VyZSBtYXAsIDxiPlg8L2I+IG1hcmtzIHRoZSBzcG90LgotICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgXiBzZWxlY3RlZAotICAgICAgICAvLwotICAgICAgICBBU1NF
UlQoaXNSYW5nZSgpKTsKLSAgICAgICAgcyA9IG1fc3RhcnQuZG93bnN0cmVhbSgpOwotICAgICAg
ICBlID0gbV9lbmQudXBzdHJlYW0oKTsKLSAgICAgICAgaWYgKFJhbmdlOjpjb21wYXJlQm91bmRh
cnlQb2ludHMocy5ub2RlKCksIHMub2Zmc2V0KCksIGUubm9kZSgpLCBlLm9mZnNldCgpKSA+IDAp
IHsKLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhcnQgaXMgYmVmb3JlIHRoZSBlbmQu
Ci0gICAgICAgICAgICAvLyBUaGUgZW5kIGNhbiB3aW5kIHVwIGJlZm9yZSB0aGUgc3RhcnQgaWYg
Y29sbGFwc2VkIHdoaXRlc3BhY2UgaXMgdGhlIG9ubHkgdGhpbmcgc2VsZWN0ZWQuCi0gICAgICAg
ICAgICBQb3NpdGlvbiB0bXAgPSBzOwotICAgICAgICAgICAgcyA9IGU7Ci0gICAgICAgICAgICBl
ID0gdG1wOwotICAgICAgICB9Ci0gICAgICAgIHMgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQo
cyk7Ci0gICAgICAgIGUgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZSk7Ci0gICAgfQotCi0g
ICAgLy8gU2VsZWN0aW9ucyBhcmUgc3VwcG9zZWQgdG8gYWx3YXlzIGJlIHZhbGlkLiAgVGhpcyBj
b25zdHJ1Y3RvciB3aWxsIEFTU0VSVAotICAgIC8vIGlmIGEgdmFsaWQgcmFuZ2UgY291bGQgbm90
IGJlIGNyZWF0ZWQsIHdoaWNoIGlzIGZpbmUgZm9yIHRoaXMgY2FsbHNpdGUuCi0gICAgcmV0dXJu
IFJhbmdlOjpjcmVhdGUocy5ub2RlKCktPmRvY3VtZW50KCksIHMsIGUpOwotfQotCi1ib29sIFNl
bGVjdGlvbjo6ZXhwYW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHkpCi17Ci0gICAgaWYgKGlzTm9uZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBt
X2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7Ci0gICAgdmFsaWRhdGUoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IG1ha2VTZWFyY2hSYW5nZShjb25z
dCBQb3NpdGlvbiYgcG9zKQotewotICAgIE5vZGUqIG4gPSBwb3Mubm9kZSgpOwotICAgIGlmICgh
bikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRG9jdW1lbnQqIGQgPSBuLT5kb2N1bWVudCgpOwot
ICAgIE5vZGUqIGRlID0gZC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgaWYgKCFkZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgTm9kZSogYm91bmRhcnkgPSBuLT5lbmNsb3NpbmdCbG9ja0Zsb3dF
bGVtZW50KCk7Ci0gICAgaWYgKCFib3VuZGFyeSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBS
ZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKFJhbmdlOjpjcmVhdGUoZCkpOwotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotCi0gICAgUG9zaXRpb24gc3RhcnQocmFuZ2VDb21wbGlhbnRFcXVpdmFs
ZW50KHBvcykpOwotICAgIHNlYXJjaFJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoYm91bmRhcnks
IGVjKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQubm9kZSgpLCBzdGFydC5vZmZz
ZXQoKSwgZWMpOwotCi0gICAgQVNTRVJUKCFlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBzZWFyY2hSYW5nZS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgU2Vs
ZWN0aW9uOjphcHBlbmRUcmFpbGluZ1doaXRlc3BhY2UoKQotewotICAgIFJlZlB0cjxSYW5nZT4g
c2VhcmNoUmFuZ2UgPSBtYWtlU2VhcmNoUmFuZ2UobV9lbmQpOwotICAgIGlmICghc2VhcmNoUmFu
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIENoYXJhY3Rlckl0ZXJhdG9yIGNoYXJJdChzZWFy
Y2hSYW5nZS5nZXQoKSwgdHJ1ZSk7Ci0KLSAgICBmb3IgKDsgY2hhckl0Lmxlbmd0aCgpOyBjaGFy
SXQuYWR2YW5jZSgxKSkgewotICAgICAgICBVQ2hhciBjID0gY2hhckl0LmNoYXJhY3RlcnMoKVsw
XTsKLSAgICAgICAgaWYgKCFpc1NwYWNlT3JOZXdsaW5lKGMpICYmIGMgIT0gbm9CcmVha1NwYWNl
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fZW5kID0gY2hhckl0LnJhbmdlKCktPmVu
ZFBvc2l0aW9uKCk7Ci0gICAgfQotfQotCi12b2lkIFNlbGVjdGlvbjo6c2V0QmFzZUFuZEV4dGVu
dFRvRGVlcEVxdWl2YWxlbnRzKCkKLXsKLSAgICAvLyBNb3ZlIHRoZSBzZWxlY3Rpb24gdG8gcmVu
ZGVyZWQgcG9zaXRpb25zLCBpZiBwb3NzaWJsZS4KLSAgICBib29sIGJhc2VBbmRFeHRlbnRFcXVh
bCA9IG1fYmFzZSA9PSBtX2V4dGVudDsKLSAgICBpZiAobV9iYXNlLmlzTm90TnVsbCgpKSB7Ci0g
ICAgICAgIG1fYmFzZSA9IFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIG1fYWZmaW5pdHkpLmRlZXBF
cXVpdmFsZW50KCk7Ci0gICAgICAgIGlmIChiYXNlQW5kRXh0ZW50RXF1YWwpCi0gICAgICAgICAg
ICBtX2V4dGVudCA9IG1fYmFzZTsKLSAgICB9Ci0gICAgaWYgKG1fZXh0ZW50LmlzTm90TnVsbCgp
ICYmICFiYXNlQW5kRXh0ZW50RXF1YWwpCi0gICAgICAgIG1fZXh0ZW50ID0gVmlzaWJsZVBvc2l0
aW9uKG1fZXh0ZW50LCBtX2FmZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOwotCi0gICAgLy8gTWFr
ZSBzdXJlIHdlIGRvIG5vdCBoYXZlIGEgZGFuZ2xpbmcgYmFzZSBvciBleHRlbnQuCi0gICAgaWYg
KG1fYmFzZS5pc051bGwoKSAmJiBtX2V4dGVudC5pc051bGwoKSkKLSAgICAgICAgbV9iYXNlSXNG
aXJzdCA9IHRydWU7Ci0gICAgZWxzZSBpZiAobV9iYXNlLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1f
YmFzZSA9IG1fZXh0ZW50OwotICAgICAgICBtX2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsKLSAgICB9IGVs
c2UgaWYgKG1fZXh0ZW50LmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fZXh0ZW50ID0gbV9iYXNlOwot
ICAgICAgICBtX2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9iYXNl
SXNGaXJzdCA9IGNvbXBhcmVQb3NpdGlvbnMobV9iYXNlLCBtX2V4dGVudCkgPD0gMDsKLX0KLQot
dm9pZCBTZWxlY3Rpb246OnNldFN0YXJ0QW5kRW5kRnJvbUJhc2VBbmRFeHRlbnRSZXNwZWN0aW5n
R3JhbnVsYXJpdHkoKQotewotICAgIGlmIChtX2Jhc2VJc0ZpcnN0KSB7Ci0gICAgICAgIG1fc3Rh
cnQgPSBtX2Jhc2U7Ci0gICAgICAgIG1fZW5kID0gbV9leHRlbnQ7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgbV9zdGFydCA9IG1fZXh0ZW50OwotICAgICAgICBtX2VuZCA9IG1fYmFzZTsKLSAgICB9
Ci0KLSAgICBzd2l0Y2ggKG1fZ3JhbnVsYXJpdHkpIHsKLSAgICAgICAgY2FzZSBDaGFyYWN0ZXJH
cmFudWxhcml0eToKLSAgICAgICAgICAgIC8vIERvbid0IGRvIGFueSBleHBhbnNpb24uCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXb3JkR3JhbnVsYXJpdHk6IHsKLSAgICAgICAg
ICAgIC8vIEdlbmVyYWwgY2FzZTogU2VsZWN0IHRoZSB3b3JkIHRoZSBjYXJldCBpcyBwb3NpdGlv
bmVkIGluc2lkZSBvZiwgb3IgYXQgdGhlIHN0YXJ0IG9mIChSaWdodFdvcmRJZk9uQm91bmRhcnkp
LgotICAgICAgICAgICAgLy8gRWRnZSBjYXNlOiBJZiB0aGUgY2FyZXQgaXMgYWZ0ZXIgdGhlIGxh
c3Qgd29yZCBpbiBhIHNvZnQtd3JhcHBlZCBsaW5lIG9yIHRoZSBsYXN0IHdvcmQgaW4KLSAgICAg
ICAgICAgIC8vIHRoZSBkb2N1bWVudCwgc2VsZWN0IHRoYXQgbGFzdCB3b3JkIChMZWZ0V29yZElm
T25Cb3VuZGFyeSkuCi0gICAgICAgICAgICAvLyBFZGdlIGNhc2U6IElmIHRoZSBjYXJldCBpcyBh
ZnRlciB0aGUgbGFzdCB3b3JkIGluIGEgcGFyYWdyYXBoLCBzZWxlY3QgZnJvbSB0aGUgdGhlIGVu
ZCBvZiB0aGUKLSAgICAgICAgICAgIC8vIGxhc3Qgd29yZCB0byB0aGUgbGluZSBicmVhayAoYWxz
byBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpOwotICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIG9yaWdpbmFsRW5kKG1fZW5kLCBtX2FmZmluaXR5KTsKLSAgICAgICAg
ICAgIEVXb3JkU2lkZSBzaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5OwotICAgICAgICAgICAg
aWYgKGlzRW5kT2ZEb2N1bWVudChzdGFydCkgfHwgKGlzRW5kT2ZMaW5lKHN0YXJ0KSAmJiAhaXNT
dGFydE9mTGluZShzdGFydCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgoc3RhcnQpKSkKLSAgICAgICAg
ICAgICAgICBzaWRlID0gTGVmdFdvcmRJZk9uQm91bmRhcnk7Ci0gICAgICAgICAgICBtX3N0YXJ0
ID0gc3RhcnRPZldvcmQoc3RhcnQsIHNpZGUpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAg
ICBzaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5OwotICAgICAgICAgICAgaWYgKGlzRW5kT2ZE
b2N1bWVudChvcmlnaW5hbEVuZCkgfHwgKGlzRW5kT2ZMaW5lKG9yaWdpbmFsRW5kKSAmJiAhaXNT
dGFydE9mTGluZShvcmlnaW5hbEVuZCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgob3JpZ2luYWxFbmQp
KSkKLSAgICAgICAgICAgICAgICBzaWRlID0gTGVmdFdvcmRJZk9uQm91bmRhcnk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gd29yZEVuZChlbmRPZldvcmQo
b3JpZ2luYWxFbmQsIHNpZGUpKTsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmQod29y
ZEVuZCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKG9y
aWdpbmFsRW5kKSkgewotICAgICAgICAgICAgICAgIC8vIFNlbGVjdCB0aGUgcGFyYWdyYXBoIGJy
ZWFrICh0aGUgc3BhY2UgZnJvbSB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBv
ZiAKLSAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCBvbmUpIHRvIG1hdGNoIFRleHRFZGl0Lgot
ICAgICAgICAgICAgICAgIGVuZCA9IHdvcmRFbmQubmV4dCgpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChOb2RlKiB0YWJsZSA9IGlzRmlyc3RQb3NpdGlvbkFmdGVyVGFi
bGUoZW5kKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcGFyYWdyYXBoIGJyZWFrIGFm
dGVyIHRoZSBsYXN0IHBhcmFncmFwaCBpbiB0aGUgbGFzdCBjZWxsIG9mIGEgYmxvY2sgdGFibGUg
ZW5kcwotICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFw
aCBhZnRlciB0aGUgdGFibGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc0Jsb2NrKHRhYmxl
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IGVuZC5uZXh0KHRydWUpOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSB3b3JkRW5k
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAoZW5kLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBlbmQgPSB3b3JkRW5kOwotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fZW5kID0gZW5kLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIFNlbnRlbmNlR3JhbnVsYXJpdHk6IHsKLSAgICAgICAg
ICAgIG1fc3RhcnQgPSBzdGFydE9mU2VudGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1f
YWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgbV9lbmQgPSBlbmRPZlNl
bnRlbmNlKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIExpbmVHcmFu
dWxhcml0eTogewotICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZMaW5lKFZpc2libGVQb3Np
dGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiBlbmQgPSBlbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBt
X2FmZmluaXR5KSk7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgZW5kIG9mIHRoaXMgbGluZSBpcyBh
dCB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoLCBpbmNsdWRlIHRoZSBzcGFjZSAKLSAgICAgICAgICAg
IC8vIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGxpbmUgaW4gdGhlIHNlbGVjdGlvbi4KLSAgICAgICAg
ICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKGVuZCkpIHsKLSAgICAgICAgICAgICAgICBWaXNpYmxl
UG9zaXRpb24gbmV4dCA9IGVuZC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5leHQuaXNO
b3ROdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIGVuZCA9IG5leHQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX2VuZCA9IGVuZC5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBMaW5lQm91bmRhcnk6Ci0gICAgICAgICAg
ICBtX3N0YXJ0ID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5p
dHkpKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgbV9lbmQgPSBlbmRPZkxpbmUoVmlz
aWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OiB7Ci0gICAg
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zKG1fc3RhcnQsIG1fYWZmaW5pdHkpOwotICAgICAg
ICAgICAgaWYgKGlzU3RhcnRPZkxpbmUocG9zKSAmJiBpc0VuZE9mRG9jdW1lbnQocG9zKSkKLSAg
ICAgICAgICAgICAgICBwb3MgPSBwb3MucHJldmlvdXMoKTsKLSAgICAgICAgICAgIG1fc3RhcnQg
PSBzdGFydE9mUGFyYWdyYXBoKHBvcykuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoVmlzaWJs
ZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIEluY2x1ZGUgdGhlICJwYXJhZ3JhcGggYnJlYWsiICh0aGUgc3BhY2UgZnJvbSB0aGUgZW5k
IG9mIHRoaXMgcGFyYWdyYXBoIHRvIHRoZSBzdGFydAotICAgICAgICAgICAgLy8gb2YgdGhlIG5l
eHQgb25lKSBpbiB0aGUgc2VsZWN0aW9uLgotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVu
ZCh2aXNpYmxlUGFyYWdyYXBoRW5kLm5leHQoKSk7Ci0gICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoTm9kZSogdGFibGUgPSBpc0ZpcnN0UG9zaXRpb25BZnRlclRhYmxlKGVuZCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBUaGUgcGFyYWdyYXBoIGJyZWFrIGFmdGVyIHRoZSBsYXN0IHBhcmFn
cmFwaCBpbiB0aGUgbGFzdCBjZWxsIG9mIGEgYmxvY2sgdGFibGUgZW5kcwotICAgICAgICAgICAg
ICAgIC8vIGF0IHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIGFmdGVyIHRoZSB0YWJsZSwgbm90
IGF0IHRoZSBwb3NpdGlvbiBqdXN0IGFmdGVyIHRoZSB0YWJsZS4KLSAgICAgICAgICAgICAgICBp
ZiAoaXNCbG9jayh0YWJsZSkpCi0gICAgICAgICAgICAgICAgICAgIGVuZCA9IGVuZC5uZXh0KHRy
dWUpOwotICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIHBhcmFyZ3JhcGggYnJlYWsgYWZ0
ZXIgdGhlIGxhc3QgcGFyYWdyYXBoIGluIHRoZSBsYXN0IGNlbGwgb2YgYW4gaW5saW5lIHRhYmxl
LgotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW5kID0gdmlzaWJs
ZVBhcmFncmFwaEVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChlbmQuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgZW5kID0gdmlzaWJsZVBhcmFncmFw
aEVuZDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZW5kID0gZW5kLmRlZXBFcXVp
dmFsZW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIERv
Y3VtZW50Qm91bmRhcnk6Ci0gICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZkRvY3VtZW50KFZp
c2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAg
ICAgICAgICAgIG1fZW5kID0gZW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9lbmQsIG1f
YWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6Ci0gICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZlBh
cmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFs
ZW50KCk7Ci0gICAgICAgICAgICBtX2VuZCA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlv
bihtX2VuZCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBTZW50ZW5jZUJvdW5kYXJ5OgotICAgICAgICAgICAgbV9zdGFydCA9
IHN0YXJ0T2ZTZW50ZW5jZShWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpLmRl
ZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICBtX2VuZCA9IGVuZE9mU2VudGVuY2UoVmlzaWJs
ZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IGhhdmUg
YSBkYW5nbGluZyBzdGFydCBvciBlbmQuCi0gICAgaWYgKG1fc3RhcnQuaXNOdWxsKCkpCi0gICAg
ICAgIG1fc3RhcnQgPSBtX2VuZDsKLSAgICBpZiAobV9lbmQuaXNOdWxsKCkpCi0gICAgICAgIG1f
ZW5kID0gbV9zdGFydDsKLX0KLQotdm9pZCBTZWxlY3Rpb246OnVwZGF0ZVNlbGVjdGlvblR5cGUo
KQotewotICAgIGlmIChtX3N0YXJ0LmlzTnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVChtX2VuZC5p
c051bGwoKSk7Ci0gICAgICAgIG1fc2VsZWN0aW9uVHlwZSA9IE5vU2VsZWN0aW9uOwotICAgIH0g
ZWxzZSBpZiAobV9zdGFydCA9PSBtX2VuZCB8fCBtX3N0YXJ0LnVwc3RyZWFtKCkgPT0gbV9lbmQu
dXBzdHJlYW0oKSkgewotICAgICAgICBtX3NlbGVjdGlvblR5cGUgPSBDYXJldFNlbGVjdGlvbjsK
LSAgICB9IGVsc2UKLSAgICAgICAgbV9zZWxlY3Rpb25UeXBlID0gUmFuZ2VTZWxlY3Rpb247Ci0K
LSAgICAvLyBBZmZpbml0eSBvbmx5IG1ha2VzIHNlbnNlIGZvciBhIGNhcmV0Ci0gICAgaWYgKG1f
c2VsZWN0aW9uVHlwZSAhPSBDYXJldFNlbGVjdGlvbikKLSAgICAgICAgbV9hZmZpbml0eSA9IERP
V05TVFJFQU07Ci19Ci0KLXZvaWQgU2VsZWN0aW9uOjp2YWxpZGF0ZSgpCi17Ci0gICAgc2V0QmFz
ZUFuZEV4dGVudFRvRGVlcEVxdWl2YWxlbnRzKCk7Ci0gICAgc2V0U3RhcnRBbmRFbmRGcm9tQmFz
ZUFuZEV4dGVudFJlc3BlY3RpbmdHcmFudWxhcml0eSgpOwotICAgIGFkanVzdFNlbGVjdGlvblRv
QXZvaWRDcm9zc2luZ0VkaXRpbmdCb3VuZGFyaWVzKCk7Ci0gICAgdXBkYXRlU2VsZWN0aW9uVHlw
ZSgpOwotCi0gICAgaWYgKHNlbGVjdGlvblR5cGUoKSA9PSBSYW5nZVNlbGVjdGlvbikgewotICAg
ICAgICAvLyAiQ29uc3RyYWluIiB0aGUgc2VsZWN0aW9uIHRvIGJlIHRoZSBzbWFsbGVzdCBlcXVp
dmFsZW50IHJhbmdlIG9mIG5vZGVzLgotICAgICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgYXJi
aXRyYXJ5IGNob2ljZSwgYnV0IGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBpdCBpcwotICAgICAgICAv
LyB1c2VmdWwgdG8gbWFrZSB0byBtYWtlIHRoZSBzZWxlY3Rpb24gImNhbm9uaWNhbCIgKGlmIG9u
bHkgZm9yCi0gICAgICAgIC8vIHB1cnBvc2VzIG9mIGNvbXBhcmluZyBzZWxlY3Rpb25zKS4gVGhp
cyBpcyBhbiBpZGVhbCBwb2ludCBvZiB0aGUgY29kZQotICAgICAgICAvLyB0byBkbyB0aGlzIG9w
ZXJhdGlvbiwgc2luY2UgYWxsIHNlbGVjdGlvbiBjaGFuZ2VzIHRoYXQgcmVzdWx0IGluIGEgUkFO
R0UgCi0gICAgICAgIC8vIGNvbWUgdGhyb3VnaCBoZXJlIGJlZm9yZSBhbnlvbmUgdXNlcyBpdC4K
LSAgICAgICAgLy8gRklYTUU6IENhbm9uaWNhbGl6aW5nIGlzIGdvb2QsIGJ1dCBoYXZlbid0IHdl
IGFscmVhZHkgZG9uZSBpdCAod2hlbiB3ZQotICAgICAgICAvLyBzZXQgdGhlc2UgdHdvIHBvc2l0
aW9ucyB0byBWaXNpYmxlUG9zaXRpb24gZGVlcEVxdWl2YWxlbnQoKXMgYWJvdmUpPwotICAgICAg
ICBtX3N0YXJ0ID0gbV9zdGFydC5kb3duc3RyZWFtKCk7Ci0gICAgICAgIG1fZW5kID0gbV9lbmQu
dXBzdHJlYW0oKTsKLSAgICB9Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGJyZWFrcyB0
aGUgaW52YXJpYW50IG9mIHRoaXMgY2xhc3MuCi0vLyBCdXQgYmVjYXVzZSB3ZSB1c2UgU2VsZWN0
aW9uIHRvIHN0b3JlIHZhbHVlcyBpbiBlZGl0aW5nIGNvbW1hbmRzIGZvciB1c2Ugd2hlbgotLy8g
dW5kb2luZyB0aGUgY29tbWFuZCwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGNyZWF0ZSBhIHNlbGVj
dGlvbiB0aGF0IHdoaWxlIGN1cnJlbnRseQotLy8gaW52YWxpZCwgd2lsbCBiZSB2YWxpZCBvbmNl
IHRoZSBjaGFuZ2VzIGFyZSB1bmRvbmUuIFRoaXMgaXMgYSBkZXNpZ24gcHJvYmxlbS4KLS8vIFRv
IGZpeCBpdCB3ZSBlaXRoZXIgbmVlZCB0byBjaGFuZ2UgdGhlIGludmFyaWFudHMgb2YgU2VsZWN0
aW9uIG9yIGNyZWF0ZSBhIG5ldwotLy8gY2xhc3MgZm9yIGVkaXRpbmcgdG8gdXNlIHRoYXQgY2Fu
IG1hbmlwdWxhdGUgc2VsZWN0aW9ucyB0aGF0IGFyZSBub3QgY3VycmVudGx5IHZhbGlkLgotdm9p
ZCBTZWxlY3Rpb246OnNldFdpdGhvdXRWYWxpZGF0aW9uKGNvbnN0IFBvc2l0aW9uJiBiYXNlLCBj
b25zdCBQb3NpdGlvbiYgZXh0ZW50KQotewotICAgIEFTU0VSVCghYmFzZS5pc051bGwoKSk7Ci0g
ICAgQVNTRVJUKCFleHRlbnQuaXNOdWxsKCkpOwotICAgIEFTU0VSVChiYXNlICE9IGV4dGVudCk7
Ci0gICAgQVNTRVJUKG1fYWZmaW5pdHkgPT0gRE9XTlNUUkVBTSk7Ci0gICAgQVNTRVJUKG1fZ3Jh
bnVsYXJpdHkgPT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwotICAgIG1fYmFzZSA9IGJhc2U7Ci0g
ICAgbV9leHRlbnQgPSBleHRlbnQ7Ci0gICAgbV9iYXNlSXNGaXJzdCA9IGNvbXBhcmVQb3NpdGlv
bnMoYmFzZSwgZXh0ZW50KSA8PSAwOwotICAgIGlmIChtX2Jhc2VJc0ZpcnN0KSB7Ci0gICAgICAg
IG1fc3RhcnQgPSBiYXNlOwotICAgICAgICBtX2VuZCA9IGV4dGVudDsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBtX3N0YXJ0ID0gZXh0ZW50OwotICAgICAgICBtX2VuZCA9IGJhc2U7Ci0gICAgfQot
ICAgIG1fc2VsZWN0aW9uVHlwZSA9IFJhbmdlU2VsZWN0aW9uOwotfQotCi12b2lkIFNlbGVjdGlv
bjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENyb3NzaW5nRWRpdGluZ0JvdW5kYXJpZXMoKQotewot
ICAgIGlmIChtX2Jhc2UuaXNOdWxsKCkgfHwgbV9zdGFydC5pc051bGwoKSB8fCBtX2VuZC5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTm9kZSogYmFzZVJvb3QgPSBoaWdoZXN0RWRp
dGFibGVSb290KG1fYmFzZSk7Ci0gICAgTm9kZSogc3RhcnRSb290ID0gaGlnaGVzdEVkaXRhYmxl
Um9vdChtX3N0YXJ0KTsKLSAgICBOb2RlKiBlbmRSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdCht
X2VuZCk7Ci0gICAgCi0gICAgTm9kZSogYmFzZUVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RFZGl0
YWJsZUFuY2VzdG9yKG1fYmFzZS5ub2RlKCkpOwotICAgIAotICAgIC8vIFRoZSBiYXNlLCBzdGFy
dCBhbmQgZW5kIGFyZSBhbGwgaW4gdGhlIHNhbWUgcmVnaW9uLiAgTm8gYWRqdXN0bWVudCBuZWNl
c3NhcnkuCi0gICAgaWYgKGJhc2VSb290ID09IHN0YXJ0Um9vdCAmJiBiYXNlUm9vdCA9PSBlbmRS
b290KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVGhlIHNlbGVjdGlvbiBpcyBiYXNl
ZCBpbiBlZGl0YWJsZSBjb250ZW50LgotICAgIGlmIChiYXNlUm9vdCkgewotICAgICAgICAvLyBJ
ZiB0aGUgc3RhcnQgaXMgb3V0c2lkZSB0aGUgYmFzZSdzIGVkaXRhYmxlIHJvb3QsIGNhcCBpdCBh
dCB0aGUgc3RhcnQgb2YgdGhhdCByb290LgotICAgICAgICAvLyBJZiB0aGUgc3RhcnQgaXMgaW4g
bm9uLWVkaXRhYmxlIGNvbnRlbnQgdGhhdCBpcyBpbnNpZGUgdGhlIGJhc2UncyBlZGl0YWJsZSBy
b290LCBwdXQgaXQKLSAgICAgICAgLy8gYXQgdGhlIGZpcnN0IGVkaXRhYmxlIHBvc2l0aW9uIGFm
dGVyIHN0YXJ0IGluc2lkZSB0aGUgYmFzZSdzIGVkaXRhYmxlIHJvb3QuCi0gICAgICAgIGlmIChz
dGFydFJvb3QgIT0gYmFzZVJvb3QpIHsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBmaXJz
dCA9IGZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdGVyUG9zaXRpb25JblJvb3QobV9zdGFydCwgYmFz
ZVJvb3QpOwotICAgICAgICAgICAgbV9zdGFydCA9IGZpcnN0LmRlZXBFcXVpdmFsZW50KCk7Ci0g
ICAgICAgICAgICBpZiAobV9zdGFydC5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIG1fc3RhcnQgPSBtX2VuZDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBJZiB0aGUgZW5kIGlzIG91dHNpZGUgdGhl
IGJhc2UncyBlZGl0YWJsZSByb290LCBjYXAgaXQgYXQgdGhlIGVuZCBvZiB0aGF0IHJvb3QuCi0g
ICAgICAgIC8vIElmIHRoZSBlbmQgaXMgaW4gbm9uLWVkaXRhYmxlIGNvbnRlbnQgdGhhdCBpcyBp
bnNpZGUgdGhlIGJhc2UncyByb290LCBwdXQgaXQKLSAgICAgICAgLy8gYXQgdGhlIGxhc3QgZWRp
dGFibGUgcG9zaXRpb24gYmVmb3JlIHRoZSBlbmQgaW5zaWRlIHRoZSBiYXNlJ3Mgcm9vdC4KLSAg
ICAgICAgaWYgKGVuZFJvb3QgIT0gYmFzZVJvb3QpIHsKLSAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBsYXN0ID0gbGFzdEVkaXRhYmxlUG9zaXRpb25CZWZvcmVQb3NpdGlvbkluUm9vdChtX2Vu
ZCwgYmFzZVJvb3QpOwotICAgICAgICAgICAgbV9lbmQgPSBsYXN0LmRlZXBFcXVpdmFsZW50KCk7
Ci0gICAgICAgICAgICBpZiAobV9lbmQuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBtX2VuZCA9IG1fc3RhcnQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAvLyBUaGUgc2VsZWN0aW9uIGlzIGJhc2VkIGluIG5v
bi1lZGl0YWJsZSBjb250ZW50LgotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb24t
ZWRpdGFibGUgcGllY2VzIGluc2lkZSBlZGl0YWJsZSBjb250ZW50IHNob3VsZCBiZSBhdG9taWMs
IGluIHRoZSBzYW1lIHdheSB0aGF0IGVkaXRhYmxlCi0gICAgICAgIC8vIHBpZWNlcyBpbiBub24t
ZWRpdGFibGUgY29udGVudCBhcmUgYXRvbWljLgotICAgIAotICAgICAgICAvLyBUaGUgc2VsZWN0
aW9uIGVuZHMgaW4gZWRpdGFibGUgY29udGVudCBvciBub24tZWRpdGFibGUgY29udGVudCBpbnNp
ZGUgYSBkaWZmZXJlbnQgZWRpdGFibGUgYW5jZXN0b3IsIAotICAgICAgICAvLyBtb3ZlIGJhY2t3
YXJkIHVudGlsIG5vbi1lZGl0YWJsZSBjb250ZW50IGluc2lkZSB0aGUgc2FtZSBsb3dlc3QgZWRp
dGFibGUgYW5jZXN0b3IgaXMgcmVhY2hlZC4KLSAgICAgICAgTm9kZSogZW5kRWRpdGFibGVBbmNl
c3RvciA9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9lbmQubm9kZSgpKTsKLSAgICAgICAgaWYg
KGVuZFJvb3QgfHwgZW5kRWRpdGFibGVBbmNlc3RvciAhPSBiYXNlRWRpdGFibGVBbmNlc3Rvcikg
ewotICAgICAgICAgICAgCi0gICAgICAgICAgICBQb3NpdGlvbiBwID0gcHJldmlvdXNWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKG1fZW5kKTsKLSAgICAgICAgICAgIE5vZGUqIHNoYWRvd0FuY2Vz
dG9yID0gZW5kUm9vdCA/IGVuZFJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKLSAgICAg
ICAgICAgIGlmIChwLmlzTnVsbCgpICYmIGVuZFJvb3QgJiYgKHNoYWRvd0FuY2VzdG9yICE9IGVu
ZFJvb3QpKQotICAgICAgICAgICAgICAgIHAgPSBQb3NpdGlvbihzaGFkb3dBbmNlc3RvciwgbWF4
RGVlcE9mZnNldChzaGFkb3dBbmNlc3RvcikpOwotICAgICAgICAgICAgd2hpbGUgKHAuaXNOb3RO
dWxsKCkgJiYgIShsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKHAubm9kZSgpKSA9PSBiYXNlRWRpdGFi
bGVBbmNlc3RvciAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApKSkgewotICAgICAgICAgICAgICAg
IE5vZGUqIHJvb3QgPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihwKTsKLSAgICAgICAgICAgICAg
ICBzaGFkb3dBbmNlc3RvciA9IHJvb3QgPyByb290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7
Ci0gICAgICAgICAgICAgICAgcCA9IGlzQXRvbWljTm9kZShwLm5vZGUoKSkgPyBwb3NpdGlvbkJl
Zm9yZU5vZGUocC5ub2RlKCkpIDogcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHAp
OwotICAgICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYmIChzaGFkb3dBbmNlc3RvciAhPSBy
b290KSkKLSAgICAgICAgICAgICAgICAgICAgcCA9IFBvc2l0aW9uKHNoYWRvd0FuY2VzdG9yLCBt
YXhEZWVwT2Zmc2V0KHNoYWRvd0FuY2VzdG9yKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMocCk7Ci0KLSAgICAgICAgICAgIGlmIChwcmV2aW91
cy5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBzZWxlY3Rpb24gY3Jvc3NlcyBh
biBFZGl0aW5nIGJvdW5kYXJ5LiAgVGhpcyBpcyBhCi0gICAgICAgICAgICAgICAgLy8gcHJvZ3Jh
bW1lciBlcnJvciBpbiB0aGUgZWRpdGluZyBjb2RlLiAgSGFwcHkgZGVidWdnaW5nIQotICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIG1fYmFzZSA9
IFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAgbV9leHRlbnQgPSBQb3NpdGlvbigpOwotICAg
ICAgICAgICAgICAgIHZhbGlkYXRlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbV9lbmQgPSBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlIHNlbGVjdGlvbiBzdGFydHMgaW4gZWRpdGFibGUg
Y29udGVudCBvciBub24tZWRpdGFibGUgY29udGVudCBpbnNpZGUgYSBkaWZmZXJlbnQgZWRpdGFi
bGUgYW5jZXN0b3IsIAotICAgICAgICAvLyBtb3ZlIGZvcndhcmQgdW50aWwgbm9uLWVkaXRhYmxl
IGNvbnRlbnQgaW5zaWRlIHRoZSBzYW1lIGxvd2VzdCBlZGl0YWJsZSBhbmNlc3RvciBpcyByZWFj
aGVkLgotICAgICAgICBOb2RlKiBzdGFydEVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RFZGl0YWJs
ZUFuY2VzdG9yKG1fc3RhcnQubm9kZSgpKTsgICAgICAKLSAgICAgICAgaWYgKHN0YXJ0Um9vdCB8
fCBzdGFydEVkaXRhYmxlQW5jZXN0b3IgIT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IpIHsKLSAgICAg
ICAgICAgIFBvc2l0aW9uIHAgPSBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX3N0YXJ0
KTsKLSAgICAgICAgICAgIE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gc3RhcnRSb290ID8gc3RhcnRS
b290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7Ci0gICAgICAgICAgICBpZiAocC5pc051bGwo
KSAmJiBzdGFydFJvb3QgJiYgKHNoYWRvd0FuY2VzdG9yICE9IHN0YXJ0Um9vdCkpCi0gICAgICAg
ICAgICAgICAgcCA9IFBvc2l0aW9uKHNoYWRvd0FuY2VzdG9yLCAwKTsKLSAgICAgICAgICAgIHdo
aWxlIChwLmlzTm90TnVsbCgpICYmICEobG93ZXN0RWRpdGFibGVBbmNlc3RvcihwLm5vZGUoKSkg
PT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSkpIHsKLSAg
ICAgICAgICAgICAgICBOb2RlKiByb290ID0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24ocCk7Ci0g
ICAgICAgICAgICAgICAgc2hhZG93QW5jZXN0b3IgPSByb290ID8gcm9vdC0+c2hhZG93QW5jZXN0
b3JOb2RlKCkgOiAwOwotICAgICAgICAgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5ub2RlKCkp
ID8gcG9zaXRpb25BZnRlck5vZGUocC5ub2RlKCkpIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUocCk7Ci0gICAgICAgICAgICAgICAgaWYgKHAuaXNOdWxsKCkgJiYgKHNoYWRvd0FuY2Vz
dG9yICE9IHJvb3QpKQotICAgICAgICAgICAgICAgICAgICBwID0gUG9zaXRpb24oc2hhZG93QW5j
ZXN0b3IsIDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5l
eHQocCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChuZXh0LmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gVGhlIHNlbGVjdGlvbiBjcm9zc2VzIGFuIEVkaXRpbmcgYm91bmRh
cnkuICBUaGlzIGlzIGEKLSAgICAgICAgICAgICAgICAvLyBwcm9ncmFtbWVyIGVycm9yIGluIHRo
ZSBlZGl0aW5nIGNvZGUuICBIYXBweSBkZWJ1Z2dpbmchCi0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgbV9iYXNlID0gUG9zaXRpb24oKTsKLSAg
ICAgICAgICAgICAgICBtX2V4dGVudCA9IFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAgdmFs
aWRhdGUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBtX3N0YXJ0ID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIC8vIENvcnJlY3QgdGhlIGV4dGVudCBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKGJh
c2VFZGl0YWJsZUFuY2VzdG9yICE9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9leHRlbnQubm9k
ZSgpKSkKLSAgICAgICAgbV9leHRlbnQgPSBtX2Jhc2VJc0ZpcnN0ID8gbV9lbmQgOiBtX3N0YXJ0
OwotfQotCi1ib29sIFNlbGVjdGlvbjo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdAotewotICAg
IHJldHVybiBpc0VkaXRhYmxlUG9zaXRpb24oc3RhcnQoKSk7Ci19Ci0KLWJvb2wgU2VsZWN0aW9u
Ojppc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzUmljaGx5
RWRpdGFibGVQb3NpdGlvbihzdGFydCgpKTsKLX0KLQotRWxlbWVudCogU2VsZWN0aW9uOjpyb290
RWRpdGFibGVFbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZWRpdGFibGVSb290Rm9yUG9z
aXRpb24oc3RhcnQoKSk7Ci19Ci0KLU5vZGUqIFNlbGVjdGlvbjo6c2hhZG93VHJlZVJvb3ROb2Rl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhcnQoKS5ub2RlKCkgPyBzdGFydCgpLm5vZGUoKS0+
c2hhZG93VHJlZVJvb3ROb2RlKCkgOiAwOwotfQotCi12b2lkIFNlbGVjdGlvbjo6ZGVidWdQb3Np
dGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3N0YXJ0Lm5vZGUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZnByaW50ZihzdGRlcnIsICJTZWxlY3Rpb24gPT09PT09PT09PT09PT09PT1cbiIp
OwotCi0gICAgaWYgKG1fc3RhcnQgPT0gbV9lbmQpIHsKLSAgICAgICAgUG9zaXRpb24gcG9zID0g
bV9zdGFydDsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJwb3M6ICAgICAgICAlcyAlcDolZFxu
IiwgcG9zLm5vZGUoKS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpLCBwb3Mubm9kZSgpLCBwb3Mu
b2Zmc2V0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFBvc2l0aW9uIHBvcyA9IG1fc3RhcnQ7
Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAic3RhcnQ6ICAgICAgJXMgJXA6JWRcbiIsIHBvcy5u
b2RlKCktPm5vZGVOYW1lKCkudXRmOCgpLmRhdGEoKSwgcG9zLm5vZGUoKSwgcG9zLm9mZnNldCgp
KTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLVxuIik7Ci0gICAgICAgIHBvcyA9IG1fZW5kOwotICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgImVuZDogICAgICAgICVzICVwOiVkXG4iLCBwb3Mubm9kZSgpLT5ub2RlTmFtZSgpLnV0Zjgo
KS5kYXRhKCksIHBvcy5ub2RlKCksIHBvcy5vZmZzZXQoKSk7Ci0gICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgIH0KLQot
ICAgIGZwcmludGYoc3RkZXJyLCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIp
OwotfQotCi0jaWZuZGVmIE5ERUJVRwotCi12b2lkIFNlbGVjdGlvbjo6Zm9ybWF0Rm9yRGVidWdn
ZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJl
c3VsdDsKLSAgICBTdHJpbmcgczsKLSAgICAKLSAgICBpZiAoaXNOb25lKCkpIHsKLSAgICAgICAg
cmVzdWx0ID0gIjxub25lPiI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgaW50IEZvcm1h
dEJ1ZmZlclNpemUgPSAxMDI0OwotICAgICAgICBjaGFyIHNbRm9ybWF0QnVmZmVyU2l6ZV07Ci0g
ICAgICAgIHJlc3VsdCArPSAiZnJvbSAiOwotICAgICAgICBzdGFydCgpLmZvcm1hdEZvckRlYnVn
Z2VyKHMsIEZvcm1hdEJ1ZmZlclNpemUpOwotICAgICAgICByZXN1bHQgKz0gczsKLSAgICAgICAg
cmVzdWx0ICs9ICIgdG8gIjsKLSAgICAgICAgZW5kKCkuZm9ybWF0Rm9yRGVidWdnZXIocywgRm9y
bWF0QnVmZmVyU2l6ZSk7Ci0gICAgICAgIHJlc3VsdCArPSBzOwotICAgIH0KLQotICAgIHN0cm5j
cHkoYnVmZmVyLCByZXN1bHQudXRmOCgpLmRhdGEoKSwgbGVuZ3RoIC0gMSk7Ci19Ci0KLXZvaWQg
U2VsZWN0aW9uOjpzaG93VHJlZUZvclRoaXMoKSBjb25zdAotewotICAgIGlmIChzdGFydCgpLm5v
ZGUoKSkgewotICAgICAgICBzdGFydCgpLm5vZGUoKS0+c2hvd1RyZWVBbmRNYXJrKHN0YXJ0KCku
bm9kZSgpLCAiUyIsIGVuZCgpLm5vZGUoKSwgIkUiKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJzdGFydCBvZmZzZXQ6ICVkLCBlbmQgb2Zmc2V0OiAlZFxuIiwgc3RhcnQoKS5vZmZzZXQoKSwg
ZW5kKCkub2Zmc2V0KCkpOwotICAgIH0KLX0KLQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2lmbmRlZiBOREVCVUcKLQotdm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpT
ZWxlY3Rpb24mIHNlbCkKLXsKLSAgICBzZWwuc2hvd1RyZWVGb3JUaGlzKCk7Ci19Ci0KLXZvaWQg
c2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uKiBzZWwpCi17Ci0gICAgaWYgKHNlbCkK
LSAgICAgICAgc2VsLT5zaG93VHJlZUZvclRoaXMoKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmggYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9u
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NzUyZDkuLjAwMDAwMDAKLS0tIGEv
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU2VsZWN0aW9uX2gKLSNkZWZpbmUgU2Vs
ZWN0aW9uX2gKLQotI2luY2x1ZGUgIlRleHRHcmFudWxhcml0eS5oIgotI2luY2x1ZGUgIlZpc2li
bGVQb3NpdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBvc2l0aW9uOwot
Ci1jb25zdCBFQWZmaW5pdHkgU0VMX0RFRkFVTFRfQUZGSU5JVFkgPSBET1dOU1RSRUFNOwotCi1j
bGFzcyBTZWxlY3Rpb24gewotcHVibGljOgotICAgIGVudW0gU2VsZWN0aW9uVHlwZSB7IE5vU2Vs
ZWN0aW9uLCBDYXJldFNlbGVjdGlvbiwgUmFuZ2VTZWxlY3Rpb24gfTsKLQotICAgIFNlbGVjdGlv
bigpOwotCi0gICAgU2VsZWN0aW9uKGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5KTsKLSAgICBT
ZWxlY3Rpb24oY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSk7Ci0K
LSAgICBTZWxlY3Rpb24oY29uc3QgUmFuZ2UqLCBFQWZmaW5pdHkgPSBTRUxfREVGQVVMVF9BRkZJ
TklUWSk7Ci0gICAgCi0gICAgU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotICAg
IFNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
KTsKLQotICAgIHN0YXRpYyBTZWxlY3Rpb24gc2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKE5v
ZGUqKTsKLQotICAgIFNlbGVjdGlvblR5cGUgc2VsZWN0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0aW9uVHlwZTsgfQotCi0gICAgdm9pZCBzZXRBZmZpbml0eShFQWZmaW5pdHkgYWZm
aW5pdHkpIHsgbV9hZmZpbml0eSA9IGFmZmluaXR5OyB9Ci0gICAgRUFmZmluaXR5IGFmZmluaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9hZmZpbml0eTsgfQotCi0gICAgdm9pZCBzZXRCYXNlKGNvbnN0
IFBvc2l0aW9uJik7Ci0gICAgdm9pZCBzZXRCYXNlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwot
ICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0IFBvc2l0aW9uJik7Ci0gICAgdm9pZCBzZXRFeHRlbnQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci0gICAgCi0gICAgUG9zaXRpb24gYmFzZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFzZTsgfQotICAgIFBvc2l0aW9uIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZXh0ZW50OyB9Ci0gICAgUG9zaXRpb24gc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0
OyB9Ci0gICAgUG9zaXRpb24gZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KLSAgICAKLSAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKG1fc3RhcnQsIGlzUmFuZ2UoKSA/IERPV05TVFJFQU0gOiBhZmZpbml0eSgpKTsgfQot
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKCkgY29uc3QgeyByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKG1fZW5kLCBpc1JhbmdlKCkgPyBVUFNUUkVBTSA6IGFmZmluaXR5KCkpOyB9Ci0KLSAg
ICBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUoKSA9PSBOb1NlbGVj
dGlvbjsgfQotICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUo
KSA9PSBDYXJldFNlbGVjdGlvbjsgfQotICAgIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IHNlbGVjdGlvblR5cGUoKSA9PSBSYW5nZVNlbGVjdGlvbjsgfQotICAgIGJvb2wgaXNDYXJldE9y
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBzZWxlY3Rpb25UeXBlKCkgIT0gTm9TZWxlY3Rpb247IH0K
LQotICAgIGJvb2wgaXNCYXNlRmlyc3QoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VJc0ZpcnN0OyB9
Ci0KLSAgICB2b2lkIGFwcGVuZFRyYWlsaW5nV2hpdGVzcGFjZSgpOwotCi0gICAgYm9vbCBleHBh
bmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSk7Ci0gICAgVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KCkgY29uc3QgeyByZXR1cm4gbV9ncmFudWxhcml0eTsg
fQotCi0gICAgLy8gV2UgZG9uJ3QgeWV0IHN1cHBvcnQgbXVsdGktcmFuZ2Ugc2VsZWN0aW9ucywg
c28gd2Ugb25seSBldmVyIGhhdmUgb25lIHJhbmdlIHRvIHJldHVybi4KLSAgICBQYXNzUmVmUHRy
PFJhbmdlPiBmaXJzdFJhbmdlKCkgY29uc3Q7Ci0KLSAgICAvLyBGSVhNRTogTW9zdCBjYWxsZXJz
IHByb2JhYmx5IGRvbid0IHdhbnQgdGhpcyBmdW5jdGlvbiwgYnV0IGFyZSB1c2luZyBpdAotICAg
IC8vIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuICB0b05vcm1hbGl6ZWRSYW5nZSBjb250cmFjdHMg
dGhlIHJhbmdlIGFyb3VuZAotICAgIC8vIHRleHQsIGFuZCBtb3ZlcyB0aGUgY2FyZXQgdXBzdHJl
YW0gYmVmb3JlIHJldHVybmluZyB0aGUgcmFuZ2UuCi0gICAgUGFzc1JlZlB0cjxSYW5nZT4gdG9O
b3JtYWxpemVkUmFuZ2UoKSBjb25zdDsKLSAgICAKLSAgICBFbGVtZW50KiByb290RWRpdGFibGVF
bGVtZW50KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotICAg
IGJvb2wgaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSBjb25zdDsKLSAgICBOb2RlKiBzaGFkb3dU
cmVlUm9vdE5vZGUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGRlYnVnUG9zaXRpb24oKSBjb25z
dDsKLQotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKLSAgICB2b2lkIHNob3dUcmVlRm9yVGhpcygp
IGNvbnN0OwotI2VuZGlmCi0KLSAgICB2b2lkIHNldFdpdGhvdXRWYWxpZGF0aW9uKGNvbnN0IFBv
c2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHZhbGlkYXRl
KCk7Ci0KLSAgICAvLyBTdXBwb3J0IG1ldGhvZHMgZm9yIHZhbGlkYXRlKCkKLSAgICB2b2lkIHNl
dEJhc2VBbmRFeHRlbnRUb0RlZXBFcXVpdmFsZW50cygpOwotICAgIHZvaWQgc2V0U3RhcnRBbmRF
bmRGcm9tQmFzZUFuZEV4dGVudFJlc3BlY3RpbmdHcmFudWxhcml0eSgpOwotICAgIHZvaWQgYWRq
dXN0U2VsZWN0aW9uVG9Bdm9pZENyb3NzaW5nRWRpdGluZ0JvdW5kYXJpZXMoKTsKLSAgICB2b2lk
IHVwZGF0ZVNlbGVjdGlvblR5cGUoKTsKLQotICAgIFBvc2l0aW9uIG1fYmFzZTsgICAvLyBXaGVy
ZSB0aGUgZmlyc3QgY2xpY2sgaGFwcGVuZWQKLSAgICBQb3NpdGlvbiBtX2V4dGVudDsgLy8gV2hl
cmUgdGhlIGVuZCBjbGljayBoYXBwZW5lZAotICAgIFBvc2l0aW9uIG1fc3RhcnQ7ICAvLyBMZWZ0
bW9zdCBwb3NpdGlvbiB3aGVuIGV4cGFuZGVkIHRvIHJlc3BlY3QgZ3JhbnVsYXJpdHkKLSAgICBQ
b3NpdGlvbiBtX2VuZDsgICAgLy8gUmlnaHRtb3N0IHBvc2l0aW9uIHdoZW4gZXhwYW5kZWQgdG8g
cmVzcGVjdCBncmFudWxhcml0eQotCi0gICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7ICAgICAgICAg
ICAvLyB0aGUgdXBzdHJlYW0vZG93bnN0cmVhbSBhZmZpbml0eSBvZiB0aGUgY2FyZXQKLSAgICBU
ZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsgIC8vIGdyYW51bGFyaXR5IG9mIHN0YXJ0L2Vu
ZCBzZWxlY3Rpb24KLQotICAgIC8vIHRoZXNlIGFyZSBjYWNoZWQsIGNhbiBiZSByZWNhbGN1bGF0
ZWQgYnkgdmFsaWRhdGUoKQotICAgIFNlbGVjdGlvblR5cGUgbV9zZWxlY3Rpb25UeXBlOyAgICAv
LyBOb25lLCBDYXJldCwgUmFuZ2UKLSAgICBib29sIG1fYmFzZUlzRmlyc3Q7ICAgICAgICAgICAg
ICAgLy8gdHJ1ZSBpZiBiYXNlIGlzIGJlZm9yZSB0aGUgZXh0ZW50Ci19OwotCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFNlbGVjdGlvbiYgYSwgY29uc3QgU2VsZWN0aW9uJiBiKQotewot
ICAgIHJldHVybiBhLnN0YXJ0KCkgPT0gYi5zdGFydCgpICYmIGEuZW5kKCkgPT0gYi5lbmQoKSAm
JiBhLmFmZmluaXR5KCkgPT0gYi5hZmZpbml0eSgpICYmIGEuZ3JhbnVsYXJpdHkoKSA9PSBiLmdy
YW51bGFyaXR5KCkgJiYgYS5pc0Jhc2VGaXJzdCgpID09IGIuaXNCYXNlRmlyc3QoKTsKLX0KLQot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTZWxlY3Rpb24mIGEsIGNvbnN0IFNlbGVjdGlv
biYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNpZm5kZWYgTkRFQlVHCi0vLyBPdXRzaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZSBm
b3IgZWFzZSBvZiBpbnZvY2F0aW9uIGZyb20gZ2RiLgotdm9pZCBzaG93VHJlZShjb25zdCBXZWJD
b3JlOjpTZWxlY3Rpb24mKTsKLXZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9u
Kik7Ci0jZW5kaWYKLQotI2VuZGlmIC8vIFNlbGVjdGlvbl9oCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0
aW9uQ29udHJvbGxlci5jcHAKaW5kZXggZTE0MTZiOC4uNDNlOTI1MCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGlu
Zy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcApAQCAtNzYsMzAgKzc2LDMwIEBAIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lLCBib29sIGlzRHJhZ0Nh
cmV0Q29udHJvbGxlCiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmcG9zLCBib29sIHVzZXJUcmlnZ2VyZWQpCiB7Ci0gICAgc2V0U2VsZWN0
aW9uKFNlbGVjdGlvbihwb3MuZGVlcEVxdWl2YWxlbnQoKSwgcG9zLmRlZXBFcXVpdmFsZW50KCks
IHBvcy5hZmZpbml0eSgpKSwgdHJ1ZSwgdHJ1ZSwgdXNlclRyaWdnZXJlZCk7CisgICAgc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zLmRlZXBFcXVpdmFsZW50KCksIHBvcy5kZWVwRXF1
aXZhbGVudCgpLCBwb3MuYWZmaW5pdHkoKSksIHRydWUsIHRydWUsIHVzZXJUcmlnZ2VyZWQpOwog
fQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRp
b24gJmJhc2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmZXh0ZW50LCBib29sIHVzZXJUcmlnZ2Vy
ZWQpCiB7Ci0gICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbihiYXNlLmRlZXBFcXVpdmFsZW50KCks
IGV4dGVudC5kZWVwRXF1aXZhbGVudCgpLCBiYXNlLmFmZmluaXR5KCkpLCB0cnVlLCB0cnVlLCB1
c2VyVHJpZ2dlcmVkKTsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYXNlLmRl
ZXBFcXVpdmFsZW50KCksIGV4dGVudC5kZWVwRXF1aXZhbGVudCgpLCBiYXNlLmFmZmluaXR5KCkp
LCB0cnVlLCB0cnVlLCB1c2VyVHJpZ2dlcmVkKTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjptb3ZlVG8oY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHVzZXJUcmlnZ2VyZWQpCiB7Ci0gICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbihwb3MsIGFmZmlu
aXR5KSwgdHJ1ZSwgdHJ1ZSwgdXNlclRyaWdnZXJlZCk7CisgICAgc2V0U2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24ocG9zLCBhZmZpbml0eSksIHRydWUsIHRydWUsIHVzZXJUcmlnZ2VyZWQpOwog
fQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVUbyhjb25zdCBSYW5nZSAqciwgRUFm
ZmluaXR5IGFmZmluaXR5LCBib29sIHVzZXJUcmlnZ2VyZWQpCiB7Ci0gICAgc2V0U2VsZWN0aW9u
KFNlbGVjdGlvbihzdGFydFBvc2l0aW9uKHIpLCBlbmRQb3NpdGlvbihyKSwgYWZmaW5pdHkpLCB0
cnVlLCB0cnVlLCB1c2VyVHJpZ2dlcmVkKTsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihzdGFydFBvc2l0aW9uKHIpLCBlbmRQb3NpdGlvbihyKSwgYWZmaW5pdHkpLCB0cnVlLCB0
cnVlLCB1c2VyVHJpZ2dlcmVkKTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3Zl
VG8oY29uc3QgUG9zaXRpb24gJmJhc2UsIGNvbnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZpbml0
eSBhZmZpbml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkKQogewotICAgIHNldFNlbGVjdGlvbihTZWxl
Y3Rpb24oYmFzZSwgZXh0ZW50LCBhZmZpbml0eSksIHRydWUsIHRydWUsIHVzZXJUcmlnZ2VyZWQp
OworICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhc2UsIGV4dGVudCwgYWZmaW5p
dHkpLCB0cnVlLCB0cnVlLCB1c2VyVHJpZ2dlcmVkKTsKIH0KIAotdm9pZCBTZWxlY3Rpb25Db250
cm9sbGVyOjpzZXRTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiBzLCBib29sIGNsb3NlVHlwaW5n
LCBib29sIGNsZWFyVHlwaW5nU3R5bGUsIGJvb2wgdXNlclRyaWdnZXJlZCkKK3ZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHMsIGJv
b2wgY2xvc2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSwgYm9vbCB1c2VyVHJpZ2dlcmVk
KQogewogICAgIGlmIChtX2lzRHJhZ0NhcmV0Q29udHJvbGxlcikgewogICAgICAgICBpbnZhbGlk
YXRlQ2FyZXRSZWN0KCk7CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpzZXRTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiBzLCBib29sIGNsb3NlVHlwaW5nLCBi
b28KICAgICBpZiAobV9zZWwgPT0gcykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFNlbGVj
dGlvbiBvbGRTZWxlY3Rpb24gPSBtX3NlbDsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVj
dGlvbiA9IG1fc2VsOwogCiAgICAgbV9zZWwgPSBzOwogICAgIApAQCAtMjIwLDcgKzIyMCw3IEBA
IHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSAqbm9kZSkK
ICAgICB9CiAKICAgICBpZiAoY2xlYXJET01UcmVlU2VsZWN0aW9uKQotICAgICAgICBzZXRTZWxl
Y3Rpb24oU2VsZWN0aW9uKCksIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIHNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKCksIGZhbHNlLCBmYWxzZSk7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6d2lsbEJlTW9kaWZpZWQoRUFsdGVyYXRpb24gYWx0ZXIsIEVEaXJlY3Rpb24gZGly
ZWN0aW9uKQpAQCAtNzAwLDI3ICs3MDAsMjcgQEAgaW50IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnhQ
b3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFUG9zaXRpb25UeXBlIHR5cGUpCiAKIHZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2xlYXIoKQogewotICAgIHNldFNlbGVjdGlvbihTZWxlY3Rp
b24oKSk7CisgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKSk7CiB9CiAKIHZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0QmFzZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywg
Ym9vbCB1c2VyVHJpZ2dlcmVkKQogewotICAgIHNldFNlbGVjdGlvbihTZWxlY3Rpb24ocG9zLmRl
ZXBFcXVpdmFsZW50KCksIG1fc2VsLmV4dGVudCgpLCBwb3MuYWZmaW5pdHkoKSksIHRydWUsIHRy
dWUsIHVzZXJUcmlnZ2VyZWQpOworICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBv
cy5kZWVwRXF1aXZhbGVudCgpLCBtX3NlbC5leHRlbnQoKSwgcG9zLmFmZmluaXR5KCkpLCB0cnVl
LCB0cnVlLCB1c2VyVHJpZ2dlcmVkKTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpz
ZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJvb2wgdXNlclRyaWdnZXJlZCkK
IHsKLSAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKG1fc2VsLmJhc2UoKSwgcG9zLmRlZXBFcXVp
dmFsZW50KCksIHBvcy5hZmZpbml0eSgpKSwgdHJ1ZSwgdHJ1ZSwgdXNlclRyaWdnZXJlZCk7Cisg
ICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9zZWwuYmFzZSgpLCBwb3MuZGVlcEVx
dWl2YWxlbnQoKSwgcG9zLmFmZmluaXR5KCkpLCB0cnVlLCB0cnVlLCB1c2VyVHJpZ2dlcmVkKTsK
IH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uICZw
b3MsIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCB1c2VyVHJpZ2dlcmVkKQogewotICAgIHNldFNl
bGVjdGlvbihTZWxlY3Rpb24ocG9zLCBtX3NlbC5leHRlbnQoKSwgYWZmaW5pdHkpLCB0cnVlLCB0
cnVlLCB1c2VyVHJpZ2dlcmVkKTsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihw
b3MsIG1fc2VsLmV4dGVudCgpLCBhZmZpbml0eSksIHRydWUsIHRydWUsIHVzZXJUcmlnZ2VyZWQp
OwogfQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEV4dGVudChjb25zdCBQb3NpdGlv
biAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgdXNlclRyaWdnZXJlZCkKIHsKLSAgICBz
ZXRTZWxlY3Rpb24oU2VsZWN0aW9uKG1fc2VsLmJhc2UoKSwgcG9zLCBhZmZpbml0eSksIHRydWUs
IHRydWUsIHVzZXJUcmlnZ2VyZWQpOworICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KG1fc2VsLmJhc2UoKSwgcG9zLCBhZmZpbml0eSksIHRydWUsIHRydWUsIHVzZXJUcmlnZ2VyZWQp
OwogfQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldE5lZWRzTGF5b3V0KGJvb2wgZmxh
ZykKQEAgLTEwNjIsNyArMTA2Miw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2VsZWN0
RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKQogICAgIFZpc2libGVQb3NpdGlv
biBhZnRlck93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBv
d25lckVsZW1lbnROb2RlSW5kZXggKyAxLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSkpOwogCiAg
ICAgLy8gRm9jdXMgb24gdGhlIHBhcmVudCBmcmFtZSwgYW5kIHRoZW4gc2VsZWN0IGZyb20gYmVm
b3JlIHRoaXMgZWxlbWVudCB0byBhZnRlci4KLSAgICBTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKGJl
Zm9yZU93bmVyRWxlbWVudCwgYWZ0ZXJPd25lckVsZW1lbnQpOworICAgIFZpc2libGVTZWxlY3Rp
b24gbmV3U2VsZWN0aW9uKGJlZm9yZU93bmVyRWxlbWVudCwgYWZ0ZXJPd25lckVsZW1lbnQpOwog
ICAgIGlmIChwYXJlbnQtPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKSB7CiAg
ICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUocGFyZW50KTsK
ICAgICAgICAgcGFyZW50LT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7
CkBAIC0xMDkwLDcgKzEwOTAsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdEFs
bCgpCiAgICAgfQogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwotICAgIFNlbGVjdGlv
biBuZXdTZWxlY3Rpb24oU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUocm9v
dCkpOworICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb246
OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShyb290KSk7CiAgICAgaWYgKG1fZnJhbWUtPnNo
b3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAgICAgICBzZXRTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uKTsKICAgICBzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxl
Y3RlZCgpOwpAQCAtMTEzNCw3ICsxMTM0LDcgQEAgYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpz
ZXRTZWxlY3RlZFJhbmdlKFJhbmdlKiByYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib28KICAg
ICAvLyBGSVhNRTogQ2FuIHdlIHByb3ZpZGUgZXh0ZW50QWZmaW5pdHk/CiAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGNvbGxhcHNl
ZCA/IGFmZmluaXR5IDogRE9XTlNUUkVBTSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVF
bmQoZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBz
ZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHZpc2libGVTdGFydCwgdmlzaWJsZUVuZCksIGNsb3NlVHlw
aW5nKTsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbih2aXNpYmxlU3RhcnQsIHZp
c2libGVFbmQpLCBjbG9zZVR5cGluZyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmggYi9XZWJDb3JlL2VkaXRp
bmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCmluZGV4IGE3ZjMxMzQuLjIxZTg0OWQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaApAQCAtMjcsOCArMjcsOCBAQAogI2RlZmluZSBT
ZWxlY3Rpb25Db250cm9sbGVyX2gKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJT
ZWxlY3Rpb24uaCIKICNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rp
b24uaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNTYsOCArNTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtb3ZlVG8oY29uc3QgUG9zaXRp
b24mLCBFQWZmaW5pdHksIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKICAgICB2b2lkIG1v
dmVUbyhjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5LCBib29sIHVz
ZXJUcmlnZ2VyZWQgPSBmYWxzZSk7CiAKLSAgICBjb25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2VsOyB9Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgU2Vs
ZWN0aW9uJiwgYm9vbCBjbG9zZVR5cGluZyA9IHRydWUsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSA9
IHRydWUsIGJvb2wgdXNlclRyaWdnZXJlZCA9IGZhbHNlKTsKKyAgICBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbDsgfQorICAgIHZvaWQgc2V0
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIGNsb3NlVHlwaW5nID0gdHJ1
ZSwgYm9vbCBjbGVhclR5cGluZ1N0eWxlID0gdHJ1ZSwgYm9vbCB1c2VyVHJpZ2dlcmVkID0gZmFs
c2UpOwogICAgIGJvb2wgc2V0U2VsZWN0ZWRSYW5nZShSYW5nZSosIEVBZmZpbml0eSwgYm9vbCBj
bG9zZVR5cGluZyk7CiAgICAgdm9pZCBzZWxlY3RBbGwoKTsKICAgICB2b2lkIGNsZWFyKCk7CkBA
IC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnMoY29uc3QgSW50UG9p
bnQmKTsKIAotICAgIFNlbGVjdGlvbjo6U2VsZWN0aW9uVHlwZSBzZWxlY3Rpb25UeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9zZWwuc2VsZWN0aW9uVHlwZSgpOyB9CisgICAgVmlzaWJsZVNlbGVjdGlv
bjo6U2VsZWN0aW9uVHlwZSBzZWxlY3Rpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuc2Vs
ZWN0aW9uVHlwZSgpOyB9CiAKICAgICBFQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7IHJldHVy
biBtX3NlbC5hZmZpbml0eSgpOyB9CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCBwcml2YXRlOgogICAg
IEZyYW1lKiBtX2ZyYW1lOwogICAgIGludCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
bjsKIAotICAgIFNlbGVjdGlvbiBtX3NlbDsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG1fc2VsOwog
CiAgICAgSW50UmVjdCBtX2NhcmV0UmVjdDsgICAgICAgIC8vIGNhcmV0IHJlY3QgaW4gY29vcmRz
IGxvY2FsIHRvIHRoZSByZW5kZXJlciByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgdGhlIGNhcmV0
CiAgICAgSW50UmVjdCBtX2Fic0NhcmV0Qm91bmRzOyAgIC8vIGFic29sdXRlIGJvdW5kaW5nIHJl
Y3QgZm9yIHRoZSBjYXJldApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IDFhMjk1MGIu
LmI2YTk2YTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAor
KysgYi9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTEyNSwxNCArMTI1LDE0
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlCiAgICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4
dCwgZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSwgc2VsZWN0SW5zZXJ0ZWRUZXh0LCBp
bnNlcnRlZFRleHRJc0NvbXBvc2l0aW9uKTsKIH0KIAotdm9pZCBUeXBpbmdDb21tYW5kOjppbnNl
cnRUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTZWxl
Y3Rpb24mIHNlbGVjdGlvbkZvckluc2VydGlvbiwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQsIGJv
b2wgaW5zZXJ0ZWRUZXh0SXNDb21wb3NpdGlvbikKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLCBib29sIHNlbGVjdEluc2VydGVkVGV4
dCwgYm9vbCBpbnNlcnRlZFRleHRJc0NvbXBvc2l0aW9uKQogewogICAgIEFTU0VSVChkb2N1bWVu
dCk7CiAgICAgCiAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwog
ICAgIEFTU0VSVChmcmFtZSk7CiAgICAgCi0gICAgU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb24g
PSBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOworICAgIFZpc2libGVTZWxlY3Rpb24g
Y3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAg
Ym9vbCBjaGFuZ2VTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uICE9IHNlbGVjdGlvbkZvcklu
c2VydGlvbjsKICAgICAKICAgICBTdHJpbmcgbmV3VGV4dCA9IHRleHQ7CkBAIC0zNzAsMTUgKzM3
MCwxNSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudCgpCiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCiB7Ci0gICAgU2VsZWN0aW9u
IHNlbGVjdGlvblRvRGVsZXRlOwotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb25BZnRlclVuZG87Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKKyAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKICAgICAKICAgICBzd2l0Y2ggKGVuZGluZ1NlbGVjdGlv
bigpLnNlbGVjdGlvblR5cGUoKSkgewotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6UmFuZ2VTZWxl
Y3Rpb246CisgICAgICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb246CiAg
ICAgICAgICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IGVuZGluZ1NlbGVjdGlvbigpOwogICAgICAg
ICAgICAgc2VsZWN0aW9uQWZ0ZXJVbmRvID0gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uOiB7CisgICAg
ICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246IHsKICAgICAgICAgICAg
IGlmIChicmVha091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgoKSkgewogICAgICAg
ICAgICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCgpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTQxMCw3ICs0MTAsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVBy
ZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5ELCBT
ZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCwgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAg
Ly8gSWYgdGhlIGNhcmV0IGlzIGp1c3QgYWZ0ZXIgYSB0YWJsZSwgc2VsZWN0IHRoZSB0YWJsZSBh
bmQgZG9uJ3QgZGVsZXRlIGFueXRoaW5nLgogICAgICAgICAgICAgfSBlbHNlIGlmIChOb2RlKiB0
YWJsZSA9IGlzRmlyc3RQb3NpdGlvbkFmdGVyVGFibGUodmlzaWJsZVN0YXJ0KSkgewotICAgICAg
ICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9zaXRpb24odGFibGUsIDAp
LCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBET1dOU1RSRUFNKSk7CisgICAgICAgICAgICAg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oUG9zaXRpb24odGFibGUsIDAp
LCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLCBET1dOU1RSRUFNKSk7CiAgICAgICAgICAgICAg
ICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQpAQCAtNDI2LDEyICs0MjYsMTIgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpk
ZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBraWxsUmlu
ZykKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25BZnRlclVuZG8gPSBzZWxlY3Rpb25Ub0RlbGV0
ZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAvLyBJdCdzIGEgbGl0dGxlIHRy
aWNreSB0byBjb21wdXRlIHdoYXQgdGhlIHN0YXJ0aW5nIHNlbGVjdGlvbiB3b3VsZCBoYXZlIGJl
ZW4gaW4gdGhlIG9yaWdpbmFsIGRvY3VtZW50LgotICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0
IGxldCB0aGUgU2VsZWN0aW9uIGNsYXNzJ3MgdmFsaWRhdGlvbiBraWNrIGluIG9yIGl0J2xsIGFk
anVzdCBmb3IgdXMgYmFzZWQgb24KKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBsZXQgdGhl
IFZpc2libGVTZWxlY3Rpb24gY2xhc3MncyB2YWxpZGF0aW9uIGtpY2sgaW4gb3IgaXQnbGwgYWRq
dXN0IGZvciB1cyBiYXNlZCBvbgogICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IHN0YXRl
IG9mIHRoZSBkb2N1bWVudCBhbmQgd2UnbGwgZ2V0IHRoZSB3cm9uZyByZXN1bHQuCiAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uQWZ0ZXJVbmRvLnNldFdpdGhvdXRWYWxpZGF0aW9uKHN0YXJ0aW5n
U2VsZWN0aW9uKCkuZW5kKCksIHNlbGVjdGlvblRvRGVsZXRlLmV4dGVudCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpOb1NlbGVjdGlv
bjoKKyAgICAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
NDUyLDE1ICs0NTIsMTUgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBraWxsUmluZykKIAogdm9pZCBUeXBpbmdD
b21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGJvb2wga2lsbFJpbmcpCiB7Ci0gICAgU2VsZWN0aW9uIHNlbGVjdGlvblRvRGVsZXRlOwot
ICAgIFNlbGVjdGlvbiBzZWxlY3Rpb25BZnRlclVuZG87CisgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb25Ub0RlbGV0ZTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5k
bzsKIAogICAgIHN3aXRjaCAoZW5kaW5nU2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpKSB7Ci0g
ICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKKyAgICAgICAgY2FzZSBWaXNp
YmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKICAgICAgICAgICAgIHNlbGVjdGlvblRvRGVs
ZXRlID0gZW5kaW5nU2VsZWN0aW9uKCk7CiAgICAgICAgICAgICBzZWxlY3Rpb25BZnRlclVuZG8g
PSBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNl
bGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246IHsKKyAgICAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9u
OjpDYXJldFNlbGVjdGlvbjogewogICAgICAgICAgICAgbV9zbWFydERlbGV0ZSA9IGZhbHNlOwog
CiAgICAgICAgICAgICAvLyBIYW5kbGUgZGVsZXRlIGF0IGJlZ2lubmluZy1vZi1ibG9jayBjYXNl
LgpAQCAtNDc4LDcgKzQ3OCw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtl
eVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpCiAgICAgICAgICAg
ICAgICAgZG93bnN0cmVhbUVuZCA9IHZpc2libGVFbmQubmV4dCh0cnVlKS5kZWVwRXF1aXZhbGVu
dCgpLmRvd25zdHJlYW0oKTsKICAgICAgICAgICAgIC8vIFdoZW4gZGVsZXRpbmcgdGFibGVzOiBT
ZWxlY3QgdGhlIHRhYmxlIGZpcnN0LCB0aGVuIHBlcmZvcm0gdGhlIGRlbGV0aW9uCiAgICAgICAg
ICAgICBpZiAoZG93bnN0cmVhbUVuZC5ub2RlKCkgJiYgZG93bnN0cmVhbUVuZC5ub2RlKCktPnJl
bmRlcmVyKCkgJiYgZG93bnN0cmVhbUVuZC5ub2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSAm
JiBkb3duc3RyZWFtRW5kLm9mZnNldCgpID09IDApIHsKLSAgICAgICAgICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLCBQb3NpdGlvbihk
b3duc3RyZWFtRW5kLm5vZGUoKSwgbWF4RGVlcE9mZnNldChkb3duc3RyZWFtRW5kLm5vZGUoKSkp
LCBET1dOU1RSRUFNKSk7CisgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIFBvc2l0aW9uKGRvd25zdHJlYW1F
bmQubm9kZSgpLCBtYXhEZWVwT2Zmc2V0KGRvd25zdHJlYW1FbmQubm9kZSgpKSksIERPV05TVFJF
QU0pKTsKICAgICAgICAgICAgICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC00OTIsNyArNDkyLDcgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGJvb2wga2kKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25BZnRlclVuZG8g
PSBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
IC8vIEl0J3MgYSBsaXR0bGUgdHJpY2t5IHRvIGNvbXB1dGUgd2hhdCB0aGUgc3RhcnRpbmcgc2Vs
ZWN0aW9uIHdvdWxkIGhhdmUgYmVlbiBpbiB0aGUgb3JpZ2luYWwgZG9jdW1lbnQuCi0gICAgICAg
ICAgICAgICAgLy8gV2UgY2FuJ3QgbGV0IHRoZSBTZWxlY3Rpb24gY2xhc3MncyB2YWxpZGF0aW9u
IGtpY2sgaW4gb3IgaXQnbGwgYWRqdXN0IGZvciB1cyBiYXNlZCBvbgorICAgICAgICAgICAgICAg
IC8vIFdlIGNhbid0IGxldCB0aGUgVmlzaWJsZVNlbGVjdGlvbiBjbGFzcydzIHZhbGlkYXRpb24g
a2ljayBpbiBvciBpdCdsbCBhZGp1c3QgZm9yIHVzIGJhc2VkIG9uCiAgICAgICAgICAgICAgICAg
Ly8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRvY3VtZW50IGFuZCB3ZSdsbCBnZXQgdGhlIHdy
b25nIHJlc3VsdC4KICAgICAgICAgICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBzdGFydGluZ1Nl
bGVjdGlvbigpLmVuZCgpOwogICAgICAgICAgICAgICAgIGlmIChleHRlbnQubm9kZSgpICE9IHNl
bGVjdGlvblRvRGVsZXRlLmVuZCgpLm5vZGUoKSkKQEAgLTUwOSw3ICs1MDksNyBAQCB2b2lkIFR5
cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgYm9vbCBraQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgorICAgICAgICBjYXNl
IFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQu
aAppbmRleCBiNGUxMDkxLi5lNWNkZGU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVHlw
aW5nQ29tbWFuZC5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUtleVByZXNzZWQoRG9j
dW1lbnQqLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIFRleHRHcmFudWxhcml0eSA9IENoYXJh
Y3RlckdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nID0gZmFsc2UpOwogICAgIHN0YXRpYyB2b2lk
IGZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50KiwgYm9vbCBzbWFydERlbGV0ZSA9IGZh
bHNlLCBUZXh0R3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eSwgYm9vbCBraWxsUmlu
ZyA9IGZhbHNlKTsKICAgICBzdGF0aWMgdm9pZCBpbnNlcnRUZXh0KERvY3VtZW50KiwgY29uc3Qg
U3RyaW5nJiwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQgPSBmYWxzZSwgYm9vbCBpbnNlcnRlZFRl
eHRJc0NvbXBvc2l0aW9uID0gZmFsc2UpOwotICAgIHN0YXRpYyB2b2lkIGluc2VydFRleHQoRG9j
dW1lbnQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTZWxlY3Rpb24mLCBib29sIHNlbGVjdEluc2Vy
dGVkVGV4dCA9IGZhbHNlLCBib29sIGluc2VydGVkVGV4dElzQ29tcG9zaXRpb24gPSBmYWxzZSk7
CisgICAgc3RhdGljIHZvaWQgaW5zZXJ0VGV4dChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIHNlbGVjdEluc2VydGVkVGV4dCA9IGZhbHNlLCBi
b29sIGluc2VydGVkVGV4dElzQ29tcG9zaXRpb24gPSBmYWxzZSk7CiAgICAgc3RhdGljIHZvaWQg
aW5zZXJ0TGluZUJyZWFrKERvY3VtZW50Kik7CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yKERvY3VtZW50Kik7CiAgICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50Kik7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9z
aXRpb24uY3BwCmluZGV4IDNkNzcxYzYuLjI3ZmUwM2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9z
aXRpb24uY3BwCkBAIC0zOTksNyArMzk5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3Np
dGlvbjo6aG9ub3JFZGl0YWJsZUJvdW5kYXJ5QXRPckJlZm9yZShjb25zdCBWaXNpYmxlUG8KICAg
ICAgICAgCiAgICAgLy8gUmV0dXJuIHBvcyBpdHNlbGYgaWYgdGhlIHR3byBhcmUgZnJvbSB0aGUg
dmVyeSBzYW1lIGVkaXRhYmxlIHJlZ2lvbiwgb3IgYm90aCBhcmUgbm9uLWVkaXRhYmxlCiAgICAg
Ly8gRklYTUU6IEluIHRoZSBub24tZWRpdGFibGUgY2FzZSwganVzdCBiZWNhdXNlIHRoZSBuZXcg
cG9zaXRpb24gaXMgbm9uLWVkaXRhYmxlIGRvZXNuJ3QgbWVhbiBtb3ZlbWVudAotICAgIC8vIHRv
IGl0IGlzIGFsbG93ZWQuICBTZWxlY3Rpb246OmFkanVzdEZvckVkaXRhYmxlQ29udGVudCBoYXMg
dGhpcyBwcm9ibGVtIHRvby4KKyAgICAvLyB0byBpdCBpcyBhbGxvd2VkLiAgVmlzaWJsZVNlbGVj
dGlvbjo6YWRqdXN0Rm9yRWRpdGFibGVDb250ZW50IGhhcyB0aGlzIHByb2JsZW0gdG9vLgogICAg
IGlmIChoaWdoZXN0RWRpdGFibGVSb290KHBvcy5kZWVwRXF1aXZhbGVudCgpKSA9PSBoaWdoZXN0
Um9vdCkKICAgICAgICAgcmV0dXJuIHBvczsKICAgCkBAIC00MjUsNyArNDI1LDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6aG9ub3JFZGl0YWJsZUJvdW5kYXJ5QXRPckFmdGVy
KGNvbnN0IFZpc2libGVQb3MKICAgICAKICAgICAvLyBSZXR1cm4gcG9zIGl0c2VsZiBpZiB0aGUg
dHdvIGFyZSBmcm9tIHRoZSB2ZXJ5IHNhbWUgZWRpdGFibGUgcmVnaW9uLCBvciBib3RoIGFyZSBu
b24tZWRpdGFibGUKICAgICAvLyBGSVhNRTogSW4gdGhlIG5vbi1lZGl0YWJsZSBjYXNlLCBqdXN0
IGJlY2F1c2UgdGhlIG5ldyBwb3NpdGlvbiBpcyBub24tZWRpdGFibGUgZG9lc24ndCBtZWFuIG1v
dmVtZW50Ci0gICAgLy8gdG8gaXQgaXMgYWxsb3dlZC4gIFNlbGVjdGlvbjo6YWRqdXN0Rm9yRWRp
dGFibGVDb250ZW50IGhhcyB0aGlzIHByb2JsZW0gdG9vLgorICAgIC8vIHRvIGl0IGlzIGFsbG93
ZWQuICBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RGb3JFZGl0YWJsZUNvbnRlbnQgaGFzIHRoaXMg
cHJvYmxlbSB0b28uCiAgICAgaWYgKGhpZ2hlc3RFZGl0YWJsZVJvb3QocG9zLmRlZXBFcXVpdmFs
ZW50KCkpID09IGhpZ2hlc3RSb290KQogICAgICAgICByZXR1cm4gcG9zOwogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVNlbGVjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Yjk5ZjQxYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0
aW9uLmNwcApAQCAtMCwwICsxLDY1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KyAgCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgor
CisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiaHRtbGVk
aXRpbmcuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9z
aXRpb24uaCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIK
KworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitWaXNpYmxlU2VsZWN0aW9uOjpWaXNpYmxlU2VsZWN0aW9uKCkK
KyAgICA6IG1fYWZmaW5pdHkoRE9XTlNUUkVBTSkKKyAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpCisgICAgLCBtX3NlbGVjdGlvblR5cGUoTm9TZWxlY3Rpb24pCisgICAg
LCBtX2Jhc2VJc0ZpcnN0KHRydWUpCit7Cit9CisKK1Zpc2libGVTZWxlY3Rpb246OlZpc2libGVT
ZWxlY3Rpb24oY29uc3QgUG9zaXRpb24mIHBvcywgRUFmZmluaXR5IGFmZmluaXR5KQorICAgIDog
bV9iYXNlKHBvcykKKyAgICAsIG1fZXh0ZW50KHBvcykKKyAgICAsIG1fYWZmaW5pdHkoYWZmaW5p
dHkpCisgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQoreworICAgIHZh
bGlkYXRlKCk7Cit9CisKK1Zpc2libGVTZWxlY3Rpb246OlZpc2libGVTZWxlY3Rpb24oY29uc3Qg
UG9zaXRpb24mIGJhc2UsIGNvbnN0IFBvc2l0aW9uJiBleHRlbnQsIEVBZmZpbml0eSBhZmZpbml0
eSkKKyAgICA6IG1fYmFzZShiYXNlKQorICAgICwgbV9leHRlbnQoZXh0ZW50KQorICAgICwgbV9h
ZmZpbml0eShhZmZpbml0eSkKKyAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJp
dHkpCit7CisgICAgdmFsaWRhdGUoKTsKK30KKworVmlzaWJsZVNlbGVjdGlvbjo6VmlzaWJsZVNl
bGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvcykKKyAgICA6IG1fYmFzZShwb3MuZGVl
cEVxdWl2YWxlbnQoKSkKKyAgICAsIG1fZXh0ZW50KHBvcy5kZWVwRXF1aXZhbGVudCgpKQorICAg
ICwgbV9hZmZpbml0eShwb3MuYWZmaW5pdHkoKSkKKyAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpCit7CisgICAgdmFsaWRhdGUoKTsKK30KKworVmlzaWJsZVNlbGVjdGlv
bjo6VmlzaWJsZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIGJhc2UsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgZXh0ZW50KQorICAgIDogbV9iYXNlKGJhc2UuZGVlcEVxdWl2YWxlbnQo
KSkKKyAgICAsIG1fZXh0ZW50KGV4dGVudC5kZWVwRXF1aXZhbGVudCgpKQorICAgICwgbV9hZmZp
bml0eShiYXNlLmFmZmluaXR5KCkpCisgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51
bGFyaXR5KQoreworICAgIHZhbGlkYXRlKCk7Cit9CisKK1Zpc2libGVTZWxlY3Rpb246OlZpc2li
bGVTZWxlY3Rpb24oY29uc3QgUmFuZ2UqIHJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHkpCisgICAg
OiBtX2Jhc2UocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkKKyAgICAsIG1fZXh0ZW50KHJhbmdlLT5l
bmRQb3NpdGlvbigpKQorICAgICwgbV9hZmZpbml0eShhZmZpbml0eSkKKyAgICAsIG1fZ3JhbnVs
YXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCit7CisgICAgdmFsaWRhdGUoKTsKK30KKworVmlz
aWJsZVNlbGVjdGlvbiBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5v
ZGUoTm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbihQb3NpdGlvbihu
b2RlLCAwKSwgUG9zaXRpb24obm9kZSwgbWF4RGVlcE9mZnNldChub2RlKSksIERPV05TVFJFQU0p
OworfQorCit2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEJhc2UoY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uKQoreworICAgIG1fYmFzZSA9IHBvc2l0aW9uOworICAgIHZhbGlkYXRlKCk7Cit9CisK
K3ZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0QmFzZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZp
c2libGVQb3NpdGlvbikKK3sKKyAgICBtX2Jhc2UgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKTsKKyAgICB2YWxpZGF0ZSgpOworfQorCit2b2lkIFZpc2libGVTZWxlY3Rpb246OnNl
dEV4dGVudChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgbV9leHRlbnQgPSBwb3Np
dGlvbjsKKyAgICB2YWxpZGF0ZSgpOworfQorCit2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEV4
dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKK3sKKyAgICBtX2V4
dGVudCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOworICAgIHZhbGlkYXRlKCk7
Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBj
b25zdAoreworICAgIGlmIChpc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUG9zaXRp
b24gc3RhcnQgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobV9zdGFydCk7CisgICAgUG9zaXRp
b24gZW5kID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG1fZW5kKTsKKyAgICByZXR1cm4gUmFu
Z2U6OmNyZWF0ZShzdGFydC5ub2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOworfQorCitQ
YXNzUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNv
bnN0Cit7CisgICAgaWYgKGlzTm9uZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIE1h
a2Ugc3VyZSB3ZSBoYXZlIGFuIHVwZGF0ZWQgbGF5b3V0IHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkCisgICAgLy8gaW4gdGhlIGNvdXJzZSBvZiBydW5uaW5nIGVkaXQgY29tbWFuZHMgd2hp
Y2ggbW9kaWZ5IHRoZSBET00uCisgICAgLy8gRmFpbGluZyB0byBjYWxsIHRoaXMgY2FuIHJlc3Vs
dCBpbiBlcXVpdmFsZW50WFhYUG9zaXRpb24gY2FsbHMgcmV0dXJuaW5nCisgICAgLy8gaW5jb3Jy
ZWN0IHJlc3VsdHMuCisgICAgbV9zdGFydC5ub2RlKCktPmRvY3VtZW50KCktPnVwZGF0ZUxheW91
dCgpOworCisgICAgLy8gQ2hlY2sgYWdhaW4sIGJlY2F1c2UgdXBkYXRpbmcgbGF5b3V0IGNhbiBj
bGVhciB0aGUgc2VsZWN0aW9uLgorICAgIGlmIChpc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBQb3NpdGlvbiBzLCBlOworICAgIGlmIChpc0NhcmV0KCkpIHsKKyAgICAgICAgLy8g
SWYgdGhlIHNlbGVjdGlvbiBpcyBhIGNhcmV0LCBtb3ZlIHRoZSByYW5nZSBzdGFydCB1cHN0cmVh
bS4gVGhpcyBoZWxwcyB1cyBtYXRjaAorICAgICAgICAvLyB0aGUgY29udmVudGlvbnMgb2YgdGV4
dCBlZGl0b3JzIHRlc3RlZCwgd2hpY2ggbWFrZSBzdHlsZSBkZXRlcm1pbmF0aW9ucyBiYXNlZAor
ICAgICAgICAvLyBvbiB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY2FyZXQsIGlmIGFueS4gCisg
ICAgICAgIHMgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQobV9zdGFydC51cHN0cmVhbSgpKTsK
KyAgICAgICAgZSA9IHM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlv
biBpcyBhIHJhbmdlLCBzZWxlY3QgdGhlIG1pbmltdW0gcmFuZ2UgdGhhdCBlbmNvbXBhc3NlcyB0
aGUgc2VsZWN0aW9uLgorICAgICAgICAvLyBBZ2FpbiwgdGhpcyBpcyB0byBtYXRjaCB0aGUgY29u
dmVudGlvbnMgb2YgdGV4dCBlZGl0b3JzIHRlc3RlZCwgd2hpY2ggbWFrZSBzdHlsZSAKKyAgICAg
ICAgLy8gZGV0ZXJtaW5hdGlvbnMgYmFzZWQgb24gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUg
c2VsZWN0aW9uLiAKKyAgICAgICAgLy8gRm9yIGluc3RhbmNlLCB0aGlzIG9wZXJhdGlvbiBoZWxw
cyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgIlgiIHNlbGVjdGVkIGJlbG93IGlzIHRoZSAKKyAgICAg
ICAgLy8gb25seSB0aGluZyBzZWxlY3RlZC4gVGhlIHJhbmdlIHNob3VsZCBub3QgYmUgYWxsb3dl
ZCB0byAibGVhayIgb3V0IHRvIHRoZSBlbmQgb2YgdGhlIAorICAgICAgICAvLyBwcmV2aW91cyB0
ZXh0IG5vZGUsIG9yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgdGV4dCBub2RlLCBlYWNo
IG9mIHdoaWNoIGhhcyBhIAorICAgICAgICAvLyBkaWZmZXJlbnQgc3R5bGUuCisgICAgICAgIC8v
IAorICAgICAgICAvLyBPbiBhIHRyZWFzdXJlIG1hcCwgPGI+WDwvYj4gbWFya3MgdGhlIHNwb3Qu
CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBeIHNlbGVjdGVkCisgICAgICAgIC8v
CisgICAgICAgIEFTU0VSVChpc1JhbmdlKCkpOworICAgICAgICBzID0gbV9zdGFydC5kb3duc3Ry
ZWFtKCk7CisgICAgICAgIGUgPSBtX2VuZC51cHN0cmVhbSgpOworICAgICAgICBpZiAoUmFuZ2U6
OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzLm5vZGUoKSwgcy5vZmZzZXQoKSwgZS5ub2RlKCksIGUu
b2Zmc2V0KCkpID4gMCkgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGFydCBpcyBi
ZWZvcmUgdGhlIGVuZC4KKyAgICAgICAgICAgIC8vIFRoZSBlbmQgY2FuIHdpbmQgdXAgYmVmb3Jl
IHRoZSBzdGFydCBpZiBjb2xsYXBzZWQgd2hpdGVzcGFjZSBpcyB0aGUgb25seSB0aGluZyBzZWxl
Y3RlZC4KKyAgICAgICAgICAgIFBvc2l0aW9uIHRtcCA9IHM7CisgICAgICAgICAgICBzID0gZTsK
KyAgICAgICAgICAgIGUgPSB0bXA7CisgICAgICAgIH0KKyAgICAgICAgcyA9IHJhbmdlQ29tcGxp
YW50RXF1aXZhbGVudChzKTsKKyAgICAgICAgZSA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChl
KTsKKyAgICB9CisKKyAgICAvLyBWaXNpYmxlU2VsZWN0aW9ucyBhcmUgc3VwcG9zZWQgdG8gYWx3
YXlzIGJlIHZhbGlkLiAgVGhpcyBjb25zdHJ1Y3RvciB3aWxsIEFTU0VSVAorICAgIC8vIGlmIGEg
dmFsaWQgcmFuZ2UgY291bGQgbm90IGJlIGNyZWF0ZWQsIHdoaWNoIGlzIGZpbmUgZm9yIHRoaXMg
Y2FsbHNpdGUuCisgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUocy5ub2RlKCktPmRvY3VtZW50KCks
IHMsIGUpOworfQorCitib29sIFZpc2libGVTZWxlY3Rpb246OmV4cGFuZFVzaW5nR3JhbnVsYXJp
dHkoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIGlmIChpc05vbmUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9ncmFudWxhcml0eSA9IGdyYW51bGFyaXR5Owor
ICAgIHZhbGlkYXRlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRy
PFJhbmdlPiBtYWtlU2VhcmNoUmFuZ2UoY29uc3QgUG9zaXRpb24mIHBvcykKK3sKKyAgICBOb2Rl
KiBuID0gcG9zLm5vZGUoKTsKKyAgICBpZiAoIW4pCisgICAgICAgIHJldHVybiAwOworICAgIERv
Y3VtZW50KiBkID0gbi0+ZG9jdW1lbnQoKTsKKyAgICBOb2RlKiBkZSA9IGQtPmRvY3VtZW50RWxl
bWVudCgpOworICAgIGlmICghZGUpCisgICAgICAgIHJldHVybiAwOworICAgIE5vZGUqIGJvdW5k
YXJ5ID0gbi0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOworICAgIGlmICghYm91bmRhcnkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShSYW5n
ZTo6Y3JlYXRlKGQpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKworICAgIFBvc2l0aW9u
IHN0YXJ0KHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChwb3MpKTsKKyAgICBzZWFyY2hSYW5nZS0+
c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBlYyk7CisgICAgc2VhcmNoUmFuZ2UtPnNldFN0
YXJ0KHN0YXJ0Lm5vZGUoKSwgc3RhcnQub2Zmc2V0KCksIGVjKTsKKworICAgIEFTU0VSVCghZWMp
OworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc2VhcmNoUmFu
Z2UucmVsZWFzZSgpOworfQorCit2b2lkIFZpc2libGVTZWxlY3Rpb246OmFwcGVuZFRyYWlsaW5n
V2hpdGVzcGFjZSgpCit7CisgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZSA9IG1ha2VTZWFy
Y2hSYW5nZShtX2VuZCk7CisgICAgaWYgKCFzZWFyY2hSYW5nZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLmdldCgpLCB0cnVlKTsK
KworICAgIGZvciAoOyBjaGFySXQubGVuZ3RoKCk7IGNoYXJJdC5hZHZhbmNlKDEpKSB7CisgICAg
ICAgIFVDaGFyIGMgPSBjaGFySXQuY2hhcmFjdGVycygpWzBdOworICAgICAgICBpZiAoIWlzU3Bh
Y2VPck5ld2xpbmUoYykgJiYgYyAhPSBub0JyZWFrU3BhY2UpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgbV9lbmQgPSBjaGFySXQucmFuZ2UoKS0+ZW5kUG9zaXRpb24oKTsKKyAgICB9Cit9
CisKK3ZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0QmFzZUFuZEV4dGVudFRvRGVlcEVxdWl2YWxl
bnRzKCkKK3sKKyAgICAvLyBNb3ZlIHRoZSBzZWxlY3Rpb24gdG8gcmVuZGVyZWQgcG9zaXRpb25z
LCBpZiBwb3NzaWJsZS4KKyAgICBib29sIGJhc2VBbmRFeHRlbnRFcXVhbCA9IG1fYmFzZSA9PSBt
X2V4dGVudDsKKyAgICBpZiAobV9iYXNlLmlzTm90TnVsbCgpKSB7CisgICAgICAgIG1fYmFzZSA9
IFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIG1fYWZmaW5pdHkpLmRlZXBFcXVpdmFsZW50KCk7Cisg
ICAgICAgIGlmIChiYXNlQW5kRXh0ZW50RXF1YWwpCisgICAgICAgICAgICBtX2V4dGVudCA9IG1f
YmFzZTsKKyAgICB9CisgICAgaWYgKG1fZXh0ZW50LmlzTm90TnVsbCgpICYmICFiYXNlQW5kRXh0
ZW50RXF1YWwpCisgICAgICAgIG1fZXh0ZW50ID0gVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBt
X2FmZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGRvIG5v
dCBoYXZlIGEgZGFuZ2xpbmcgYmFzZSBvciBleHRlbnQuCisgICAgaWYgKG1fYmFzZS5pc051bGwo
KSAmJiBtX2V4dGVudC5pc051bGwoKSkKKyAgICAgICAgbV9iYXNlSXNGaXJzdCA9IHRydWU7Cisg
ICAgZWxzZSBpZiAobV9iYXNlLmlzTnVsbCgpKSB7CisgICAgICAgIG1fYmFzZSA9IG1fZXh0ZW50
OworICAgICAgICBtX2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKG1fZXh0ZW50
LmlzTnVsbCgpKSB7CisgICAgICAgIG1fZXh0ZW50ID0gbV9iYXNlOworICAgICAgICBtX2Jhc2VJ
c0ZpcnN0ID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9iYXNlSXNGaXJzdCA9IGNvbXBh
cmVQb3NpdGlvbnMobV9iYXNlLCBtX2V4dGVudCkgPD0gMDsKK30KKwordm9pZCBWaXNpYmxlU2Vs
ZWN0aW9uOjpzZXRTdGFydEFuZEVuZEZyb21CYXNlQW5kRXh0ZW50UmVzcGVjdGluZ0dyYW51bGFy
aXR5KCkKK3sKKyAgICBpZiAobV9iYXNlSXNGaXJzdCkgeworICAgICAgICBtX3N0YXJ0ID0gbV9i
YXNlOworICAgICAgICBtX2VuZCA9IG1fZXh0ZW50OworICAgIH0gZWxzZSB7CisgICAgICAgIG1f
c3RhcnQgPSBtX2V4dGVudDsKKyAgICAgICAgbV9lbmQgPSBtX2Jhc2U7CisgICAgfQorCisgICAg
c3dpdGNoIChtX2dyYW51bGFyaXR5KSB7CisgICAgICAgIGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJp
dHk6CisgICAgICAgICAgICAvLyBEb24ndCBkbyBhbnkgZXhwYW5zaW9uLgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV29yZEdyYW51bGFyaXR5OiB7CisgICAgICAgICAgICAvLyBH
ZW5lcmFsIGNhc2U6IFNlbGVjdCB0aGUgd29yZCB0aGUgY2FyZXQgaXMgcG9zaXRpb25lZCBpbnNp
ZGUgb2YsIG9yIGF0IHRoZSBzdGFydCBvZiAoUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KS4KKyAgICAg
ICAgICAgIC8vIEVkZ2UgY2FzZTogSWYgdGhlIGNhcmV0IGlzIGFmdGVyIHRoZSBsYXN0IHdvcmQg
aW4gYSBzb2Z0LXdyYXBwZWQgbGluZSBvciB0aGUgbGFzdCB3b3JkIGluCisgICAgICAgICAgICAv
LyB0aGUgZG9jdW1lbnQsIHNlbGVjdCB0aGF0IGxhc3Qgd29yZCAoTGVmdFdvcmRJZk9uQm91bmRh
cnkpLgorICAgICAgICAgICAgLy8gRWRnZSBjYXNlOiBJZiB0aGUgY2FyZXQgaXMgYWZ0ZXIgdGhl
IGxhc3Qgd29yZCBpbiBhIHBhcmFncmFwaCwgc2VsZWN0IGZyb20gdGhlIHRoZSBlbmQgb2YgdGhl
CisgICAgICAgICAgICAvLyBsYXN0IHdvcmQgdG8gdGhlIGxpbmUgYnJlYWsgKGFsc28gUmlnaHRX
b3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IFZp
c2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KTsKKyAgICAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBvcmlnaW5hbEVuZChtX2VuZCwgbV9hZmZpbml0eSk7CisgICAgICAgICAgICBFV29y
ZFNpZGUgc2lkZSA9IFJpZ2h0V29yZElmT25Cb3VuZGFyeTsKKyAgICAgICAgICAgIGlmIChpc0Vu
ZE9mRG9jdW1lbnQoc3RhcnQpIHx8IChpc0VuZE9mTGluZShzdGFydCkgJiYgIWlzU3RhcnRPZkxp
bmUoc3RhcnQpICYmICFpc0VuZE9mUGFyYWdyYXBoKHN0YXJ0KSkpCisgICAgICAgICAgICAgICAg
c2lkZSA9IExlZnRXb3JkSWZPbkJvdW5kYXJ5OworICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0
T2ZXb3JkKHN0YXJ0LCBzaWRlKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgc2lkZSA9
IFJpZ2h0V29yZElmT25Cb3VuZGFyeTsKKyAgICAgICAgICAgIGlmIChpc0VuZE9mRG9jdW1lbnQo
b3JpZ2luYWxFbmQpIHx8IChpc0VuZE9mTGluZShvcmlnaW5hbEVuZCkgJiYgIWlzU3RhcnRPZkxp
bmUob3JpZ2luYWxFbmQpICYmICFpc0VuZE9mUGFyYWdyYXBoKG9yaWdpbmFsRW5kKSkpCisgICAg
ICAgICAgICAgICAgc2lkZSA9IExlZnRXb3JkSWZPbkJvdW5kYXJ5OworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRFbmQoZW5kT2ZXb3JkKG9yaWdpbmFs
RW5kLCBzaWRlKSk7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kKHdvcmRFbmQpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNFbmRPZlBhcmFncmFwaChvcmlnaW5hbEVu
ZCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTZWxlY3QgdGhlIHBhcmFncmFwaCBicmVhayAodGhl
IHNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgCisgICAg
ICAgICAgICAgICAgLy8gdGhlIG5leHQgb25lKSB0byBtYXRjaCBUZXh0RWRpdC4KKyAgICAgICAg
ICAgICAgICBlbmQgPSB3b3JkRW5kLm5leHQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoTm9kZSogdGFibGUgPSBpc0ZpcnN0UG9zaXRpb25BZnRlclRhYmxlKGVuZCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBhcmFncmFwaCBicmVhayBhZnRlciB0aGUg
bGFzdCBwYXJhZ3JhcGggaW4gdGhlIGxhc3QgY2VsbCBvZiBhIGJsb2NrIHRhYmxlIGVuZHMKKyAg
ICAgICAgICAgICAgICAgICAgLy8gYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggYWZ0ZXIg
dGhlIHRhYmxlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaXNCbG9jayh0YWJsZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQgPSBlbmQubmV4dCh0cnVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gd29yZEVuZDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGVuZC5p
c051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gd29yZEVuZDsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2VuZCA9IGVuZC5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OiB7CisgICAgICAgICAgICBtX3N0
YXJ0ID0gc3RhcnRPZlNlbnRlbmNlKFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5
KSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIG1fZW5kID0gZW5kT2ZTZW50ZW5jZShW
aXNpYmxlUG9zaXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMaW5lR3JhbnVsYXJpdHk6
IHsKKyAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9z
dGFydCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBWaXNpYmxl
UG9zaXRpb24gZW5kID0gZW5kT2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0
eSkpOworICAgICAgICAgICAgLy8gSWYgdGhlIGVuZCBvZiB0aGlzIGxpbmUgaXMgYXQgdGhlIGVu
ZCBvZiBhIHBhcmFncmFwaCwgaW5jbHVkZSB0aGUgc3BhY2UgCisgICAgICAgICAgICAvLyBhZnRl
ciB0aGUgZW5kIG9mIHRoZSBsaW5lIGluIHRoZSBzZWxlY3Rpb24uCisgICAgICAgICAgICBpZiAo
aXNFbmRPZlBhcmFncmFwaChlbmQpKSB7CisgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IG5leHQgPSBlbmQubmV4dCgpOworICAgICAgICAgICAgICAgIGlmIChuZXh0LmlzTm90TnVsbCgp
KQorICAgICAgICAgICAgICAgICAgICBlbmQgPSBuZXh0OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9lbmQgPSBlbmQuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgTGluZUJvdW5kYXJ5OgorICAgICAgICAgICAgbV9zdGFy
dCA9IHN0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkuZGVl
cEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIG1fZW5kID0gZW5kT2ZMaW5lKFZpc2libGVQb3Np
dGlvbihtX2VuZCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBQYXJhZ3JhcGhHcmFudWxhcml0eTogeworICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHBvcyhtX3N0YXJ0LCBtX2FmZmluaXR5KTsKKyAgICAgICAgICAgIGlm
IChpc1N0YXJ0T2ZMaW5lKHBvcykgJiYgaXNFbmRPZkRvY3VtZW50KHBvcykpCisgICAgICAgICAg
ICAgICAgcG9zID0gcG9zLnByZXZpb3VzKCk7CisgICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRP
ZlBhcmFncmFwaChwb3MpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlv
bihtX2VuZCwgbV9hZmZpbml0eSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJbmNs
dWRlIHRoZSAicGFyYWdyYXBoIGJyZWFrIiAodGhlIHNwYWNlIGZyb20gdGhlIGVuZCBvZiB0aGlz
IHBhcmFncmFwaCB0byB0aGUgc3RhcnQKKyAgICAgICAgICAgIC8vIG9mIHRoZSBuZXh0IG9uZSkg
aW4gdGhlIHNlbGVjdGlvbi4KKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmQodmlzaWJs
ZVBhcmFncmFwaEVuZC5uZXh0KCkpOworICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKE5v
ZGUqIHRhYmxlID0gaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShlbmQpKSB7CisgICAgICAgICAg
ICAgICAgLy8gVGhlIHBhcmFncmFwaCBicmVhayBhZnRlciB0aGUgbGFzdCBwYXJhZ3JhcGggaW4g
dGhlIGxhc3QgY2VsbCBvZiBhIGJsb2NrIHRhYmxlIGVuZHMKKyAgICAgICAgICAgICAgICAvLyBh
dCB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCBhZnRlciB0aGUgdGFibGUsIG5vdCBhdCB0aGUg
cG9zaXRpb24ganVzdCBhZnRlciB0aGUgdGFibGUuCisgICAgICAgICAgICAgICAgaWYgKGlzQmxv
Y2sodGFibGUpKQorICAgICAgICAgICAgICAgICAgICBlbmQgPSBlbmQubmV4dCh0cnVlKTsKKyAg
ICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBwYXJhcmdyYXBoIGJyZWFrIGFmdGVyIHRoZSBs
YXN0IHBhcmFncmFwaCBpbiB0aGUgbGFzdCBjZWxsIG9mIGFuIGlubGluZSB0YWJsZS4KKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVuZCA9IHZpc2libGVQYXJhZ3Jh
cGhFbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZW5k
LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGVuZCA9IHZpc2libGVQYXJhZ3JhcGhFbmQ7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX2VuZCA9IGVuZC5kZWVwRXF1aXZhbGVudCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEb2N1bWVudEJv
dW5kYXJ5OgorICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9z
aXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAg
ICBtX2VuZCA9IGVuZE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5
KSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBh
cmFncmFwaEJvdW5kYXJ5OgorICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgo
VmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgICAgICAgICAgbV9lbmQgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9lbmQs
IG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU2VudGVuY2VCb3VuZGFyeToKKyAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9m
U2VudGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZh
bGVudCgpOworICAgICAgICAgICAgbV9lbmQgPSBlbmRPZlNlbnRlbmNlKFZpc2libGVQb3NpdGlv
bihtX2VuZCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICB9CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCBoYXZlIGEgZGFuZ2xp
bmcgc3RhcnQgb3IgZW5kLgorICAgIGlmIChtX3N0YXJ0LmlzTnVsbCgpKQorICAgICAgICBtX3N0
YXJ0ID0gbV9lbmQ7CisgICAgaWYgKG1fZW5kLmlzTnVsbCgpKQorICAgICAgICBtX2VuZCA9IG1f
c3RhcnQ7Cit9CisKK3ZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6dXBkYXRlU2VsZWN0aW9uVHlwZSgp
Cit7CisgICAgaWYgKG1fc3RhcnQuaXNOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fZW5kLmlz
TnVsbCgpKTsKKyAgICAgICAgbV9zZWxlY3Rpb25UeXBlID0gTm9TZWxlY3Rpb247CisgICAgfSBl
bHNlIGlmIChtX3N0YXJ0ID09IG1fZW5kIHx8IG1fc3RhcnQudXBzdHJlYW0oKSA9PSBtX2VuZC51
cHN0cmVhbSgpKSB7CisgICAgICAgIG1fc2VsZWN0aW9uVHlwZSA9IENhcmV0U2VsZWN0aW9uOwor
ICAgIH0gZWxzZQorICAgICAgICBtX3NlbGVjdGlvblR5cGUgPSBSYW5nZVNlbGVjdGlvbjsKKwor
ICAgIC8vIEFmZmluaXR5IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIGEgY2FyZXQKKyAgICBpZiAobV9z
ZWxlY3Rpb25UeXBlICE9IENhcmV0U2VsZWN0aW9uKQorICAgICAgICBtX2FmZmluaXR5ID0gRE9X
TlNUUkVBTTsKK30KKwordm9pZCBWaXNpYmxlU2VsZWN0aW9uOjp2YWxpZGF0ZSgpCit7CisgICAg
c2V0QmFzZUFuZEV4dGVudFRvRGVlcEVxdWl2YWxlbnRzKCk7CisgICAgc2V0U3RhcnRBbmRFbmRG
cm9tQmFzZUFuZEV4dGVudFJlc3BlY3RpbmdHcmFudWxhcml0eSgpOworICAgIGFkanVzdFNlbGVj
dGlvblRvQXZvaWRDcm9zc2luZ0VkaXRpbmdCb3VuZGFyaWVzKCk7CisgICAgdXBkYXRlU2VsZWN0
aW9uVHlwZSgpOworCisgICAgaWYgKHNlbGVjdGlvblR5cGUoKSA9PSBSYW5nZVNlbGVjdGlvbikg
eworICAgICAgICAvLyAiQ29uc3RyYWluIiB0aGUgc2VsZWN0aW9uIHRvIGJlIHRoZSBzbWFsbGVz
dCBlcXVpdmFsZW50IHJhbmdlIG9mIG5vZGVzLgorICAgICAgICAvLyBUaGlzIGlzIGEgc29tZXdo
YXQgYXJiaXRyYXJ5IGNob2ljZSwgYnV0IGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBpdCBpcworICAg
ICAgICAvLyB1c2VmdWwgdG8gbWFrZSB0byBtYWtlIHRoZSBzZWxlY3Rpb24gImNhbm9uaWNhbCIg
KGlmIG9ubHkgZm9yCisgICAgICAgIC8vIHB1cnBvc2VzIG9mIGNvbXBhcmluZyBzZWxlY3Rpb25z
KS4gVGhpcyBpcyBhbiBpZGVhbCBwb2ludCBvZiB0aGUgY29kZQorICAgICAgICAvLyB0byBkbyB0
aGlzIG9wZXJhdGlvbiwgc2luY2UgYWxsIHNlbGVjdGlvbiBjaGFuZ2VzIHRoYXQgcmVzdWx0IGlu
IGEgUkFOR0UgCisgICAgICAgIC8vIGNvbWUgdGhyb3VnaCBoZXJlIGJlZm9yZSBhbnlvbmUgdXNl
cyBpdC4KKyAgICAgICAgLy8gRklYTUU6IENhbm9uaWNhbGl6aW5nIGlzIGdvb2QsIGJ1dCBoYXZl
bid0IHdlIGFscmVhZHkgZG9uZSBpdCAod2hlbiB3ZQorICAgICAgICAvLyBzZXQgdGhlc2UgdHdv
IHBvc2l0aW9ucyB0byBWaXNpYmxlUG9zaXRpb24gZGVlcEVxdWl2YWxlbnQoKXMgYWJvdmUpPwor
ICAgICAgICBtX3N0YXJ0ID0gbV9zdGFydC5kb3duc3RyZWFtKCk7CisgICAgICAgIG1fZW5kID0g
bV9lbmQudXBzdHJlYW0oKTsKKyAgICB9Cit9CisKKy8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGJy
ZWFrcyB0aGUgaW52YXJpYW50IG9mIHRoaXMgY2xhc3MuCisvLyBCdXQgYmVjYXVzZSB3ZSB1c2Ug
VmlzaWJsZVNlbGVjdGlvbiB0byBzdG9yZSB2YWx1ZXMgaW4gZWRpdGluZyBjb21tYW5kcyBmb3Ig
dXNlIHdoZW4KKy8vIHVuZG9pbmcgdGhlIGNvbW1hbmQsIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBj
cmVhdGUgYSBzZWxlY3Rpb24gdGhhdCB3aGlsZSBjdXJyZW50bHkKKy8vIGludmFsaWQsIHdpbGwg
YmUgdmFsaWQgb25jZSB0aGUgY2hhbmdlcyBhcmUgdW5kb25lLiBUaGlzIGlzIGEgZGVzaWduIHBy
b2JsZW0uCisvLyBUbyBmaXggaXQgd2UgZWl0aGVyIG5lZWQgdG8gY2hhbmdlIHRoZSBpbnZhcmlh
bnRzIG9mIFZpc2libGVTZWxlY3Rpb24gb3IgY3JlYXRlIGEgbmV3CisvLyBjbGFzcyBmb3IgZWRp
dGluZyB0byB1c2UgdGhhdCBjYW4gbWFuaXB1bGF0ZSBzZWxlY3Rpb25zIHRoYXQgYXJlIG5vdCBj
dXJyZW50bHkgdmFsaWQuCit2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldFdpdGhvdXRWYWxpZGF0
aW9uKGNvbnN0IFBvc2l0aW9uJiBiYXNlLCBjb25zdCBQb3NpdGlvbiYgZXh0ZW50KQoreworICAg
IEFTU0VSVCghYmFzZS5pc051bGwoKSk7CisgICAgQVNTRVJUKCFleHRlbnQuaXNOdWxsKCkpOwor
ICAgIEFTU0VSVChiYXNlICE9IGV4dGVudCk7CisgICAgQVNTRVJUKG1fYWZmaW5pdHkgPT0gRE9X
TlNUUkVBTSk7CisgICAgQVNTRVJUKG1fZ3JhbnVsYXJpdHkgPT0gQ2hhcmFjdGVyR3JhbnVsYXJp
dHkpOworICAgIG1fYmFzZSA9IGJhc2U7CisgICAgbV9leHRlbnQgPSBleHRlbnQ7CisgICAgbV9i
YXNlSXNGaXJzdCA9IGNvbXBhcmVQb3NpdGlvbnMoYmFzZSwgZXh0ZW50KSA8PSAwOworICAgIGlm
IChtX2Jhc2VJc0ZpcnN0KSB7CisgICAgICAgIG1fc3RhcnQgPSBiYXNlOworICAgICAgICBtX2Vu
ZCA9IGV4dGVudDsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3N0YXJ0ID0gZXh0ZW50OworICAg
ICAgICBtX2VuZCA9IGJhc2U7CisgICAgfQorICAgIG1fc2VsZWN0aW9uVHlwZSA9IFJhbmdlU2Vs
ZWN0aW9uOworfQorCit2b2lkIFZpc2libGVTZWxlY3Rpb246OmFkanVzdFNlbGVjdGlvblRvQXZv
aWRDcm9zc2luZ0VkaXRpbmdCb3VuZGFyaWVzKCkKK3sKKyAgICBpZiAobV9iYXNlLmlzTnVsbCgp
IHx8IG1fc3RhcnQuaXNOdWxsKCkgfHwgbV9lbmQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIE5vZGUqIGJhc2VSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChtX2Jhc2UpOworICAg
IE5vZGUqIHN0YXJ0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QobV9zdGFydCk7CisgICAgTm9k
ZSogZW5kUm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QobV9lbmQpOworICAgIAorICAgIE5vZGUq
IGJhc2VFZGl0YWJsZUFuY2VzdG9yID0gbG93ZXN0RWRpdGFibGVBbmNlc3RvcihtX2Jhc2Uubm9k
ZSgpKTsKKyAgICAKKyAgICAvLyBUaGUgYmFzZSwgc3RhcnQgYW5kIGVuZCBhcmUgYWxsIGluIHRo
ZSBzYW1lIHJlZ2lvbi4gIE5vIGFkanVzdG1lbnQgbmVjZXNzYXJ5LgorICAgIGlmIChiYXNlUm9v
dCA9PSBzdGFydFJvb3QgJiYgYmFzZVJvb3QgPT0gZW5kUm9vdCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIC8vIFRoZSBzZWxlY3Rpb24gaXMgYmFzZWQgaW4gZWRpdGFibGUgY29udGVudC4K
KyAgICBpZiAoYmFzZVJvb3QpIHsKKyAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IGlzIG91dHNpZGUg
dGhlIGJhc2UncyBlZGl0YWJsZSByb290LCBjYXAgaXQgYXQgdGhlIHN0YXJ0IG9mIHRoYXQgcm9v
dC4KKyAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IGlzIGluIG5vbi1lZGl0YWJsZSBjb250ZW50IHRo
YXQgaXMgaW5zaWRlIHRoZSBiYXNlJ3MgZWRpdGFibGUgcm9vdCwgcHV0IGl0CisgICAgICAgIC8v
IGF0IHRoZSBmaXJzdCBlZGl0YWJsZSBwb3NpdGlvbiBhZnRlciBzdGFydCBpbnNpZGUgdGhlIGJh
c2UncyBlZGl0YWJsZSByb290LgorICAgICAgICBpZiAoc3RhcnRSb290ICE9IGJhc2VSb290KSB7
CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3QgPSBmaXJzdEVkaXRhYmxlUG9zaXRp
b25BZnRlclBvc2l0aW9uSW5Sb290KG1fc3RhcnQsIGJhc2VSb290KTsKKyAgICAgICAgICAgIG1f
c3RhcnQgPSBmaXJzdC5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgaWYgKG1fc3RhcnQu
aXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICBtX3N0YXJ0ID0gbV9lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgLy8gSWYgdGhlIGVuZCBpcyBvdXRzaWRlIHRoZSBiYXNlJ3MgZWRpdGFibGUgcm9vdCwg
Y2FwIGl0IGF0IHRoZSBlbmQgb2YgdGhhdCByb290LgorICAgICAgICAvLyBJZiB0aGUgZW5kIGlz
IGluIG5vbi1lZGl0YWJsZSBjb250ZW50IHRoYXQgaXMgaW5zaWRlIHRoZSBiYXNlJ3Mgcm9vdCwg
cHV0IGl0CisgICAgICAgIC8vIGF0IHRoZSBsYXN0IGVkaXRhYmxlIHBvc2l0aW9uIGJlZm9yZSB0
aGUgZW5kIGluc2lkZSB0aGUgYmFzZSdzIHJvb3QuCisgICAgICAgIGlmIChlbmRSb290ICE9IGJh
c2VSb290KSB7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbGFzdCA9IGxhc3RFZGl0YWJs
ZVBvc2l0aW9uQmVmb3JlUG9zaXRpb25JblJvb3QobV9lbmQsIGJhc2VSb290KTsKKyAgICAgICAg
ICAgIG1fZW5kID0gbGFzdC5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgaWYgKG1fZW5k
LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgbV9lbmQgPSBtX3N0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgLy8gVGhlIHNlbGVjdGlvbiBpcyBiYXNlZCBpbiBub24tZWRpdGFibGUgY29udGVudC4KKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTogTm9uLWVkaXRhYmxlIHBpZWNlcyBpbnNpZGUg
ZWRpdGFibGUgY29udGVudCBzaG91bGQgYmUgYXRvbWljLCBpbiB0aGUgc2FtZSB3YXkgdGhhdCBl
ZGl0YWJsZQorICAgICAgICAvLyBwaWVjZXMgaW4gbm9uLWVkaXRhYmxlIGNvbnRlbnQgYXJlIGF0
b21pYy4KKyAgICAKKyAgICAgICAgLy8gVGhlIHNlbGVjdGlvbiBlbmRzIGluIGVkaXRhYmxlIGNv
bnRlbnQgb3Igbm9uLWVkaXRhYmxlIGNvbnRlbnQgaW5zaWRlIGEgZGlmZmVyZW50IGVkaXRhYmxl
IGFuY2VzdG9yLCAKKyAgICAgICAgLy8gbW92ZSBiYWNrd2FyZCB1bnRpbCBub24tZWRpdGFibGUg
Y29udGVudCBpbnNpZGUgdGhlIHNhbWUgbG93ZXN0IGVkaXRhYmxlIGFuY2VzdG9yIGlzIHJlYWNo
ZWQuCisgICAgICAgIE5vZGUqIGVuZEVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RFZGl0YWJsZUFu
Y2VzdG9yKG1fZW5kLm5vZGUoKSk7CisgICAgICAgIGlmIChlbmRSb290IHx8IGVuZEVkaXRhYmxl
QW5jZXN0b3IgIT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IpIHsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgUG9zaXRpb24gcCA9IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2Vu
ZCk7CisgICAgICAgICAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9IGVuZFJvb3QgPyBlbmRSb290
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CisgICAgICAgICAgICBpZiAocC5pc051bGwoKSAm
JiBlbmRSb290ICYmIChzaGFkb3dBbmNlc3RvciAhPSBlbmRSb290KSkKKyAgICAgICAgICAgICAg
ICBwID0gUG9zaXRpb24oc2hhZG93QW5jZXN0b3IsIG1heERlZXBPZmZzZXQoc2hhZG93QW5jZXN0
b3IpKTsKKyAgICAgICAgICAgIHdoaWxlIChwLmlzTm90TnVsbCgpICYmICEobG93ZXN0RWRpdGFi
bGVBbmNlc3RvcihwLm5vZGUoKSkgPT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IgJiYgIWlzRWRpdGFi
bGVQb3NpdGlvbihwKSkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiByb290ID0gZWRpdGFibGVS
b290Rm9yUG9zaXRpb24ocCk7CisgICAgICAgICAgICAgICAgc2hhZG93QW5jZXN0b3IgPSByb290
ID8gcm9vdC0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOworICAgICAgICAgICAgICAgIHAgPSBp
c0F0b21pY05vZGUocC5ub2RlKCkpID8gcG9zaXRpb25CZWZvcmVOb2RlKHAubm9kZSgpKSA6IHBy
ZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKKyAgICAgICAgICAgICAgICBpZiAo
cC5pc051bGwoKSAmJiAoc2hhZG93QW5jZXN0b3IgIT0gcm9vdCkpCisgICAgICAgICAgICAgICAg
ICAgIHAgPSBQb3NpdGlvbihzaGFkb3dBbmNlc3RvciwgbWF4RGVlcE9mZnNldChzaGFkb3dBbmNl
c3RvcikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzKHApOworCisgICAgICAgICAgICBpZiAocHJldmlvdXMuaXNOdWxsKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBUaGUgc2VsZWN0aW9uIGNyb3NzZXMgYW4gRWRpdGluZyBib3VuZGFyeS4gIFRo
aXMgaXMgYQorICAgICAgICAgICAgICAgIC8vIHByb2dyYW1tZXIgZXJyb3IgaW4gdGhlIGVkaXRp
bmcgY29kZS4gIEhhcHB5IGRlYnVnZ2luZyEKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICBtX2Jhc2UgPSBQb3NpdGlvbigpOworICAgICAgICAg
ICAgICAgIG1fZXh0ZW50ID0gUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZSgp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
ZW5kID0gcHJldmlvdXMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFRoZSBzZWxlY3Rpb24gc3RhcnRzIGluIGVkaXRhYmxlIGNvbnRlbnQgb3Igbm9uLWVkaXRhYmxl
IGNvbnRlbnQgaW5zaWRlIGEgZGlmZmVyZW50IGVkaXRhYmxlIGFuY2VzdG9yLCAKKyAgICAgICAg
Ly8gbW92ZSBmb3J3YXJkIHVudGlsIG5vbi1lZGl0YWJsZSBjb250ZW50IGluc2lkZSB0aGUgc2Ft
ZSBsb3dlc3QgZWRpdGFibGUgYW5jZXN0b3IgaXMgcmVhY2hlZC4KKyAgICAgICAgTm9kZSogc3Rh
cnRFZGl0YWJsZUFuY2VzdG9yID0gbG93ZXN0RWRpdGFibGVBbmNlc3RvcihtX3N0YXJ0Lm5vZGUo
KSk7ICAgICAgCisgICAgICAgIGlmIChzdGFydFJvb3QgfHwgc3RhcnRFZGl0YWJsZUFuY2VzdG9y
ICE9IGJhc2VFZGl0YWJsZUFuY2VzdG9yKSB7CisgICAgICAgICAgICBQb3NpdGlvbiBwID0gbmV4
dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9zdGFydCk7CisgICAgICAgICAgICBOb2RlKiBz
aGFkb3dBbmNlc3RvciA9IHN0YXJ0Um9vdCA/IHN0YXJ0Um9vdC0+c2hhZG93QW5jZXN0b3JOb2Rl
KCkgOiAwOworICAgICAgICAgICAgaWYgKHAuaXNOdWxsKCkgJiYgc3RhcnRSb290ICYmIChzaGFk
b3dBbmNlc3RvciAhPSBzdGFydFJvb3QpKQorICAgICAgICAgICAgICAgIHAgPSBQb3NpdGlvbihz
aGFkb3dBbmNlc3RvciwgMCk7CisgICAgICAgICAgICB3aGlsZSAocC5pc05vdE51bGwoKSAmJiAh
KGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IocC5ub2RlKCkpID09IGJhc2VFZGl0YWJsZUFuY2VzdG9y
ICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogcm9v
dCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHApOworICAgICAgICAgICAgICAgIHNoYWRvd0Fu
Y2VzdG9yID0gcm9vdCA/IHJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKKyAgICAgICAg
ICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAubm9kZSgpKSA/IHBvc2l0aW9uQWZ0ZXJOb2RlKHAu
bm9kZSgpKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOworICAgICAgICAgICAg
ICAgIGlmIChwLmlzTnVsbCgpICYmIChzaGFkb3dBbmNlc3RvciAhPSByb290KSkKKyAgICAgICAg
ICAgICAgICAgICAgcCA9IFBvc2l0aW9uKHNoYWRvd0FuY2VzdG9yLCAwKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXh0KHApOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobmV4dC5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBz
ZWxlY3Rpb24gY3Jvc3NlcyBhbiBFZGl0aW5nIGJvdW5kYXJ5LiAgVGhpcyBpcyBhCisgICAgICAg
ICAgICAgICAgLy8gcHJvZ3JhbW1lciBlcnJvciBpbiB0aGUgZWRpdGluZyBjb2RlLiAgSGFwcHkg
ZGVidWdnaW5nIQorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIG1fYmFzZSA9IFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgbV9leHRlbnQg
PSBQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zdGFydCA9IG5leHQuZGVl
cEVxdWl2YWxlbnQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBDb3JyZWN0IHRo
ZSBleHRlbnQgaWYgbmVjZXNzYXJ5LgorICAgIGlmIChiYXNlRWRpdGFibGVBbmNlc3RvciAhPSBs
b3dlc3RFZGl0YWJsZUFuY2VzdG9yKG1fZXh0ZW50Lm5vZGUoKSkpCisgICAgICAgIG1fZXh0ZW50
ID0gbV9iYXNlSXNGaXJzdCA/IG1fZW5kIDogbV9zdGFydDsKK30KKworYm9vbCBWaXNpYmxlU2Vs
ZWN0aW9uOjppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzRWRpdGFi
bGVQb3NpdGlvbihzdGFydCgpKTsKK30KKworYm9vbCBWaXNpYmxlU2VsZWN0aW9uOjppc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzUmljaGx5RWRpdGFibGVQ
b3NpdGlvbihzdGFydCgpKTsKK30KKworRWxlbWVudCogVmlzaWJsZVNlbGVjdGlvbjo6cm9vdEVk
aXRhYmxlRWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVkaXRhYmxlUm9vdEZvclBvc2l0
aW9uKHN0YXJ0KCkpOworfQorCitOb2RlKiBWaXNpYmxlU2VsZWN0aW9uOjpzaGFkb3dUcmVlUm9v
dE5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBzdGFydCgpLm5vZGUoKSA/IHN0YXJ0KCkubm9k
ZSgpLT5zaGFkb3dUcmVlUm9vdE5vZGUoKSA6IDA7Cit9CisKK3ZvaWQgVmlzaWJsZVNlbGVjdGlv
bjo6ZGVidWdQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3N0YXJ0Lm5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZnByaW50ZihzdGRlcnIsICJWaXNpYmxlU2VsZWN0aW9uID09
PT09PT09PT09PT09PT09XG4iKTsKKworICAgIGlmIChtX3N0YXJ0ID09IG1fZW5kKSB7CisgICAg
ICAgIFBvc2l0aW9uIHBvcyA9IG1fc3RhcnQ7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicG9z
OiAgICAgICAgJXMgJXA6JWRcbiIsIHBvcy5ub2RlKCktPm5vZGVOYW1lKCkudXRmOCgpLmRhdGEo
KSwgcG9zLm5vZGUoKSwgcG9zLm9mZnNldCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBQb3Np
dGlvbiBwb3MgPSBtX3N0YXJ0OworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInN0YXJ0OiAgICAg
ICVzICVwOiVkXG4iLCBwb3Mubm9kZSgpLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCksIHBvcy5u
b2RlKCksIHBvcy5vZmZzZXQoKSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgICAgICBwb3MgPSBtX2VuZDsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJlbmQ6ICAgICAgICAlcyAlcDolZFxuIiwgcG9zLm5vZGUo
KS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpLCBwb3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCkpOwor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tXG4iKTsKKyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09XG4iKTsKK30KKworI2lmbmRlZiBOREVCVUcKKwordm9pZCBWaXNpYmxl
U2VsZWN0aW9uOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0
aCkgY29uc3QKK3sKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZyBzOworICAgIAorICAg
IGlmIChpc05vbmUoKSkgeworICAgICAgICByZXN1bHQgPSAiPG5vbmU+IjsKKyAgICB9IGVsc2Ug
eworICAgICAgICBjb25zdCBpbnQgRm9ybWF0QnVmZmVyU2l6ZSA9IDEwMjQ7CisgICAgICAgIGNo
YXIgc1tGb3JtYXRCdWZmZXJTaXplXTsKKyAgICAgICAgcmVzdWx0ICs9ICJmcm9tICI7CisgICAg
ICAgIHN0YXJ0KCkuZm9ybWF0Rm9yRGVidWdnZXIocywgRm9ybWF0QnVmZmVyU2l6ZSk7CisgICAg
ICAgIHJlc3VsdCArPSBzOworICAgICAgICByZXN1bHQgKz0gIiB0byAiOworICAgICAgICBlbmQo
KS5mb3JtYXRGb3JEZWJ1Z2dlcihzLCBGb3JtYXRCdWZmZXJTaXplKTsKKyAgICAgICAgcmVzdWx0
ICs9IHM7CisgICAgfQorCisgICAgc3RybmNweShidWZmZXIsIHJlc3VsdC51dGY4KCkuZGF0YSgp
LCBsZW5ndGggLSAxKTsKK30KKwordm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzaG93VHJlZUZvclRo
aXMoKSBjb25zdAoreworICAgIGlmIChzdGFydCgpLm5vZGUoKSkgeworICAgICAgICBzdGFydCgp
Lm5vZGUoKS0+c2hvd1RyZWVBbmRNYXJrKHN0YXJ0KCkubm9kZSgpLCAiUyIsIGVuZCgpLm5vZGUo
KSwgIkUiKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJzdGFydCBvZmZzZXQ6ICVkLCBlbmQg
b2Zmc2V0OiAlZFxuIiwgc3RhcnQoKS5vZmZzZXQoKSwgZW5kKCkub2Zmc2V0KCkpOworICAgIH0K
K30KKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2lmbmRlZiBOREVCVUcK
Kwordm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBzZWwpCit7
CisgICAgc2VsLnNob3dUcmVlRm9yVGhpcygpOworfQorCit2b2lkIHNob3dUcmVlKGNvbnN0IFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24qIHNlbCkKK3sKKyAgICBpZiAoc2VsKQorICAgICAgICBz
ZWwtPnNob3dUcmVlRm9yVGhpcygpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmggYi9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVj
dGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjE0MmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCkBAIC0wLDAg
KzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZpc2libGVTZWxlY3Rpb25f
aAorI2RlZmluZSBWaXNpYmxlU2VsZWN0aW9uX2gKKworI2luY2x1ZGUgIlRleHRHcmFudWxhcml0
eS5oIgorI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFBvc2l0aW9uOworCitjb25zdCBFQWZmaW5pdHkgU0VMX0RFRkFVTFRfQUZGSU5J
VFkgPSBET1dOU1RSRUFNOworCitjbGFzcyBWaXNpYmxlU2VsZWN0aW9uIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIFNlbGVjdGlvblR5cGUgeyBOb1NlbGVjdGlvbiwgQ2FyZXRTZWxlY3Rpb24sIFJhbmdl
U2VsZWN0aW9uIH07CisKKyAgICBWaXNpYmxlU2VsZWN0aW9uKCk7CisKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uKGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9u
KGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHkpOworCisgICAgVmlz
aWJsZVNlbGVjdGlvbihjb25zdCBSYW5nZSosIEVBZmZpbml0eSA9IFNFTF9ERUZBVUxUX0FGRklO
SVRZKTsKKyAgICAKKyAgICBWaXNpYmxlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OworICAgIFZpc2libGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJik7CisKKyAgICBzdGF0aWMgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25G
cm9tQ29udGVudHNPZk5vZGUoTm9kZSopOworCisgICAgU2VsZWN0aW9uVHlwZSBzZWxlY3Rpb25U
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25UeXBlOyB9CisKKyAgICB2b2lkIHNldEFm
ZmluaXR5KEVBZmZpbml0eSBhZmZpbml0eSkgeyBtX2FmZmluaXR5ID0gYWZmaW5pdHk7IH0KKyAg
ICBFQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2FmZmluaXR5OyB9CisKKyAg
ICB2b2lkIHNldEJhc2UoY29uc3QgUG9zaXRpb24mKTsKKyAgICB2b2lkIHNldEJhc2UoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJik7CisgICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24mKTsK
KyAgICB2b2lkIHNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKyAgICAKKyAgICBQ
b3NpdGlvbiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CisgICAgUG9zaXRpb24gZXh0
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnQ7IH0KKyAgICBQb3NpdGlvbiBzdGFydCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KKyAgICBQb3NpdGlvbiBlbmQoKSBjb25zdCB7IHJldHVy
biBtX2VuZDsgfQorICAgIAorICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQoKSBjb25z
dCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgaXNSYW5nZSgpID8gRE9XTlNUUkVB
TSA6IGFmZmluaXR5KCkpOyB9CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQoKSBjb25z
dCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24obV9lbmQsIGlzUmFuZ2UoKSA/IFVQU1RSRUFNIDog
YWZmaW5pdHkoKSk7IH0KKworICAgIGJvb2wgaXNOb25lKCkgY29uc3QgeyByZXR1cm4gc2VsZWN0
aW9uVHlwZSgpID09IE5vU2VsZWN0aW9uOyB9CisgICAgYm9vbCBpc0NhcmV0KCkgY29uc3QgeyBy
ZXR1cm4gc2VsZWN0aW9uVHlwZSgpID09IENhcmV0U2VsZWN0aW9uOyB9CisgICAgYm9vbCBpc1Jh
bmdlKCkgY29uc3QgeyByZXR1cm4gc2VsZWN0aW9uVHlwZSgpID09IFJhbmdlU2VsZWN0aW9uOyB9
CisgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUo
KSAhPSBOb1NlbGVjdGlvbjsgfQorCisgICAgYm9vbCBpc0Jhc2VGaXJzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFzZUlzRmlyc3Q7IH0KKworICAgIHZvaWQgYXBwZW5kVHJhaWxpbmdXaGl0ZXNwYWNl
KCk7CisKKyAgICBib29sIGV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5KTsKKyAgICBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkoKSBjb25zdCB7IHJl
dHVybiBtX2dyYW51bGFyaXR5OyB9CisKKyAgICAvLyBXZSBkb24ndCB5ZXQgc3VwcG9ydCBtdWx0
aS1yYW5nZSBzZWxlY3Rpb25zLCBzbyB3ZSBvbmx5IGV2ZXIgaGF2ZSBvbmUgcmFuZ2UgdG8gcmV0
dXJuLgorICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGZpcnN0UmFuZ2UoKSBjb25zdDsKKworICAgIC8v
IEZJWE1FOiBNb3N0IGNhbGxlcnMgcHJvYmFibHkgZG9uJ3Qgd2FudCB0aGlzIGZ1bmN0aW9uLCBi
dXQgYXJlIHVzaW5nIGl0CisgICAgLy8gZm9yIGhpc3RvcmljYWwgcmVhc29ucy4gIHRvTm9ybWFs
aXplZFJhbmdlIGNvbnRyYWN0cyB0aGUgcmFuZ2UgYXJvdW5kCisgICAgLy8gdGV4dCwgYW5kIG1v
dmVzIHRoZSBjYXJldCB1cHN0cmVhbSBiZWZvcmUgcmV0dXJuaW5nIHRoZSByYW5nZS4KKyAgICBQ
YXNzUmVmUHRyPFJhbmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0OworICAgIAorICAgIEVs
ZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdDsKKyAgICBib29sIGlzQ29udGVudEVk
aXRhYmxlKCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0
OworICAgIE5vZGUqIHNoYWRvd1RyZWVSb290Tm9kZSgpIGNvbnN0OworICAgIAorICAgIHZvaWQg
ZGVidWdQb3NpdGlvbigpIGNvbnN0OworCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZm9ybWF0
Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OworICAgIHZv
aWQgc2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7CisjZW5kaWYKKworICAgIHZvaWQgc2V0V2l0aG91
dFZhbGlkYXRpb24oY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOworCitwcml2YXRl
OgorICAgIHZvaWQgdmFsaWRhdGUoKTsKKworICAgIC8vIFN1cHBvcnQgbWV0aG9kcyBmb3IgdmFs
aWRhdGUoKQorICAgIHZvaWQgc2V0QmFzZUFuZEV4dGVudFRvRGVlcEVxdWl2YWxlbnRzKCk7Cisg
ICAgdm9pZCBzZXRTdGFydEFuZEVuZEZyb21CYXNlQW5kRXh0ZW50UmVzcGVjdGluZ0dyYW51bGFy
aXR5KCk7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25Ub0F2b2lkQ3Jvc3NpbmdFZGl0aW5nQm91
bmRhcmllcygpOworICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uVHlwZSgpOworCisgICAgLy8gRklY
TUU6IFRoZXNlIHNob3VsZCBhbGwgYmUgVmlzaWJsZVBvc2l0aW9ucworICAgIFBvc2l0aW9uIG1f
YmFzZTsgICAvLyBXaGVyZSB0aGUgZmlyc3QgY2xpY2sgaGFwcGVuZWQKKyAgICBQb3NpdGlvbiBt
X2V4dGVudDsgLy8gV2hlcmUgdGhlIGVuZCBjbGljayBoYXBwZW5lZAorICAgIFBvc2l0aW9uIG1f
c3RhcnQ7ICAvLyBMZWZ0bW9zdCBwb3NpdGlvbiB3aGVuIGV4cGFuZGVkIHRvIHJlc3BlY3QgZ3Jh
bnVsYXJpdHkKKyAgICBQb3NpdGlvbiBtX2VuZDsgICAgLy8gUmlnaHRtb3N0IHBvc2l0aW9uIHdo
ZW4gZXhwYW5kZWQgdG8gcmVzcGVjdCBncmFudWxhcml0eQorCisgICAgRUFmZmluaXR5IG1fYWZm
aW5pdHk7ICAgICAgICAgICAvLyB0aGUgdXBzdHJlYW0vZG93bnN0cmVhbSBhZmZpbml0eSBvZiB0
aGUgY2FyZXQKKyAgICBUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsgIC8vIGdyYW51bGFy
aXR5IG9mIHN0YXJ0L2VuZCBzZWxlY3Rpb24KKworICAgIC8vIHRoZXNlIGFyZSBjYWNoZWQsIGNh
biBiZSByZWNhbGN1bGF0ZWQgYnkgdmFsaWRhdGUoKQorICAgIFNlbGVjdGlvblR5cGUgbV9zZWxl
Y3Rpb25UeXBlOyAgICAvLyBOb25lLCBDYXJldCwgUmFuZ2UKKyAgICBib29sIG1fYmFzZUlzRmly
c3Q7ICAgICAgICAgICAgICAgLy8gdHJ1ZSBpZiBiYXNlIGlzIGJlZm9yZSB0aGUgZXh0ZW50Cit9
OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGEsIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIGIpCit7CisgICAgcmV0dXJuIGEuc3RhcnQoKSA9PSBiLnN0
YXJ0KCkgJiYgYS5lbmQoKSA9PSBiLmVuZCgpICYmIGEuYWZmaW5pdHkoKSA9PSBiLmFmZmluaXR5
KCkgJiYgYS5ncmFudWxhcml0eSgpID09IGIuZ3JhbnVsYXJpdHkoKSAmJiBhLmlzQmFzZUZpcnN0
KCkgPT0gYi5pc0Jhc2VGaXJzdCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIGEsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGIpCit7CisgICAg
cmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjaWZuZGVm
IE5ERUJVRworLy8gT3V0c2lkZSB0aGUgV2ViQ29yZSBuYW1lc3BhY2UgZm9yIGVhc2Ugb2YgaW52
b2NhdGlvbiBmcm9tIGdkYi4KK3ZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNl
bGVjdGlvbiYpOwordm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9u
Kik7CisjZW5kaWYKKworI2VuZGlmIC8vIFZpc2libGVTZWxlY3Rpb25faApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5jcHAKaW5kZXggZTBjMDNhNC4uNGUzOWU5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0
aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
CkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiUG9zaXRpb25JdGVyYXRvci5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiU2VsZWN0
aW9uLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlRleHQuaCIK
ICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIK
QEAgLTkxNSw5ICs5MTUsOSBAQCBib29sIGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiAvLyBNb2RpZmllcyBzZWxlY3Rpb25z
IHRoYXQgaGF2ZSBhbiBlbmQgcG9pbnQgYXQgdGhlIGVkZ2Ugb2YgYSB0YWJsZQogLy8gdGhhdCBj
b250YWlucyB0aGUgb3RoZXIgZW5kcG9pbnQgc28gdGhhdCB0aGV5IGRvbid0IGNvbmZ1c2UKIC8v
IGNvZGUgdGhhdCBpdGVyYXRlcyBvdmVyIHNlbGVjdGVkIHBhcmFncmFwaHMuCi1TZWxlY3Rpb24g
c2VsZWN0aW9uRm9yUGFyYWdyYXBoSXRlcmF0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb3JpZ2luYWwp
CitWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0ZXJhdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBvcmlnaW5hbCkKIHsKLSAgICBTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KG9yaWdpbmFsKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihvcmlnaW5hbCk7
CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24obmV3U2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24obmV3U2VsZWN0
aW9uLnZpc2libGVFbmQoKSk7CiAgICAgCkBAIC05MjcsNyArOTI3LDcgQEAgU2VsZWN0aW9uIHNl
bGVjdGlvbkZvclBhcmFncmFwaEl0ZXJhdGlvbihjb25zdCBTZWxlY3Rpb24mIG9yaWdpbmFsKQog
ICAgIC8vIChhIHRhYmxlIGlzIGl0c2VsZiBhIHBhcmFncmFwaCkuCiAgICAgaWYgKE5vZGUqIHRh
YmxlID0gaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShlbmRPZlNlbGVjdGlvbikpCiAgICAgICAg
IGlmIChzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRh
bnRPZih0YWJsZSkpCi0gICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBTZWxlY3Rpb24oc3RhcnRP
ZlNlbGVjdGlvbiwgZW5kT2ZTZWxlY3Rpb24ucHJldmlvdXModHJ1ZSkpOworICAgICAgICAgICAg
bmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VsZWN0aW9uLCBlbmRPZlNl
bGVjdGlvbi5wcmV2aW91cyh0cnVlKSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIHN0YXJ0IG9mIHRo
ZSBzZWxlY3Rpb24gdG8gbW9kaWZ5IGlzIGp1c3QgYmVmb3JlIGEgdGFibGUsCiAgICAgLy8gYW5k
IGlmIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbiBpcyBpbnNpZGUgdGhhdCB0YWJsZSwgdGhlbiB0
aGUgZmlyc3QgcGFyYWdyYXBoCkBAIC05MzUsNyArOTM1LDcgQEAgU2VsZWN0aW9uIHNlbGVjdGlv
bkZvclBhcmFncmFwaEl0ZXJhdGlvbihjb25zdCBTZWxlY3Rpb24mIG9yaWdpbmFsKQogICAgIC8v
IGNvbnRhaW5pbmcgdGhlIHRhYmxlIGl0c2VsZi4KICAgICBpZiAoTm9kZSogdGFibGUgPSBpc0xh
c3RQb3NpdGlvbkJlZm9yZVRhYmxlKHN0YXJ0T2ZTZWxlY3Rpb24pKQogICAgICAgICBpZiAoZW5k
T2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKHRhYmxl
KSkKLSAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IFNlbGVjdGlvbihzdGFydE9mU2VsZWN0aW9u
Lm5leHQodHJ1ZSksIGVuZE9mU2VsZWN0aW9uKTsKKyAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9
IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbGVjdGlvbi5uZXh0KHRydWUpLCBlbmRPZlNlbGVj
dGlvbik7CiAgICAgCiAgICAgcmV0dXJuIG5ld1NlbGVjdGlvbjsKIH0KQEAgLTk4MSwxMiArOTgx
LDEyIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3Qg
UmFuZ2UqIHJhbmdlLCBOb2RlKiBub2RlKQogICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKGRvY3Vt
ZW50LCBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0
KTsKIH0KIAotU2VsZWN0aW9uIGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgU2VsZWN0
aW9uJiBzZWxlY3Rpb24sIE5vZGUqIG5vZGUpCitWaXNpYmxlU2VsZWN0aW9uIGF2b2lkSW50ZXJz
ZWN0aW9uV2l0aE5vZGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBOb2RlKiBu
b2RlKQogewogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBTZWxl
Y3Rpb24oc2VsZWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24oc2VsZWN0
aW9uKTsKICAgICAgICAgCi0gICAgU2VsZWN0aW9uIHVwZGF0ZWRTZWxlY3Rpb24oc2VsZWN0aW9u
KTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHVwZGF0ZWRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKICAg
ICBOb2RlKiBiYXNlID0gc2VsZWN0aW9uLmJhc2UoKS5ub2RlKCk7CiAgICAgTm9kZSogZXh0ZW50
ID0gc2VsZWN0aW9uLmV4dGVudCgpLm5vZGUoKTsKICAgICBBU1NFUlQoYmFzZSk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCBiL1dlYkNvcmUvZWRpdGluZy9odG1s
ZWRpdGluZy5oCmluZGV4IGE4YmMwYjQuLjNhNzUyM2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRp
dGluZy9odG1sZWRpdGluZy5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCkBA
IC0zNyw3ICszNyw3IEBAIGNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBv
c2l0aW9uOwogY2xhc3MgUmFuZ2U7Ci1jbGFzcyBTZWxlY3Rpb247CitjbGFzcyBWaXNpYmxlU2Vs
ZWN0aW9uOwogY2xhc3MgU3RyaW5nOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCkBAIC03Miw3
ICs3Miw3IEBAIFBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlTm9kZShjb25zdCBOb2RlKik7CiBQb3Np
dGlvbiBwb3NpdGlvbkFmdGVyTm9kZShjb25zdCBOb2RlKik7CiAKIFBhc3NSZWZQdHI8UmFuZ2U+
IGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgUmFuZ2UqLCBOb2RlKik7Ci1TZWxlY3Rp
b24gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZShjb25zdCBTZWxlY3Rpb24mLCBOb2RlKik7CitW
aXNpYmxlU2VsZWN0aW9uIGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYsIE5vZGUqKTsKIAogYm9vbCBpc1NwZWNpYWxFbGVtZW50KGNvbnN0IE5vZGUqKTsK
IGJvb2wgdmFsaWRCbG9ja1RhZyhjb25zdCBTdHJpbmcmKTsKQEAgLTEyOSw3ICsxMjksNyBAQCBi
b29sIGlzVGFibGVDZWxsKGNvbnN0IE5vZGUqKTsKIAogYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFBv
c2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCi1TZWxlY3Rpb24gc2VsZWN0aW9uRm9y
UGFyYWdyYXBoSXRlcmF0aW9uKGNvbnN0IFNlbGVjdGlvbiYpOworVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVyYXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwog
CiBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uJik7CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAKaW5kZXggNjcwOTc0ZC4uYmZjYzJkYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5n
L21hcmt1cC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTUyLDcgKzUy
LDcgQEAKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJRdWFs
aWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb24uaCIK
KyNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBA
IC05MDEsNyArOTAxLDcgQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2Us
IFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmMKICAgICAvLyBGSVhNRTog
T25seSBpbmNsdWRlIG1hcmt1cCBmb3IgYSBmdWxseSBzZWxlY3RlZCByb290IChhbmQgYW5jZXN0
b3JzIG9mIGxhc3RDbG9zZWQgdXAgdG8gdGhhdCByb290KSBpZgogICAgIC8vIHRoZXJlIGFyZSBz
dHlsZXMvYXR0cmlidXRlcyBvbiB0aG9zZSBub2RlcyB0aGF0IG5lZWQgdG8gYmUgaW5jbHVkZWQg
dG8gcHJlc2VydmUgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGNvcGllZCBtYXJrdXAuCiAgICAgLy8g
RklYTUU6IERvIHRoaXMgZm9yIGFsbCBmdWxseSBzZWxlY3RlZCBibG9ja3MsIG5vdCBqdXN0IHRo
ZSBib2R5LgotICAgIE5vZGUqIGZ1bGx5U2VsZWN0ZWRSb290ID0gYm9keSAmJiAqU2VsZWN0aW9u
OjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoYm9keSkudG9Ob3JtYWxpemVkUmFuZ2UoKSA9
PSAqdXBkYXRlZFJhbmdlID8gYm9keSA6IDA7CisgICAgTm9kZSogZnVsbHlTZWxlY3RlZFJvb3Qg
PSBib2R5ICYmICpWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUo
Ym9keSkudG9Ob3JtYWxpemVkUmFuZ2UoKSA9PSAqdXBkYXRlZFJhbmdlID8gYm9keSA6IDA7CiAg
ICAgaWYgKGFubm90YXRlICYmIGZ1bGx5U2VsZWN0ZWRSb290KQogICAgICAgICBzcGVjaWFsQ29t
bW9uQW5jZXN0b3IgPSBmdWxseVNlbGVjdGVkUm9vdDsKICAgICAgICAgCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAKaW5kZXggNmUxYTdmMy4uODE1ODk4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcApAQCAtMTUwNSwxMCArMTUwNSwxMCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6Om9u
U2VhcmNoKCkKICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuc2VhcmNoRXZl
bnQsIHRydWUsIGZhbHNlKTsKIH0KIAotU2VsZWN0aW9uIEhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVj
dGlvbigpIGNvbnN0CitWaXNpYmxlU2VsZWN0aW9uIEhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdGlv
bigpIGNvbnN0CiB7CiAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIWlzVGV4dEZpZWxkKCkgfHwgbV9k
YXRhLmNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPT0gLTEgfHwgbV9kYXRhLmNhY2hlZFNlbGVjdGlv
bkVuZCgpID09IC0xKQotICAgICAgICByZXR1cm4gU2VsZWN0aW9uKCk7CisgICAgICAgIHJldHVy
biBWaXNpYmxlU2VsZWN0aW9uKCk7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENv
bnRyb2wqPihyZW5kZXJlcigpKS0+c2VsZWN0aW9uKG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25TdGFy
dCgpLCBtX2RhdGEuY2FjaGVkU2VsZWN0aW9uRW5kKCkpOwogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaAppbmRleCA5NTQwOWUyLi5iOGRiNGUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAg
LTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmlsZUxpc3Q7CiBjbGFz
cyBIVE1MSW1hZ2VMb2FkZXI7CiBjbGFzcyBLVVJMOwotY2xhc3MgU2VsZWN0aW9uOworY2xhc3Mg
VmlzaWJsZVNlbGVjdGlvbjsKIAogY2xhc3MgSFRNTElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLCBwdWJsaWMgSW5wdXRFbGVtZW50IHsKIHB1Ymxp
YzoKQEAgLTIwMCw3ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRTZWFyY2hSZXN1bHQo
KTsKICAgICB2b2lkIG9uU2VhcmNoKCk7CiAKLSAgICBTZWxlY3Rpb24gc2VsZWN0aW9uKCkgY29u
c3Q7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgU3RyaW5nIGNvbnN0cmFpblZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29u
c3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBi
L1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCAwZGQ2YWJlLi4wYmUx
NWJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKysr
IGIvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0zNyw3ICszNyw3IEBA
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb24uaCIKKyNp
bmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMzgxLDEwICszODEsMTAgQEAgdm9pZCBIVE1MVGV4
dEFyZWFFbGVtZW50OjpzZXRSb3dzKGludCByb3dzKQogICAgIHNldEF0dHJpYnV0ZShyb3dzQXR0
ciwgU3RyaW5nOjpudW1iZXIocm93cykpOwogfQogCi1TZWxlY3Rpb24gSFRNTFRleHRBcmVhRWxl
bWVudDo6c2VsZWN0aW9uKCkgY29uc3QKK1Zpc2libGVTZWxlY3Rpb24gSFRNTFRleHRBcmVhRWxl
bWVudDo6c2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgbV9jYWNo
ZWRTZWxlY3Rpb25TdGFydCA8IDAgfHwgbV9jYWNoZWRTZWxlY3Rpb25FbmQgPCAwKQotICAgICAg
ICByZXR1cm4gU2VsZWN0aW9uKCk7CisgICAgICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKCk7
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIoKSkt
PnNlbGVjdGlvbihtX2NhY2hlZFNlbGVjdGlvblN0YXJ0LCBtX2NhY2hlZFNlbGVjdGlvbkVuZCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmggYi9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCmluZGV4IGYwMmFkNjUuLmY3ODM4NmMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKKysrIGIvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaApAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNlbGVjdGlvbjsKK2NsYXNzIFZpc2libGVTZWxlY3Rp
b247CiAKIGNsYXNzIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZSB7CiBwdWJsaWM6CkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFJvd3MoaW50KTsKICAgICAKICAgICB2b2lkIGNhY2hlU2VsZWN0aW9uKGludCBz
LCBpbnQgZSkgeyBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID0gczsgbV9jYWNoZWRTZWxlY3Rpb25F
bmQgPSBlOyB9OwotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24oKSBjb25zdDsKKyAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbigpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFVz
ZUlucHV0TWV0aG9kKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcCBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApp
bmRleCA2ZDQ0MWQwLi42MWE3ZDQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
CkBAIC0yMzEsOSArMjMxLDkgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjphY2Nlc3NLZXkoKSBjb25zdAogICAgIHJldHVybiBudWxsQXRvbTsKIH0KIAotU2VsZWN0
aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvbigpIGNvbnN0CitWaXNpYmxlU2VsZWN0
aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IFNlbGVjdGlvbigpOworICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKCk7CiB9CiAKIFBsYWlu
VGV4dFJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QK
QEAgLTM1Nyw3ICszNTcsNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclVub3JkZXJlZFBvc2l0aQogCiAgICAgLy8gdXNl
IHNlbGVjdGlvbiBvcmRlciB0byBzZWUgaWYgdGhlIHBvc2l0aW9ucyBhcmUgaW4gb3JkZXIKICAg
ICBlbHNlCi0gICAgICAgIGFscmVhZHlJbk9yZGVyID0gU2VsZWN0aW9uKHZpc2libGVQb3MxLCB2
aXNpYmxlUG9zMikuaXNCYXNlRmlyc3QoKTsKKyAgICAgICAgYWxyZWFkeUluT3JkZXIgPSBWaXNp
YmxlU2VsZWN0aW9uKHZpc2libGVQb3MxLCB2aXNpYmxlUG9zMikuaXNCYXNlRmlyc3QoKTsKIAog
ICAgIGlmIChhbHJlYWR5SW5PcmRlcikgewogICAgICAgICBzdGFydFBvcyA9IHZpc2libGVQb3Mx
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1dlYkNv
cmUvcGFnZS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggYTc1MTAwMy4uODdlYTlkNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9XZWJDb3Jl
L3BhZ2UvQWNjZXNzaWJpbGl0eU9iamVjdC5oCkBAIC04Myw3ICs4Myw3IEBAIGNsYXNzIEludFBv
aW50OwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSZW5kZXJPYmplY3Q7Ci1j
bGFzcyBTZWxlY3Rpb247CitjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogY2xhc3MgU3RyaW5nOwog
Y2xhc3MgV2lkZ2V0OwogCkBAIC0yODUsNyArMjg1LDcgQEAgcHVibGljOgogICAgIAogICAgIHZp
cnR1YWwgS1VSTCB1cmwoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBsYWluVGV4dFJhbmdlIHNlbGVj
dGVkVGV4dFJhbmdlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTZWxlY3Rpb24gc2VsZWN0aW9uKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigpIGNvbnN0Owog
ICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgc2VsZWN0
aW9uRW5kKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nVmFsdWUoKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBi
L1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBmZjdhODdm
Li43OGU0YmNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CkBAIC0xMzI4LDcgKzEzMjgsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmFjY2Vzc0tleSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIpOwogfQogCi1TZWxlY3Rp
b24gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2VsZWN0aW9uKCkgY29uc3QKK1Zpc2libGVT
ZWxlY3Rpb24gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2VsZWN0aW9uKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpOwogfQpAQCAtMTM3MCw3ICsxMzcwLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYg
cmFuZ2UKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgTm9kZSogbm9kZSA9
IG1fcmVuZGVyZXItPmVsZW1lbnQoKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVj
dGlvbihTZWxlY3Rpb24oUG9zaXRpb24obm9kZSwgcmFuZ2Uuc3RhcnQpLAorICAgIGZyYW1lLT5z
ZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oUG9zaXRpb24obm9kZSwg
cmFuZ2Uuc3RhcnQpLAogICAgICAgICBQb3NpdGlvbihub2RlLCByYW5nZS5zdGFydCArIHJhbmdl
Lmxlbmd0aCksIERPV05TVFJFQU0pKTsKIH0KIApAQCAtMTYyMCw3ICsxNjIwLDcgQEAgVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JMaW5lKHVuc2kKICAgICAvLyBzdGFydGluZyBhdCBhbiBlbXB0eSBsaW5lLiAgVGhl
IHJlc3VsdGluZyBzZWxlY3Rpb24gaW4gdGhhdCBjYXNlCiAgICAgLy8gd2lsbCBiZSBhIGNhcmV0
IGF0IHZpc2libGVQb3MuCiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb247Ci0gICAg
c2VsZWN0aW9uLnNldFNlbGVjdGlvbihTZWxlY3Rpb24odmlzaWJsZVBvcykpOworICAgIHNlbGVj
dGlvbi5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbih2aXNpYmxlUG9zKSk7CiAgICAgc2Vs
ZWN0aW9uLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQsIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OlJJR0hULCBMaW5lQm91bmRhcnkpOwogICAgIAogICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb25SYW5nZShzZWxlY3Rpb24uc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIHNlbGVjdGlv
bi5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpOwpAQCAtMTcyNyw3ICsxNzI3LDcgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdl
KGNvbnN0IFZpc2libGVQb3MKICAgICAgICAgbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+c2VsZWN0aW9uKCktPm1vdmVUbyhyYW5nZS5zdGFydCwgdHJ1ZSk7CiAgICAgfQogICAgIGVs
c2UgewotICAgICAgICBTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gU2VsZWN0aW9uKHJhbmdlLnN0
YXJ0LCByYW5nZS5lbmQpOworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9
IFZpc2libGVTZWxlY3Rpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiAgICAgICAgIG1fcmVu
ZGVyZXItPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKTsKICAgICB9ICAgIAogfQpAQCAtMTgzNiw3ICsxODM2LDcgQEAgUGxhaW5UZXh0
UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BWFJhbmdlRm9yTGluZSh1bnNpZ25l
ZCBsaW5lTnVtYmVyKQogICAgIC8vIHN0YXJ0aW5nIGF0IGFuIGVtcHR5IGxpbmUuICBUaGUgcmVz
dWx0aW5nIHNlbGVjdGlvbiBpbiB0aGF0IGNhc2UKICAgICAvLyB3aWxsIGJlIGEgY2FyZXQgYXQg
dmlzaWJsZVBvcy4KICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbjsKLSAgICBzZWxl
Y3Rpb24uc2V0U2VsZWN0aW9uKFNlbGVjdGlvbih2aXNpYmxlUG9zKSk7CisgICAgc2VsZWN0aW9u
LnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHZpc2libGVQb3MpKTsKICAgICBzZWxlY3Rp
b24ubW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCwgU2VsZWN0aW9uQ29udHJvbGxl
cjo6TEVGVCwgTGluZUJvdW5kYXJ5KTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkVYVEVORCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6UklHSFQsIExpbmVCb3VuZGFy
eSk7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5oIGIvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAppbmRleCAw
M2JhMWRiLi4wYjhlMTFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5oCisrKyBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmgKQEAgLTUxLDcgKzUxLDcgQEAgY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyTGlz
dEJveDsKIGNsYXNzIFJlbmRlclRleHRDb250cm9sOwogY2xhc3MgUmVuZGVyVmlldzsKLWNsYXNz
IFNlbGVjdGlvbjsKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CiBjbGFzcyBTdHJpbmc7CiBjbGFz
cyBXaWRnZXQ7CiAgICAgCkBAIC0xNTYsNyArMTU2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZp
cnR1YWwgS1VSTCB1cmwoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBsYWluVGV4dFJhbmdlIHNlbGVj
dGVkVGV4dFJhbmdlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTZWxlY3Rpb24gc2VsZWN0aW9uKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigpIGNvbnN0Owog
ICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJp
bmcgYXJpYUFjY2Vzc2libGl0eU5hbWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdmlydHVh
bCBTdHJpbmcgYXJpYUxhYmVsZWRCeUF0dHJpYnV0ZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNw
cAppbmRleCA2ZjI4NGU2Li4yMzk3NjE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NU2Vs
ZWN0aW9uLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtNjEsNyAr
NjEsNyBAQCBOb2RlKiBET01TZWxlY3Rpb246OmFuY2hvck5vZGUoKSBjb25zdAogICAgIGlmICgh
bV9mcmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCk7CiAgICAgUG9zaXRpb24gYW5jaG9yID0gc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkgPyBzZWxl
Y3Rpb24uc3RhcnQoKSA6IHNlbGVjdGlvbi5lbmQoKTsKICAgICBhbmNob3IgPSByYW5nZUNvbXBs
aWFudEVxdWl2YWxlbnQoYW5jaG9yKTsKICAgICByZXR1cm4gYW5jaG9yLm5vZGUoKTsKQEAgLTc5
LDcgKzc5LDcgQEAgaW50IERPTVNlbGVjdGlvbjo6YW5jaG9yT2Zmc2V0KCkgY29uc3QKICAgICBp
ZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgU2VsZWN0aW9uJiBz
ZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpOwogICAgIFBvc2l0aW9uIGFuY2hvciA9IHNlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpID8g
c2VsZWN0aW9uLnN0YXJ0KCkgOiBzZWxlY3Rpb24uZW5kKCk7CiAgICAgYW5jaG9yID0gcmFuZ2VD
b21wbGlhbnRFcXVpdmFsZW50KGFuY2hvcik7CiAgICAgcmV0dXJuIGFuY2hvci5vZmZzZXQoKTsK
QEAgLTk3LDcgKzk3LDcgQEAgTm9kZSogRE9NU2VsZWN0aW9uOjpmb2N1c05vZGUoKSBjb25zdAog
ICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBTZWxlY3Rp
b24mIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24gZm9jdXMgPSBzZWxlY3Rpb24uaXNCYXNlRmlyc3Qo
KSA/IHNlbGVjdGlvbi5lbmQoKSA6IHNlbGVjdGlvbi5zdGFydCgpOwogICAgIGZvY3VzID0gcmFu
Z2VDb21wbGlhbnRFcXVpdmFsZW50KGZvY3VzKTsKICAgICByZXR1cm4gZm9jdXMubm9kZSgpOwpA
QCAtMTE1LDcgKzExNSw3IEBAIGludCBET01TZWxlY3Rpb246OmZvY3VzT2Zmc2V0KCkgY29uc3QK
ICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3QgU2VsZWN0
aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpOwogICAgIFBvc2l0aW9uIGZvY3VzID0gc2VsZWN0aW9uLmlzQmFzZUZpcnN0
KCkgPyBzZWxlY3Rpb24uZW5kKCkgOiBzZWxlY3Rpb24uc3RhcnQoKTsKICAgICBmb2N1cyA9IHJh
bmdlQ29tcGxpYW50RXF1aXZhbGVudChmb2N1cyk7CiAgICAgcmV0dXJuIGZvY3VzLm9mZnNldCgp
OwpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvRW5kKCkK
ICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFNlbGVjdGlv
biYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOworICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKTsKICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKFZpc2libGVQb3Np
dGlvbihzZWxlY3Rpb24uZW5kKCksIERPV05TVFJFQU0pKTsKIH0KIApAQCAtMTgyLDcgKzE4Miw3
IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBzZVRvU3RhcnQoKQogICAgIGlmICghbV9mcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAg
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5z
dGFydCgpLCBET1dOU1RSRUFNKSk7CiB9CiAKQEAgLTMwMSw3ICszMDEsNyBAQCBQYXNzUmVmUHRy
PFJhbmdlPiBET01TZWxlY3Rpb246OmdldFJhbmdlQXQoaW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICAvLyBJZiB5b3UncmUgaGl0dGluZyB0aGlzLCB5b3UndmUgYWRkZWQgYnJva2Vu
IG11bHRpLXJhbmdlIHNlbGVjdGlvbiBzdXBwb3J0CiAgICAgQVNTRVJUKHJhbmdlQ291bnQoKSA9
PSAxKTsKIAotICAgIGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbigpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
biA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKICAgICByZXR1cm4gc2VsZWN0
aW9uLmZpcnN0UmFuZ2UoKTsKIH0KIApAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQgRE9NU2VsZWN0
aW9uOjphZGRSYW5nZShSYW5nZSogcikKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rp
b24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICAKICAgICBpZiAoc2VsZWN0aW9uLT5pc05v
bmUoKSkgewotICAgICAgICBzZWxlY3Rpb24tPnNldFNlbGVjdGlvbihTZWxlY3Rpb24ocikpOwor
ICAgICAgICBzZWxlY3Rpb24tPnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHIpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzMzLDIwICszMzMsMjAgQEAgdm9pZCBET01TZWxl
Y3Rpb246OmFkZFJhbmdlKFJhbmdlKiByKQogICAgICAgICBpZiAoci0+Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsIHJhbmdlLmdldCgpLCBlYykgPiAtMSkgewogICAg
ICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwg
cmFuZ2UuZ2V0KCksIGVjKSA9PSAtMSkKICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwg
cmFuZ2UgYW5kIHIgaW50ZXJzZWN0LgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi0+c2V0U2Vs
ZWN0aW9uKFNlbGVjdGlvbihyLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigp
LCBET1dOU1RSRUFNKSk7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uLT5zZXRTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbihyLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlvbigp
LCBET1dOU1RSRUFNKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgLy8gciBj
b250YWlucyB0aGUgb3JpZ2luYWwgcmFuZ2UuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLT5z
ZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHIpKTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24tPnNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHIpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZGlzY29udGlndW91cyBzZWxlY3Rpb24uIFdl
IGRvbid0IGRvIGFueXRoaW5nIGlmIHIgYW5kIHJhbmdlIGRvbid0IGludGVyc2VjdC4KICAgICAg
ICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCByYW5n
ZS5nZXQoKSwgZWMpIDwgMSkgewogICAgICAgICAgICAgaWYgKHItPmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6RU5EX1RPX0VORCwgcmFuZ2UuZ2V0KCksIGVjKSA9PSAtMSkKICAgICAgICAg
ICAgICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2UgY29udGFpbnMgci4KLSAgICAgICAgICAgICAg
ICBzZWxlY3Rpb24tPnNldFNlbGVjdGlvbihTZWxlY3Rpb24ocmFuZ2UuZ2V0KCkpKTsKKyAgICAg
ICAgICAgICAgICBzZWxlY3Rpb24tPnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdl
LmdldCgpKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdp
bmFsIHJhbmdlIGFuZCByIGludGVyc2VjdC4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24tPnNl
dFNlbGVjdGlvbihTZWxlY3Rpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgci0+ZW5kUG9zaXRp
b24oKSwgRE9XTlNUUkVBTSkpOworICAgICAgICAgICAgICAgIHNlbGVjdGlvbi0+c2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgci0+ZW5kUG9zaXRp
b24oKSwgRE9XTlNUUkVBTSkpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL0RPTVNlbGVjdGlvbi5oIGIvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5oCmlu
ZGV4IGZkOGQxZmMuLmVmYWJkNjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rp
b24uaAorKysgYi9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmgKQEAgLTUwLDcgKzUwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBGcmFtZSogZnJhbWUoKSBjb25zdDsKICAgICAg
ICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKIAotICAgICAgICAvLyBTYWZhcmkgU2VsZWN0aW9u
IE9iamVjdCBBUEkKKyAgICAgICAgLy8gU2FmYXJpIFZpc2libGVTZWxlY3Rpb24gT2JqZWN0IEFQ
SQogICAgICAgICAvLyBUaGVzZSBtZXRob2RzIHJldHVybiB0aGUgdmFsaWQgZXF1aXZhbGVudHMg
b2YgaW50ZXJuYWwgZWRpdGluZyBwb3NpdGlvbnMuCiAgICAgICAgIE5vZGUqIGJhc2VOb2RlKCkg
Y29uc3Q7CiAgICAgICAgIE5vZGUqIGV4dGVudE5vZGUoKSBjb25zdDsKQEAgLTYxLDcgKzYxLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFBvc2l0aW9uKE5vZGUqLCBp
bnQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgbW9kaWZ5KGNvbnN0IFN0
cmluZyYgYWx0ZXIsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGdyYW51
bGFyaXR5KTsKIAotICAgICAgICAvLyBNb3ppbGxhIFNlbGVjdGlvbiBPYmplY3QgQVBJCisgICAg
ICAgIC8vIE1vemlsbGEgVmlzaWJsZVNlbGVjdGlvbiBPYmplY3QgQVBJCiAgICAgICAgIC8vIElu
IEZpcmVmb3gsIGFuY2hvci9mb2N1cyBhcmUgdGhlIGVxdWFsIHRvIHRoZSBzdGFydC9lbmQgb2Yg
dGhlIHNlbGVjdGlvbiwKICAgICAgICAgLy8gYnV0IHJlZmxlY3QgdGhlIGRpcmVjdGlvbiBpbiB3
aGljaCB0aGUgc2VsZWN0aW9uIHdhcyBtYWRlIGJ5IHRoZSB1c2VyLiAgVGhhdCBkb2VzCiAgICAg
ICAgIC8vIG5vdCBtZWFuIHRoYXQgdGhleSBhcmUgYmFzZS9leHRlbnQsIHNpbmNlIHRoZSBiYXNl
L2V4dGVudCBkb24ndCByZWZsZWN0CkBAIC04Niw3ICs4Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKTsKIAotICAgICAgICAvLyBNaWNyb3NvZnQg
U2VsZWN0aW9uIE9iamVjdCBBUEkKKyAgICAgICAgLy8gTWljcm9zb2Z0IFZpc2libGVTZWxlY3Rp
b24gT2JqZWN0IEFQSQogICAgICAgICB2b2lkIGVtcHR5KCk7CiAgICAgICAgIC8vdm9pZCBjbGVh
cigpOwogICAgICAgICAvL1RleHRSYW5nZSAqY3JlYXRlUmFuZ2UoKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwCmluZGV4IDQ4Nzc5MzQuLmQwMTQ1OTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApA
QCAtMjgwLDcgKzI4MCw3IEBAIERyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OnRyeURvY3Vt
ZW50RHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEsIERyYWdEZXN0aW5hdGlvCiAgICAgICAgIEZyYW1l
KiBpbm5lckZyYW1lID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICAgICAgQVNT
RVJUKGlubmVyRnJhbWUpOwogICAgICAgICBpZiAoIWFzRmlsZUlucHV0KGVsZW1lbnQpKSB7Ci0g
ICAgICAgICAgICBTZWxlY3Rpb24gZHJhZ0NhcmV0OworICAgICAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBkcmFnQ2FyZXQ7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVu
dC0+ZnJhbWUoKSkKICAgICAgICAgICAgICAgICBkcmFnQ2FyZXQgPSBmcmFtZS0+dmlzaWJsZVBv
c2l0aW9uRm9yUG9pbnQocG9pbnQpOwogICAgICAgICAgICAgbV9wYWdlLT5kcmFnQ2FyZXRDb250
cm9sbGVyKCktPnNldFNlbGVjdGlvbihkcmFnQ2FyZXQpOwpAQCAtMzA5LDcgKzMwOSw3IEBAIERy
YWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZvckxvYWQoRHJhZ0RhdGEqIGRy
YWdEYXRhKQogICAgIHJldHVybiBkcmFnT3BlcmF0aW9uKGRyYWdEYXRhKTsKIH0KIAotc3RhdGlj
IGJvb2wgc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbWUqIGZyYW1lLCBTZWxlY3Rpb24mIGRy
YWdDYXJldCwgUmVmUHRyPFJhbmdlPiYgcmFuZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3N0
YXRpYyBib29sIHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgVmlzaWJsZVNl
bGVjdGlvbiYgZHJhZ0NhcmV0LCBSZWZQdHI8UmFuZ2U+JiByYW5nZSwgY29uc3QgSW50UG9pbnQm
IHBvaW50KQogewogICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKGRyYWdDYXJl
dCk7CiAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkpIHsKQEAgLTM4MSw3ICsz
ODEsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyYWdEYXRhKiBk
cmFnRGF0YSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgU2VsZWN0aW9uIGRy
YWdDYXJldChtX3BhZ2UtPmRyYWdDYXJldENvbnRyb2xsZXIoKS0+c2VsZWN0aW9uKCkpOworICAg
IFZpc2libGVTZWxlY3Rpb24gZHJhZ0NhcmV0KG1fcGFnZS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigp
LT5zZWxlY3Rpb24oKSk7CiAgICAgbV9wYWdlLT5kcmFnQ2FyZXRDb250cm9sbGVyKCktPmNsZWFy
KCk7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGRyYWdDYXJldC50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIApAQCAtNTU0LDcgKzU1NCw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVDbGlwYm9h
cmRGb3JJbWFnZURyYWcoRnJhbWUqIHNyYywgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEVsZW1lCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgcmFuZ2UtPnNlbGVjdE5vZGUobm9kZSwgZWMp
OwogICAgIEFTU0VSVChlYyA9PSAwKTsKLSAgICBzcmMtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rp
b24oU2VsZWN0aW9uKHJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSk7ICAgICAgICAgICAKKyAgICBz
cmMtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyYW5nZS5nZXQo
KSwgRE9XTlNUUkVBTSkpOyAgICAgICAgICAgCiAgICAgY2xpcGJvYXJkLT5kZWNsYXJlQW5kV3Jp
dGVEcmFnSW1hZ2Uobm9kZSwgIWxpbmtVUkwuaXNFbXB0eSgpID8gbGlua1VSTCA6IGltYWdlVVJM
LCBsYWJlbCwgc3JjKTsKIH0KICAgICAKQEAgLTY2MSw3ICs2NjEsNyBAQCBib29sIERyYWdDb250
cm9sbGVyOjpzdGFydERyYWcoRnJhbWUqIHNyYywgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIERyYWdP
cGVyYXRpb24gcwogICAgICAgICAgICAgUG9zaXRpb24gcG9zID0gc3JjLT5zZWxlY3Rpb24oKS0+
YmFzZSgpOwogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQo
cG9zKTsKICAgICAgICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgICAgIHNyYy0+c2VsZWN0
aW9uKCktPnNldFNlbGVjdGlvbihTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9k
ZShub2RlKSk7CisgICAgICAgICAgICAgICAgc3JjLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShub2RlKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBtX2NsaWVudC0+d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9u
KERyYWdTb3VyY2VBY3Rpb25MaW5rLCBkcmFnT3JpZ2luLCBjbGlwYm9hcmQpOwpAQCAtNzcxLDcg
Kzc3MSw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OnBsYWNlRHJhZ0NhcmV0KGNvbnN0IEludFBv
aW50JiB3aW5kb3dQb2ludCkKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuOwog
ICAgIEludFBvaW50IGZyYW1lUG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2lu
ZG93UG9pbnQpOwotICAgIFNlbGVjdGlvbiBkcmFnQ2FyZXQoZnJhbWUtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KGZyYW1lUG9pbnQpKTsgIAorICAgIFZpc2libGVTZWxlY3Rpb24gZHJhZ0NhcmV0
KGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KSk7ICAKICAgICBtX3Bh
Z2UtPmRyYWdDYXJldENvbnRyb2xsZXIoKS0+c2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7CiB9CiAg
ICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggYi9XZWJDb3JlL3Bh
Z2UvRWRpdG9yQ2xpZW50LmgKaW5kZXggNTZkMDQzNS4uYzRiYmVkNCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQu
aApAQCAtNTAsNyArNTAsNyBAQCBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIEtleWJvYXJkRXZl
bnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUmFuZ2U7Ci1jbGFzcyBTZWxlY3Rpb247CitjbGFzcyBW
aXNpYmxlU2VsZWN0aW9uOwogY2xhc3MgU3RyaW5nOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGE5MWE4ZDQuLjE0MjJhZmMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCkBAIC0xODQsMTIgKzE4NCwxMiBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Y2xlYXIoKQog
dm9pZCBFdmVudEhhbmRsZXI6OnNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQoY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgcmVzdWx0KQogewogICAgIE5vZGUqIGlubmVy
Tm9kZSA9IHJlc3VsdC50YXJnZXROb2RlKCk7Ci0gICAgU2VsZWN0aW9uIG5ld1NlbGVjdGlvbjsK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbjsKIAogICAgIGlmIChpbm5lck5vZGUg
JiYgaW5uZXJOb2RlLT5yZW5kZXJlcigpICYmIG1fbW91c2VEb3duTWF5U3RhcnRTZWxlY3QpIHsK
ICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0
aW9uRm9yUG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwogICAgICAgICBpZiAocG9zLmlzTm90
TnVsbCgpKSB7Ci0gICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBTZWxlY3Rpb24ocG9zKTsKKyAg
ICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24ocG9zKTsKICAgICAgICAg
ICAgIG5ld1NlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7
CiAgICAgICAgIH0KICAgICAKQEAgLTIxMywxMSArMjEzLDExIEBAIHZvaWQgRXZlbnRIYW5kbGVy
OjpzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRX
aXRoSGl0CiAgICAgTm9kZSogaW5uZXJOb2RlID0gcmVzdWx0LnRhcmdldE5vZGUoKTsKIAogICAg
IGlmIChpbm5lck5vZGUgJiYgaW5uZXJOb2RlLT5yZW5kZXJlcigpICYmIG1fbW91c2VEb3duTWF5
U3RhcnRTZWxlY3QpIHsKLSAgICAgICAgU2VsZWN0aW9uIG5ld1NlbGVjdGlvbjsKKyAgICAgICAg
VmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb247CiAgICAgICAgIEVsZW1lbnQqIFVSTEVsZW1l
bnQgPSByZXN1bHQuaGl0VGVzdFJlc3VsdCgpLlVSTEVsZW1lbnQoKTsKICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQocmVz
dWx0LmxvY2FsUG9pbnQoKSkpOwogICAgICAgICBpZiAocG9zLmlzTm90TnVsbCgpICYmIHBvcy5k
ZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoVVJMRWxlbWVudCkpCi0gICAg
ICAgICAgICBuZXdTZWxlY3Rpb24gPSBTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09m
Tm9kZShVUkxFbGVtZW50KTsKKyAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxl
Y3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShVUkxFbGVtZW50KTsKICAgICAKICAg
ICAgICAgaWYgKG5ld1NlbGVjdGlvbi5pc1JhbmdlKCkpIHsKICAgICAgICAgICAgIG1fZnJhbWUt
PnNldFNlbGVjdGlvbkdyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CkBAIC0yNTYsMTAgKzI1
NiwxMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpcGxlQ2xp
Y2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UgogICAgIGlmICghKGlubmVyTm9kZSAmJiBp
bm5lck5vZGUtPnJlbmRlcmVyKCkgJiYgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNlbGVjdGlvbiBuZXdTZWxlY3Rpb247CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb247CiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbm5l
ck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoZXZlbnQubG9jYWxQb2ludCgpKSk7
CiAgICAgaWYgKHBvcy5pc05vdE51bGwoKSkgewotICAgICAgICBuZXdTZWxlY3Rpb24gPSBTZWxl
Y3Rpb24ocG9zKTsKKyAgICAgICAgbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihwb3Mp
OwogICAgICAgICBuZXdTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShQYXJhZ3JhcGhH
cmFudWxhcml0eSk7CiAgICAgfQogICAgIGlmIChuZXdTZWxlY3Rpb24uaXNSYW5nZSgpKSB7CkBA
IC0yOTgsNyArMjk4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVu
dFNpbmdsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFIKICAgICAgICAgdmlzaWJs
ZVBvcyA9IFZpc2libGVQb3NpdGlvbihpbm5lck5vZGUsIDAsIERPV05TVFJFQU0pOwogICAgIFBv
c2l0aW9uIHBvcyA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAKLSAgICBTZWxl
Y3Rpb24gbmV3U2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwor
ICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpOwogICAgIGlmIChleHRlbmRTZWxlY3Rpb24gJiYgbmV3U2VsZWN0aW9uLmlz
Q2FyZXRPclJhbmdlKCkpIHsKICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldExhc3RD
aGFuZ2VXYXNIb3Jpem9udGFsRXh0ZW5zaW9uKGZhbHNlKTsKICAgICAgICAgCkBAIC0zMDgsMTUg
KzMwOCwxNSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xl
Q2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UgogICAgICAgICBQb3NpdGlvbiBlbmQg
PSBuZXdTZWxlY3Rpb24uZW5kKCk7CiAgICAgICAgIHNob3J0IGJlZm9yZSA9IFJhbmdlOjpjb21w
YXJlQm91bmRhcnlQb2ludHMocG9zLm5vZGUoKSwgcG9zLm9mZnNldCgpLCBzdGFydC5ub2RlKCks
IHN0YXJ0Lm9mZnNldCgpKTsKICAgICAgICAgaWYgKGJlZm9yZSA8PSAwKQotICAgICAgICAgICAg
bmV3U2VsZWN0aW9uID0gU2VsZWN0aW9uKHBvcywgZW5kKTsKKyAgICAgICAgICAgIG5ld1NlbGVj
dGlvbiA9IFZpc2libGVTZWxlY3Rpb24ocG9zLCBlbmQpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBuZXdTZWxlY3Rpb24gPSBTZWxlY3Rpb24oc3RhcnQsIHBvcyk7CisgICAgICAgICAgICBu
ZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0LCBwb3MpOwogCiAgICAgICAgIGlm
IChtX2ZyYW1lLT5zZWxlY3Rpb25HcmFudWxhcml0eSgpICE9IENoYXJhY3RlckdyYW51bGFyaXR5
KQogICAgICAgICAgICAgbmV3U2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkobV9mcmFt
ZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSk7CiAgICAgICAgIG1fYmVnYW5TZWxlY3RpbmdUZXh0
ID0gdHJ1ZTsKICAgICB9IGVsc2UgewotICAgICAgICBuZXdTZWxlY3Rpb24gPSBTZWxlY3Rpb24o
dmlzaWJsZVBvcyk7CisgICAgICAgIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24odmlz
aWJsZVBvcyk7CiAgICAgICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbkdyYW51bGFyaXR5KENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKICAgICB9CiAgICAgCkBAIC00OTMsNyArNDkzLDcgQEAgdm9pZCBF
dmVudEhhbmRsZXI6OnVwZGF0ZVNlbGVjdGlvbkZvck1vdXNlRHJhZyhOb2RlKiB0YXJnZXROb2Rl
LCBjb25zdCBJbnRQb2ludCYKIAogICAgIC8vIFJlc3RhcnQgdGhlIHNlbGVjdGlvbiBpZiB0aGlz
IGlzIHRoZSBmaXJzdCBtb3VzZSBtb3ZlLiBUaGlzIHdvcmsgaXMgdXN1YWxseQogICAgIC8vIGRv
bmUgaW4gaGFuZGxlTW91c2VQcmVzc0V2ZW50LCBidXQgbm90IGlmIHRoZSBtb3VzZSBwcmVzcyB3
YXMgb24gYW4gZXhpc3Rpbmcgc2VsZWN0aW9uLgotICAgIFNlbGVjdGlvbiBuZXdTZWxlY3Rpb24g
PSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlv
biBuZXdTZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAKICNp
ZiBFTkFCTEUoU1ZHKQogICAgIC8vIFNwZWNpYWwgY2FzZSB0byBsaW1pdCBzZWxlY3Rpb24gdG8g
dGhlIGNvbnRhaW5pbmcgYmxvY2sgZm9yIFNWRyB0ZXh0LgpAQCAtNTA3LDcgKzUwNyw3IEBAIHZv
aWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVTZWxlY3Rpb25Gb3JNb3VzZURyYWcoTm9kZSogdGFyZ2V0
Tm9kZSwgY29uc3QgSW50UG9pbnQmCiAKICAgICBpZiAoIW1fYmVnYW5TZWxlY3RpbmdUZXh0KSB7
CiAgICAgICAgIG1fYmVnYW5TZWxlY3RpbmdUZXh0ID0gdHJ1ZTsKLSAgICAgICAgbmV3U2VsZWN0
aW9uID0gU2VsZWN0aW9uKHRhcmdldFBvc2l0aW9uKTsKKyAgICAgICAgbmV3U2VsZWN0aW9uID0g
VmlzaWJsZVNlbGVjdGlvbih0YXJnZXRQb3NpdGlvbik7CiAgICAgfQogCiAgICAgbmV3U2VsZWN0
aW9uLnNldEV4dGVudCh0YXJnZXRQb3NpdGlvbik7CkBAIC01NTgsMTEgKzU1OCwxMSBAQCBib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYgZQogICAgIGlmIChtX21vdXNlRG93bldhc1NpbmdsZUNsaWNrSW5T
ZWxlY3Rpb24gJiYgIW1fYmVnYW5TZWxlY3RpbmdUZXh0CiAgICAgICAgICAgICAmJiBtX2RyYWdT
dGFydFBvcyA9PSBldmVudC5ldmVudCgpLnBvcygpCiAgICAgICAgICAgICAmJiBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7Ci0gICAgICAgIFNlbGVjdGlvbiBuZXdTZWxlY3Rpb247
CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uOwogICAgICAgICBOb2RlICpu
b2RlID0gZXZlbnQudGFyZ2V0Tm9kZSgpOwogICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpICYmIG5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBwb3MgPSBub2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KGV2ZW50
LmxvY2FsUG9pbnQoKSk7Ci0gICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBTZWxlY3Rpb24ocG9z
KTsKKyAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24ocG9zKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAobV9mcmFtZS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1Nl
bGVjdGlvbikpCiAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9u
KG5ld1NlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBmZDY5Mzc4Li5hNGYyOTQ4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTUw
MCwxMiArNTAwLDEyIEBAIFN0cmluZyBGcmFtZTo6bWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudChj
b25zdCBWZWN0b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVtZW50KiBlCiAgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCi1jb25zdCBTZWxlY3Rpb24mIEZyYW1lOjptYXJrKCkgY29uc3QKK2NvbnN0IFZp
c2libGVTZWxlY3Rpb24mIEZyYW1lOjptYXJrKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tYXJr
OwogfQogCi12b2lkIEZyYW1lOjpzZXRNYXJrKGNvbnN0IFNlbGVjdGlvbiYgcykKK3ZvaWQgRnJh
bWU6OnNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcykKIHsKICAgICBBU1NFUlQoIXMu
YmFzZSgpLm5vZGUoKSB8fCBzLmJhc2UoKS5ub2RlKCktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQo
KSk7CiAgICAgQVNTRVJUKCFzLmV4dGVudCgpLm5vZGUoKSB8fCBzLmV4dGVudCgpLm5vZGUoKS0+
ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCgpKTsKQEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIEZyYW1l
OjpzZWxlY3Rpb25MYXlvdXRDaGFuZ2VkKCkKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSB0aGlzLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSB0aGlzLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCk7CiAgICAgICAgIAogICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkK
ICAgICAgICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKQEAgLTgyNywxOCArODI3LDE4IEBAIHZv
aWQgRnJhbWU6OnJlYXBwbHlTdHlsZXMoKQogICAgICAgICBtX2RvYy0+dXBkYXRlU3R5bGVTZWxl
Y3RvcigpOwogfQogCi1ib29sIEZyYW1lOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2Vs
ZWN0aW9uJiBuZXdTZWxlY3Rpb24pIGNvbnN0Citib29sIEZyYW1lOjpzaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKSBjb25zdAogewogICAg
IHJldHVybiBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLCBu
ZXdTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CiB9CiAKLWJvb2wg
RnJhbWU6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVjdGlv
biwgY29uc3QgU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEVBZmZpbml0eSBhZmZpbml0eSwgYm9v
bCBzdGlsbFNlbGVjdGluZykgY29uc3QKK2Jvb2wgRnJhbWU6OnNob3VsZENoYW5nZVNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0
aW5nKSBjb25zdAogewogICAgIHJldHVybiBlZGl0b3IoKS0+Y2xpZW50KCktPnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIG5l
d1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZmaW5pdHksIHN0aWxsU2Vs
ZWN0aW5nKTsKIH0KIAotYm9vbCBGcmFtZTo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFNl
bGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdAorYm9vbCBGcmFtZTo6c2hvdWxkRGVsZXRlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1
cm4gZWRpdG9yKCktPmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSk7CiB9CkBAIC0xMjU1LDEyICsxMjU1LDEyIEBAIHZvaWQgRnJh
bWU6OnJldmVhbFNlbGVjdGlvbihjb25zdCBSZW5kZXJMYXllcjo6U2Nyb2xsQWxpZ25tZW50JiBh
bGlnbm1lbnQpIGNvbnN0CiAgICAgSW50UmVjdCByZWN0OwogCiAgICAgc3dpdGNoIChzZWxlY3Rp
b24oKS0+c2VsZWN0aW9uVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpOb1NlbGVj
dGlvbjoKKyAgICAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uOgor
ICAgICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uOgogICAgICAgICAg
ICAgcmVjdCA9IHNlbGVjdGlvbigpLT5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgorICAgICAg
ICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICAgICAgcmVj
dCA9IGVuY2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9uQm91bmRzKGZhbHNlKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0xMzcxLDcgKzEzNzEsNyBAQCB2b2lkIEZyYW1lOjpzZXRTZWxl
Y3Rpb25Gcm9tTm9uZSgpCiAgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPmhhc1RhZ05hbWUoYm9k
eVRhZykpCiAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgaWYg
KG5vZGUpCi0gICAgICAgIHNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKFBvc2l0
aW9uKG5vZGUsIDApLCBET1dOU1RSRUFNKSk7CisgICAgICAgIHNlbGVjdGlvbigpLT5zZXRTZWxl
Y3Rpb24oVmlzaWJsZVNlbGVjdGlvbihQb3NpdGlvbihub2RlLCAwKSwgRE9XTlNUUkVBTSkpOwog
fQogCiBib29sIEZyYW1lOjppblZpZXdTb3VyY2VNb2RlKCkgY29uc3QKQEAgLTEzOTYsNyArMTM5
Niw3IEBAIGJvb2wgRnJhbWU6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGJvb2wg
Zm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3CiAgICAgLy8gU3RhcnQgZnJvbSBhbiBlZGdl
IG9mIHRoZSBzZWxlY3Rpb24sIGlmIHRoZXJlJ3MgYSBzZWxlY3Rpb24gdGhhdCdzIG5vdCBpbiBz
aGFkb3cgY29udGVudC4gV2hpY2ggZWRnZQogICAgIC8vIGlzIHVzZWQgZGVwZW5kcyBvbiB3aGV0
aGVyIHdlJ3JlIHNlYXJjaGluZyBmb3J3YXJkIG9yIGJhY2t3YXJkLCBhbmQgd2hldGhlciBzdGFy
dEluU2VsZWN0aW9uIGlzIHNldC4KICAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHJhbmdl
T2ZDb250ZW50cyhkb2N1bWVudCgpKSk7Ci0gICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHRoaXMt
PnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlv
biA9IHRoaXMtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKIAogICAgIGlmIChmb3J3YXJkKQog
ICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgc3RhcnRJblNlbGVjdGlvbiA/IHNl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKSA6IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwpAQCAtMTQx
Niw3ICsxNDE2LDcgQEAgYm9vbCBGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdl
dCwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHcKICAgICAvLyBJZiB3ZSBzdGFy
dGVkIGluIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNoZXMg
dGhlIGV4aXN0aW5nIHNlbGVjdGlvbiwgZmluZCBhZ2Fpbi4KICAgICAvLyBCdWlsZCBhIHNlbGVj
dGlvbiB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2Uu
CiAgICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0byBp
Z25vcmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KLSAgICBp
ZiAoc3RhcnRJblNlbGVjdGlvbiAmJiAqU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpKS50b05v
cm1hbGl6ZWRSYW5nZSgpID09ICpzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkgeworICAg
IGlmIChzdGFydEluU2VsZWN0aW9uICYmICpWaXNpYmxlU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdl
dCgpKS50b05vcm1hbGl6ZWRSYW5nZSgpID09ICpzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KSkgewogICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsK
ICAgICAgICAgaWYgKGZvcndhcmQpCiAgICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5n
ZXQoKSwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CkBAIC0xNDY2LDcgKzE0NjYsNyBAQCBib29s
IEZyYW1lOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJv
b2wgY2FzZUZsYWcsIGJvb2wgdwogICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2Vw
dGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHRoaXMtPnNlbGVjdGlvbigpLT5z
ZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSk7Cisg
ICAgdGhpcy0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJlc3Vs
dFJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSk7CiAgICAgcmV2ZWFsU2VsZWN0aW9uKCk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC0xNjgyLDE5ICsxNjgyLDE5IEBAIHZvaWQgRnJhbWU6OnNjaGVk
dWxlQ2xvc2UoKQogICAgICAgICBjaHJvbWUtPmNsb3NlV2luZG93U29vbigpOwogfQogCi12b2lk
IEZyYW1lOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2Vs
ZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKQordm9pZCBGcmFtZTo6cmVzcG9uZFRvQ2hhbmdlZFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGJvb2wgY2xvc2VU
eXBpbmcpCiB7CiAgICAgaWYgKGRvY3VtZW50KCkpIHsKICAgICAgICAgYm9vbCBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGVkaXRvcigpLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpOwogICAgICAgICBib29sIGlzQ29udGludW91c0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCAmJiBlZGl0b3IoKS0+aXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CiAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCkgewotICAgICAgICAgICAgU2VsZWN0aW9uIG5ld0FkamFjZW50V29yZHM7
Ci0gICAgICAgICAgICBTZWxlY3Rpb24gbmV3U2VsZWN0ZWRTZW50ZW5jZTsKKyAgICAgICAgICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3QWRqYWNlbnRXb3JkczsKKyAgICAgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gbmV3U2VsZWN0ZWRTZW50ZW5jZTsKICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBuZXdTdGFydChzZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkpOwotICAgICAgICAgICAgICAgIG5ld0FkamFjZW50V29yZHMgPSBTZWxlY3Rpb24oc3Rh
cnRPZldvcmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG5ld1N0
YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICAgICAgICAgICAgICBuZXdBZGphY2Vu
dFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdvcmRJ
Zk9uQm91bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkp
OwogICAgICAgICAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KQotICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZFNlbnRlbmNlID0gU2VsZWN0aW9uKHN0
YXJ0T2ZTZW50ZW5jZShuZXdTdGFydCksIGVuZE9mU2VudGVuY2UobmV3U3RhcnQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRTZW50ZW5jZSA9IFZpc2libGVTZWxlY3Rpb24oc3Rh
cnRPZlNlbnRlbmNlKG5ld1N0YXJ0KSwgZW5kT2ZTZW50ZW5jZShuZXdTdGFydCkpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVjayBzcGVsbGluZyBl
bHNld2hlcmUsIHNvIGRvbid0IHJlZG8gaXQgaGVyZS4KQEAgLTE3MDIsMTEgKzE3MDIsMTEgQEAg
dm9pZCBGcmFtZTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9s
ZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVQKICAgICAgICAgICAgIC8vIG9sZFNlbGVjdGlvbiBtYXkg
bm8gbG9uZ2VyIGJlIGluIHRoZSBkb2N1bWVudC4KICAgICAgICAgICAgIGlmIChjbG9zZVR5cGlu
ZyAmJiBvbGRTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSAmJiBvbGRTZWxlY3Rpb24uc3Rh
cnQoKS5ub2RlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5pbkRvY3VtZW50KCkp
IHsKICAgICAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gb2xkU3RhcnQob2xkU2VsZWN0aW9u
LnZpc2libGVTdGFydCgpKTsKLSAgICAgICAgICAgICAgICBTZWxlY3Rpb24gb2xkQWRqYWNlbnRX
b3JkcyA9IFNlbGVjdGlvbihzdGFydE9mV29yZChvbGRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRh
cnkpLCBlbmRPZldvcmQob2xkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOyAgIAorICAg
ICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gb2xkQWRqYWNlbnRXb3JkcyA9IFZpc2libGVT
ZWxlY3Rpb24oc3RhcnRPZldvcmQob2xkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5k
T2ZXb3JkKG9sZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsgICAKICAgICAgICAgICAg
ICAgICBpZiAob2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdBZGphY2VudFdvcmRzKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGVkaXRvcigpLT5tYXJrTWlzc3BlbGxpbmdzKG9sZEFkamFjZW50V29yZHMp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb250aW51b3VzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uIG9sZFNlbGVjdGVkU2Vu
dGVuY2UgPSBTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKG9sZFN0YXJ0KSwgZW5kT2ZTZW50ZW5j
ZShvbGRTdGFydCkpOyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBvbGRTZWxlY3RlZFNlbnRlbmNlID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2Uo
b2xkU3RhcnQpLCBlbmRPZlNlbnRlbmNlKG9sZFN0YXJ0KSk7ICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob2xkU2VsZWN0ZWRTZW50ZW5jZSAhPSBuZXdTZWxlY3RlZFNlbnRlbmNlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcigpLT5tYXJrQmFkR3JhbW1hcihvbGRT
ZWxlY3RlZFNlbnRlbmNlKTsKICAgICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmggYi9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA4MGQ3N2FkLi44
NThlMjM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9XZWJDb3JlL3Bh
Z2UvRnJhbWUuaApAQCAtNzEsNyArNzEsNyBAQCBjbGFzcyBIVE1MVGFibGVDZWxsRWxlbWVudDsK
IGNsYXNzIFNjcmlwdENvbnRyb2xsZXI7CiBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvbjsKIGNsYXNz
IFJlbmRlclBhcnQ7Ci1jbGFzcyBTZWxlY3Rpb247CitjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwog
Y2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKIGNsYXNzIFdpZGdldDsKIApAQCAtMjAzLDggKzIw
Myw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7ICAKICAgICBi
b29sIGZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFn
LCBib29sIHdyYXBGbGFnLCBib29sIHN0YXJ0SW5TZWxlY3Rpb24pOwogCi0gICAgY29uc3QgU2Vs
ZWN0aW9uJiBtYXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVzZWQgYXMgZW1hY3MgdXNlcyBp
dC4KLSAgICB2b2lkIHNldE1hcmsoY29uc3QgU2VsZWN0aW9uJik7CisgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgbWFyaygpIGNvbnN0OyAvLyBNYXJrLCB0byBiZSB1c2VkIGFzIGVtYWNzIHVz
ZXMgaXQuCisgICAgdm9pZCBzZXRNYXJrKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAogICAg
IHZvaWQgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qICwgRWRp
dEFjdGlvbiA9IEVkaXRBY3Rpb25VbnNwZWNpZmllZCk7CiAgICAgU3RyaW5nIHNlbGVjdGlvblN0
YXJ0U3R5bGVQcm9wZXJ0eVZhbHVlKGludCBzdHlsZVByb3BlcnR5SUQpIGNvbnN0OwpAQCAtMjE1
LDggKzIxNSw4IEBAIHB1YmxpYzoKIAogICAgIEludFJlY3QgZmlyc3RSZWN0Rm9yUmFuZ2UoUmFu
Z2UqKSBjb25zdDsKICAgICAKLSAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29u
c3QgU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcpOwotICAgIGJvb2wg
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25z
dCBTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5n
KSBjb25zdDsKKyAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24s
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5LCBib29sIHN0
aWxsU2VsZWN0aW5nKSBjb25zdDsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlv
blN0YXJ0KE5vZGUqJiBub2RlVG9SZW1vdmUpIGNvbnN0OwogCkBAIC0yNDEsOCArMjQxLDggQEAg
cHVibGljOgogICAgIFRleHRHcmFudWxhcml0eSBzZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0
OwogICAgIHZvaWQgc2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5KTsKIAot
ICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYpIGNvbnN0Owot
ICAgIGJvb2wgc2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYpIGNvbnN0Owor
ICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBj
b25zdDsKKyAgICBib29sIHNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJikgY29uc3Q7CiAgICAgdm9pZCBjbGVhckNhcmV0UmVjdElmTmVlZGVkKCk7CiAgICAgdm9p
ZCBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7CiAgICAgdm9pZCBzZWxlY3Rpb25MYXlvdXRDaGFu
Z2VkKCk7CkBAIC0zNDQsNyArMzQ0LDcgQEAgcHJpdmF0ZToKICAgICBUZXh0R3JhbnVsYXJpdHkg
bV9zZWxlY3Rpb25HcmFudWxhcml0eTsKIAogICAgIG11dGFibGUgU2VsZWN0aW9uQ29udHJvbGxl
ciBtX3NlbGVjdGlvbkNvbnRyb2xsZXI7Ci0gICAgbXV0YWJsZSBTZWxlY3Rpb24gbV9tYXJrOwor
ICAgIG11dGFibGUgVmlzaWJsZVNlbGVjdGlvbiBtX21hcms7CiAgICAgVGltZXI8RnJhbWU+IG1f
Y2FyZXRCbGlua1RpbWVyOwogICAgIG11dGFibGUgRWRpdG9yIG1fZWRpdG9yOwogICAgIG11dGFi
bGUgRXZlbnRIYW5kbGVyIG1fZXZlbnRIYW5kbGVyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDlhMDcxZmIuLmYxZTdiYTUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKQEAgLTM2NCw3ICszNjQsNyBAQCB2b2lkIFBhZ2U6OnVubWFya0FsbFRleHRNYXRjaGVz
KCkKICAgICB9IHdoaWxlIChmcmFtZSk7CiB9CiAKLWNvbnN0IFNlbGVjdGlvbiYgUGFnZTo6c2Vs
ZWN0aW9uKCkgY29uc3QKK2NvbnN0IFZpc2libGVTZWxlY3Rpb24mIFBhZ2U6OnNlbGVjdGlvbigp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJh
bWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL1BhZ2UuaCBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggNTdiMTkxYS4uY2Y3MTZhMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5o
CkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBQYWdlR3Jv
dXA7CiAgICAgY2xhc3MgUGx1Z2luRGF0YTsKICAgICBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7Ci0g
ICAgY2xhc3MgU2VsZWN0aW9uOworICAgIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAgICAgY2xh
c3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgY2xh
c3MgU2Vzc2lvblN0b3JhZ2U7CkBAIC0xMzcsNyArMTM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBPd25QdHI8U2NoZWR1bGVQYWlySGFzaFNldD4gbV9zY2hlZHVsZWRSdW5Mb29w
UGFpcnM7CiAjZW5kaWYKIAotICAgICAgICBjb25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNv
bnN0OworICAgICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdDsK
IAogICAgICAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAgICAgICAgIGJvb2wgZGVm
ZXJzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGVmZXJzTG9hZGluZzsgfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbSBiL1dlYkNv
cmUvcGFnZS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KaW5kZXggZjBiMDVmOC4u
NTE2Zjk2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlci5tbQorKysgYi9XZWJDb3JlL3BhZ2UvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyLm1tCkBAIC05MDIsNyArOTAyLDcgQEAgc3RhdGljIE5TTXV0YWJsZUFycmF5KiBjb252ZXJ0
VG9OU0FycmF5KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHkKIAogLSAo
V2ViQ29yZVRleHRNYXJrZXJSYW5nZSopdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uCiB7Ci0g
ICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fb2JqZWN0LT5zZWxlY3Rpb24oKTsKKyAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fb2JqZWN0LT5zZWxlY3Rpb24oKTsKICAgICBpZiAo
c2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiB0ZXh0
TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCks
IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4
IDJlNTIxODIuLjIwODhlYjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTIwOTEs
NyArMjA5MSw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpmaWxsSW5saW5lU2VsZWN0aW9uR2Fw
cyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgYmxvY2tYCiAgICAgfQogCiAgICAgaWYgKGNv
bnRhaW5zU3RhcnQgJiYgIWxhc3RTZWxlY3RlZExpbmUpCi0gICAgICAgIC8vIFNlbGVjdGlvbiBt
dXN0IHN0YXJ0IGp1c3QgYWZ0ZXIgb3VyIGxhc3QgbGluZS4KKyAgICAgICAgLy8gVmlzaWJsZVNl
bGVjdGlvbiBtdXN0IHN0YXJ0IGp1c3QgYWZ0ZXIgb3VyIGxhc3QgbGluZS4KICAgICAgICAgbGFz
dFNlbGVjdGVkTGluZSA9IGxhc3RSb290Qm94KCk7CiAKICAgICBpZiAobGFzdFNlbGVjdGVkTGlu
ZSAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbkVuZCAmJiBzZWxlY3Rpb25TdGF0ZSgp
ICE9IFNlbGVjdGlvbkJvdGgpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNw
cAppbmRleCAxYWEwN2U1Li4wNzk1YThlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0
U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIEFTU0VSVChzdGFydFBvc2l0
aW9uLmlzTm90TnVsbCgpICYmIGVuZFBvc2l0aW9uLmlzTm90TnVsbCgpKTsKICAgICBBU1NFUlQo
c3RhcnRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2Rl
KCkgPT0gbm9kZSgpICYmIGVuZFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKSA9PSBub2RlKCkpOwogCi0gICAgU2VsZWN0aW9uIG5ld1NlbGVjdGlv
biA9IFNlbGVjdGlvbihzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgVmlzaWJsZVNl
bGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKTsKIAogICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgp
KQogICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24p
OwpAQCAtMjYwLDkgKzI2MCw5IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNldFNlbGVjdGlv
blJhbmdlKGludCBzdGFydCwgaW50IGVuZCkKICAgICAgICAgZnJhbWUtPnNldFNlbGVjdGlvbkdy
YW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KTsKIH0KIAotU2VsZWN0aW9uIFJlbmRlclRl
eHRDb250cm9sOjpzZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAorVmlzaWJsZVNl
bGVjdGlvbiBSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gU2VsZWN0aW9uKFZpc2libGVQb3NpdGlvbihtX2lubmVyVGV4
dC5nZXQoKSwgc3RhcnQsIFZQX0RFRkFVTFRfQUZGSU5JVFkpLAorICAgIHJldHVybiBWaXNpYmxl
U2VsZWN0aW9uKFZpc2libGVQb3NpdGlvbihtX2lubmVyVGV4dC5nZXQoKSwgc3RhcnQsIFZQX0RF
RkFVTFRfQUZGSU5JVFkpLAogICAgICAgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uKG1f
aW5uZXJUZXh0LmdldCgpLCBlbmQsIFZQX0RFRkFVTFRfQUZGSU5JVFkpKTsKIH0KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKaW5kZXggMDViZGE1YS4uMTU0OWJiMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCkBAIC0yNyw3ICsyNyw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvcm1Db250cm9sRWxlbWVudDsKLWNsYXNzIFNlbGVjdGlv
bjsKK2NsYXNzIFZpc2libGVTZWxlY3Rpb247CiBjbGFzcyBUZXh0Q29udHJvbElubmVyRWxlbWVu
dDsKIGNsYXNzIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDsKIApAQCAtNTcsNyArNTcsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQoaW50KTsKICAgICB2b2lkIHNlbGVj
dCgpOwogICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKTsKLSAg
ICBTZWxlY3Rpb24gc2VsZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CisgICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogICAgIFN0cmluZyB0ZXh0KCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDE1MGE3MmYuLjI4YjQwMmEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC01MTgsNyArNTE4LDcg
QEAgc3RhdGljIHZvaWQgd3JpdGVTZWxlY3Rpb24oVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
ck9iamVjdCogbykKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKICAgICAgICAgdHMgPDwgImNhcmV0
OiBwb3NpdGlvbiAiIDw8IHNlbGVjdGlvbi5zdGFydCgpLm9mZnNldCgpIDw8ICIgb2YgIiA8PCBu
b2RlUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpKTsKICAgICAgICAgaWYgKHNlbGVj
dGlvbi5hZmZpbml0eSgpID09IFVQU1RSRUFNKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAppbmRleCBjYWQ1MGY2Li5kMWJkYzE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cApAQCAtMjU4LDcgKzI1OCw3IEBAIEdhcFJlY3RzIFJvb3RJbmxpbmVCb3g6OmZpbGxMaW5lU2Vs
ZWN0aW9uR2FwKGludCBzZWxUb3AsIGludCBzZWxIZWlnaHQsIFJlbmRlckJsCiAgICAgICAgIGJv
b2wgaXNQcmV2aW91c0JveFNlbGVjdGVkID0gZmlyc3RCb3gtPnNlbGVjdGlvblN0YXRlKCkgIT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOwogICAgICAgICBmb3IgKElubGluZUJveCogYm94
ID0gZmlyc3RCb3gtPm5leHRMZWFmQ2hpbGQoKTsgYm94OyBib3ggPSBib3gtPm5leHRMZWFmQ2hp
bGQoKSkgewogICAgICAgICAgICAgaWYgKGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNQcmV2aW91c0Jv
eFNlbGVjdGVkKSAgLy8gU2VsZWN0aW9uIG1heSBiZSBub24tY29udGlndW91cywgc2VlIGNvbW1l
bnQgYWJvdmUuCisgICAgICAgICAgICAgICAgaWYgKGlzUHJldmlvdXNCb3hTZWxlY3RlZCkgIC8v
IFZpc2libGVTZWxlY3Rpb24gbWF5IGJlIG5vbi1jb250aWd1b3VzLCBzZWUgY29tbWVudCBhYm92
ZS4KICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlQ2VudGVyKGJsb2NrKCktPmZpbGxI
b3Jpem9udGFsU2VsZWN0aW9uR2FwKGJveC0+cGFyZW50KCktPm9iamVjdCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGFzdFggKyB0eCwgc2VsVG9wICsgdHksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3gt
PnhQb3MoKSAtIGxhc3RYLCBzZWxIZWlnaHQsIHBhaW50SW5mbykpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR1RleHRD
b250ZW50RWxlbWVudC5jcHAKaW5kZXggNjA1N2RhOC4uZDhjMTE5YyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdU
ZXh0Q29udGVudEVsZW1lbnQuY3BwCkBAIC00ODAsNyArNDgwLDcgQEAgdm9pZCBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cmluZyhsb25nIGNoYXJudW0sIGxvbmcgbmNoYXJzLCBF
eGNlcHRpb24KICAgICBmb3IgKGxvbmcgaSA9IDA7IGkgPCBuY2hhcnM7ICsraSkKICAgICAgICAg
ZW5kID0gZW5kLm5leHQoKTsKIAotICAgIGNvbnRyb2xsZXItPnNldFNlbGVjdGlvbihTZWxlY3Rp
b24oc3RhcnQsIGVuZCkpOworICAgIGNvbnRyb2xsZXItPnNldFNlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKHN0YXJ0LCBlbmQpKTsKIH0KIAogdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKZGlmZiAtLWdpdCBhL1dl
YktpdC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYmQ4YTk3My4u
ZDZkYTU0OCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0wMi0wOSAgRXJpYyBTZWlkZWwgIDxl
cmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVuYW1lIFNlbGVjdGlvbiB0byBWaXNpYmxlU2VsZWN0aW9uIHRvIGFsbG93IHVz
IHRvIHNlcGFyYXRlCisgICAgICAgIHRoZSBzZWxlY3Rpb25zIHRoZSB1c2VyIHdvcmtzIHdpdGgg
ZnJvbSB0aGUgb25lcyB1c2VkIGJ5CisgICAgICAgIHRoZSBKUyBlZGl0aW5nIEFQSXMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzg1MgorCisgICAg
ICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3NlbGVjdE5T
UmFuZ2U6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJW
aWV3IHRleHRJdGVyYXRvckZvclJlY3Q6XSk6CisKIDIwMDktMDItMDUgIEVyaWMgU2VpZGVsICA8
ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEp1c3RpbiBHYXJjaWEuCmRp
ZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KaW5kZXggZTMyZDk0Ny4uYzMwYjNjZSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQpAQCAtMTExNyw3ICsxMTE3LDcgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNl
ICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgUmVmUHRyPFJhbmdl
PiBkb21SYW5nZSA9IFtzZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpyYW5nZV07CiAgICAgaWYgKGRv
bVJhbmdlKQotICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2Vs
ZWN0aW9uKFNlbGVjdGlvbihkb21SYW5nZS5nZXQoKSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsK
KyAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKGRvbVJhbmdlLmdldCgpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwog
fQogCiAtIChCT09MKV9pc0Rpc3BsYXlpbmdTdGFuZGFsb25lSW1hZ2UKZGlmZiAtLWdpdCBhL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0KaW5kZXggY2UxN2UxYy4uMDliZjMzZSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTIwMjEs
NyArMjAyMSw3IEBAIFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBX
ZWJWaWV3R2V0U2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVuCiAgICAgaWYgKCFjb3JlRnJhbWUp
CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgU2VsZWN0aW9uIHNlbGVjdGlvbkluc2lk
ZVJlY3QoY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChyZWN0U3RhcnQpLCBjb3Jl
RnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHJlY3RFbmQpKTsKKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbkluc2lkZVJlY3QoY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQ
b2ludChyZWN0U3RhcnQpLCBjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHJlY3RF
bmQpKTsKICAgICAKICAgICByZXR1cm4gW1tbV2ViVGV4dEl0ZXJhdG9yIGFsbG9jXSBpbml0V2l0
aFJhbmdlOltET01SYW5nZSBfd3JhcFJhbmdlOnNlbGVjdGlvbkluc2lkZVJlY3QudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKV1dIGF1dG9yZWxlYXNlXTsKIH0K
</data>
<flag name="review"
          id="13299"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>