<?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>180892</bug_id>
          
          <creation_ts>2017-12-15 16:36:45 -0800</creation_ts>
          <short_desc>[Attachment Support] Support representing pasted or dropped content using attachment elements</short_desc>
          <delta_ts>2017-12-18 20:05:58 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>180853</dependson>
          <blocked>180924</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1382370</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-15 16:36:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/36064210&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382451</commentid>
    <comment_count>1</comment_count>
      <attachid>329561</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-15 22:44:23 -0800</bug_when>
    <thetext>Created attachment 329561
Depends on https://bugs.webkit.org/show_bug.cgi?id=180853</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382843</commentid>
    <comment_count>2</comment_count>
      <attachid>329561</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-12-18 13:18:56 -0800</bug_when>
    <thetext>Comment on attachment 329561
Depends on https://bugs.webkit.org/show_bug.cgi?id=180853

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        replaceRichContentWithAttachmentsIfNecessary to replace object elements with attachments; see comments below for

Still slightly concerned about all &lt;object&gt;s becoming &lt;attachment&gt;s.

&gt; Source/WebCore/ChangeLog:28
&gt; +        of generating markup from NSTextAttachments; this currently causes the web process to crash on an unrecognized
&gt; +        selector.

Crazy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382874</commentid>
    <comment_count>3</comment_count>
      <attachid>329561</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-18 13:49:08 -0800</bug_when>
    <thetext>Comment on attachment 329561
Depends on https://bugs.webkit.org/show_bug.cgi?id=180853

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        replaceRichContentWithAttachmentsIfNecessary to replace object elements with attachments; see comments below for
&gt; 
&gt; Still slightly concerned about all &lt;object&gt;s becoming &lt;attachment&gt;s.

True, it&apos;s...kinda weird.

One caveat is that we only do this replacement for objects whose `data` have already been replaced by blob URLs. And for pasted/dropped &lt;object&gt;s that don&apos;t have data URLs or haven&apos;t been blob-replaced, we&apos;ll simply remove them from the inserted fragment.

&gt;&gt; Source/WebCore/ChangeLog:28
&gt;&gt; +        selector.
&gt; 
&gt; Crazy

🙃

Thankfully less so after this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382972</commentid>
    <comment_count>4</comment_count>
      <attachid>329707</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-18 16:35:16 -0800</bug_when>
    <thetext>Created attachment 329707
Rebase on master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383022</commentid>
    <comment_count>5</comment_count>
      <attachid>329724</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-18 18:49:00 -0800</bug_when>
    <thetext>Created attachment 329724
Rebase on master again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383035</commentid>
    <comment_count>6</comment_count>
      <attachid>329724</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-18 20:03:25 -0800</bug_when>
    <thetext>Comment on attachment 329724
Rebase on master again

Clearing flags on attachment: 329724

Committed r226093: &lt;https://trac.webkit.org/changeset/226093&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329561</attachid>
            <date>2017-12-15 22:44:23 -0800</date>
            <delta_ts>2017-12-18 13:18:56 -0800</delta_ts>
            <desc>Depends on https://bugs.webkit.org/show_bug.cgi?id=180853</desc>
            <filename>bug-180892-20171215224422.patch</filename>
            <type>text/plain</type>
            <size>28747</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1OTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGYxYTcxNTBjMzNjOTM0
NDhmYWEzZDZlZmMyZThlY2JlMGI2MzIwNS4uNmRjZTU4NDExZjI1Mzk4YzUyZjUyOWIwMDgyZTVi
YjliYThjOGMyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE3LTEyLTE1ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIFN1cHBvcnQgcmVwcmVzZW50aW5nIHBhc3RlZCBvciBkcm9wcGVkIGNvbnRlbnQg
dXNpbmcgYXR0YWNobWVudCBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgwODkyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjA2NDIx
MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdXBw
b3J0IGRyb3BwaW5nIGFuZCBwYXN0aW5nIGF0dHJpYnV0ZWQgc3RyaW5ncyB0aGF0IGNvbnRhaW4g
TlNUZXh0QXR0YWNobWVudHMuIFRlYWNoZXMKKyAgICAgICAgcmVwbGFjZVJpY2hDb250ZW50V2l0
aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkgdG8gcmVwbGFjZSBvYmplY3QgZWxlbWVudHMgd2l0aCBh
dHRhY2htZW50czsgc2VlIGNvbW1lbnRzIGJlbG93IGZvcgorICAgICAgICBtb3JlIGRldGFpbHMu
CisKKyAgICAgICAgVGVzdDogV0tBdHRhY2htZW50VGVzdHMuSW5zZXJ0UGFzdGVkQXR0cmlidXRl
ZFN0cmluZ0NvbnRhaW5pbmdNdWx0aXBsZUF0dGFjaG1lbnRzCisKKyAgICAgICAgKiBlZGl0aW5n
L1dlYkNvbnRlbnRSZWFkZXIuaDoKKworICAgICAgICBBZGQgQmxvYlJlcGxhY2VtZW50SW5mbywg
d2hpY2ggY29udGFpbnMgYSBtYXAgb2YgYmxvYiBVUkxzIHRvIHJlcGxhY2VtZW50IEJsb2JzLCBh
cyB3ZWxsIGFzIGEgbWFwIG9mIGJsb2IgVVJMcworICAgICAgICB0byByZXBsYWNlZCBzdWJyZXNv
dXJjZSBVUkxzLgorCisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVwbGFjZW1lbnRJbmZvOjppc0Vt
cHR5IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJp
bmcpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0
cmlidXRlZFN0cmluZy5oOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJlc291
cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5tbToKKworICAgICAgICBJbXBsZW1lbnQgLVtXZWJB
cmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nIE1JTUVUeXBlXS4gVUlGb3VuZGF0
aW9uIGFza3MgZm9yIC1NSU1FVHlwZSBpbiB0aGUgcHJvY2VzcworICAgICAgICBvZiBnZW5lcmF0
aW5nIG1hcmt1cCBmcm9tIE5TVGV4dEF0dGFjaG1lbnRzOyB0aGlzIGN1cnJlbnRseSBjYXVzZXMg
dGhlIHdlYiBwcm9jZXNzIHRvIGNyYXNoIG9uIGFuIHVucmVjb2duaXplZAorICAgICAgICBzZWxl
Y3Rvci4KKworICAgICAgICBBZGRpdGlvbmFsbHksIHdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxl
bS8zNjA3NDQyOT4sIGEgVUlGb3VuZGF0aW9uIGJ1ZyBpbiB3aGljaCBhbGwgYnV0IGEgZmV3IGhh
cmQtY29kZWQgZmlsZQorICAgICAgICBleHRlbnNpb25zIGFjdHVhbGx5IHlpZWxkIE1JTUUgdHlw
ZXMgdGhhdCBhcmUgbW9yZSBzcGVjaWZpYyB0aGFuICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0i
LiBUaGlzIGNhbiBzYWZlbHkgYmUKKyAgICAgICAgcmVtb3ZlZCBvbmNlIDxyZGFyOi8vcHJvYmxl
bS8zNjA3NDQyOT4gaXMgYWRkcmVzc2VkLgorCisgICAgICAgICgtW1dlYkFyY2hpdmVSZXNvdXJj
ZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcgTUlNRVR5cGVdKToKKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VS
aWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KToKKworICAgICAgICBUcnkgdG8g
cmVwbGFjZSBvYmplY3QgZWxlbWVudHMgd2l0aCBhdHRhY2htZW50cywgYW5kIGFsc28gdHdlYWsg
dGhlIHRpdGxlIG9mIHRoZSBhdHRhY2htZW50J3MgRmlsZSB0byB1c2UgdGhlCisgICAgICAgIHJl
cGxhY2VkIHN1YnJlc291cmNlJ3MgZmlsZW5hbWUgaWYgcG9zc2libGUuIEFkZGl0aW9uYWxseSwg
YWJzdHJhY3RzIG91dCBpbmZvcm1hdGlvbiBmb3IgcmVwbGFjaW5nIG9iamVjdCBvcgorICAgICAg
ICBpbWFnZSBlbGVtZW50cyAoZm9ybWVybHkgYSBwYWlyIG9mIHsgRmlsZSwgRWxlbWVudCB9KSBp
bnRvIGEgc2VwYXJhdGUgc3RydWN0LCBhbmQgYWRkIGEgQXR0YWNobWVudERpc3BsYXlNb2RlCisg
ICAgICAgIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXR0YWNobWVudCBzaG91
bGQgYmUgcHJlc2VudGVkIGluLWxpbmUgKGluIHRoZSBjYXNlIG9mIGltYWdlcyksIG9yIGFzIGFu
IGljb24uCisKKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZXNGb3JBdHRyaWJ1dGVkU3RyaW5n
Q29udmVyc2lvbik6CisKKyAgICAgICAgT25seSBleGNsdWRlIG9iamVjdCBlbGVtZW50cyBmcm9t
IGJlaW5nIGdlbmVyYXRlZCBmcm9tIE5TVGV4dEF0dGFjaG1lbnRzIGlmIHRoZSBhdHRhY2htZW50
IGVsZW1lbnQgcnVudGltZQorICAgICAgICBmZWF0dXJlIGlzIGRpc2FibGVkLCBvciAhRU5BQkxF
KEFUVEFDSE1FTlRfRUxFTUVOVCkuCisKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50
QW5kQWRkUmVzb3VyY2VzKToKKworICAgICAgICBBZGRpdGlvbmFsbHkga2VlcCB0cmFjayBvZiBh
IG1hcHBpbmcgZnJvbSBibG9iIFVSTCA9PiByZXBsYWNlZCBzdWJyZXNvdXJjZSBVUkwuIEluIGFs
bCB0aGUgcGxhY2VzIHdoZXJlIHdlCisgICAgICAgIHByZXZpb3VzbHkgb25seSBwbHVtYmVkIGEg
bWFwIG9mIGJsb2IgVVJMID0+IEJsb2IsIHVzZSBhIEJsb2JSZXBsYWNlbWVudEluZm8gc3RydWN0
IGluc3RlYWQsIHdoaWNoIG5vdyBpbmNsdWRlcworICAgICAgICBhIG1hcCBmcm9tIGJsb2IgVVJM
ID0+IHJlcGxhY2VkIFVSTC4KKworICAgICAgICAoV2ViQ29yZTo6c2FuaXRpemVNYXJrdXBXaXRo
QXJjaGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkV2ViQXJj
aGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50TWFya3VwUmVhZGVyOjpyZWFkV2Vi
QXJjaGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkUlRGRCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50TWFya3VwUmVhZGVyOjpyZWFkUlRGRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkUlRGKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRSVEYpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZEltYWdlKToKKwogMjAxNy0xMi0xNCAgV2Vuc29uIEhz
aWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbQXR0YWNobWVudCBTdXBw
b3J0XSBJbnNlcnQgaW1hZ2VzIGFzIGlubGluZSBhdHRhY2htZW50cyB3aGVuIHBhc3RpbmcgYW5k
IGRyb3BwaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvbnRlbnRS
ZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oCmluZGV4
IGIwYzViNzY0YmI4NDg1MWY0NmYwN2JlMzc5NGUxMTk4MzFiMTAyYjcuLmYzNjU4ZWE4Y2ZiNDFi
MDBiY2NhYjA0NDkzNWFkNzdkOTVlN2ZjYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvV2ViQ29udGVudFJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2Vi
Q29udGVudFJlYWRlci5oCkBAIC0xMDYsOCArMTA2LDE0IEBAIHN0cnVjdCBGcmFnbWVudEFuZFJl
c291cmNlcyB7CiAgICAgVmVjdG9yPFJlZjxBcmNoaXZlUmVzb3VyY2U+PiByZXNvdXJjZXM7CiB9
OwogCi12b2lkIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KERv
Y3VtZW50RnJhZ21lbnQmLCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiYmIHVy
bFRvQmxvYk1hcCk7Ci1SZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRB
ZGRSZXNvdXJjZXMoRnJhbWUmLCBOU0F0dHJpYnV0ZWRTdHJpbmcqLCBIYXNoTWFwPEF0b21pY1N0
cmluZywgUmVmUHRyPEJsb2I+PiYgdXJsVG9CbG9iTWFwKTsKK3N0cnVjdCBCbG9iUmVwbGFjZW1l
bnRJbmZvIHsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiBibG9iVVJM
VG9CbG9iTWFwOworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IGJsb2JV
UkxUb1JlcGxhY2VkVVJMTWFwOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJs
b2JVUkxUb0Jsb2JNYXAuaXNFbXB0eSgpOyB9Cit9OworCit2b2lkIHJlcGxhY2VSaWNoQ29udGVu
dFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KERvY3VtZW50RnJhZ21lbnQmLCBCbG9iUmVwbGFj
ZW1lbnRJbmZvJiYpOworUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50QW5k
QWRkUmVzb3VyY2VzKEZyYW1lJiwgTlNBdHRyaWJ1dGVkU3RyaW5nKiwgQmxvYlJlcGxhY2VtZW50
SW5mbyYpOwogI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRv
ckNvY29hLm1tCmluZGV4IDhiODY5N2ZhNDgyY2FhNmY5NTAyMzgxNTUyMTU1MzFmYzBkODU0NzUu
LjYyODcwNjY5MTRlYzc0ZTk0ZjQ2MmRjYjc0OGM1N2VmNDUzZjUzMzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtMjIyLDkgKzIyMiw5IEBAIHZv
aWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1
dGVkU3RyaW5nICphdHRyaWJ1dGVkCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKLSAg
ICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4gdXJsVG9CbG9iTWFwOwot
ICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2Vz
KG1fZnJhbWUsIGF0dHJpYnV0ZWRTdHJpbmcsIHVybFRvQmxvYk1hcCkpIHsKLSAgICAgICAgICAg
IHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwg
V1RGTW92ZSh1cmxUb0Jsb2JNYXApKTsKKyAgICAgICAgQmxvYlJlcGxhY2VtZW50SW5mbyByZXBs
YWNlbWVudEluZm87CisgICAgICAgIGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRB
bmRBZGRSZXNvdXJjZXMobV9mcmFtZSwgYXR0cmlidXRlZFN0cmluZywgcmVwbGFjZW1lbnRJbmZv
KSkgeworICAgICAgICAgICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNl
c3NhcnkoKmZyYWdtZW50LCBXVEZNb3ZlKHJlcGxhY2VtZW50SW5mbykpOwogICAgICAgICAgICAg
aWYgKHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgICAgICAgICAgcGFzdGVBc0Zy
YWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGZhbHNlLCBmYWxzZSwgbWFpbEJsb2Nr
cXVvdGVIYW5kbGluZyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRy
aWJ1dGVkU3RyaW5nLmgKaW5kZXggM2Y4MTc3ZTlhZGZiYmQ1MjQwNjUxYWMzNDU3Y2I5MGI1N2U2
MWM2MC4uMTBhMDhkYzE2ZTdkOTAyMmYwYmMyZmIyN2RkYmU5NzZkNTVlMDJhNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNB
dHRyaWJ1dGVkU3RyaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJB
cmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmgKQEAgLTM2LDYgKzM2LDcgQEAg
Y2xhc3MgQXJjaGl2ZVJlc291cmNlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpBcmNoaXZlUmVzb3Vy
Y2U+IHJlc291cmNlOwogfQogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGF0YTooTlNEYXRhICop
ZGF0YSBVUkw6KE5TVVJMICopVVJMIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIHRleHRF
bmNvZGluZ05hbWU6KE5TU3RyaW5nICopdGV4dEVuY29kaW5nTmFtZSBmcmFtZU5hbWU6KE5TU3Ry
aW5nICopZnJhbWVOYW1lOworLSAoTlNTdHJpbmcgKilNSU1FVHlwZTsKIC0gKE5TVVJMICopVVJM
OwogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFy
Y2hpdmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcubW0K
aW5kZXggOTI4N2VmYThjMThiN2QxODc0MDZkMGM1M2U2MGMyMTZiNWEzZDAxNi4uMTA3MDEwNjk1
ZDg5NzBkNjg4YmE4NGIyMTdhYzE2MWQxNDAzODgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5n
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJlc291cmNl
RnJvbU5TQXR0cmlidXRlZFN0cmluZy5tbQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiV2Vi
QXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oIgogCiAjaW1wb3J0ICJBcmNo
aXZlUmVzb3VyY2UuaCIKKyNpbXBvcnQgIk1JTUVUeXBlUmVnaXN0cnkuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQyLDYgKzQzLDEzIEBAIC0gKGluc3RhbmNldHlwZSlpbml0
V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgVVJMOihOU1VSTCAqKVVSTCBNSU1FVHlwZTooTlNTdHJp
bmcKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAKKyAgICBpZiAoW01JTUVUeXBlIGlzRXF1
YWxUb1N0cmluZzpAImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJdKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzM2MDc0NDI5Piwg
YW5kIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhhdCBpcyBmaXhlZC4KKyAgICAgICAgYXV0byBtaW1l
VHlwZUZyb21VUkwgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihV
UkwucGF0aEV4dGVuc2lvbik7CisgICAgICAgIGlmICghbWltZVR5cGVGcm9tVVJMLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIE1JTUVUeXBlID0gbWltZVR5cGVGcm9tVVJMOworICAgIH0KKwogICAg
IHJlc291cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjpjcmVhdGUo
YWRvcHROUyhbZGF0YSBjb3B5XSkuZ2V0KCkpLCBVUkwsIE1JTUVUeXBlLCB0ZXh0RW5jb2RpbmdO
YW1lLCBmcmFtZU5hbWUsIHsgfSk7CiAgICAgaWYgKCFyZXNvdXJjZSkgewogICAgICAgICBbc2Vs
ZiByZWxlYXNlXTsKQEAgLTUxLDYgKzU5LDExIEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aERh
dGE6KE5TRGF0YSAqKWRhdGEgVVJMOihOU1VSTCAqKVVSTCBNSU1FVHlwZTooTlNTdHJpbmcKICAg
ICByZXR1cm4gc2VsZjsKIH0KIAorLSAoTlNTdHJpbmcgKilNSU1FVHlwZQoreworICAgIHJldHVy
biByZXNvdXJjZS0+bWltZVR5cGUoKTsKK30KKwogLSAoTlNVUkwgKilVUkwKIHsKICAgICByZXR1
cm4gcmVzb3VyY2UtPnVybCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQppbmRleCBmYjU0MDA5MGU2ZjZhYzE3Mzc1MGM2
M2JhZDM0ZDBkZGJmNDM5M2QwLi5jY2E1OGFiNzNhZjViMjc1YjZkNWVlMTZmZDI0ZmQ4OTM0MmZi
MjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRS
ZWFkZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRl
bnRSZWFkZXJDb2NvYS5tbQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCAiSFRNTEJvZHlFbGVt
ZW50LmgiCiAjaW1wb3J0ICJIVE1MSUZyYW1lRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTEltYWdl
RWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTE9iamVjdEVsZW1lbnQuaCIKICNpbXBvcnQgIkxlZ2Fj
eVdlYkFyY2hpdmUuaCIKICNpbXBvcnQgIk1haW5GcmFtZS5oIgogI2ltcG9ydCAiUGFnZS5oIgpA
QCAtNDksNiArNTAsNyBAQAogI2ltcG9ydCAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2lt
cG9ydCAiU2V0dGluZ3MuaCIKICNpbXBvcnQgIlNvY2tldFByb3ZpZGVyLmgiCisjaW1wb3J0ICJV
UkxQYXJzZXIuaCIKICNpbXBvcnQgIldlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRT
dHJpbmcuaCIKICNpbXBvcnQgIldlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5o
IgogI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCkBAIC03NSwzNyArNzcs
NjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVO
VCkKIAotdm9pZCByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeShE
b2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxC
bG9iPj4mJiB1cmxUb0Jsb2JNYXApCitzdHJ1Y3QgQXR0YWNobWVudFJlcGxhY2VtZW50SW5mbyB7
CisgICAgQXR0YWNobWVudERpc3BsYXlNb2RlIGRpc3BsYXlNb2RlOworICAgIFJlZjxGaWxlPiBm
aWxlOworICAgIFJlZjxFbGVtZW50PiBlbGVtZW50VG9SZXBsYWNlOworfTsKKwordm9pZCByZXBs
YWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeShEb2N1bWVudEZyYWdtZW50
JiBmcmFnbWVudCwgQmxvYlJlcGxhY2VtZW50SW5mbyYmIHJlcGxhY2VtZW50SW5mbykKIHsKLSAg
ICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuYXR0YWNobWVu
dEVsZW1lbnRFbmFibGVkKCkgfHwgdXJsVG9CbG9iTWFwLmlzRW1wdHkoKSkKKyAgICBpZiAoIVJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuYXR0YWNobWVudEVsZW1lbnRF
bmFibGVkKCkgfHwgcmVwbGFjZW1lbnRJbmZvLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gZWxlbWVudHNUb1JlbW92ZTsKLSAgICBWZWN0b3I8
c3RkOjpwYWlyPFJlZjxGaWxlPiwgUmVmPEVsZW1lbnQ+Pj4gZmlsZXNGb3JFbGVtZW50c1RvUmVw
bGFjZTsKKyAgICBWZWN0b3I8QXR0YWNobWVudFJlcGxhY2VtZW50SW5mbz4gYXR0YWNobWVudFJl
cGxhY2VtZW50SW5mbzsKICAgICBmb3IgKGF1dG8mIGltYWdlIDogZGVzY2VuZGFudHNPZlR5cGU8
SFRNTEltYWdlRWxlbWVudD4oZnJhZ21lbnQpKSB7CiAgICAgICAgIGF1dG8gdXJsID0gaW1hZ2Uu
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnNyY0F0dHIpOwotCiAg
ICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBlbGVtZW50c1RvUmVtb3Zl
LmFwcGVuZChpbWFnZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAg
ICAgIGF1dG8gYmxvYiA9IHVybFRvQmxvYk1hcC5nZXQodXJsKTsKKyAgICAgICAgYXV0byBibG9i
ID0gcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb0Jsb2JNYXAuZ2V0KHVybCk7CiAgICAgICAgIGlm
ICghYmxvYikgewogICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92ZS5hcHBlbmQoaW1hZ2UpOwog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHRpdGxlID0g
aW1hZ2UuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnRpdGxlQXR0
cik7CisgICAgICAgIGF1dG8gdGl0bGUgPSBVUkxQYXJzZXIgeyByZXBsYWNlbWVudEluZm8uYmxv
YlVSTFRvUmVwbGFjZWRVUkxNYXAuZ2V0KHVybCkgfS5yZXN1bHQoKS5sYXN0UGF0aENvbXBvbmVu
dCgpOwogICAgICAgICBpZiAodGl0bGUuaXNFbXB0eSgpKQogICAgICAgICAgICAgdGl0bGUgPSBB
dG9taWNTdHJpbmcoIm1lZGlhIik7CiAKLSAgICAgICAgZmlsZXNGb3JFbGVtZW50c1RvUmVwbGFj
ZS5hcHBlbmQoeyBGaWxlOjpjcmVhdGUoKmJsb2IsIHRpdGxlKSwgaW1hZ2UgfSk7CisgICAgICAg
IGF0dGFjaG1lbnRSZXBsYWNlbWVudEluZm8uYXBwZW5kKHsgQXR0YWNobWVudERpc3BsYXlNb2Rl
OjpJblBsYWNlLCBGaWxlOjpjcmVhdGUoKmJsb2IsIHRpdGxlKSwgaW1hZ2UgfSk7CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBmaWxlQW5kRWxlbWVudCA6IGZpbGVzRm9yRWxlbWVudHNUb1JlcGxh
Y2UpIHsKLSAgICAgICAgYXV0byYgZmlsZSA9IGZpbGVBbmRFbGVtZW50LmZpcnN0OwotICAgICAg
ICBhdXRvJiBlbGVtZW50VG9SZXBsYWNlID0gZmlsZUFuZEVsZW1lbnQuc2Vjb25kOworICAgIGZv
ciAoYXV0byYgb2JqZWN0IDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTE9iamVjdEVsZW1lbnQ+KGZy
YWdtZW50KSkgeworICAgICAgICBhdXRvIHVybCA9IG9iamVjdC5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKEhUTUxOYW1lczo6ZGF0YUF0dHIpOworICAgICAgICBpZiAodXJsLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92ZS5hcHBlbmQob2JqZWN0KTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBibG9iID0gcmVw
bGFjZW1lbnRJbmZvLmJsb2JVUkxUb0Jsb2JNYXAuZ2V0KHVybCk7CisgICAgICAgIGlmICghYmxv
YikgeworICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92ZS5hcHBlbmQob2JqZWN0KTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0aXRsZSA9IFVSTFBh
cnNlciB7IHJlcGxhY2VtZW50SW5mby5ibG9iVVJMVG9SZXBsYWNlZFVSTE1hcC5nZXQodXJsKSB9
LnJlc3VsdCgpLmxhc3RQYXRoQ29tcG9uZW50KCk7CisgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICB0aXRsZSA9IEF0b21pY1N0cmluZygiZmlsZSIpOworCisgICAgICAg
IGF0dGFjaG1lbnRSZXBsYWNlbWVudEluZm8uYXBwZW5kKHsgQXR0YWNobWVudERpc3BsYXlNb2Rl
OjpBc0ljb24sIEZpbGU6OmNyZWF0ZSgqYmxvYiwgdGl0bGUpLCBvYmplY3QgfSk7CisgICAgfQor
CisgICAgZm9yIChhdXRvJiBpbmZvIDogYXR0YWNobWVudFJlcGxhY2VtZW50SW5mbykgeworICAg
ICAgICBhdXRvIGZpbGUgPSBXVEZNb3ZlKGluZm8uZmlsZSk7CisgICAgICAgIGF1dG8gZWxlbWVu
dFRvUmVwbGFjZSA9IFdURk1vdmUoaW5mby5lbGVtZW50VG9SZXBsYWNlKTsKICAgICAgICAgYXV0
byBwYXJlbnQgPSBtYWtlUmVmUHRyKGVsZW1lbnRUb1JlcGxhY2UtPnBhcmVudE5vZGUoKSk7CiAg
ICAgICAgIGlmICghcGFyZW50KQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMTMsNyArMTQw
LDcgQEAgdm9pZCByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeShE
b2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgSGEKICAgICAgICAgYXV0byBhdHRhY2htZW50ID0g
SFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjphdHRhY2htZW50VGFnLCBm
cmFnbWVudC5kb2N1bWVudCgpKTsKICAgICAgICAgYXR0YWNobWVudC0+c2V0VW5pcXVlSWRlbnRp
ZmllcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOwogICAgICAgICBhdHRhY2htZW50LT5z
ZXRGaWxlKFdURk1vdmUoZmlsZSksIEhUTUxBdHRhY2htZW50RWxlbWVudDo6VXBkYXRlRGlzcGxh
eUF0dHJpYnV0ZXM6Olllcyk7Ci0gICAgICAgIGF0dGFjaG1lbnQtPnVwZGF0ZURpc3BsYXlNb2Rl
KEF0dGFjaG1lbnREaXNwbGF5TW9kZTo6SW5QbGFjZSk7CisgICAgICAgIGF0dGFjaG1lbnQtPnVw
ZGF0ZURpc3BsYXlNb2RlKGluZm8uZGlzcGxheU1vZGUpOwogICAgICAgICBwYXJlbnQtPnJlcGxh
Y2VDaGlsZChhdHRhY2htZW50LCBlbGVtZW50VG9SZXBsYWNlKTsKICAgICB9CiAKQEAgLTEzNCw3
ICsxNjEsNyBAQCB2b2lkIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNz
YXJ5KERvY3VtZW50RnJhZ21lbnQmLCBIYXNoTWFwPEF0bwogc3RhdGljIE5TRGljdGlvbmFyeSAq
YXR0cmlidXRlc0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKCkKIHsKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIGlkZW50aWNhbGx5IG5hbWVk
IG9uZSBpbiBXZWJLaXRMZWdhY3ksIHdoaWNoIGlzIHVzZWQgb24gb2xkZXIgT1MgdmVyc2lvbnMu
Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGV4Y2x1ZGVkRWxlbWVudHMgPSBhZG9wdE5TKFtbTlNB
cnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgorICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gZXhjbHVkZWRFbGVtZW50cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhPYmplY3RzOgogICAgICAgICAvLyBPbWl0IHN0eWxlIHNpbmNlIHdlIHdhbnQgc3R5bGUg
dG8gYmUgaW5saW5lIHNvIHRoZSBmcmFnbWVudCBjYW4gYmUgZWFzaWx5IGluc2VydGVkLgogICAg
ICAgICBAInN0eWxlIiwKICAgICAgICAgLy8gT21pdCB4bWwgc28gdGhlIHJlc3VsdCBpcyBub3Qg
WEhUTUwuCkBAIC0xNDMsOCArMTcwLDE2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0
ZXNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbigpCiAgICAgICAgIEAiZG9jdHlwZSIsIEAi
aHRtbCIsIEAiaGVhZCIsIEAiYm9keSIsCiAgICAgICAgIC8vIE9taXQgZGVwcmVjYXRlZCB0YWdz
LgogICAgICAgICBAImFwcGxldCIsIEAiYmFzZWZvbnQiLCBAImNlbnRlciIsIEAiZGlyIiwgQCJm
b250IiwgQCJtZW51IiwgQCJzIiwgQCJzdHJpa2UiLCBAInUiLAorI2lmICFFTkFCTEUoQVRUQUNI
TUVOVF9FTEVNRU5UKQogICAgICAgICAvLyBPbWl0IG9iamVjdCBzbyBubyBmaWxlIGF0dGFjaG1l
bnRzIGFyZSBwYXJ0IG9mIHRoZSBmcmFnbWVudC4KLSAgICAgICAgQCJvYmplY3QiLCBuaWxdKTsK
KyAgICAgICAgQCJvYmplY3QiLAorI2VuZGlmCisgICAgICAgIG5pbF0pOworCisjaWYgRU5BQkxF
KEFUVEFDSE1FTlRfRUxFTUVOVCkKKyAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkuYXR0YWNobWVudEVsZW1lbnRFbmFibGVkKCkpCisgICAgICAgIFtleGNs
dWRlZEVsZW1lbnRzIGFkZE9iamVjdDpAIm9iamVjdCJdOworI2VuZGlmCiAKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgTlNFeGNsdWRlZEVsZW1lbnRzRG9j
dW1lbnRBdHRyaWJ1dGUgPSBAIkV4Y2x1ZGVkRWxlbWVudHMiOwpAQCAtMjE5LDcgKzI1NCw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZERpc2FibGVJbWFnZSB7IGZhbHNlIH07CiB9OwogCi1S
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJh
bWUmIGZyYW1lLCBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgSGFzaE1hcDxBdG9taWNTdHJp
bmcsIFJlZlB0cjxCbG9iPj4mIHVybFRvQmxvYk1hcCkKK1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhGcmFtZSYgZnJhbWUsIE5TQXR0cmlidXRl
ZFN0cmluZyAqc3RyaW5nLCBCbG9iUmVwbGFjZW1lbnRJbmZvJiByZXBsYWNlbWVudEluZm8pCiB7
CiAgICAgaWYgKCFmcmFtZS5wYWdlKCkgfHwgIWZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMjM4LDcgKzI3Myw4IEBAIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhGcmFtZSYgZnJhbWUsIE5TQXR0cmlidXRl
CiAgICAgICAgIGF1dG8gYmxvYiA9IEJsb2I6OmNyZWF0ZShzdWJyZXNvdXJjZS0+ZGF0YSgpLCBz
dWJyZXNvdXJjZS0+bWltZVR5cGUoKSk7CiAgICAgICAgIFN0cmluZyBibG9iVVJMID0gRE9NVVJM
OjpjcmVhdGVPYmplY3RVUkwoZG9jdW1lbnQsIGJsb2IpOwogICAgICAgICBibG9iVVJMTWFwLnNl
dChzdWJyZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCksIGJsb2JVUkwpOwotICAgICAgICB1cmxUb0Js
b2JNYXAuc2V0KGJsb2JVUkwsIFdURk1vdmUoYmxvYikpOworICAgICAgICByZXBsYWNlbWVudElu
Zm8uYmxvYlVSTFRvQmxvYk1hcC5zZXQoYmxvYlVSTCwgV1RGTW92ZShibG9iKSk7CisgICAgICAg
IHJlcGxhY2VtZW50SW5mby5ibG9iVVJMVG9SZXBsYWNlZFVSTE1hcC5zZXQoYmxvYlVSTCwgc3Vi
cmVzb3VyY2UtPnVybCgpLnN0cmluZygpKTsKICAgICB9CiAgICAgcmVwbGFjZVN1YnJlc291cmNl
VVJMcygqZnJhZ21lbnRBbmRSZXNvdXJjZXMuZnJhZ21lbnQsIFdURk1vdmUoYmxvYlVSTE1hcCkp
OwogCkBAIC0yNjgsNyArMzA0LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TWFya3VwQW5kQXJj
aGl2ZT4gZXh0cmFjdE1hcmt1cEFuZEFyY2hpdmUoU2hhcmVkQnVmZmVyJiBidWYKICAgICByZXR1
cm4gTWFya3VwQW5kQXJjaGl2ZSB7IFN0cmluZzo6ZnJvbVVURjgobWFpblJlc291cmNlLT5kYXRh
KCkuZGF0YSgpLCBtYWluUmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpLCBtYWluUmVzb3VyY2UucmVs
ZWFzZU5vbk51bGwoKSwgYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpIH07CiB9CiAKLXN0YXRpYyBT
dHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVzdGluYXRpb25Eb2N1
bWVudCwgTWFya3VwQW5kQXJjaGl2ZSYgbWFya3VwQW5kQXJjaGl2ZSwgY29uc3Qgc3RkOjpmdW5j
dGlvbjxib29sKGNvbnN0IFN0cmluZyk+JiBjYW5TaG93TUlNRVR5cGVBc0hUTUwsIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+JiB1cmxUb0Jsb2JNYXApCitzdGF0aWMgU3RyaW5n
IHNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUoRG9jdW1lbnQmIGRlc3RpbmF0aW9uRG9jdW1lbnQs
IE1hcmt1cEFuZEFyY2hpdmUmIG1hcmt1cEFuZEFyY2hpdmUsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248
Ym9vbChjb25zdCBTdHJpbmcpPiYgY2FuU2hvd01JTUVUeXBlQXNIVE1MLCBCbG9iUmVwbGFjZW1l
bnRJbmZvJiByZXBsYWNlbWVudEluZm8pCiB7CiAgICAgYXV0byBwYWdlID0gY3JlYXRlUGFnZUZv
clNhbml0aXppbmdXZWJDb250ZW50KCk7CiAgICAgRG9jdW1lbnQqIHN0YWdpbmdEb2N1bWVudCA9
IHBhZ2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCk7CkBAIC0yODAsNyArMzE2LDggQEAgc3RhdGlj
IFN0cmluZyBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNoaXZlKERvY3VtZW50JiBkZXN0aW5hdGlvbkRv
Y3VtZW50LCBNYXJrdXBBbmQKICAgICAgICAgYXV0byBibG9iID0gQmxvYjo6Y3JlYXRlKHN1YnJl
c291cmNlLT5kYXRhKCksIHN1YnJlc291cmNlLT5taW1lVHlwZSgpKTsKICAgICAgICAgU3RyaW5n
IGJsb2JVUkwgPSBET01VUkw6OmNyZWF0ZU9iamVjdFVSTChkZXN0aW5hdGlvbkRvY3VtZW50LCBi
bG9iKTsKICAgICAgICAgYmxvYlVSTE1hcC5zZXQoc3VicmVzb3VyY2UtPnVybCgpLnN0cmluZygp
LCBibG9iVVJMKTsKLSAgICAgICAgdXJsVG9CbG9iTWFwLnNldChibG9iVVJMLCBXVEZNb3ZlKGJs
b2IpKTsKKyAgICAgICAgcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb0Jsb2JNYXAuc2V0KGJsb2JV
UkwsIFdURk1vdmUoYmxvYikpOworICAgICAgICByZXBsYWNlbWVudEluZm8uYmxvYlVSTFRvUmVw
bGFjZWRVUkxNYXAuc2V0KGJsb2JVUkwsIHN1YnJlc291cmNlLT51cmwoKS5zdHJpbmcoKSk7CiAg
ICAgfQogCiAgICAgYXV0byBjb250ZW50T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSht
YXJrdXBBbmRBcmNoaXZlLm1haW5SZXNvdXJjZS0+dXJsKCkpOwpAQCAtMjk2LDcgKzMzMyw3IEBA
IHN0YXRpYyBTdHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVzdGlu
YXRpb25Eb2N1bWVudCwgTWFya3VwQW5kCiAgICAgICAgIGF1dG8gc3ViZnJhbWVVUkwgPSBzdWJm
cmFtZU1haW5SZXNvdXJjZS0+dXJsKCk7CiAgICAgICAgIE1hcmt1cEFuZEFyY2hpdmUgc3ViZnJh
bWVDb250ZW50ID0geyBTdHJpbmc6OmZyb21VVEY4KHN1YmZyYW1lTWFpblJlc291cmNlLT5kYXRh
KCkuZGF0YSgpLCBzdWJmcmFtZU1haW5SZXNvdXJjZS0+ZGF0YSgpLnNpemUoKSksCiAgICAgICAg
ICAgICBzdWJmcmFtZU1haW5SZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpLCBzdWJmcmFtZUFyY2hp
dmUuY29weVJlZigpIH07Ci0gICAgICAgIGF1dG8gc3ViZnJhbWVNYXJrdXAgPSBzYW5pdGl6ZU1h
cmt1cFdpdGhBcmNoaXZlKGRlc3RpbmF0aW9uRG9jdW1lbnQsIHN1YmZyYW1lQ29udGVudCwgY2Fu
U2hvd01JTUVUeXBlQXNIVE1MLCB1cmxUb0Jsb2JNYXApOworICAgICAgICBhdXRvIHN1YmZyYW1l
TWFya3VwID0gc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShkZXN0aW5hdGlvbkRvY3VtZW50LCBz
dWJmcmFtZUNvbnRlbnQsIGNhblNob3dNSU1FVHlwZUFzSFRNTCwgcmVwbGFjZW1lbnRJbmZvKTsK
IAogICAgICAgICBDU3RyaW5nIHV0ZjggPSBzdWJmcmFtZU1hcmt1cC51dGY4KCk7CiAgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBibG9iQnVmZmVyOwpAQCAtMzA2LDcgKzM0Myw4IEBAIHN0YXRpYyBT
dHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVzdGluYXRpb25Eb2N1
bWVudCwgTWFya3VwQW5kCiAKICAgICAgICAgU3RyaW5nIHN1YmZyYW1lQmxvYlVSTCA9IERPTVVS
TDo6Y3JlYXRlT2JqZWN0VVJMKGRlc3RpbmF0aW9uRG9jdW1lbnQsIGJsb2IpOwogICAgICAgICBi
bG9iVVJMTWFwLnNldChzdWJmcmFtZVVSTC5zdHJpbmcoKSwgc3ViZnJhbWVCbG9iVVJMKTsKLSAg
ICAgICAgdXJsVG9CbG9iTWFwLnNldChzdWJmcmFtZUJsb2JVUkwsIFdURk1vdmUoYmxvYikpOwor
ICAgICAgICByZXBsYWNlbWVudEluZm8uYmxvYlVSTFRvQmxvYk1hcC5zZXQoc3ViZnJhbWVCbG9i
VVJMLCBXVEZNb3ZlKGJsb2IpKTsKKyAgICAgICAgcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb1Jl
cGxhY2VkVVJMTWFwLnNldChzdWJmcmFtZUJsb2JVUkwsIHN1YmZyYW1lVVJMLnN0cmluZygpKTsK
ICAgICB9CiAKICAgICByZXBsYWNlU3VicmVzb3VyY2VVUkxzKGZyYWdtZW50LmdldCgpLCBXVEZN
b3ZlKGJsb2JVUkxNYXApKTsKQEAgLTMzNywxNiArMzc1LDE2IEBAIGJvb2wgV2ViQ29udGVudFJl
YWRlcjo6cmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+
IHVybFRvQmxvYk1hcDsKKyAgICBCbG9iUmVwbGFjZW1lbnRJbmZvIHJlcGxhY2VtZW50SW5mbzsK
ICAgICBTdHJpbmcgc2FuaXRpemVkTWFya3VwID0gc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZSgq
ZnJhbWUuZG9jdW1lbnQoKSwgKnJlc3VsdCwgWyZdIChjb25zdCBTdHJpbmcmIHR5cGUpIHsKICAg
ICAgICAgcmV0dXJuIGZyYW1lLmxvYWRlcigpLmNsaWVudCgpLmNhblNob3dNSU1FVHlwZUFzSFRN
TCh0eXBlKTsKLSAgICB9LCB1cmxUb0Jsb2JNYXApOworICAgIH0sIHJlcGxhY2VtZW50SW5mbyk7
CiAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50
KCksIHNhbml0aXplZE1hcmt1cCwgYmxhbmtVUkwoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVn
aW5Db250ZW50KTsKIAogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFn
bWVudCwgV1RGTW92ZSh1cmxUb0Jsb2JNYXApKTsKKyAgICByZXBsYWNlUmljaENvbnRlbnRXaXRo
QXR0YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIFdURk1vdmUocmVwbGFjZW1lbnRJbmZv
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM2NiwxMCArNDA0LDEwIEBAIGJvb2wgV2Vi
Q29udGVudE1hcmt1cFJlYWRlcjo6cmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJiBidWZmZXIp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBSZWZQdHI8QmxvYj4+IHVybFRvQmxvYk1hcDsKKyAgICBCbG9iUmVwbGFjZW1lbnRJbmZvIHJl
cGxhY2VtZW50SW5mbzsKICAgICBtYXJrdXAgPSBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNoaXZlKCpm
cmFtZS5kb2N1bWVudCgpLCAqcmVzdWx0LCBbJl0gKGNvbnN0IFN0cmluZyYgdHlwZSkgewogICAg
ICAgICByZXR1cm4gZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuY2FuU2hvd01JTUVUeXBlQXNIVE1M
KHR5cGUpOwotICAgIH0sIHVybFRvQmxvYk1hcCk7CisgICAgfSwgcmVwbGFjZW1lbnRJbmZvKTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDIyLDEyICs0NjAsMTIgQEAgYm9vbCBXZWJDb250
ZW50UmVhZGVyOjpyZWFkUlRGRChTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICBpZiAoZnJhbWUu
c2V0dGluZ3MoKS5wcmVmZXJNSU1FVHlwZUZvckltYWdlcygpIHx8ICFmcmFtZS5kb2N1bWVudCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVm
UHRyPEJsb2I+PiB1cmxUb0Jsb2JNYXA7Ci0gICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1lLCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFJURkQ6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0
cmlidXRlczpudWxscHRyXSkuZ2V0KCksIHVybFRvQmxvYk1hcCk7CisgICAgQmxvYlJlcGxhY2Vt
ZW50SW5mbyByZXBsYWNlbWVudEluZm87CisgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1lLCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFJURkQ6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0
cmlidXRlczpudWxscHRyXSkuZ2V0KCksIHJlcGxhY2VtZW50SW5mbyk7CiAgICAgaWYgKCFmcmFn
bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVwbGFjZVJpY2hDb250ZW50V2l0
aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoKmZyYWdtZW50LCBXVEZNb3ZlKHVybFRvQmxvYk1hcCkp
OworICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFn
bWVudCwgV1RGTW92ZShyZXBsYWNlbWVudEluZm8pKTsKICAgICBhZGRGcmFnbWVudChmcmFnbWVu
dC5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtNDM4LDEyICs0NzYs
MTIgQEAgYm9vbCBXZWJDb250ZW50TWFya3VwUmVhZGVyOjpyZWFkUlRGRChTaGFyZWRCdWZmZXIm
IGJ1ZmZlcikKICAgICBpZiAoIWZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+IHVybFRvQmxvYk1h
cDsKLSAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoZnJh
bWUsIGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpidWZm
ZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9jdW1lbnRBdHRyaWJ1dGVzOm51bGxwdHJdKS5nZXQo
KSwgdXJsVG9CbG9iTWFwKTsKKyAgICBCbG9iUmVwbGFjZW1lbnRJbmZvIHJlcGxhY2VtZW50SW5m
bzsKKyAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoZnJh
bWUsIGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpidWZm
ZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9jdW1lbnRBdHRyaWJ1dGVzOm51bGxwdHJdKS5nZXQo
KSwgcmVwbGFjZW1lbnRJbmZvKTsKICAgICBpZiAoIWZyYWdtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2Fy
eSgqZnJhZ21lbnQsIFdURk1vdmUodXJsVG9CbG9iTWFwKSk7CisgICAgcmVwbGFjZVJpY2hDb250
ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoKmZyYWdtZW50LCBXVEZNb3ZlKHJlcGxhY2Vt
ZW50SW5mbykpOwogICAgIG1hcmt1cCA9IGNyZWF0ZU1hcmt1cCgqZnJhZ21lbnQpOwogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtNDUzLDEyICs0OTEsMTIgQEAgYm9vbCBXZWJDb250ZW50UmVhZGVy
OjpyZWFkUlRGKFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogICAgIGlmIChmcmFtZS5zZXR0aW5ncygp
LnByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+IHVybFRvQmxvYk1hcDsKLSAgICBh
dXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoZnJhbWUsIGFkb3B0
TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOmJ1ZmZlci5jcmVhdGVO
U0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bnVsbHB0cl0pLmdldCgpLCB1cmxUb0Js
b2JNYXApOworICAgIEJsb2JSZXBsYWNlbWVudEluZm8gcmVwbGFjZW1lbnRJbmZvOworICAgIGF1
dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhmcmFtZSwgYWRvcHRO
UyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6YnVmZmVyLmNyZWF0ZU5T
RGF0YSgpLmdldCgpIGRvY3VtZW50QXR0cmlidXRlczpudWxscHRyXSkuZ2V0KCksIHJlcGxhY2Vt
ZW50SW5mbyk7CiAgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoKmZyYWdtZW50
LCBXVEZNb3ZlKHVybFRvQmxvYk1hcCkpOworICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRh
Y2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwgV1RGTW92ZShyZXBsYWNlbWVudEluZm8pKTsK
ICAgICBhZGRGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVy
biB0cnVlOwpAQCAtNDY5LDEyICs1MDcsMTIgQEAgYm9vbCBXZWJDb250ZW50TWFya3VwUmVhZGVy
OjpyZWFkUlRGKFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogICAgIGlmICghZnJhbWUuZG9jdW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJl
ZlB0cjxCbG9iPj4gdXJsVG9CbG9iTWFwOwotICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFn
bWVudEFuZEFkZFJlc291cmNlcyhmcmFtZSwgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhSVEY6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0
cmlidXRlczpudWxscHRyXSkuZ2V0KCksIHVybFRvQmxvYk1hcCk7CisgICAgQmxvYlJlcGxhY2Vt
ZW50SW5mbyByZXBsYWNlbWVudEluZm87CisgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1lLCBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFJURjpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9jdW1lbnRBdHRy
aWJ1dGVzOm51bGxwdHJdKS5nZXQoKSwgcmVwbGFjZW1lbnRJbmZvKTsKICAgICBpZiAoIWZyYWdt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXBsYWNlUmljaENvbnRlbnRXaXRo
QXR0YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIFdURk1vdmUodXJsVG9CbG9iTWFwKSk7
CisgICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoKmZyYWdt
ZW50LCBXVEZNb3ZlKHJlcGxhY2VtZW50SW5mbykpOwogICAgIG1hcmt1cCA9IGNyZWF0ZU1hcmt1
cCgqZnJhZ21lbnQpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTAxLDcgKzUzOSw3IEBAIGJv
b2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZEltYWdlKFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVy
LCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3Nh
cnkoKmZyYWdtZW50LCB7eyBibG9iVVJMLCBXVEZNb3ZlKGJsb2IpIH19KTsKKyAgICByZXBsYWNl
UmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIHt7eyBibG9i
VVJMLCBXVEZNb3ZlKGJsb2IpIH19LCB7IH19KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDVhMDgwMGMz
YzE5YmIyOWVkNzg0ZmE4YTlhOTVmMzkxMDIwMjNjZTYuLjFhZjE3ZTMyNzQwZTk4NGU3NTVlNjMz
YWZjN2E1MmE4YWVhYWE5ZDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNy0xMi0xNSAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQXR0YWNobWVudCBTdXBwb3J0XSBT
dXBwb3J0IHJlcHJlc2VudGluZyBwYXN0ZWQgb3IgZHJvcHBlZCBjb250ZW50IHVzaW5nIGF0dGFj
aG1lbnQgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MDg5MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzYwNjQyMTA+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG5ldyBBUEkg
dGVzdCB0byBleGVyY2lzZSBwYXN0aW5nIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIHdpdGggbXVsdGlw
bGUgYXR0YWNobWVudHMgb2YgZGlmZmVyZW50IHR5cGVzLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbToKKyAgICAgICAgKHRl
c3RaSVBEYXRhKToKKyAgICAgICAgKHBsYXRmb3JtQ29weVJpY2hUZXh0V2l0aE11bHRpcGxlQXR0
YWNobWVudHMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTctMTItMTQg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW0F0dGFj
aG1lbnQgU3VwcG9ydF0gSW5zZXJ0IGltYWdlcyBhcyBpbmxpbmUgYXR0YWNobWVudHMgd2hlbiBw
YXN0aW5nIGFuZCBkcm9wcGluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KaW5kZXggM2Y4ZTYxZDFjZDA2
NDk2MDU0MGY3MmZiNzg0YWNkZmMwM2JlZDQ4Yi4uMTVkMzFmYWE2MTQzNGMwMTc5NzE2ZjU2ZDEw
ZTMzNmYyOTA4ZTEzNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCkBAIC0xMzYsNiArMTM2LDEyIEBA
IHN0YXRpYyBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2ht
ZW50cygpCiAgICAgcmV0dXJuIHdlYlZpZXc7CiB9CiAKK3N0YXRpYyBOU0RhdGEgKnRlc3RaSVBE
YXRhKCkKK3sKKyAgICBOU1VSTCAqemlwRmlsZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJjb21wcmVzc2VkLWZpbGVzIiB3aXRoRXh0ZW5zaW9uOkAiemlwIiBz
dWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgIHJldHVybiBbTlNE
YXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDp6aXBGaWxlVVJMXTsKK30KKwogc3RhdGljIE5TRGF0
YSAqdGVzdEhUTUxEYXRhKCkKIHsKICAgICByZXR1cm4gW0AiPGEgaHJlZj0nIyc+VGhpcyBpcyBz
b21lIEhUTUwgZGF0YTwvYT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5n
XTsKQEAgLTMwOCw2ICszMTQsMjggQEAgQGVuZAogCiAjcHJhZ21hIG1hcmsgLSBQbGF0Zm9ybSB0
ZXN0aW5nIGhlbHBlciBmdW5jdGlvbnMKIAordm9pZCBwbGF0Zm9ybUNvcHlSaWNoVGV4dFdpdGhN
dWx0aXBsZUF0dGFjaG1lbnRzKCkKK3sKKyAgICBhdXRvIGltYWdlID0gYWRvcHROUyhbW05TVGV4
dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0SW1hZ2VEYXRhKCkgb2ZUeXBlOihO
U1N0cmluZyAqKWtVVFR5cGVQTkddKTsKKyAgICBhdXRvIHBkZiA9IGFkb3B0TlMoW1tOU1RleHRB
dHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdFBERkRhdGEoKSBvZlR5cGU6KE5TU3Ry
aW5nICopa1VUVHlwZVBERl0pOworICAgIGF1dG8gemlwID0gYWRvcHROUyhbW05TVGV4dEF0dGFj
aG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0WklQRGF0YSgpIG9mVHlwZTooTlNTdHJpbmcg
KilrVVRUeXBlWmlwQXJjaGl2ZV0pOworCisgICAgYXV0byByaWNoVGV4dCA9IGFkb3B0TlMoW1tO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSk7CisgICAgW3JpY2hUZXh0IGFw
cGVuZEF0dHJpYnV0ZWRTdHJpbmc6W05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5n
V2l0aEF0dGFjaG1lbnQ6aW1hZ2UuZ2V0KCldXTsKKyAgICBbcmljaFRleHQgYXBwZW5kQXR0cmli
dXRlZFN0cmluZzpbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNo
bWVudDpwZGYuZ2V0KCldXTsKKyAgICBbcmljaFRleHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpb
TlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDp6aXAuZ2V0
KCldXTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQg
PSBbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXTsKKyAgICBbcGFzdGVib2FyZCBjbGVh
ckNvbnRlbnRzXTsKKyAgICBbcGFzdGVib2FyZCB3cml0ZU9iamVjdHM6QFsgcmljaFRleHQuZ2V0
KCkgXV07CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW05T
SXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2l0ZW0gcmVnaXN0ZXJPYmplY3Q6cmlj
aFRleHQuZ2V0KCkgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJp
bGl0eUFsbF07CisgICAgW1VJUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0uaXRlbVByb3Zp
ZGVycyA9IEBbIGl0ZW0uZ2V0KCkgXTsKKyNlbmRpZgorfQorCiB2b2lkIHBsYXRmb3JtQ29weVJp
Y2hUZXh0V2l0aEltYWdlKCkKIHsKICAgICBhdXRvIHJpY2hUZXh0ID0gYWRvcHROUyhbW05TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdKTsKQEAgLTgwMCw2ICs4MjgsNDggQEAg
VEVTVChXS0F0dGFjaG1lbnRUZXN0cywgSW5zZXJ0UGFzdGVkQXR0cmlidXRlZFN0cmluZ0NvbnRh
aW5pbmdJbWFnZSkKICAgICB9CiB9CiAKK1RFU1QoV0tBdHRhY2htZW50VGVzdHMsIEluc2VydFBh
c3RlZEF0dHJpYnV0ZWRTdHJpbmdDb250YWluaW5nTXVsdGlwbGVBdHRhY2htZW50cykKK3sKKyAg
ICBwbGF0Zm9ybUNvcHlSaWNoVGV4dFdpdGhNdWx0aXBsZUF0dGFjaG1lbnRzKCk7CisKKyAgICBS
ZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gaW1hZ2VBdHRhY2htZW50OworICAgIFJldGFpblB0cjxf
V0tBdHRhY2htZW50PiB6aXBBdHRhY2htZW50OworICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50
PiBwZGZBdHRhY2htZW50OworICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0
YWNobWVudHMoKTsKKyAgICB7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNj
b3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25v
dXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlBhc3RlIiBhcmd1bWVudDpuaWxdOworICAgICAgICBF
WFBFQ1RfRVEoMFUsIG9ic2VydmVyLm9ic2VydmVyKCkucmVtb3ZlZC5jb3VudCk7CisgICAgICAg
IEVYUEVDVF9FUSgzVSwgb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5pbnNlcnRlZC5jb3VudCk7CisgICAg
ICAgIGZvciAoX1dLQXR0YWNobWVudCAqYXR0YWNobWVudCBpbiBvYnNlcnZlci5vYnNlcnZlcigp
Lmluc2VydGVkKSB7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEgPSBbYXR0YWNobWVudCBzeW5j
aHJvbm91c2x5UmVxdWVzdERhdGE6bmlsXTsKKyAgICAgICAgICAgIGlmIChbZGF0YSBpc0VxdWFs
VG9EYXRhOnRlc3RaSVBEYXRhKCldKQorICAgICAgICAgICAgICAgIHppcEF0dGFjaG1lbnQgPSBh
dHRhY2htZW50OworICAgICAgICAgICAgZWxzZSBpZiAoW2RhdGEgaXNFcXVhbFRvRGF0YTp0ZXN0
UERGRGF0YSgpXSkKKyAgICAgICAgICAgICAgICBwZGZBdHRhY2htZW50ID0gYXR0YWNobWVudDsK
KyAgICAgICAgICAgIGVsc2UgaWYgKFtkYXRhIGlzRXF1YWxUb0RhdGE6dGVzdEltYWdlRGF0YSgp
XSkKKyAgICAgICAgICAgICAgICBpbWFnZUF0dGFjaG1lbnQgPSBhdHRhY2htZW50OworICAgICAg
ICB9CisgICAgfQorCisgICAgRVhQRUNUX1RSVUUoemlwQXR0YWNobWVudCAmJiBpbWFnZUF0dGFj
aG1lbnQgJiYgcGRmQXR0YWNobWVudCk7CisgICAgRVhQRUNUX0VRKDMsIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhdHRh
Y2htZW50JykubGVuZ3RoIl0uaW50ZWdlclZhbHVlKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImlt
YWdlL3BuZyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yQWxsKCdhdHRhY2htZW50JylbMF0uZ2V0QXR0cmlidXRlKCd0eXBlJyki
XSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNhdGlvbi9wZGYiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYXR0
YWNobWVudCcpWzFdLmdldEF0dHJpYnV0ZSgndHlwZScpIl0pOworICAgIEVYUEVDVF9XS19TVFJF
USgiYXBwbGljYXRpb24vemlwIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2F0dGFjaG1lbnQnKVsyXS5nZXRBdHRyaWJ1
dGUoJ3R5cGUnKSJdKTsKKworICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVz
Rm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5j
aHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiU2VsZWN0QWxsIiBhcmd1bWVudDpuaWxdOwor
ICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkRlbGV0
ZUJhY2t3YXJkIiBhcmd1bWVudDpuaWxdOworICAgICAgICBOU0FycmF5PF9XS0F0dGFjaG1lbnQg
Kj4gKnJlbW92ZWRBdHRhY2htZW50cyA9IFtvYnNlcnZlci5vYnNlcnZlcigpIHJlbW92ZWRdOwor
ICAgICAgICBFWFBFQ1RfRVEoM1UsIHJlbW92ZWRBdHRhY2htZW50cy5jb3VudCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKFtyZW1vdmVkQXR0YWNobWVudHMgY29udGFpbnNPYmplY3Q6emlwQXR0YWNo
bWVudC5nZXQoKV0pOworICAgICAgICBFWFBFQ1RfVFJVRShbcmVtb3ZlZEF0dGFjaG1lbnRzIGNv
bnRhaW5zT2JqZWN0OmltYWdlQXR0YWNobWVudC5nZXQoKV0pOworICAgICAgICBFWFBFQ1RfVFJV
RShbcmVtb3ZlZEF0dGFjaG1lbnRzIGNvbnRhaW5zT2JqZWN0OnBkZkF0dGFjaG1lbnQuZ2V0KCld
KTsKKyAgICB9Cit9CisKICNwcmFnbWEgbWFyayAtIFBsYXRmb3JtLXNwZWNpZmljIHRlc3RzCiAK
ICNpZiBQTEFURk9STShNQUMpCg==
</data>
<flag name="review"
          id="348644"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329707</attachid>
            <date>2017-12-18 16:35:16 -0800</date>
            <delta_ts>2017-12-18 18:49:16 -0800</delta_ts>
            <desc>Rebase on master</desc>
            <filename>bug-180892-20171218163515.patch</filename>
            <type>text/plain</type>
            <size>25858</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MDg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGY3ZWY2YzZiNDBhYThi
MTU2YjY1MmM0NDI1ZjBmMjM2NTFhNjFhZi4uYmM4NGMxNTBkMjM4ZTMxOTg3ODU4NTBjYzlhMGQ2
ODIyYjk4ZmM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE3LTEyLTE4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIFN1cHBvcnQgcmVwcmVzZW50aW5nIHBhc3RlZCBvciBkcm9wcGVkIGNvbnRlbnQg
dXNpbmcgYXR0YWNobWVudCBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgwODkyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjA2NDIx
MD4KKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIFN1cHBvcnQg
ZHJvcHBpbmcgYW5kIHBhc3RpbmcgYXR0cmlidXRlZCBzdHJpbmdzIHRoYXQgY29udGFpbiBOU1Rl
eHRBdHRhY2htZW50cy4gVGVhY2hlcworICAgICAgICByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0
YWNobWVudHNJZk5lY2Vzc2FyeSB0byByZXBsYWNlIG9iamVjdCBlbGVtZW50cyB3aXRoIGF0dGFj
aG1lbnRzOyBzZWUgY29tbWVudHMgYmVsb3cgZm9yCisgICAgICAgIG1vcmUgZGV0YWlscy4KKwor
ICAgICAgICBUZXN0OiBXS0F0dGFjaG1lbnRUZXN0cy5JbnNlcnRQYXN0ZWRBdHRyaWJ1dGVkU3Ry
aW5nQ29udGFpbmluZ011bHRpcGxlQXR0YWNobWVudHMKKworICAgICAgICAqIGVkaXRpbmcvV2Vi
Q29udGVudFJlYWRlci5oOgorCisgICAgICAgIEFkZCBCbG9iUmVwbGFjZW1lbnRJbmZvLCB3aGlj
aCBjb250YWlucyBhIG1hcCBvZiBibG9iIFVSTHMgdG8gcmVwbGFjZW1lbnQgQmxvYnMsIGFzIHdl
bGwgYXMgYSBtYXAgb2YgYmxvYiBVUkxzCisgICAgICAgIHRvIHJlcGxhY2VkIHN1YnJlc291cmNl
IFVSTHMuCisKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXBsYWNlbWVudEluZm86OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW06CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyk6
CisgICAgICAgICogZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1
dGVkU3RyaW5nLmg6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VG
cm9tTlNBdHRyaWJ1dGVkU3RyaW5nLm1tOgorCisgICAgICAgIEltcGxlbWVudCAtW1dlYkFyY2hp
dmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcgTUlNRVR5cGVdLiBVSUZvdW5kYXRpb24g
YXNrcyBmb3IgLU1JTUVUeXBlIGluIHRoZSBwcm9jZXNzCisgICAgICAgIG9mIGdlbmVyYXRpbmcg
bWFya3VwIGZyb20gTlNUZXh0QXR0YWNobWVudHM7IHRoaXMgY3VycmVudGx5IGNhdXNlcyB0aGUg
d2ViIHByb2Nlc3MgdG8gY3Jhc2ggb24gYW4gdW5yZWNvZ25pemVkCisgICAgICAgIHNlbGVjdG9y
LgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgd29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzM2
MDc0NDI5PiwgYSBVSUZvdW5kYXRpb24gYnVnIGluIHdoaWNoIGFsbCBidXQgYSBmZXcgaGFyZC1j
b2RlZCBmaWxlCisgICAgICAgIGV4dGVuc2lvbnMgYWN0dWFsbHkgeWllbGQgTUlNRSB0eXBlcyB0
aGF0IGFyZSBtb3JlIHNwZWNpZmljIHRoYW4gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIuIFRo
aXMgY2FuIHNhZmVseSBiZQorICAgICAgICByZW1vdmVkIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzM2
MDc0NDI5PiBpcyBhZGRyZXNzZWQuCisKKyAgICAgICAgKC1bV2ViQXJjaGl2ZVJlc291cmNlRnJv
bU5TQXR0cmlidXRlZFN0cmluZyBNSU1FVHlwZV0pOgorICAgICAgICAqIGVkaXRpbmcvY29jb2Ev
V2ViQ29udGVudFJlYWRlckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZVJpY2hD
b250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkpOgorCisgICAgICAgIFRyeSB0byByZXBs
YWNlIG9iamVjdCBlbGVtZW50cyB3aXRoIGF0dGFjaG1lbnRzLCBhbmQgYWxzbyB0d2VhayB0aGUg
dGl0bGUgb2YgdGhlIGF0dGFjaG1lbnQncyBGaWxlIHRvIHVzZSB0aGUKKyAgICAgICAgcmVwbGFj
ZWQgc3VicmVzb3VyY2UncyBmaWxlbmFtZSBpZiBwb3NzaWJsZS4gQWRkaXRpb25hbGx5LCBhYnN0
cmFjdHMgb3V0IGluZm9ybWF0aW9uIGZvciByZXBsYWNpbmcgb2JqZWN0IG9yCisgICAgICAgIGlt
YWdlIGVsZW1lbnRzIChmb3JtZXJseSBhIHBhaXIgb2YgeyBGaWxlLCBFbGVtZW50IH0pIGludG8g
YSBzZXBhcmF0ZSBzdHJ1Y3QsIGFuZCBhZGQgYSBBdHRhY2htZW50RGlzcGxheU1vZGUKKyAgICAg
ICAgcGFyYW1ldGVyIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBhdHRhY2htZW50IHNob3VsZCBi
ZSBwcmVzZW50ZWQgaW4tbGluZSAoaW4gdGhlIGNhc2Ugb2YgaW1hZ2VzKSwgb3IgYXMgYW4gaWNv
bi4KKworICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlc0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252
ZXJzaW9uKToKKworICAgICAgICBPbmx5IGV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzIGZyb20gYmVp
bmcgZ2VuZXJhdGVkIGZyb20gTlNUZXh0QXR0YWNobWVudHMgaWYgdGhlIGF0dGFjaG1lbnQgZWxl
bWVudCBydW50aW1lCisgICAgICAgIGZlYXR1cmUgaXMgZGlzYWJsZWQsIG9yICFFTkFCTEUoQVRU
QUNITUVOVF9FTEVNRU5UKS4KKworICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRBbmRB
ZGRSZXNvdXJjZXMpOgorCisgICAgICAgIEFkZGl0aW9uYWxseSBrZWVwIHRyYWNrIG9mIGEgbWFw
cGluZyBmcm9tIGJsb2IgVVJMID0+IHJlcGxhY2VkIHN1YnJlc291cmNlIFVSTC4gSW4gYWxsIHRo
ZSBwbGFjZXMgd2hlcmUgd2UKKyAgICAgICAgcHJldmlvdXNseSBvbmx5IHBsdW1iZWQgYSBtYXAg
b2YgYmxvYiBVUkwgPT4gQmxvYiwgdXNlIGEgQmxvYlJlcGxhY2VtZW50SW5mbyBzdHJ1Y3QgaW5z
dGVhZCwgd2hpY2ggbm93IGluY2x1ZGVzCisgICAgICAgIGEgbWFwIGZyb20gYmxvYiBVUkwgPT4g
cmVwbGFjZWQgVVJMLgorCisgICAgICAgIChXZWJDb3JlOjpzYW5pdGl6ZU1hcmt1cFdpdGhBcmNo
aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRXZWJBcmNoaXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRXZWJBcmNo
aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRSVEZEKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRSVEZEKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRSVEYpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29udGVudE1hcmt1cFJlYWRlcjo6cmVhZFJURik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJDb250ZW50UmVhZGVyOjpyZWFkSW1hZ2UpOgorCiAyMDE3LTEyLTE4ICBXZW5zb24gSHNpZWgg
IDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtBdHRhY2htZW50IFN1cHBvcnRd
IEluc2VydCBpbWFnZXMgYXMgaW5saW5lIGF0dGFjaG1lbnRzIHdoZW4gcGFzdGluZyBhbmQgZHJv
cHBpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRl
ci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgKaW5kZXggYjBj
NWI3NjRiYjg0ODUxZjQ2ZjA3YmUzNzk0ZTExOTgzMWIxMDJiNy4uZjM2NThlYThjZmI0MWIwMGJj
Y2FiMDQ0OTM1YWQ3N2Q5NWU3ZmNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9XZWJDb250ZW50UmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250
ZW50UmVhZGVyLmgKQEAgLTEwNiw4ICsxMDYsMTQgQEAgc3RydWN0IEZyYWdtZW50QW5kUmVzb3Vy
Y2VzIHsKICAgICBWZWN0b3I8UmVmPEFyY2hpdmVSZXNvdXJjZT4+IHJlc291cmNlczsKIH07CiAK
LXZvaWQgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoRG9jdW1l
bnRGcmFnbWVudCYsIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+JiYgdXJsVG9C
bG9iTWFwKTsKLVJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEFuZEFkZFJl
c291cmNlcyhGcmFtZSYsIE5TQXR0cmlidXRlZFN0cmluZyosIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBSZWZQdHI8QmxvYj4+JiB1cmxUb0Jsb2JNYXApOworc3RydWN0IEJsb2JSZXBsYWNlbWVudElu
Zm8geworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+IGJsb2JVUkxUb0Js
b2JNYXA7CisgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEF0b21pY1N0cmluZz4gYmxvYlVSTFRv
UmVwbGFjZWRVUkxNYXA7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gYmxvYlVS
TFRvQmxvYk1hcC5pc0VtcHR5KCk7IH0KK307CisKK3ZvaWQgcmVwbGFjZVJpY2hDb250ZW50V2l0
aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoRG9jdW1lbnRGcmFnbWVudCYsIEJsb2JSZXBsYWNlbWVu
dEluZm8mJik7CitSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRS
ZXNvdXJjZXMoRnJhbWUmLCBOU0F0dHJpYnV0ZWRTdHJpbmcqLCBCbG9iUmVwbGFjZW1lbnRJbmZv
Jik7CiAjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29j
b2EubW0KaW5kZXggOGI4Njk3ZmE0ODJjYWE2Zjk1MDIzODE1NTIxNTUzMWZjMGQ4NTQ3NS4uNjI4
NzA2NjkxNGVjNzRlOTRmNDYyZGNiNzQ4YzU3ZWY0NTNmNTMzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC0yMjIsOSArMjIyLDkgQEAgdm9pZCBF
ZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRT
dHJpbmcgKmF0dHJpYnV0ZWQKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewotICAgICAg
ICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiB1cmxUb0Jsb2JNYXA7Ci0gICAg
ICAgIGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMobV9m
cmFtZSwgYXR0cmlidXRlZFN0cmluZywgdXJsVG9CbG9iTWFwKSkgewotICAgICAgICAgICAgcmVw
bGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoKmZyYWdtZW50LCBXVEZN
b3ZlKHVybFRvQmxvYk1hcCkpOworICAgICAgICBCbG9iUmVwbGFjZW1lbnRJbmZvIHJlcGxhY2Vt
ZW50SW5mbzsKKyAgICAgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFk
ZFJlc291cmNlcyhtX2ZyYW1lLCBhdHRyaWJ1dGVkU3RyaW5nLCByZXBsYWNlbWVudEluZm8pKSB7
CisgICAgICAgICAgICByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2Fy
eSgqZnJhZ21lbnQsIFdURk1vdmUocmVwbGFjZW1lbnRJbmZvKSk7CiAgICAgICAgICAgICBpZiAo
c2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21l
bnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90
ZUhhbmRsaW5nKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0
ZWRTdHJpbmcuaAppbmRleCAzZjgxNzdlOWFkZmJiZDUyNDA2NTFhYzM0NTdjYjkwYjU3ZTYxYzYw
Li4xMGEwOGRjMTZlN2Q5MDIyZjBiYzJmYjI3ZGRiZTk3NmQ1NWUwMmE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJp
YnV0ZWRTdHJpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hp
dmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcuaApAQCAtMzYsNiArMzYsNyBAQCBjbGFz
cyBBcmNoaXZlUmVzb3VyY2U7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkFyY2hpdmVSZXNvdXJjZT4g
cmVzb3VyY2U7CiB9CiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEYXRhOihOU0RhdGEgKilkYXRh
IFVSTDooTlNVUkwgKilVUkwgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgdGV4dEVuY29k
aW5nTmFtZTooTlNTdHJpbmcgKil0ZXh0RW5jb2RpbmdOYW1lIGZyYW1lTmFtZTooTlNTdHJpbmcg
KilmcmFtZU5hbWU7CistIChOU1N0cmluZyAqKU1JTUVUeXBlOwogLSAoTlNVUkwgKilVUkw7CiAK
IEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQXJjaGl2
ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5tbQppbmRl
eCA5Mjg3ZWZhOGMxOGI3ZDE4NzQwNmQwYzUzZTYwYzIxNmI1YTNkMDE2Li4xMDcwMTA2OTVkODk3
MGQ2ODhiYTg0YjIxN2FjMTYxZDE0MDM4ODE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VGcm9t
TlNBdHRyaWJ1dGVkU3RyaW5nLm1tCkBAIC0yNyw2ICsyNyw3IEBACiAjaW1wb3J0ICJXZWJBcmNo
aXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmgiCiAKICNpbXBvcnQgIkFyY2hpdmVS
ZXNvdXJjZS5oIgorI2ltcG9ydCAiTUlNRVR5cGVSZWdpc3RyeS5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIApAQCAtNDIsNiArNDMsMTMgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
RGF0YTooTlNEYXRhICopZGF0YSBVUkw6KE5TVVJMICopVVJMIE1JTUVUeXBlOihOU1N0cmluZwog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KIAorICAgIGlmIChbTUlNRVR5cGUgaXNFcXVhbFRv
U3RyaW5nOkAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0pIHsKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vMzYwNzQ0Mjk+LCBhbmQg
Y2FuIGJlIHJlbW92ZWQgb25jZSB0aGF0IGlzIGZpeGVkLgorICAgICAgICBhdXRvIG1pbWVUeXBl
RnJvbVVSTCA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKFVSTC5w
YXRoRXh0ZW5zaW9uKTsKKyAgICAgICAgaWYgKCFtaW1lVHlwZUZyb21VUkwuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgTUlNRVR5cGUgPSBtaW1lVHlwZUZyb21VUkw7CisgICAgfQorCiAgICAgcmVz
b3VyY2UgPSBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OmNyZWF0ZShhZG9w
dE5TKFtkYXRhIGNvcHldKS5nZXQoKSksIFVSTCwgTUlNRVR5cGUsIHRleHRFbmNvZGluZ05hbWUs
IGZyYW1lTmFtZSwgeyB9KTsKICAgICBpZiAoIXJlc291cmNlKSB7CiAgICAgICAgIFtzZWxmIHJl
bGVhc2VdOwpAQCAtNTEsNiArNTksMTEgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGF0YToo
TlNEYXRhICopZGF0YSBVUkw6KE5TVVJMICopVVJMIE1JTUVUeXBlOihOU1N0cmluZwogICAgIHJl
dHVybiBzZWxmOwogfQogCistIChOU1N0cmluZyAqKU1JTUVUeXBlCit7CisgICAgcmV0dXJuIHJl
c291cmNlLT5taW1lVHlwZSgpOworfQorCiAtIChOU1VSTCAqKVVSTAogewogICAgIHJldHVybiBy
ZXNvdXJjZS0+dXJsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
V2ViQ29udGVudFJlYWRlckNvY29hLm1tCmluZGV4IGZhZGFjODcxNjUwYzllNTcyNWEzMTEzMzZi
OTU3MWIyMGQzYjc1OTUuLmU1NzdhOGRhZTlhNDExZjU0MjJlNDg3ODJiYWNmZTUwMDFhNGViM2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRl
ckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJl
YWRlckNvY29hLm1tCkBAIC00Miw2ICs0Miw3IEBACiAjaW1wb3J0ICJIVE1MQm9keUVsZW1lbnQu
aCIKICNpbXBvcnQgIkhUTUxJRnJhbWVFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW1wb3J0ICJIVE1MT2JqZWN0RWxlbWVudC5oIgogI2ltcG9ydCAiTGVnYWN5V2Vi
QXJjaGl2ZS5oIgogI2ltcG9ydCAiTWFpbkZyYW1lLmgiCiAjaW1wb3J0ICJQYWdlLmgiCkBAIC00
OSw2ICs1MCw3IEBACiAjaW1wb3J0ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW1wb3J0
ICJTZXR0aW5ncy5oIgogI2ltcG9ydCAiU29ja2V0UHJvdmlkZXIuaCIKKyNpbXBvcnQgIlVSTFBh
cnNlci5oIgogI2ltcG9ydCAiV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmlu
Zy5oIgogI2ltcG9ydCAiV2ViQXJjaGl2ZVJlc291cmNlV2ViUmVzb3VyY2VIYW5kbGVyLmgiCiAj
aW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKQEAgLTc1LDM3ICs3Nyw1OCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQog
Ci12b2lkIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KERvY3Vt
ZW50RnJhZ21lbnQmIGZyYWdtZW50LCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+
PiYmIHVybFRvQmxvYk1hcCkKK3N0cnVjdCBBdHRhY2htZW50UmVwbGFjZW1lbnRJbmZvIHsKKyAg
ICBBdHRhY2htZW50RGlzcGxheU1vZGUgZGlzcGxheU1vZGU7CisgICAgUmVmPEZpbGU+IGZpbGU7
CisgICAgUmVmPEVsZW1lbnQ+IGVsZW1lbnRUb1JlcGxhY2U7Cit9OworCit2b2lkIHJlcGxhY2VS
aWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KERvY3VtZW50RnJhZ21lbnQmIGZy
YWdtZW50LCBCbG9iUmVwbGFjZW1lbnRJbmZvJiYgcmVwbGFjZW1lbnRJbmZvKQogewotICAgIGlm
ICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5hdHRhY2htZW50RWxl
bWVudEVuYWJsZWQoKSB8fCB1cmxUb0Jsb2JNYXAuaXNFbXB0eSgpKQorICAgIGlmICghUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5hdHRhY2htZW50RWxlbWVudEVuYWJs
ZWQoKSB8fCByZXBsYWNlbWVudEluZm8uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBlbGVtZW50c1RvUmVtb3ZlOwotICAgIFZlY3RvcjxzdGQ6
OnBhaXI8UmVmPEZpbGU+LCBSZWY8RWxlbWVudD4+PiBmaWxlc0ZvckVsZW1lbnRzVG9SZXBsYWNl
OworICAgIFZlY3RvcjxBdHRhY2htZW50UmVwbGFjZW1lbnRJbmZvPiBhdHRhY2htZW50UmVwbGFj
ZW1lbnRJbmZvOwogICAgIGZvciAoYXV0byYgaW1hZ2UgOiBkZXNjZW5kYW50c09mVHlwZTxIVE1M
SW1hZ2VFbGVtZW50PihmcmFnbWVudCkpIHsKICAgICAgICAgYXV0byB1cmwgPSBpbWFnZS5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0cik7CisgICAgICAg
IGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0
byBibG9iID0gcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb0Jsb2JNYXAuZ2V0KHVybCk7CisgICAg
ICAgIGlmICghYmxvYikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8gdGl0
bGUgPSBVUkxQYXJzZXIgeyByZXBsYWNlbWVudEluZm8uYmxvYlVSTFRvUmVwbGFjZWRVUkxNYXAu
Z2V0KHVybCkgfS5yZXN1bHQoKS5sYXN0UGF0aENvbXBvbmVudCgpOworICAgICAgICBpZiAodGl0
bGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgdGl0bGUgPSBBdG9taWNTdHJpbmcoIm1lZGlhIik7
CiAKKyAgICAgICAgYXR0YWNobWVudFJlcGxhY2VtZW50SW5mby5hcHBlbmQoeyBBdHRhY2htZW50
RGlzcGxheU1vZGU6OkluUGxhY2UsIEZpbGU6OmNyZWF0ZSgqYmxvYiwgdGl0bGUpLCBpbWFnZSB9
KTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIG9iamVjdCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhU
TUxPYmplY3RFbGVtZW50PihmcmFnbWVudCkpIHsKKyAgICAgICAgYXV0byB1cmwgPSBvYmplY3Qu
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmRhdGFBdHRyKTsKICAg
ICAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGVsZW1lbnRzVG9SZW1vdmUu
YXBwZW5kKGltYWdlKTsKKyAgICAgICAgICAgIGVsZW1lbnRzVG9SZW1vdmUuYXBwZW5kKG9iamVj
dCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gYmxv
YiA9IHVybFRvQmxvYk1hcC5nZXQodXJsKTsKKyAgICAgICAgYXV0byBibG9iID0gcmVwbGFjZW1l
bnRJbmZvLmJsb2JVUkxUb0Jsb2JNYXAuZ2V0KHVybCk7CiAgICAgICAgIGlmICghYmxvYikgewot
ICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92ZS5hcHBlbmQoaW1hZ2UpOworICAgICAgICAgICAg
ZWxlbWVudHNUb1JlbW92ZS5hcHBlbmQob2JqZWN0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgYXV0byB0aXRsZSA9IGltYWdlLmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjp0aXRsZUF0dHIpOworICAgICAgICBhdXRvIHRpdGxl
ID0gVVJMUGFyc2VyIHsgcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb1JlcGxhY2VkVVJMTWFwLmdl
dCh1cmwpIH0ucmVzdWx0KCkubGFzdFBhdGhDb21wb25lbnQoKTsKICAgICAgICAgaWYgKHRpdGxl
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRpdGxlID0gQXRvbWljU3RyaW5nKCJtZWRpYSIpOwor
ICAgICAgICAgICAgdGl0bGUgPSBBdG9taWNTdHJpbmcoImZpbGUiKTsKIAotICAgICAgICBmaWxl
c0ZvckVsZW1lbnRzVG9SZXBsYWNlLmFwcGVuZCh7IEZpbGU6OmNyZWF0ZSgqYmxvYiwgdGl0bGUp
LCBpbWFnZSB9KTsKKyAgICAgICAgYXR0YWNobWVudFJlcGxhY2VtZW50SW5mby5hcHBlbmQoeyBB
dHRhY2htZW50RGlzcGxheU1vZGU6OkFzSWNvbiwgRmlsZTo6Y3JlYXRlKCpibG9iLCB0aXRsZSks
IG9iamVjdCB9KTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGZpbGVBbmRFbGVtZW50IDogZmls
ZXNGb3JFbGVtZW50c1RvUmVwbGFjZSkgewotICAgICAgICBhdXRvJiBmaWxlID0gZmlsZUFuZEVs
ZW1lbnQuZmlyc3Q7Ci0gICAgICAgIGF1dG8mIGVsZW1lbnRUb1JlcGxhY2UgPSBmaWxlQW5kRWxl
bWVudC5zZWNvbmQ7CisgICAgZm9yIChhdXRvJiBpbmZvIDogYXR0YWNobWVudFJlcGxhY2VtZW50
SW5mbykgeworICAgICAgICBhdXRvIGZpbGUgPSBXVEZNb3ZlKGluZm8uZmlsZSk7CisgICAgICAg
IGF1dG8gZWxlbWVudFRvUmVwbGFjZSA9IFdURk1vdmUoaW5mby5lbGVtZW50VG9SZXBsYWNlKTsK
ICAgICAgICAgYXV0byBwYXJlbnQgPSBtYWtlUmVmUHRyKGVsZW1lbnRUb1JlcGxhY2UtPnBhcmVu
dE5vZGUoKSk7CiAgICAgICAgIGlmICghcGFyZW50KQogICAgICAgICAgICAgY29udGludWU7CkBA
IC0xMTMsNyArMTM2LDcgQEAgdm9pZCByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJ
Zk5lY2Vzc2FyeShEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgSGEKICAgICAgICAgYXV0byBh
dHRhY2htZW50ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjphdHRh
Y2htZW50VGFnLCBmcmFnbWVudC5kb2N1bWVudCgpKTsKICAgICAgICAgYXR0YWNobWVudC0+c2V0
VW5pcXVlSWRlbnRpZmllcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOwogICAgICAgICBh
dHRhY2htZW50LT5zZXRGaWxlKFdURk1vdmUoZmlsZSksIEhUTUxBdHRhY2htZW50RWxlbWVudDo6
VXBkYXRlRGlzcGxheUF0dHJpYnV0ZXM6Olllcyk7Ci0gICAgICAgIGF0dGFjaG1lbnQtPnVwZGF0
ZURpc3BsYXlNb2RlKEF0dGFjaG1lbnREaXNwbGF5TW9kZTo6SW5QbGFjZSk7CisgICAgICAgIGF0
dGFjaG1lbnQtPnVwZGF0ZURpc3BsYXlNb2RlKGluZm8uZGlzcGxheU1vZGUpOwogICAgICAgICBw
YXJlbnQtPnJlcGxhY2VDaGlsZChhdHRhY2htZW50LCBlbGVtZW50VG9SZXBsYWNlKTsKICAgICB9
CiAKQEAgLTEzNCw3ICsxNTcsNyBAQCB2b2lkIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2ht
ZW50c0lmTmVjZXNzYXJ5KERvY3VtZW50RnJhZ21lbnQmLCBIYXNoTWFwPEF0bwogc3RhdGljIE5T
RGljdGlvbmFyeSAqYXR0cmlidXRlc0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKCkKIHsK
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIGlkZW50
aWNhbGx5IG5hbWVkIG9uZSBpbiBXZWJLaXRMZWdhY3ksIHdoaWNoIGlzIHVzZWQgb24gb2xkZXIg
T1MgdmVyc2lvbnMuCi0gICAgUmV0YWluUHRyPE5TQXJyYXk+IGV4Y2x1ZGVkRWxlbWVudHMgPSBh
ZG9wdE5TKFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgorICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gZXhjbHVkZWRFbGVtZW50cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgogICAgICAgICAvLyBPbWl0IHN0eWxlIHNpbmNlIHdl
IHdhbnQgc3R5bGUgdG8gYmUgaW5saW5lIHNvIHRoZSBmcmFnbWVudCBjYW4gYmUgZWFzaWx5IGlu
c2VydGVkLgogICAgICAgICBAInN0eWxlIiwKICAgICAgICAgLy8gT21pdCB4bWwgc28gdGhlIHJl
c3VsdCBpcyBub3QgWEhUTUwuCkBAIC0xNDMsOCArMTY2LDE2IEBAIHN0YXRpYyBOU0RpY3Rpb25h
cnkgKmF0dHJpYnV0ZXNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbigpCiAgICAgICAgIEAi
ZG9jdHlwZSIsIEAiaHRtbCIsIEAiaGVhZCIsIEAiYm9keSIsCiAgICAgICAgIC8vIE9taXQgZGVw
cmVjYXRlZCB0YWdzLgogICAgICAgICBAImFwcGxldCIsIEAiYmFzZWZvbnQiLCBAImNlbnRlciIs
IEAiZGlyIiwgQCJmb250IiwgQCJtZW51IiwgQCJzIiwgQCJzdHJpa2UiLCBAInUiLAorI2lmICFF
TkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogICAgICAgICAvLyBPbWl0IG9iamVjdCBzbyBubyBm
aWxlIGF0dGFjaG1lbnRzIGFyZSBwYXJ0IG9mIHRoZSBmcmFnbWVudC4KLSAgICAgICAgQCJvYmpl
Y3QiLCBuaWxdKTsKKyAgICAgICAgQCJvYmplY3QiLAorI2VuZGlmCisgICAgICAgIG5pbF0pOwor
CisjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKyAgICBpZiAoIVJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuYXR0YWNobWVudEVsZW1lbnRFbmFibGVkKCkpCisg
ICAgICAgIFtleGNsdWRlZEVsZW1lbnRzIGFkZE9iamVjdDpAIm9iamVjdCJdOworI2VuZGlmCiAK
ICNpZiBQTEFURk9STShJT1MpCiAgICAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgTlNFeGNsdWRl
ZEVsZW1lbnRzRG9jdW1lbnRBdHRyaWJ1dGUgPSBAIkV4Y2x1ZGVkRWxlbWVudHMiOwpAQCAtMjE5
LDcgKzI1MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZERpc2FibGVJbWFnZSB7IGZhbHNl
IH07CiB9OwogCi1SZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRS
ZXNvdXJjZXMoRnJhbWUmIGZyYW1lLCBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgSGFzaE1h
cDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4mIHVybFRvQmxvYk1hcCkKK1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhGcmFtZSYgZnJhbWUs
IE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBCbG9iUmVwbGFjZW1lbnRJbmZvJiByZXBsYWNl
bWVudEluZm8pCiB7CiAgICAgaWYgKCFmcmFtZS5wYWdlKCkgfHwgIWZyYW1lLmRvY3VtZW50KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjM4LDcgKzI2OSw4IEBAIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhGcmFtZSYgZnJhbWUs
IE5TQXR0cmlidXRlCiAgICAgICAgIGF1dG8gYmxvYiA9IEJsb2I6OmNyZWF0ZShzdWJyZXNvdXJj
ZS0+ZGF0YSgpLCBzdWJyZXNvdXJjZS0+bWltZVR5cGUoKSk7CiAgICAgICAgIFN0cmluZyBibG9i
VVJMID0gRE9NVVJMOjpjcmVhdGVPYmplY3RVUkwoZG9jdW1lbnQsIGJsb2IpOwogICAgICAgICBi
bG9iVVJMTWFwLnNldChzdWJyZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCksIGJsb2JVUkwpOwotICAg
ICAgICB1cmxUb0Jsb2JNYXAuc2V0KGJsb2JVUkwsIFdURk1vdmUoYmxvYikpOworICAgICAgICBy
ZXBsYWNlbWVudEluZm8uYmxvYlVSTFRvQmxvYk1hcC5zZXQoYmxvYlVSTCwgV1RGTW92ZShibG9i
KSk7CisgICAgICAgIHJlcGxhY2VtZW50SW5mby5ibG9iVVJMVG9SZXBsYWNlZFVSTE1hcC5zZXQo
YmxvYlVSTCwgc3VicmVzb3VyY2UtPnVybCgpLnN0cmluZygpKTsKICAgICB9CiAgICAgcmVwbGFj
ZVN1YnJlc291cmNlVVJMcygqZnJhZ21lbnRBbmRSZXNvdXJjZXMuZnJhZ21lbnQsIFdURk1vdmUo
YmxvYlVSTE1hcCkpOwogCkBAIC0yNjgsNyArMzAwLDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
TWFya3VwQW5kQXJjaGl2ZT4gZXh0cmFjdE1hcmt1cEFuZEFyY2hpdmUoU2hhcmVkQnVmZmVyJiBi
dWYKICAgICByZXR1cm4gTWFya3VwQW5kQXJjaGl2ZSB7IFN0cmluZzo6ZnJvbVVURjgobWFpblJl
c291cmNlLT5kYXRhKCkuZGF0YSgpLCBtYWluUmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpLCBtYWlu
UmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpIH07CiB9
CiAKLXN0YXRpYyBTdHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVz
dGluYXRpb25Eb2N1bWVudCwgTWFya3VwQW5kQXJjaGl2ZSYgbWFya3VwQW5kQXJjaGl2ZSwgY29u
c3Qgc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IFN0cmluZyk+JiBjYW5TaG93TUlNRVR5cGVBc0hU
TUwsIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+JiB1cmxUb0Jsb2JNYXApCitz
dGF0aWMgU3RyaW5nIHNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUoRG9jdW1lbnQmIGRlc3RpbmF0
aW9uRG9jdW1lbnQsIE1hcmt1cEFuZEFyY2hpdmUmIG1hcmt1cEFuZEFyY2hpdmUsIGNvbnN0IHN0
ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBTdHJpbmcpPiYgY2FuU2hvd01JTUVUeXBlQXNIVE1MLCBC
bG9iUmVwbGFjZW1lbnRJbmZvJiByZXBsYWNlbWVudEluZm8pCiB7CiAgICAgYXV0byBwYWdlID0g
Y3JlYXRlUGFnZUZvclNhbml0aXppbmdXZWJDb250ZW50KCk7CiAgICAgRG9jdW1lbnQqIHN0YWdp
bmdEb2N1bWVudCA9IHBhZ2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCk7CkBAIC0yODAsNyArMzEy
LDggQEAgc3RhdGljIFN0cmluZyBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNoaXZlKERvY3VtZW50JiBk
ZXN0aW5hdGlvbkRvY3VtZW50LCBNYXJrdXBBbmQKICAgICAgICAgYXV0byBibG9iID0gQmxvYjo6
Y3JlYXRlKHN1YnJlc291cmNlLT5kYXRhKCksIHN1YnJlc291cmNlLT5taW1lVHlwZSgpKTsKICAg
ICAgICAgU3RyaW5nIGJsb2JVUkwgPSBET01VUkw6OmNyZWF0ZU9iamVjdFVSTChkZXN0aW5hdGlv
bkRvY3VtZW50LCBibG9iKTsKICAgICAgICAgYmxvYlVSTE1hcC5zZXQoc3VicmVzb3VyY2UtPnVy
bCgpLnN0cmluZygpLCBibG9iVVJMKTsKLSAgICAgICAgdXJsVG9CbG9iTWFwLnNldChibG9iVVJM
LCBXVEZNb3ZlKGJsb2IpKTsKKyAgICAgICAgcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb0Jsb2JN
YXAuc2V0KGJsb2JVUkwsIFdURk1vdmUoYmxvYikpOworICAgICAgICByZXBsYWNlbWVudEluZm8u
YmxvYlVSTFRvUmVwbGFjZWRVUkxNYXAuc2V0KGJsb2JVUkwsIHN1YnJlc291cmNlLT51cmwoKS5z
dHJpbmcoKSk7CiAgICAgfQogCiAgICAgYXV0byBjb250ZW50T3JpZ2luID0gU2VjdXJpdHlPcmln
aW46OmNyZWF0ZShtYXJrdXBBbmRBcmNoaXZlLm1haW5SZXNvdXJjZS0+dXJsKCkpOwpAQCAtMjk2
LDcgKzMyOSw3IEBAIHN0YXRpYyBTdHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1
bWVudCYgZGVzdGluYXRpb25Eb2N1bWVudCwgTWFya3VwQW5kCiAgICAgICAgIGF1dG8gc3ViZnJh
bWVVUkwgPSBzdWJmcmFtZU1haW5SZXNvdXJjZS0+dXJsKCk7CiAgICAgICAgIE1hcmt1cEFuZEFy
Y2hpdmUgc3ViZnJhbWVDb250ZW50ID0geyBTdHJpbmc6OmZyb21VVEY4KHN1YmZyYW1lTWFpblJl
c291cmNlLT5kYXRhKCkuZGF0YSgpLCBzdWJmcmFtZU1haW5SZXNvdXJjZS0+ZGF0YSgpLnNpemUo
KSksCiAgICAgICAgICAgICBzdWJmcmFtZU1haW5SZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpLCBz
dWJmcmFtZUFyY2hpdmUuY29weVJlZigpIH07Ci0gICAgICAgIGF1dG8gc3ViZnJhbWVNYXJrdXAg
PSBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNoaXZlKGRlc3RpbmF0aW9uRG9jdW1lbnQsIHN1YmZyYW1l
Q29udGVudCwgY2FuU2hvd01JTUVUeXBlQXNIVE1MLCB1cmxUb0Jsb2JNYXApOworICAgICAgICBh
dXRvIHN1YmZyYW1lTWFya3VwID0gc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShkZXN0aW5hdGlv
bkRvY3VtZW50LCBzdWJmcmFtZUNvbnRlbnQsIGNhblNob3dNSU1FVHlwZUFzSFRNTCwgcmVwbGFj
ZW1lbnRJbmZvKTsKIAogICAgICAgICBDU3RyaW5nIHV0ZjggPSBzdWJmcmFtZU1hcmt1cC51dGY4
KCk7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBibG9iQnVmZmVyOwpAQCAtMzA2LDcgKzMzOSw4
IEBAIHN0YXRpYyBTdHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVz
dGluYXRpb25Eb2N1bWVudCwgTWFya3VwQW5kCiAKICAgICAgICAgU3RyaW5nIHN1YmZyYW1lQmxv
YlVSTCA9IERPTVVSTDo6Y3JlYXRlT2JqZWN0VVJMKGRlc3RpbmF0aW9uRG9jdW1lbnQsIGJsb2Ip
OwogICAgICAgICBibG9iVVJMTWFwLnNldChzdWJmcmFtZVVSTC5zdHJpbmcoKSwgc3ViZnJhbWVC
bG9iVVJMKTsKLSAgICAgICAgdXJsVG9CbG9iTWFwLnNldChzdWJmcmFtZUJsb2JVUkwsIFdURk1v
dmUoYmxvYikpOworICAgICAgICByZXBsYWNlbWVudEluZm8uYmxvYlVSTFRvQmxvYk1hcC5zZXQo
c3ViZnJhbWVCbG9iVVJMLCBXVEZNb3ZlKGJsb2IpKTsKKyAgICAgICAgcmVwbGFjZW1lbnRJbmZv
LmJsb2JVUkxUb1JlcGxhY2VkVVJMTWFwLnNldChzdWJmcmFtZUJsb2JVUkwsIHN1YmZyYW1lVVJM
LnN0cmluZygpKTsKICAgICB9CiAKICAgICByZXBsYWNlU3VicmVzb3VyY2VVUkxzKGZyYWdtZW50
LmdldCgpLCBXVEZNb3ZlKGJsb2JVUkxNYXApKTsKQEAgLTMzNywxNiArMzcxLDE2IEBAIGJvb2wg
V2ViQ29udGVudFJlYWRlcjo6cmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBS
ZWZQdHI8QmxvYj4+IHVybFRvQmxvYk1hcDsKKyAgICBCbG9iUmVwbGFjZW1lbnRJbmZvIHJlcGxh
Y2VtZW50SW5mbzsKICAgICBTdHJpbmcgc2FuaXRpemVkTWFya3VwID0gc2FuaXRpemVNYXJrdXBX
aXRoQXJjaGl2ZSgqZnJhbWUuZG9jdW1lbnQoKSwgKnJlc3VsdCwgWyZdIChjb25zdCBTdHJpbmcm
IHR5cGUpIHsKICAgICAgICAgcmV0dXJuIGZyYW1lLmxvYWRlcigpLmNsaWVudCgpLmNhblNob3dN
SU1FVHlwZUFzSFRNTCh0eXBlKTsKLSAgICB9LCB1cmxUb0Jsb2JNYXApOworICAgIH0sIHJlcGxh
Y2VtZW50SW5mbyk7CiAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZy
YW1lLmRvY3VtZW50KCksIHNhbml0aXplZE1hcmt1cCwgYmxhbmtVUkwoKSwgRGlzYWxsb3dTY3Jp
cHRpbmdBbmRQbHVnaW5Db250ZW50KTsKIAogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVj
ZXNzYXJ5KCpmcmFnbWVudCwgV1RGTW92ZSh1cmxUb0Jsb2JNYXApKTsKKyAgICByZXBsYWNlUmlj
aENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIFdURk1vdmUocmVw
bGFjZW1lbnRJbmZvKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM2NiwxMCArNDAwLDEw
IEBAIGJvb2wgV2ViQ29udGVudE1hcmt1cFJlYWRlcjo6cmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVm
ZmVyJiBidWZmZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+IHVybFRvQmxvYk1hcDsKKyAgICBCbG9iUmVwbGFj
ZW1lbnRJbmZvIHJlcGxhY2VtZW50SW5mbzsKICAgICBtYXJrdXAgPSBzYW5pdGl6ZU1hcmt1cFdp
dGhBcmNoaXZlKCpmcmFtZS5kb2N1bWVudCgpLCAqcmVzdWx0LCBbJl0gKGNvbnN0IFN0cmluZyYg
dHlwZSkgewogICAgICAgICByZXR1cm4gZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuY2FuU2hvd01J
TUVUeXBlQXNIVE1MKHR5cGUpOwotICAgIH0sIHVybFRvQmxvYk1hcCk7CisgICAgfSwgcmVwbGFj
ZW1lbnRJbmZvKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDE5LDEyICs0NTMsMTIgQEAg
Ym9vbCBXZWJDb250ZW50TWFya3VwUmVhZGVyOjpyZWFkSFRNTChjb25zdCBTdHJpbmcmIHN0cmlu
ZykKIAogc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21B
dHRyaWJ1dGVkU3RyaW5nKEZyYW1lJiBmcmFtZSwgTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcp
CiB7Ci0gICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4gdXJsVG9CbG9iTWFw
OwotICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhmcmFt
ZSwgc3RyaW5nLCB1cmxUb0Jsb2JNYXApOworICAgIEJsb2JSZXBsYWNlbWVudEluZm8gcmVwbGFj
ZW1lbnRJbmZvOworICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291
cmNlcyhmcmFtZSwgc3RyaW5nLCByZXBsYWNlbWVudEluZm8pOwogICAgIGlmICghZnJhZ21lbnQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0
dGFjaG1lbnRzSWZOZWNlc3NhcnkoKmZyYWdtZW50LCBXVEZNb3ZlKHVybFRvQmxvYk1hcCkpOwor
ICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVu
dCwgV1RGTW92ZShyZXBsYWNlbWVudEluZm8pKTsKICAgICByZXR1cm4gZnJhZ21lbnQ7CiB9CiAK
QEAgLTUwMyw3ICs1MzcsNyBAQCBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRJbWFnZShSZWY8
U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlciwgY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIGlmICghZnJh
Z21lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJlcGxhY2VSaWNoQ29udGVudFdp
dGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwge3sgYmxvYlVSTCwgV1RGTW92ZShi
bG9iKSB9fSk7CisgICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3Nh
cnkoKmZyYWdtZW50LCB7e3sgYmxvYlVSTCwgV1RGTW92ZShibG9iKSB9fSwgeyB9fSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCA1ODczMThkZmE2NTdmNDk4MzkzZDExNzRmZjY5NzgyNmRmNzA2ZjcyLi4z
OWM4NWRkZjE5YTU0ZWU4ZGM0NTU0NTI4ZjJmYjc4ZmJhMmI3N2M0IDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTct
MTItMTggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAg
W0F0dGFjaG1lbnQgU3VwcG9ydF0gU3VwcG9ydCByZXByZXNlbnRpbmcgcGFzdGVkIG9yIGRyb3Bw
ZWQgY29udGVudCB1c2luZyBhdHRhY2htZW50IGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA4OTIKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzM2MDY0MjEwPgorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAg
ICAgQWRkcyBhIG5ldyBBUEkgdGVzdCB0byBleGVyY2lzZSBwYXN0aW5nIGFuIGF0dHJpYnV0ZWQg
c3RyaW5nIHdpdGggbXVsdGlwbGUgYXR0YWNobWVudHMgb2YgZGlmZmVyZW50IHR5cGVzLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0
cy5tbToKKyAgICAgICAgKHRlc3RaSVBEYXRhKToKKyAgICAgICAgKHBsYXRmb3JtQ29weVJpY2hU
ZXh0V2l0aE11bHRpcGxlQXR0YWNobWVudHMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVT
VCk6CisKIDIwMTctMTItMTggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+
CiAKICAgICAgICAgW0F0dGFjaG1lbnQgU3VwcG9ydF0gSW5zZXJ0IGltYWdlcyBhcyBpbmxpbmUg
YXR0YWNobWVudHMgd2hlbiBwYXN0aW5nIGFuZCBkcm9wcGluZwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0K
aW5kZXggM2Y4ZTYxZDFjZDA2NDk2MDU0MGY3MmZiNzg0YWNkZmMwM2JlZDQ4Yi4uMTVkMzFmYWE2
MTQzNGMwMTc5NzE2ZjU2ZDEwZTMzNmYyOTA4ZTEzNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCkBA
IC0xMzYsNiArMTM2LDEyIEBAIHN0YXRpYyBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2ViVmll
d0ZvclRlc3RpbmdBdHRhY2htZW50cygpCiAgICAgcmV0dXJuIHdlYlZpZXc7CiB9CiAKK3N0YXRp
YyBOU0RhdGEgKnRlc3RaSVBEYXRhKCkKK3sKKyAgICBOU1VSTCAqemlwRmlsZVVSTCA9IFtbTlNC
dW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJjb21wcmVzc2VkLWZpbGVzIiB3aXRo
RXh0ZW5zaW9uOkAiemlwIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJd
OworICAgIHJldHVybiBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDp6aXBGaWxlVVJMXTsK
K30KKwogc3RhdGljIE5TRGF0YSAqdGVzdEhUTUxEYXRhKCkKIHsKICAgICByZXR1cm4gW0AiPGEg
aHJlZj0nIyc+VGhpcyBpcyBzb21lIEhUTUwgZGF0YTwvYT4iIGRhdGFVc2luZ0VuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXTsKQEAgLTMwOCw2ICszMTQsMjggQEAgQGVuZAogCiAjcHJhZ21h
IG1hcmsgLSBQbGF0Zm9ybSB0ZXN0aW5nIGhlbHBlciBmdW5jdGlvbnMKIAordm9pZCBwbGF0Zm9y
bUNvcHlSaWNoVGV4dFdpdGhNdWx0aXBsZUF0dGFjaG1lbnRzKCkKK3sKKyAgICBhdXRvIGltYWdl
ID0gYWRvcHROUyhbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0SW1h
Z2VEYXRhKCkgb2ZUeXBlOihOU1N0cmluZyAqKWtVVFR5cGVQTkddKTsKKyAgICBhdXRvIHBkZiA9
IGFkb3B0TlMoW1tOU1RleHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdFBERkRh
dGEoKSBvZlR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBERl0pOworICAgIGF1dG8gemlwID0gYWRv
cHROUyhbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0WklQRGF0YSgp
IG9mVHlwZTooTlNTdHJpbmcgKilrVVRUeXBlWmlwQXJjaGl2ZV0pOworCisgICAgYXV0byByaWNo
VGV4dCA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSk7
CisgICAgW3JpY2hUZXh0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W05TQXR0cmlidXRlZFN0cmlu
ZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6aW1hZ2UuZ2V0KCldXTsKKyAgICBbcmlj
aFRleHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0
ZWRTdHJpbmdXaXRoQXR0YWNobWVudDpwZGYuZ2V0KCldXTsKKyAgICBbcmljaFRleHQgYXBwZW5k
QXR0cmlidXRlZFN0cmluZzpbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRo
QXR0YWNobWVudDp6aXAuZ2V0KCldXTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBOU1Bhc3Rl
Ym9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXTsKKyAg
ICBbcGFzdGVib2FyZCBjbGVhckNvbnRlbnRzXTsKKyAgICBbcGFzdGVib2FyZCB3cml0ZU9iamVj
dHM6QFsgcmljaFRleHQuZ2V0KCkgXV07CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgYXV0byBp
dGVtID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2l0ZW0g
cmVnaXN0ZXJPYmplY3Q6cmljaFRleHQuZ2V0KCkgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJl
cHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbF07CisgICAgW1VJUGFzdGVib2FyZCBnZW5lcmFsUGFz
dGVib2FyZF0uaXRlbVByb3ZpZGVycyA9IEBbIGl0ZW0uZ2V0KCkgXTsKKyNlbmRpZgorfQorCiB2
b2lkIHBsYXRmb3JtQ29weVJpY2hUZXh0V2l0aEltYWdlKCkKIHsKICAgICBhdXRvIHJpY2hUZXh0
ID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdKTsKQEAg
LTgwMCw2ICs4MjgsNDggQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgSW5zZXJ0UGFzdGVkQXR0
cmlidXRlZFN0cmluZ0NvbnRhaW5pbmdJbWFnZSkKICAgICB9CiB9CiAKK1RFU1QoV0tBdHRhY2ht
ZW50VGVzdHMsIEluc2VydFBhc3RlZEF0dHJpYnV0ZWRTdHJpbmdDb250YWluaW5nTXVsdGlwbGVB
dHRhY2htZW50cykKK3sKKyAgICBwbGF0Zm9ybUNvcHlSaWNoVGV4dFdpdGhNdWx0aXBsZUF0dGFj
aG1lbnRzKCk7CisKKyAgICBSZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gaW1hZ2VBdHRhY2htZW50
OworICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiB6aXBBdHRhY2htZW50OworICAgIFJldGFp
blB0cjxfV0tBdHRhY2htZW50PiBwZGZBdHRhY2htZW50OworICAgIGF1dG8gd2ViVmlldyA9IHdl
YlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKKyAgICB7CisgICAgICAgIE9ic2VydmVBdHRh
Y2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBb
d2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlBhc3RlIiBhcmd1bWVu
dDpuaWxdOworICAgICAgICBFWFBFQ1RfRVEoMFUsIG9ic2VydmVyLm9ic2VydmVyKCkucmVtb3Zl
ZC5jb3VudCk7CisgICAgICAgIEVYUEVDVF9FUSgzVSwgb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5pbnNl
cnRlZC5jb3VudCk7CisgICAgICAgIGZvciAoX1dLQXR0YWNobWVudCAqYXR0YWNobWVudCBpbiBv
YnNlcnZlci5vYnNlcnZlcigpLmluc2VydGVkKSB7CisgICAgICAgICAgICBOU0RhdGEgKmRhdGEg
PSBbYXR0YWNobWVudCBzeW5jaHJvbm91c2x5UmVxdWVzdERhdGE6bmlsXTsKKyAgICAgICAgICAg
IGlmIChbZGF0YSBpc0VxdWFsVG9EYXRhOnRlc3RaSVBEYXRhKCldKQorICAgICAgICAgICAgICAg
IHppcEF0dGFjaG1lbnQgPSBhdHRhY2htZW50OworICAgICAgICAgICAgZWxzZSBpZiAoW2RhdGEg
aXNFcXVhbFRvRGF0YTp0ZXN0UERGRGF0YSgpXSkKKyAgICAgICAgICAgICAgICBwZGZBdHRhY2ht
ZW50ID0gYXR0YWNobWVudDsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtkYXRhIGlzRXF1YWxUb0Rh
dGE6dGVzdEltYWdlRGF0YSgpXSkKKyAgICAgICAgICAgICAgICBpbWFnZUF0dGFjaG1lbnQgPSBh
dHRhY2htZW50OworICAgICAgICB9CisgICAgfQorCisgICAgRVhQRUNUX1RSVUUoemlwQXR0YWNo
bWVudCAmJiBpbWFnZUF0dGFjaG1lbnQgJiYgcGRmQXR0YWNobWVudCk7CisgICAgRVhQRUNUX0VR
KDMsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVy
eVNlbGVjdG9yQWxsKCdhdHRhY2htZW50JykubGVuZ3RoIl0uaW50ZWdlclZhbHVlKTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoImltYWdlL3BuZyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhdHRhY2htZW50JylbMF0uZ2V0
QXR0cmlidXRlKCd0eXBlJykiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNhdGlvbi9w
ZGYiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVl
cnlTZWxlY3RvckFsbCgnYXR0YWNobWVudCcpWzFdLmdldEF0dHJpYnV0ZSgndHlwZScpIl0pOwor
ICAgIEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vemlwIiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2F0dGFjaG1l
bnQnKVsyXS5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSJdKTsKKworICAgIHsKKyAgICAgICAgT2JzZXJ2
ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAg
ICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiU2VsZWN0QWxs
IiBhcmd1bWVudDpuaWxdOworICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVF
ZGl0Q29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiBhcmd1bWVudDpuaWxdOworICAgICAgICBOU0Fy
cmF5PF9XS0F0dGFjaG1lbnQgKj4gKnJlbW92ZWRBdHRhY2htZW50cyA9IFtvYnNlcnZlci5vYnNl
cnZlcigpIHJlbW92ZWRdOworICAgICAgICBFWFBFQ1RfRVEoM1UsIHJlbW92ZWRBdHRhY2htZW50
cy5jb3VudCk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtyZW1vdmVkQXR0YWNobWVudHMgY29udGFp
bnNPYmplY3Q6emlwQXR0YWNobWVudC5nZXQoKV0pOworICAgICAgICBFWFBFQ1RfVFJVRShbcmVt
b3ZlZEF0dGFjaG1lbnRzIGNvbnRhaW5zT2JqZWN0OmltYWdlQXR0YWNobWVudC5nZXQoKV0pOwor
ICAgICAgICBFWFBFQ1RfVFJVRShbcmVtb3ZlZEF0dGFjaG1lbnRzIGNvbnRhaW5zT2JqZWN0OnBk
ZkF0dGFjaG1lbnQuZ2V0KCldKTsKKyAgICB9Cit9CisKICNwcmFnbWEgbWFyayAtIFBsYXRmb3Jt
LXNwZWNpZmljIHRlc3RzCiAKICNpZiBQTEFURk9STShNQUMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329724</attachid>
            <date>2017-12-18 18:49:00 -0800</date>
            <delta_ts>2017-12-18 20:03:25 -0800</delta_ts>
            <desc>Rebase on master again</desc>
            <filename>bug-180892-20171218184859.patch</filename>
            <type>text/plain</type>
            <size>25818</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzYzNDMyYWJjNGUwNTQ2
MDdiZTFhNmQzMjk5NDVlOTRhZjRjNzU1Yy4uZDYzZDgzNzBhNDJlOWEzZDE2ZTlmNzFjM2Y5YzVm
MzY4YTY2Mzc4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE3LTEyLTE4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIFN1cHBvcnQgcmVwcmVzZW50aW5nIHBhc3RlZCBvciBkcm9wcGVkIGNvbnRlbnQg
dXNpbmcgYXR0YWNobWVudCBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTgwODkyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjA2NDIx
MD4KKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIFN1cHBvcnQg
ZHJvcHBpbmcgYW5kIHBhc3RpbmcgYXR0cmlidXRlZCBzdHJpbmdzIHRoYXQgY29udGFpbiBOU1Rl
eHRBdHRhY2htZW50cy4gVGVhY2hlcworICAgICAgICByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0
YWNobWVudHNJZk5lY2Vzc2FyeSB0byByZXBsYWNlIG9iamVjdCBlbGVtZW50cyB3aXRoIGF0dGFj
aG1lbnRzOyBzZWUgY29tbWVudHMgYmVsb3cgZm9yCisgICAgICAgIG1vcmUgZGV0YWlscy4KKwor
ICAgICAgICBUZXN0OiBXS0F0dGFjaG1lbnRUZXN0cy5JbnNlcnRQYXN0ZWRBdHRyaWJ1dGVkU3Ry
aW5nQ29udGFpbmluZ011bHRpcGxlQXR0YWNobWVudHMKKworICAgICAgICAqIGVkaXRpbmcvV2Vi
Q29udGVudFJlYWRlci5oOgorCisgICAgICAgIEFkZCBCbG9iUmVwbGFjZW1lbnRJbmZvLCB3aGlj
aCBjb250YWlucyBhIG1hcCBvZiBibG9iIFVSTHMgdG8gcmVwbGFjZW1lbnQgQmxvYnMsIGFzIHdl
bGwgYXMgYSBtYXAgb2YgYmxvYiBVUkxzCisgICAgICAgIHRvIHJlcGxhY2VkIHN1YnJlc291cmNl
IFVSTHMuCisKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZXBsYWNlbWVudEluZm86OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW06CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyk6
CisgICAgICAgICogZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1
dGVkU3RyaW5nLmg6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VG
cm9tTlNBdHRyaWJ1dGVkU3RyaW5nLm1tOgorCisgICAgICAgIEltcGxlbWVudCAtW1dlYkFyY2hp
dmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcgTUlNRVR5cGVdLiBVSUZvdW5kYXRpb24g
YXNrcyBmb3IgLU1JTUVUeXBlIGluIHRoZSBwcm9jZXNzCisgICAgICAgIG9mIGdlbmVyYXRpbmcg
bWFya3VwIGZyb20gTlNUZXh0QXR0YWNobWVudHM7IHRoaXMgY3VycmVudGx5IGNhdXNlcyB0aGUg
d2ViIHByb2Nlc3MgdG8gY3Jhc2ggb24gYW4gdW5yZWNvZ25pemVkCisgICAgICAgIHNlbGVjdG9y
LgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgd29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzM2
MDc0NDI5PiwgYSBVSUZvdW5kYXRpb24gYnVnIGluIHdoaWNoIGFsbCBidXQgYSBmZXcgaGFyZC1j
b2RlZCBmaWxlCisgICAgICAgIGV4dGVuc2lvbnMgYWN0dWFsbHkgeWllbGQgTUlNRSB0eXBlcyB0
aGF0IGFyZSBtb3JlIHNwZWNpZmljIHRoYW4gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIuIFRo
aXMgY2FuIHNhZmVseSBiZQorICAgICAgICByZW1vdmVkIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzM2
MDc0NDI5PiBpcyBhZGRyZXNzZWQuCisKKyAgICAgICAgKC1bV2ViQXJjaGl2ZVJlc291cmNlRnJv
bU5TQXR0cmlidXRlZFN0cmluZyBNSU1FVHlwZV0pOgorICAgICAgICAqIGVkaXRpbmcvY29jb2Ev
V2ViQ29udGVudFJlYWRlckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZVJpY2hD
b250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkpOgorCisgICAgICAgIFRyeSB0byByZXBs
YWNlIG9iamVjdCBlbGVtZW50cyB3aXRoIGF0dGFjaG1lbnRzLCBhbmQgYWxzbyB0d2VhayB0aGUg
dGl0bGUgb2YgdGhlIGF0dGFjaG1lbnQncyBGaWxlIHRvIHVzZSB0aGUKKyAgICAgICAgcmVwbGFj
ZWQgc3VicmVzb3VyY2UncyBmaWxlbmFtZSBpZiBwb3NzaWJsZS4gQWRkaXRpb25hbGx5LCBhYnN0
cmFjdHMgb3V0IGluZm9ybWF0aW9uIGZvciByZXBsYWNpbmcgb2JqZWN0IG9yCisgICAgICAgIGlt
YWdlIGVsZW1lbnRzIChmb3JtZXJseSBhIHBhaXIgb2YgeyBGaWxlLCBFbGVtZW50IH0pIGludG8g
YSBzZXBhcmF0ZSBzdHJ1Y3QsIGFuZCBhZGQgYSBBdHRhY2htZW50RGlzcGxheU1vZGUKKyAgICAg
ICAgcGFyYW1ldGVyIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBhdHRhY2htZW50IHNob3VsZCBi
ZSBwcmVzZW50ZWQgaW4tbGluZSAoaW4gdGhlIGNhc2Ugb2YgaW1hZ2VzKSwgb3IgYXMgYW4gaWNv
bi4KKworICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlc0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252
ZXJzaW9uKToKKworICAgICAgICBPbmx5IGV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzIGZyb20gYmVp
bmcgZ2VuZXJhdGVkIGZyb20gTlNUZXh0QXR0YWNobWVudHMgaWYgdGhlIGF0dGFjaG1lbnQgZWxl
bWVudCBydW50aW1lCisgICAgICAgIGZlYXR1cmUgaXMgZGlzYWJsZWQsIG9yICFFTkFCTEUoQVRU
QUNITUVOVF9FTEVNRU5UKS4KKworICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRBbmRB
ZGRSZXNvdXJjZXMpOgorCisgICAgICAgIEFkZGl0aW9uYWxseSBrZWVwIHRyYWNrIG9mIGEgbWFw
cGluZyBmcm9tIGJsb2IgVVJMID0+IHJlcGxhY2VkIHN1YnJlc291cmNlIFVSTC4gSW4gYWxsIHRo
ZSBwbGFjZXMgd2hlcmUgd2UKKyAgICAgICAgcHJldmlvdXNseSBvbmx5IHBsdW1iZWQgYSBtYXAg
b2YgYmxvYiBVUkwgPT4gQmxvYiwgdXNlIGEgQmxvYlJlcGxhY2VtZW50SW5mbyBzdHJ1Y3QgaW5z
dGVhZCwgd2hpY2ggbm93IGluY2x1ZGVzCisgICAgICAgIGEgbWFwIGZyb20gYmxvYiBVUkwgPT4g
cmVwbGFjZWQgVVJMLgorCisgICAgICAgIChXZWJDb3JlOjpzYW5pdGl6ZU1hcmt1cFdpdGhBcmNo
aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRXZWJBcmNoaXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRXZWJBcmNo
aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRSVEZEKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRSVEZEKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRSVEYpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29udGVudE1hcmt1cFJlYWRlcjo6cmVhZFJURik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJDb250ZW50UmVhZGVyOjpyZWFkSW1hZ2UpOgorCiAyMDE3LTEyLTE4ICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBTZXJ2aWNlIHdvcmtlciBzZXJ2ZWQgcmVz
cG9uc2UgdGFpbnRpbmcgc2hvdWxkIGtlZXAgaXRzIHRhaW50aW5nCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvV2ViQ29udGVudFJlYWRlci5oCmluZGV4IGIwYzViNzY0YmI4NDg1MWY0NmYwN2JlMzc5
NGUxMTk4MzFiMTAyYjcuLmYzNjU4ZWE4Y2ZiNDFiMDBiY2NhYjA0NDkzNWFkNzdkOTVlN2ZjYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oCkBAIC0xMDYsOCAr
MTA2LDE0IEBAIHN0cnVjdCBGcmFnbWVudEFuZFJlc291cmNlcyB7CiAgICAgVmVjdG9yPFJlZjxB
cmNoaXZlUmVzb3VyY2U+PiByZXNvdXJjZXM7CiB9OwogCi12b2lkIHJlcGxhY2VSaWNoQ29udGVu
dFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KERvY3VtZW50RnJhZ21lbnQmLCBIYXNoTWFwPEF0
b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiYmIHVybFRvQmxvYk1hcCk7Ci1SZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUmLCBOU0F0dHJp
YnV0ZWRTdHJpbmcqLCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiYgdXJsVG9C
bG9iTWFwKTsKK3N0cnVjdCBCbG9iUmVwbGFjZW1lbnRJbmZvIHsKKyAgICBIYXNoTWFwPEF0b21p
Y1N0cmluZywgUmVmUHRyPEJsb2I+PiBibG9iVVJMVG9CbG9iTWFwOworICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IGJsb2JVUkxUb1JlcGxhY2VkVVJMTWFwOworICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJsb2JVUkxUb0Jsb2JNYXAuaXNFbXB0eSgpOyB9
Cit9OworCit2b2lkIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5
KERvY3VtZW50RnJhZ21lbnQmLCBCbG9iUmVwbGFjZW1lbnRJbmZvJiYpOworUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKEZyYW1lJiwgTlNBdHRy
aWJ1dGVkU3RyaW5nKiwgQmxvYlJlcGxhY2VtZW50SW5mbyYpOwogI2VuZGlmCiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IDhiODY5N2ZhNDgy
Y2FhNmY5NTAyMzgxNTUyMTU1MzFmYzBkODU0NzUuLjYyODcwNjY5MTRlYzc0ZTk0ZjQ2MmRjYjc0
OGM1N2VmNDUzZjUzMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQpAQCAtMjIyLDkgKzIyMiw5IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9u
V2l0aEF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKLSAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IFJlZlB0cjxCbG9iPj4gdXJsVG9CbG9iTWFwOwotICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKG1fZnJhbWUsIGF0dHJpYnV0ZWRTdHJpbmcs
IHVybFRvQmxvYk1hcCkpIHsKLSAgICAgICAgICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRh
Y2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwgV1RGTW92ZSh1cmxUb0Jsb2JNYXApKTsKKyAg
ICAgICAgQmxvYlJlcGxhY2VtZW50SW5mbyByZXBsYWNlbWVudEluZm87CisgICAgICAgIGlmIChh
dXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMobV9mcmFtZSwgYXR0
cmlidXRlZFN0cmluZywgcmVwbGFjZW1lbnRJbmZvKSkgeworICAgICAgICAgICAgcmVwbGFjZVJp
Y2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoKmZyYWdtZW50LCBXVEZNb3ZlKHJl
cGxhY2VtZW50SW5mbykpOwogICAgICAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50KCpm
cmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3Rl
ZCkpCiAgICAgICAgICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25O
dWxsKCksIGZhbHNlLCBmYWxzZSwgbWFpbEJsb2NrcXVvdGVIYW5kbGluZyk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJlc291
cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9XZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmgKaW5kZXggM2Y4MTc3
ZTlhZGZiYmQ1MjQwNjUxYWMzNDU3Y2I5MGI1N2U2MWM2MC4uMTBhMDhkYzE2ZTdkOTAyMmYwYmMy
ZmIyN2RkYmU5NzZkNTVlMDJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1
dGVkU3RyaW5nLmgKQEAgLTM2LDYgKzM2LDcgQEAgY2xhc3MgQXJjaGl2ZVJlc291cmNlOwogICAg
IFJlZlB0cjxXZWJDb3JlOjpBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlOwogfQogLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoRGF0YTooTlNEYXRhICopZGF0YSBVUkw6KE5TVVJMICopVVJMIE1JTUVU
eXBlOihOU1N0cmluZyAqKU1JTUVUeXBlIHRleHRFbmNvZGluZ05hbWU6KE5TU3RyaW5nICopdGV4
dEVuY29kaW5nTmFtZSBmcmFtZU5hbWU6KE5TU3RyaW5nICopZnJhbWVOYW1lOworLSAoTlNTdHJp
bmcgKilNSU1FVHlwZTsKIC0gKE5TVVJMICopVVJMOwogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0
ZWRTdHJpbmcubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkFyY2hpdmVSZXNv
dXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcubW0KaW5kZXggOTI4N2VmYThjMThiN2QxODc0MDZk
MGM1M2U2MGMyMTZiNWEzZDAxNi4uMTA3MDEwNjk1ZDg5NzBkNjg4YmE4NGIyMTdhYzE2MWQxNDAz
ODgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJBcmNoaXZl
UmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5tbQpA
QCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmli
dXRlZFN0cmluZy5oIgogCiAjaW1wb3J0ICJBcmNoaXZlUmVzb3VyY2UuaCIKKyNpbXBvcnQgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQyLDYg
KzQzLDEzIEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgVVJM
OihOU1VSTCAqKVVSTCBNSU1FVHlwZTooTlNTdHJpbmcKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICB9CiAKKyAgICBpZiAoW01JTUVUeXBlIGlzRXF1YWxUb1N0cmluZzpAImFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbSJdKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBm
b3IgPHJkYXI6Ly9wcm9ibGVtLzM2MDc0NDI5PiwgYW5kIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhh
dCBpcyBmaXhlZC4KKyAgICAgICAgYXV0byBtaW1lVHlwZUZyb21VUkwgPSBNSU1FVHlwZVJlZ2lz
dHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihVUkwucGF0aEV4dGVuc2lvbik7CisgICAgICAg
IGlmICghbWltZVR5cGVGcm9tVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIE1JTUVUeXBlID0g
bWltZVR5cGVGcm9tVVJMOworICAgIH0KKwogICAgIHJlc291cmNlID0gQXJjaGl2ZVJlc291cmNl
OjpjcmVhdGUoU2hhcmVkQnVmZmVyOjpjcmVhdGUoYWRvcHROUyhbZGF0YSBjb3B5XSkuZ2V0KCkp
LCBVUkwsIE1JTUVUeXBlLCB0ZXh0RW5jb2RpbmdOYW1lLCBmcmFtZU5hbWUsIHsgfSk7CiAgICAg
aWYgKCFyZXNvdXJjZSkgewogICAgICAgICBbc2VsZiByZWxlYXNlXTsKQEAgLTUxLDYgKzU5LDEx
IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgVVJMOihOU1VS
TCAqKVVSTCBNSU1FVHlwZTooTlNTdHJpbmcKICAgICByZXR1cm4gc2VsZjsKIH0KIAorLSAoTlNT
dHJpbmcgKilNSU1FVHlwZQoreworICAgIHJldHVybiByZXNvdXJjZS0+bWltZVR5cGUoKTsKK30K
KwogLSAoTlNVUkwgKilVUkwKIHsKICAgICByZXR1cm4gcmVzb3VyY2UtPnVybCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5t
bQppbmRleCBkNTkyMjUzYTExOTE1YmI0MTQwZTA5NzJmOGFmNWExYmUzYjZiZmI3Li4xN2RlMTY5
N2FkY2JjYTM0ZWE2ODM5OTA4ZDY5YWM1YzY4YTJjYWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQpAQCAtNDIsNiAr
NDIsNyBAQAogI2ltcG9ydCAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MSUZyYW1l
RWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTEltYWdlRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTE9i
amVjdEVsZW1lbnQuaCIKICNpbXBvcnQgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKICNpbXBvcnQgIk1h
aW5GcmFtZS5oIgogI2ltcG9ydCAiUGFnZS5oIgpAQCAtNTAsNiArNTEsNyBAQAogI2ltcG9ydCAi
U2V0dGluZ3MuaCIKICNpbXBvcnQgIlNvY2tldFByb3ZpZGVyLmgiCiAjaW1wb3J0ICJUeXBlZEVs
ZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCIKKyNpbXBvcnQgIlVSTFBhcnNlci5oIgogI2ltcG9y
dCAiV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oIgogI2ltcG9ydCAi
V2ViQXJjaGl2ZVJlc291cmNlV2ViUmVzb3VyY2VIYW5kbGVyLmgiCiAjaW1wb3J0ICJXZWJOU0F0
dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKQEAgLTc2LDM3ICs3OCw1OCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogCi12b2lkIHJlcGxhY2VS
aWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KERvY3VtZW50RnJhZ21lbnQmIGZy
YWdtZW50LCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiYmIHVybFRvQmxvYk1h
cCkKK3N0cnVjdCBBdHRhY2htZW50UmVwbGFjZW1lbnRJbmZvIHsKKyAgICBBdHRhY2htZW50RGlz
cGxheU1vZGUgZGlzcGxheU1vZGU7CisgICAgUmVmPEZpbGU+IGZpbGU7CisgICAgUmVmPEVsZW1l
bnQ+IGVsZW1lbnRUb1JlcGxhY2U7Cit9OworCit2b2lkIHJlcGxhY2VSaWNoQ29udGVudFdpdGhB
dHRhY2htZW50c0lmTmVjZXNzYXJ5KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBCbG9iUmVw
bGFjZW1lbnRJbmZvJiYgcmVwbGFjZW1lbnRJbmZvKQogewotICAgIGlmICghUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5hdHRhY2htZW50RWxlbWVudEVuYWJsZWQoKSB8
fCB1cmxUb0Jsb2JNYXAuaXNFbXB0eSgpKQorICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5hdHRhY2htZW50RWxlbWVudEVuYWJsZWQoKSB8fCByZXBsYWNl
bWVudEluZm8uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8UmVmPEVs
ZW1lbnQ+PiBlbGVtZW50c1RvUmVtb3ZlOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmPEZpbGU+
LCBSZWY8RWxlbWVudD4+PiBmaWxlc0ZvckVsZW1lbnRzVG9SZXBsYWNlOworICAgIFZlY3RvcjxB
dHRhY2htZW50UmVwbGFjZW1lbnRJbmZvPiBhdHRhY2htZW50UmVwbGFjZW1lbnRJbmZvOwogICAg
IGZvciAoYXV0byYgaW1hZ2UgOiBkZXNjZW5kYW50c09mVHlwZTxIVE1MSW1hZ2VFbGVtZW50Pihm
cmFnbWVudCkpIHsKICAgICAgICAgYXV0byB1cmwgPSBpbWFnZS5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0cik7CisgICAgICAgIGlmICh1cmwuaXNFbXB0
eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byBibG9iID0gcmVwbGFj
ZW1lbnRJbmZvLmJsb2JVUkxUb0Jsb2JNYXAuZ2V0KHVybCk7CisgICAgICAgIGlmICghYmxvYikK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8gdGl0bGUgPSBVUkxQYXJzZXIg
eyByZXBsYWNlbWVudEluZm8uYmxvYlVSTFRvUmVwbGFjZWRVUkxNYXAuZ2V0KHVybCkgfS5yZXN1
bHQoKS5sYXN0UGF0aENvbXBvbmVudCgpOworICAgICAgICBpZiAodGl0bGUuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgdGl0bGUgPSBBdG9taWNTdHJpbmcoIm1lZGlhIik7CiAKKyAgICAgICAgYXR0
YWNobWVudFJlcGxhY2VtZW50SW5mby5hcHBlbmQoeyBBdHRhY2htZW50RGlzcGxheU1vZGU6Oklu
UGxhY2UsIEZpbGU6OmNyZWF0ZSgqYmxvYiwgdGl0bGUpLCBpbWFnZSB9KTsKKyAgICB9CisKKyAg
ICBmb3IgKGF1dG8mIG9iamVjdCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxPYmplY3RFbGVtZW50
PihmcmFnbWVudCkpIHsKKyAgICAgICAgYXV0byB1cmwgPSBvYmplY3QuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmRhdGFBdHRyKTsKICAgICAgICAgaWYgKHVybC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGVsZW1lbnRzVG9SZW1vdmUuYXBwZW5kKGltYWdlKTsK
KyAgICAgICAgICAgIGVsZW1lbnRzVG9SZW1vdmUuYXBwZW5kKG9iamVjdCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gYmxvYiA9IHVybFRvQmxvYk1h
cC5nZXQodXJsKTsKKyAgICAgICAgYXV0byBibG9iID0gcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxU
b0Jsb2JNYXAuZ2V0KHVybCk7CiAgICAgICAgIGlmICghYmxvYikgewotICAgICAgICAgICAgZWxl
bWVudHNUb1JlbW92ZS5hcHBlbmQoaW1hZ2UpOworICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92
ZS5hcHBlbmQob2JqZWN0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgYXV0byB0aXRsZSA9IGltYWdlLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
SFRNTE5hbWVzOjp0aXRsZUF0dHIpOworICAgICAgICBhdXRvIHRpdGxlID0gVVJMUGFyc2VyIHsg
cmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb1JlcGxhY2VkVVJMTWFwLmdldCh1cmwpIH0ucmVzdWx0
KCkubGFzdFBhdGhDb21wb25lbnQoKTsKICAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHRpdGxlID0gQXRvbWljU3RyaW5nKCJtZWRpYSIpOworICAgICAgICAgICAgdGl0
bGUgPSBBdG9taWNTdHJpbmcoImZpbGUiKTsKIAotICAgICAgICBmaWxlc0ZvckVsZW1lbnRzVG9S
ZXBsYWNlLmFwcGVuZCh7IEZpbGU6OmNyZWF0ZSgqYmxvYiwgdGl0bGUpLCBpbWFnZSB9KTsKKyAg
ICAgICAgYXR0YWNobWVudFJlcGxhY2VtZW50SW5mby5hcHBlbmQoeyBBdHRhY2htZW50RGlzcGxh
eU1vZGU6OkFzSWNvbiwgRmlsZTo6Y3JlYXRlKCpibG9iLCB0aXRsZSksIG9iamVjdCB9KTsKICAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIGZpbGVBbmRFbGVtZW50IDogZmlsZXNGb3JFbGVtZW50c1Rv
UmVwbGFjZSkgewotICAgICAgICBhdXRvJiBmaWxlID0gZmlsZUFuZEVsZW1lbnQuZmlyc3Q7Ci0g
ICAgICAgIGF1dG8mIGVsZW1lbnRUb1JlcGxhY2UgPSBmaWxlQW5kRWxlbWVudC5zZWNvbmQ7Cisg
ICAgZm9yIChhdXRvJiBpbmZvIDogYXR0YWNobWVudFJlcGxhY2VtZW50SW5mbykgeworICAgICAg
ICBhdXRvIGZpbGUgPSBXVEZNb3ZlKGluZm8uZmlsZSk7CisgICAgICAgIGF1dG8gZWxlbWVudFRv
UmVwbGFjZSA9IFdURk1vdmUoaW5mby5lbGVtZW50VG9SZXBsYWNlKTsKICAgICAgICAgYXV0byBw
YXJlbnQgPSBtYWtlUmVmUHRyKGVsZW1lbnRUb1JlcGxhY2UtPnBhcmVudE5vZGUoKSk7CiAgICAg
ICAgIGlmICghcGFyZW50KQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMTQsNyArMTM3LDcg
QEAgdm9pZCByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeShEb2N1
bWVudEZyYWdtZW50JiBmcmFnbWVudCwgSGEKICAgICAgICAgYXV0byBhdHRhY2htZW50ID0gSFRN
TEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjphdHRhY2htZW50VGFnLCBmcmFn
bWVudC5kb2N1bWVudCgpKTsKICAgICAgICAgYXR0YWNobWVudC0+c2V0VW5pcXVlSWRlbnRpZmll
cihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOwogICAgICAgICBhdHRhY2htZW50LT5zZXRG
aWxlKFdURk1vdmUoZmlsZSksIEhUTUxBdHRhY2htZW50RWxlbWVudDo6VXBkYXRlRGlzcGxheUF0
dHJpYnV0ZXM6Olllcyk7Ci0gICAgICAgIGF0dGFjaG1lbnQtPnVwZGF0ZURpc3BsYXlNb2RlKEF0
dGFjaG1lbnREaXNwbGF5TW9kZTo6SW5QbGFjZSk7CisgICAgICAgIGF0dGFjaG1lbnQtPnVwZGF0
ZURpc3BsYXlNb2RlKGluZm8uZGlzcGxheU1vZGUpOwogICAgICAgICBwYXJlbnQtPnJlcGxhY2VD
aGlsZChhdHRhY2htZW50LCBlbGVtZW50VG9SZXBsYWNlKTsKICAgICB9CiAKQEAgLTEzNSw3ICsx
NTgsNyBAQCB2b2lkIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5
KERvY3VtZW50RnJhZ21lbnQmLCBIYXNoTWFwPEF0bwogc3RhdGljIE5TRGljdGlvbmFyeSAqYXR0
cmlidXRlc0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKCkKIHsKICAgICAvLyBUaGlzIGZ1
bmN0aW9uIG5lZWRzIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIGlkZW50aWNhbGx5IG5hbWVkIG9u
ZSBpbiBXZWJLaXRMZWdhY3ksIHdoaWNoIGlzIHVzZWQgb24gb2xkZXIgT1MgdmVyc2lvbnMuCi0g
ICAgUmV0YWluUHRyPE5TQXJyYXk+IGV4Y2x1ZGVkRWxlbWVudHMgPSBhZG9wdE5TKFtbTlNBcnJh
eSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgorICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
ZXhjbHVkZWRFbGVtZW50cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhPYmplY3RzOgogICAgICAgICAvLyBPbWl0IHN0eWxlIHNpbmNlIHdlIHdhbnQgc3R5bGUgdG8g
YmUgaW5saW5lIHNvIHRoZSBmcmFnbWVudCBjYW4gYmUgZWFzaWx5IGluc2VydGVkLgogICAgICAg
ICBAInN0eWxlIiwKICAgICAgICAgLy8gT21pdCB4bWwgc28gdGhlIHJlc3VsdCBpcyBub3QgWEhU
TUwuCkBAIC0xNDQsOCArMTY3LDE2IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXNG
b3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbigpCiAgICAgICAgIEAiZG9jdHlwZSIsIEAiaHRt
bCIsIEAiaGVhZCIsIEAiYm9keSIsCiAgICAgICAgIC8vIE9taXQgZGVwcmVjYXRlZCB0YWdzLgog
ICAgICAgICBAImFwcGxldCIsIEAiYmFzZWZvbnQiLCBAImNlbnRlciIsIEAiZGlyIiwgQCJmb250
IiwgQCJtZW51IiwgQCJzIiwgQCJzdHJpa2UiLCBAInUiLAorI2lmICFFTkFCTEUoQVRUQUNITUVO
VF9FTEVNRU5UKQogICAgICAgICAvLyBPbWl0IG9iamVjdCBzbyBubyBmaWxlIGF0dGFjaG1lbnRz
IGFyZSBwYXJ0IG9mIHRoZSBmcmFnbWVudC4KLSAgICAgICAgQCJvYmplY3QiLCBuaWxdKTsKKyAg
ICAgICAgQCJvYmplY3QiLAorI2VuZGlmCisgICAgICAgIG5pbF0pOworCisjaWYgRU5BQkxFKEFU
VEFDSE1FTlRfRUxFTUVOVCkKKyAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkuYXR0YWNobWVudEVsZW1lbnRFbmFibGVkKCkpCisgICAgICAgIFtleGNsdWRl
ZEVsZW1lbnRzIGFkZE9iamVjdDpAIm9iamVjdCJdOworI2VuZGlmCiAKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgTlNFeGNsdWRlZEVsZW1lbnRzRG9jdW1l
bnRBdHRyaWJ1dGUgPSBAIkV4Y2x1ZGVkRWxlbWVudHMiOwpAQCAtMjIwLDcgKzI1MSw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2RpZERpc2FibGVJbWFnZSB7IGZhbHNlIH07CiB9OwogCi1SZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUm
IGZyYW1lLCBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IFJlZlB0cjxCbG9iPj4mIHVybFRvQmxvYk1hcCkKK1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhGcmFtZSYgZnJhbWUsIE5TQXR0cmlidXRlZFN0
cmluZyAqc3RyaW5nLCBCbG9iUmVwbGFjZW1lbnRJbmZvJiByZXBsYWNlbWVudEluZm8pCiB7CiAg
ICAgaWYgKCFmcmFtZS5wYWdlKCkgfHwgIWZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtMjM5LDcgKzI3MCw4IEBAIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhGcmFtZSYgZnJhbWUsIE5TQXR0cmlidXRlCiAg
ICAgICAgIGF1dG8gYmxvYiA9IEJsb2I6OmNyZWF0ZShzdWJyZXNvdXJjZS0+ZGF0YSgpLCBzdWJy
ZXNvdXJjZS0+bWltZVR5cGUoKSk7CiAgICAgICAgIFN0cmluZyBibG9iVVJMID0gRE9NVVJMOjpj
cmVhdGVPYmplY3RVUkwoZG9jdW1lbnQsIGJsb2IpOwogICAgICAgICBibG9iVVJMTWFwLnNldChz
dWJyZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCksIGJsb2JVUkwpOwotICAgICAgICB1cmxUb0Jsb2JN
YXAuc2V0KGJsb2JVUkwsIFdURk1vdmUoYmxvYikpOworICAgICAgICByZXBsYWNlbWVudEluZm8u
YmxvYlVSTFRvQmxvYk1hcC5zZXQoYmxvYlVSTCwgV1RGTW92ZShibG9iKSk7CisgICAgICAgIHJl
cGxhY2VtZW50SW5mby5ibG9iVVJMVG9SZXBsYWNlZFVSTE1hcC5zZXQoYmxvYlVSTCwgc3VicmVz
b3VyY2UtPnVybCgpLnN0cmluZygpKTsKICAgICB9CiAgICAgcmVwbGFjZVN1YnJlc291cmNlVVJM
cygqZnJhZ21lbnRBbmRSZXNvdXJjZXMuZnJhZ21lbnQsIFdURk1vdmUoYmxvYlVSTE1hcCkpOwog
CkBAIC0yNjksNyArMzAxLDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TWFya3VwQW5kQXJjaGl2
ZT4gZXh0cmFjdE1hcmt1cEFuZEFyY2hpdmUoU2hhcmVkQnVmZmVyJiBidWYKICAgICByZXR1cm4g
TWFya3VwQW5kQXJjaGl2ZSB7IFN0cmluZzo6ZnJvbVVURjgobWFpblJlc291cmNlLT5kYXRhKCku
ZGF0YSgpLCBtYWluUmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpLCBtYWluUmVzb3VyY2UucmVsZWFz
ZU5vbk51bGwoKSwgYXJjaGl2ZS5yZWxlYXNlTm9uTnVsbCgpIH07CiB9CiAKLXN0YXRpYyBTdHJp
bmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVzdGluYXRpb25Eb2N1bWVu
dCwgTWFya3VwQW5kQXJjaGl2ZSYgbWFya3VwQW5kQXJjaGl2ZSwgY29uc3Qgc3RkOjpmdW5jdGlv
bjxib29sKGNvbnN0IFN0cmluZyk+JiBjYW5TaG93TUlNRVR5cGVBc0hUTUwsIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+JiB1cmxUb0Jsb2JNYXApCitzdGF0aWMgU3RyaW5nIHNh
bml0aXplTWFya3VwV2l0aEFyY2hpdmUoRG9jdW1lbnQmIGRlc3RpbmF0aW9uRG9jdW1lbnQsIE1h
cmt1cEFuZEFyY2hpdmUmIG1hcmt1cEFuZEFyY2hpdmUsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9v
bChjb25zdCBTdHJpbmcpPiYgY2FuU2hvd01JTUVUeXBlQXNIVE1MLCBCbG9iUmVwbGFjZW1lbnRJ
bmZvJiByZXBsYWNlbWVudEluZm8pCiB7CiAgICAgYXV0byBwYWdlID0gY3JlYXRlUGFnZUZvclNh
bml0aXppbmdXZWJDb250ZW50KCk7CiAgICAgRG9jdW1lbnQqIHN0YWdpbmdEb2N1bWVudCA9IHBh
Z2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCk7CkBAIC0yODEsNyArMzEzLDggQEAgc3RhdGljIFN0
cmluZyBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNoaXZlKERvY3VtZW50JiBkZXN0aW5hdGlvbkRvY3Vt
ZW50LCBNYXJrdXBBbmQKICAgICAgICAgYXV0byBibG9iID0gQmxvYjo6Y3JlYXRlKHN1YnJlc291
cmNlLT5kYXRhKCksIHN1YnJlc291cmNlLT5taW1lVHlwZSgpKTsKICAgICAgICAgU3RyaW5nIGJs
b2JVUkwgPSBET01VUkw6OmNyZWF0ZU9iamVjdFVSTChkZXN0aW5hdGlvbkRvY3VtZW50LCBibG9i
KTsKICAgICAgICAgYmxvYlVSTE1hcC5zZXQoc3VicmVzb3VyY2UtPnVybCgpLnN0cmluZygpLCBi
bG9iVVJMKTsKLSAgICAgICAgdXJsVG9CbG9iTWFwLnNldChibG9iVVJMLCBXVEZNb3ZlKGJsb2Ip
KTsKKyAgICAgICAgcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb0Jsb2JNYXAuc2V0KGJsb2JVUkws
IFdURk1vdmUoYmxvYikpOworICAgICAgICByZXBsYWNlbWVudEluZm8uYmxvYlVSTFRvUmVwbGFj
ZWRVUkxNYXAuc2V0KGJsb2JVUkwsIHN1YnJlc291cmNlLT51cmwoKS5zdHJpbmcoKSk7CiAgICAg
fQogCiAgICAgYXV0byBjb250ZW50T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtYXJr
dXBBbmRBcmNoaXZlLm1haW5SZXNvdXJjZS0+dXJsKCkpOwpAQCAtMjk3LDcgKzMzMCw3IEBAIHN0
YXRpYyBTdHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVzdGluYXRp
b25Eb2N1bWVudCwgTWFya3VwQW5kCiAgICAgICAgIGF1dG8gc3ViZnJhbWVVUkwgPSBzdWJmcmFt
ZU1haW5SZXNvdXJjZS0+dXJsKCk7CiAgICAgICAgIE1hcmt1cEFuZEFyY2hpdmUgc3ViZnJhbWVD
b250ZW50ID0geyBTdHJpbmc6OmZyb21VVEY4KHN1YmZyYW1lTWFpblJlc291cmNlLT5kYXRhKCku
ZGF0YSgpLCBzdWJmcmFtZU1haW5SZXNvdXJjZS0+ZGF0YSgpLnNpemUoKSksCiAgICAgICAgICAg
ICBzdWJmcmFtZU1haW5SZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpLCBzdWJmcmFtZUFyY2hpdmUu
Y29weVJlZigpIH07Ci0gICAgICAgIGF1dG8gc3ViZnJhbWVNYXJrdXAgPSBzYW5pdGl6ZU1hcmt1
cFdpdGhBcmNoaXZlKGRlc3RpbmF0aW9uRG9jdW1lbnQsIHN1YmZyYW1lQ29udGVudCwgY2FuU2hv
d01JTUVUeXBlQXNIVE1MLCB1cmxUb0Jsb2JNYXApOworICAgICAgICBhdXRvIHN1YmZyYW1lTWFy
a3VwID0gc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShkZXN0aW5hdGlvbkRvY3VtZW50LCBzdWJm
cmFtZUNvbnRlbnQsIGNhblNob3dNSU1FVHlwZUFzSFRNTCwgcmVwbGFjZW1lbnRJbmZvKTsKIAog
ICAgICAgICBDU3RyaW5nIHV0ZjggPSBzdWJmcmFtZU1hcmt1cC51dGY4KCk7CiAgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBibG9iQnVmZmVyOwpAQCAtMzA3LDcgKzM0MCw4IEBAIHN0YXRpYyBTdHJp
bmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVzdGluYXRpb25Eb2N1bWVu
dCwgTWFya3VwQW5kCiAKICAgICAgICAgU3RyaW5nIHN1YmZyYW1lQmxvYlVSTCA9IERPTVVSTDo6
Y3JlYXRlT2JqZWN0VVJMKGRlc3RpbmF0aW9uRG9jdW1lbnQsIGJsb2IpOwogICAgICAgICBibG9i
VVJMTWFwLnNldChzdWJmcmFtZVVSTC5zdHJpbmcoKSwgc3ViZnJhbWVCbG9iVVJMKTsKLSAgICAg
ICAgdXJsVG9CbG9iTWFwLnNldChzdWJmcmFtZUJsb2JVUkwsIFdURk1vdmUoYmxvYikpOworICAg
ICAgICByZXBsYWNlbWVudEluZm8uYmxvYlVSTFRvQmxvYk1hcC5zZXQoc3ViZnJhbWVCbG9iVVJM
LCBXVEZNb3ZlKGJsb2IpKTsKKyAgICAgICAgcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb1JlcGxh
Y2VkVVJMTWFwLnNldChzdWJmcmFtZUJsb2JVUkwsIHN1YmZyYW1lVVJMLnN0cmluZygpKTsKICAg
ICB9CiAKICAgICByZXBsYWNlU3VicmVzb3VyY2VVUkxzKGZyYWdtZW50LmdldCgpLCBXVEZNb3Zl
KGJsb2JVUkxNYXApKTsKQEAgLTMzOCwxNiArMzcyLDE2IEBAIGJvb2wgV2ViQ29udGVudFJlYWRl
cjo6cmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+IHVy
bFRvQmxvYk1hcDsKKyAgICBCbG9iUmVwbGFjZW1lbnRJbmZvIHJlcGxhY2VtZW50SW5mbzsKICAg
ICBTdHJpbmcgc2FuaXRpemVkTWFya3VwID0gc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZSgqZnJh
bWUuZG9jdW1lbnQoKSwgKnJlc3VsdCwgWyZdIChjb25zdCBTdHJpbmcmIHR5cGUpIHsKICAgICAg
ICAgcmV0dXJuIGZyYW1lLmxvYWRlcigpLmNsaWVudCgpLmNhblNob3dNSU1FVHlwZUFzSFRNTCh0
eXBlKTsKLSAgICB9LCB1cmxUb0Jsb2JNYXApOworICAgIH0sIHJlcGxhY2VtZW50SW5mbyk7CiAg
ICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50KCks
IHNhbml0aXplZE1hcmt1cCwgYmxhbmtVUkwoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5D
b250ZW50KTsKIAogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVu
dCwgV1RGTW92ZSh1cmxUb0Jsb2JNYXApKTsKKyAgICByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0
YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQsIFdURk1vdmUocmVwbGFjZW1lbnRJbmZvKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM2NywxMCArNDAxLDEwIEBAIGJvb2wgV2ViQ29u
dGVudE1hcmt1cFJlYWRlcjo6cmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBS
ZWZQdHI8QmxvYj4+IHVybFRvQmxvYk1hcDsKKyAgICBCbG9iUmVwbGFjZW1lbnRJbmZvIHJlcGxh
Y2VtZW50SW5mbzsKICAgICBtYXJrdXAgPSBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNoaXZlKCpmcmFt
ZS5kb2N1bWVudCgpLCAqcmVzdWx0LCBbJl0gKGNvbnN0IFN0cmluZyYgdHlwZSkgewogICAgICAg
ICByZXR1cm4gZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuY2FuU2hvd01JTUVUeXBlQXNIVE1MKHR5
cGUpOwotICAgIH0sIHVybFRvQmxvYk1hcCk7CisgICAgfSwgcmVwbGFjZW1lbnRJbmZvKTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDIwLDEyICs0NTQsMTIgQEAgYm9vbCBXZWJDb250ZW50
TWFya3VwUmVhZGVyOjpyZWFkSFRNTChjb25zdCBTdHJpbmcmIHN0cmluZykKIAogc3RhdGljIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5n
KEZyYW1lJiBmcmFtZSwgTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCiB7Ci0gICAgSGFzaE1h
cDxBdG9taWNTdHJpbmcsIFJlZlB0cjxCbG9iPj4gdXJsVG9CbG9iTWFwOwotICAgIGF1dG8gZnJh
Z21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhmcmFtZSwgc3RyaW5nLCB1cmxU
b0Jsb2JNYXApOworICAgIEJsb2JSZXBsYWNlbWVudEluZm8gcmVwbGFjZW1lbnRJbmZvOworICAg
IGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhmcmFtZSwgc3Ry
aW5nLCByZXBsYWNlbWVudEluZm8pOwogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNl
c3NhcnkoKmZyYWdtZW50LCBXVEZNb3ZlKHVybFRvQmxvYk1hcCkpOworICAgIHJlcGxhY2VSaWNo
Q29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwgV1RGTW92ZShyZXBs
YWNlbWVudEluZm8pKTsKICAgICByZXR1cm4gZnJhZ21lbnQ7CiB9CiAKQEAgLTUwNCw3ICs1Mzgs
NyBAQCBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRJbWFnZShSZWY8U2hhcmVkQnVmZmVyPiYm
IGJ1ZmZlciwgY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lm
TmVjZXNzYXJ5KCpmcmFnbWVudCwge3sgYmxvYlVSTCwgV1RGTW92ZShibG9iKSB9fSk7CisgICAg
cmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoKmZyYWdtZW50LCB7
e3sgYmxvYlVSTCwgV1RGTW92ZShibG9iKSB9fSwgeyB9fSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBj
N2VkOWYxNzAwN2Q1OGNmNjFlNmQwYzQ3ZTY0ZGM1YTVjM2I0MmEwLi41YjUxZTNlODZmN2ZjNmRi
NzE1YzVjZDRmMGIzMmNkZjE5M2JiMWE2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMTItMTggIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0F0dGFjaG1lbnQgU3Vw
cG9ydF0gU3VwcG9ydCByZXByZXNlbnRpbmcgcGFzdGVkIG9yIGRyb3BwZWQgY29udGVudCB1c2lu
ZyBhdHRhY2htZW50IGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODA4OTIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MDY0MjEwPgor
CisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgQWRkcyBhIG5ldyBB
UEkgdGVzdCB0byBleGVyY2lzZSBwYXN0aW5nIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIHdpdGggbXVs
dGlwbGUgYXR0YWNobWVudHMgb2YgZGlmZmVyZW50IHR5cGVzLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbToKKyAgICAgICAg
KHRlc3RaSVBEYXRhKToKKyAgICAgICAgKHBsYXRmb3JtQ29weVJpY2hUZXh0V2l0aE11bHRpcGxl
QXR0YWNobWVudHMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTctMTIt
MTggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhYmls
aXR5IHRvIEFQSSB0ZXN0IFNlcnZpY2UgV29ya2VycyB2aWEgYSBjdXN0b20gcHJvdG9jb2wuCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNo
bWVudFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0
dGFjaG1lbnRUZXN0cy5tbQppbmRleCAzZjhlNjFkMWNkMDY0OTYwNTQwZjcyZmI3ODRhY2RmYzAz
YmVkNDhiLi4xNWQzMWZhYTYxNDM0YzAxNzk3MTZmNTZkMTBlMzM2ZjI5MDhlMTM0IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRl
c3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRh
Y2htZW50VGVzdHMubW0KQEAgLTEzNiw2ICsxMzYsMTIgQEAgc3RhdGljIFJldGFpblB0cjxUZXN0
V0tXZWJWaWV3PiB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCkKICAgICByZXR1cm4gd2Vi
VmlldzsKIH0KIAorc3RhdGljIE5TRGF0YSAqdGVzdFpJUERhdGEoKQoreworICAgIE5TVVJMICp6
aXBGaWxlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImNvbXBy
ZXNzZWQtZmlsZXMiIHdpdGhFeHRlbnNpb246QCJ6aXAiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl07CisgICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09m
VVJMOnppcEZpbGVVUkxdOworfQorCiBzdGF0aWMgTlNEYXRhICp0ZXN0SFRNTERhdGEoKQogewog
ICAgIHJldHVybiBbQCI8YSBocmVmPScjJz5UaGlzIGlzIHNvbWUgSFRNTCBkYXRhPC9hPiIgZGF0
YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwpAQCAtMzA4LDYgKzMxNCwyOCBA
QCBAZW5kCiAKICNwcmFnbWEgbWFyayAtIFBsYXRmb3JtIHRlc3RpbmcgaGVscGVyIGZ1bmN0aW9u
cwogCit2b2lkIHBsYXRmb3JtQ29weVJpY2hUZXh0V2l0aE11bHRpcGxlQXR0YWNobWVudHMoKQor
eworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdE5TKFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5p
dFdpdGhEYXRhOnRlc3RJbWFnZURhdGEoKSBvZlR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBOR10p
OworICAgIGF1dG8gcGRmID0gYWRvcHROUyhbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRX
aXRoRGF0YTp0ZXN0UERGRGF0YSgpIG9mVHlwZTooTlNTdHJpbmcgKilrVVRUeXBlUERGXSk7Cisg
ICAgYXV0byB6aXAgPSBhZG9wdE5TKFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhE
YXRhOnRlc3RaSVBEYXRhKCkgb2ZUeXBlOihOU1N0cmluZyAqKWtVVFR5cGVaaXBBcmNoaXZlXSk7
CisKKyAgICBhdXRvIHJpY2hUZXh0ID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRdKTsKKyAgICBbcmljaFRleHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpb
TlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDppbWFnZS5n
ZXQoKV1dOworICAgIFtyaWNoVGV4dCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltOU0F0dHJpYnV0
ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50OnBkZi5nZXQoKV1dOworICAg
IFtyaWNoVGV4dCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltOU0F0dHJpYnV0ZWRTdHJpbmcgYXR0
cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50OnppcC5nZXQoKV1dOworCisjaWYgUExBVEZPUk0o
TUFDKQorICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgZ2VuZXJh
bFBhc3RlYm9hcmRdOworICAgIFtwYXN0ZWJvYXJkIGNsZWFyQ29udGVudHNdOworICAgIFtwYXN0
ZWJvYXJkIHdyaXRlT2JqZWN0czpAWyByaWNoVGV4dC5nZXQoKSBdXTsKKyNlbGlmIFBMQVRGT1JN
KElPUykKKyAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGlu
aXRdKTsKKyAgICBbaXRlbSByZWdpc3Rlck9iamVjdDpyaWNoVGV4dC5nZXQoKSB2aXNpYmlsaXR5
Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKKyAgICBbVUlQYXN0
ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXS5pdGVtUHJvdmlkZXJzID0gQFsgaXRlbS5nZXQoKSBd
OworI2VuZGlmCit9CisKIHZvaWQgcGxhdGZvcm1Db3B5UmljaFRleHRXaXRoSW1hZ2UoKQogewog
ICAgIGF1dG8gcmljaFRleHQgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdF0pOwpAQCAtODAwLDYgKzgyOCw0OCBAQCBURVNUKFdLQXR0YWNobWVudFRlc3Rz
LCBJbnNlcnRQYXN0ZWRBdHRyaWJ1dGVkU3RyaW5nQ29udGFpbmluZ0ltYWdlKQogICAgIH0KIH0K
IAorVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgSW5zZXJ0UGFzdGVkQXR0cmlidXRlZFN0cmluZ0Nv
bnRhaW5pbmdNdWx0aXBsZUF0dGFjaG1lbnRzKQoreworICAgIHBsYXRmb3JtQ29weVJpY2hUZXh0
V2l0aE11bHRpcGxlQXR0YWNobWVudHMoKTsKKworICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50
PiBpbWFnZUF0dGFjaG1lbnQ7CisgICAgUmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IHppcEF0dGFj
aG1lbnQ7CisgICAgUmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IHBkZkF0dGFjaG1lbnQ7CisgICAg
YXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOworICAgIHsKKyAg
ICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5n
ZXQoKSk7CisgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5k
OkAiUGFzdGUiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIEVYUEVDVF9FUSgwVSwgb2JzZXJ2ZXIu
b2JzZXJ2ZXIoKS5yZW1vdmVkLmNvdW50KTsKKyAgICAgICAgRVhQRUNUX0VRKDNVLCBvYnNlcnZl
ci5vYnNlcnZlcigpLmluc2VydGVkLmNvdW50KTsKKyAgICAgICAgZm9yIChfV0tBdHRhY2htZW50
ICphdHRhY2htZW50IGluIG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWQpIHsKKyAgICAgICAg
ICAgIE5TRGF0YSAqZGF0YSA9IFthdHRhY2htZW50IHN5bmNocm9ub3VzbHlSZXF1ZXN0RGF0YTpu
aWxdOworICAgICAgICAgICAgaWYgKFtkYXRhIGlzRXF1YWxUb0RhdGE6dGVzdFpJUERhdGEoKV0p
CisgICAgICAgICAgICAgICAgemlwQXR0YWNobWVudCA9IGF0dGFjaG1lbnQ7CisgICAgICAgICAg
ICBlbHNlIGlmIChbZGF0YSBpc0VxdWFsVG9EYXRhOnRlc3RQREZEYXRhKCldKQorICAgICAgICAg
ICAgICAgIHBkZkF0dGFjaG1lbnQgPSBhdHRhY2htZW50OworICAgICAgICAgICAgZWxzZSBpZiAo
W2RhdGEgaXNFcXVhbFRvRGF0YTp0ZXN0SW1hZ2VEYXRhKCldKQorICAgICAgICAgICAgICAgIGlt
YWdlQXR0YWNobWVudCA9IGF0dGFjaG1lbnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFWFBF
Q1RfVFJVRSh6aXBBdHRhY2htZW50ICYmIGltYWdlQXR0YWNobWVudCAmJiBwZGZBdHRhY2htZW50
KTsKKyAgICBFWFBFQ1RfRVEoMywgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2F0dGFjaG1lbnQnKS5sZW5ndGgiXS5pbnRl
Z2VyVmFsdWUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiaW1hZ2UvcG5nIiwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2F0
dGFjaG1lbnQnKVswXS5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoImFwcGxpY2F0aW9uL3BkZiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhdHRhY2htZW50JylbMV0uZ2V0QXR0cmli
dXRlKCd0eXBlJykiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNhdGlvbi96aXAiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxl
Y3RvckFsbCgnYXR0YWNobWVudCcpWzJdLmdldEF0dHJpYnV0ZSgndHlwZScpIl0pOworCisgICAg
eworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJW
aWV3LmdldCgpKTsKKyAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENv
bW1hbmQ6QCJTZWxlY3RBbGwiIGFyZ3VtZW50Om5pbF07CisgICAgICAgIFt3ZWJWaWV3IF9zeW5j
aHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiRGVsZXRlQmFja3dhcmQiIGFyZ3VtZW50Om5p
bF07CisgICAgICAgIE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqcmVtb3ZlZEF0dGFjaG1lbnRz
ID0gW29ic2VydmVyLm9ic2VydmVyKCkgcmVtb3ZlZF07CisgICAgICAgIEVYUEVDVF9FUSgzVSwg
cmVtb3ZlZEF0dGFjaG1lbnRzLmNvdW50KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW3JlbW92ZWRB
dHRhY2htZW50cyBjb250YWluc09iamVjdDp6aXBBdHRhY2htZW50LmdldCgpXSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKFtyZW1vdmVkQXR0YWNobWVudHMgY29udGFpbnNPYmplY3Q6aW1hZ2VBdHRh
Y2htZW50LmdldCgpXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtyZW1vdmVkQXR0YWNobWVudHMg
Y29udGFpbnNPYmplY3Q6cGRmQXR0YWNobWVudC5nZXQoKV0pOworICAgIH0KK30KKwogI3ByYWdt
YSBtYXJrIC0gUGxhdGZvcm0tc3BlY2lmaWMgdGVzdHMKIAogI2lmIFBMQVRGT1JNKE1BQykK
</data>

          </attachment>
      

    </bug>

</bugzilla>