<?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>121892</bug_id>
          
          <creation_ts>2013-09-24 21:51:22 -0700</creation_ts>
          <short_desc>Tie the life of DocumentStyleSheetCollection and Document together</short_desc>
          <delta_ts>2013-09-25 18:18:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbarton</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>roger_fong</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932876</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-24 21:51:22 -0700</bug_when>
    <thetext>Tie the life of DocumentStyleSheetCollection and Document together</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932877</commentid>
    <comment_count>1</comment_count>
      <attachid>212535</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-24 21:54:36 -0700</bug_when>
    <thetext>Created attachment 212535
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933162</commentid>
    <comment_count>2</comment_count>
      <attachid>212535</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-25 12:28:04 -0700</bug_when>
    <thetext>Comment on attachment 212535
Patch

Great idea!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933197</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-25 14:13:09 -0700</bug_when>
    <thetext>Committed r156422: &lt;http://trac.webkit.org/changeset/156422&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933224</commentid>
    <comment_count>4</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-09-25 15:30:29 -0700</bug_when>
    <thetext>On the Windows debug tester the following assertion now fails:

ASSERTION FAILED: documentInternal()
c:\cygwin\home\buildbot\slave\win-debug\build\webkitbuild\debug\include\webcore\Node.h(403) : WebCore::Node::document

See http://build.webkit.org/results/Apple%20Win%207%20Debug%20(Tests)/r156423%20(54751)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933226</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-25 15:40:36 -0700</bug_when>
    <thetext>That&apos;s odd. Could you symbolicate one of the crash?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933262</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-09-25 16:55:03 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; That&apos;s odd. Could you symbolicate one of the crash?

I&apos;m hitting this very consistently.

/Volumes/Users/jer/Projects/WebKit.git/OpenSource/Source/WebCore/dom/Node.h(403) : WebCore::Document &amp;WebCore::Node::document() const
1   0x102e511b0 WTFCrash
2   0x10592b9c3 WebCore::Node::document() const
3   0x105cad2b1 WebCore::CSSStyleSheet::ownerDocument() const
4   0x105cad2f9 WebCore::CSSStyleSheet::clearOwnerNode()
5   0x105e1cb1b WebCore::DocumentStyleSheetCollection::~DocumentStyleSheetCollection()
6   0x105e1cac5 WebCore::DocumentStyleSheetCollection::~DocumentStyleSheetCollection()
7   0x105db1ddc WebCore::Document::~Document()
8   0x1061cea45 WebCore::HTMLDocument::~HTMLDocument()
9   0x1061ce915 WebCore::HTMLDocument::~HTMLDocument()
10  0x1061ce8e9 WebCore::HTMLDocument::~HTMLDocument()
11  0x1061ce93c non-virtual thunk to WebCore::HTMLDocument::~HTMLDocument()

It looks like we&apos;re now referencing a node&apos;s document from the document&apos;s destructor.  Seems bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933264</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-09-25 16:58:26 -0700</bug_when>
    <thetext>Aha, now that it&apos;s a non-pointer member, we&apos;re destroying it after calling clearDocumentScope() rather than before.  That causes the ASSERT we&apos;re seeing in Node::document().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933274</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-25 17:38:59 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Aha, now that it&apos;s a non-pointer member, we&apos;re destroying it after calling clearDocumentScope() rather than before.  That causes the ASSERT we&apos;re seeing in Node::document().

I think CSSStyleSheet should not re-enter document at any point during destruction.

I am trying something to that effect. It is building at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933301</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-25 18:18:38 -0700</bug_when>
    <thetext>Follow up: https://bugs.webkit.org/show_bug.cgi?id=121933</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212535</attachid>
            <date>2013-09-24 21:54:36 -0700</date>
            <delta_ts>2013-09-25 12:28:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121892-20130924215435.patch</filename>
            <type>text/plain</type>
            <size>60807</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjM4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBAQAorMjAxMy0wOS0yNCAgQmVuamFt
aW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGllIHRoZSBsaWZl
IG9mIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24gYW5kIERvY3VtZW50IHRvZ2V0aGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE4OTIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uIGhhZCBhbiBvZGQgZGVzdHJ1Y3Rpb24gcGF0dGVybiBmb3Igbm8g
YXBwYXJlbnQgcmVhc29uLgorCisgICAgICAgIFRoZSB0d28gb2JqZWN0cyBzdHJpY3RseSBkZXBl
bmQgb24gZWFjaG90aGVyLCB0aGlzIHBhdGNoIG1ha2UgdGhhdCBleHBsaWNpdCBieSBtYWtpbmcK
KyAgICAgICAgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiBhIHBsYWluIG9iamVjdCBpbiBE
b2N1bWVudCdzIG1lbW9yeSBzcGFjZS4KKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmRpZE11dGF0ZVJ1bGVzKToKKyAg
ICAgICAgKiBjc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFJ1bGVTZXRzOjppbml0VXNlclN0eWxlKToKKyAgICAgICAgKiBjc3MvRG9jdW1lbnRSdWxl
U2V0cy5oOgorICAgICAgICAqIGNzcy9JbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU09NV3JhcHBlcnM6OmNvbGxlY3RGcm9tRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NPTVdy
YXBwZXJzOjpnZXRXcmFwcGVyRm9yUnVsZUluU2hlZXRzKToKKyAgICAgICAgKiBjc3MvSW5zcGVj
dG9yQ1NTT01XcmFwcGVycy5oOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjptYXRjaFJlY3Vyc2l2ZWx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUpOgorICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0TGlzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdDo6c3R5bGVTaGVldHMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldExpc3Q6OmRldGFjaEZyb21Eb2N1bWVudCk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6fkRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpzZXRDb21wYXRpYmlsaXR5TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6cmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZVN0eWxl
UmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnByb2Nlc3NIdHRwRXF1aXYp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnByZWZlcnJlZFN0eWxlc2hlZXRTZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNlbGVjdGVkU3R5bGVzaGVldFNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzY2hlZHVsZU9wdGltaXplZFN0eWxlU2hlZXRVcGRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpoYXZlU3R5bGVzaGVldHNMb2FkZWQpOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN0eWxlU2hl
ZXRDb2xsZWN0aW9uKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246OmNvbWJpbmVDU1NGZWF0dXJlRmxhZ3MpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cmVzZXRDU1NGZWF0dXJlRmxh
Z3MpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6cGFn
ZVVzZXJTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uOjpjbGVhclBhZ2VVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlUGFnZVVzZXJTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRhdGVJbmplY3RlZFN0eWxlU2hlZXRD
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpp
bnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkQXV0aG9yU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YWRkVXNlclNoZWV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnJlbW92ZVBlbmRpbmdT
aGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjph
ZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YW5hbHl6ZVN0eWxlU2hlZXRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEFjdGl2ZUNTU1N0eWxlU2hlZXRzRnJv
bVNlYW1sZXNzUGFyZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjcmVhdGVQc2V1ZG9FbGVtZW50SWZOZWVkZWQpOgor
ICAgICAgICAqIGRvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lU3R5bGVTaGVldE93bmVyOjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lU3R5bGVTaGVldE93bmVyOjpjbGVhckRvY3VtZW50RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVN0eWxlU2hlZXRPd25lcjo6c2hlZXRMb2FkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lU3R5bGVTaGVldE93bmVyOjpzdGFydExvYWRpbmdE
eW5hbWljU2hlZXQpOgorICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjp+UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y2hlY2tT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6c2hl
ZXRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjppbnNl
cnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpyZW1v
dmVkRnJvbSk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojp+SFRNTExpbmtFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMaW5rRWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExp
bmtFbGVtZW50OjphZGRQZW5kaW5nU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtF
bGVtZW50OjpyZW1vdmVQZW5kaW5nU2hlZXQpOgorICAgICAgICAqIGh0bWwvSFRNTFF1b3RlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUXVvdGVFbGVtZW50OjppbnNlcnRlZElu
dG8pOgorICAgICAgICAqIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjpIVE1MVmlld1NvdXJjZURvY3VtZW50
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlSW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3aWxsTWF0Y2hSdWxlKToKKyAgICAgICAgKiBtYXRobWwvTWF0aE1MTWF0aEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE1MTWF0aEVsZW1lbnQ6Omluc2VydGVk
SW50byk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmludmFsaWRhdGVJbmplY3RlZFN0
eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVyKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklu
bGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluZUJveGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcklubGluZTo6bGluZUhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVC
cmVhay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQnJlYWs6OmxpbmVIZWlnaHQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0Ojp1bmNhY2hlZEZpcnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6Y2FjaGVkRmlyc3RMaW5lU3R5bGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Zmly
c3RMaW5lU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnZlcnRpY2FsUG9zaXRpb25Gb3JCb3gpOgor
ICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OnJlc29sdmVMb2NhbCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjppbnNlcnRBdXRob3JDU1MpOgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjppbnNlcnRVc2VyQ1NTKToKKwogMjAxMy0wOS0yNCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBEb2N1bWVudDo6
c2V0Rm9jdXNlZEVsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJ
KHJldmlzaW9uIDE1NjM3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6
ZGlkTXV0YXRlUnVsZXMoUnVsZU0KICAgICBpZiAoIW93bmVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAobXV0YXRpb25UeXBlID09IFJ1bGVJbnNlcnRpb24gJiYgIWNvbnRlbnRzV2VyZUNs
b25lZEZvck11dGF0aW9uICYmICFvd25lci0+c3R5bGVTaGVldENvbGxlY3Rpb24oKS0+YWN0aXZl
U3R5bGVTaGVldHNDb250YWlucyh0aGlzKSkgeworICAgIGlmIChtdXRhdGlvblR5cGUgPT0gUnVs
ZUluc2VydGlvbiAmJiAhY29udGVudHNXZXJlQ2xvbmVkRm9yTXV0YXRpb24gJiYgIW93bmVyLT5z
dHlsZVNoZWV0Q29sbGVjdGlvbigpLmFjdGl2ZVN0eWxlU2hlZXRzQ29udGFpbnModGhpcykpIHsK
ICAgICAgICAgb3duZXItPnNjaGVkdWxlT3B0aW1pemVkU3R5bGVTaGVldFVwZGF0ZSgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVs
ZVNldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVT
ZXRzLmNwcAkocmV2aXNpb24gMTU2Mzc5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50
UnVsZVNldHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyArNDYsMTMgQEAgRG9jdW1lbnRS
dWxlU2V0czo6fkRvY3VtZW50UnVsZVNldHMoKQogewogfQogCi12b2lkIERvY3VtZW50UnVsZVNl
dHM6OmluaXRVc2VyU3R5bGUoRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiogc3R5bGVTaGVl
dENvbGxlY3Rpb24sIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVSZXNv
bHZlciYgcmVzb2x2ZXIpCit2b2lkIERvY3VtZW50UnVsZVNldHM6OmluaXRVc2VyU3R5bGUoRG9j
dW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiYgc3R5bGVTaGVldENvbGxlY3Rpb24sIGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIpCiB7CiAg
ICAgT3duUHRyPFJ1bGVTZXQ+IHRlbXBVc2VyU3R5bGUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKLSAg
ICBpZiAoQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCA9IHN0eWxlU2hlZXRDb2xsZWN0aW9u
LT5wYWdlVXNlclNoZWV0KCkpCisgICAgaWYgKENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQg
PSBzdHlsZVNoZWV0Q29sbGVjdGlvbi5wYWdlVXNlclNoZWV0KCkpCiAgICAgICAgIHRlbXBVc2Vy
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCksIG1lZGl1
bSwgJnJlc29sdmVyKTsKLSAgICBjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKHN0eWxl
U2hlZXRDb2xsZWN0aW9uLT5pbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpLCAqdGVtcFVzZXJTdHls
ZSwgbWVkaXVtLCByZXNvbHZlcik7Ci0gICAgY29sbGVjdFJ1bGVzRnJvbVVzZXJTdHlsZVNoZWV0
cyhzdHlsZVNoZWV0Q29sbGVjdGlvbi0+ZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSwgKnRlbXBV
c2VyU3R5bGUsIG1lZGl1bSwgcmVzb2x2ZXIpOworICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5
bGVTaGVldHMoc3R5bGVTaGVldENvbGxlY3Rpb24uaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSwg
KnRlbXBVc2VyU3R5bGUsIG1lZGl1bSwgcmVzb2x2ZXIpOworICAgIGNvbGxlY3RSdWxlc0Zyb21V
c2VyU3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxlY3Rpb24uZG9jdW1lbnRVc2VyU3R5bGVTaGVl
dHMoKSwgKnRlbXBVc2VyU3R5bGUsIG1lZGl1bSwgcmVzb2x2ZXIpOwogICAgIGlmICh0ZW1wVXNl
clN0eWxlLT5ydWxlQ291bnQoKSA+IDAgfHwgdGVtcFVzZXJTdHlsZS0+cGFnZVJ1bGVzKCkuc2l6
ZSgpID4gMCkKICAgICAgICAgbV91c2VyU3R5bGUgPSB0ZW1wVXNlclN0eWxlLnJlbGVhc2UoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuaAkocmV2aXNpb24gMTU2
Mzc5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgUnVsZVNldCogc2libGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fc2libGluZ1J1bGVTZXQuZ2V0KCk7IH0KICAgICBSdWxlU2V0KiB1bmNv
bW1vbkF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0
LmdldCgpOyB9CiAKLSAgICB2b2lkIGluaXRVc2VyU3R5bGUoRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbiosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBTdHlsZVJlc29sdmVyJik7Cisg
ICAgdm9pZCBpbml0VXNlclN0eWxlKERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24mLCBjb25z
dCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciYpOwogICAgIHZvaWQgcmVzZXRB
dXRob3JTdHlsZSgpOwogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVTaGVldHModW5zaWduZWQg
Zmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYsIE1lZGlhUXVl
cnlFdmFsdWF0b3IqLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiwgYm9vbCBpc1ZpZXdTb3VyY2Us
IFN0eWxlUmVzb2x2ZXIqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0luc3BlY3RvckNT
U09NV3JhcHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9JbnNwZWN0
b3JDU1NPTVdyYXBwZXJzLmNwcAkocmV2aXNpb24gMTU2Mzc5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0luc3BlY3RvckNTU09NV3JhcHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTUg
KzEwMywxNSBAQCB2b2lkIEluc3BlY3RvckNTU09NV3JhcHBlcnM6OmNvbGxlY3RGcm9tCiAgICAg
ICAgIGNvbGxlY3Qoc2hlZXRzW2ldLmdldCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NPTVdy
YXBwZXJzOjpjb2xsZWN0RnJvbURvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24oRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbiogc3R5bGVTaGVldENvbGxlY3Rpb24pCit2b2lkIEluc3BlY3Rv
ckNTU09NV3JhcHBlcnM6OmNvbGxlY3RGcm9tRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbihE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uJiBzdHlsZVNoZWV0Q29sbGVjdGlvbikKIHsKLSAg
ICBjb2xsZWN0RnJvbVN0eWxlU2hlZXRzKHN0eWxlU2hlZXRDb2xsZWN0aW9uLT5hY3RpdmVBdXRo
b3JTdHlsZVNoZWV0cygpKTsKLSAgICBjb2xsZWN0KHN0eWxlU2hlZXRDb2xsZWN0aW9uLT5wYWdl
VXNlclNoZWV0KCkpOwotICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxl
Y3Rpb24tPmluamVjdGVkVXNlclN0eWxlU2hlZXRzKCkpOwotICAgIGNvbGxlY3RGcm9tU3R5bGVT
aGVldHMoc3R5bGVTaGVldENvbGxlY3Rpb24tPmRvY3VtZW50VXNlclN0eWxlU2hlZXRzKCkpOwor
ICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxlY3Rpb24uYWN0aXZlQXV0
aG9yU3R5bGVTaGVldHMoKSk7CisgICAgY29sbGVjdChzdHlsZVNoZWV0Q29sbGVjdGlvbi5wYWdl
VXNlclNoZWV0KCkpOworICAgIGNvbGxlY3RGcm9tU3R5bGVTaGVldHMoc3R5bGVTaGVldENvbGxl
Y3Rpb24uaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSk7CisgICAgY29sbGVjdEZyb21TdHlsZVNo
ZWV0cyhzdHlsZVNoZWV0Q29sbGVjdGlvbi5kb2N1bWVudFVzZXJTdHlsZVNoZWV0cygpKTsKIH0K
IAotQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzOjpnZXRXcmFwcGVyRm9yUnVs
ZUluU2hlZXRzKFN0eWxlUnVsZSogcnVsZSwgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiog
c3R5bGVTaGVldENvbGxlY3Rpb24pCitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvckNTU09NV3JhcHBl
cnM6OmdldFdyYXBwZXJGb3JSdWxlSW5TaGVldHMoU3R5bGVSdWxlKiBydWxlLCBEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uJiBzdHlsZVNoZWV0Q29sbGVjdGlvbikKIHsKICAgICBpZiAobV9z
dHlsZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkpIHsKICAgICAgICAgY29sbGVjdEZy
b21TdHlsZVNoZWV0Q29udGVudHMobV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyU2V0LCBDU1NEZWZh
dWx0U3R5bGVTaGVldHM6OnNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9JbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0luc3BlY3RvckNTU09NV3JhcHBlcnMuaAkocmV2aXNpb24gMTU2Mzc5KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0luc3BlY3RvckNTU09NV3JhcHBlcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzIHsKIHB1
YmxpYzoKICAgICAvLyBXQVJOSU5HLiBUaGlzIHdpbGwgY29uc3RydWN0IENTU09NIHdyYXBwZXJz
IGZvciBhbGwgc3R5bGUgcnVsZXMgYW5kIGNhY2hlIHRoZW0gaW4gYSBtYXAgZm9yIHNpZ25pZmlj
YW50IG1lbW9yeSBjb3N0LgogICAgIC8vIEl0IGlzIGhlcmUgdG8gc3VwcG9ydCBpbnNwZWN0b3Iu
IERvbid0IHVzZSBmb3IgYW55IHJlZ3VsYXIgZW5naW5lIGZ1bmN0aW9ucy4KLSAgICBDU1NTdHls
ZVJ1bGUqIGdldFdyYXBwZXJGb3JSdWxlSW5TaGVldHMoU3R5bGVSdWxlKiwgRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbiopOworICAgIENTU1N0eWxlUnVsZSogZ2V0V3JhcHBlckZvclJ1bGVJ
blNoZWV0cyhTdHlsZVJ1bGUqLCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uJik7CiAgICAg
dm9pZCBjb2xsZWN0RnJvbVN0eWxlU2hlZXRJZk5lZWRlZChDU1NTdHlsZVNoZWV0Kik7CiAKIHBy
aXZhdGU6CkBAIC01MCw3ICs1MCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbGxlY3RGcm9t
U3R5bGVTaGVldENvbnRlbnRzKEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0
V3JhcHBlclNldCwgU3R5bGVTaGVldENvbnRlbnRzKik7CiAgICAgdm9pZCBjb2xsZWN0RnJvbVN0
eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYpOwotICAgIHZv
aWQgY29sbGVjdEZyb21Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb24qKTsKKyAgICB2b2lkIGNvbGxlY3RGcm9tRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbihEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uJik7CiAKICAgICBIYXNoTWFw
PFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4gbV9zdHlsZVJ1bGVUb0NTU09NV3Jh
cHBlck1hcDsKICAgICBIYXNoU2V0PFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+IG1fc3R5bGVTaGVl
dENTU09NV3JhcHBlclNldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwCShyZXZpc2lvbiAxNTYzODApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2ggU2VsZWN0b3JDaGVja2VyOjoKIAogICAgICAgICAgICAgUHNldWRvSWQgcHNldWRv
SWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQoY29udGV4dC5zZWxlY3Rvci0+cHNldWRvVHlwZSgp
KTsKICAgICAgICAgICAgIGlmIChwc2V1ZG9JZCA9PSBGSVJTVF9MRVRURVIpCi0gICAgICAgICAg
ICAgICAgY29udGV4dC5lbGVtZW50LT5kb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkt
PnNldFVzZXNGaXJzdExldHRlclJ1bGVzKHRydWUpOworICAgICAgICAgICAgICAgIGNvbnRleHQu
ZWxlbWVudC0+ZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnNldFVzZXNGaXJzdExl
dHRlclJ1bGVzKHRydWUpOwogICAgICAgICAgICAgaWYgKHBzZXVkb0lkICE9IE5PUFNFVURPKQog
ICAgICAgICAgICAgICAgIGR5bmFtaWNQc2V1ZG8gPSBwc2V1ZG9JZDsKICAgICAgICAgfQpAQCAt
NDQ3LDcgKzQ0Nyw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShjb25zdCBTZWwK
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0U3R5bGVBZmZlY3RlZEJ5RW1wdHkoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudFN0eWxlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC0+cmVuZGVyU3R5bGUoKSAm
JiAoZWxlbWVudC0+ZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT51c2VzU2libGlu
Z1J1bGVzKCkgfHwgZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+dW5pcXVlKCkpKQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5yZW5kZXJTdHlsZSgpICYmIChlbGVtZW50LT5k
b2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkudXNlc1NpYmxpbmdSdWxlcygpIHx8IGVs
ZW1lbnQtPnJlbmRlclN0eWxlKCktPnVuaXF1ZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE1NjM3OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3
IEBAIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGQKIAogICAgIG1fcnVs
ZVNldHMucmVzZXRBdXRob3JTdHlsZSgpOwogCi0gICAgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbiogc3R5bGVTaGVldENvbGxlY3Rpb24gPSBtX2RvY3VtZW50LnN0eWxlU2hlZXRDb2xsZWN0
aW9uKCk7CisgICAgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiYgc3R5bGVTaGVldENvbGxl
Y3Rpb24gPSBtX2RvY3VtZW50LnN0eWxlU2hlZXRDb2xsZWN0aW9uKCk7CiAgICAgbV9ydWxlU2V0
cy5pbml0VXNlclN0eWxlKHN0eWxlU2hlZXRDb2xsZWN0aW9uLCAqbV9tZWRpdW0sICp0aGlzKTsK
IAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCkBAIC0yOTEsNyArMjkxLDcgQEAgU3R5bGVSZXNvbHZl
cjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCYgZAogICAgIH0KICNlbmRpZgogCi0gICAgYXBwZW5k
QXV0aG9yU3R5bGVTaGVldHMoMCwgc3R5bGVTaGVldENvbGxlY3Rpb24tPmFjdGl2ZUF1dGhvclN0
eWxlU2hlZXRzKCkpOworICAgIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKDAsIHN0eWxlU2hlZXRD
b2xsZWN0aW9uLmFjdGl2ZUF1dGhvclN0eWxlU2hlZXRzKCkpOwogfQogCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBW
ZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHN0eWxlU2hlZXRzKQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCShyZXZpc2lvbiAxNTYzNzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiAr
NDUsMTIgQEAgaW5saW5lIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPgogewogICAg
IGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIG1fZGV0YWNoZWRTdHlsZVNoZWV0czsK
LSAgICByZXR1cm4gbV9kb2N1bWVudC0+c3R5bGVTaGVldENvbGxlY3Rpb24oKS0+c3R5bGVTaGVl
dHNGb3JTdHlsZVNoZWV0TGlzdCgpOworICAgIHJldHVybiBtX2RvY3VtZW50LT5zdHlsZVNoZWV0
Q29sbGVjdGlvbigpLnN0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3QoKTsKIH0KIAogdm9pZCBT
dHlsZVNoZWV0TGlzdDo6ZGV0YWNoRnJvbURvY3VtZW50KCkKIHsKLSAgICBtX2RldGFjaGVkU3R5
bGVTaGVldHMgPSBtX2RvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5zdHlsZVNoZWV0
c0ZvclN0eWxlU2hlZXRMaXN0KCk7CisgICAgbV9kZXRhY2hlZFN0eWxlU2hlZXRzID0gbV9kb2N1
bWVudC0+c3R5bGVTaGVldENvbGxlY3Rpb24oKS5zdHlsZVNoZWV0c0ZvclN0eWxlU2hlZXRMaXN0
KCk7CiAgICAgbV9kb2N1bWVudCA9IDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gMTU2Mzc5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRTaGFyZWRPYmplY3RQb29sLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgogI2luY2x1ZGUgIkVkaXRvci5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKQEAgLTQyMiw3ICs0MjEsNyBAQCBEb2N1bWVudDo6RG9j
dW1lbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBLCiAgICAgLCBtX2RvbVRyZWVWZXJzaW9uKCsrc19n
bG9iYWxUcmVlVmVyc2lvbikKICAgICAsIG1fbGlzdGVuZXJUeXBlcygwKQogICAgICwgbV9tdXRh
dGlvbk9ic2VydmVyVHlwZXMoMCkKLSAgICAsIG1fc3R5bGVTaGVldENvbGxlY3Rpb24oRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMpKQorICAgICwgbV9zdHlsZVNoZWV0
Q29sbGVjdGlvbigqdGhpcykKICAgICAsIG1fdmlzaXRlZExpbmtTdGF0ZShWaXNpdGVkTGlua1N0
YXRlOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3Zpc3VhbGx5T3JkZXJlZChmYWxzZSkKICAgICAs
IG1fcmVhZHlTdGF0ZShDb21wbGV0ZSkKQEAgLTYwMyw4ICs2MDIsNiBAQCBEb2N1bWVudDo6fkRv
Y3VtZW50KCkKICAgICBpZiAobV9zdHlsZVNoZWV0TGlzdCkKICAgICAgICAgbV9zdHlsZVNoZWV0
TGlzdC0+ZGV0YWNoRnJvbURvY3VtZW50KCk7CiAKLSAgICBtX3N0eWxlU2hlZXRDb2xsZWN0aW9u
LmNsZWFyKCk7Ci0KICAgICBpZiAobV9lbGVtZW50U2hlZXQpCiAgICAgICAgIG1fZWxlbWVudFNo
ZWV0LT5jbGVhck93bmVyTm9kZSgpOwogCkBAIC03MzMsOCArNzMwLDggQEAgdm9pZCBEb2N1bWVu
dDo6c2V0Q29tcGF0aWJpbGl0eU1vZGUoQ29tcAogCiAgICAgaWYgKGluUXVpcmtzTW9kZSgpICE9
IHdhc0luUXVpcmtzTW9kZSkgewogICAgICAgICAvLyBBbGwgdXNlciBzdHlsZXNoZWV0cyBoYXZl
IHRvIHJlcGFyc2UgdXNpbmcgdGhlIGRpZmZlcmVudCBtb2RlLgotICAgICAgICBtX3N0eWxlU2hl
ZXRDb2xsZWN0aW9uLT5jbGVhclBhZ2VVc2VyU2hlZXQoKTsKLSAgICAgICAgbV9zdHlsZVNoZWV0
Q29sbGVjdGlvbi0+aW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCk7CisgICAgICAg
IG1fc3R5bGVTaGVldENvbGxlY3Rpb24uY2xlYXJQYWdlVXNlclNoZWV0KCk7CisgICAgICAgIG1f
c3R5bGVTaGVldENvbGxlY3Rpb24uaW52YWxpZGF0ZUluamVjdGVkU3R5bGVTaGVldENhY2hlKCk7
CiAgICAgfQogfQogCkBAIC0xNzczLDEyICsxNzcwLDEyIEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2Fs
Y1N0eWxlKFN0eWxlOjpDaGFuZ2UKICAgICAvLyByZS1hdHRhY2hpbmcgb3VyIGNvbnRhaW5pbmcg
aWZyYW1lLCB3aGljaCB3aGVuIGFza2VkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjppc1VSTEFsbG93
ZWQKICAgICAvLyBoaXRzIGEgbnVsbC1kZXJlZmVyZW5jZSBkdWUgdG8gc2VjdXJpdHkgY29kZSBh
bHdheXMgYXNzdW1pbmcgdGhlIGRvY3VtZW50IGhhcyBhIFNlY3VyaXR5T3JpZ2luLgogCi0gICAg
bV9zdHlsZVNoZWV0Q29sbGVjdGlvbi0+Zmx1c2hQZW5kaW5nVXBkYXRlcygpOworICAgIG1fc3R5
bGVTaGVldENvbGxlY3Rpb24uZmx1c2hQZW5kaW5nVXBkYXRlcygpOwogCiAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbFJlY2FsY3VsYXRlU3R5bGUodGhpcyk7CiAKICAgICBpZiAobV9lbGVtZW50U2hlZXQgJiYg
bV9lbGVtZW50U2hlZXQtPmNvbnRlbnRzKCktPnVzZXNSZW1Vbml0cygpKQotICAgICAgICBtX3N0
eWxlU2hlZXRDb2xsZWN0aW9uLT5zZXRVc2VzUmVtVW5pdCh0cnVlKTsKKyAgICAgICAgbV9zdHls
ZVNoZWV0Q29sbGVjdGlvbi5zZXRVc2VzUmVtVW5pdCh0cnVlKTsKIAogICAgIG1faW5TdHlsZVJl
Y2FsYyA9IHRydWU7CiAgICAgewpAQCAtMTgxMCw3ICsxODA3LDcgQEAgdm9pZCBEb2N1bWVudDo6
cmVjYWxjU3R5bGUoU3R5bGU6OkNoYW5nZQogCiAgICAgICAgIC8vIFBzZXVkbyBlbGVtZW50IHJl
bW92YWwgYW5kIHNpbWlsYXIgbWF5IG9ubHkgd29yayB3aXRoIHRoZXNlIGZsYWdzIHN0aWxsIHNl
dC4gUmVzZXQgdGhlbSBhZnRlciB0aGUgc3R5bGUgcmVjYWxjLgogICAgICAgICBpZiAobV9zdHls
ZVJlc29sdmVyKQotICAgICAgICAgICAgbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi0+cmVzZXRDU1NG
ZWF0dXJlRmxhZ3MoKTsKKyAgICAgICAgICAgIG1fc3R5bGVTaGVldENvbGxlY3Rpb24ucmVzZXRD
U1NGZWF0dXJlRmxhZ3MoKTsKIAogICAgICAgICBmcmFtZVZpZXcucmVzdW1lU2NoZWR1bGVkRXZl
bnRzKCk7CiAgICAgICAgIGZyYW1lVmlldy5lbmREZWZlcnJlZFJlcGFpbnRzKCk7CkBAIC0xOTc5
LDcgKzE5NzYsNyBAQCB2b2lkIERvY3VtZW50OjpjcmVhdGVTdHlsZVJlc29sdmVyKCkKICAgICBp
ZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gdGhpcy0+c2V0dGluZ3MoKSkKICAgICAgICAgbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzID0gc2V0dGluZ3MtPmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVk
KCk7CiAgICAgbV9zdHlsZVJlc29sdmVyID0gYWRvcHRQdHIobmV3IFN0eWxlUmVzb2x2ZXIoKnRo
aXMsIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykpOwotICAgIG1fc3R5bGVTaGVldENvbGxlY3Rp
b24tPmNvbWJpbmVDU1NGZWF0dXJlRmxhZ3MoKTsKKyAgICBtX3N0eWxlU2hlZXRDb2xsZWN0aW9u
LmNvbWJpbmVDU1NGZWF0dXJlRmxhZ3MoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6Y2xlYXJTdHls
ZVJlc29sdmVyKCkKQEAgLTI4NDYsOCArMjg0Myw4IEBAIHZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NI
dHRwRXF1aXYoY29uc3QgU3QKICAgICAgICAgLy8gRm9yIG1vcmUgaW5mbywgc2VlIHRoZSB0ZXN0
IGF0OgogICAgICAgICAvLyBodHRwOi8vd3d3LmhpeGllLmNoL3Rlc3RzL2V2aWwvY3NzL2ltcG9y
dC9tYWluL3ByZWZlcnJlZC5odG1sCiAgICAgICAgIC8vIC1kd2gKLSAgICAgICAgbV9zdHlsZVNo
ZWV0Q29sbGVjdGlvbi0+c2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZShjb250ZW50KTsKLSAg
ICAgICAgbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi0+c2V0UHJlZmVycmVkU3R5bGVzaGVldFNldE5h
bWUoY29udGVudCk7CisgICAgICAgIG1fc3R5bGVTaGVldENvbGxlY3Rpb24uc2V0U2VsZWN0ZWRT
dHlsZXNoZWV0U2V0TmFtZShjb250ZW50KTsKKyAgICAgICAgbV9zdHlsZVNoZWV0Q29sbGVjdGlv
bi5zZXRQcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZShjb250ZW50KTsKICAgICAgICAgc3R5bGVS
ZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAgICAgfSBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShlcXVpdiwgInJlZnJlc2giKSkgewogICAgICAgICBkb3VibGUgZGVsYXk7CkBA
IC0zMTMzLDE3ICszMTMwLDE3IEBAIFN0eWxlU2hlZXRMaXN0KiBEb2N1bWVudDo6c3R5bGVTaGVl
dHMoKQogCiBTdHJpbmcgRG9jdW1lbnQ6OnByZWZlcnJlZFN0eWxlc2hlZXRTZXQoKSBjb25zdAog
ewotICAgIHJldHVybiBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLT5wcmVmZXJyZWRTdHlsZXNoZWV0
U2V0TmFtZSgpOworICAgIHJldHVybiBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLnByZWZlcnJlZFN0
eWxlc2hlZXRTZXROYW1lKCk7CiB9CiAKIFN0cmluZyBEb2N1bWVudDo6c2VsZWN0ZWRTdHlsZXNo
ZWV0U2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi0+c2Vs
ZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZSgpOworICAgIHJldHVybiBtX3N0eWxlU2hlZXRDb2xsZWN0
aW9uLnNlbGVjdGVkU3R5bGVzaGVldFNldE5hbWUoKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0
U2VsZWN0ZWRTdHlsZXNoZWV0U2V0KGNvbnN0IFN0cmluZyYgYVN0cmluZykKIHsKLSAgICBtX3N0
eWxlU2hlZXRDb2xsZWN0aW9uLT5zZXRTZWxlY3RlZFN0eWxlc2hlZXRTZXROYW1lKGFTdHJpbmcp
OworICAgIG1fc3R5bGVTaGVldENvbGxlY3Rpb24uc2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFt
ZShhU3RyaW5nKTsKICAgICBzdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsK
IH0KIApAQCAtMzE2Miw3ICszMTU5LDcgQEAgdm9pZCBEb2N1bWVudDo6c2NoZWR1bGVPcHRpbWl6
ZWRTdHlsZVNoZQogewogICAgIGlmIChtX29wdGltaXplZFN0eWxlU2hlZXRVcGRhdGVUaW1lci5p
c0FjdGl2ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgc3R5bGVTaGVldENvbGxlY3Rpb24oKS0+
c2V0UGVuZGluZ1VwZGF0ZVR5cGUoRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6T3B0aW1p
emVkVXBkYXRlKTsKKyAgICBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLnNldFBlbmRpbmdVcGRhdGVU
eXBlKERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246Ok9wdGltaXplZFVwZGF0ZSk7CiAgICAg
bV9vcHRpbWl6ZWRTdHlsZVNoZWV0VXBkYXRlVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCkBA
IC0zMTg3LDcgKzMxODQsNyBAQCB2b2lkIERvY3VtZW50OjpzdHlsZVJlc29sdmVyQ2hhbmdlZChT
dHlsCiAgICAgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6VXBkYXRlRmxhZyBzdHlsZVNo
ZWV0VXBkYXRlID0gKHVwZGF0ZUZsYWcgPT0gUmVjYWxjU3R5bGVJZk5lZWRlZCB8fCB1cGRhdGVG
bGFnID09IERlZmVyUmVjYWxjU3R5bGVJZk5lZWRlZCkKICAgICAgICAgPyBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uOjpPcHRpbWl6ZWRVcGRhdGUKICAgICAgICAgOiBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uOjpGdWxsVXBkYXRlOwotICAgIGJvb2wgc3R5bGVzaGVldENoYW5nZVJl
cXVpcmVzU3R5bGVSZWNhbGMgPSBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLT51cGRhdGVBY3RpdmVT
dHlsZVNoZWV0cyhzdHlsZVNoZWV0VXBkYXRlKTsKKyAgICBib29sIHN0eWxlc2hlZXRDaGFuZ2VS
ZXF1aXJlc1N0eWxlUmVjYWxjID0gbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi51cGRhdGVBY3RpdmVT
dHlsZVNoZWV0cyhzdHlsZVNoZWV0VXBkYXRlKTsKIAogICAgIGlmICh1cGRhdGVGbGFnID09IERl
ZmVyUmVjYWxjU3R5bGUpIHsKICAgICAgICAgc2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygpOwpA
QCAtMzIwMCw3ICszMTk3LDcgQEAgdm9pZCBEb2N1bWVudDo6c3R5bGVSZXNvbHZlckNoYW5nZWQo
U3R5bAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGRpZExheW91dFdpdGhQZW5k
aW5nU3R5bGVzaGVldHMoKSAmJiAhbV9zdHlsZVNoZWV0Q29sbGVjdGlvbi0+aGFzUGVuZGluZ1No
ZWV0cygpKSB7CisgICAgaWYgKGRpZExheW91dFdpdGhQZW5kaW5nU3R5bGVzaGVldHMoKSAmJiAh
bV9zdHlsZVNoZWV0Q29sbGVjdGlvbi5oYXNQZW5kaW5nU2hlZXRzKCkpIHsKICAgICAgICAgbV9w
ZW5kaW5nU2hlZXRMYXlvdXQgPSBJZ25vcmVMYXlvdXRXaXRoUGVuZGluZ1NoZWV0czsKICAgICAg
ICAgaWYgKHJlbmRlclZpZXcoKSkKICAgICAgICAgICAgIHJlbmRlclZpZXcoKS0+cmVwYWludFZp
ZXdBbmRDb21wb3NpdGVkTGF5ZXJzKCk7CkBAIC01OTcxLDcgKzU5NjgsNyBAQCB2b2lkIERvY3Vt
ZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvCiAKIGJvb2wgRG9jdW1lbnQ6OmhhdmVTdHls
ZXNoZWV0c0xvYWRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3N0eWxlU2hlZXRDb2xsZWN0
aW9uLT5oYXNQZW5kaW5nU2hlZXRzKCkgfHwgbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVldHM7Cisg
ICAgcmV0dXJuICFtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLmhhc1BlbmRpbmdTaGVldHMoKSB8fCBt
X2lnbm9yZVBlbmRpbmdTdHlsZXNoZWV0czsKIH0KIAogTG9jYWxlJiBEb2N1bWVudDo6Z2V0Q2Fj
aGVkTG9jYWxlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgJKHJldmlzaW9uIDE1NjM3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNp
bmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRFdmVudFF1ZXVlLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50VGltaW5nLmgiCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJI
aXRUZXN0UmVxdWVzdC5oIgpAQCAtNDc2LDcgKzQ3Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGlz
IGlzIGEgRE9NIGZ1bmN0aW9uLgogICAgIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0cygpOwog
Ci0gICAgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiogc3R5bGVTaGVldENvbGxlY3Rpb24o
KSB7IHJldHVybiBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uLmdldCgpOyB9CisgICAgRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbiYgc3R5bGVTaGVldENvbGxlY3Rpb24oKSB7IHJldHVybiBtX3N0
eWxlU2hlZXRDb2xsZWN0aW9uOyB9CiAKICAgICBib29sIGdvdG9BbmNob3JOZWVkZWRBZnRlclN0
eWxlc2hlZXRzTG9hZCgpIHsgcmV0dXJuIG1fZ290b0FuY2hvck5lZWRlZEFmdGVyU3R5bGVzaGVl
dHNMb2FkOyB9CiAgICAgdm9pZCBzZXRHb3RvQW5jaG9yTmVlZGVkQWZ0ZXJTdHlsZXNoZWV0c0xv
YWQoYm9vbCBiKSB7IG1fZ290b0FuY2hvck5lZWRlZEFmdGVyU3R5bGVzaGVldHNMb2FkID0gYjsg
fQpAQCAtMTM0MCw3ICsxMzQxLDcgQEAgcHJpdmF0ZToKIAogICAgIE11dGF0aW9uT2JzZXJ2ZXJP
cHRpb25zIG1fbXV0YXRpb25PYnNlcnZlclR5cGVzOwogCi0gICAgT3duUHRyPERvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb24+IG1fc3R5bGVTaGVldENvbGxlY3Rpb247CisgICAgRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbiBtX3N0eWxlU2hlZXRDb2xsZWN0aW9uOwogICAgIFJlZlB0cjxT
dHlsZVNoZWV0TGlzdD4gbV9zdHlsZVNoZWV0TGlzdDsKIAogICAgIE93blB0cjxGb3JtQ29udHJv
bGxlcj4gbV9mb3JtQ29udHJvbGxlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE1NjM3OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLURvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OkRv
Y3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50KQorRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbjo6RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbihEb2N1bWVu
dCYgZG9jdW1lbnQpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9wZW5kaW5n
U3R5bGVzaGVldHMoMCkKICAgICAsIG1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZChmYWxz
ZSkKQEAgLTg1LDcgKzg1LDcgQEAgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6fkRvY3Vt
ZW50Uwogdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpjb21iaW5lQ1NTRmVhdHVy
ZUZsYWdzKCkKIHsKICAgICAvLyBEZWxheSByZXNldHRpbmcgdGhlIGZsYWdzIHVudGlsIGFmdGVy
IG5leHQgc3R5bGUgcmVjYWxjIHNpbmNlIHVuYXBwbHlpbmcgdGhlIHN0eWxlIG1heSBub3Qgd29y
ayB3aXRob3V0IHRoZXNlIHNldCAodGhpcyBpcyB0cnVlIGF0IGxlYXN0IHdpdGggYmVmb3JlL2Fm
dGVyKS4KLSAgICBjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyID0gbV9kb2N1bWVu
dC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpOworICAgIGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKICAgICBtX3VzZXNT
aWJsaW5nUnVsZXMgPSBtX3VzZXNTaWJsaW5nUnVsZXMgfHwgc3R5bGVSZXNvbHZlci51c2VzU2li
bGluZ1J1bGVzKCk7CiAgICAgbV91c2VzRmlyc3RMaW5lUnVsZXMgPSBtX3VzZXNGaXJzdExpbmVS
dWxlcyB8fCBzdHlsZVJlc29sdmVyLnVzZXNGaXJzdExpbmVSdWxlcygpOwogICAgIG1fdXNlc0Jl
Zm9yZUFmdGVyUnVsZXMgPSBtX3VzZXNCZWZvcmVBZnRlclJ1bGVzIHx8IHN0eWxlUmVzb2x2ZXIu
dXNlc0JlZm9yZUFmdGVyUnVsZXMoKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBEb2N1bWVudFN0
eWxlU2hlZXRDb2xsZWN0aW9uOjpjb21iaQogCiB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb246OnJlc2V0Q1NTRmVhdHVyZUZsYWdzKCkKIHsKLSAgICBjb25zdCBTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpOworICAg
IGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIgPSBtX2RvY3VtZW50LmVuc3VyZVN0
eWxlUmVzb2x2ZXIoKTsKICAgICBtX3VzZXNTaWJsaW5nUnVsZXMgPSBzdHlsZVJlc29sdmVyLnVz
ZXNTaWJsaW5nUnVsZXMoKTsKICAgICBtX3VzZXNGaXJzdExpbmVSdWxlcyA9IHN0eWxlUmVzb2x2
ZXIudXNlc0ZpcnN0TGluZVJ1bGVzKCk7CiAgICAgbV91c2VzQmVmb3JlQWZ0ZXJSdWxlcyA9IHN0
eWxlUmVzb2x2ZXIudXNlc0JlZm9yZUFmdGVyUnVsZXMoKTsKQEAgLTEwNCw3ICsxMDQsNyBAQCBD
U1NTdHlsZVNoZWV0KiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0CiAgICAgaWYgKG1fcGFnZVVz
ZXJTaGVldCkKICAgICAgICAgcmV0dXJuIG1fcGFnZVVzZXJTaGVldC5nZXQoKTsKICAgICAKLSAg
ICBQYWdlKiBvd25pbmdQYWdlID0gbV9kb2N1bWVudC0+cGFnZSgpOworICAgIFBhZ2UqIG93bmlu
Z1BhZ2UgPSBtX2RvY3VtZW50LnBhZ2UoKTsKICAgICBpZiAoIW93bmluZ1BhZ2UpCiAgICAgICAg
IHJldHVybiAwOwogICAgIApAQCAtMTEzLDcgKzExMyw3IEBAIENTU1N0eWxlU2hlZXQqIERvY3Vt
ZW50U3R5bGVTaGVldENvbGxlY3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgLy8gUGFy
c2UgdGhlIHNoZWV0IGFuZCBjYWNoZSBpdC4KLSAgICBtX3BhZ2VVc2VyU2hlZXQgPSBDU1NTdHls
ZVNoZWV0OjpjcmVhdGVJbmxpbmUobV9kb2N1bWVudCwgbV9kb2N1bWVudC0+c2V0dGluZ3MoKS0+
dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpKTsKKyAgICBtX3BhZ2VVc2VyU2hlZXQgPSBDU1NTdHls
ZVNoZWV0OjpjcmVhdGVJbmxpbmUoJm1fZG9jdW1lbnQsIG1fZG9jdW1lbnQuc2V0dGluZ3MoKS0+
dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpKTsKICAgICBtX3BhZ2VVc2VyU2hlZXQtPmNvbnRlbnRz
KCktPnNldElzVXNlclN0eWxlU2hlZXQodHJ1ZSk7CiAgICAgbV9wYWdlVXNlclNoZWV0LT5jb250
ZW50cygpLT5wYXJzZVN0cmluZyh1c2VyU2hlZXRUZXh0KTsKICAgICByZXR1cm4gbV9wYWdlVXNl
clNoZWV0LmdldCgpOwpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0
Q29sbGVjdGlvbjo6Y2xlYXIKIHsKICAgICBpZiAobV9wYWdlVXNlclNoZWV0KSB7CiAgICAgICAg
IG1fcGFnZVVzZXJTaGVldCA9IDA7Ci0gICAgICAgIG1fZG9jdW1lbnQtPnN0eWxlUmVzb2x2ZXJD
aGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOworICAgICAgICBtX2RvY3VtZW50LnN0eWxlUmVzb2x2
ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwogICAgIH0KIH0KIApAQCAtMTMxLDcgKzEzMSw3
IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXQKIHsKICAgICBjbGVh
clBhZ2VVc2VyU2hlZXQoKTsKICAgICBpZiAocGFnZVVzZXJTaGVldCgpKQotICAgICAgICBtX2Rv
Y3VtZW50LT5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKKyAg
ICAgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0
ZWx5KTsKIH0KIAogY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBEb2N1bWVu
dFN0eWxlU2hlZXRDb2xsZWN0aW9uOjppbmplY3RlZFVzZXJTdHlsZVNoZWV0cygpIGNvbnN0CkBA
IC0xNTQsNyArMTU0LDcgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjp1cGRh
dAogICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuY2xlYXIoKTsKICAgICBtX2luamVjdGVk
QXV0aG9yU3R5bGVTaGVldHMuY2xlYXIoKTsKIAotICAgIFBhZ2UqIG93bmluZ1BhZ2UgPSBtX2Rv
Y3VtZW50LT5wYWdlKCk7CisgICAgUGFnZSogb3duaW5nUGFnZSA9IG1fZG9jdW1lbnQucGFnZSgp
OwogICAgIGlmICghb3duaW5nUGFnZSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKQEAgLTE2
OCwxMSArMTY4LDExIEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXQK
ICAgICAgICAgY29uc3QgVXNlclN0eWxlU2hlZXRWZWN0b3IqIHNoZWV0cyA9IGl0LT52YWx1ZS5n
ZXQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNoZWV0cy0+c2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIGNvbnN0IFVzZXJTdHlsZVNoZWV0KiBzaGVldCA9IHNoZWV0cy0+
YXQoaSkuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVkRnJhbWVzKCkgPT0g
SW5qZWN0SW5Ub3BGcmFtZU9ubHkgJiYgbV9kb2N1bWVudC0+b3duZXJFbGVtZW50KCkpCisgICAg
ICAgICAgICBpZiAoc2hlZXQtPmluamVjdGVkRnJhbWVzKCkgPT0gSW5qZWN0SW5Ub3BGcmFtZU9u
bHkgJiYgbV9kb2N1bWVudC5vd25lckVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmICghVXNlckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVy
bnMobV9kb2N1bWVudC0+dXJsKCksIHNoZWV0LT53aGl0ZWxpc3QoKSwgc2hlZXQtPmJsYWNrbGlz
dCgpKSkKKyAgICAgICAgICAgIGlmICghVXNlckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0
dGVybnMobV9kb2N1bWVudC51cmwoKSwgc2hlZXQtPndoaXRlbGlzdCgpLCBzaGVldC0+YmxhY2ts
aXN0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVmUHRyPENT
U1N0eWxlU2hlZXQ+IGdyb3VwU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUoY29u
c3RfY2FzdDxEb2N1bWVudCo+KG1fZG9jdW1lbnQpLCBzaGVldC0+dXJsKCkpOworICAgICAgICAg
ICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGdyb3VwU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVh
dGVJbmxpbmUoY29uc3RfY2FzdDxEb2N1bWVudCo+KCZtX2RvY3VtZW50KSwgc2hlZXQtPnVybCgp
KTsKICAgICAgICAgICAgIGJvb2wgaXNVc2VyU3R5bGVTaGVldCA9IHNoZWV0LT5sZXZlbCgpID09
IFVzZXJTdHlsZVVzZXJMZXZlbDsKICAgICAgICAgICAgIGlmIChpc1VzZXJTdHlsZVNoZWV0KQog
ICAgICAgICAgICAgICAgIG1faW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMuYXBwZW5kKGdyb3VwU2hl
ZXQpOwpAQCAtMTkxLDIxICsxOTEsMjEgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uOjppbnZhbAogICAgIG1faW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVWYWxpZCA9IGZhbHNlOwog
ICAgIGlmIChtX2luamVjdGVkVXNlclN0eWxlU2hlZXRzLmlzRW1wdHkoKSAmJiBtX2luamVjdGVk
QXV0aG9yU3R5bGVTaGVldHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9kb2N1
bWVudC0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CisgICAgbV9kb2N1
bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKIH0KIAogdm9pZCBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphZGRBdXRob3JTaGVldChQYXNzUmVmUHRyPFN0
eWxlU2hlZXRDb250ZW50cz4gYXV0aG9yU2hlZXQpCiB7CiAgICAgQVNTRVJUKCFhdXRob3JTaGVl
dC0+aXNVc2VyU3R5bGVTaGVldCgpKTsKLSAgICBtX2F1dGhvclN0eWxlU2hlZXRzLmFwcGVuZChD
U1NTdHlsZVNoZWV0OjpjcmVhdGUoYXV0aG9yU2hlZXQsIG1fZG9jdW1lbnQpKTsKLSAgICBtX2Rv
Y3VtZW50LT5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKKyAg
ICBtX2F1dGhvclN0eWxlU2hlZXRzLmFwcGVuZChDU1NTdHlsZVNoZWV0OjpjcmVhdGUoYXV0aG9y
U2hlZXQsICZtX2RvY3VtZW50KSk7CisgICAgbV9kb2N1bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdl
ZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAogdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uOjphZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IHVz
ZXJTaGVldCkKIHsKICAgICBBU1NFUlQodXNlclNoZWV0LT5pc1VzZXJTdHlsZVNoZWV0KCkpOwot
ICAgIG1fdXNlclN0eWxlU2hlZXRzLmFwcGVuZChDU1NTdHlsZVNoZWV0OjpjcmVhdGUodXNlclNo
ZWV0LCBtX2RvY3VtZW50KSk7Ci0gICAgbV9kb2N1bWVudC0+c3R5bGVSZXNvbHZlckNoYW5nZWQo
UmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CisgICAgbV91c2VyU3R5bGVTaGVldHMuYXBwZW5kKENT
U1N0eWxlU2hlZXQ6OmNyZWF0ZSh1c2VyU2hlZXQsICZtX2RvY3VtZW50KSk7CisgICAgbV9kb2N1
bWVudC5zdHlsZVJlc29sdmVyQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAog
Ly8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgdG9wLWxldmVsIHN0eWxlc2hlZXQg
aGFzIGZpbmlzaGVkIGxvYWRpbmcuCkBAIC0yMjUsMTEgKzIyNSwxMSBAQCB2b2lkIERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246OnJlbW92CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChu
b3RpZmljYXRpb24gPT0gUmVtb3ZlUGVuZGluZ1NoZWV0Tm90aWZ5TGF0ZXIpIHsKLSAgICAgICAg
bV9kb2N1bWVudC0+c2V0TmVlZHNOb3RpZnlSZW1vdmVBbGxQZW5kaW5nU3R5bGVzaGVldCgpOwor
ICAgICAgICBtX2RvY3VtZW50LnNldE5lZWRzTm90aWZ5UmVtb3ZlQWxsUGVuZGluZ1N0eWxlc2hl
ZXQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBtX2RvY3VtZW50LT5kaWRS
ZW1vdmVBbGxQZW5kaW5nU3R5bGVzaGVldCgpOworICAgIG1fZG9jdW1lbnQuZGlkUmVtb3ZlQWxs
UGVuZGluZ1N0eWxlc2hlZXQoKTsKIH0KIAogdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0
aW9uOjphZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShOb2RlKiBub2RlLCBib29sIGNyZWF0ZWRC
eVBhcnNlcikKQEAgLTI0MSw3ICsyNDEsNyBAQCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb246OmFkZFN0CiAgICAgLy8gc2luY2Ugc3R5bGVzIG91dHNpZGUgb2YgdGhlIGJvZHkgYW5k
IGhlYWQgY29udGludWUgdG8gYmUgc2h1bnRlZCBpbnRvIHRoZSBoZWFkCiAgICAgLy8gKGFuZCB0
aHVzIGNhbiBzaGlmdCB0byBlbmQgdXAgYmVmb3JlIGR5bmFtaWNhbGx5IGFkZGVkIERPTSBjb250
ZW50IHRoYXQgaXMgYWxzbwogICAgIC8vIG91dHNpZGUgdGhlIGJvZHkpLgotICAgIGlmICgoY3Jl
YXRlZEJ5UGFyc2VyICYmIG1fZG9jdW1lbnQtPmJvZHkoKSkgfHwgbV9zdHlsZVNoZWV0Q2FuZGlk
YXRlTm9kZXMuaXNFbXB0eSgpKSB7CisgICAgaWYgKChjcmVhdGVkQnlQYXJzZXIgJiYgbV9kb2N1
bWVudC5ib2R5KCkpIHx8IG1fc3R5bGVTaGVldENhbmRpZGF0ZU5vZGVzLmlzRW1wdHkoKSkgewog
ICAgICAgICBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5hZGQobm9kZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uOjpyZW1vdgogCiB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmNv
bGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mIHNoZWV0
cykKIHsKLSAgICBpZiAobV9kb2N1bWVudC0+c2V0dGluZ3MoKSAmJiAhbV9kb2N1bWVudC0+c2V0
dGluZ3MoKS0+YXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKSkKKyAgICBpZiAobV9kb2N1bWVu
dC5zZXR0aW5ncygpICYmICFtX2RvY3VtZW50LnNldHRpbmdzKCktPmF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0eWxlU2hlZXRDYW5kaWRhdGVM
aXN0SGFzaFNldDo6aXRlcmF0b3IgYmVnaW4gPSBtX3N0eWxlU2hlZXRDYW5kaWRhdGVOb2Rlcy5i
ZWdpbigpOwpAQCAtMjg3LDEwICsyODcsMTAgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uOjpjb2xsZQogICAgICAgICAgICAgc2hlZXQgPSBwaS0+c2hlZXQoKTsKICNpZiBFTkFC
TEUoWFNMVCkKICAgICAgICAgICAgIC8vIERvbid0IGFwcGx5IFhTTCB0cmFuc2Zvcm1zIHRvIGFs
cmVhZHkgdHJhbnNmb3JtZWQgZG9jdW1lbnRzIC0tIDxyZGFyOi8vcHJvYmxlbS80MTMyODA2Pgot
ICAgICAgICAgICAgaWYgKHBpLT5pc1hTTCgpICYmICFtX2RvY3VtZW50LT50cmFuc2Zvcm1Tb3Vy
Y2VEb2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAocGktPmlzWFNMKCkgJiYgIW1fZG9jdW1l
bnQudHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkgewogICAgICAgICAgICAgICAgIC8vIERvbid0
IGFwcGx5IFhTTCB0cmFuc2Zvcm1zIHVudGlsIGxvYWRpbmcgaXMgZmluaXNoZWQuCi0gICAgICAg
ICAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5wYXJzaW5nKCkpCi0gICAgICAgICAgICAgICAgICAg
IG1fZG9jdW1lbnQtPmFwcGx5WFNMVHJhbnNmb3JtKHBpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IW1fZG9jdW1lbnQucGFyc2luZygpKQorICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LmFw
cGx5WFNMVHJhbnNmb3JtKHBpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAjZW5kaWYKQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb246OmFuYWx5CiAKICAgICBpZiAodXBkYXRlRmxhZyAhPSBPcHRpbWl6ZWRVcGRhdGUp
CiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fZG9jdW1lbnQtPnN0eWxlUmVzb2x2ZXJJZkV4
aXN0cygpKQorICAgIGlmICghbV9kb2N1bWVudC5zdHlsZVJlc29sdmVySWZFeGlzdHMoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gRmluZCBvdXQgd2hpY2ggc3R5bGVzaGVldHMgYXJlIG5l
dy4KQEAgLTQxMiwxMiArNDEyLDEyIEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bjo6YW5hbHkKICAgICBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSA9IGhhc0luc2VydGlvbnMgPyBS
ZXNldCA6IEFkZGl0aXZlOwogCiAgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgcGFyc2luZyB0aGUg
Ym9keSBhbmQgc28gbWF5IGhhdmUgc2lnbmlmaWNhbnQgYW1vdW50IG9mIGVsZW1lbnRzLCBwdXQg
c29tZSBlZmZvcnQgaW50byB0cnlpbmcgdG8gYXZvaWQgc3R5bGUgcmVjYWxjcy4KLSAgICBpZiAo
IW1fZG9jdW1lbnQtPmJvZHkoKSB8fCBtX2RvY3VtZW50LT5oYXNOb2Rlc1dpdGhQbGFjZWhvbGRl
clN0eWxlKCkpCisgICAgaWYgKCFtX2RvY3VtZW50LmJvZHkoKSB8fCBtX2RvY3VtZW50Lmhhc05v
ZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFN0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXMgaW52YWxpZGF0aW9uQW5hbHlzaXMoYWRkZWRTaGVldHMpOwogICAg
IGlmIChpbnZhbGlkYXRpb25BbmFseXNpcy5kaXJ0aWVzQWxsU3R5bGUoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGludmFsaWRhdGlvbkFuYWx5c2lzLmludmFsaWRhdGVTdHlsZShtX2RvY3VtZW50
KTsKKyAgICBpbnZhbGlkYXRpb25BbmFseXNpcy5pbnZhbGlkYXRlU3R5bGUoJm1fZG9jdW1lbnQp
OwogICAgIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjID0gZmFsc2U7CiB9CiAKQEAgLTQ0OSwyMSAr
NDQ5LDIxIEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RBY3RpdmVDU1NTdHlsZVNoZWV0c0YKICAgICBI
VE1MSUZyYW1lRWxlbWVudCogc2VhbWxlc3NQYXJlbnRJRnJhbWUgPSBkb2N1bWVudC0+c2VhbWxl
c3NQYXJlbnRJRnJhbWUoKTsKICAgICBpZiAoIXNlYW1sZXNzUGFyZW50SUZyYW1lKQogICAgICAg
ICByZXR1cm47Ci0gICAgc2hlZXRzLmFwcGVuZFZlY3RvcihzZWFtbGVzc1BhcmVudElGcmFtZS0+
ZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5hY3RpdmVBdXRob3JTdHlsZVNoZWV0
cygpKTsKKyAgICBzaGVldHMuYXBwZW5kVmVjdG9yKHNlYW1sZXNzUGFyZW50SUZyYW1lLT5kb2N1
bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuYWN0aXZlQXV0aG9yU3R5bGVTaGVldHMoKSk7
CiB9CiAKIGJvb2wgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6dXBkYXRlQWN0aXZlU3R5
bGVTaGVldHMoVXBkYXRlRmxhZyB1cGRhdGVGbGFnKQogewotICAgIGlmIChtX2RvY3VtZW50LT5p
blN0eWxlUmVjYWxjKCkpIHsKKyAgICBpZiAobV9kb2N1bWVudC5pblN0eWxlUmVjYWxjKCkpIHsK
ICAgICAgICAgLy8gU1ZHIDx1c2U+IGVsZW1lbnQgbWF5IG1hbmFnZSB0byBpbnZhbGlkYXRlIHN0
eWxlIHNlbGVjdG9yIGluIHRoZSBtaWRkbGUgb2YgYSBzdHlsZSByZWNhbGMuCiAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDM0NAogICAgICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZml4ZWQgaW4gU1ZHIGFuZCB0aGUgY2FsbCBzaXRlIHJl
cGxhY2VkIGJ5IEFTU0VSVCghbV9pblN0eWxlUmVjYWxjKS4KICAgICAgICAgbV9wZW5kaW5nVXBk
YXRlVHlwZSA9IEZ1bGxVcGRhdGU7Ci0gICAgICAgIG1fZG9jdW1lbnQtPnNjaGVkdWxlRm9yY2Vk
U3R5bGVSZWNhbGMoKTsKKyAgICAgICAgbV9kb2N1bWVudC5zY2hlZHVsZUZvcmNlZFN0eWxlUmVj
YWxjKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIH0KLSAgICBpZiAoIW1fZG9jdW1l
bnQtPnJlbmRlclZpZXcoKSB8fCAhbV9kb2N1bWVudC0+YXR0YWNoZWQoKSkKKyAgICBpZiAoIW1f
ZG9jdW1lbnQucmVuZGVyVmlldygpIHx8ICFtX2RvY3VtZW50LmF0dGFjaGVkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4gPiBhY3RpdmVT
dHlsZVNoZWV0czsKQEAgLTQ3Miw3ICs0NzIsNyBAQCBib29sIERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb246OnVwZGF0CiAgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+IGFjdGl2
ZUNTU1N0eWxlU2hlZXRzOwogICAgIGFjdGl2ZUNTU1N0eWxlU2hlZXRzLmFwcGVuZFZlY3Rvcihp
bmplY3RlZEF1dGhvclN0eWxlU2hlZXRzKCkpOwogICAgIGFjdGl2ZUNTU1N0eWxlU2hlZXRzLmFw
cGVuZFZlY3Rvcihkb2N1bWVudEF1dGhvclN0eWxlU2hlZXRzKCkpOwotICAgIGNvbGxlY3RBY3Rp
dmVDU1NTdHlsZVNoZWV0c0Zyb21TZWFtbGVzc1BhcmVudHMoYWN0aXZlQ1NTU3R5bGVTaGVldHMs
IG1fZG9jdW1lbnQpOworICAgIGNvbGxlY3RBY3RpdmVDU1NTdHlsZVNoZWV0c0Zyb21TZWFtbGVz
c1BhcmVudHMoYWN0aXZlQ1NTU3R5bGVTaGVldHMsICZtX2RvY3VtZW50KTsKICAgICBmaWx0ZXJF
bmFibGVkTm9uZW1wdHlDU1NTdHlsZVNoZWV0cyhhY3RpdmVDU1NTdHlsZVNoZWV0cywgYWN0aXZl
U3R5bGVTaGVldHMpOwogCiAgICAgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgc3R5bGVSZXNvbHZl
clVwZGF0ZVR5cGU7CkBAIC00ODAsOSArNDgwLDkgQEAgYm9vbCBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uOjp1cGRhdAogICAgIGFuYWx5emVTdHlsZVNoZWV0Q2hhbmdlKHVwZGF0ZUZsYWcs
IGFjdGl2ZUNTU1N0eWxlU2hlZXRzLCBzdHlsZVJlc29sdmVyVXBkYXRlVHlwZSwgcmVxdWlyZXNG
dWxsU3R5bGVSZWNhbGMpOwogCiAgICAgaWYgKHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID09IFJl
Y29uc3RydWN0KQotICAgICAgICBtX2RvY3VtZW50LT5jbGVhclN0eWxlUmVzb2x2ZXIoKTsKKyAg
ICAgICAgbV9kb2N1bWVudC5jbGVhclN0eWxlUmVzb2x2ZXIoKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IG1fZG9jdW1lbnQtPmVuc3VyZVN0eWxl
UmVzb2x2ZXIoKTsKKyAgICAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IG1fZG9j
dW1lbnQuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwogICAgICAgICBpZiAoc3R5bGVSZXNvbHZlclVw
ZGF0ZVR5cGUgPT0gUmVzZXQpIHsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIucnVsZVNldHMo
KS5yZXNldEF1dGhvclN0eWxlKCk7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLmFwcGVuZEF1
dGhvclN0eWxlU2hlZXRzKDAsIGFjdGl2ZUNTU1N0eWxlU2hlZXRzKTsKQEAgLTUwMCw3ICs1MDAs
NyBAQCBib29sIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OnVwZGF0CiAgICAgbV91c2Vz
UmVtVW5pdHMgPSBzdHlsZVNoZWV0c1VzZVJlbVVuaXRzKG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVl
dHMpOwogICAgIG1fcGVuZGluZ1VwZGF0ZVR5cGUgPSBOb1VwZGF0ZTsKIAotICAgIG1fZG9jdW1l
bnQtPm5vdGlmeVNlYW1sZXNzQ2hpbGREb2N1bWVudHNPZlN0eWxlc2hlZXRVcGRhdGUoKTsKKyAg
ICBtX2RvY3VtZW50Lm5vdGlmeVNlYW1sZXNzQ2hpbGREb2N1bWVudHNPZlN0eWxlc2hlZXRVcGRh
dGUoKTsKIAogICAgIHJldHVybiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYzsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaAko
cmV2aXNpb24gMTU2Mzc5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
ICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgpAQCAtNDQsOSArNDQsOSBAQCBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiBj
bGFzcyBTdHlsZVNoZWV0TGlzdDsKIAogY2xhc3MgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
biB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbj4gY3JlYXRlKERvY3VtZW50KiBk
b2N1bWVudCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b24oZG9jdW1lbnQpKTsgfQorICAgIGV4cGxpY2l0IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rp
b24oRG9jdW1lbnQmKTsKIAogICAgIH5Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKCk7CiAK
QEAgLTExOCw4ICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBhY3RpdmVTdHlsZVNoZWV0c0Nv
bnRhaW5zKGNvbnN0IENTU1N0eWxlU2hlZXQqKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKERvY3VtZW50Kik7Ci0KICAgICB2b2lk
IGNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mKTsK
ICAgICBlbnVtIFN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlIHsKICAgICAgICAgUmVjb25zdHJ1Y3Qs
CkBAIC0xMjgsNyArMTI2LDcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHZvaWQgYW5hbHl6ZVN0
eWxlU2hlZXRDaGFuZ2UoVXBkYXRlRmxhZywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiA+JiBuZXdTdHlsZXNoZWV0cywgU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUmLCBib29sJiBy
ZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyk7CiAKLSAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAg
ICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIAogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVldD4g
PiBtX3N0eWxlU2hlZXRzRm9yU3R5bGVTaGVldExpc3Q7CiAgICAgVmVjdG9yPFJlZlB0cjxDU1NT
dHlsZVNoZWV0PiA+IG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNTYzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMjMsNyArMjMyMyw3IEBAIGJvb2wgRWxlbWVudDo6
dXBkYXRlRXhpc3RpbmdQc2V1ZG9FbGVtZW4KIAogUGFzc1JlZlB0cjxQc2V1ZG9FbGVtZW50PiBF
bGVtZW50OjpjcmVhdGVQc2V1ZG9FbGVtZW50SWZOZWVkZWQoUHNldWRvSWQgcHNldWRvSWQpCiB7
Ci0gICAgaWYgKCFkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPnVzZXNCZWZvcmVB
ZnRlclJ1bGVzKCkpCisgICAgaWYgKCFkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCku
dXNlc0JlZm9yZUFmdGVyUnVsZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFyZW5k
ZXJlcigpIHx8ICFyZW5kZXJlcigpLT5jYW5IYXZlR2VuZXJhdGVkQ2hpbGRyZW4oKSkKICAgICAg
ICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVldE93
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVl
dE93bmVyLmNwcAkocmV2aXNpb24gMTU2Mzc5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0lubGlu
ZVN0eWxlU2hlZXRPd25lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9p
ZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6Omluc2VydGVkSW50bwogewogICAgIEFTU0VSVChkb2N1
bWVudCk7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIGRvY3VtZW50LT5zdHlsZVNoZWV0Q29s
bGVjdGlvbigpLT5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50LCBtX2lzUGFyc2lu
Z0NoaWxkcmVuKTsKKyAgICBkb2N1bWVudC0+c3R5bGVTaGVldENvbGxlY3Rpb24oKS5hZGRTdHls
ZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50LCBtX2lzUGFyc2luZ0NoaWxkcmVuKTsKIAogICAg
IGlmIChtX2lzUGFyc2luZ0NoaWxkcmVuKQogICAgICAgICByZXR1cm47CkBAIC02NCw3ICs2NCw3
IEBAIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpyZW1vdmVkRnJvbUQKIHsKICAgICBBU1NF
UlQoZG9jdW1lbnQpOwogICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBkb2N1bWVudC0+c3R5bGVT
aGVldENvbGxlY3Rpb24oKS0+cmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUoZWxlbWVudCk7
CisgICAgZG9jdW1lbnQtPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkucmVtb3ZlU3R5bGVTaGVldENh
bmRpZGF0ZU5vZGUoZWxlbWVudCk7CiAKICAgICBpZiAobV9zaGVldCkKICAgICAgICAgY2xlYXJT
aGVldCgpOwpAQCAtODEsNyArODEsNyBAQCB2b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6Y2xl
YXJEb2N1bWVuCiAKICAgICBpZiAoIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGRvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5yZW1vdmVTdHlsZVNo
ZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50KTsKKyAgICBkb2N1bWVudC0+c3R5bGVTaGVldENvbGxl
Y3Rpb24oKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZShlbGVtZW50KTsKIH0KIAogdm9p
ZCBJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNoaWxkcmVuQ2hhbmdlZChFbGVtZW50KiBlbGVtZW50
KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpjcmVhdGVT
aGVldCgKICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOwogICAg
IGlmIChtX3NoZWV0KSB7CiAgICAgICAgIGlmIChtX3NoZWV0LT5pc0xvYWRpbmcoKSkKLSAgICAg
ICAgICAgIGRvY3VtZW50LnN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPnJlbW92ZVBlbmRpbmdTaGVl
dCgpOworICAgICAgICAgICAgZG9jdW1lbnQuc3R5bGVTaGVldENvbGxlY3Rpb24oKS5yZW1vdmVQ
ZW5kaW5nU2hlZXQoKTsKICAgICAgICAgY2xlYXJTaGVldCgpOwogICAgIH0KIApAQCAtMTQ4LDcg
KzE0OCw3IEBAIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpjcmVhdGVTaGVldCgKICAgICBp
ZiAoIXNjcmVlbkV2YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkpICYmICFwcmludEV2YWwuZXZh
bChtZWRpYVF1ZXJpZXMuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkb2N1bWVudC5z
dHlsZVNoZWV0Q29sbGVjdGlvbigpLT5hZGRQZW5kaW5nU2hlZXQoKTsKKyAgICBkb2N1bWVudC5z
dHlsZVNoZWV0Q29sbGVjdGlvbigpLmFkZFBlbmRpbmdTaGVldCgpOwogCiAgICAgbV9sb2FkaW5n
ID0gdHJ1ZTsKIApAQCAtMTc2LDE0ICsxNzYsMTQgQEAgYm9vbCBJbmxpbmVTdHlsZVNoZWV0T3du
ZXI6OnNoZWV0TG9hZGVkKAogICAgIGlmIChpc0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgZG9jdW1lbnQtPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPnJlbW92ZVBlbmRp
bmdTaGVldCgpOworICAgIGRvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnJlbW92ZVBl
bmRpbmdTaGVldCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIElubGluZVN0eWxlU2hl
ZXRPd25lcjo6c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KERvY3VtZW50KiBkb2N1bWVudCkKIHsK
ICAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIGRvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlv
bigpLT5hZGRQZW5kaW5nU2hlZXQoKTsKKyAgICBkb2N1bWVudC0+c3R5bGVTaGVldENvbGxlY3Rp
b24oKS5hZGRQZW5kaW5nU2hlZXQoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHJldmlzaW9uIDE1NjM3OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw3ICs2Nyw3IEBAIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6flByb2Nlc3NpbmdJbnN0cnUK
ICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogCiAgICAgaWYgKGlu
RG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5y
ZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzKTsKKyAgICAgICAgZG9jdW1lbnQoKS5z
dHlsZVNoZWV0Q29sbGVjdGlvbigpLnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKHRoaXMp
OwogfQogCiBTdHJpbmcgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpub2RlTmFtZSgpIGNvbnN0CkBA
IC0xNDMsNyArMTQzLDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVT
aAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9s
b2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rp
b24oKS0+YWRkUGVuZGluZ1NoZWV0KCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2hl
ZXRDb2xsZWN0aW9uKCkuYWRkUGVuZGluZ1NoZWV0KCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChkb2N1bWVu
dCgpLmNvbXBsZXRlVVJMKGhyZWYpKSk7CiAjaWYgRU5BQkxFKFhTTFQpCkBAIC0xNjQsNyArMTY0
LDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaAogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIHJlcXVlc3QgbWF5IGhhdmUgYmVlbiBk
ZW5pZWQgaWYgKGZvciBleGFtcGxlKSB0aGUgc3R5bGVzaGVldCBpcyBsb2NhbCBhbmQgdGhlIGRv
Y3VtZW50IGlzIHJlbW90ZS4KICAgICAgICAgICAgICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPnJlbW92ZVBl
bmRpbmdTaGVldCgpOworICAgICAgICAgICAgICAgIGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxl
Y3Rpb24oKS5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTE4Miw3ICsxODIsNyBAQCBib29sIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6aXNM
b2FkaW5nKCkgCiBib29sIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6c2hlZXRMb2FkZWQoKQogewog
ICAgIGlmICghaXNMb2FkaW5nKCkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29s
bGVjdGlvbigpLT5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKKyAgICAgICAgZG9jdW1lbnQoKS5zdHls
ZVNoZWV0Q29sbGVjdGlvbigpLnJlbW92ZVBlbmRpbmdTaGVldCgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjY3LDcgKzI2Nyw3IEBAIE5vZGU6
Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgUHJvY2UKICAgICBDaGFyYWN0ZXJEYXRhOjpp
bnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwogICAgIGlmICghaW5zZXJ0aW9uUG9pbnQtPmlu
RG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7Ci0gICAgZG9jdW1lbnQo
KS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5hZGRTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlz
LCBtX2NyZWF0ZWRCeVBhcnNlcik7CisgICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlv
bigpLmFkZFN0eWxlU2hlZXRDYW5kaWRhdGVOb2RlKHRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsK
ICAgICBjaGVja1N0eWxlU2hlZXQoKTsKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKIH0KQEAg
LTI3OCw3ICsyNzgsNyBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6cmVtb3ZlZEZyb20o
CiAgICAgaWYgKCFpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5yZW1vdmVTdHls
ZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzKTsKKyAgICBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xs
ZWN0aW9uKCkucmVtb3ZlU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUodGhpcyk7CiAKICAgICBpZiAo
bV9zaGVldCkgewogICAgICAgICBBU1NFUlQobV9zaGVldC0+b3duZXJOb2RlKCkgPT0gdGhpcyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NTYzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgSFRNTExpbmtFbGVtZW50Ojp+SFRNTExpbmtFbGVt
ZW50KCkKICAgICAgICAgbV9jYWNoZWRTaGVldC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogCiAgICAg
aWYgKGluRG9jdW1lbnQoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlv
bigpLT5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnJlbW92ZVN0eWxlU2hlZXRDYW5kaWRhdGVOb2Rl
KHRoaXMpOwogCiAgICAgbGlua0xvYWRFdmVudFNlbmRlcigpLmNhbmNlbEV2ZW50KHRoaXMpOwog
fQpAQCAtMjU1LDcgKzI1NSw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3Qg
SFRNTEwKICAgICBpZiAobV9pc0luU2hhZG93VHJlZSkKICAgICAgICAgcmV0dXJuIEluc2VydGlv
bkRvbmU7CiAKLSAgICBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPmFkZFN0eWxl
U2hlZXRDYW5kaWRhdGVOb2RlKHRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICBkb2N1bWVu
dCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuYWRkU3R5bGVTaGVldENhbmRpZGF0ZU5vZGUodGhp
cywgbV9jcmVhdGVkQnlQYXJzZXIpOwogCiAgICAgcHJvY2VzcygpOwogICAgIHJldHVybiBJbnNl
cnRpb25Eb25lOwpAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpyZW1v
dmVkRnJvbShDb250YWkKICAgICAgICAgQVNTRVJUKCFtX3NoZWV0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPnJlbW92ZVN0
eWxlU2hlZXRDYW5kaWRhdGVOb2RlKHRoaXMpOworICAgIGRvY3VtZW50KCkuc3R5bGVTaGVldENv
bGxlY3Rpb24oKS5yZW1vdmVTdHlsZVNoZWV0Q2FuZGlkYXRlTm9kZSh0aGlzKTsKIAogICAgIGlm
IChtX3NoZWV0KQogICAgICAgICBjbGVhclNoZWV0KCk7CkBAIC00NTIsNyArNDUyLDcgQEAgdm9p
ZCBIVE1MTGlua0VsZW1lbnQ6OmFkZFBlbmRpbmdTaGVldChQZQogCiAgICAgaWYgKG1fcGVuZGlu
Z1NoZWV0VHlwZSA9PSBJbmFjdGl2ZVNoZWV0KQogICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1l
bnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT5hZGRQZW5kaW5nU2hlZXQoKTsKKyAgICBkb2N1
bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuYWRkUGVuZGluZ1NoZWV0KCk7CiB9CiAKIHZv
aWQgSFRNTExpbmtFbGVtZW50OjpyZW1vdmVQZW5kaW5nU2hlZXQoUmVtb3ZlUGVuZGluZ1NoZWV0
Tm90aWZpY2F0aW9uVHlwZSBub3RpZmljYXRpb24pCkBAIC00NjUsMTEgKzQ2NSwxMSBAQCB2b2lk
IEhUTUxMaW5rRWxlbWVudDo6cmVtb3ZlUGVuZGluZ1NoZWV0CiAKICAgICBpZiAodHlwZSA9PSBJ
bmFjdGl2ZVNoZWV0KSB7CiAgICAgICAgIC8vIERvY3VtZW50IGp1c3QgbmVlZHMgdG8ga25vdyBh
Ym91dCB0aGUgc2hlZXQgZm9yIGV4cG9zdXJlIHRocm91Z2ggZG9jdW1lbnQuc3R5bGVTaGVldHMK
LSAgICAgICAgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT51cGRhdGVBY3RpdmVT
dHlsZVNoZWV0cyhEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjpPcHRpbWl6ZWRVcGRhdGUp
OworICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkudXBkYXRlQWN0aXZl
U3R5bGVTaGVldHMoRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6T3B0aW1pemVkVXBkYXRl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRvY3VtZW50KCkuc3R5bGVTaGVldENv
bGxlY3Rpb24oKS0+cmVtb3ZlUGVuZGluZ1NoZWV0KAorICAgIGRvY3VtZW50KCkuc3R5bGVTaGVl
dENvbGxlY3Rpb24oKS5yZW1vdmVQZW5kaW5nU2hlZXQoCiAgICAgICAgIG5vdGlmaWNhdGlvbiA9
PSBSZW1vdmVQZW5kaW5nU2hlZXROb3RpZnlJbW1lZGlhdGVseQogICAgICAgICA/IERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246OlJlbW92ZVBlbmRpbmdTaGVldE5vdGlmeUltbWVkaWF0ZWx5
CiAgICAgICAgIDogRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6UmVtb3ZlUGVuZGluZ1No
ZWV0Tm90aWZ5TGF0ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUXVvdGVFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxRdW90ZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNTYzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxRdW90
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFBhc3NSZWZQdHI8
SFRNTFF1b3RlRWxlbWVudD4gSFRNTFF1b3RlRWwKIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlv
blJlcXVlc3QgSFRNTFF1b3RlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqIGlu
c2VydGlvblBvaW50KQogewogICAgIGlmIChoYXNUYWdOYW1lKHFUYWcpKQotICAgICAgICBkb2N1
bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPnNldFVzZXNCZWZvcmVBZnRlclJ1bGVzT3Zl
cnJpZGUodHJ1ZSk7CisgICAgICAgIGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS5z
ZXRVc2VzQmVmb3JlQWZ0ZXJSdWxlc092ZXJyaWRlKHRydWUpOwogCiAgICAgcmV0dXJuIEhUTUxF
bGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNTYz
NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OkhU
TUxWaWV3U291cmNlRG8KICAgICA6IEhUTUxEb2N1bWVudChmcmFtZSwgdXJsKQogICAgICwgbV90
eXBlKG1pbWVUeXBlKQogewotICAgIHN0eWxlU2hlZXRDb2xsZWN0aW9uKCktPnNldFVzZXNCZWZv
cmVBZnRlclJ1bGVzT3ZlcnJpZGUodHJ1ZSk7CisgICAgc3R5bGVTaGVldENvbGxlY3Rpb24oKS5z
ZXRVc2VzQmVmb3JlQWZ0ZXJSdWxlc092ZXJyaWRlKHRydWUpOwogICAgIHNldElzVmlld1NvdXJj
ZSh0cnVlKTsKIAogICAgIHNldENvbXBhdGliaWxpdHlNb2RlKFF1aXJrc01vZGUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCShyZXZp
c2lvbiAxNTYzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk3LDcgKzEwOTcsNyBAQCBQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUoU3R5bGVSdWxlKiBy
dWxlLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzLCBEb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKiBzdHlsZVNoZWV0Q29sbGVjdGlvbikKK3ZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUoU3R5bGVSdWxlKiBydWxlLCBJbnNwZWN0b3JD
U1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzLCBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uJiBzdHlsZVNoZWV0Q29sbGVjdGlvbikKIHsKIC8vICAgIHByaW50ZigiSW5zcGVj
dG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUgJXNcbiIsIHJ1bGUtPnNlbGVjdG9yTGlzdCgpLnNl
bGVjdG9yc1RleHQoKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9jdXJyZW50U2VsZWN0b3JQ
cm9maWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmgJKHJldmlzaW9uIDE1NjM3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyosIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+Jik7CiAKICAgICBQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gc3RvcFNlbGVjdG9yUHJvZmls
ZXJJbXBsKEVycm9yU3RyaW5nKiwgYm9vbCBuZWVkUHJvZmlsZSk7Ci0gICAgdm9pZCB3aWxsTWF0
Y2hSdWxlKFN0eWxlUnVsZSosIEluc3BlY3RvckNTU09NV3JhcHBlcnMmLCBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uKik7CisgICAgdm9pZCB3aWxsTWF0Y2hSdWxlKFN0eWxlUnVsZSosIElu
c3BlY3RvckNTU09NV3JhcHBlcnMmLCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uJik7CiAg
ICAgdm9pZCBkaWRNYXRjaFJ1bGUoYm9vbCk7CiAgICAgdm9pZCB3aWxsUHJvY2Vzc1J1bGUoU3R5
bGVSdWxlKiwgU3R5bGVSZXNvbHZlciYpOwogICAgIHZvaWQgZGlkUHJvY2Vzc1J1bGUoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uY3BwCShyZXZpc2lvbiAxNTYzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg4LDcg
KzU4OCw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY2hlZHUKICAgICAg
ICAgcmVzb3VyY2VBZ2VudC0+ZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24oZG9jdW1lbnQp
OwogfQogCi1JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjp3aWxsTWF0Y2hSdWxlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBTdHlsZVJ1bGUqIHJ1bGUsIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3Bl
Y3RvckNTU09NV3JhcHBlcnMsIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24qIHNoZWV0Q29s
bGVjdGlvbikKK0luc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxNYXRjaFJ1bGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIFN0eWxlUnVsZSogcnVsZSwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5z
cGVjdG9yQ1NTT01XcmFwcGVycywgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiYgc2hlZXRD
b2xsZWN0aW9uKQogewogICAgIEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCA9IGluc3RydW1l
bnRpbmdBZ2VudHMtPmluc3BlY3RvckNTU0FnZW50KCk7CiAgICAgaWYgKGNzc0FnZW50KSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5oCShyZXZpc2lvbiAxNTYzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3
aWxsUmVjYWxjdWxhdGVTdHlsZShEb2N1bWVudCopOwogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2Fs
Y3VsYXRlU3R5bGUoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAgICAg
c3RhdGljIHZvaWQgZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24oRG9jdW1lbnQqKTsKLSAg
ICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxNYXRjaFJ1bGUoRG9j
dW1lbnQqLCBTdHlsZVJ1bGUqLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiwgRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbiopOworICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgd2lsbE1hdGNoUnVsZShEb2N1bWVudCosIFN0eWxlUnVsZSosIEluc3BlY3RvckNTU09N
V3JhcHBlcnMmLCBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uJik7CiAgICAgc3RhdGljIHZv
aWQgZGlkTWF0Y2hSdWxlKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYsIGJv
b2wgbWF0Y2hlZCk7CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3
aWxsUHJvY2Vzc1J1bGUoRG9jdW1lbnQqLCBTdHlsZVJ1bGUqLCBTdHlsZVJlc29sdmVyJik7CiAg
ICAgc3RhdGljIHZvaWQgZGlkUHJvY2Vzc1J1bGUoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llJik7CkBAIC0zNzksNyArMzc5LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxSZWNhbGN1bGF0ZVN0eWxlSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgRnJhbWUqKTsKICAgICBzdGF0aWMgdm9pZCBkaWRSZWNhbGN1bGF0
ZVN0eWxlSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKICAgICBz
dGF0aWMgdm9pZCBkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbkltcGwoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIERvY3VtZW50Kik7Ci0gICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bkNvb2tpZSB3aWxsTWF0Y2hSdWxlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgU3R5bGVSdWxl
KiwgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYsIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24q
KTsKKyAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxNYXRjaFJ1
bGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBTdHlsZVJ1bGUqLCBJbnNwZWN0b3JDU1NPTVdy
YXBwZXJzJiwgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiYpOwogICAgIHN0YXRpYyB2b2lk
IGRpZE1hdGNoUnVsZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJiwg
Ym9vbCBtYXRjaGVkKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
IHdpbGxQcm9jZXNzUnVsZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFN0eWxlUnVsZSosIFN0
eWxlUmVzb2x2ZXImKTsKICAgICBzdGF0aWMgdm9pZCBkaWRQcm9jZXNzUnVsZUltcGwoY29uc3Qg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CkBAIC0xMTgzLDcgKzExODMsNyBAQCBp
bmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpCiAjZW5kaWYKIH0KIAotaW5s
aW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxNYXRjaFJ1bGUoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVJ1bGUqIHJ1bGUsIElu
c3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBlcnMsIERvY3VtZW50U3R5
bGVTaGVldENvbGxlY3Rpb24qIHN0eWxlU2hlZXRDb2xsZWN0aW9uKQoraW5saW5lIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRj
aFJ1bGUoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVJ1bGUqIHJ1bGUsIEluc3BlY3RvckNTU09N
V3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3JhcHBlcnMsIERvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb24mIHN0eWxlU2hlZXRDb2xsZWN0aW9uKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAg
ICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNv
b2tpZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9NYXRoTUxNYXRoRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE1hdGhFbGVtZW50
LmNwcAkocmV2aXNpb24gMTU2Mzc5KQorKysgU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTE1h
dGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBOb2RlOjpJbnNl
cnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IE1hdGhNCiB7CiAgICAgLy8gVGhlcmUgYXJlIHNpYmxp
bmcgcnVsZXMgaW4gdGhlIE1hdGhNTCBkZWZhdWx0IHN0eWxlLgogICAgIGlmIChpbnNlcnRpb25Q
b2ludC0+aW5Eb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0
aW9uKCktPnNldFVzZXNTaWJsaW5nUnVsZXNPdmVycmlkZSh0cnVlKTsKKyAgICAgICAgZG9jdW1l
bnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnNldFVzZXNTaWJsaW5nUnVsZXNPdmVycmlkZSh0
cnVlKTsKICAgICByZXR1cm4gTWF0aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvKGluc2VydGlvblBvaW50KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lv
biAxNTYzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05ODUsNyArOTg1LDcgQEAgdm9pZCBQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hh
bmdlZAogCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgaWYgKGZyYW1lLT5k
b2N1bWVudCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnN0eWxlU2hlZXRDb2xs
ZWN0aW9uKCktPnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKKyAgICAgICAgICAgIGZyYW1lLT5kb2N1
bWVudCgpLT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDE1NjM3
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgUGFnZUdyb3VwOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHls
ZVMKICAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wYWdlcy5lbmQo
KTsKICAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGFnZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
JigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnN0eWxlU2hlZXRDb2xs
ZWN0aW9uKCktPmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpOworICAgICAgICAg
ICAgZnJhbWUtPmRvY3VtZW50KCktPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuaW52YWxpZGF0ZUlu
amVjdGVkU3R5bGVTaGVldENhY2hlKCk7CiAgICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+
c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAgICAgICAgIH0KICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9u
IDE1NjM3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2MTcsNyArNTYxNyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6
OmxpbmVIZWlnaHQoYm9vbCAKICAgICBpZiAoaXNSZXBsYWNlZCgpICYmIGxpbmVQb3NpdGlvbk1v
ZGUgPT0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKQogICAgICAgICByZXR1cm4gUmVuZGVyQm94
OjpsaW5lSGVpZ2h0KGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsKIAot
ICAgIGlmIChmaXJzdExpbmUgJiYgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT51
c2VzRmlyc3RMaW5lUnVsZXMoKSkgeworICAgIGlmIChmaXJzdExpbmUgJiYgZG9jdW1lbnQoKS5z
dHlsZVNoZWV0Q29sbGVjdGlvbigpLnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CiAgICAgICAgIFJl
bmRlclN0eWxlKiBzID0gc3R5bGUoZmlyc3RMaW5lKTsKICAgICAgICAgaWYgKHMgIT0gc3R5bGUo
KSkKICAgICAgICAgICAgIHJldHVybiBzLT5jb21wdXRlZExpbmVIZWlnaHQoJnZpZXcoKSk7CkBA
IC01OTUzLDcgKzU5NTMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjcmVhdGVGaXJzdExldHRlclJl
bmRlCiAKIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVyKCkKIHsKLSAgICBpZiAo
IWRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS0+dXNlc0ZpcnN0TGV0dGVyUnVsZXMo
KSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS51c2VzRmlyc3RM
ZXR0ZXJSdWxlcygpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gRG9uJ3QgcmVjdXIKICAgICBp
ZiAoc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDE1NjM3OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjIsNyArMjIyLDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxp
bgogICAgICAgICB8fCBwYXJlbnRTdHlsZS0+bGluZUhlaWdodCgpICE9IHN0eWxlKCktPmxpbmVI
ZWlnaHQoKSkpCiAgICAgICAgIHx8IChmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPmhhc1JlZ2lv
bnNXaXRoU3R5bGluZygpKTsKIAotICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzICYmIGNo
ZWNrRm9udHMgJiYgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT51c2VzRmlyc3RM
aW5lUnVsZXMoKSkgeworICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzICYmIGNoZWNrRm9u
dHMgJiYgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnVzZXNGaXJzdExpbmVSdWxl
cygpKSB7CiAgICAgICAgIC8vIEhhdmUgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5bGUgYXMg
d2VsbC4KICAgICAgICAgcGFyZW50U3R5bGUgPSBwYXJlbnQoKS0+c3R5bGUodHJ1ZSk7CiAgICAg
ICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gc3R5bGUodHJ1ZSk7CkBAIC0xMzUxLDcgKzEz
NTEsNyBAQCBJbmxpbmVGbG93Qm94KiBSZW5kZXJJbmxpbmU6OmNyZWF0ZUFuZEFwCiAKIExheW91
dFVuaXQgUmVuZGVySW5saW5lOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0
aW9uTW9kZSAvKmRpcmVjdGlvbiovLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9k
ZSovKSBjb25zdAogewotICAgIGlmIChmaXJzdExpbmUgJiYgZG9jdW1lbnQoKS5zdHlsZVNoZWV0
Q29sbGVjdGlvbigpLT51c2VzRmlyc3RMaW5lUnVsZXMoKSkgeworICAgIGlmIChmaXJzdExpbmUg
JiYgZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnVzZXNGaXJzdExpbmVSdWxlcygp
KSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzID0gc3R5bGUoZmlyc3RMaW5lKTsKICAgICAgICAg
aWYgKHMgIT0gc3R5bGUoKSkKICAgICAgICAgICAgIHJldHVybiBzLT5jb21wdXRlZExpbmVIZWln
aHQoJnZpZXcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJy
ZWFrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlu
ZUJyZWFrLmNwcAkocmV2aXNpb24gMTU2Mzc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpbmVCcmVhay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgUmVu
ZGVyTGluZUJyZWFrOjp+UmVuZGVyTGluZUJyZWFrKCkKIAogTGF5b3V0VW5pdCBSZW5kZXJMaW5l
QnJlYWs6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIC8qZGly
ZWN0aW9uKi8sIExpbmVQb3NpdGlvbk1vZGUgLypsaW5lUG9zaXRpb25Nb2RlKi8pIGNvbnN0CiB7
Ci0gICAgaWYgKGZpcnN0TGluZSAmJiBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkt
PnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CisgICAgaWYgKGZpcnN0TGluZSAmJiBkb2N1bWVudCgp
LnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpIHsKICAgICAgICAg
UmVuZGVyU3R5bGUqIHMgPSBzdHlsZShmaXJzdExpbmUpOwogICAgICAgICBpZiAocyAhPSBzdHls
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHMtPmNvbXB1dGVkTGluZUhlaWdodCgmdmlldygpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lv
biAxNTYzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjI5MCw3ICsyMjkwLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IGZpcnN0TGluZQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJPYmpl
Y3Q6OnVuY2FjaGVkRmlyc3RMaW5lU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewot
ICAgIGlmICghZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT51c2VzRmlyc3RMaW5l
UnVsZXMoKSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS51c2Vz
Rmlyc3RMaW5lUnVsZXMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBBU1NFUlQoIWlzVGV4
dCgpKTsKQEAgLTIzMDAsNyArMjMwMCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRl
ck9iamVjdDo6dW4KIAogUmVuZGVyU3R5bGUqIFJlbmRlck9iamVjdDo6Y2FjaGVkRmlyc3RMaW5l
U3R5bGUoKSBjb25zdAogewotICAgIEFTU0VSVChkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0
aW9uKCktPnVzZXNGaXJzdExpbmVSdWxlcygpKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQoKS5zdHls
ZVNoZWV0Q29sbGVjdGlvbigpLnVzZXNGaXJzdExpbmVSdWxlcygpKTsKIAogICAgIGlmIChSZWZQ
dHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gZmlyc3RMaW5lU3R5bGVGb3JDYWNoZWRVbmNhY2hlZFR5
cGUoQ2FjaGVkLCBpc1RleHQoKSA/IHBhcmVudCgpIDogdGhpcywgbV9zdHlsZS5nZXQoKSkpCiAg
ICAgICAgIHJldHVybiBzdHlsZS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDE1NjM3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzc0LDcgKzc3NCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgIFJlbmRlclN0eWxlKiBmaXJzdExpbmVTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCkuc3R5bGVTaGVldENvbGxlY3Rpb24oKS0+dXNlc0Zp
cnN0TGluZVJ1bGVzKCkgPyBjYWNoZWRGaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsgfQorICAg
IFJlbmRlclN0eWxlKiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCku
c3R5bGVTaGVldENvbGxlY3Rpb24oKS51c2VzRmlyc3RMaW5lUnVsZXMoKSA/IGNhY2hlZEZpcnN0
TGluZVN0eWxlKCkgOiBzdHlsZSgpOyB9CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKGJvb2wgZmly
c3RMaW5lKSBjb25zdCB7IHJldHVybiBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogc3R5
bGUoKTsgfQogCiAgICAgLy8gVXNlZCBvbmx5IGJ5IEVsZW1lbnQ6OnBzZXVkb1N0eWxlQ2FjaGVJ
c0ludmFsaWQgdG8gZ2V0IGEgZmlyc3QgbGluZSBzdHlsZSBiYXNlZCBvZmYgb2YgYQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMTU2
Mzc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MzksNyArOTM5LDcgQEAgTGF5b3V0VW5pdCBSb290SW5saW5lQm94Ojp2
ZXJ0aWNhbFBvc2l0aQogCiAgICAgLy8gVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdmVydGlj
YWwgcG9zaXRpb24gZm9yIGlubGluZSBlbGVtZW50cy4KICAgICBib29sIGZpcnN0TGluZSA9IGlz
Rmlyc3RMaW5lU3R5bGUoKTsKLSAgICBpZiAoZmlyc3RMaW5lICYmICFyZW5kZXJlci0+ZG9jdW1l
bnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT51c2VzRmlyc3RMaW5lUnVsZXMoKSkKKyAgICBp
ZiAoZmlyc3RMaW5lICYmICFyZW5kZXJlci0+ZG9jdW1lbnQoKS5zdHlsZVNoZWV0Q29sbGVjdGlv
bigpLnVzZXNGaXJzdExpbmVSdWxlcygpKQogICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKIAog
ICAgIC8vIENoZWNrIHRoZSBjYWNoZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZVRyZWUuY3BwCShyZXZpc2lvbiAxNTYzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVJlc29sdmVUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE3LDcgKzYxNyw3IEBA
IHN0YXRpYyBDaGFuZ2UgcmVzb2x2ZUxvY2FsKEVsZW1lbnQmIGN1cnIKIAogICAgIC8vIElmICJy
ZW0iIHVuaXRzIGFyZSB1c2VkIGFueXdoZXJlIGluIHRoZSBkb2N1bWVudCwgYW5kIGlmIHRoZSBk
b2N1bWVudCBlbGVtZW50J3MgZm9udCBzaXplIGNoYW5nZXMsIHRoZW4gZ28gYWhlYWQgYW5kIGZv
cmNlIGZvbnQgdXBkYXRpbmcKICAgICAvLyBhbGwgdGhlIHdheSBkb3duIHRoZSB0cmVlLiBUaGlz
IGlzIHNpbXBsZXIgdGhhbiBoYXZpbmcgdG8gbWFpbnRhaW4gYSBjYWNoZSBvZiBvYmplY3RzIChh
bmQgc3VjaCBmb250IHNpemUgY2hhbmdlcyBzaG91bGQgYmUgcmFyZSBhbnl3YXkpLgotICAgIGlm
IChkb2N1bWVudC5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLT51c2VzUmVtVW5pdHMoKSAmJiBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQoKSA9PSAmY3VycmVudCAmJiBsb2NhbENoYW5nZSAhPSBOb0No
YW5nZSAmJiBjdXJyZW50U3R5bGUgJiYgbmV3U3R5bGUgJiYgY3VycmVudFN0eWxlLT5mb250U2l6
ZSgpICE9IG5ld1N0eWxlLT5mb250U2l6ZSgpKSB7CisgICAgaWYgKGRvY3VtZW50LnN0eWxlU2hl
ZXRDb2xsZWN0aW9uKCkudXNlc1JlbVVuaXRzKCkgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
KCkgPT0gJmN1cnJlbnQgJiYgbG9jYWxDaGFuZ2UgIT0gTm9DaGFuZ2UgJiYgY3VycmVudFN0eWxl
ICYmIG5ld1N0eWxlICYmIGN1cnJlbnRTdHlsZS0+Zm9udFNpemUoKSAhPSBuZXdTdHlsZS0+Zm9u
dFNpemUoKSkgewogICAgICAgICAvLyBDYWNoZWQgUmVuZGVyU3R5bGVzIG1heSBkZXBlbmQgb24g
dGhlIHJlIHVuaXRzLgogICAgICAgICBpZiAoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9
IGRvY3VtZW50LnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpKQogICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDE1NjM3OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2Myw3ICsxNjYz
LDcgQEAgdm9pZCBJbnRlcm5hbHM6Omluc2VydEF1dGhvckNTUyhEb2N1bWVudAogICAgIFJlZlB0
cjxTdHlsZVNoZWV0Q29udGVudHM+IHBhcnNlZFNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpj
cmVhdGUoZG9jdW1lbnQpOwogICAgIHBhcnNlZFNoZWV0LT5zZXRJc1VzZXJTdHlsZVNoZWV0KGZh
bHNlKTsKICAgICBwYXJzZWRTaGVldC0+cGFyc2VTdHJpbmcoY3NzKTsKLSAgICBkb2N1bWVudC0+
c3R5bGVTaGVldENvbGxlY3Rpb24oKS0+YWRkQXV0aG9yU2hlZXQocGFyc2VkU2hlZXQpOworICAg
IGRvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLmFkZEF1dGhvclNoZWV0KHBhcnNlZFNo
ZWV0KTsKIH0KIAogdm9pZCBJbnRlcm5hbHM6Omluc2VydFVzZXJDU1MoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBTdHJpbmcmIGNzcykgY29uc3QKQEAgLTE2NzEsNyArMTY3MSw3IEBAIHZvaWQg
SW50ZXJuYWxzOjppbnNlcnRVc2VyQ1NTKERvY3VtZW50KiAKICAgICBSZWZQdHI8U3R5bGVTaGVl
dENvbnRlbnRzPiBwYXJzZWRTaGVldCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKGRvY3Vt
ZW50KTsKICAgICBwYXJzZWRTaGVldC0+c2V0SXNVc2VyU3R5bGVTaGVldCh0cnVlKTsKICAgICBw
YXJzZWRTaGVldC0+cGFyc2VTdHJpbmcoY3NzKTsKLSAgICBkb2N1bWVudC0+c3R5bGVTaGVldENv
bGxlY3Rpb24oKS0+YWRkVXNlclNoZWV0KHBhcnNlZFNoZWV0KTsKKyAgICBkb2N1bWVudC0+c3R5
bGVTaGVldENvbGxlY3Rpb24oKS5hZGRVc2VyU2hlZXQocGFyc2VkU2hlZXQpOwogfQogCiBTdHJp
bmcgSW50ZXJuYWxzOjpjb3VudGVyVmFsdWUoRWxlbWVudCogZWxlbWVudCkK
</data>
<flag name="review"
          id="234772"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>