<?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>55650</bug_id>
          
          <creation_ts>2011-03-02 22:46:51 -0800</creation_ts>
          <short_desc>Give Position&apos;s upstream and downstream more descriptive names</short_desc>
          <delta_ts>2011-03-08 14:06:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52098</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>kalman</cc>
    
    <cc>leviw</cc>
    
    <cc>xji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>361370</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-02 22:46:51 -0800</bug_when>
    <thetext>While I was working on the bug 55098, I realized that VisiblePosition can be upstream even if its affinity claims to be downstream.  This bug is due to the following lines in http://trac.webkit.org/browser/trunk/Source/WebCore/editing/VisiblePosition.cpp.

456	    Position candidate = position.upstream();
457	    if (candidate.isCandidate())
458	        return candidate;
459	    candidate = position.downstream();
460	    if (candidate.isCandidate())
461	        return candidate;

It returns an upstream position but it doesn&apos;t modify its affinity so we end up with a VisiblePosition that stores an upstream position but claims to be a downstream position.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361745</commentid>
    <comment_count>1</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-03 11:00:33 -0800</bug_when>
    <thetext>I believe you&apos;re mixing your concepts here. Position&apos;s upstream/downstream concepts are not the same as VisiblePosition&apos;s; Upstream and downstream Positions are meant to be visually equivalent while upstream and downstream VisiblePositions explicitly are not.

In other words, in the following scenario:

&lt;div&gt;foo&lt;br/&gt;
&lt;span&gt;bar&lt;/span&gt;
&lt;/div&gt;

A Position at the beginning of the second line would upstream to [span, 0] and downstream to [&quot;bar&quot;, 0], but a VisiblePosition would jump from a downstream of [span, 0] to [br, 0].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361974</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-03 14:56:23 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; I believe you&apos;re mixing your concepts here. Position&apos;s upstream/downstream concepts are not the same as VisiblePosition&apos;s; Upstream and downstream Positions are meant to be visually equivalent while upstream and downstream VisiblePositions explicitly are not.

:( I wasn&apos;t aware of this.  Thanks for the clarification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361977</commentid>
    <comment_count>3</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-03 14:57:47 -0800</bug_when>
    <thetext>No problem. The naming is confusing, I know :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362174</commentid>
    <comment_count>4</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2011-03-03 18:18:05 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; No problem. The naming is confusing, I know :(

Maybe someone should do some renaming. Names that are descriptive for upstream()/ downstream()  would be really verbose though I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362295</commentid>
    <comment_count>5</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-03 22:52:22 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Maybe someone should do some renaming. Names that are descriptive for upstream()/ downstream()  would be really verbose though I think.

I think renaming the Position methods would be do-able. Something like next/previousVisuallyEquivalentPosition?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363834</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-07 22:49:34 -0800</bug_when>
    <thetext>Okay, let&apos;s rename these two member functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363898</commentid>
    <comment_count>7</comment_count>
      <attachid>85034</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-08 01:21:56 -0800</bug_when>
    <thetext>Created attachment 85034
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364146</commentid>
    <comment_count>8</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-08 14:06:51 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=85034) [details]
&gt; work in progress

I&apos;m glad you went with renaming the Position, and not VisiblePosition methods. This is a good change except I&apos;m slightly concerned with the names containing &quot;next&quot; and &quot;previous&quot; (despite that being my own proposal!). They aren&apos;t strictly next/previous, as calling the function again won&apos;t yield a further position that is also visually equivalent. They&apos;re really more like higher and lower visually equivalent boundary positions.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85034</attachid>
            <date>2011-03-08 01:21:56 -0800</date>
            <delta_ts>2011-03-08 01:21:56 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-55650-20110308012155.patch</filename>
            <type>text/plain</type>
            <size>58164</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNTUxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDMtMDggIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgR2l2ZSBQb3NpdGlvbiZhcG9zO3MgdXBzdHJlYW0gYW5kIGRvd25z
dHJlYW0gbW9yZSBkZXNjcmlwdGl2ZSBuYW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU2NTAKKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BT
ISkKKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUub3JkZXI6
CisgICAgICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9u
OjphdEVkaXRpbmdCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJldmlv
dXNWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlv
bjo6bmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
c2l0aW9uOjpsZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmRv
d25zdHJlYW1JZ25vcmluZ0VkaXRpbmdCb3VuZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnVw
c3RyZWFtSWdub3JpbmdFZGl0aW5nQm91bmRhcmllcyk6CisgICAgICAgICogZG9tL1Bvc2l0aW9u
Lmg6CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpl
ZGl0aW5nU3RhcnRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxlbWVu
dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5k
Ojpmb3JtYXRTZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21t
YW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZl
Rm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUlubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpy
ZW1vdmVJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6
bm9kZUZ1bGx5U2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
Om5vZGVGdWxseVVuc2VsZWN0ZWQpOgorICAgICAgICAqIGVkaXRpbmcvQnJlYWtCbG9ja3F1b3Rl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpk
b0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVwYXJlV2hpdGVzcGFjZUF0
UG9zaXRpb25Gb3JTcGxpdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHREb3duc3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoQ29udGVudHNUb05ld0Jsb2NrSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsZWFu
dXBBZnRlckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
Ojptb3ZlUGFyYWdyYXBoV2l0aENsb25lcyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eU1haWxCbG9ja3F1b3RlZFBhcmFncmFwaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25Bdm9pZGluZ1Nw
ZWNpYWxFbGVtZW50Qm91bmRhcnkpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpp
bml0aWFsaXplUG9zaXRpb25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRleHREaXJlY3Rpb25Gb3JTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlz
dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Omxpc3Rp
ZnlQYXJhZ3JhcGgpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JD
b21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFRleHRDb21tYW5kOjppbnB1dCk6CisgICAgICAg
ICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9T
ZWxlY3Rpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRy
b2xsZXI6OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5
UHJlc3NlZCk6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjYW5vbmljYWxpemVDYW5kaWRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpjYW5vbmljYWxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckFmdGVyKToKKyAg
ICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbjo6dXBkYXRlU2VsZWN0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uOjp2YWxpZGF0ZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRp
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6aXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjppc0xhc3RQb3NpdGlvbkJlZm9yZVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Omlz
VmlzaWJseUFkamFjZW50KToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpuZWVkSW50ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpj
cmVhdGVWaXNpYmxlUG9zaXRpb24pOgorCiAyMDExLTAzLTA4ICBNYXJrdXMgR29ldHogIDxndXJ1
ekBndXJ1ei5kZT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlh
bnNlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA4MDUzMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQzLDEyICsxMjQz
LDEyIEBAIF9fWk5LN1dlYkNvcmU4RG9jdW1lbnQ0Ym9keUV2CiBfX1pOSzdXZWJDb3JlOERvY3Vt
ZW50NmRvbWFpbkV2CiBfX1pOSzdXZWJDb3JlOEludFBvaW50Y3Y3Q0dQb2ludEV2CiBfX1pOSzdX
ZWJDb3JlOEludFBvaW50Y3Y4X05TUG9pbnRFdgotX19aTks3V2ViQ29yZThQb3NpdGlvbjEwZG93
bnN0cmVhbUVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmU4
UG9zaXRpb24xM2NvbnRhaW5lck5vZGVFdgogX19aTks3V2ViQ29yZThQb3NpdGlvbjI0cGFyZW50
QW5jaG9yZWRFcXVpdmFsZW50RXYKK19fWk5LN1dlYkNvcmU4UG9zaXRpb24zMG5leHRWaXN1YWxs
eUVxdWl2YWxlbnRQb3NpdGlvbkVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9f
Wk5LN1dlYkNvcmU4UG9zaXRpb24yNWxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb25FTlNfOUVBZmZp
bml0eUViCitfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMzRwcmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVu
dFBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTks3V2ViQ29y
ZThQb3NpdGlvbjI2dHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb25FTlNfOUVBZmZpbml0eUViCi1f
X1pOSzdXZWJDb3JlOFBvc2l0aW9uOHVwc3RyZWFtRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3Np
bmdSdWxlRQogX19aTks3V2ViQ29yZTlET01XaW5kb3cyN3BlbmRpbmdVbmxvYWRFdmVudExpc3Rl
bmVyc0V2CiBfX1pOSzdXZWJDb3JlOUZsb2F0UXVhZDExYm91bmRpbmdCb3hFdgogX19aTks3V2Vi
Q29yZTlGbG9hdFJlY3RjdjdfTlNSZWN0RXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
b3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgkocmV2aXNp
b24gODA1MzApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTE3LDcgKzI5MTcsNyBAQCBfX1pON1dlYkNvcmUyNWNhbkhhdmVDaGlsZHJlbkZvckVk
aXRpbmdFCiBfX1pON1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjRpbml0RVJLTlNfOFBvc2l0aW9u
RU5TXzlFQWZmaW5pdHlFCiBfX1pON1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjE3Y2Fub25pY2Fs
UG9zaXRpb25FUktOU184UG9zaXRpb25FCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQzNnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0V2Ci1fX1pOSzdXZWJDb3JlOFBvc2l0aW9uOHVw
c3RyZWFtRU5TMF8yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKK19fWk5LN1dlYkNvcmU4
UG9zaXRpb24zNHByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb25FTlNfMjdFZGl0aW5n
Qm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pON1dlYkNvcmVMMjNlbmNsb3NpbmdWaXN1YWxCb3Vu
ZGFyeUVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmVMMzhlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0
aW5jdFBvc2l0aW9uc0VQTlNfNE5vZGVFCiBfX1pOSzdXZWJDb3JlNE5vZGUxN2lzQ29udGVudEVk
aXRhYmxlRXYKQEAgLTI5MzQsNyArMjkzNCw3IEBAIF9fWk43V2ViQ29yZThQb3NpdGlvbkMyRU4z
V1RGMTBQYXNzUmVmUHQKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24xMWlzQ2FuZGlkYXRlRXYKIF9f
Wk43V2ViQ29yZThQb3NpdGlvbjQ0aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dp
dGhIZWlnaHRFUE5TXzEyUmVuZGVyT2JqZWN0RQogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0
MjduZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW5FdgotX19aTks3V2ViQ29yZThQb3NpdGlvbjEw
ZG93bnN0cmVhbUVOUzBfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCitfX1pOSzdXZWJD
b3JlOFBvc2l0aW9uMzBuZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb25FTlNfMjdFZGl0aW5n
Qm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlMTZQb3NpdGlvbkl0ZXJhdG9yNWF0
RW5kRXYKIF9fWk43V2ViQ29yZTE2UG9zaXRpb25JdGVyYXRvcjlpbmNyZW1lbnRFdgogX19aTjdX
ZWJDb3JlMTNuZXh0Q2FuZGlkYXRlRVJLTlNfOFBvc2l0aW9uRQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9z
aXRpb24uY3BwCShyZXZpc2lvbiA4MDUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MiwxMSArMzQyLDExIEBAIGJvb2wgUG9zaXRpb246
OmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck4KIC8vICAgIHBvc2l0aW9ucyBhcmUgYm90aCBub24g
ZWRpdGFibGUuCiBib29sIFBvc2l0aW9uOjphdEVkaXRpbmdCb3VuZGFyeSgpIGNvbnN0CiB7Ci0g
ICAgUG9zaXRpb24gbmV4dFBvc2l0aW9uID0gZG93bnN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3Vu
ZGFyeSk7CisgICAgUG9zaXRpb24gbmV4dFBvc2l0aW9uID0gbmV4dFZpc3VhbGx5RXF1aXZhbGVu
dFBvc2l0aW9uKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKICAgICBpZiAoYXRGaXJzdEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUoKSAmJiBuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIW5leHRQ
b3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgCi0gICAgUG9zaXRpb24gcHJldlBvc2l0aW9uID0gdXBzdHJl
YW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOworICAgIFBvc2l0aW9uIHByZXZQb3NpdGlvbiA9
IHByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRh
cnkpOwogICAgIGlmIChhdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgcHJldlBvc2l0
aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250
ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIApAQCAtNDkzLDcg
KzQ5Myw3IEBAIHN0YXRpYyBOb2RlKiBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShOb2QKICAgICBy
ZXR1cm4gbm9kZTsKIH0KIAotLy8gdXBzdHJlYW0oKSBhbmQgZG93bnN0cmVhbSgpIHdhbnQgdG8g
cmV0dXJuIHBvc2l0aW9ucyB0aGF0IGFyZSBlaXRoZXIgaW4gYQorLy8gcHJldmlvdXNWaXN1YWxs
eUVxdWl2YWxlbnRQb3NpdGlvbigpIGFuZCBuZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24o
KSB3YW50IHRvIHJldHVybiBwb3NpdGlvbnMgdGhhdCBhcmUgZWl0aGVyIGluIGEKIC8vIHRleHQg
bm9kZSBvciBhdCBqdXN0IGJlZm9yZSBhIG5vbi10ZXh0IG5vZGUuICBUaGlzIG1ldGhvZCBjaGVj
a3MgZm9yIHRoYXQuCiBzdGF0aWMgYm9vbCBpc1N0cmVhbWVyKGNvbnN0IFBvc2l0aW9uSXRlcmF0
b3ImIHBvcykKIHsKQEAgLTUwNiwxMyArNTA2LDEzIEBAIHN0YXRpYyBib29sIGlzU3RyZWFtZXIo
Y29uc3QgUG9zaXRpb25JdGUKICAgICByZXR1cm4gcG9zLmF0U3RhcnRPZk5vZGUoKTsKIH0KIAot
Ly8gVGhpcyBmdW5jdGlvbiBhbmQgZG93bnN0cmVhbSgpIGFyZSB1c2VkIGZvciBtb3ZpbmcgYmFj
ayBhbmQgZm9ydGggYmV0d2VlbiB2aXN1YWxseSBlcXVpdmFsZW50IGNhbmRpZGF0ZXMuCisvLyBU
aGlzIGZ1bmN0aW9uIGFuZCBuZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSBhcmUgdXNl
ZCBmb3IgbW92aW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdmlzdWFsbHkgZXF1aXZhbGVudCBj
YW5kaWRhdGVzLgogLy8gRm9yIGV4YW1wbGUsIGZvciB0aGUgdGV4dCBub2RlICJmb28gICAgIGJh
ciIgd2hlcmUgd2hpdGVzcGFjZSBpcyBjb2xsYXBzaWJsZSwgdGhlcmUgYXJlIHR3byBjYW5kaWRh
dGVzIAogLy8gdGhhdCBtYXAgdG8gdGhlIFZpc2libGVQb3NpdGlvbiBiZXR3ZWVuICdiJyBhbmQg
dGhlIHNwYWNlLiAgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbGVmdCBjYW5kaWRhdGUg
Ci0vLyBhbmQgZG93bnN0cmVhbSgpIHdpbGwgcmV0dXJuIHRoZSByaWdodCBvbmUuCi0vLyBBbHNv
LCB1cHN0cmVhbSgpIHdpbGwgcmV0dXJuIFtib3VuZGFyeSwgMF0gZm9yIGFueSBvZiB0aGUgcG9z
aXRpb25zIGZyb20gW2JvdW5kYXJ5LCAwXSB0byB0aGUgZmlyc3QgY2FuZGlkYXRlCisvLyBhbmQg
bmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCkgd2lsbCByZXR1cm4gdGhlIHJpZ2h0IG9u
ZS4KKy8vIEFsc28sIHByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSB3aWxsIHJl
dHVybiBbYm91bmRhcnksIDBdIGZvciBhbnkgb2YgdGhlIHBvc2l0aW9ucyBmcm9tIFtib3VuZGFy
eSwgMF0gdG8gdGhlIGZpcnN0IGNhbmRpZGF0ZQogLy8gaW4gYm91bmRhcnksIHdoZXJlIGVuZHNP
Zk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKGJvdW5kYXJ5KSBpcyB0cnVlLgotUG9z
aXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxl
KSBjb25zdAorUG9zaXRpb24gUG9zaXRpb246OnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9z
aXRpb24oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiB7CiAgICAgTm9k
ZSogc3RhcnROb2RlID0gZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKQEAg
LTYyOCwxMyArNjI4LDEzIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91
bmQKICAgICByZXR1cm4gbGFzdFZpc2libGU7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gYW5kIHVw
c3RyZWFtKCkgYXJlIHVzZWQgZm9yIG1vdmluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHZpc3Vh
bGx5IGVxdWl2YWxlbnQgY2FuZGlkYXRlcy4KKy8vIFRoaXMgZnVuY3Rpb24gYW5kIHByZXZpb3Vz
VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSBhcmUgdXNlZCBmb3IgbW92aW5nIGJhY2sgYW5k
IGZvcnRoIGJldHdlZW4gdmlzdWFsbHkgZXF1aXZhbGVudCBjYW5kaWRhdGVzLgogLy8gRm9yIGV4
YW1wbGUsIGZvciB0aGUgdGV4dCBub2RlICJmb28gICAgIGJhciIgd2hlcmUgd2hpdGVzcGFjZSBp
cyBjb2xsYXBzaWJsZSwgdGhlcmUgYXJlIHR3byBjYW5kaWRhdGVzIAogLy8gdGhhdCBtYXAgdG8g
dGhlIFZpc2libGVQb3NpdGlvbiBiZXR3ZWVuICdiJyBhbmQgdGhlIHNwYWNlLiAgVGhpcyBmdW5j
dGlvbiB3aWxsIHJldHVybiB0aGUgcmlnaHQgY2FuZGlkYXRlIAotLy8gYW5kIHVwc3RyZWFtKCkg
d2lsbCByZXR1cm4gdGhlIGxlZnQgb25lLgotLy8gQWxzbywgZG93bnN0cmVhbSgpIHdpbGwgcmV0
dXJuIHRoZSBsYXN0IHBvc2l0aW9uIGluIHRoZSBsYXN0IGF0b21pYyBub2RlIGluIGJvdW5kYXJ5
IGZvciBhbGwgb2YgdGhlIHBvc2l0aW9ucworLy8gYW5kIHByZXZpb3VzVmlzdWFsbHlFcXVpdmFs
ZW50UG9zaXRpb24oKSB3aWxsIHJldHVybiB0aGUgbGVmdCBvbmUuCisvLyBBbHNvLCBuZXh0Vmlz
dWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSB3aWxsIHJldHVybiB0aGUgbGFzdCBwb3NpdGlvbiBp
biB0aGUgbGFzdCBhdG9taWMgbm9kZSBpbiBib3VuZGFyeSBmb3IgYWxsIG9mIHRoZSBwb3NpdGlv
bnMKIC8vIGluIGJvdW5kYXJ5IGFmdGVyIHRoZSBsYXN0IGNhbmRpZGF0ZSwgd2hlcmUgZW5kc09m
Tm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoYm91bmRhcnkpLgotUG9zaXRpb24gUG9z
aXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0
CitQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKEVkaXRp
bmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogewogICAgIE5vZGUqIHN0YXJ0Tm9k
ZSA9IGRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCkBAIC05NTcsNyArOTU3
LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmxlYWRpbmdXaGl0ZXNwYWNlUG9zaQogICAgIGlmIChp
c051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAgICAgCi0gICAgaWYgKHVwc3Ry
ZWFtKCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCisgICAgaWYgKHByZXZp
b3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKS5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdO
YW1lKGJyVGFnKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBw
cmV2ID0gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihhZmZpbml0eSk7CkBAIC0xMDM2LDcgKzEw
MzYsNyBAQCBzdGF0aWMgUG9zaXRpb24gZG93bnN0cmVhbUlnbm9yaW5nRWRpdGluCiAgICAgUG9z
aXRpb24gbGFzdFBvc2l0aW9uOwogICAgIHdoaWxlIChwb3NpdGlvbiAhPSBsYXN0UG9zaXRpb24p
IHsKICAgICAgICAgbGFzdFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgICAgIHBvc2l0aW9uID0g
cG9zaXRpb24uZG93bnN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgIHBv
c2l0aW9uID0gcG9zaXRpb24ubmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKENhbkNyb3Nz
RWRpdGluZ0JvdW5kYXJ5KTsKICAgICB9CiAgICAgcmV0dXJuIHBvc2l0aW9uOwogfQpAQCAtMTA0
Niw3ICsxMDQ2LDcgQEAgc3RhdGljIFBvc2l0aW9uIHVwc3RyZWFtSWdub3JpbmdFZGl0aW5nQgog
ICAgIFBvc2l0aW9uIGxhc3RQb3NpdGlvbjsKICAgICB3aGlsZSAocG9zaXRpb24gIT0gbGFzdFBv
c2l0aW9uKSB7CiAgICAgICAgIGxhc3RQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgICAgICBwb3Np
dGlvbiA9IHBvc2l0aW9uLnVwc3RyZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKKyAgICAg
ICAgcG9zaXRpb24gPSBwb3NpdGlvbi5wcmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9u
KENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKICAgICB9CiAgICAgcmV0dXJuIHBvc2l0aW9uOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHJldmlzaW9uIDgwNTMwKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw4ICsxNDksOCBAQCBw
dWJsaWM6CiAgICAgUG9zaXRpb24gdHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFmZmluaXR5
LCBib29sIGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlID0gZmFsc2UpIGNvbnN0Owog
ICAgIAogICAgIC8vIFRoZXNlIHJldHVybiB1c2VmdWwgdmlzdWFsbHkgZXF1aXZhbGVudCBwb3Np
dGlvbnMuCi0gICAgUG9zaXRpb24gdXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxl
ID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpIGNvbnN0OwotICAgIFBvc2l0aW9uIGRvd25z
dHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91
bmRhcnkpIGNvbnN0OworICAgIFBvc2l0aW9uIHByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9z
aXRpb24oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91
bmRhcnkpIGNvbnN0OworICAgIFBvc2l0aW9uIG5leHRWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlv
bihFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFy
eSkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBpc0NhbmRpZGF0ZSgpIGNvbnN0OwogICAgIGJvb2wg
aW5SZW5kZXJlZFRleHQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24g
ODA1MzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTgwLDExICsxNTgwLDExIEBAIFBvc2l0aW9uIFJhbmdlOjplZGl0aW5nU3RhcnRQb3NpdGlv
bigpIGMKIAogICAgIC8vIGlmIHRoZSBzZWxlY3Rpb24gc3RhcnRzIGp1c3QgYmVmb3JlIGEgcGFy
YWdyYXBoIGJyZWFrLCBza2lwIG92ZXIgaXQKICAgICBpZiAoaXNFbmRPZlBhcmFncmFwaCh2aXNp
YmxlUG9zaXRpb24pKQotICAgICAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLm5leHQoKS5kZWVw
RXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlv
bi5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKS5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24o
KTsKIAogICAgIC8vIG90aGVyd2lzZSwgbWFrZSBzdXJlIHRvIGJlIGF0IHRoZSBzdGFydCBvZiB0
aGUgZmlyc3Qgc2VsZWN0ZWQgbm9kZSwKICAgICAvLyBpbnN0ZWFkIG9mIHBvc3NpYmx5IGF0IHRo
ZSBlbmQgb2YgdGhlIGxhc3Qgbm9kZSBiZWZvcmUgdGhlIHNlbGVjdGlvbgotICAgIHJldHVybiB2
aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7CisgICAgcmV0dXJu
IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQ
b3NpdGlvbigpOwogfQogCiBOb2RlKiBSYW5nZTo6c2hhZG93VHJlZVJvb3ROb2RlKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZC5jcHAJKHJldmlzaW9uIDgwNTMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3
IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpmb3JtYXRTZWwKIHsKICAgICAvLyBT
cGVjaWFsIGNhc2UgZW1wdHkgdW5zcGxpdHRhYmxlIGVsZW1lbnRzIGJlY2F1c2UgdGhlcmUncyBu
b3RoaW5nIHRvIHNwbGl0CiAgICAgLy8gYW5kIHRoZXJlJ3Mgbm90aGluZyB0byBtb3ZlLgotICAg
IFBvc2l0aW9uIHN0YXJ0ID0gc3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25z
dHJlYW0oKTsKKyAgICBQb3NpdGlvbiBzdGFydCA9IHN0YXJ0T2ZTZWxlY3Rpb24uZGVlcEVxdWl2
YWxlbnQoKS5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKICAgICBpZiAoaXNBdFVu
c3BsaXR0YWJsZUVsZW1lbnQoc3RhcnQpKSB7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBibG9j
a3F1b3RlID0gY3JlYXRlQmxvY2tFbGVtZW50KCk7CiAgICAgICAgIGluc2VydE5vZGVBdChibG9j
a3F1b3RlLCBzdGFydCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcAkocmV2aXNpb24gODA1MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUwLDggKzQ1MCw4IEBA
IEFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2MKICAgICAsIG1fc3R5bGUo
c3R5bGUtPmNvcHkoKSkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKQogICAg
ICwgbV9wcm9wZXJ0eUxldmVsKHByb3BlcnR5TGV2ZWwpCi0gICAgLCBtX3N0YXJ0KGVuZGluZ1Nl
bGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpKQotICAgICwgbV9lbmQoZW5kaW5nU2VsZWN0
aW9uKCkuZW5kKCkudXBzdHJlYW0oKSkKKyAgICAsIG1fc3RhcnQoZW5kaW5nU2VsZWN0aW9uKCku
c3RhcnQoKS5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSkKKyAgICAsIG1fZW5kKGVu
ZGluZ1NlbGVjdGlvbigpLmVuZCgpLnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24o
KSkKICAgICAsIG1fdXNlRW5kaW5nU2VsZWN0aW9uKHRydWUpCiAgICAgLCBtX3N0eWxlZElubGlu
ZUVsZW1lbnQoMCkKICAgICAsIG1fcmVtb3ZlT25seShmYWxzZSkKQEAgLTQ3OCw4ICs0NzgsOCBA
QCBBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQoUGFzCiAgICAgLCBtX3N0eWxl
KEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCkpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24oZWRpdGluZ0Fj
dGlvbikKICAgICAsIG1fcHJvcGVydHlMZXZlbChQcm9wZXJ0eURlZmF1bHQpCi0gICAgLCBtX3N0
YXJ0KGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpKQotICAgICwgbV9lbmQo
ZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCkudXBzdHJlYW0oKSkKKyAgICAsIG1fc3RhcnQoZW5kaW5n
U2VsZWN0aW9uKCkuc3RhcnQoKS5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSkKKyAg
ICAsIG1fZW5kKGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLnByZXZpb3VzVmlzdWFsbHlFcXVpdmFs
ZW50UG9zaXRpb24oKSkKICAgICAsIG1fdXNlRW5kaW5nU2VsZWN0aW9uKHRydWUpCiAgICAgLCBt
X3N0eWxlZElubGluZUVsZW1lbnQoZWxlbWVudCkKICAgICAsIG1fcmVtb3ZlT25seShyZW1vdmVP
bmx5KQpAQCAtNDkyLDggKzQ5Miw4IEBAIEFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29t
bWFuZChEb2MKICAgICAsIG1fc3R5bGUoc3R5bGUtPmNvcHkoKSkKICAgICAsIG1fZWRpdGluZ0Fj
dGlvbihlZGl0aW5nQWN0aW9uKQogICAgICwgbV9wcm9wZXJ0eUxldmVsKFByb3BlcnR5RGVmYXVs
dCkKLSAgICAsIG1fc3RhcnQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkp
Ci0gICAgLCBtX2VuZChlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpKQorICAgICwg
bV9zdGFydChlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQ
b3NpdGlvbigpKQorICAgICwgbV9lbmQoZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCkucHJldmlvdXNW
aXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpKQogICAgICwgbV91c2VFbmRpbmdTZWxlY3Rpb24o
dHJ1ZSkKICAgICAsIG1fc3R5bGVkSW5saW5lRWxlbWVudCgwKQogICAgICwgbV9yZW1vdmVPbmx5
KHRydWUpCkBAIC02NjksNyArNjY5LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlS
ZWxhdGl2ZUZvbgogICAgIGVsc2UKICAgICAgICAgYmV5b25kRW5kID0gZW5kLmRlcHJlY2F0ZWRO
b2RlKCktPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAKLSAgICBzdGFydCA9IHN0YXJ0LnVwc3Ry
ZWFtKCk7IC8vIE1vdmUgdXBzdHJlYW0gdG8gZW5zdXJlIHdlIGRvIG5vdCBhZGQgcmVkdW5kYW50
IHNwYW5zLgorICAgIHN0YXJ0ID0gc3RhcnQucHJldmlvdXNWaXN1YWxseUVxdWl2YWxlbnRQb3Np
dGlvbigpOyAvLyBNb3ZlIHVwc3RyZWFtIHRvIGVuc3VyZSB3ZSBkbyBub3QgYWRkIHJlZHVuZGFu
dCBzcGFucy4KICAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOwog
ICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9kZSkpIC8vIE1vdmUgb3V0IG9mIHRl
eHQgbm9kZSBpZiByYW5nZSBkb2VzIG5vdCBpbmNsdWRlIGl0cyBjaGFyYWN0ZXJzLgogICAgICAg
ICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKQEAgLTkwMiw3ICs5
MDIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgLy8g
VGhpcyB3aWxsIGVuc3VyZSB3ZSByZW1vdmUgYWxsIHRyYWNlcyBvZiB0aGUgcmVsZXZhbnQgc3R5
bGVzIGZyb20gdGhlIHNlbGVjdGlvbgogICAgIC8vIGFuZCBwcmV2ZW50IHVzIGZyb20gYWRkaW5n
IHJlZHVuZGFudCBvbmVzLCBhcyBkZXNjcmliZWQgaW46CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVt
LzM3MjQzNDQ+IEJvbGRpbmcgYW5kIHVuYm9sZGluZyBjcmVhdGVzIGV4dHJhbmVvdXMgdGFncwot
ICAgIFBvc2l0aW9uIHJlbW92ZVN0YXJ0ID0gc3RhcnQudXBzdHJlYW0oKTsKKyAgICBQb3NpdGlv
biByZW1vdmVTdGFydCA9IHN0YXJ0LnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24o
KTsKICAgICBXcml0aW5nRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBOYXR1cmFsV3JpdGluZ0Rp
cmVjdGlvbjsKICAgICBib29sIGhhc1RleHREaXJlY3Rpb24gPSBzdHlsZS0+dGV4dERpcmVjdGlv
bih0ZXh0RGlyZWN0aW9uKTsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZVdpdGhvdXRF
bWJlZGRpbmc7CkBAIC05MjEsNyArOTIxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlJbmxpbmVTdHlsZQogCiAgICAgICAgIFBvc2l0aW9uIGVtYmVkZGluZ1JlbW92ZUVuZCA9IGVu
ZDsKICAgICAgICAgaWYgKGVuZFVuc3BsaXRBbmNlc3RvciAmJiBub2RlRnVsbHlTZWxlY3RlZChl
bmRVbnNwbGl0QW5jZXN0b3IsIHJlbW92ZVN0YXJ0LCBlbmQpKQotICAgICAgICAgICAgZW1iZWRk
aW5nUmVtb3ZlRW5kID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoZW5kVW5zcGxpdEFuY2Vz
dG9yKS5kb3duc3RyZWFtKCk7CisgICAgICAgICAgICBlbWJlZGRpbmdSZW1vdmVFbmQgPSBwb3Np
dGlvbkluUGFyZW50QmVmb3JlTm9kZShlbmRVbnNwbGl0QW5jZXN0b3IpLm5leHRWaXN1YWxseUVx
dWl2YWxlbnRQb3NpdGlvbigpOwogCiAgICAgICAgIGlmIChlbWJlZGRpbmdSZW1vdmVFbmQgIT0g
cmVtb3ZlU3RhcnQgfHwgZW1iZWRkaW5nUmVtb3ZlRW5kICE9IGVuZCkgewogICAgICAgICAgICAg
c3R5bGVXaXRob3V0RW1iZWRkaW5nID0gc3R5bGUtPmNvcHkoKTsKQEAgLTEzNjQsNyArMTM2NCw3
IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKICAgICBBU1NFUlQo
ZW5kLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKTsKICAgICBBU1NFUlQoY29tcGFyZVBvc2l0
aW9ucyhzdGFydCwgZW5kKSA8PSAwKTsKIAotICAgIFBvc2l0aW9uIHB1c2hEb3duU3RhcnQgPSBz
dGFydC5kb3duc3RyZWFtKCk7CisgICAgUG9zaXRpb24gcHVzaERvd25TdGFydCA9IHN0YXJ0Lm5l
eHRWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpOwogICAgIC8vIElmIHRoZSBwdXNoRG93blN0
YXJ0IGlzIGF0IHRoZSBlbmQgb2YgYSB0ZXh0IG5vZGUsIHRoZW4gdGhpcyBub2RlIGlzIG5vdCBm
dWxseSBzZWxlY3RlZC4KICAgICAvLyBNb3ZlIGl0IHRvIHRoZSBuZXh0IGRlZXAgcXVpdmFsZW50
IHBvc2l0aW9uIHRvIGF2b2lkIHJlbW92aW5nIHRoZSBzdHlsZSBmcm9tIHRoaXMgbm9kZS4KICAg
ICAvLyBlLmcuIGlmIHB1c2hEb3duU3RhcnQgd2FzIGF0IFBvc2l0aW9uKCJoZWxsbyIsIDUpIGlu
IDxiPmhlbGxvPGRpdj53b3JsZDwvZGl2PjwvYj4sIHdlIHdhbnQgUG9zaXRpb24oIndvcmxkIiwg
MCkgaW5zdGVhZC4KQEAgLTEzNzIsNyArMTM3Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OnJlbW92ZUlubGluZVN0eWwKICAgICBpZiAocHVzaERvd25TdGFydENvbnRhaW5lciAmJiBwdXNo
RG93blN0YXJ0Q29udGFpbmVyLT5pc1RleHROb2RlKCkKICAgICAgICAgJiYgcHVzaERvd25TdGFy
dC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPT0gcHVzaERvd25TdGFydENvbnRhaW5l
ci0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCiAgICAgICAgIHB1c2hEb3duU3RhcnQgPSBuZXh0Vmlz
dWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwdXNoRG93blN0YXJ0KTsKLSAgICBQb3NpdGlvbiBwdXNo
RG93bkVuZCA9IGVuZC51cHN0cmVhbSgpOworICAgIFBvc2l0aW9uIHB1c2hEb3duRW5kID0gZW5k
LnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKIAogICAgIHB1c2hEb3duSW5s
aW5lU3R5bGVBcm91bmROb2RlKHN0eWxlLCBwdXNoRG93blN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkp
OwogICAgIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKHN0eWxlLCBwdXNoRG93bkVuZC5k
ZXByZWNhdGVkTm9kZSgpKTsKQEAgLTE0MzYsNyArMTQzNiw3IEBAIGJvb2wgQXBwbHlTdHlsZUNv
bW1hbmQ6Om5vZGVGdWxseVNlbGVjdGUKICAgICBBU1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgp
KTsKIAogICAgIHJldHVybiBjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZShub2RlKSwgc3RhcnQpID49IDAKLSAgICAgICAgJiYgY29tcGFyZVBvc2l0aW9ucyhsYXN0
UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUpLnVwc3RyZWFtKCksIGVuZCkgPD0gMDsKKyAgICAg
ICAgJiYgY29tcGFyZVBvc2l0aW9ucyhsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUpLnBy
ZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSwgZW5kKSA8PSAwOwogfQogCiBib29s
IEFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlVbnNlbGVjdGVkKE5vZGUgKm5vZGUsIGNvbnN0
IFBvc2l0aW9uICZzdGFydCwgY29uc3QgUG9zaXRpb24gJmVuZCkgY29uc3QKQEAgLTE0NDQsNyAr
MTQ0NCw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om5vZGVGdWxseVVuc2VsZWMKICAgICBB
U1NFUlQobm9kZSk7CiAgICAgQVNTRVJUKG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7CiAKLSAgICBi
b29sIGlzRnVsbHlCZWZvcmVTdGFydCA9IGNvbXBhcmVQb3NpdGlvbnMobGFzdFBvc2l0aW9uSW5P
ckFmdGVyTm9kZShub2RlKS51cHN0cmVhbSgpLCBzdGFydCkgPCAwOworICAgIGJvb2wgaXNGdWxs
eUJlZm9yZVN0YXJ0ID0gY29tcGFyZVBvc2l0aW9ucyhsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2Rl
KG5vZGUpLnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSwgc3RhcnQpIDwgMDsK
ICAgICBib29sIGlzRnVsbHlBZnRlckVuZCA9IGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKG5vZGUpLCBlbmQpID4gMDsKIAogICAgIHJldHVybiBpc0Z1bGx5QmVm
b3JlU3RhcnQgfHwgaXNGdWxseUFmdGVyRW5kOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA4MDUzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDkgKzYxLDkgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpk
b0FwcGx5KCkKICAgICAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBlbmRp
bmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKICAgICAKLSAgICAvLyBwb3MgaXMgYSBwb3Np
dGlvbiBlcXVpdmFsZW50IHRvIHRoZSBjYXJldC4gIFdlIHVzZSBkb3duc3RyZWFtKCkgc28gdGhh
dCBwb3Mgd2lsbCAKKyAgICAvLyBwb3MgaXMgYSBwb3NpdGlvbiBlcXVpdmFsZW50IHRvIHRoZSBj
YXJldC4gIFdlIHVzZSBuZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSBzbyB0aGF0IHBv
cyB3aWxsIAogICAgIC8vIGJlIGluIHRoZSBmaXJzdCBub2RlIHRoYXQgd2UgbmVlZCB0byBtb3Zl
ICh0aGVyZSBhcmUgYSBmZXcgZXhjZXB0aW9ucyB0byB0aGlzLCBzZWUgYmVsb3cpLgotICAgIFBv
c2l0aW9uIHBvcyA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpOworICAg
IFBvc2l0aW9uIHBvcyA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkubmV4dFZpc3VhbGx5RXF1
aXZhbGVudFBvc2l0aW9uKCk7CiAgICAgCiAgICAgLy8gRmluZCB0aGUgdG9wLW1vc3QgYmxvY2tx
dW90ZSBmcm9tIHRoZSBzdGFydC4KICAgICBFbGVtZW50KiB0b3BCbG9ja3F1b3RlID0gMDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
CShyZXZpc2lvbiA4MDUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTIsOSArNDkyLDkgQEAgdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6cHJlcGFyZVdoaXRlcwogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBEZWxldGUgY29sbGFwc2VkIHdoaXRlc3BhY2Ugc28gdGhhdCBpbnNlcnRpbmcgbmJzcHMgZG9l
c24ndCB1bmNvbGxhcHNlIGl0LgotICAgIFBvc2l0aW9uIHVwc3RyZWFtUG9zID0gcG9zaXRpb24u
dXBzdHJlYW0oKTsKLSAgICBkZWxldGVJbnNpZ25pZmljYW50VGV4dChwb3NpdGlvbi51cHN0cmVh
bSgpLCBwb3NpdGlvbi5kb3duc3RyZWFtKCkpOwotICAgIHBvc2l0aW9uID0gdXBzdHJlYW1Qb3Mu
ZG93bnN0cmVhbSgpOworICAgIFBvc2l0aW9uIHVwc3RyZWFtUG9zID0gcG9zaXRpb24ucHJldmlv
dXNWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpOworICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRU
ZXh0KHBvc2l0aW9uLnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSwgcG9zaXRp
b24ubmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCkpOworICAgIHBvc2l0aW9uID0gdXBz
dHJlYW1Qb3MubmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCk7CiAKICAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvcyhwb3NpdGlvbik7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzVmlzaWJsZVBvcyh2aXNpYmxlUG9zLnByZXZpb3VzKCkpOwpAQCAtNjIwLDcgKzYyMCw3IEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmkKIAogdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHREb3duc3RyZWFtKGNvbnN0IFBv
c2l0aW9uJiBwb3MpCiB7Ci0gICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBvc2l0aW9uKHBvcywg
VlBfREVGQVVMVF9BRkZJTklUWSkubmV4dCgpLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgp
OworICAgIFBvc2l0aW9uIGVuZCA9IFZpc2libGVQb3NpdGlvbihwb3MsIFZQX0RFRkFVTFRfQUZG
SU5JVFkpLm5leHQoKS5kZWVwRXF1aXZhbGVudCgpLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQb3Np
dGlvbigpOwogICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KHBvcywgZW5kKTsKIH0KIApAQCAt
NzEwLDggKzcxMCw4IEBAIFBhc3NSZWZQdHI8Tm9kZT4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om0K
ICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHZpc2libGVQYXJhZ3JhcGhFbmQubmV4dCgpOwog
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kID0gbmV4dC5pc05vdE51bGwoKSA/IG5leHQg
OiB2aXNpYmxlUGFyYWdyYXBoRW5kOwogICAgIAotICAgIFBvc2l0aW9uIHVwc3RyZWFtU3RhcnQg
PSB2aXNpYmxlUGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpOwotICAg
IFBvc2l0aW9uIHVwc3RyZWFtRW5kID0gdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnVwc3Ry
ZWFtKCk7CisgICAgUG9zaXRpb24gdXBzdHJlYW1TdGFydCA9IHZpc2libGVQYXJhZ3JhcGhTdGFy
dC5kZWVwRXF1aXZhbGVudCgpLnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsK
KyAgICBQb3NpdGlvbiB1cHN0cmVhbUVuZCA9IHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKS5w
cmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCk7CiAKICAgICAvLyBJZiB0aGVyZSBh
cmUgbm8gVmlzaWJsZVBvc2l0aW9ucyBpbiB0aGUgc2FtZSBibG9jayBhcyBwb3MgdGhlbiAKICAg
ICAvLyB1cHN0cmVhbVN0YXJ0IHdpbGwgYmUgb3V0c2lkZSB0aGUgcGFyYWdyYXBoCkBAIC04MzUs
NyArODM1LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xlYW51cEFmdGVyRAogICAg
IFZpc2libGVQb3NpdGlvbiBjYXJldEFmdGVyRGVsZXRlID0gZW5kaW5nU2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCk7CiAgICAgaWYgKGlzU3RhcnRPZlBhcmFncmFwaChjYXJldEFmdGVyRGVsZXRl
KSAmJiBpc0VuZE9mUGFyYWdyYXBoKGNhcmV0QWZ0ZXJEZWxldGUpKSB7CiAgICAgICAgIC8vIE5v
dGU6IFdlIHdhbnQgdGhlIHJpZ2h0bW9zdCBjYW5kaWRhdGUuCi0gICAgICAgIFBvc2l0aW9uIHBv
c2l0aW9uID0gY2FyZXRBZnRlckRlbGV0ZS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsK
KyAgICAgICAgUG9zaXRpb24gcG9zaXRpb24gPSBjYXJldEFmdGVyRGVsZXRlLmRlZXBFcXVpdmFs
ZW50KCkubmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCk7CiAgICAgICAgIE5vZGUqIG5v
ZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICAvLyBOb3JtYWxseSBkZWxl
dGlvbiB3aWxsIGxlYXZlIGEgYnIgYXMgYSBwbGFjZWhvbGRlci4KICAgICAgICAgaWYgKG5vZGUt
Pmhhc1RhZ05hbWUoYnJUYWcpKQpAQCAtODcyLDEwICs4NzIsMTAgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVQYXJh
Z3JhcGggPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLnByZXZpb3VzKCk7CiAgICAgVmlzaWJsZVBv
c2l0aW9uIGFmdGVyUGFyYWdyYXBoKGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLm5leHQoKSk7CiAgICAg
Ci0gICAgLy8gV2UgdXBzdHJlYW0oKSB0aGUgZW5kIGFuZCBkb3duc3RyZWFtKCkgdGhlIHN0YXJ0
IHNvIHRoYXQgd2UgZG9uJ3QgaW5jbHVkZSBjb2xsYXBzZWQgd2hpdGVzcGFjZSBpbiB0aGUgbW92
ZS4KKyAgICAvLyBXZSBwcmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCkgdGhlIGVu
ZCBhbmQgbmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCkgdGhlIHN0YXJ0IHNvIHRoYXQg
d2UgZG9uJ3QgaW5jbHVkZSBjb2xsYXBzZWQgd2hpdGVzcGFjZSBpbiB0aGUgbW92ZS4KICAgICAv
LyBXaGVuIHdlIHBhc3RlIGEgZnJhZ21lbnQsIHNwYWNlcyBhZnRlciB0aGUgZW5kIGFuZCBiZWZv
cmUgdGhlIHN0YXJ0IGFyZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgcmVuZGVyZWQuCi0g
ICAgUG9zaXRpb24gc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50
KCkuZG93bnN0cmVhbSgpOwotICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdyYXBoVG9Nb3Zl
LmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKTsKKyAgICBQb3NpdGlvbiBzdGFydCA9IHN0YXJ0
T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5uZXh0VmlzdWFsbHlFcXVpdmFsZW50
UG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBlbmQgPSBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVw
RXF1aXZhbGVudCgpLnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKIAogICAg
IGNsb25lUGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50KHN0YXJ0LCBlbmQsIG91dGVyTm9kZSwgYmxv
Y2tFbGVtZW50KTsKICAgICAgIApAQCAtOTUwLDEwICs5NTAsMTAgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVQYXJh
Z3JhcGggPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLnByZXZpb3VzKCk7CiAgICAgVmlzaWJsZVBv
c2l0aW9uIGFmdGVyUGFyYWdyYXBoKGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLm5leHQoKSk7CiAKLSAg
ICAvLyBXZSB1cHN0cmVhbSgpIHRoZSBlbmQgYW5kIGRvd25zdHJlYW0oKSB0aGUgc3RhcnQgc28g
dGhhdCB3ZSBkb24ndCBpbmNsdWRlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlIGluIHRoZSBtb3ZlLgor
ICAgIC8vIFdlIHByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSB0aGUgZW5kIGFu
ZCBuZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSB0aGUgc3RhcnQgc28gdGhhdCB3ZSBk
b24ndCBpbmNsdWRlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlIGluIHRoZSBtb3ZlLgogICAgIC8vIFdo
ZW4gd2UgcGFzdGUgYSBmcmFnbWVudCwgc3BhY2VzIGFmdGVyIHRoZSBlbmQgYW5kIGJlZm9yZSB0
aGUgc3RhcnQgYXJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSByZW5kZXJlZC4KLSAgICBQ
b3NpdGlvbiBzdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5k
b3duc3RyZWFtKCk7Ci0gICAgUG9zaXRpb24gZW5kID0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUuZGVl
cEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gc3RhcnRPZlBh
cmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQb3Np
dGlvbigpOworICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVp
dmFsZW50KCkucHJldmlvdXNWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpOwogICAgIAogICAg
IC8vIHN0YXJ0IGFuZCBlbmQgY2FuJ3QgYmUgdXNlZCBkaXJlY3RseSB0byBjcmVhdGUgYSBSYW5n
ZTsgdGhleSBhcmUgImVkaXRpbmcgcG9zaXRpb25zIgogICAgIFBvc2l0aW9uIHN0YXJ0UmFuZ2VD
b21wbGlhbnQgPSBzdGFydC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKQEAgLTExMzQsNyAr
MTEzNCw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXAKICAgICBp
ZiAoIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKGNhcmV0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgUG9zaXRpb24gY2FyZXRQb3MoY2FyZXQuZGVlcEVxdWl2YWxlbnQo
KS5kb3duc3RyZWFtKCkpOworICAgIFBvc2l0aW9uIGNhcmV0UG9zKGNhcmV0LmRlZXBFcXVpdmFs
ZW50KCkubmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCkpOwogICAgIC8vIEEgbGluZSBi
cmVhayBpcyBlaXRoZXIgYSBiciBvciBhIHByZXNlcnZlZCBuZXdsaW5lLgogICAgIEFTU0VSVChj
YXJldFBvcy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSB8fCAoY2FyZXRQb3Mu
ZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIGNhcmV0UG9zLmRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSk7CiAgICAgCkBAIC0x
MTg4LDcgKzExODgsNyBAQCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25B
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBEb24ndCBpbnNlcnQgb3V0c2lkZSBhbiBh
bmNob3IgaWYgZG9pbmcgc28gd291bGQgc2tpcCBvdmVyIGEgbGluZSBicmVhay4gIEl0IHdvdWxk
CiAgICAgICAgICAgICAvLyBwcm9iYWJseSBiZSBzYWZlIHRvIG1vdmUgdGhlIGxpbmUgYnJlYWsg
c28gdGhhdCB3ZSBjb3VsZCBzdGlsbCBhdm9pZCB0aGUgYW5jaG9yIGhlcmUuCi0gICAgICAgICAg
ICBQb3NpdGlvbiBkb3duc3RyZWFtKHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3Ry
ZWFtKCkpOworICAgICAgICAgICAgUG9zaXRpb24gZG93bnN0cmVhbSh2aXNpYmxlUG9zLmRlZXBF
cXVpdmFsZW50KCkubmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCkpOwogICAgICAgICAg
ICAgaWYgKGxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3MpICYmIGRv
d25zdHJlYW0uZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoZW5jbG9zaW5nQW5jaG9y
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWw7CiAgICAgICAgICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cAkocmV2aXNpb24gODA1MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTAgKzE3NCwxMCBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxpemVQCiAgICAgUG9zaXRpb24gc3RhcnQs
IGVuZDsKICAgICBpbml0aWFsaXplU3RhcnRFbmQoc3RhcnQsIGVuZCk7CiAgICAgCi0gICAgbV91
cHN0cmVhbVN0YXJ0ID0gc3RhcnQudXBzdHJlYW0oKTsKLSAgICBtX2Rvd25zdHJlYW1TdGFydCA9
IHN0YXJ0LmRvd25zdHJlYW0oKTsKLSAgICBtX3Vwc3RyZWFtRW5kID0gZW5kLnVwc3RyZWFtKCk7
Ci0gICAgbV9kb3duc3RyZWFtRW5kID0gZW5kLmRvd25zdHJlYW0oKTsKKyAgICBtX3Vwc3RyZWFt
U3RhcnQgPSBzdGFydC5wcmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCk7CisgICAg
bV9kb3duc3RyZWFtU3RhcnQgPSBzdGFydC5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24o
KTsKKyAgICBtX3Vwc3RyZWFtRW5kID0gZW5kLnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9z
aXRpb24oKTsKKyAgICBtX2Rvd25zdHJlYW1FbmQgPSBlbmQubmV4dFZpc3VhbGx5RXF1aXZhbGVu
dFBvc2l0aW9uKCk7CiAgICAgCiAgICAgbV9zdGFydFJvb3QgPSBlZGl0YWJsZVJvb3RGb3JQb3Np
dGlvbihzdGFydCk7CiAgICAgbV9lbmRSb290ID0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24oZW5k
KTsKQEAgLTIzNSw4ICsyMzUsOCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRp
YWxpemVQCiAgICAgICAgICAgICBwb3MgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCk7CiAg
ICAgICAgICAgICAvLyBFeHBhbmQgb3V0IG9uZSBjaGFyYWN0ZXIgdXBzdHJlYW0gZm9yIHNtYXJ0
IGRlbGV0ZSBhbmQgcmVjYWxjdWxhdGUKICAgICAgICAgICAgIC8vIHBvc2l0aW9ucyBiYXNlZCBv
biB0aGlzIGNoYW5nZS4KLSAgICAgICAgICAgIG1fdXBzdHJlYW1TdGFydCA9IHBvcy51cHN0cmVh
bSgpOwotICAgICAgICAgICAgbV9kb3duc3RyZWFtU3RhcnQgPSBwb3MuZG93bnN0cmVhbSgpOwor
ICAgICAgICAgICAgbV91cHN0cmVhbVN0YXJ0ID0gcG9zLnByZXZpb3VzVmlzdWFsbHlFcXVpdmFs
ZW50UG9zaXRpb24oKTsKKyAgICAgICAgICAgIG1fZG93bnN0cmVhbVN0YXJ0ID0gcG9zLm5leHRW
aXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpOwogICAgICAgICAgICAgbV9sZWFkaW5nV2hpdGVz
cGFjZSA9IG1fdXBzdHJlYW1TdGFydC5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKHZpc2libGVQ
b3MuYWZmaW5pdHkoKSk7CiAKICAgICAgICAgICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uT25TbWFy
dERlbGV0ZShtX3Vwc3RyZWFtU3RhcnQsIG1fdXBzdHJlYW1FbmQpOwpAQCAtMjQ4LDggKzI0OCw4
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aW5pdGlhbGl6ZVAKICAgICAgICAgICAg
IC8vIEV4cGFuZCBvdXQgb25lIGNoYXJhY3RlciBkb3duc3RyZWFtIGZvciBzbWFydCBkZWxldGUg
YW5kIHJlY2FsY3VsYXRlCiAgICAgICAgICAgICAvLyBwb3NpdGlvbnMgYmFzZWQgb24gdGhpcyBj
aGFuZ2UuCiAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9kb3duc3RyZWFtRW5k
LCBWUF9ERUZBVUxUX0FGRklOSVRZKS5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAg
ICAgIG1fdXBzdHJlYW1FbmQgPSBwb3MudXBzdHJlYW0oKTsKLSAgICAgICAgICAgIG1fZG93bnN0
cmVhbUVuZCA9IHBvcy5kb3duc3RyZWFtKCk7CisgICAgICAgICAgICBtX3Vwc3RyZWFtRW5kID0g
cG9zLnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKKyAgICAgICAgICAgIG1f
ZG93bnN0cmVhbUVuZCA9IHBvcy5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKICAg
ICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlID0gbV9kb3duc3RyZWFtRW5kLnRyYWlsaW5n
V2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogCiAgICAgICAgICAgICBz
ZXRTdGFydGluZ1NlbGVjdGlvbk9uU21hcnREZWxldGUobV9kb3duc3RyZWFtU3RhcnQsIG1fZG93
bnN0cmVhbUVuZCk7CkBAIC02MDgsOCArNjA4LDggQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjptZXJnZVBhcmFncgogICAgIC8vIFRoZSBydWxlIGZvciBtZXJnaW5nIGludG8gYW4gZW1w
dHkgYmxvY2sgaXM6IG9ubHkgZG8gc28gaWYgaXRzIGZhcnRoZXIgdG8gdGhlIHJpZ2h0LgogICAg
IC8vIEZJWE1FOiBDb25zaWRlciBSVEwuCiAgICAgaWYgKCFtX3N0YXJ0c0F0RW1wdHlMaW5lICYm
IGlzU3RhcnRPZlBhcmFncmFwaChtZXJnZURlc3RpbmF0aW9uKSAmJiBzdGFydE9mUGFyYWdyYXBo
VG9Nb3ZlLmFic29sdXRlQ2FyZXRCb3VuZHMoKS54KCkgPiBtZXJnZURlc3RpbmF0aW9uLmFic29s
dXRlQ2FyZXRCb3VuZHMoKS54KCkpIHsKLSAgICAgICAgaWYgKG1lcmdlRGVzdGluYXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShi
clRhZykpIHsKLSAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhtZXJnZURl
c3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCkp
OworICAgICAgICBpZiAobWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5leHRWaXN1
YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJU
YWcpKSB7CisgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMobWVyZ2VEZXN0
aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigp
LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IHN0YXJ0
T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtNzUzLDcgKzc1Myw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6ZG9BcHBseSgpCiAgICAgLy8gc2F2ZSB0aGlzIHRvIGxhdGVyIG1ha2UgdGhlIHNlbGVjdGlv
biB3aXRoCiAgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gbV9zZWxlY3Rpb25Ub0RlbGV0ZS5hZmZp
bml0eSgpOwogICAgIAotICAgIFBvc2l0aW9uIGRvd25zdHJlYW1FbmQgPSBtX3NlbGVjdGlvblRv
RGVsZXRlLmVuZCgpLmRvd25zdHJlYW0oKTsKKyAgICBQb3NpdGlvbiBkb3duc3RyZWFtRW5kID0g
bV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24o
KTsKICAgICBtX25lZWRQbGFjZWhvbGRlciA9IGlzU3RhcnRPZlBhcmFncmFwaChtX3NlbGVjdGlv
blRvRGVsZXRlLnZpc2libGVTdGFydCgpLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkKICAgICAg
ICAgICAgICYmIGlzRW5kT2ZQYXJhZ3JhcGgobV9zZWxlY3Rpb25Ub0RlbGV0ZS52aXNpYmxlRW5k
KCksIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KQogICAgICAgICAgICAgJiYgIWxpbmVCcmVha0V4
aXN0c0F0VmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uVG9EZWxldGUudmlzaWJsZUVuZCgpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDgwNTMwKQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzYsNyAr
NjM2LDcgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OnRleHREaXJlY3Rpb25GbwogICAgIGlm
IChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkpCiAgICAgICAgIHJldHVybiBOYXR1cmFs
V3JpdGluZ0RpcmVjdGlvbjsKIAotICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpOworICAgIFBvc2l0aW9u
IHBvc2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkubmV4
dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCk7CiAKICAgICBOb2RlKiBub2RlID0gcG9zaXRp
b24uZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCkBAIC02NDQsNyArNjQ0LDcgQEAg
V3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OnRleHREaXJlY3Rpb25GbwogCiAgICAgUG9zaXRpb24g
ZW5kOwogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7Ci0gICAgICAg
IGVuZCA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgp
OworICAgICAgICBlbmQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCku
cHJldmlvdXNWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpOwogCiAgICAgICAgIE5vZGUqIHBh
c3RMYXN0ID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBwb3NpdGlvbi5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKS0+
cGFzdExhc3ROb2RlKCk7CiAgICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG4gJiYgbiAhPSBw
YXN0TGFzdDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewpAQCAtNzI1LDggKzcyNSw4IEBA
IGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIAogICAgIE5vZGUqIHN0YXJ0
Tm9kZTsKICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSkgewotICAgICAg
ICBzdGFydE5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKS5k
b3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0
ZWROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxl
Y3Rpb24oKS5zdGFydCgpLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpLmRlcHJlY2F0
ZWROb2RlKCk7CisgICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2VsZWN0aW9uKCkuZW5kKCkucHJldmlvdXNWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpLmRl
cHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpICE9
IGVuY2xvc2luZ0Jsb2NrKGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0gZWxzZQpAQCAtMTY5NCw3ICsxNjk0LDcgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9u
KGNvbnN0IFN0cmluZwogICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KG1fZnJhbWUt
PmRvY3VtZW50KCksIHRleHQsIHRydWUsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblVw
ZGF0ZSk7CiAKICAgICAgICAgLy8gRmluZCBvdXQgd2hhdCBub2RlIGhhcyB0aGUgY29tcG9zaXRp
b24gbm93LgotICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPmJh
c2UoKS5kb3duc3RyZWFtKCk7CisgICAgICAgIFBvc2l0aW9uIGJhc2UgPSBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+YmFzZSgpLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpOwogICAgICAg
ICBQb3NpdGlvbiBleHRlbnQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZXh0ZW50KCk7CiAgICAg
ICAgIE5vZGUqIGJhc2VOb2RlID0gYmFzZS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICB1bnNp
Z25lZCBiYXNlT2Zmc2V0ID0gYmFzZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9u
IDgwNTMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2NSw3ICszNjUsNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50
PiBJbnNlcnRMaXN0Q29tbWFuCiAgICAgICAgIC8vIFRyeSB0byBhdm9pZCBpbnNlcnRpbmcgaXQg
c29tZXdoZXJlIHdoZXJlIGl0IHdpbGwgYmUgc3Vycm91bmRlZCBieSAKICAgICAgICAgLy8gaW5s
aW5lIGFuY2VzdG9ycyBvZiBzdGFydCwgc2luY2UgaXQgaXMgZWFzaWVyIGZvciBlZGl0aW5nIHRv
IHByb2R1Y2UgCiAgICAgICAgIC8vIGNsZWFuIG1hcmt1cCB3aGVuIGlubGluZSBlbGVtZW50cyBh
cmUgcHVzaGVkIGRvd24gYXMgZmFyIGFzIHBvc3NpYmxlLgotICAgICAgICBQb3NpdGlvbiBpbnNl
cnRpb25Qb3Moc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpKTsKKyAgICAgICAgUG9z
aXRpb24gaW5zZXJ0aW9uUG9zKHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucHJldmlvdXNWaXN1YWxs
eUVxdWl2YWxlbnRQb3NpdGlvbigpKTsKICAgICAgICAgLy8gQWxzbyBhdm9pZCB0aGUgY29udGFp
bmluZyBsaXN0IGl0ZW0uCiAgICAgICAgIE5vZGUqIGxpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RD
aGlsZChpbnNlcnRpb25Qb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIGlmIChsaXN0Q2hp
bGQgJiYgbGlzdENoaWxkLT5oYXNUYWdOYW1lKGxpVGFnKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
LmNwcAkocmV2aXNpb24gODA1MzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsOSArMTc4
LDkgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgIH0KICAg
ICAKICAgICAvLyBVc2UgdGhlIGxlZnRtb3N0IGNhbmRpZGF0ZS4KLSAgICBpbnNlcnRpb25Qb3Np
dGlvbiA9IGluc2VydGlvblBvc2l0aW9uLnVwc3RyZWFtKCk7CisgICAgaW5zZXJ0aW9uUG9zaXRp
b24gPSBpbnNlcnRpb25Qb3NpdGlvbi5wcmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9u
KCk7CiAgICAgaWYgKCFpbnNlcnRpb25Qb3NpdGlvbi5pc0NhbmRpZGF0ZSgpKQotICAgICAgICBp
bnNlcnRpb25Qb3NpdGlvbiA9IGluc2VydGlvblBvc2l0aW9uLmRvd25zdHJlYW0oKTsKKyAgICAg
ICAgaW5zZXJ0aW9uUG9zaXRpb24gPSBpbnNlcnRpb25Qb3NpdGlvbi5uZXh0VmlzdWFsbHlFcXVp
dmFsZW50UG9zaXRpb24oKTsKIAogICAgIC8vIEFkanVzdCB0aGUgaW5zZXJ0aW9uIHBvc2l0aW9u
IGFmdGVyIHRoZSBkZWxldGUKICAgICBpbnNlcnRpb25Qb3NpdGlvbiA9IHBvc2l0aW9uQXZvaWRp
bmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KGluc2VydGlvblBvc2l0aW9uKTsKQEAgLTI2Myw3ICsy
NjMsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAgICAg
ICAgICByZWZOb2RlID0gaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKIAogICAg
ICAgICAvLyBmaW5kIGVuZGluZyBzZWxlY3Rpb24gcG9zaXRpb24gZWFzaWx5IGJlZm9yZSBpbnNl
cnRpbmcgdGhlIHBhcmFncmFwaAotICAgICAgICBpbnNlcnRpb25Qb3NpdGlvbiA9IGluc2VydGlv
blBvc2l0aW9uLmRvd25zdHJlYW0oKTsKKyAgICAgICAgaW5zZXJ0aW9uUG9zaXRpb24gPSBpbnNl
cnRpb25Qb3NpdGlvbi5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKICAgICAgICAg
CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoYmxvY2tUb0luc2VydCwgcmVmTm9kZSk7CiAKQEAg
LTI5NCw3ICsyOTQsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRv
CiAgICAgCiAgICAgLy8gTW92ZSBkb3duc3RyZWFtLiBUeXBpbmcgc3R5bGUgY29kZSB3aWxsIHRh
a2UgY2FyZSBvZiBjYXJyeWluZyBhbG9uZyB0aGUgCiAgICAgLy8gc3R5bGUgb2YgdGhlIHVwc3Ry
ZWFtIHBvc2l0aW9uLgotICAgIGluc2VydGlvblBvc2l0aW9uID0gaW5zZXJ0aW9uUG9zaXRpb24u
ZG93bnN0cmVhbSgpOworICAgIGluc2VydGlvblBvc2l0aW9uID0gaW5zZXJ0aW9uUG9zaXRpb24u
bmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCk7CiAKICAgICAvLyBBdCB0aGlzIHBvaW50
LCB0aGUgaW5zZXJ0aW9uUG9zaXRpb24ncyBub2RlIGNvdWxkIGJlIGEgY29udGFpbmVyLCBhbmQg
d2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgaW5jbHVkZQogICAgIC8vIGFsbCBvZiB0aGUgY29ycmVj
dCBub2RlcyB3aGVuIGJ1aWxkaW5nIHRoZSBhbmNlc3RvciBsaXN0LiAgU28gdGhpcyBuZWVkcyB0
byBiZSB0aGUgZGVlcGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcG9zaXRpb24KQEAgLTMwNiw3
ICszMDYsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAg
Z2V0QW5jZXN0b3JzSW5zaWRlQmxvY2soaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KSwgc3RhcnRCbG9jaywgYW5jZXN0b3JzKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3Qg
Y2F1c2UgYSByZW5kZXJlZCBzcGFjZSB0byBiZWNvbWUgdW5yZW5kZXJlZC4KLSAgICAvLyBGSVhN
RTogV2UgbmVlZCB0aGUgYWZmaW5pdHkgZm9yIHBvcywgYnV0IHBvcy5kb3duc3RyZWFtKCkgZG9l
cyBub3QgZ2l2ZSBpdAorICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRoZSBhZmZpbml0eSBmb3IgcG9z
LCBidXQgcG9zLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpIGRvZXMgbm90IGdpdmUg
aXQKICAgICBQb3NpdGlvbiBsZWFkaW5nV2hpdGVzcGFjZSA9IGluc2VydGlvblBvc2l0aW9uLmxl
YWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgLy8gRklY
TUU6IGxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24gaXMgcmV0dXJuaW5nIHRoZSBwb3NpdGlvbiBi
ZWZvcmUgcHJlc2VydmVkIG5ld2xpbmVzIGZvciBwb3NpdGlvbnMKICAgICAvLyBhZnRlciB0aGUg
cHJlc2VydmVkIG5ld2xpbmUsIGNhdXNpbmcgdGhlIG5ld2xpbmUgdG8gYmUgdHVybmVkIGludG8g
YSBuYnNwLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5jcHAJKHJldmlzaW9uIDgwNTMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwyOCArMTI1LDI4IEBAIHZvaWQg
SW5zZXJ0VGV4dENvbW1hbmQ6OmlucHV0KGNvbnN0IFN0cmkKICAgICAvLyBpcyBpbnNlcnRlZCBq
dXN0IGJlZm9yZSB0aGVtLgogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgcmVhbGx5IGhhdmUg
dG8gZG8gdGhpcywgYnV0IHJlbW92aW5nIHBsYWNlaG9sZGVycyBpcyBhIHdvcmthcm91bmQgZm9y
IDk2NjEuCiAgICAgLy8gSWYgdGhlIGNhcmV0IGlzIGp1c3QgYmVmb3JlIGEgcGxhY2Vob2xkZXIs
IGRvd25zdHJlYW0gd2lsbCBub3JtYWxpemUgdGhlIGNhcmV0IHRvIGl0LgotICAgIFBvc2l0aW9u
IGRvd25zdHJlYW0oc3RhcnRQb3NpdGlvbi5kb3duc3RyZWFtKCkpOwotICAgIGlmIChsaW5lQnJl
YWtFeGlzdHNBdFBvc2l0aW9uKGRvd25zdHJlYW0pKSB7CisgICAgUG9zaXRpb24gbmV4dFZpc3Vh
bGx5RXF1aXZhbGVudFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbi5uZXh0VmlzdWFsbHlFcXVpdmFs
ZW50UG9zaXRpb24oKTsKKyAgICBpZiAobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihuZXh0Vmlz
dWFsbHlFcXVpdmFsZW50UG9zaXRpb24pKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNu
J3QgaGFuZGxlIHBsYWNlaG9sZGVycyBhdCB0aGUgZW5kIG9mIGFub255bW91cyBibG9ja3MuCiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBjYXJldChzdGFydFBvc2l0aW9uKTsKICAgICAgICAgaWYg
KGlzRW5kT2ZCbG9jayhjYXJldCkgJiYgaXNTdGFydE9mUGFyYWdyYXBoKGNhcmV0KSkKLSAgICAg
ICAgICAgIHBsYWNlaG9sZGVyID0gZG93bnN0cmVhbTsKKyAgICAgICAgICAgIHBsYWNlaG9sZGVy
ID0gbmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uOwogICAgICAgICAvLyBEb24ndCByZW1v
dmUgdGhlIHBsYWNlaG9sZGVyIHlldCwgb3RoZXJ3aXNlIHRoZSBibG9jayB3ZSdyZSBpbnNlcnRp
bmcgaW50byB3b3VsZCBjb2xsYXBzZSBiZWZvcmUKICAgICAgICAgLy8gd2UgZ2V0IGEgY2hhbmNl
IHRvIGluc2VydCBpbnRvIGl0LiAgV2UgY2hlY2sgZm9yIGEgcGxhY2Vob2xkZXIgbm93LCB0aG91
Z2gsIGJlY2F1c2UgZG9pbmcgc28gcmVxdWlyZXMKICAgICAgICAgLy8gdGhlIGNyZWF0aW9uIG9m
IGEgVmlzaWJsZVBvc2l0aW9uLCBhbmQgaWYgd2UgZGlkIHRoYXQgcG9zdC1pbnNlcnRpb24gaXQg
d291bGQgZm9yY2UgYSBsYXlvdXQuCiAgICAgfQogICAgIAogICAgIC8vIEluc2VydCB0aGUgY2hh
cmFjdGVyIGF0IHRoZSBsZWZ0bW9zdCBjYW5kaWRhdGUuCi0gICAgc3RhcnRQb3NpdGlvbiA9IHN0
YXJ0UG9zaXRpb24udXBzdHJlYW0oKTsKKyAgICBzdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlv
bi5wcmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCk7CiAgICAgCiAgICAgLy8gSXQg
aXMgcG9zc2libGUgZm9yIHRoZSBub2RlIHRoYXQgY29udGFpbnMgc3RhcnRQb3NpdGlvbiB0byBj
b250YWluIG9ubHkgdW5yZW5kZXJlZCB3aGl0ZXNwYWNlLAogICAgIC8vIGFuZCBzbyBkZWxldGVJ
bnNpZ25pZmljYW50VGV4dCBjb3VsZCByZW1vdmUgaXQuICBTYXZlIHRoZSBwb3NpdGlvbiBiZWZv
cmUgdGhlIG5vZGUgaW4gY2FzZSB0aGF0IGhhcHBlbnMuCiAgICAgUG9zaXRpb24gcG9zaXRpb25C
ZWZvcmVTdGFydE5vZGUocG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoc3RhcnRQb3NpdGlvbi5j
b250YWluZXJOb2RlKCkpKTsKLSAgICBkZWxldGVJbnNpZ25pZmljYW50VGV4dChzdGFydFBvc2l0
aW9uLnVwc3RyZWFtKCksIHN0YXJ0UG9zaXRpb24uZG93bnN0cmVhbSgpKTsKKyAgICBkZWxldGVJ
bnNpZ25pZmljYW50VGV4dChzdGFydFBvc2l0aW9uLnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50
UG9zaXRpb24oKSwgc3RhcnRQb3NpdGlvbi5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24o
KSk7CiAgICAgaWYgKCFzdGFydFBvc2l0aW9uLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKQog
ICAgICAgICBzdGFydFBvc2l0aW9uID0gcG9zaXRpb25CZWZvcmVTdGFydE5vZGU7CiAgICAgaWYg
KCFzdGFydFBvc2l0aW9uLmlzQ2FuZGlkYXRlKCkpCi0gICAgICAgIHN0YXJ0UG9zaXRpb24gPSBz
dGFydFBvc2l0aW9uLmRvd25zdHJlYW0oKTsKKyAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0
UG9zaXRpb24ubmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCk7CiAgICAgCiAgICAgc3Rh
cnRQb3NpdGlvbiA9IHBvc2l0aW9uQXZvaWRpbmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KHN0YXJ0
UG9zaXRpb24pOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgwNTMwKQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg3NSwxMyArODc1LDEzIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBw
bHkoKQogICAgIHByZXBhcmVXaGl0ZXNwYWNlQXRQb3NpdGlvbkZvclNwbGl0KGluc2VydGlvblBv
cyk7CiAKICAgICAvLyBJZiB0aGUgZG93bnN0cmVhbSBub2RlIGhhcyBiZWVuIHJlbW92ZWQgdGhl
cmUncyBubyBwb2ludCBpbiBjb250aW51aW5nLgotICAgIGlmICghaW5zZXJ0aW9uUG9zLmRvd25z
dHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpKQorICAgIGlmICghaW5zZXJ0aW9uUG9zLm5leHRWaXN1
YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICByZXR1cm47
CiAgICAgCi0gICAgLy8gTk9URTogVGhpcyB3b3VsZCBiZSBhbiBpbmNvcnJlY3QgdXNhZ2Ugb2Yg
ZG93bnN0cmVhbSgpIGlmIGRvd25zdHJlYW0oKSB3ZXJlIGNoYW5nZWQgdG8gbWVhbiB0aGUgbGFz
dCBwb3NpdGlvbiBhZnRlciAKKyAgICAvLyBOT1RFOiBUaGlzIHdvdWxkIGJlIGFuIGluY29ycmVj
dCB1c2FnZSBvZiBuZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSBpZiBuZXh0VmlzdWFs
bHlFcXVpdmFsZW50UG9zaXRpb24oKSB3ZXJlIGNoYW5nZWQgdG8gbWVhbiB0aGUgbGFzdCBwb3Np
dGlvbiBhZnRlciAKICAgICAvLyBwIHRoYXQgbWFwcyB0byB0aGUgc2FtZSB2aXNpYmxlIHBvc2l0
aW9uIGFzIHAgKHNpbmNlIGluIHRoZSBjYXNlIHdoZXJlIGEgYnIgaXMgYXQgdGhlIGVuZCBvZiBh
IGJsb2NrIGFuZCBjb2xsYXBzZWQgCiAgICAgLy8gYXdheSwgdGhlcmUgYXJlIHBvc2l0aW9ucyBh
ZnRlciB0aGUgYnIgd2hpY2ggbWFwIHRvIHRoZSBzYW1lIHZpc2libGUgcG9zaXRpb24gYXMgW2Jy
LCAwXSkuICAKLSAgICBOb2RlKiBlbmRCUiA9IGluc2VydGlvblBvcy5kb3duc3RyZWFtKCkuZGVw
cmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgPyBpbnNlcnRpb25Qb3MuZG93bnN0cmVh
bSgpLmRlcHJlY2F0ZWROb2RlKCkgOiAwOworICAgIE5vZGUqIGVuZEJSID0gaW5zZXJ0aW9uUG9z
Lm5leHRWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpLmRlcHJlY2F0ZWROb2RlKCktPmhhc1Rh
Z05hbWUoYnJUYWcpID8gaW5zZXJ0aW9uUG9zLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlv
bigpLmRlcHJlY2F0ZWROb2RlKCkgOiAwOwogICAgIFZpc2libGVQb3NpdGlvbiBvcmlnaW5hbFZp
c1Bvc0JlZm9yZUVuZEJSOwogICAgIGlmIChlbmRCUikKICAgICAgICAgb3JpZ2luYWxWaXNQb3NC
ZWZvcmVFbmRCUiA9IFZpc2libGVQb3NpdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUoZW5kQlIpLCBE
T1dOU1RSRUFNKS5wcmV2aW91cygpOwpAQCAtMTAyNyw5ICsxMDI3LDkgQEAgdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIEZJWE1FOiBNYWludGFpbiBw
b3NpdGlvbnMgZm9yIHRoZSBzdGFydCBhbmQgZW5kIG9mIGluc2VydGVkIGNvbnRlbnQgaW5zdGVh
ZCBvZiBrZWVwaW5nIG5vZGVzLiAgVGhlIG5vZGVzIGFyZQogICAgICAgICAvLyBvbmx5IGV2ZXIg
dXNlZCB0byBjcmVhdGUgcG9zaXRpb25zIHdoZXJlIGluc2VydGVkIGNvbnRlbnQgc3RhcnRzL2Vu
ZHMuCiAgICAgICAgIG1vdmVQYXJhZ3JhcGgoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgZW5kT2ZQ
YXJhZ3JhcGgoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAg
bV9maXJzdE5vZGVJbnNlcnRlZCA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRl
ZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIG1f
Zmlyc3ROb2RlSW5zZXJ0ZWQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVw
RXF1aXZhbGVudCgpLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpLmRlcHJlY2F0ZWRO
b2RlKCk7CiAgICAgICAgIGlmICghbV9sYXN0TGVhZkluc2VydGVkLT5pbkRvY3VtZW50KCkpCi0g
ICAgICAgICAgICBtX2xhc3RMZWFmSW5zZXJ0ZWQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxl
RW5kKCkuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAg
ICAgICAgICBtX2xhc3RMZWFmSW5zZXJ0ZWQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5k
KCkuZGVlcEVxdWl2YWxlbnQoKS5wcmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCku
ZGVwcmVjYXRlZE5vZGUoKTsKICAgICB9CiAgICAgICAgICAgICAKICAgICBlbmRPZkluc2VydGVk
Q29udGVudCA9IHBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVudCgpOwpAQCAtMTA1Nyw3ICsx
MDU3LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBTZWxlY3QgdXAgdG8gdGhl
IGJlZ2lubmluZyBvZiB0aGUgbmV4dCBwYXJhZ3JhcGguCi0gICAgICAgICAgICBsYXN0UG9zaXRp
b25Ub1NlbGVjdCA9IG5leHQuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7CisgICAgICAg
ICAgICBsYXN0UG9zaXRpb25Ub1NlbGVjdCA9IG5leHQuZGVlcEVxdWl2YWxlbnQoKS5uZXh0Vmlz
dWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKICAgICAgICAgfQogICAgICAgICAKICAgICB9IGVs
c2UKQEAgLTEwODEsNyArMTA4MSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgICAgICBpZiAobmVlZHNUcmFpbGluZ1NwYWNlKSB7CiAgICAgICAgICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9sYXN0TGVhZkluc2VydGVkLT5yZW5kZXJlcigpOwog
ICAgICAgICAgICAgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UgPSAhcmVuZGVyZXIgfHwgcmVuZGVy
ZXItPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgTm9kZSogZW5k
Tm9kZSA9IHBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCku
dXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICAgICAgTm9kZSogZW5kTm9kZSA9
IHBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCkucHJldmlv
dXNWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAg
ICAgICBpZiAoZW5kTm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgVGV4dCog
dGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihlbmROb2RlKTsKICAgICAgICAgICAgICAgICBpbnNl
cnRUZXh0SW50b05vZGUodGV4dCwgdGV4dC0+bGVuZ3RoKCksIGNvbGxhcHNlV2hpdGVTcGFjZSA/
IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIgIik7CkBAIC0xMDk2LDcgKzEwOTYsNyBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgaWYgKG5lZWRz
TGVhZGluZ1NwYWNlKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9s
YXN0TGVhZkluc2VydGVkLT5yZW5kZXJlcigpOwogICAgICAgICAgICAgYm9vbCBjb2xsYXBzZVdo
aXRlU3BhY2UgPSAhcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVT
cGFjZSgpOwotICAgICAgICAgICAgTm9kZSogc3RhcnROb2RlID0gcG9zaXRpb25BdFN0YXJ0T2ZJ
bnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVk
Tm9kZSgpOworICAgICAgICAgICAgTm9kZSogc3RhcnROb2RlID0gcG9zaXRpb25BdFN0YXJ0T2ZJ
bnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQ
b3NpdGlvbigpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgICAgICBpZiAoc3RhcnROb2RlLT5p
c1RleHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8
VGV4dCo+KHN0YXJ0Tm9kZSk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRl
eHQsIDAsIGNvbGxhcHNlV2hpdGVTcGFjZSA/IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIg
Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDgwNTMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4NCwxMSArMTU4NCwxMSBAQCB2
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFwcGVhcmFuCiAgICAgLy8gYXMgdGhlIHN0
YXJ0IG9mIHRoZSBzZWxlY3Rpb24sIHRoZSBzZWxlY3Rpb24gcGFpbnRpbmcgY29kZSB3aWxsIHRo
aW5rIHRoYXQgY29udGVudCBvbiB0aGUgbGluZSBjb250YWluaW5nICdmb28nIGlzIHNlbGVjdGVk
CiAgICAgLy8gYW5kIHdpbGwgZmlsbCB0aGUgZ2FwIGJlZm9yZSAnYmFyJy4KICAgICBQb3NpdGlv
biBzdGFydFBvcyA9IHNlbGVjdGlvbi5zdGFydCgpOwotICAgIFBvc2l0aW9uIGNhbmRpZGF0ZSA9
IHN0YXJ0UG9zLmRvd25zdHJlYW0oKTsKKyAgICBQb3NpdGlvbiBjYW5kaWRhdGUgPSBzdGFydFBv
cy5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKICAgICBpZiAoY2FuZGlkYXRlLmlz
Q2FuZGlkYXRlKCkpCiAgICAgICAgIHN0YXJ0UG9zID0gY2FuZGlkYXRlOwogICAgIFBvc2l0aW9u
IGVuZFBvcyA9IHNlbGVjdGlvbi5lbmQoKTsKLSAgICBjYW5kaWRhdGUgPSBlbmRQb3MudXBzdHJl
YW0oKTsKKyAgICBjYW5kaWRhdGUgPSBlbmRQb3MucHJldmlvdXNWaXN1YWxseUVxdWl2YWxlbnRQ
b3NpdGlvbigpOwogICAgIGlmIChjYW5kaWRhdGUuaXNDYW5kaWRhdGUoKSkKICAgICAgICAgZW5k
UG9zID0gY2FuZGlkYXRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDgwNTMwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcxLDEwICs1NzEsMTAgQEAgdm9pZCBU
eXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlcwogICAgICAgICBpZiAoa2lsbFJpbmcg
JiYgc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBncmFudWxhcml0eSAhPSBDaGFyYWN0ZXJHcmFudWxh
cml0eSkKICAgICAgICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6
QWx0ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
OwogCi0gICAgICAgIFBvc2l0aW9uIGRvd25zdHJlYW1FbmQgPSBlbmRpbmdTZWxlY3Rpb24oKS5l
bmQoKS5kb3duc3RyZWFtKCk7CisgICAgICAgIFBvc2l0aW9uIGRvd25zdHJlYW1FbmQgPSBlbmRp
bmdTZWxlY3Rpb24oKS5lbmQoKS5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNp
YmxlRW5kKCk7CiAgICAgICAgIGlmICh2aXNpYmxlRW5kID09IGVuZE9mUGFyYWdyYXBoKHZpc2li
bGVFbmQpKQotICAgICAgICAgICAgZG93bnN0cmVhbUVuZCA9IHZpc2libGVFbmQubmV4dCh0cnVl
KS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKKyAgICAgICAgICAgIGRvd25zdHJlYW1F
bmQgPSB2aXNpYmxlRW5kLm5leHQodHJ1ZSkuZGVlcEVxdWl2YWxlbnQoKS5uZXh0VmlzdWFsbHlF
cXVpdmFsZW50UG9zaXRpb24oKTsKICAgICAgICAgLy8gV2hlbiBkZWxldGluZyB0YWJsZXM6IFNl
bGVjdCB0aGUgdGFibGUgZmlyc3QsIHRoZW4gcGVyZm9ybSB0aGUgZGVsZXRpb24KICAgICAgICAg
aWYgKGRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBkb3duc3RyZWFtRW5kLmRlcHJl
Y2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgp
LT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgIWRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSkgewogICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZShkb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpLCBET1dOU1RSRUFNKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCShyZXZpc2lvbiA4
MDUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6
bGVmdFZpc3VhbGx5RGkKICAgICBpZiAocC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0
aW9uKCk7CiAKLSAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRvd25zdHJlYW0oKTsK
KyAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLm5leHRWaXN1YWxseUVxdWl2YWxlbnRQ
b3NpdGlvbigpOwogICAgIFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiA9IHAucHJpbWFy
eURpcmVjdGlvbigpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTIxMSw3ICsyMTEsNyBAQCBQ
b3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpCiAKICAgICAgICAgcCA9IFBv
c2l0aW9uKHJlbmRlcmVyLT5ub2RlKCksIG9mZnNldCk7CiAKLSAgICAgICAgaWYgKChwLmlzQ2Fu
ZGlkYXRlKCkgJiYgcC5kb3duc3RyZWFtKCkgIT0gZG93bnN0cmVhbVN0YXJ0KSB8fCBwLmF0U3Rh
cnRPZlRyZWUoKSB8fCBwLmF0RW5kT2ZUcmVlKCkpCisgICAgICAgIGlmICgocC5pc0NhbmRpZGF0
ZSgpICYmIHAubmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCkgIT0gZG93bnN0cmVhbVN0
YXJ0KSB8fCBwLmF0U3RhcnRPZlRyZWUoKSB8fCBwLmF0RW5kT2ZUcmVlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gcDsKICAgICB9CiB9CkBAIC0yMzksNyArMjM5LDcgQEAgUG9zaXRpb24gVmlzaWJs
ZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RAogICAgIGlmIChwLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gUG9zaXRpb24oKTsKIAotICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93
bnN0cmVhbSgpOworICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAubmV4dFZpc3VhbGx5
RXF1aXZhbGVudFBvc2l0aW9uKCk7CiAgICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9u
ID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMzQ4LDcg
KzM0OCw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseUQKIAogICAg
ICAgICBwID0gUG9zaXRpb24ocmVuZGVyZXItPm5vZGUoKSwgb2Zmc2V0KTsKIAotICAgICAgICBp
ZiAoKHAuaXNDYW5kaWRhdGUoKSAmJiBwLmRvd25zdHJlYW0oKSAhPSBkb3duc3RyZWFtU3RhcnQp
IHx8IHAuYXRTdGFydE9mVHJlZSgpIHx8IHAuYXRFbmRPZlRyZWUoKSkKKyAgICAgICAgaWYgKChw
LmlzQ2FuZGlkYXRlKCkgJiYgcC5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSAhPSBk
b3duc3RyZWFtU3RhcnQpIHx8IHAuYXRTdGFydE9mVHJlZSgpIHx8IHAuYXRFbmRPZlRyZWUoKSkK
ICAgICAgICAgICAgIHJldHVybiBwOwogICAgIH0KIH0KQEAgLTQyNyw3ICs0MjcsNyBAQCBzdGF0
aWMgUG9zaXRpb24gY2Fub25pY2FsaXplQ2FuZGlkYXRlKGNvCiAgICAgaWYgKGNhbmRpZGF0ZS5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAgICAgQVNTRVJUKGNhbmRpZGF0
ZS5pc0NhbmRpZGF0ZSgpKTsKLSAgICBQb3NpdGlvbiB1cHN0cmVhbSA9IGNhbmRpZGF0ZS51cHN0
cmVhbSgpOworICAgIFBvc2l0aW9uIHVwc3RyZWFtID0gY2FuZGlkYXRlLnByZXZpb3VzVmlzdWFs
bHlFcXVpdmFsZW50UG9zaXRpb24oKTsKICAgICBpZiAodXBzdHJlYW0uaXNDYW5kaWRhdGUoKSkK
ICAgICAgICAgcmV0dXJuIHVwc3RyZWFtOwogICAgIHJldHVybiBjYW5kaWRhdGU7CkBAIC00NTMs
MTAgKzQ1MywxMCBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmNhbm9uaWNhbFBvc2l0CiAg
ICAgQVNTRVJUKHBvc2l0aW9uLmRvY3VtZW50KCkpOwogICAgIHBvc2l0aW9uLmRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgUG9zaXRpb24g
Y2FuZGlkYXRlID0gcG9zaXRpb24udXBzdHJlYW0oKTsKKyAgICBQb3NpdGlvbiBjYW5kaWRhdGUg
PSBwb3NpdGlvbi5wcmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCk7CiAgICAgaWYg
KGNhbmRpZGF0ZS5pc0NhbmRpZGF0ZSgpKQogICAgICAgICByZXR1cm4gY2FuZGlkYXRlOwotICAg
IGNhbmRpZGF0ZSA9IHBvc2l0aW9uLmRvd25zdHJlYW0oKTsKKyAgICBjYW5kaWRhdGUgPSBwb3Np
dGlvbi5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKICAgICBpZiAoY2FuZGlkYXRl
LmlzQ2FuZGlkYXRlKCkpCiAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CiAKQEAgLTUwNCw3ICs1
MDQsNyBAQCBVQ2hhcjMyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0ZXIoCiB7CiAgICAg
Ly8gV2UgY2Fub25pY2FsaXplIHRvIHRoZSBmaXJzdCBvZiB0d28gZXF1aXZhbGVudCBjYW5kaWRh
dGVzLCBidXQgdGhlIHNlY29uZCBvZiB0aGUgdHdvIGNhbmRpZGF0ZXMKICAgICAvLyBpcyB0aGUg
b25lIHRoYXQgd2lsbCBiZSBpbnNpZGUgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBjaGFy
YWN0ZXIgYWZ0ZXIgdGhpcyB2aXNpYmxlIHBvc2l0aW9uLgotICAgIFBvc2l0aW9uIHBvcyA9IG1f
ZGVlcFBvc2l0aW9uLmRvd25zdHJlYW0oKTsKKyAgICBQb3NpdGlvbiBwb3MgPSBtX2RlZXBQb3Np
dGlvbi5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKICAgICBOb2RlKiBub2RlID0g
cG9zLmNvbnRhaW5lck5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5vZGUo
KSB8fCBwb3MuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3Ip
CiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
U2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA4MDUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBA
QCBQYXNzUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vCiAgICAgICAgIC8vIElm
IHRoZSBzZWxlY3Rpb24gaXMgYSBjYXJldCwgbW92ZSB0aGUgcmFuZ2Ugc3RhcnQgdXBzdHJlYW0u
IFRoaXMgaGVscHMgdXMgbWF0Y2gKICAgICAgICAgLy8gdGhlIGNvbnZlbnRpb25zIG9mIHRleHQg
ZWRpdG9ycyB0ZXN0ZWQsIHdoaWNoIG1ha2Ugc3R5bGUgZGV0ZXJtaW5hdGlvbnMgYmFzZWQKICAg
ICAgICAgLy8gb24gdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGNhcmV0LCBpZiBhbnkuIAotICAg
ICAgICBzID0gbV9zdGFydC51cHN0cmVhbSgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwor
ICAgICAgICBzID0gbV9zdGFydC5wcmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCku
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgICAgIGUgPSBzOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgYSByYW5nZSwgc2VsZWN0IHRoZSBtaW5p
bXVtIHJhbmdlIHRoYXQgZW5jb21wYXNzZXMgdGhlIHNlbGVjdGlvbi4KQEAgLTE2MCw4ICsxNjAs
OCBAQCBQYXNzUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vCiAgICAgICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICBeIHNlbGVjdGVkCiAgICAgICAgIC8vCiAgICAgICAgIEFT
U0VSVChpc1JhbmdlKCkpOwotICAgICAgICBzID0gbV9zdGFydC5kb3duc3RyZWFtKCk7Ci0gICAg
ICAgIGUgPSBtX2VuZC51cHN0cmVhbSgpOworICAgICAgICBzID0gbV9zdGFydC5uZXh0VmlzdWFs
bHlFcXVpdmFsZW50UG9zaXRpb24oKTsKKyAgICAgICAgZSA9IG1fZW5kLnByZXZpb3VzVmlzdWFs
bHlFcXVpdmFsZW50UG9zaXRpb24oKTsKICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMocywg
ZSkgPiAwKSB7CiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXJ0IGlzIGJlZm9yZSB0
aGUgZW5kLgogICAgICAgICAgICAgLy8gVGhlIGVuZCBjYW4gd2luZCB1cCBiZWZvcmUgdGhlIHN0
YXJ0IGlmIGNvbGxhcHNlZCB3aGl0ZXNwYWNlIGlzIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkLgpA
QCAtMzkzLDcgKzM5Myw3IEBAIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6dXBkYXRlU2VsZWN0aW9u
VHkKICAgICBpZiAobV9zdGFydC5pc051bGwoKSkgewogICAgICAgICBBU1NFUlQobV9lbmQuaXNO
dWxsKCkpOwogICAgICAgICBtX3NlbGVjdGlvblR5cGUgPSBOb1NlbGVjdGlvbjsKLSAgICB9IGVs
c2UgaWYgKG1fc3RhcnQgPT0gbV9lbmQgfHwgbV9zdGFydC51cHN0cmVhbSgpID09IG1fZW5kLnVw
c3RyZWFtKCkpIHsKKyAgICB9IGVsc2UgaWYgKG1fc3RhcnQgPT0gbV9lbmQgfHwgbV9zdGFydC5w
cmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCkgPT0gbV9lbmQucHJldmlvdXNWaXN1
YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpKSB7CiAgICAgICAgIG1fc2VsZWN0aW9uVHlwZSA9IENh
cmV0U2VsZWN0aW9uOwogICAgIH0gZWxzZQogICAgICAgICBtX3NlbGVjdGlvblR5cGUgPSBSYW5n
ZVNlbGVjdGlvbjsKQEAgLTQxOSw4ICs0MTksOCBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OnZh
bGlkYXRlKFRleHRHcmFuCiAgICAgICAgIC8vIGNvbWUgdGhyb3VnaCBoZXJlIGJlZm9yZSBhbnlv
bmUgdXNlcyBpdC4KICAgICAgICAgLy8gRklYTUU6IENhbm9uaWNhbGl6aW5nIGlzIGdvb2QsIGJ1
dCBoYXZlbid0IHdlIGFscmVhZHkgZG9uZSBpdCAod2hlbiB3ZQogICAgICAgICAvLyBzZXQgdGhl
c2UgdHdvIHBvc2l0aW9ucyB0byBWaXNpYmxlUG9zaXRpb24gZGVlcEVxdWl2YWxlbnQoKXMgYWJv
dmUpPwotICAgICAgICBtX3N0YXJ0ID0gbV9zdGFydC5kb3duc3RyZWFtKCk7Ci0gICAgICAgIG1f
ZW5kID0gbV9lbmQudXBzdHJlYW0oKTsKKyAgICAgICAgbV9zdGFydCA9IG1fc3RhcnQubmV4dFZp
c3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCk7CisgICAgICAgIG1fZW5kID0gbV9lbmQucHJldmlv
dXNWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpOwogICAgIH0KIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDgwNTMwKQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miwx
MCArMjQyLDEwIEBAIFBvc2l0aW9uIG5leHRDYW5kaWRhdGUoY29uc3QgUG9zaXRpb24mIHAKIFBv
c2l0aW9uIG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbikKIHsKICAgICBQb3NpdGlvbiBwID0gcG9zaXRpb247Ci0gICAgUG9zaXRpb24gZG93bnN0
cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7CisgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0
ID0gcC5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsKICAgICB3aGlsZSAoIXAuYXRF
bmRPZlRyZWUoKSkgewogICAgICAgICBwID0gcC5uZXh0KENoYXJhY3Rlcik7Ci0gICAgICAgIGlm
IChwLmlzQ2FuZGlkYXRlKCkgJiYgcC5kb3duc3RyZWFtKCkgIT0gZG93bnN0cmVhbVN0YXJ0KQor
ICAgICAgICBpZiAocC5pc0NhbmRpZGF0ZSgpICYmIHAubmV4dFZpc3VhbGx5RXF1aXZhbGVudFBv
c2l0aW9uKCkgIT0gZG93bnN0cmVhbVN0YXJ0KQogICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAg
fQogICAgIHJldHVybiBQb3NpdGlvbigpOwpAQCAtMjY1LDEwICsyNjUsMTAgQEAgUG9zaXRpb24g
cHJldmlvdXNDYW5kaWRhdGUoY29uc3QgUG9zaXRpbwogUG9zaXRpb24gcHJldmlvdXNWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBQb3Np
dGlvbiBwID0gcG9zaXRpb247Ci0gICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3du
c3RyZWFtKCk7CisgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5uZXh0VmlzdWFsbHlF
cXVpdmFsZW50UG9zaXRpb24oKTsKICAgICB3aGlsZSAoIXAuYXRTdGFydE9mVHJlZSgpKSB7CiAg
ICAgICAgIHAgPSBwLnByZXZpb3VzKENoYXJhY3Rlcik7Ci0gICAgICAgIGlmIChwLmlzQ2FuZGlk
YXRlKCkgJiYgcC5kb3duc3RyZWFtKCkgIT0gZG93bnN0cmVhbVN0YXJ0KQorICAgICAgICBpZiAo
cC5pc0NhbmRpZGF0ZSgpICYmIHAubmV4dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCkgIT0g
ZG93bnN0cmVhbVN0YXJ0KQogICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQogICAgIHJldHVy
biBQb3NpdGlvbigpOwpAQCAtNDk4LDcgKzQ5OCw3IEBAIFBvc2l0aW9uIHBvc2l0aW9uT3V0c2lk
ZUNvbnRhaW5pbmdTcGVjaWEKIAogTm9kZSogaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKLSAgICBQb3NpdGlvbiB1cHN0
cmVhbSh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpKTsKKyAgICBQ
b3NpdGlvbiB1cHN0cmVhbSh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wcmV2aW91
c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCkpOwogICAgIGlmICh1cHN0cmVhbS5kZXByZWNh
dGVkTm9kZSgpICYmIHVwc3RyZWFtLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgdXBz
dHJlYW0uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIHVwc3RyZWFt
LmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKICAgICAgICAgcmV0dXJuIHVwc3RyZWFt
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgCkBAIC01MDcsOSArNTA3LDEwIEBAIE5vZGUqIGlzRmly
c3RQb3NpdGlvbkFmdGVyVGFibGUoY29uc3QgVmkKIAogTm9kZSogaXNMYXN0UG9zaXRpb25CZWZv
cmVUYWJsZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKLSAgICBQ
b3NpdGlvbiBkb3duc3RyZWFtKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25z
dHJlYW0oKSk7Ci0gICAgaWYgKGRvd25zdHJlYW0uZGVwcmVjYXRlZE5vZGUoKSAmJiBkb3duc3Ry
ZWFtLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgZG93bnN0cmVhbS5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgZG93bnN0cmVhbS5hdEZpcnN0RWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZSgpKQotICAgICAgICByZXR1cm4gZG93bnN0cmVhbS5kZXByZWNhdGVk
Tm9kZSgpOworICAgIFBvc2l0aW9uIG5leHRWaXN1YWxseUVxdWl2YWxlbnQgPSB2aXNpYmxlUG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKS5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKTsK
KyAgICBpZiAobmV4dFZpc3VhbGx5RXF1aXZhbGVudC5kZXByZWNhdGVkTm9kZSgpICYmIG5leHRW
aXN1YWxseUVxdWl2YWxlbnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKQorICAgICAgICAm
JiBuZXh0VmlzdWFsbHlFcXVpdmFsZW50LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmlz
VGFibGUoKSAmJiBuZXh0VmlzdWFsbHlFcXVpdmFsZW50LmF0Rmlyc3RFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKCkpCisgICAgICAgIHJldHVybiBuZXh0VmlzdWFsbHlFcXVpdmFsZW50LmRlcHJlY2F0
ZWROb2RlKCk7CiAgICAgCiAgICAgcmV0dXJuIDA7CiB9CkBAIC05NzksNyArOTgwLDcgQEAgaW50
IGNhcmV0TWF4T2Zmc2V0KGNvbnN0IE5vZGUqIG4pCiAKIGJvb2wgbGluZUJyZWFrRXhpc3RzQXRW
aXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7
Ci0gICAgcmV0dXJuIGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24odmlzaWJsZVBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpKTsKKyAgICByZXR1cm4gbGluZUJyZWFrRXhpc3Rz
QXRQb3NpdGlvbih2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5uZXh0VmlzdWFsbHlF
cXVpdmFsZW50UG9zaXRpb24oKSk7CiB9CiAKIGJvb2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlv
bihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCkBAIC0xMDQ0LDcgKzEwNDUsNyBAQCBpbnQgaW5k
ZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsCiAvLyB3aGlsZSBpZ25vcmluZyB3aGl0
ZXNwYWNlcyBhbmQgdW5yZW5kZXJlZCBub2RlcwogYm9vbCBpc1Zpc2libHlBZGphY2VudChjb25z
dCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpCiB7Ci0gICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihmaXJzdCkgPT0gVmlzaWJsZVBvc2l0aW9uKHNlY29uZC51cHN0cmVh
bSgpKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGZpcnN0KSA9PSBWaXNpYmxlUG9zaXRp
b24oc2Vjb25kLnByZXZpb3VzVmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oKSk7CiB9CiAKIC8v
IERldGVybWluZXMgd2hldGhlciBhIG5vZGUgaXMgaW5zaWRlIGEgcmFuZ2Ugb3IgdmlzaWJseSBz
dGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHJhbmdlLgpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gODA1MzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNyw4ICs0MzcsOCBAQCBz
dGF0aWMgYm9vbCBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lCiBzdGF0aWMgYm9vbCBuZWVk
SW50ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2KQogewogICAg
IFZpc2libGVQb3NpdGlvbiBuZXh0ID0gdi5uZXh0KCk7Ci0gICAgTm9kZSogdXBzdHJlYW1Ob2Rl
ID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKLSAg
ICBOb2RlKiBkb3duc3RyZWFtTm9kZSA9IHYuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCku
ZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiB1cHN0cmVhbU5vZGUgPSBuZXh0LmRlZXBFcXVp
dmFsZW50KCkucHJldmlvdXNWaXN1YWxseUVxdWl2YWxlbnRQb3NpdGlvbigpLmRlcHJlY2F0ZWRO
b2RlKCk7CisgICAgTm9kZSogZG93bnN0cmVhbU5vZGUgPSB2LmRlZXBFcXVpdmFsZW50KCkubmV4
dFZpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAvLyBB
ZGQgYW4gaW50ZXJjaGFuZ2UgbmV3bGluZSBpZiBhIHBhcmFncmFwaCBicmVhayBpcyBzZWxlY3Rl
ZCBhbmQgYSBiciB3b24ndCBhbHJlYWR5IGJlIGFkZGVkIHRvIHRoZSBtYXJrdXAgdG8gcmVwcmVz
ZW50IGl0LgogICAgIHJldHVybiBpc0VuZE9mUGFyYWdyYXBoKHYpICYmIGlzU3RhcnRPZlBhcmFn
cmFwaChuZXh0KSAmJiAhKHVwc3RyZWFtTm9kZS0+aGFzVGFnTmFtZShiclRhZykgJiYgdXBzdHJl
YW1Ob2RlID09IGRvd25zdHJlYW1Ob2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA4MDUzMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQ3LDEwICsy
NjQ3LDEwIEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJPYmplY3Q6OmNyZWF0ZVZpc2kKICAgICAg
ICAgaWYgKCFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CiAgICAgICAgICAgICAvLyBJZiBp
dCBjYW4gYmUgZm91bmQsIHdlIHByZWZlciBhIHZpc3VhbGx5IGVxdWl2YWxlbnQgcG9zaXRpb24g
dGhhdCBpcyBlZGl0YWJsZS4gCiAgICAgICAgICAgICBQb3NpdGlvbiBwb3NpdGlvbihub2RlLCBv
ZmZzZXQpOwotICAgICAgICAgICAgUG9zaXRpb24gY2FuZGlkYXRlID0gcG9zaXRpb24uZG93bnN0
cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgICAgICBQb3NpdGlvbiBjYW5k
aWRhdGUgPSBwb3NpdGlvbi5uZXh0VmlzdWFsbHlFcXVpdmFsZW50UG9zaXRpb24oQ2FuQ3Jvc3NF
ZGl0aW5nQm91bmRhcnkpOwogICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9k
ZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oY2FuZGlkYXRlLCBhZmZpbml0eSk7Ci0gICAgICAgICAgICBjYW5kaWRhdGUgPSBw
b3NpdGlvbi51cHN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgICAgICBj
YW5kaWRhdGUgPSBwb3NpdGlvbi5wcmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudFBvc2l0aW9uKENh
bkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUuZGVwcmVj
YXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MDU1MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAzLTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEdpdmUgUG9zaXRpb24mYXBvcztzIHVwc3RyZWFtIGFuZCBkb3du
c3RyZWFtIG1vcmUgZGVzY3JpcHRpdmUgbmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU1NjUwCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2VkUmFu
Z2U6XSk6CisKIDIwMTEtMDMtMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDgwNTMwKQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzk0LDEwICs3OTQsMTAgQEAg
LSAoRE9NUmFuZ2UgKilfc21hcnREZWxldGVSYW5nZUZvclByb3BvcwogCiAgICAgUG9zaXRpb24g
c3RhcnQoc3RhcnRDb250YWluZXIsIFtwcm9wb3NlZFJhbmdlIHN0YXJ0T2Zmc2V0XSk7CiAgICAg
UG9zaXRpb24gZW5kKGVuZENvbnRhaW5lciwgW3Byb3Bvc2VkUmFuZ2UgZW5kT2Zmc2V0XSk7Ci0g
ICAgUG9zaXRpb24gbmV3U3RhcnQgPSBzdGFydC51cHN0cmVhbSgpLmxlYWRpbmdXaGl0ZXNwYWNl
UG9zaXRpb24oRE9XTlNUUkVBTSwgdHJ1ZSk7CisgICAgUG9zaXRpb24gbmV3U3RhcnQgPSBzdGFy
dC5wcmV2aW91c1Zpc3VhbGx5RXF1aXZhbGVudCgpLmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24o
RE9XTlNUUkVBTSwgdHJ1ZSk7CiAgICAgaWYgKG5ld1N0YXJ0LmlzTnVsbCgpKQogICAgICAgICBu
ZXdTdGFydCA9IHN0YXJ0OwotICAgIFBvc2l0aW9uIG5ld0VuZCA9IGVuZC5kb3duc3RyZWFtKCku
dHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRE9XTlNUUkVBTSwgdHJ1ZSk7CisgICAgUG9zaXRp
b24gbmV3RW5kID0gZW5kLm5leHRWaXN1YWxseUVxdWl2YWxlbnQoKS50cmFpbGluZ1doaXRlc3Bh
Y2VQb3NpdGlvbihET1dOU1RSRUFNLCB0cnVlKTsKICAgICBpZiAobmV3RW5kLmlzTnVsbCgpKQog
ICAgICAgICBuZXdFbmQgPSBlbmQ7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>