<?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>181319</bug_id>
          
          <creation_ts>2018-01-04 21:57:26 -0800</creation_ts>
          <short_desc>[RenderTreeBuilder] Move RenderBlock addChild logic to RenderTreeBuilder</short_desc>
          <delta_ts>2018-01-08 09:40:26 -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>Layout and Rendering</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1386069</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-01-04 21:57:26 -0800</bug_when>
    <thetext>ssia.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386070</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-04 21:57:47 -0800</bug_when>
    <thetext>&lt;rdar://problem/36313464&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386072</commentid>
    <comment_count>2</comment_count>
      <attachid>330531</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-01-04 22:04:05 -0800</bug_when>
    <thetext>Created attachment 330531
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386074</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-04 22:06:37 -0800</bug_when>
    <thetext>Attachment 330531 did not pass style-queue:


ERROR: Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp:126:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386075</commentid>
    <comment_count>4</comment_count>
      <attachid>330532</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-01-04 22:07:33 -0800</bug_when>
    <thetext>Created attachment 330532
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386076</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-04 22:09:39 -0800</bug_when>
    <thetext>Attachment 330532 did not pass style-queue:


ERROR: Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp:126:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386132</commentid>
    <comment_count>6</comment_count>
      <attachid>330532</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-01-05 08:31:43 -0800</bug_when>
    <thetext>Comment on attachment 330532
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:2980
&gt; -    makeChildrenNonInline();
&gt; +    RenderTreeBuilder::makeChildrenNonInline(*this);

For consistency and future I think these should be non-static members of RenderTreeBuilder. You can use RenderTreeBuilder::current() to get the instance for now.

&gt; Source/WebCore/rendering/updating/RenderTreeBuilder.h:53
&gt; +    static void makeChildrenNonInline(RenderBlock&amp; parent, RenderObject* insertionPoint = nullptr);
&gt; +    static RenderObject* splitAnonymousBoxesAroundChild(RenderBox&amp; parent, RenderObject* beforeChild);

For consistency and future I think these should be non-static members of RenderTreeBuilder. You can use RenderTreeBuilder::current() to get the instance without having to pass it around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386146</commentid>
    <comment_count>7</comment_count>
      <attachid>330551</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-01-05 09:15:50 -0800</bug_when>
    <thetext>Created attachment 330551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386147</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-05 09:18:10 -0800</bug_when>
    <thetext>Attachment 330551 did not pass style-queue:


ERROR: Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp:126:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386752</commentid>
    <comment_count>9</comment_count>
      <attachid>330706</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-01-08 09:08:17 -0800</bug_when>
    <thetext>Created attachment 330706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386753</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-08 09:10:26 -0800</bug_when>
    <thetext>Attachment 330706 did not pass style-queue:


ERROR: Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp:126:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386765</commentid>
    <comment_count>11</comment_count>
      <attachid>330706</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-08 09:40:24 -0800</bug_when>
    <thetext>Comment on attachment 330706
Patch

Clearing flags on attachment: 330706

Committed r226516: &lt;https://trac.webkit.org/changeset/226516&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386766</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-08 09:40:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330531</attachid>
            <date>2018-01-04 22:04:05 -0800</date>
            <delta_ts>2018-01-04 22:07:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181319-20180104220404.patch</filename>
            <type>text/plain</type>
            <size>49966</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MzIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTNhNjU3NTU5OTlmNWUz
ZDMxZGFhNDEyNmE1MGJkMGQzMjVlN2RjNC4uZWY0MzYzYmZiMzBiMTg0MjEwZjcyZTdmOGQzNzQy
YzYxY2EwOGZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE4LTAxLTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1JlbmRlclRyZWVCdWlsZGVy
XSBNb3ZlIFJlbmRlckJsb2NrIGFkZENoaWxkIGxvZ2ljIHRvIFJlbmRlclRyZWVCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEzMTkKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MzEzNDY0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYWJvdXQgbW92aW5nIHRoZSBjb2RlLCBu
byBjbGVhbnVwIGFuZC9vciBub3JtYWxpemF0aW9uICh1bmZvcnR1bmF0ZWx5IGl0IGFsc28gbWVh
bnMKKyAgICAgICAgc29tZSB0ZW1wb3JhcnkgY2hhbmdlcykuICAKKworICAgICAgICBObyBjaGFu
Z2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGlu
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGlsZEJlY2FtZU5vbklu
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVmb3Jl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDaGlsZFRvQ29u
dGludWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmdldElubGluZVJ1bik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9uSW5s
aW5lKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtCb3hG
b3JSZWxheW91dEFmdGVyU3BsaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieUJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6Om1vdmVDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QmFzZTo6bW92ZUJsb2NrQ2hpbGRyZW4pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6YWRkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtCb3hG
b3JSZWxheW91dEFmdGVyU3BsaXQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW5saW5lUnVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpSZW5kZXJUcmVlQnVpbGRlcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGRUb1JlbmRl
ckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGls
ZFRvUmVuZGVyQmxvY2tJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUcmVlQnVpbGRlcjo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRyZWVCdWlsZGVyOjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQpOgor
ICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OmJsb2NrQnVpbGRlcik6CisgICAgICAgICog
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRpbnVhdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2s6OkJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVCdWlsZGVyOjpCbG9jazo6aW5zZXJ0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjppbnNlcnRDaGlsZFRvQ29udGludWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpCbG9jazo6aW5zZXJ0Q2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVC
dWlsZGVyQmxvY2suaDogQWRkZWQuCisKIDIwMTgtMDEtMDIgIE9sZWtzYW5kciBTa2FjaGtvdiAg
PGdza2FjaGtvdkBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IHNlbmRpbmcgbW9k
dWxlIHRvIGlmcmFtZSBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA3ZjZiODM3YWI5MzdlZThiZDBk
Y2NiZTQyMjYzYWVlYzIyZGI3MDM2Li42MjhhOGMxMDk2MGE4NjlmNjJmMTBlYTZmMjQzODFhZDhk
NTc2OWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTk4Miw2ICsxOTgyLDcgQEAgcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5j
cHAKIAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcAorcmVuZGVyaW5n
L3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwCiByZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlQnVpbGRlckxpc3QuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDNiYjRiNTA5YzdmZmFhZWZmZGRmYmY5ZDBhYjIyNTc4
YTY3MTZkNS4uZTY5ZmQxMzY4NGRhZGEyZGQzZTI1MmQ4ZGRhZjJlZGFkOGRlZTNiYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzkzLDYgKzM5Myw3IEBACiAJCTExOTM0MDc5MUZFOEI5MjMwMDkzNUYxRSAvKiBSZW5kZXJUcmVl
QnVpbGRlclRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxMTkzNDA3NzFGRThCOTIzMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJUYWJsZS5o
ICovOyB9OwogCQkxMTkzNDA4QTFGRUIzNTVEMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJS
dWJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTkz
NDA4ODFGRUIzNTVEMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmggKi87IH07CiAJ
CTExOTM0MDk3MUZFRDcxNTUwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9s
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5MzQw
OTUxRkVENzE1NTAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyRm9ybUNvbnRyb2xzLmggKi87
IH07CisJCTExOTM0MEEzMUZFRTAyNDAwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckJsb2Nr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTkzNDBB
MTFGRUUwMjQwMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oICovOyB9OwogCQkx
MUUwNjdFRTFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMUUwNjdFRDFFNjI0
NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMEQ3QTgxNzEzNkVBNzAwNzdD
RTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDBEN0E3MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRX
cmFwcGFibGVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMTQwM0I5OTcwOUVCMTNBRjAwNzk3QzdGIC8qIERPTVdpbmRvdy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwM0I5OTUwOUVCMTNB
RjAwNzk3QzdGIC8qIERPTVdpbmRvdy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC01NTc0LDYgKzU1NzUsOCBAQAogCQkxMTkzNDA4ODFGRUIzNTVE
MDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clRyZWVCdWlsZGVyUnVieS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTkzNDA5
NDFGRUQ3MTU1MDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTkzNDA5NTFGRUQ3MTU1MDA5MzVGMUUgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1
aWxkZXJGb3JtQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTE5MzQw
QTAxRkVFMDI0MDAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTExOTM0MEExMUZFRTAyNDAwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRl
ckJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyQmxvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFFMDY3RUIxRTYyNDYxMzAwMTYyRDE2IC8qIFNpbXBs
ZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxMUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVy
YWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRD
b3ZlcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwRDdBNzE3MTM2RUE3
MDA3N0NFMDUgLyogU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNDU2NSw2ICsyNDU2OCw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlF
NDdDMzkyMDFGRTZFMEQ5MDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXIuY3BwICovLAogCQkJ
CUU0N0MzOTJBMUZFNkUwREUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlci5oICovLAorCQkJ
CTExOTM0MEEwMUZFRTAyNDAwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckJsb2NrLmNwcCAq
LywKKwkJCQkxMTkzNDBBMTFGRUUwMjQwMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJCbG9j
ay5oICovLAogCQkJCUU0N0MzOTIxMUZFNkUwREEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRl
ckZpcnN0TGV0dGVyLmNwcCAqLywKIAkJCQlFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oICovLAogCQkJCTExOTM0MDk0MUZFRDcxNTUwMDkz
NUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5jcHAgKi8sCkBAIC0yODk4NCw2
ICsyODk4OSw3IEBACiAJCQkJQkNFQTQ4ODcwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1l
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk4QzA4MjQ1RTU5MDAxRTlBQkMgLyogUmVu
ZGVyVHJlZUFzVGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5MkQxRkU2RTBGMzAwQkJC
QzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxMTkzNDBBMzFG
RUUwMjQwMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ3QzM5MzAxRkU2RTBGRDAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyRmlyc3RM
ZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTExOTM0MDk3MUZFRDcxNTUwMDkzNUYxRSAvKiBS
ZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5
MzIxRkU2RTEwNTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAxZjdkMjlm
M2Q0YzBjOTQyZGMzYTc5MDM0MzU0ZmMwOGVmY2IyOWUwLi40OTFhNmRmZmRlNmY1NGRlYTRkYTVm
ZGM2Mzk0ZDRmYTMxYzgwMmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKQEAgLTQ0Niw3MSArNDQ2LDYgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHkKICAgICBz
ZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4ob2xkU3R5bGUgJiYgZGlmZiA9PSBTdHlsZURp
ZmZlcmVuY2VMYXlvdXQgJiYgbmVlZHNMYXlvdXQoKSAmJiBib3JkZXJPclBhZGRpbmdMb2dpY2Fs
V2lkdGhDaGFuZ2VkKCpvbGRTdHlsZSwgc3R5bGUoKSkpOwogfQogCi1SZW5kZXJCbG9jayogUmVu
ZGVyQmxvY2s6OmNvbnRpbnVhdGlvbkJlZm9yZShSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQot
ewotICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcykK
LSAgICAgICAgcmV0dXJuIHRoaXM7Ci0KLSAgICBSZW5kZXJCbG9jayogbmV4dFRvTGFzdCA9IHRo
aXM7Ci0gICAgUmVuZGVyQmxvY2sqIGxhc3QgPSB0aGlzOwotICAgIGZvciAoYXV0byogY3VycmVu
dCA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihjb250aW51YXRpb24oKSk7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY3VycmVudC0+Y29udGludWF0aW9uKCkpKSB7Ci0g
ICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gY3VycmVu
dCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSBiZWZvcmVDaGls
ZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdDsKLSAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgbmV4dFRvTGFzdCA9IGxhc3Q7Ci0gICAgICAgIGxh
c3QgPSBjdXJyZW50OwotICAgIH0KLQotICAgIGlmICghYmVmb3JlQ2hpbGQgJiYgIWxhc3QtPmZp
cnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIG5leHRUb0xhc3Q7Ci0gICAgcmV0dXJuIGxhc3Q7
Ci19Ci0KLXZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkVG9Db250aW51YXRpb24oUmVuZGVyVHJl
ZUJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQotewotICAgIFJlbmRlckJsb2NrKiBmbG93ID0gY29udGlu
dWF0aW9uQmVmb3JlKGJlZm9yZUNoaWxkKTsKLSAgICBBU1NFUlQoIWJlZm9yZUNoaWxkIHx8IGlz
PFJlbmRlckJsb2NrPigqYmVmb3JlQ2hpbGQtPnBhcmVudCgpKSk7Ci0gICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGJlZm9yZUNoaWxkUGFyZW50ID0gbnVsbHB0cjsKLSAgICBpZiAoYmVmb3JlQ2hp
bGQpCi0gICAgICAgIGJlZm9yZUNoaWxkUGFyZW50ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxP
YmplY3Q+KGJlZm9yZUNoaWxkLT5wYXJlbnQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24gPSBmbG93LT5jb250aW51YXRpb24oKTsKLSAg
ICAgICAgaWYgKGNvbnRpbnVhdGlvbikKLSAgICAgICAgICAgIGJlZm9yZUNoaWxkUGFyZW50ID0g
Y29udGludWF0aW9uOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiZWZvcmVDaGlsZFBhcmVu
dCA9IGZsb3c7Ci0gICAgfQotCi0gICAgaWYgKG5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdu
b3JpbmdDb250aW51YXRpb24oYnVpbGRlciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxk
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgY2hpbGRJc05vcm1hbCA9IG5l
d0NoaWxkLT5pc0lubGluZSgpIHx8ICFuZXdDaGlsZC0+c3R5bGUoKS5jb2x1bW5TcGFuKCk7Ci0g
ICAgYm9vbCBiY3BJc05vcm1hbCA9IGJlZm9yZUNoaWxkUGFyZW50LT5pc0lubGluZSgpIHx8ICFi
ZWZvcmVDaGlsZFBhcmVudC0+c3R5bGUoKS5jb2x1bW5TcGFuKCk7Ci0gICAgYm9vbCBmbG93SXNO
b3JtYWwgPSBmbG93LT5pc0lubGluZSgpIHx8ICFmbG93LT5zdHlsZSgpLmNvbHVtblNwYW4oKTsK
LQotICAgIGlmIChmbG93ID09IGJlZm9yZUNoaWxkUGFyZW50KSB7Ci0gICAgICAgIGZsb3ctPmFk
ZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oYnVpbGRlciwgV1RGTW92ZShuZXdDaGlsZCksIGJl
Zm9yZUNoaWxkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBUaGUgZ29h
bCBoZXJlIGlzIHRvIG1hdGNoIHVwIGlmIHdlIGNhbiwgc28gdGhhdCB3ZSBjYW4gY29hbGVzY2Ug
YW5kIGNyZWF0ZSB0aGUKLSAgICAvLyBtaW5pbWFsICMgb2YgY29udGludWF0aW9ucyBuZWVkZWQg
Zm9yIHRoZSBpbmxpbmUuCi0gICAgaWYgKGNoaWxkSXNOb3JtYWwgPT0gYmNwSXNOb3JtYWwpIHsK
LSAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24o
YnVpbGRlciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoZmxvd0lzTm9ybWFsID09IGNoaWxkSXNOb3JtYWwpIHsKLSAgICAg
ICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWlsZGVyLCBXVEZNb3ZlKG5l
d0NoaWxkKSwgMCk7IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQuCi0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51
YXRpb24oYnVpbGRlciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKLX0KLQogUmVu
ZGVyUHRyPFJlbmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y2xvbmUoKSBjb25zdAogewogICAgIFJl
bmRlclB0cjxSZW5kZXJCbG9jaz4gY2xvbmVCbG9jazsKQEAgLTUzMywxMzggKzQ2OCwxMiBAQCBS
ZW5kZXJQdHI8UmVuZGVyQmxvY2s+IFJlbmRlckJsb2NrOjpjbG9uZSgpIGNvbnN0CiAKIHZvaWQg
UmVuZGVyQmxvY2s6OmFkZENoaWxkKFJlbmRlclRyZWVCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJQ
dHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsK
LSAgICBpZiAoY29udGludWF0aW9uKCkgJiYgIWlzQW5vbnltb3VzQmxvY2soKSkKLSAgICAgICAg
YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihidWlsZGVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3Jl
Q2hpbGQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihi
dWlsZGVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOworICAgIGJ1aWxkZXIuaW5z
ZXJ0Q2hpbGRUb1JlbmRlckJsb2NrKCp0aGlzLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hp
bGQpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9u
KFJlbmRlclRyZWVCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKLSAgICBpZiAoYmVmb3JlQ2hpbGQg
JiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMpIHsKLSAgICAgICAgUmVuZGVyRWxlbWVu
dCogYmVmb3JlQ2hpbGRDb250YWluZXIgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7Ci0gICAgICAg
IHdoaWxlIChiZWZvcmVDaGlsZENvbnRhaW5lci0+cGFyZW50KCkgIT0gdGhpcykKLSAgICAgICAg
ICAgIGJlZm9yZUNoaWxkQ29udGFpbmVyID0gYmVmb3JlQ2hpbGRDb250YWluZXItPnBhcmVudCgp
OwotICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGRDb250YWluZXIpOwotCi0gICAgICAgIGlmIChi
ZWZvcmVDaGlsZENvbnRhaW5lci0+aXNBbm9ueW1vdXMoKSkgewotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighYmVmb3JlQ2hpbGRDb250YWluZXIt
PmlzSW5saW5lKCkpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdGVkIGJlZm9yZUNo
aWxkIGlzIG5vdCBvbmUgb2Ygb3VyIGNoaWxkcmVuLCB0aGVuIHRoaXMgaXMgYmVjYXVzZQotICAg
ICAgICAgICAgLy8gdGhlcmUgaXMgYW4gYW5vbnltb3VzIGNvbnRhaW5lciB3aXRoaW4gdGhpcyBv
YmplY3QgdGhhdCBjb250YWlucyB0aGUgYmVmb3JlQ2hpbGQuCi0gICAgICAgICAgICBSZW5kZXJF
bGVtZW50KiBiZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5lciA9IGJlZm9yZUNoaWxkQ29udGFp
bmVyOwotICAgICAgICAgICAgaWYgKGJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVyLT5pc0Fu
b255bW91c0Jsb2NrKCkKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgICAgICAgICAg
ICAgLy8gRnVsbCBzY3JlZW4gcmVuZGVyZXJzIGFuZCBmdWxsIHNjcmVlbiBwbGFjZWhvbGRlcnMg
YWN0IGFzIGFub255bW91cyBibG9ja3MsIG5vdCB0YWJsZXM6Ci0gICAgICAgICAgICAgICAgfHwg
YmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXItPmlzUmVuZGVyRnVsbFNjcmVlbigpCi0gICAg
ICAgICAgICAgICAgfHwgYmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXItPmlzUmVuZGVyRnVs
bFNjcmVlblBsYWNlaG9sZGVyKCkKLSNlbmRpZgotICAgICAgICAgICAgICAgICkgewotICAgICAg
ICAgICAgICAgIC8vIEluc2VydCB0aGUgY2hpbGQgaW50byB0aGUgYW5vbnltb3VzIGJsb2NrIGJv
eCBpbnN0ZWFkIG9mIGhlcmUuCi0gICAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkLT5pc0lubGlu
ZSgpIHx8IGJlZm9yZUNoaWxkLT5wYXJlbnQoKS0+Zmlyc3RDaGlsZCgpICE9IGJlZm9yZUNoaWxk
KQotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKCpiZWZvcmVDaGlsZC0+
cGFyZW50KCksIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKCp0aGlzLCBX
VEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChiZWZvcmVDaGls
ZEFub255bW91c0NvbnRhaW5lci0+aXNUYWJsZSgpKTsKLQotICAgICAgICAgICAgaWYgKG5ld0No
aWxkLT5pc1RhYmxlUGFydCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGludG8gdGhl
IGFub255bW91cyB0YWJsZS4KLSAgICAgICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKCpi
ZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5lciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNo
aWxkKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGJlZm9yZUNoaWxkID0gc3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKGJlZm9yZUNo
aWxkKTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBib29sIG1hZGVCb3hlc05vbklubGluZSA9IGZhbHNlOwotCi0gICAgLy8gQSBibG9jayBo
YXMgdG8gZWl0aGVyIGhhdmUgYWxsIG9mIGl0cyBjaGlsZHJlbiBpbmxpbmUsIG9yIGFsbCBvZiBp
dHMgY2hpbGRyZW4gYXMgYmxvY2tzLgotICAgIC8vIFNvLCBpZiBvdXIgY2hpbGRyZW4gYXJlIGN1
cnJlbnRseSBpbmxpbmUgYW5kIGEgYmxvY2sgY2hpbGQgaGFzIHRvIGJlIGluc2VydGVkLCB3ZSBt
b3ZlIGFsbCBvdXIKLSAgICAvLyBpbmxpbmUgY2hpbGRyZW4gaW50byBhbm9ueW1vdXMgYmxvY2sg
Ym94ZXMuCi0gICAgaWYgKGNoaWxkcmVuSW5saW5lKCkgJiYgIW5ld0NoaWxkLT5pc0lubGluZSgp
ICYmICFuZXdDaGlsZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7Ci0gICAg
ICAgIC8vIFRoaXMgaXMgYSBibG9jayB3aXRoIGlubGluZSBjb250ZW50LiBXcmFwIHRoZSBpbmxp
bmUgY29udGVudCBpbiBhbm9ueW1vdXMgYmxvY2tzLgotICAgICAgICBtYWtlQ2hpbGRyZW5Ob25J
bmxpbmUoYmVmb3JlQ2hpbGQpOwotICAgICAgICBtYWRlQm94ZXNOb25JbmxpbmUgPSB0cnVlOwot
Ci0gICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhp
cykgewotICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzQmxvY2soKSk7Ci0gICAg
ICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmICghY2hpbGRyZW5JbmxpbmUoKSAmJiAobmV3Q2hpbGQtPmlzRmxvYXRp
bmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBuZXdDaGlsZC0+aXNJbmxpbmUoKSkpIHsKLSAg
ICAgICAgLy8gSWYgd2UncmUgaW5zZXJ0aW5nIGFuIGlubGluZSBjaGlsZCBidXQgYWxsIG9mIG91
ciBjaGlsZHJlbiBhcmUgYmxvY2tzLCB0aGVuIHdlIGhhdmUgdG8gbWFrZSBzdXJlCi0gICAgICAg
IC8vIGl0IGlzIHB1dCBpbnRvIGFuIGFub215b3VzIGJsb2NrIGJveC4gV2UgdHJ5IHRvIHVzZSBh
biBleGlzdGluZyBhbm9ueW1vdXMgYm94IGlmIHBvc3NpYmxlLCBvdGhlcndpc2UKLSAgICAgICAg
Ly8gYSBuZXcgb25lIGlzIGNyZWF0ZWQgYW5kIGluc2VydGVkIGludG8gb3VyIGxpc3Qgb2YgY2hp
bGRyZW4gaW4gdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9uLgotICAgICAgICBSZW5kZXJPYmplY3Qq
IGFmdGVyQ2hpbGQgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmco
KSA6IGxhc3RDaGlsZCgpOwotCi0gICAgICAgIGlmIChhZnRlckNoaWxkICYmIGFmdGVyQ2hpbGQt
PmlzQW5vbnltb3VzQmxvY2soKSkgewotICAgICAgICAgICAgYnVpbGRlci5pbnNlcnRDaGlsZChk
b3duY2FzdDxSZW5kZXJCbG9jaz4oKmFmdGVyQ2hpbGQpLCBXVEZNb3ZlKG5ld0NoaWxkKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmV3Q2hpbGQtPmlz
SW5saW5lKCkpIHsKLSAgICAgICAgICAgIC8vIE5vIHN1aXRhYmxlIGV4aXN0aW5nIGFub255bW91
cyBib3ggLSBjcmVhdGUgYSBuZXcgb25lLgotICAgICAgICAgICAgYXV0byBuZXdCb3ggPSBjcmVh
dGVBbm9ueW1vdXNCbG9jaygpOwotICAgICAgICAgICAgYXV0byYgYm94ID0gKm5ld0JveDsKLSAg
ICAgICAgICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoYnVpbGRlciwgV1RGTW92ZShuZXdCb3gpLCBi
ZWZvcmVDaGlsZCk7Ci0gICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKGJveCwgV1RGTW92
ZShuZXdDaGlsZCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7Ci0KLSAgICBSZW5kZXJCb3g6OmFkZENoaWxk
KGJ1aWxkZXIsIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7Ci0gCi0gICAgaWYgKG1h
ZGVCb3hlc05vbklubGluZSAmJiBpczxSZW5kZXJCbG9jaz4ocGFyZW50KCkpICYmIGlzQW5vbnlt
b3VzQmxvY2soKSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpwYXJlbnQoKSkucmVt
b3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayh0aGlzKTsKLSAgICAvLyB0aGlzIG9iamVjdCBtYXkg
YmUgZGVhZCBoZXJlCi19Ci0KLXN0YXRpYyB2b2lkIGdldElubGluZVJ1bihSZW5kZXJPYmplY3Qq
IHN0YXJ0LCBSZW5kZXJPYmplY3QqIGJvdW5kYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAg
IFJlbmRlck9iamVjdComIGlubGluZVJ1blN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAg
IFJlbmRlck9iamVjdComIGlubGluZVJ1bkVuZCkKLXsKLSAgICAvLyBCZWdpbm5pbmcgYXQgfHN0
YXJ0fCB3ZSBmaW5kIHRoZSBsYXJnZXN0IGNvbnRpZ3VvdXMgcnVuIG9mIGlubGluZXMgdGhhdAot
ICAgIC8vIHdlIGNhbi4gIFdlIGRlbm90ZSB0aGUgcnVuIHdpdGggc3RhcnQgYW5kIGVuZCBwb2lu
dHMsIHxpbmxpbmVSdW5TdGFydHwKLSAgICAvLyBhbmQgfGlubGluZVJ1bkVuZHwuICBOb3RlIHRo
YXQgdGhlc2UgdHdvIHZhbHVlcyBtYXkgYmUgdGhlIHNhbWUgaWYKLSAgICAvLyB3ZSBlbmNvdW50
ZXIgb25seSBvbmUgaW5saW5lLgotICAgIC8vCi0gICAgLy8gV2Ugc2tpcCBhbnkgbm9uLWlubGlu
ZXMgd2UgZW5jb3VudGVyIGFzIGxvbmcgYXMgd2UgaGF2ZW4ndCBmb3VuZCBhbnkKLSAgICAvLyBp
bmxpbmVzIHlldC4KLSAgICAvLwotICAgIC8vIHxib3VuZGFyeXwgaW5kaWNhdGVzIGEgbm9uLWlu
Y2x1c2l2ZSBib3VuZGFyeSBwb2ludC4gIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB8Ym91bmRhcnl8
Ci0gICAgLy8gaXMgaW5saW5lIG9yIG5vdCwgd2Ugd2lsbCBub3QgaW5jbHVkZSBpdCBpbiBhIHJ1
biB3aXRoIGlubGluZXMgYmVmb3JlIGl0LiAgSXQncyBhcyB0aG91Z2ggd2UgZW5jb3VudGVyZWQK
LSAgICAvLyBhIG5vbi1pbmxpbmUuCi0gICAgCi0gICAgLy8gU3RhcnQgYnkgc2tpcHBpbmcgYXMg
bWFueSBub24taW5saW5lcyBhcyB3ZSBjYW4uCi0gICAgUmVuZGVyT2JqZWN0ICogY3VyciA9IHN0
YXJ0OwotICAgIGJvb2wgc2F3SW5saW5lOwotICAgIGRvIHsKLSAgICAgICAgd2hpbGUgKGN1cnIg
JiYgIShjdXJyLT5pc0lubGluZSgpIHx8IGN1cnItPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0
aW9uZWQoKSkpCi0gICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlubGluZVJ1blN0YXJ0ID0gaW5saW5lUnVuRW5kID0gY3VycjsKLSAgICAg
ICAgCi0gICAgICAgIGlmICghY3VycikKLSAgICAgICAgICAgIHJldHVybjsgLy8gTm8gbW9yZSBp
bmxpbmUgY2hpbGRyZW4gdG8gYmUgZm91bmQuCi0gICAgICAgIAotICAgICAgICBzYXdJbmxpbmUg
PSBjdXJyLT5pc0lubGluZSgpOwotICAgICAgICAKLSAgICAgICAgY3VyciA9IGN1cnItPm5leHRT
aWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChjdXJyICYmIChjdXJyLT5pc0lubGluZSgpIHx8IGN1
cnItPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgJiYgKGN1cnIgIT0gYm91bmRh
cnkpKSB7Ci0gICAgICAgICAgICBpbmxpbmVSdW5FbmQgPSBjdXJyOwotICAgICAgICAgICAgaWYg
KGN1cnItPmlzSW5saW5lKCkpCi0gICAgICAgICAgICAgICAgc2F3SW5saW5lID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpOwotICAgICAgICB9Ci0gICAgfSB3
aGlsZSAoIXNhd0lubGluZSk7CisgICAgYnVpbGRlci5pbnNlcnRDaGlsZFRvUmVuZGVyQmxvY2tJ
Z25vcmluZ0NvbnRpbnVhdGlvbigqdGhpcywgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxk
KTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6ZGVsZXRlTGluZXMoKQpAQCAtNjczLDUwICs0ODIs
NiBAQCB2b2lkIFJlbmRlckJsb2NrOjpkZWxldGVMaW5lcygpCiAgICAgICAgIGNhY2hlLT5kZWZl
clJlY29tcHV0ZUlzSWdub3JlZChlbGVtZW50KCkpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpt
YWtlQ2hpbGRyZW5Ob25JbmxpbmUoUmVuZGVyT2JqZWN0KiBpbnNlcnRpb25Qb2ludCkKLXsgICAg
Ci0gICAgLy8gbWFrZUNoaWxkcmVuTm9uSW5saW5lIHRha2VzIGEgYmxvY2sgd2hvc2UgY2hpbGRy
ZW4gYXJlICphbGwqIGlubGluZSBhbmQgaXQKLSAgICAvLyBtYWtlcyBzdXJlIHRoYXQgaW5saW5l
IGNoaWxkcmVuIGFyZSBjb2FsZXNjZWQgdW5kZXIgYW5vbnltb3VzCi0gICAgLy8gYmxvY2tzLiAg
SWYgfGluc2VydGlvblBvaW50fCBpcyBkZWZpbmVkLCB0aGVuIGl0IHJlcHJlc2VudHMgdGhlIGlu
c2VydGlvbiBwb2ludCBmb3IKLSAgICAvLyB0aGUgbmV3IGJsb2NrIGNoaWxkIHRoYXQgaXMgY2F1
c2luZyB1cyB0byBoYXZlIHRvIHdyYXAgYWxsIHRoZSBpbmxpbmVzLiAgVGhpcwotICAgIC8vIG1l
YW5zIHRoYXQgd2UgY2Fubm90IGNvYWxlc2NlIGlubGluZXMgYmVmb3JlIHxpbnNlcnRpb25Qb2lu
dHwgd2l0aCBpbmxpbmVzIGZvbGxvd2luZwotICAgIC8vIHxpbnNlcnRpb25Qb2ludHwsIGJlY2F1
c2UgdGhlIG5ldyBjaGlsZCBpcyBnb2luZyB0byBiZSBpbnNlcnRlZCBpbiBiZXR3ZWVuIHRoZSBp
bmxpbmVzLAotICAgIC8vIHNwbGl0dGluZyB0aGVtLgotICAgIEFTU0VSVChpc0lubGluZUJsb2Nr
T3JJbmxpbmVUYWJsZSgpIHx8ICFpc0lubGluZSgpKTsKLSAgICBBU1NFUlQoIWluc2VydGlvblBv
aW50IHx8IGluc2VydGlvblBvaW50LT5wYXJlbnQoKSA9PSB0aGlzKTsKLQotICAgIHNldENoaWxk
cmVuSW5saW5lKGZhbHNlKTsKLQotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxk
KCk7Ci0gICAgaWYgKCFjaGlsZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVsZXRlTGluZXMo
KTsKLQotICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIGlubGluZVJ1
blN0YXJ0OwotICAgICAgICBSZW5kZXJPYmplY3QqIGlubGluZVJ1bkVuZDsKLSAgICAgICAgZ2V0
SW5saW5lUnVuKGNoaWxkLCBpbnNlcnRpb25Qb2ludCwgaW5saW5lUnVuU3RhcnQsIGlubGluZVJ1
bkVuZCk7Ci0KLSAgICAgICAgaWYgKCFpbmxpbmVSdW5TdGFydCkKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNoaWxkID0gaW5saW5lUnVuRW5kLT5uZXh0U2libGluZygpOwotCi0gICAg
ICAgIGF1dG8gbmV3QmxvY2sgPSBjcmVhdGVBbm9ueW1vdXNCbG9jaygpOwotICAgICAgICBhdXRv
JiBibG9jayA9ICpuZXdCbG9jazsKLSAgICAgICAgaW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3Zl
KG5ld0Jsb2NrKSwgaW5saW5lUnVuU3RhcnQpOwotICAgICAgICBtb3ZlQ2hpbGRyZW5UbygmYmxv
Y2ssIGlubGluZVJ1blN0YXJ0LCBjaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6
ZUFmdGVySW5zZXJ0aW9uOjpObyk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjID0gZmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4dFNpYmxpbmcoKSkK
LSAgICAgICAgQVNTRVJUKCFjLT5pc0lubGluZSgpKTsKLSNlbmRpZgotCi0gICAgcmVwYWludCgp
OwotfQotCiB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKFJl
bmRlckJsb2NrKiBjaGlsZCkKIHsKICAgICBBU1NFUlQoY2hpbGQtPmlzQW5vbnltb3VzQmxvY2so
KSk7CkBAIC0zMjEyLDcgKzI5NzcsNyBAQCBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyQmxvY2s6
Om91dGxpbmVTdHlsZUZvclJlcGFpbnQoKSBjb25zdAogCiB2b2lkIFJlbmRlckJsb2NrOjpjaGls
ZEJlY2FtZU5vbklubGluZShSZW5kZXJFbGVtZW50JikKIHsKLSAgICBtYWtlQ2hpbGRyZW5Ob25J
bmxpbmUoKTsKKyAgICBSZW5kZXJUcmVlQnVpbGRlcjo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKCp0
aGlzKTsKICAgICBpZiAoaXNBbm9ueW1vdXNCbG9jaygpICYmIGlzPFJlbmRlckJsb2NrPihwYXJl
bnQoKSkpCiAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqcGFyZW50KCkpLnJlbW92ZUxl
ZnRvdmVyQW5vbnltb3VzQmxvY2sodGhpcyk7CiAgICAgLy8gfHRoaXN8IG1heSBiZSBkZWFkIGhl
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggYmE1YmFjMzgwMjYy
YTgxOGEyNmVmZDQzNzA2MDFhOGVlNDdkYzcwMC4uZTY4ZjVmYzhjMTQ5MDhjOTFmZDA2ZWMzZmVm
NWE0NDRmM2QwZmViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAg
LTM5NSw3ICszOTUsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRqdXN0Qm9yZGVyQm94
UmVjdEZvclBhaW50aW5nKExheW91dFJlY3QmKSBvdmVycmlkZTsKICAgICBMYXlvdXRSZWN0IHBh
aW50UmVjdFRvQ2xpcE91dEZyb21Cb3JkZXIoY29uc3QgTGF5b3V0UmVjdCYpIG92ZXJyaWRlOwot
ICAgIAorICAgIHZvaWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJUcmVlQnVp
bGRlciYsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTGVmdG92ZXJBbm9u
eW1vdXNCbG9jayhSZW5kZXJCbG9jayogY2hpbGQpOworICAgIGJvb2wgaXNJbmxpbmVCbG9ja09y
SW5saW5lVGFibGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBpc0lubGluZSgpICYmIGlzUmVwbGFj
ZWQoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFkZE92ZXJmbG93RnJvbUNo
aWxkcmVuKCk7CiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YXRpb24g
d2hlbiBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwpAQCAtNDMyLDE3
ICs0MzUsOSBAQCBwcml2YXRlOgogCiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgYm9vbCBpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGlzSW5saW5lKCkgJiYgaXNSZXBsYWNlZCgpOyB9Ci0KLSAgICB2b2lk
IG1ha2VDaGlsZHJlbk5vbklubGluZShSZW5kZXJPYmplY3QqIGluc2VydGlvblBvaW50ID0gbnVs
bHB0cik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2soUmVu
ZGVyQmxvY2sqIGNoaWxkKTsKLQogICAgIC8vIEZJWE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1
YWxpemFpb24gd2hlbiBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwog
ICAgIHZpcnR1YWwgdm9pZCBtb3ZlQWxsQ2hpbGRyZW5JbmNsdWRpbmdGbG9hdHNUbyhSZW5kZXJC
bG9jayYgdG9CbG9jaywgUmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6ZUFmdGVySW5zZXJ0
aW9uIG5vcm1hbGl6ZUFmdGVySW5zZXJ0aW9uKSB7IG1vdmVBbGxDaGlsZHJlblRvKCZ0b0Jsb2Nr
LCBub3JtYWxpemVBZnRlckluc2VydGlvbik7IH0KIAotICAgIHZvaWQgYWRkQ2hpbGRUb0NvbnRp
bnVhdGlvbihSZW5kZXJUcmVlQnVpbGRlciYsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0No
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKLSAgICB2b2lkIGFkZENoaWxkSWdub3Jp
bmdDb250aW51YXRpb24oUmVuZGVyVHJlZUJ1aWxkZXImLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0
PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkgb3ZlcnJpZGU7Ci0KICAgICBi
b29sIGlzU2VsZkNvbGxhcHNpbmdCbG9jaygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBjaGlsZHJlblByZXZlbnRTZWxmQ29sbGFwc2luZygpIGNvbnN0OwogICAgIApAQCAtNTAy
LDcgKzQ5Nyw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKik7CiAKICAgICBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IGNs
b25lKCkgY29uc3Q7Ci0gICAgUmVuZGVyQmxvY2sqIGNvbnRpbnVhdGlvbkJlZm9yZShSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKTsKIAogICAgIFJlbmRlckZyYWdtZW50ZWRGbG93KiB1cGRhdGVD
YWNoZWRFbmNsb3NpbmdGcmFnbWVudGVkRmxvdyhSZW5kZXJGcmFnbWVudGVkRmxvdyopIGNvbnN0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDk2YjA3M2VkNjEy
YTUzM2U4NmQ5ZmZjYjhkZTNmZDk3MTgwODFkN2QuLmQxMDYzYTY4OWExZTUwMmJhNGZjNGQxMjFh
ZGMxZTkyNjQ4MjU2ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBA
IC00OTA0LDU3ICs0OTA0LDYgQEAgYm9vbCBSZW5kZXJCb3g6Omhhc1JlbGF0aXZlTG9naWNhbFdp
ZHRoKCkgY29uc3QKICAgICAgICAgfHwgc3R5bGUoKS5sb2dpY2FsTWF4V2lkdGgoKS5pc1BlcmNl
bnRPckNhbGN1bGF0ZWQoKTsKIH0KIAotc3RhdGljIHZvaWQgbWFya0JveEZvclJlbGF5b3V0QWZ0
ZXJTcGxpdChSZW5kZXJCb3gmIGJveCkKLXsKLSAgICAvLyBGSVhNRTogVGhlIHRhYmxlIGNvZGUg
c2hvdWxkIGhhbmRsZSB0aGF0IGF1dG9tYXRpY2FsbHkuIElmIG5vdCwKLSAgICAvLyB3ZSBzaG91
bGQgZml4IGl0IGFuZCByZW1vdmUgdGhlIHRhYmxlIHBhcnQgY2hlY2tzLgotICAgIGlmIChpczxS
ZW5kZXJUYWJsZT4oYm94KSkgewotICAgICAgICAvLyBCZWNhdXNlIHdlIG1heSBoYXZlIGFkZGVk
IHNvbWUgc2VjdGlvbnMgd2l0aCBhbHJlYWR5IGNvbXB1dGVkIGNvbHVtbiBzdHJ1Y3R1cmVzLCB3
ZSBuZWVkIHRvCi0gICAgICAgIC8vIHN5bmMgdGhlIHRhYmxlIHN0cnVjdHVyZSB3aXRoIHRoZW0g
bm93LiBUaGlzIGF2b2lkcyBjcmFzaGVzIHdoZW4gYWRkaW5nIG5ldyBjZWxscyB0byB0aGUgdGFi
bGUuCi0gICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlPihib3gpLmZvcmNlU2VjdGlvbnNSZWNh
bGMoKTsKLSAgICB9IGVsc2UgaWYgKGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oYm94KSkKLSAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihib3gpLnNldE5lZWRzQ2VsbFJlY2FsYygp
OwotCi0gICAgYm94LnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotfQotCi1S
ZW5kZXJPYmplY3QqIFJlbmRlckJveDo6c3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCi17Ci0gICAgYm9vbCBkaWRTcGxpdFBhcmVudEFub255
bW91c0JveGVzID0gZmFsc2U7Ci0KLSAgICB3aGlsZSAoYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9
IHRoaXMpIHsKLSAgICAgICAgYXV0byYgYm94VG9TcGxpdCA9IGRvd25jYXN0PFJlbmRlckJveD4o
KmJlZm9yZUNoaWxkLT5wYXJlbnQoKSk7Ci0gICAgICAgIGlmIChib3hUb1NwbGl0LmZpcnN0Q2hp
bGQoKSAhPSBiZWZvcmVDaGlsZCAmJiBib3hUb1NwbGl0LmlzQW5vbnltb3VzKCkpIHsKLSAgICAg
ICAgICAgIGRpZFNwbGl0UGFyZW50QW5vbnltb3VzQm94ZXMgPSB0cnVlOwotCi0gICAgICAgICAg
ICAvLyBXZSBoYXZlIHRvIHNwbGl0IHRoZSBwYXJlbnQgYm94IGludG8gdHdvIGJveGVzIGFuZCBt
b3ZlIGNoaWxkcmVuCi0gICAgICAgICAgICAvLyBmcm9tIHxiZWZvcmVDaGlsZHwgdG8gZW5kIGlu
dG8gdGhlIG5ldyBwb3N0IGJveC4KLSAgICAgICAgICAgIGF1dG8gbmV3UG9zdEJveCA9IGJveFRv
U3BsaXQuY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoKnRoaXMpOwotICAgICAgICAg
ICAgYXV0byYgcG9zdEJveCA9ICpuZXdQb3N0Qm94OwotICAgICAgICAgICAgcG9zdEJveC5zZXRD
aGlsZHJlbklubGluZShib3hUb1NwbGl0LmNoaWxkcmVuSW5saW5lKCkpOwotICAgICAgICAgICAg
UmVuZGVyQm94KiBwYXJlbnRCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KGJveFRvU3BsaXQucGFy
ZW50KCkpOwotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBpbnZhbGlkYXRlIHRoZSB8cGFyZW50
Qm94fCBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBuZXcgbm9kZQotICAgICAgICAgICAgLy8gc28gdGhh
dCB0aGUgdGFibGUgcmVwYWludGluZyBsb2dpYyBrbm93cyB0aGUgc3RydWN0dXJlIGlzIGRpcnR5
LgotICAgICAgICAgICAgLy8gU2VlIGZvciBleGFtcGxlIFJlbmRlclRhYmxlQ2VsbDpjbGlwcGVk
T3ZlcmZsb3dSZWN0Rm9yUmVwYWludC4KLSAgICAgICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFm
dGVyU3BsaXQoKnBhcmVudEJveCk7Ci0gICAgICAgICAgICBwYXJlbnRCb3gtPmluc2VydENoaWxk
SW50ZXJuYWwoV1RGTW92ZShuZXdQb3N0Qm94KSwgYm94VG9TcGxpdC5uZXh0U2libGluZygpKTsK
LSAgICAgICAgICAgIGJveFRvU3BsaXQubW92ZUNoaWxkcmVuVG8oJnBvc3RCb3gsIGJlZm9yZUNo
aWxkLCBudWxscHRyLCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Tm9ybWFsaXplQWZ0ZXJJbnNlcnRp
b246Olllcyk7Ci0KLSAgICAgICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQoYm94
VG9TcGxpdCk7Ci0gICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KHBvc3RC
b3gpOwotCi0gICAgICAgICAgICBiZWZvcmVDaGlsZCA9ICZwb3N0Qm94OwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gJmJveFRvU3BsaXQ7Ci0gICAgfQotCi0gICAg
aWYgKGRpZFNwbGl0UGFyZW50QW5vbnltb3VzQm94ZXMpCi0gICAgICAgIG1hcmtCb3hGb3JSZWxh
eW91dEFmdGVyU3BsaXQoKnRoaXMpOwotCi0gICAgQVNTRVJUKGJlZm9yZUNoaWxkLT5wYXJlbnQo
KSA9PSB0aGlzKTsKLSAgICByZXR1cm4gYmVmb3JlQ2hpbGQ7Ci19Ci0KIExheW91dFVuaXQgUmVu
ZGVyQm94OjpvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgY29uc3QKIHsKICAgICBh
dXRvKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkubGF5
b3V0U3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCA0YWNkMmU0
OGJhMWViZTEwYjkzODMyY2I1MTU3MzQ3YTdhN2VkYTk3Li5hZDQ0OTFiZDdjYWRhNDMwNmE1ZTQx
MTI0MTk0YzJiYmIyNjIxNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBA
IC02NjUsOCArNjY1LDYgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBwYWludFJvb3RCb3hGaWxs
TGF5ZXJzKGNvbnN0IFBhaW50SW5mbyYpOwogCi0gICAgUmVuZGVyT2JqZWN0KiBzcGxpdEFub255
bW91c0JveGVzQXJvdW5kQ2hpbGQoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7Ci0KICAgICBi
b29sIHNraXBDb250YWluaW5nQmxvY2tGb3JQZXJjZW50SGVpZ2h0Q2FsY3VsYXRpb24oY29uc3Qg
UmVuZGVyQm94JiBjb250YWluaW5nQmxvY2ssIGJvb2wgaXNQZXJwZW5kaWN1bGFyV3JpdGluZ01v
ZGUpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
dWJ5QmFzZS5jcHAKaW5kZXggMzk5M2ZkMWMxNjYxMmJhMGJiN2MxODhiYjQ3ZGNjOTExNmUwOGI2
MS4uNjYzNmE5ZGRhMjQwNjI3ZDZjODEwOThkZDY5Mzc5YzAwMTAzZjE4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCkBAIC02MSw3ICs2MSw3IEBAIHZv
aWQgUmVuZGVyUnVieUJhc2U6Om1vdmVDaGlsZHJlbihSZW5kZXJSdWJ5QmFzZSogdG9CYXNlLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoCiAgICAgQVNTRVJUX0FSRyh0b0Jhc2UsIHRvQmFzZSk7CiAK
ICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMpCi0g
ICAgICAgIGJlZm9yZUNoaWxkID0gc3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKGJlZm9y
ZUNoaWxkKTsKKyAgICAgICAgYmVmb3JlQ2hpbGQgPSBSZW5kZXJUcmVlQnVpbGRlcjo6c3BsaXRB
bm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKCp0aGlzLCBiZWZvcmVDaGlsZCk7CiAKICAgICBpZiAo
Y2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgbW92ZUlubGluZUNoaWxkcmVuKHRvQmFzZSwgYmVm
b3JlQ2hpbGQpOwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgUmVuZGVyUnVieUJhc2U6Om1vdmVC
bG9ja0NoaWxkcmVuKFJlbmRlclJ1YnlCYXNlKiB0b0Jhc2UsIFJlbmRlck9iamVjdCogYmVmCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmICh0b0Jhc2UtPmNoaWxkcmVuSW5saW5lKCkpCi0gICAg
ICAgIHRvQmFzZS0+bWFrZUNoaWxkcmVuTm9uSW5saW5lKCk7CisgICAgICAgIFJlbmRlclRyZWVC
dWlsZGVyOjptYWtlQ2hpbGRyZW5Ob25JbmxpbmUoKnRvQmFzZSk7CiAKICAgICAvLyBJZiBhbiBh
bm9ueW1vdXMgYmxvY2sgd291bGQgYmUgcHV0IG5leHQgdG8gYW5vdGhlciBzdWNoIGJsb2NrLCB0
aGVuIG1lcmdlIHRob3NlLgogICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZEhlcmUgPSBmaXJz
dENoaWxkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRleCBl
ZWM2NmFhMDJiYzM3Njc3YTg2ZWM2ZjRkM2U1NTA4MjNjZjMwMmYzLi44NDUyOTg3ZDRlYTE3Zjg0
MDBjN2Q4M2JhYTIwNjBmODFlNDI3NTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAKQEAgLTE3MCw3ICsxNzAsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGls
ZChSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gYwog
ICAgICAgICBzZXROZWVkc1NlY3Rpb25SZWNhbGMoKTsKIAogICAgIGlmIChiZWZvcmVDaGlsZCAm
JiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykKLSAgICAgICAgYmVmb3JlQ2hpbGQgPSBz
cGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoYmVmb3JlQ2hpbGQpOworICAgICAgICBiZWZv
cmVDaGlsZCA9IFJlbmRlclRyZWVCdWlsZGVyOjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hp
bGQoKnRoaXMsIGJlZm9yZUNoaWxkKTsKIAogICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoYnVpbGRl
ciwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCmluZGV4IDZjYjI1MjU1OTMyMTNlOTNmZjEwZDI5OWQz
MzU0ODY5MmM0MmRhOGQuLmE1Y2QwM2ZkMDNmNzhjYzE3ZjgxZmRmNDA1Y2M1ZTRiMWY2MDI3Mjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcApAQCAtMTE0
LDcgKzExNCw3IEBAIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVJvdzo6Ym9yZGVyQWRq
b2luaW5nRW5kQ2VsbChjb25zdCBSZW5kZXJUYWJsZUNlbGwmCiB2b2lkIFJlbmRlclRhYmxlUm93
OjphZGRDaGlsZChSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgaWYgKGJlZm9y
ZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKQotICAgICAgICBiZWZvcmVD
aGlsZCA9IHNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChiZWZvcmVDaGlsZCk7ICAgIAor
ICAgICAgICBiZWZvcmVDaGlsZCA9IFJlbmRlclRyZWVCdWlsZGVyOjpzcGxpdEFub255bW91c0Jv
eGVzQXJvdW5kQ2hpbGQoKnRoaXMsIGJlZm9yZUNoaWxkKTsgICAgCiAKICAgICAvLyBHZW5lcmF0
ZWQgY29udGVudCBjYW4gcmVzdWx0IGluIHVzIGhhdmluZyBhIG51bGwgc2VjdGlvbiBzbyBtYWtl
IHN1cmUgdG8gbnVsbCBjaGVjayBvdXIgcGFyZW50LgogICAgIGlmIChhdXRvKiBzZWN0aW9uID0g
dGhpcy0+c2VjdGlvbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcAppbmRleCBmZTJiOTA0ZGJlZTM1MTMwYjIzZGZkY2E3MjNkNzZlZTg3MDhi
NmE1Li5hODcxMGYzYzJhYzMwYjYyMzZlZjM0MWYwNjJjNDdhMTdkOGM1MWU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcApAQCAtMTQwLDcg
KzE0MCw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXJUcmVlQnVp
bGRlciYgYnVpbGRlciwgUmVuZGVyUHRyPFJlbmRlck9iCiAgICAgICAgIHNldFJvd0xvZ2ljYWxI
ZWlnaHRUb1Jvd1N0eWxlTG9naWNhbEhlaWdodElmTm90UmVsYXRpdmUobV9ncmlkW2luc2VydGlv
blJvd10pOwogCiAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAh
PSB0aGlzKQotICAgICAgICBiZWZvcmVDaGlsZCA9IHNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRD
aGlsZChiZWZvcmVDaGlsZCk7CisgICAgICAgIGJlZm9yZUNoaWxkID0gUmVuZGVyVHJlZUJ1aWxk
ZXI6OnNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZCgqdGhpcywgYmVmb3JlQ2hpbGQpOwog
CiAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCBpczxSZW5kZXJUYWJsZVJvdz4oKmJlZm9yZUNo
aWxkKSk7CiAgICAgUmVuZGVyQm94OjphZGRDaGlsZChidWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSwg
YmVmb3JlQ2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0
aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRh
dGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAKaW5kZXggMzE5MmQ0YTcyOWQxNWE1MzBhNGUyMmZi
NDFkZDgzMzlhNjViMzU2OS4uNTkxOTEzNzE3MzU3OTA3YjM1M2I2MTNiNDQ2NmJhNzE2ZjdhMzIx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVu
ZGVyVHJlZUJ1aWxkZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyUnVi
eVJ1bi5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4
dC5oIgorI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5k
ZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJG
b3JtQ29udHJvbHMuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCIKQEAgLTQ0
LDYgKzQ1LDU5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyVHJlZUJ1aWxkZXIqIFJl
bmRlclRyZWVCdWlsZGVyOjpzX2N1cnJlbnQ7CiAKK3N0YXRpYyB2b2lkIG1hcmtCb3hGb3JSZWxh
eW91dEFmdGVyU3BsaXQoUmVuZGVyQm94JiBib3gpCit7CisgICAgLy8gRklYTUU6IFRoZSB0YWJs
ZSBjb2RlIHNob3VsZCBoYW5kbGUgdGhhdCBhdXRvbWF0aWNhbGx5LiBJZiBub3QsCisgICAgLy8g
d2Ugc2hvdWxkIGZpeCBpdCBhbmQgcmVtb3ZlIHRoZSB0YWJsZSBwYXJ0IGNoZWNrcy4KKyAgICBp
ZiAoaXM8UmVuZGVyVGFibGU+KGJveCkpIHsKKyAgICAgICAgLy8gQmVjYXVzZSB3ZSBtYXkgaGF2
ZSBhZGRlZCBzb21lIHNlY3Rpb25zIHdpdGggYWxyZWFkeSBjb21wdXRlZCBjb2x1bW4gc3RydWN0
dXJlcywgd2UgbmVlZCB0bworICAgICAgICAvLyBzeW5jIHRoZSB0YWJsZSBzdHJ1Y3R1cmUgd2l0
aCB0aGVtIG5vdy4gVGhpcyBhdm9pZHMgY3Jhc2hlcyB3aGVuIGFkZGluZyBuZXcgY2VsbHMgdG8g
dGhlIHRhYmxlLgorICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZT4oYm94KS5mb3JjZVNlY3Rp
b25zUmVjYWxjKCk7CisgICAgfSBlbHNlIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rpb24+KGJveCkp
CisgICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oYm94KS5zZXROZWVkc0NlbGxS
ZWNhbGMoKTsKKworICAgIGJveC5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
K30KKworc3RhdGljIHZvaWQgZ2V0SW5saW5lUnVuKFJlbmRlck9iamVjdCogc3RhcnQsIFJlbmRl
ck9iamVjdCogYm91bmRhcnksIFJlbmRlck9iamVjdComIGlubGluZVJ1blN0YXJ0LCBSZW5kZXJP
YmplY3QqJiBpbmxpbmVSdW5FbmQpCit7CisgICAgLy8gQmVnaW5uaW5nIGF0IHxzdGFydHwgd2Ug
ZmluZCB0aGUgbGFyZ2VzdCBjb250aWd1b3VzIHJ1biBvZiBpbmxpbmVzIHRoYXQKKyAgICAvLyB3
ZSBjYW4uIFdlIGRlbm90ZSB0aGUgcnVuIHdpdGggc3RhcnQgYW5kIGVuZCBwb2ludHMsIHxpbmxp
bmVSdW5TdGFydHwKKyAgICAvLyBhbmQgfGlubGluZVJ1bkVuZHwuIE5vdGUgdGhhdCB0aGVzZSB0
d28gdmFsdWVzIG1heSBiZSB0aGUgc2FtZSBpZgorICAgIC8vIHdlIGVuY291bnRlciBvbmx5IG9u
ZSBpbmxpbmUuCisgICAgLy8KKyAgICAvLyBXZSBza2lwIGFueSBub24taW5saW5lcyB3ZSBlbmNv
dW50ZXIgYXMgbG9uZyBhcyB3ZSBoYXZlbid0IGZvdW5kIGFueQorICAgIC8vIGlubGluZXMgeWV0
LgorICAgIC8vCisgICAgLy8gfGJvdW5kYXJ5fCBpbmRpY2F0ZXMgYSBub24taW5jbHVzaXZlIGJv
dW5kYXJ5IHBvaW50LiBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgfGJvdW5kYXJ5fAorICAgIC8vIGlz
IGlubGluZSBvciBub3QsIHdlIHdpbGwgbm90IGluY2x1ZGUgaXQgaW4gYSBydW4gd2l0aCBpbmxp
bmVzIGJlZm9yZSBpdC4gSXQncyBhcyB0aG91Z2ggd2UgZW5jb3VudGVyZWQKKyAgICAvLyBhIG5v
bi1pbmxpbmUuCisKKyAgICAvLyBTdGFydCBieSBza2lwcGluZyBhcyBtYW55IG5vbi1pbmxpbmVz
IGFzIHdlIGNhbi4KKyAgICBhdXRvKiBjdXJyID0gc3RhcnQ7CisgICAgYm9vbCBzYXdJbmxpbmU7
CisgICAgZG8geworICAgICAgICB3aGlsZSAoY3VyciAmJiAhKGN1cnItPmlzSW5saW5lKCkgfHwg
Y3Vyci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSkKKyAgICAgICAgICAgIGN1
cnIgPSBjdXJyLT5uZXh0U2libGluZygpOworCisgICAgICAgIGlubGluZVJ1blN0YXJ0ID0gaW5s
aW5lUnVuRW5kID0gY3VycjsKKworICAgICAgICBpZiAoIWN1cnIpCisgICAgICAgICAgICByZXR1
cm47IC8vIE5vIG1vcmUgaW5saW5lIGNoaWxkcmVuIHRvIGJlIGZvdW5kLgorCisgICAgICAgIHNh
d0lubGluZSA9IGN1cnItPmlzSW5saW5lKCk7CisKKyAgICAgICAgY3VyciA9IGN1cnItPm5leHRT
aWJsaW5nKCk7CisgICAgICAgIHdoaWxlIChjdXJyICYmIChjdXJyLT5pc0lubGluZSgpIHx8IGN1
cnItPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgJiYgKGN1cnIgIT0gYm91bmRh
cnkpKSB7CisgICAgICAgICAgICBpbmxpbmVSdW5FbmQgPSBjdXJyOworICAgICAgICAgICAgaWYg
KGN1cnItPmlzSW5saW5lKCkpCisgICAgICAgICAgICAgICAgc2F3SW5saW5lID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpOworICAgICAgICB9CisgICAgfSB3
aGlsZSAoIXNhd0lubGluZSk7Cit9CisKKwogUmVuZGVyVHJlZUJ1aWxkZXI6OlJlbmRlclRyZWVC
dWlsZGVyKFJlbmRlclZpZXcmIHZpZXcpCiAgICAgOiBtX3ZpZXcodmlldykKICAgICAsIG1fZmly
c3RMZXR0ZXJCdWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8Rmlyc3RMZXR0ZXI+KCp0aGlzKSkKQEAg
LTUyLDYgKzEwNiw3IEBAIFJlbmRlclRyZWVCdWlsZGVyOjpSZW5kZXJUcmVlQnVpbGRlcihSZW5k
ZXJWaWV3JiB2aWV3KQogICAgICwgbV90YWJsZUJ1aWxkZXIoc3RkOjptYWtlX3VuaXF1ZTxUYWJs
ZT4oKnRoaXMpKQogICAgICwgbV9ydWJ5QnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPFJ1Ynk+KCp0
aGlzKSkKICAgICAsIG1fZm9ybUNvbnRyb2xzQnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPEZvcm1D
b250cm9scz4oKnRoaXMpKQorICAgICwgbV9ibG9ja0J1aWxkZXIoc3RkOjptYWtlX3VuaXF1ZTxC
bG9jaz4oKnRoaXMpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFzX2N1cnJlbnQgfHwgJm1fdmll
dyAhPSAmc19jdXJyZW50LT5tX3ZpZXcpOwogICAgIG1fcHJldmlvdXMgPSBzX2N1cnJlbnQ7CkBA
IC0xMjgsNiArMTgzLDk1IEBAIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6Omluc2VydENoaWxkKFJl
bmRlclRyZWVQb3NpdGlvbiYgcG9zaXRpb24sIFJlbmRlclB0cjxSZW5kCiAgICAgaW5zZXJ0Q2hp
bGQocG9zaXRpb24ucGFyZW50KCksIFdURk1vdmUoY2hpbGQpLCBwb3NpdGlvbi5uZXh0U2libGlu
ZygpKTsKIH0KIAordm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGRUb1JlbmRlckJs
b2NrKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIGJsb2NrQnVpbGRlcigpLmluc2VydENo
aWxkKHBhcmVudCwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKK30KKwordm9pZCBSZW5k
ZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGRUb1JlbmRlckJsb2NrSWdub3JpbmdDb250aW51YXRp
b24oUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit7CisgICAgYmxvY2tCdWlsZGVyKCkuaW5zZXJ0Q2hp
bGRJZ25vcmluZ0NvbnRpbnVhdGlvbihwYXJlbnQsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGls
ZCk7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6Om1ha2VDaGlsZHJlbk5vbklubGluZShS
ZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJPYmplY3QqIGluc2VydGlvblBvaW50KQoreworICAg
IC8vIG1ha2VDaGlsZHJlbk5vbklubGluZSB0YWtlcyBhIGJsb2NrIHdob3NlIGNoaWxkcmVuIGFy
ZSAqYWxsKiBpbmxpbmUgYW5kIGl0CisgICAgLy8gbWFrZXMgc3VyZSB0aGF0IGlubGluZSBjaGls
ZHJlbiBhcmUgY29hbGVzY2VkIHVuZGVyIGFub255bW91cworICAgIC8vIGJsb2Nrcy4gSWYgfGlu
c2VydGlvblBvaW50fCBpcyBkZWZpbmVkLCB0aGVuIGl0IHJlcHJlc2VudHMgdGhlIGluc2VydGlv
biBwb2ludCBmb3IKKyAgICAvLyB0aGUgbmV3IGJsb2NrIGNoaWxkIHRoYXQgaXMgY2F1c2luZyB1
cyB0byBoYXZlIHRvIHdyYXAgYWxsIHRoZSBpbmxpbmVzLiBUaGlzCisgICAgLy8gbWVhbnMgdGhh
dCB3ZSBjYW5ub3QgY29hbGVzY2UgaW5saW5lcyBiZWZvcmUgfGluc2VydGlvblBvaW50fCB3aXRo
IGlubGluZXMgZm9sbG93aW5nCisgICAgLy8gfGluc2VydGlvblBvaW50fCwgYmVjYXVzZSB0aGUg
bmV3IGNoaWxkIGlzIGdvaW5nIHRvIGJlIGluc2VydGVkIGluIGJldHdlZW4gdGhlIGlubGluZXMs
CisgICAgLy8gc3BsaXR0aW5nIHRoZW0uCisgICAgQVNTRVJUKHBhcmVudC5pc0lubGluZUJsb2Nr
T3JJbmxpbmVUYWJsZSgpIHx8ICFwYXJlbnQuaXNJbmxpbmUoKSk7CisgICAgQVNTRVJUKCFpbnNl
cnRpb25Qb2ludCB8fCBpbnNlcnRpb25Qb2ludC0+cGFyZW50KCkgPT0gJnBhcmVudCk7CisKKyAg
ICBwYXJlbnQuc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOworCisgICAgYXV0byogY2hpbGQgPSBw
YXJlbnQuZmlyc3RDaGlsZCgpOworICAgIGlmICghY2hpbGQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHBhcmVudC5kZWxldGVMaW5lcygpOworCisgICAgd2hpbGUgKGNoaWxkKSB7CisgICAgICAg
IFJlbmRlck9iamVjdCogaW5saW5lUnVuU3RhcnQgPSBudWxscHRyOworICAgICAgICBSZW5kZXJP
YmplY3QqIGlubGluZVJ1bkVuZCA9IG51bGxwdHI7CisgICAgICAgIGdldElubGluZVJ1bihjaGls
ZCwgaW5zZXJ0aW9uUG9pbnQsIGlubGluZVJ1blN0YXJ0LCBpbmxpbmVSdW5FbmQpOworCisgICAg
ICAgIGlmICghaW5saW5lUnVuU3RhcnQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
aGlsZCA9IGlubGluZVJ1bkVuZC0+bmV4dFNpYmxpbmcoKTsKKworICAgICAgICBhdXRvIG5ld0Js
b2NrID0gcGFyZW50LmNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgIGF1dG8mIGJsb2Nr
ID0gKm5ld0Jsb2NrOworICAgICAgICBwYXJlbnQuaW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3Zl
KG5ld0Jsb2NrKSwgaW5saW5lUnVuU3RhcnQpOworICAgICAgICBwYXJlbnQubW92ZUNoaWxkcmVu
VG8oJmJsb2NrLCBpbmxpbmVSdW5TdGFydCwgY2hpbGQsIFJlbmRlckJveE1vZGVsT2JqZWN0OjpO
b3JtYWxpemVBZnRlckluc2VydGlvbjo6Tm8pOworICAgIH0KKyNpZm5kZWYgTkRFQlVHCisgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGMgPSBwYXJlbnQuZmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4
dFNpYmxpbmcoKSkKKyAgICAgICAgQVNTRVJUKCFjLT5pc0lubGluZSgpKTsKKyNlbmRpZgorICAg
IHBhcmVudC5yZXBhaW50KCk7Cit9CisKK1JlbmRlck9iamVjdCogUmVuZGVyVHJlZUJ1aWxkZXI6
OnNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChSZW5kZXJCb3gmIHBhcmVudCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBib29sIGRpZFNwbGl0UGFyZW50QW5vbnltb3Vz
Qm94ZXMgPSBmYWxzZTsKKworICAgIHdoaWxlIChiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gJnBh
cmVudCkgeworICAgICAgICBhdXRvJiBib3hUb1NwbGl0ID0gZG93bmNhc3Q8UmVuZGVyQm94Pigq
YmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsKKyAgICAgICAgaWYgKGJveFRvU3BsaXQuZmlyc3RDaGls
ZCgpICE9IGJlZm9yZUNoaWxkICYmIGJveFRvU3BsaXQuaXNBbm9ueW1vdXMoKSkgeworICAgICAg
ICAgICAgZGlkU3BsaXRQYXJlbnRBbm9ueW1vdXNCb3hlcyA9IHRydWU7CisKKyAgICAgICAgICAg
IC8vIFdlIGhhdmUgdG8gc3BsaXQgdGhlIHBhcmVudCBib3ggaW50byB0d28gYm94ZXMgYW5kIG1v
dmUgY2hpbGRyZW4KKyAgICAgICAgICAgIC8vIGZyb20gfGJlZm9yZUNoaWxkfCB0byBlbmQgaW50
byB0aGUgbmV3IHBvc3QgYm94LgorICAgICAgICAgICAgYXV0byBuZXdQb3N0Qm94ID0gYm94VG9T
cGxpdC5jcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhwYXJlbnQpOworICAgICAgICAg
ICAgYXV0byYgcG9zdEJveCA9ICpuZXdQb3N0Qm94OworICAgICAgICAgICAgcG9zdEJveC5zZXRD
aGlsZHJlbklubGluZShib3hUb1NwbGl0LmNoaWxkcmVuSW5saW5lKCkpOworICAgICAgICAgICAg
UmVuZGVyQm94KiBwYXJlbnRCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KGJveFRvU3BsaXQucGFy
ZW50KCkpOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBpbnZhbGlkYXRlIHRoZSB8cGFyZW50
Qm94fCBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBuZXcgbm9kZQorICAgICAgICAgICAgLy8gc28gdGhh
dCB0aGUgdGFibGUgcmVwYWludGluZyBsb2dpYyBrbm93cyB0aGUgc3RydWN0dXJlIGlzIGRpcnR5
LgorICAgICAgICAgICAgLy8gU2VlIGZvciBleGFtcGxlIFJlbmRlclRhYmxlQ2VsbDpjbGlwcGVk
T3ZlcmZsb3dSZWN0Rm9yUmVwYWludC4KKyAgICAgICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFm
dGVyU3BsaXQoKnBhcmVudEJveCk7CisgICAgICAgICAgICBwYXJlbnRCb3gtPmluc2VydENoaWxk
SW50ZXJuYWwoV1RGTW92ZShuZXdQb3N0Qm94KSwgYm94VG9TcGxpdC5uZXh0U2libGluZygpKTsK
KyAgICAgICAgICAgIGJveFRvU3BsaXQubW92ZUNoaWxkcmVuVG8oJnBvc3RCb3gsIGJlZm9yZUNo
aWxkLCBudWxscHRyLCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Tm9ybWFsaXplQWZ0ZXJJbnNlcnRp
b246Olllcyk7CisKKyAgICAgICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQoYm94
VG9TcGxpdCk7CisgICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KHBvc3RC
b3gpOworCisgICAgICAgICAgICBiZWZvcmVDaGlsZCA9ICZwb3N0Qm94OworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gJmJveFRvU3BsaXQ7CisgICAgfQorCisgICAg
aWYgKGRpZFNwbGl0UGFyZW50QW5vbnltb3VzQm94ZXMpCisgICAgICAgIG1hcmtCb3hGb3JSZWxh
eW91dEFmdGVyU3BsaXQocGFyZW50KTsKKworICAgIEFTU0VSVChiZWZvcmVDaGlsZC0+cGFyZW50
KCkgPT0gJnBhcmVudCk7CisgICAgcmV0dXJuIGJlZm9yZUNoaWxkOworfQorCiB2b2lkIFJlbmRl
clRyZWVCdWlsZGVyOjp1cGRhdGVBZnRlckRlc2NlbmRhbnRzKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyKQogewogICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaAppbmRl
eCBiMDVmZDFmZjlhNTE0ZmVlZWU1MmQwOTBkNmYzNzg3NjI0ZmI3ZTZmLi5kNzcxODliYThiZGJm
MjUyMmNjZWYwODA2ODc2M2JlODNlMjY1ZjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaApAQCAtNDYsNiArNDYsMTIg
QEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBSZW1vdmUuCiAgICAgc3RhdGljIFJlbmRlclRyZWVC
dWlsZGVyKiBjdXJyZW50KCkgeyByZXR1cm4gc19jdXJyZW50OyB9CiAKKyAgICAvLyBUaGVzZSBm
dW5jdGlvbnMgYXJlIHRlbXBvcmFyeSB1bnRpbCBhZnRlciBhbGwgYmxvY2svaW5saW5lL2NvbnRp
bnVhdGlvbiBjb2RlIGlzIG1vdmVkIG92ZXIuCisgICAgdm9pZCBpbnNlcnRDaGlsZFRvUmVuZGVy
QmxvY2soUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4sIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKTsKKyAgICB2b2lkIGluc2VydENoaWxkVG9S
ZW5kZXJCbG9ja0lnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRl
clB0cjxSZW5kZXJPYmplY3Q+LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7
CisgICAgc3RhdGljIHZvaWQgbWFrZUNoaWxkcmVuTm9uSW5saW5lKFJlbmRlckJsb2NrJiBwYXJl
bnQsIFJlbmRlck9iamVjdCogaW5zZXJ0aW9uUG9pbnQgPSBudWxscHRyKTsKKyAgICBzdGF0aWMg
UmVuZGVyT2JqZWN0KiBzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoUmVuZGVyQm94JiBw
YXJlbnQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOworCiBwcml2YXRlOgogICAgIGNsYXNz
IEZpcnN0TGV0dGVyOwogICAgIGNsYXNzIExpc3Q7CkBAIC01Myw2ICs1OSw3IEBAIHByaXZhdGU6
CiAgICAgY2xhc3MgVGFibGU7CiAgICAgY2xhc3MgUnVieTsKICAgICBjbGFzcyBGb3JtQ29udHJv
bHM7CisgICAgY2xhc3MgQmxvY2s7CiAKICAgICBGaXJzdExldHRlciYgZmlyc3RMZXR0ZXJCdWls
ZGVyKCkgeyByZXR1cm4gKm1fZmlyc3RMZXR0ZXJCdWlsZGVyOyB9CiAgICAgTGlzdCYgbGlzdEJ1
aWxkZXIoKSB7IHJldHVybiAqbV9saXN0QnVpbGRlcjsgfQpAQCAtNjAsNiArNjcsNyBAQCBwcml2
YXRlOgogICAgIFRhYmxlJiB0YWJsZUJ1aWxkZXIoKSB7IHJldHVybiAqbV90YWJsZUJ1aWxkZXI7
IH0KICAgICBSdWJ5JiBydWJ5QnVpbGRlcigpIHsgcmV0dXJuICptX3J1YnlCdWlsZGVyOyB9CiAg
ICAgRm9ybUNvbnRyb2xzJiBmb3JtQ29udHJvbHNCdWlsZGVyKCkgeyByZXR1cm4gKm1fZm9ybUNv
bnRyb2xzQnVpbGRlcjsgfQorICAgIEJsb2NrJiBibG9ja0J1aWxkZXIoKSB7IHJldHVybiAqbV9i
bG9ja0J1aWxkZXI7IH0KIAogICAgIFJlbmRlclZpZXcmIG1fdmlldzsKIApAQCAtNzIsNiArODAs
NyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZT4gbV90YWJsZUJ1aWxkZXI7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1Ynk+IG1fcnVieUJ1aWxkZXI7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEZvcm1Db250cm9scz4gbV9mb3JtQ29udHJvbHNCdWlsZGVyOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxCbG9jaz4gbV9ibG9ja0J1aWxkZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJCbG9j
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzMzZGY0NDdlMGE1OGFhNTVjNGZlZDMwMGMzNjI2MzYzNTA3MGRl
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlQnVpbGRlckJsb2NrLmNwcApAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckJsb2NrLmgi
CisKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyRnVs
bFNjcmVlbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZW5kZXJCbG9jayog
Y29udGludWF0aW9uQmVmb3JlKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQpCit7CisgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQo
KSA9PSAmcGFyZW50KQorICAgICAgICByZXR1cm4gJnBhcmVudDsKKworICAgIFJlbmRlckJsb2Nr
KiBuZXh0VG9MYXN0ID0gJnBhcmVudDsKKyAgICBSZW5kZXJCbG9jayogbGFzdCA9ICZwYXJlbnQ7
CisgICAgZm9yIChhdXRvKiBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHBhcmVudC5j
b250aW51YXRpb24oKSk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
Y3VycmVudC0+Y29udGludWF0aW9uKCkpKSB7CisgICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiBi
ZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gY3VycmVudCkgeworICAgICAgICAgICAgaWYgKGN1cnJl
bnQtPmZpcnN0Q2hpbGQoKSA9PSBiZWZvcmVDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bGFzdDsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAgICAgICB9CisKKyAgICAgICAg
bmV4dFRvTGFzdCA9IGxhc3Q7CisgICAgICAgIGxhc3QgPSBjdXJyZW50OworICAgIH0KKworICAg
IGlmICghYmVmb3JlQ2hpbGQgJiYgIWxhc3QtPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJu
IG5leHRUb0xhc3Q7CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKK1JlbmRlclRyZWVCdWlsZGVyOjpC
bG9jazo6QmxvY2soUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIpCisgICAgOiBtX2J1aWxkZXIo
YnVpbGRlcikKK3sKK30KKwordm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2s6Omluc2VydENo
aWxkKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIGlmIChwYXJlbnQuY29udGludWF0aW9u
KCkgJiYgIXBhcmVudC5pc0Fub255bW91c0Jsb2NrKCkpCisgICAgICAgIGluc2VydENoaWxkVG9D
b250aW51YXRpb24ocGFyZW50LCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOworICAgIGVs
c2UKKyAgICAgICAgaW5zZXJ0Q2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihwYXJlbnQsIFdURk1v
dmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7Cit9CisKK3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OkJs
b2NrOjppbnNlcnRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRl
clB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQorewor
ICAgIFJlbmRlckJsb2NrKiBmbG93ID0gY29udGludWF0aW9uQmVmb3JlKHBhcmVudCwgYmVmb3Jl
Q2hpbGQpOworICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgaXM8UmVuZGVyQmxvY2s+KCpiZWZv
cmVDaGlsZC0+cGFyZW50KCkpKTsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYmVmb3JlQ2hp
bGRQYXJlbnQgPSBudWxscHRyOworICAgIGlmIChiZWZvcmVDaGlsZCkKKyAgICAgICAgYmVmb3Jl
Q2hpbGRQYXJlbnQgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oYmVmb3JlQ2hpbGQt
PnBhcmVudCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNv
bnRpbnVhdGlvbiA9IGZsb3ctPmNvbnRpbnVhdGlvbigpOworICAgICAgICBpZiAoY29udGludWF0
aW9uKQorICAgICAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQgPSBjb250aW51YXRpb247CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGJlZm9yZUNoaWxkUGFyZW50ID0gZmxvdzsKKyAgICB9CisK
KyAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgeworICAg
ICAgICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihtX2J1
aWxkZXIsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBib29sIGNoaWxkSXNOb3JtYWwgPSBjaGlsZC0+aXNJbmxpbmUoKSB8fCAhY2hp
bGQtPnN0eWxlKCkuY29sdW1uU3BhbigpOworICAgIGJvb2wgYmNwSXNOb3JtYWwgPSBiZWZvcmVD
aGlsZFBhcmVudC0+aXNJbmxpbmUoKSB8fCAhYmVmb3JlQ2hpbGRQYXJlbnQtPnN0eWxlKCkuY29s
dW1uU3BhbigpOworICAgIGJvb2wgZmxvd0lzTm9ybWFsID0gZmxvdy0+aXNJbmxpbmUoKSB8fCAh
Zmxvdy0+c3R5bGUoKS5jb2x1bW5TcGFuKCk7CisKKyAgICBpZiAoZmxvdyA9PSBiZWZvcmVDaGls
ZFBhcmVudCkgeworICAgICAgICBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG1f
YnVpbGRlciwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWF0Y2ggdXAgaWYgd2UgY2FuLCBz
byB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQgY3JlYXRlIHRoZQorICAgIC8vIG1pbmltYWwgIyBv
ZiBjb250aW51YXRpb25zIG5lZWRlZCBmb3IgdGhlIGlubGluZS4KKyAgICBpZiAoY2hpbGRJc05v
cm1hbCA9PSBiY3BJc05vcm1hbCkgeworICAgICAgICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hp
bGRJZ25vcmluZ0NvbnRpbnVhdGlvbihtX2J1aWxkZXIsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVD
aGlsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGZsb3dJc05vcm1hbCA9PSBj
aGlsZElzTm9ybWFsKSB7CisgICAgICAgIGZsb3ctPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRp
b24obV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSwgbnVsbHB0cik7IC8vIEp1c3QgdHJlYXQgbGlr
ZSBhbiBhcHBlbmQuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYmVmb3JlQ2hpbGRQYXJl
bnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxk
KSwgYmVmb3JlQ2hpbGQpOworfQorCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpCbG9jazo6aW5z
ZXJ0Q2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJQ
dHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAg
ICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9ICZwYXJlbnQpIHsK
KyAgICAgICAgUmVuZGVyRWxlbWVudCogYmVmb3JlQ2hpbGRDb250YWluZXIgPSBiZWZvcmVDaGls
ZC0+cGFyZW50KCk7CisgICAgICAgIHdoaWxlIChiZWZvcmVDaGlsZENvbnRhaW5lci0+cGFyZW50
KCkgIT0gJnBhcmVudCkKKyAgICAgICAgICAgIGJlZm9yZUNoaWxkQ29udGFpbmVyID0gYmVmb3Jl
Q2hpbGRDb250YWluZXItPnBhcmVudCgpOworICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGRDb250
YWluZXIpOworCisgICAgICAgIGlmIChiZWZvcmVDaGlsZENvbnRhaW5lci0+aXNBbm9ueW1vdXMo
KSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TighYmVmb3JlQ2hpbGRDb250YWluZXItPmlzSW5saW5lKCkpOworCisgICAgICAgICAgICAvLyBJ
ZiB0aGUgcmVxdWVzdGVkIGJlZm9yZUNoaWxkIGlzIG5vdCBvbmUgb2Ygb3VyIGNoaWxkcmVuLCB0
aGVuIHRoaXMgaXMgYmVjYXVzZQorICAgICAgICAgICAgLy8gdGhlcmUgaXMgYW4gYW5vbnltb3Vz
IGNvbnRhaW5lciB3aXRoaW4gdGhpcyBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgYmVmb3JlQ2hp
bGQuCisgICAgICAgICAgICBSZW5kZXJFbGVtZW50KiBiZWZvcmVDaGlsZEFub255bW91c0NvbnRh
aW5lciA9IGJlZm9yZUNoaWxkQ29udGFpbmVyOworICAgICAgICAgICAgaWYgKGJlZm9yZUNoaWxk
QW5vbnltb3VzQ29udGFpbmVyLT5pc0Fub255bW91c0Jsb2NrKCkKKyNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCisgICAgICAgICAgICAgICAgLy8gRnVsbCBzY3JlZW4gcmVuZGVyZXJzIGFuZCBm
dWxsIHNjcmVlbiBwbGFjZWhvbGRlcnMgYWN0IGFzIGFub255bW91cyBibG9ja3MsIG5vdCB0YWJs
ZXM6CisgICAgICAgICAgICAgICAgfHwgYmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXItPmlz
UmVuZGVyRnVsbFNjcmVlbigpCisgICAgICAgICAgICAgICAgfHwgYmVmb3JlQ2hpbGRBbm9ueW1v
dXNDb250YWluZXItPmlzUmVuZGVyRnVsbFNjcmVlblBsYWNlaG9sZGVyKCkKKyNlbmRpZgorICAg
ICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgY2hpbGQgaW50
byB0aGUgYW5vbnltb3VzIGJsb2NrIGJveCBpbnN0ZWFkIG9mIGhlcmUuCisgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5pc0lubGluZSgpIHx8IGJlZm9yZUNoaWxkLT5wYXJlbnQoKS0+Zmlyc3RD
aGlsZCgpICE9IGJlZm9yZUNoaWxkKQorICAgICAgICAgICAgICAgICAgICBtX2J1aWxkZXIuaW5z
ZXJ0Q2hpbGQoKmJlZm9yZUNoaWxkLT5wYXJlbnQoKSwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNo
aWxkKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fYnVpbGRl
ci5pbnNlcnRDaGlsZChwYXJlbnQsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZC0+cGFyZW50
KCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgQVNTRVJUKGJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVyLT5pc1RhYmxlKCkpOworCisg
ICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVQYXJ0KCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBJbnNlcnQgaW50byB0aGUgYW5vbnltb3VzIHRhYmxlLgorICAgICAgICAgICAgICAgIG1fYnVp
bGRlci5pbnNlcnRDaGlsZCgqYmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXIsIFdURk1vdmUo
Y2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBiZWZvcmVDaGlsZCA9IFJlbmRlclRyZWVCdWlsZGVyOjpzcGxp
dEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQocGFyZW50LCBiZWZvcmVDaGlsZCk7CisKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oYmVmb3JlQ2hp
bGQtPnBhcmVudCgpID09ICZwYXJlbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBt
YWRlQm94ZXNOb25JbmxpbmUgPSBmYWxzZTsKKworICAgIC8vIEEgYmxvY2sgaGFzIHRvIGVpdGhl
ciBoYXZlIGFsbCBvZiBpdHMgY2hpbGRyZW4gaW5saW5lLCBvciBhbGwgb2YgaXRzIGNoaWxkcmVu
IGFzIGJsb2Nrcy4KKyAgICAvLyBTbywgaWYgb3VyIGNoaWxkcmVuIGFyZSBjdXJyZW50bHkgaW5s
aW5lIGFuZCBhIGJsb2NrIGNoaWxkIGhhcyB0byBiZSBpbnNlcnRlZCwgd2UgbW92ZSBhbGwgb3Vy
CisgICAgLy8gaW5saW5lIGNoaWxkcmVuIGludG8gYW5vbnltb3VzIGJsb2NrIGJveGVzLgorICAg
IGlmIChwYXJlbnQuY2hpbGRyZW5JbmxpbmUoKSAmJiAhY2hpbGQtPmlzSW5saW5lKCkgJiYgIWNo
aWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgLy8gVGhp
cyBpcyBhIGJsb2NrIHdpdGggaW5saW5lIGNvbnRlbnQuIFdyYXAgdGhlIGlubGluZSBjb250ZW50
IGluIGFub255bW91cyBibG9ja3MuCisgICAgICAgIFJlbmRlclRyZWVCdWlsZGVyOjptYWtlQ2hp
bGRyZW5Ob25JbmxpbmUocGFyZW50LCBiZWZvcmVDaGlsZCk7CisgICAgICAgIG1hZGVCb3hlc05v
bklubGluZSA9IHRydWU7CisKKyAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxk
LT5wYXJlbnQoKSAhPSAmcGFyZW50KSB7CisgICAgICAgICAgICBiZWZvcmVDaGlsZCA9IGJlZm9y
ZUNoaWxkLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIEFTU0VSVChiZWZvcmVDaGlsZC0+aXNBbm9u
eW1vdXNCbG9jaygpKTsKKyAgICAgICAgICAgIEFTU0VSVChiZWZvcmVDaGlsZC0+cGFyZW50KCkg
PT0gJnBhcmVudCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFwYXJlbnQuY2hpbGRyZW5J
bmxpbmUoKSAmJiAoY2hpbGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBj
aGlsZC0+aXNJbmxpbmUoKSkpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW5zZXJ0aW5nIGFuIGlu
bGluZSBjaGlsZCBidXQgYWxsIG9mIG91ciBjaGlsZHJlbiBhcmUgYmxvY2tzLCB0aGVuIHdlIGhh
dmUgdG8gbWFrZSBzdXJlCisgICAgICAgIC8vIGl0IGlzIHB1dCBpbnRvIGFuIGFub215b3VzIGJs
b2NrIGJveC4gV2UgdHJ5IHRvIHVzZSBhbiBleGlzdGluZyBhbm9ueW1vdXMgYm94IGlmIHBvc3Np
YmxlLCBvdGhlcndpc2UKKyAgICAgICAgLy8gYSBuZXcgb25lIGlzIGNyZWF0ZWQgYW5kIGluc2Vy
dGVkIGludG8gb3VyIGxpc3Qgb2YgY2hpbGRyZW4gaW4gdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9u
LgorICAgICAgICBSZW5kZXJPYmplY3QqIGFmdGVyQ2hpbGQgPSBiZWZvcmVDaGlsZCA/IGJlZm9y
ZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6IHBhcmVudC5sYXN0Q2hpbGQoKTsKKworICAgICAg
ICBpZiAoYWZ0ZXJDaGlsZCAmJiBhZnRlckNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKKyAg
ICAgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZChkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmFm
dGVyQ2hpbGQpLCBXVEZNb3ZlKGNoaWxkKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY2hpbGQtPmlzSW5saW5lKCkpIHsKKyAgICAgICAgICAgIC8vIE5v
IHN1aXRhYmxlIGV4aXN0aW5nIGFub255bW91cyBib3ggLSBjcmVhdGUgYSBuZXcgb25lLgorICAg
ICAgICAgICAgYXV0byBuZXdCb3ggPSBwYXJlbnQuY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAg
ICAgICAgICAgIGF1dG8mIGJveCA9ICpuZXdCb3g7CisgICAgICAgICAgICBwYXJlbnQuUmVuZGVy
Qm94OjphZGRDaGlsZChtX2J1aWxkZXIsIFdURk1vdmUobmV3Qm94KSwgYmVmb3JlQ2hpbGQpOwor
ICAgICAgICAgICAgbV9idWlsZGVyLmluc2VydENoaWxkKGJveCwgV1RGTW92ZShjaGlsZCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgcGFyZW50LmludmFs
aWRhdGVMaW5lTGF5b3V0UGF0aCgpOworCisgICAgcGFyZW50LlJlbmRlckJveDo6YWRkQ2hpbGQo
bV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOworCisgICAgaWYgKG1hZGVC
b3hlc05vbklubGluZSAmJiBpczxSZW5kZXJCbG9jaz4ocGFyZW50LnBhcmVudCgpKSAmJiBwYXJl
bnQuaXNBbm9ueW1vdXNCbG9jaygpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBh
cmVudC5wYXJlbnQoKSkucmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jaygmcGFyZW50KTsKKyAg
ICAvLyBwYXJlbnQgb2JqZWN0IG1heSBiZSBkZWFkIGhlcmUKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2su
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckJs
b2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2NkYWJmM2E5OTYxODRlYWZkNmZkNWQzMTdmYWZlYmM5ZTg0OWI3
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlQnVpbGRlckJsb2NrLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2sgeworcHVibGljOgor
ICAgIEJsb2NrKFJlbmRlclRyZWVCdWlsZGVyJik7CisKKyAgICB2b2lkIGluc2VydENoaWxkKFJl
bmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKTsKKyAgICB2b2lkIGluc2VydENoaWxkSWdub3JpbmdDb250aW51
YXRpb24oUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOworCitwcml2YXRlOgorICAgIHZvaWQgaW5zZXJ0
Q2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVy
T2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CisKKyAgICBSZW5kZXJU
cmVlQnVpbGRlciYgbV9idWlsZGVyOworfTsKKworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330532</attachid>
            <date>2018-01-04 22:07:33 -0800</date>
            <delta_ts>2018-01-05 09:15:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181319-20180104220732.patch</filename>
            <type>text/plain</type>
            <size>49998</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY2Y2VlODg0ZDY3OTUy
MmYxZjYyYzZmYWI1NTdiMTI3NGM0NGZkMy4uOGFkYWU1MmY3M2VkMDRhZmNiODkwNjA4ZWI5YmY3
ZDA2MzVlY2JiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE4LTAxLTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1JlbmRlclRyZWVCdWlsZGVy
XSBNb3ZlIFJlbmRlckJsb2NrIGFkZENoaWxkIGxvZ2ljIHRvIFJlbmRlclRyZWVCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEzMTkKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MzEzNDY0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYWJvdXQgbW92aW5nIHRoZSBjb2RlLCBu
byBjbGVhbnVwIGFuZC9vciBub3JtYWxpemF0aW9uICh1bmZvcnR1bmF0ZWx5IGl0IGFsc28gbWVh
bnMKKyAgICAgICAgc29tZSB0ZW1wb3JhcnkgY2hhbmdlcykuICAKKworICAgICAgICBObyBjaGFu
Z2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGlu
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGlsZEJlY2FtZU5vbklu
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVmb3Jl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDaGlsZFRvQ29u
dGludWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmdldElubGluZVJ1bik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9uSW5s
aW5lKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtCb3hG
b3JSZWxheW91dEFmdGVyU3BsaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieUJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6Om1vdmVDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QmFzZTo6bW92ZUJsb2NrQ2hpbGRyZW4pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6YWRkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtCb3hG
b3JSZWxheW91dEFmdGVyU3BsaXQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW5saW5lUnVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpSZW5kZXJUcmVlQnVpbGRlcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGRUb1JlbmRl
ckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGls
ZFRvUmVuZGVyQmxvY2tJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUcmVlQnVpbGRlcjo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRyZWVCdWlsZGVyOjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQpOgor
ICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OmJsb2NrQnVpbGRlcik6CisgICAgICAgICog
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRpbnVhdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2s6OkJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVCdWlsZGVyOjpCbG9jazo6aW5zZXJ0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjppbnNlcnRDaGlsZFRvQ29udGludWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpCbG9jazo6aW5zZXJ0Q2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVC
dWlsZGVyQmxvY2suaDogQWRkZWQuCisgICAgICAgIAogMjAxOC0wMS0wNCAgQ2hyaXMgRmxlaXph
Y2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBJbXBsZW1lbnQgdXBkYXRl
ZCBDU1MzIFNwZWVjaCBmb3IgJ3NwZWFrJyBhbmQgJ3NwZWFrLWFzJyBwcm9wZXJ0aWVzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IGE0YmFmNTkxNGYxMmIyYzY5NzVkNjNiNTg2Yjg2ZDAxYjdkYmI4Y2IuLjA4
NGU3NTI1NTQzYzRmOWJmZjA5ZTgwZTFjNzE1Y2RkYmEzZDlmNmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0xOTg0LDYgKzE5ODQsNyBAQCByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5j
cHAKIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAogCiByZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZUJ1aWxkZXIuY3BwCityZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXJCbG9jay5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0
dGVyLmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyRm9ybUNvbnRyb2xz
LmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTGlzdC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBk
ZTE5MGExMmYxZTAzMDllYzI1YmJhZWJhMzU2MTIwYzlhM2Y3YjdhLi43ZTdhYzBjNjBlYjcwZjEw
ZWUxMWMyZTM1YzdkMWI1ZGI0OTYxM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zOTMsNiArMzkzLDcgQEAKIAkJMTE5MzQw
NzkxRkU4QjkyMzAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyVGFibGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTM0MDc3MUZFOEI5MjMwMDkz
NUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlclRhYmxlLmggKi87IH07CiAJCTExOTM0MDhBMUZFQjM1
NUQwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlclJ1YnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTM0MDg4MUZFQjM1NUQwMDkzNUYxRSAvKiBS
ZW5kZXJUcmVlQnVpbGRlclJ1YnkuaCAqLzsgfTsKIAkJMTE5MzQwOTcxRkVENzE1NTAwOTM1RjFF
IC8qIFJlbmRlclRyZWVCdWlsZGVyRm9ybUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTkzNDA5NTFGRUQ3MTU1MDA5MzVGMUUgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuaCAqLzsgfTsKKwkJMTE5MzQwQTMxRkVFMDI0MDAw
OTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTM0MEExMUZFRTAyNDAwMDkzNUYxRSAvKiBSZW5k
ZXJUcmVlQnVpbGRlckJsb2NrLmggKi87IH07CiAJCTExRTA2N0VFMUU2MjQ2RTUwMDE2MkQxNiAv
KiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDExRTA2N0VEMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5l
TGF5b3V0Q292ZXJhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNDAwRDdBODE3MTM2RUE3MDA3N0NFMDUgLyogU2NyaXB0V3JhcHBhYmxlSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQw
MEQ3QTcxNzEzNkVBNzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAzQjk5NzA5RUIx
M0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDAzQjk5NTA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU1ODMs
NiArNTU4NCw4IEBACiAJCTExOTM0MDg4MUZFQjM1NUQwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVp
bGRlclJ1YnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExOTM0MDk0MUZFRDcxNTUwMDkzNUYxRSAvKiBSZW5k
ZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJU
cmVlQnVpbGRlckZvcm1Db250cm9scy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTExOTM0MDk1MUZFRDcxNTUwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9s
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxMTkzNDBBMDFGRUUwMjQwMDA5MzVGMUUgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlQnVp
bGRlckJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTE5MzQwQTExRkVF
MDI0MDAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
MUUwNjdFQjFFNjI0NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRDb3Zl
cmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExRTA2N0VEMUU2MjQ2RTUw
MDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MDBEN0E3MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRXcmFwcGFi
bGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBw
YWJsZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NjA5LDYgKzI0
NjEyLDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUU0N0MzOTIwMUZFNkUwRDkwMEJCQkM2QiAv
KiBSZW5kZXJUcmVlQnVpbGRlci5jcHAgKi8sCiAJCQkJRTQ3QzM5MkExRkU2RTBERTAwQkJCQzZC
IC8qIFJlbmRlclRyZWVCdWlsZGVyLmggKi8sCisJCQkJMTE5MzQwQTAxRkVFMDI0MDAwOTM1RjFF
IC8qIFJlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwICovLAorCQkJCTExOTM0MEExMUZFRTAyNDAw
MDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckJsb2NrLmggKi8sCiAJCQkJRTQ3QzM5MjExRkU2
RTBEQTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3BwICovLAogCQkJ
CUU0N0MzOTI2MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVy
LmggKi8sCiAJCQkJMTE5MzQwOTQxRkVENzE1NTAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVy
Rm9ybUNvbnRyb2xzLmNwcCAqLywKQEAgLTI5MDM1LDYgKzI5MDQwLDcgQEAKIAkJCQlCQ0VBNDg4
NzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRjE5OThDMDgyNDVFNTkwMDFFOUFCQyAvKiBSZW5kZXJUcmVlQXNUZXh0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDdDMzkyRDFGRTZFMEYzMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTExOTM0MEEzMUZFRTAyNDAwMDkzNUYxRSAvKiBSZW5kZXJU
cmVlQnVpbGRlckJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDdDMzkzMDFGRTZFMEZEMDBC
QkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTE5MzQwOTcxRkVENzE1NTAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyRm9ybUNvbnRy
b2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDdDMzkzMjFGRTZFMTA1MDBCQkJDNkIgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJMaXN0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDFmN2QyOWYzZDRjMGM5NDJkYzNhNzkwMzQzNTRmYzA4
ZWZjYjI5ZTAuLjQ5MWE2ZGZmZGU2ZjU0ZGVhNGRhNWZkYzYzOTRkNGZhMzFjODAyZWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNDQ2LDcxICs0NDYsNiBA
QCB2b2lkIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eQogICAgIHNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGls
ZHJlbihvbGRTdHlsZSAmJiBkaWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91dCAmJiBuZWVkc0xh
eW91dCgpICYmIGJvcmRlck9yUGFkZGluZ0xvZ2ljYWxXaWR0aENoYW5nZWQoKm9sZFN0eWxlLCBz
dHlsZSgpKSk7CiB9CiAKLVJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVm
b3JlKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCi17Ci0gICAgaWYgKGJlZm9yZUNoaWxkICYm
IGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKQotICAgICAgICByZXR1cm4gdGhpczsKLQot
ICAgIFJlbmRlckJsb2NrKiBuZXh0VG9MYXN0ID0gdGhpczsKLSAgICBSZW5kZXJCbG9jayogbGFz
dCA9IHRoaXM7Ci0gICAgZm9yIChhdXRvKiBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+
KGNvbnRpbnVhdGlvbigpKTsgY3VycmVudDsgY3VycmVudCA9IGRvd25jYXN0PFJlbmRlckJsb2Nr
PihjdXJyZW50LT5jb250aW51YXRpb24oKSkpIHsKLSAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYm
IGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSBjdXJyZW50KSB7Ci0gICAgICAgICAgICBpZiAoY3Vy
cmVudC0+Zmlyc3RDaGlsZCgpID09IGJlZm9yZUNoaWxkKQotICAgICAgICAgICAgICAgIHJldHVy
biBsYXN0OwotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgIH0KLQotICAgICAg
ICBuZXh0VG9MYXN0ID0gbGFzdDsKLSAgICAgICAgbGFzdCA9IGN1cnJlbnQ7Ci0gICAgfQotCi0g
ICAgaWYgKCFiZWZvcmVDaGlsZCAmJiAhbGFzdC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1
cm4gbmV4dFRvTGFzdDsKLSAgICByZXR1cm4gbGFzdDsKLX0KLQotdm9pZCBSZW5kZXJCbG9jazo6
YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlciwgUmVuZGVy
UHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCi17
Ci0gICAgUmVuZGVyQmxvY2sqIGZsb3cgPSBjb250aW51YXRpb25CZWZvcmUoYmVmb3JlQ2hpbGQp
OwotICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgaXM8UmVuZGVyQmxvY2s+KCpiZWZvcmVDaGls
ZC0+cGFyZW50KCkpKTsKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYmVmb3JlQ2hpbGRQYXJl
bnQgPSBudWxscHRyOwotICAgIGlmIChiZWZvcmVDaGlsZCkKLSAgICAgICAgYmVmb3JlQ2hpbGRQ
YXJlbnQgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oYmVmb3JlQ2hpbGQtPnBhcmVu
dCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVh
dGlvbiA9IGZsb3ctPmNvbnRpbnVhdGlvbigpOwotICAgICAgICBpZiAoY29udGludWF0aW9uKQot
ICAgICAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQgPSBjb250aW51YXRpb247Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGJlZm9yZUNoaWxkUGFyZW50ID0gZmxvdzsKLSAgICB9Ci0KLSAgICBp
ZiAobmV3Q2hpbGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAg
ICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWlsZGVy
LCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgYm9vbCBjaGlsZElzTm9ybWFsID0gbmV3Q2hpbGQtPmlzSW5saW5lKCkgfHwgIW5l
d0NoaWxkLT5zdHlsZSgpLmNvbHVtblNwYW4oKTsKLSAgICBib29sIGJjcElzTm9ybWFsID0gYmVm
b3JlQ2hpbGRQYXJlbnQtPmlzSW5saW5lKCkgfHwgIWJlZm9yZUNoaWxkUGFyZW50LT5zdHlsZSgp
LmNvbHVtblNwYW4oKTsKLSAgICBib29sIGZsb3dJc05vcm1hbCA9IGZsb3ctPmlzSW5saW5lKCkg
fHwgIWZsb3ctPnN0eWxlKCkuY29sdW1uU3BhbigpOwotCi0gICAgaWYgKGZsb3cgPT0gYmVmb3Jl
Q2hpbGRQYXJlbnQpIHsKLSAgICAgICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihidWlsZGVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWF0Y2ggdXAgaWYg
d2UgY2FuLCBzbyB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQgY3JlYXRlIHRoZQotICAgIC8vIG1p
bmltYWwgIyBvZiBjb250aW51YXRpb25zIG5lZWRlZCBmb3IgdGhlIGlubGluZS4KLSAgICBpZiAo
Y2hpbGRJc05vcm1hbCA9PSBiY3BJc05vcm1hbCkgewotICAgICAgICBiZWZvcmVDaGlsZFBhcmVu
dC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWlsZGVyLCBXVEZNb3ZlKG5ld0NoaWxk
KSwgYmVmb3JlQ2hpbGQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChmbG93SXNO
b3JtYWwgPT0gY2hpbGRJc05vcm1hbCkgewotICAgICAgICBmbG93LT5hZGRDaGlsZElnbm9yaW5n
Q29udGludWF0aW9uKGJ1aWxkZXIsIFdURk1vdmUobmV3Q2hpbGQpLCAwKTsgLy8gSnVzdCB0cmVh
dCBsaWtlIGFuIGFwcGVuZC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBiZWZvcmVDaGls
ZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWlsZGVyLCBXVEZNb3ZlKG5l
d0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwotfQotCiBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IFJlbmRl
ckJsb2NrOjpjbG9uZSgpIGNvbnN0CiB7CiAgICAgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBjbG9u
ZUJsb2NrOwpAQCAtNTMzLDEzOCArNDY4LDEyIEBAIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gUmVu
ZGVyQmxvY2s6OmNsb25lKCkgY29uc3QKIAogdm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoUmVu
ZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewotICAgIGlmIChjb250aW51YXRpb24oKSAm
JiAhaXNBbm9ueW1vdXNCbG9jaygpKQotICAgICAgICBhZGRDaGlsZFRvQ29udGludWF0aW9uKGJ1
aWxkZXIsIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKGJ1aWxkZXIsIFdURk1vdmUobmV3Q2hpbGQp
LCBiZWZvcmVDaGlsZCk7CisgICAgYnVpbGRlci5pbnNlcnRDaGlsZFRvUmVuZGVyQmxvY2soKnRo
aXMsIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxv
Y2s6OmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxk
ZXIsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKQogewotICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkg
IT0gdGhpcykgewotICAgICAgICBSZW5kZXJFbGVtZW50KiBiZWZvcmVDaGlsZENvbnRhaW5lciA9
IGJlZm9yZUNoaWxkLT5wYXJlbnQoKTsKLSAgICAgICAgd2hpbGUgKGJlZm9yZUNoaWxkQ29udGFp
bmVyLT5wYXJlbnQoKSAhPSB0aGlzKQotICAgICAgICAgICAgYmVmb3JlQ2hpbGRDb250YWluZXIg
PSBiZWZvcmVDaGlsZENvbnRhaW5lci0+cGFyZW50KCk7Ci0gICAgICAgIEFTU0VSVChiZWZvcmVD
aGlsZENvbnRhaW5lcik7Ci0KLSAgICAgICAgaWYgKGJlZm9yZUNoaWxkQ29udGFpbmVyLT5pc0Fu
b255bW91cygpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCFiZWZvcmVDaGlsZENvbnRhaW5lci0+aXNJbmxpbmUoKSk7Ci0KLSAgICAgICAg
ICAgIC8vIElmIHRoZSByZXF1ZXN0ZWQgYmVmb3JlQ2hpbGQgaXMgbm90IG9uZSBvZiBvdXIgY2hp
bGRyZW4sIHRoZW4gdGhpcyBpcyBiZWNhdXNlCi0gICAgICAgICAgICAvLyB0aGVyZSBpcyBhbiBh
bm9ueW1vdXMgY29udGFpbmVyIHdpdGhpbiB0aGlzIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBi
ZWZvcmVDaGlsZC4KLSAgICAgICAgICAgIFJlbmRlckVsZW1lbnQqIGJlZm9yZUNoaWxkQW5vbnlt
b3VzQ29udGFpbmVyID0gYmVmb3JlQ2hpbGRDb250YWluZXI7Ci0gICAgICAgICAgICBpZiAoYmVm
b3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXItPmlzQW5vbnltb3VzQmxvY2soKQotI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKLSAgICAgICAgICAgICAgICAvLyBGdWxsIHNjcmVlbiByZW5kZXJl
cnMgYW5kIGZ1bGwgc2NyZWVuIHBsYWNlaG9sZGVycyBhY3QgYXMgYW5vbnltb3VzIGJsb2Nrcywg
bm90IHRhYmxlczoKLSAgICAgICAgICAgICAgICB8fCBiZWZvcmVDaGlsZEFub255bW91c0NvbnRh
aW5lci0+aXNSZW5kZXJGdWxsU2NyZWVuKCkKLSAgICAgICAgICAgICAgICB8fCBiZWZvcmVDaGls
ZEFub255bW91c0NvbnRhaW5lci0+aXNSZW5kZXJGdWxsU2NyZWVuUGxhY2Vob2xkZXIoKQotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBj
aGlsZCBpbnRvIHRoZSBhbm9ueW1vdXMgYmxvY2sgYm94IGluc3RlYWQgb2YgaGVyZS4KLSAgICAg
ICAgICAgICAgICBpZiAobmV3Q2hpbGQtPmlzSW5saW5lKCkgfHwgYmVmb3JlQ2hpbGQtPnBhcmVu
dCgpLT5maXJzdENoaWxkKCkgIT0gYmVmb3JlQ2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIGJ1
aWxkZXIuaW5zZXJ0Q2hpbGQoKmJlZm9yZUNoaWxkLT5wYXJlbnQoKSwgV1RGTW92ZShuZXdDaGls
ZCksIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuaW5zZXJ0Q2hpbGQoKnRoaXMsIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVD
aGlsZC0+cGFyZW50KCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgQVNTRVJUKGJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVyLT5pc1Rh
YmxlKCkpOwotCi0gICAgICAgICAgICBpZiAobmV3Q2hpbGQtPmlzVGFibGVQYXJ0KCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBJbnNlcnQgaW50byB0aGUgYW5vbnltb3VzIHRhYmxlLgotICAgICAg
ICAgICAgICAgIGJ1aWxkZXIuaW5zZXJ0Q2hpbGQoKmJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFp
bmVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBzcGxpdEFu
b255bW91c0JveGVzQXJvdW5kQ2hpbGQoYmVmb3JlQ2hpbGQpOwotCi0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGJlZm9yZUNoaWxkLT5wYXJlbnQo
KSA9PSB0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgbWFkZUJveGVzTm9uSW5s
aW5lID0gZmFsc2U7Ci0KLSAgICAvLyBBIGJsb2NrIGhhcyB0byBlaXRoZXIgaGF2ZSBhbGwgb2Yg
aXRzIGNoaWxkcmVuIGlubGluZSwgb3IgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcyBibG9ja3MuCi0g
ICAgLy8gU28sIGlmIG91ciBjaGlsZHJlbiBhcmUgY3VycmVudGx5IGlubGluZSBhbmQgYSBibG9j
ayBjaGlsZCBoYXMgdG8gYmUgaW5zZXJ0ZWQsIHdlIG1vdmUgYWxsIG91cgotICAgIC8vIGlubGlu
ZSBjaGlsZHJlbiBpbnRvIGFub255bW91cyBibG9jayBib3hlcy4KLSAgICBpZiAoY2hpbGRyZW5J
bmxpbmUoKSAmJiAhbmV3Q2hpbGQtPmlzSW5saW5lKCkgJiYgIW5ld0NoaWxkLT5pc0Zsb2F0aW5n
T3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgLy8gVGhpcyBpcyBhIGJsb2NrIHdp
dGggaW5saW5lIGNvbnRlbnQuIFdyYXAgdGhlIGlubGluZSBjb250ZW50IGluIGFub255bW91cyBi
bG9ja3MuCi0gICAgICAgIG1ha2VDaGlsZHJlbk5vbklubGluZShiZWZvcmVDaGlsZCk7Ci0gICAg
ICAgIG1hZGVCb3hlc05vbklubGluZSA9IHRydWU7Ci0KLSAgICAgICAgaWYgKGJlZm9yZUNoaWxk
ICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgICAgICBiZWZvcmVD
aGlsZCA9IGJlZm9yZUNoaWxkLT5wYXJlbnQoKTsKLSAgICAgICAgICAgIEFTU0VSVChiZWZvcmVD
aGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKTsKLSAgICAgICAgICAgIEFTU0VSVChiZWZvcmVDaGls
ZC0+cGFyZW50KCkgPT0gdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFjaGlsZHJl
bklubGluZSgpICYmIChuZXdDaGlsZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgp
IHx8IG5ld0NoaWxkLT5pc0lubGluZSgpKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbnNlcnRp
bmcgYW4gaW5saW5lIGNoaWxkIGJ1dCBhbGwgb2Ygb3VyIGNoaWxkcmVuIGFyZSBibG9ja3MsIHRo
ZW4gd2UgaGF2ZSB0byBtYWtlIHN1cmUKLSAgICAgICAgLy8gaXQgaXMgcHV0IGludG8gYW4gYW5v
bXlvdXMgYmxvY2sgYm94LiBXZSB0cnkgdG8gdXNlIGFuIGV4aXN0aW5nIGFub255bW91cyBib3gg
aWYgcG9zc2libGUsIG90aGVyd2lzZQotICAgICAgICAvLyBhIG5ldyBvbmUgaXMgY3JlYXRlZCBh
bmQgaW5zZXJ0ZWQgaW50byBvdXIgbGlzdCBvZiBjaGlsZHJlbiBpbiB0aGUgYXBwcm9wcmlhdGUg
cG9zaXRpb24uCi0gICAgICAgIFJlbmRlck9iamVjdCogYWZ0ZXJDaGlsZCA9IGJlZm9yZUNoaWxk
ID8gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpIDogbGFzdENoaWxkKCk7Ci0KLSAgICAg
ICAgaWYgKGFmdGVyQ2hpbGQgJiYgYWZ0ZXJDaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKSB7Ci0g
ICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKGRvd25jYXN0PFJlbmRlckJsb2NrPigqYWZ0
ZXJDaGlsZCksIFdURk1vdmUobmV3Q2hpbGQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChuZXdDaGlsZC0+aXNJbmxpbmUoKSkgewotICAgICAgICAgICAg
Ly8gTm8gc3VpdGFibGUgZXhpc3RpbmcgYW5vbnltb3VzIGJveCAtIGNyZWF0ZSBhIG5ldyBvbmUu
Ci0gICAgICAgICAgICBhdXRvIG5ld0JveCA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0gICAg
ICAgICAgICBhdXRvJiBib3ggPSAqbmV3Qm94OwotICAgICAgICAgICAgUmVuZGVyQm94OjphZGRD
aGlsZChidWlsZGVyLCBXVEZNb3ZlKG5ld0JveCksIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgICAg
IGJ1aWxkZXIuaW5zZXJ0Q2hpbGQoYm94LCBXVEZNb3ZlKG5ld0NoaWxkKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnZhbGlkYXRlTGluZUxheW91dFBh
dGgoKTsKLQotICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoYnVpbGRlciwgV1RGTW92ZShuZXdDaGls
ZCksIGJlZm9yZUNoaWxkKTsKLSAKLSAgICBpZiAobWFkZUJveGVzTm9uSW5saW5lICYmIGlzPFJl
bmRlckJsb2NrPihwYXJlbnQoKSkgJiYgaXNBbm9ueW1vdXNCbG9jaygpKQotICAgICAgICBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2Nr
KHRoaXMpOwotICAgIC8vIHRoaXMgb2JqZWN0IG1heSBiZSBkZWFkIGhlcmUKLX0KLQotc3RhdGlj
IHZvaWQgZ2V0SW5saW5lUnVuKFJlbmRlck9iamVjdCogc3RhcnQsIFJlbmRlck9iamVjdCogYm91
bmRhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiYgaW5saW5lUnVu
U3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiYgaW5saW5lUnVu
RW5kKQotewotICAgIC8vIEJlZ2lubmluZyBhdCB8c3RhcnR8IHdlIGZpbmQgdGhlIGxhcmdlc3Qg
Y29udGlndW91cyBydW4gb2YgaW5saW5lcyB0aGF0Ci0gICAgLy8gd2UgY2FuLiAgV2UgZGVub3Rl
IHRoZSBydW4gd2l0aCBzdGFydCBhbmQgZW5kIHBvaW50cywgfGlubGluZVJ1blN0YXJ0fAotICAg
IC8vIGFuZCB8aW5saW5lUnVuRW5kfC4gIE5vdGUgdGhhdCB0aGVzZSB0d28gdmFsdWVzIG1heSBi
ZSB0aGUgc2FtZSBpZgotICAgIC8vIHdlIGVuY291bnRlciBvbmx5IG9uZSBpbmxpbmUuCi0gICAg
Ly8KLSAgICAvLyBXZSBza2lwIGFueSBub24taW5saW5lcyB3ZSBlbmNvdW50ZXIgYXMgbG9uZyBh
cyB3ZSBoYXZlbid0IGZvdW5kIGFueQotICAgIC8vIGlubGluZXMgeWV0LgotICAgIC8vCi0gICAg
Ly8gfGJvdW5kYXJ5fCBpbmRpY2F0ZXMgYSBub24taW5jbHVzaXZlIGJvdW5kYXJ5IHBvaW50LiAg
UmVnYXJkbGVzcyBvZiB3aGV0aGVyIHxib3VuZGFyeXwKLSAgICAvLyBpcyBpbmxpbmUgb3Igbm90
LCB3ZSB3aWxsIG5vdCBpbmNsdWRlIGl0IGluIGEgcnVuIHdpdGggaW5saW5lcyBiZWZvcmUgaXQu
ICBJdCdzIGFzIHRob3VnaCB3ZSBlbmNvdW50ZXJlZAotICAgIC8vIGEgbm9uLWlubGluZS4KLSAg
ICAKLSAgICAvLyBTdGFydCBieSBza2lwcGluZyBhcyBtYW55IG5vbi1pbmxpbmVzIGFzIHdlIGNh
bi4KLSAgICBSZW5kZXJPYmplY3QgKiBjdXJyID0gc3RhcnQ7Ci0gICAgYm9vbCBzYXdJbmxpbmU7
Ci0gICAgZG8gewotICAgICAgICB3aGlsZSAoY3VyciAmJiAhKGN1cnItPmlzSW5saW5lKCkgfHwg
Y3Vyci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSkKLSAgICAgICAgICAgIGN1
cnIgPSBjdXJyLT5uZXh0U2libGluZygpOwotICAgICAgICAKLSAgICAgICAgaW5saW5lUnVuU3Rh
cnQgPSBpbmxpbmVSdW5FbmQgPSBjdXJyOwotICAgICAgICAKLSAgICAgICAgaWYgKCFjdXJyKQot
ICAgICAgICAgICAgcmV0dXJuOyAvLyBObyBtb3JlIGlubGluZSBjaGlsZHJlbiB0byBiZSBmb3Vu
ZC4KLSAgICAgICAgCi0gICAgICAgIHNhd0lubGluZSA9IGN1cnItPmlzSW5saW5lKCk7Ci0gICAg
ICAgIAotICAgICAgICBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgd2hpbGUg
KGN1cnIgJiYgKGN1cnItPmlzSW5saW5lKCkgfHwgY3Vyci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93
UG9zaXRpb25lZCgpKSAmJiAoY3VyciAhPSBib3VuZGFyeSkpIHsKLSAgICAgICAgICAgIGlubGlu
ZVJ1bkVuZCA9IGN1cnI7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmUoKSkKLSAgICAg
ICAgICAgICAgICBzYXdJbmxpbmUgPSB0cnVlOwotICAgICAgICAgICAgY3VyciA9IGN1cnItPm5l
eHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICghc2F3SW5saW5lKTsKKyAgICBi
dWlsZGVyLmluc2VydENoaWxkVG9SZW5kZXJCbG9ja0lnbm9yaW5nQ29udGludWF0aW9uKCp0aGlz
LCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRlckJsb2Nr
OjpkZWxldGVMaW5lcygpCkBAIC02NzMsNTAgKzQ4Miw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRl
bGV0ZUxpbmVzKCkKICAgICAgICAgY2FjaGUtPmRlZmVyUmVjb21wdXRlSXNJZ25vcmVkKGVsZW1l
bnQoKSk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6Om1ha2VDaGlsZHJlbk5vbklubGluZShSZW5k
ZXJPYmplY3QqIGluc2VydGlvblBvaW50KQoteyAgICAKLSAgICAvLyBtYWtlQ2hpbGRyZW5Ob25J
bmxpbmUgdGFrZXMgYSBibG9jayB3aG9zZSBjaGlsZHJlbiBhcmUgKmFsbCogaW5saW5lIGFuZCBp
dAotICAgIC8vIG1ha2VzIHN1cmUgdGhhdCBpbmxpbmUgY2hpbGRyZW4gYXJlIGNvYWxlc2NlZCB1
bmRlciBhbm9ueW1vdXMKLSAgICAvLyBibG9ja3MuICBJZiB8aW5zZXJ0aW9uUG9pbnR8IGlzIGRl
ZmluZWQsIHRoZW4gaXQgcmVwcmVzZW50cyB0aGUgaW5zZXJ0aW9uIHBvaW50IGZvcgotICAgIC8v
IHRoZSBuZXcgYmxvY2sgY2hpbGQgdGhhdCBpcyBjYXVzaW5nIHVzIHRvIGhhdmUgdG8gd3JhcCBh
bGwgdGhlIGlubGluZXMuICBUaGlzCi0gICAgLy8gbWVhbnMgdGhhdCB3ZSBjYW5ub3QgY29hbGVz
Y2UgaW5saW5lcyBiZWZvcmUgfGluc2VydGlvblBvaW50fCB3aXRoIGlubGluZXMgZm9sbG93aW5n
Ci0gICAgLy8gfGluc2VydGlvblBvaW50fCwgYmVjYXVzZSB0aGUgbmV3IGNoaWxkIGlzIGdvaW5n
IHRvIGJlIGluc2VydGVkIGluIGJldHdlZW4gdGhlIGlubGluZXMsCi0gICAgLy8gc3BsaXR0aW5n
IHRoZW0uCi0gICAgQVNTRVJUKGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgfHwgIWlzSW5s
aW5lKCkpOwotICAgIEFTU0VSVCghaW5zZXJ0aW9uUG9pbnQgfHwgaW5zZXJ0aW9uUG9pbnQtPnBh
cmVudCgpID09IHRoaXMpOwotCi0gICAgc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwotCi0gICAg
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKLSAgICBpZiAoIWNoaWxkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBkZWxldGVMaW5lcygpOwotCi0gICAgd2hpbGUgKGNoaWxkKSB7
Ci0gICAgICAgIFJlbmRlck9iamVjdCogaW5saW5lUnVuU3RhcnQ7Ci0gICAgICAgIFJlbmRlck9i
amVjdCogaW5saW5lUnVuRW5kOwotICAgICAgICBnZXRJbmxpbmVSdW4oY2hpbGQsIGluc2VydGlv
blBvaW50LCBpbmxpbmVSdW5TdGFydCwgaW5saW5lUnVuRW5kKTsKLQotICAgICAgICBpZiAoIWlu
bGluZVJ1blN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2hpbGQgPSBpbmxp
bmVSdW5FbmQtPm5leHRTaWJsaW5nKCk7Ci0KLSAgICAgICAgYXV0byBuZXdCbG9jayA9IGNyZWF0
ZUFub255bW91c0Jsb2NrKCk7Ci0gICAgICAgIGF1dG8mIGJsb2NrID0gKm5ld0Jsb2NrOwotICAg
ICAgICBpbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUobmV3QmxvY2spLCBpbmxpbmVSdW5TdGFy
dCk7Ci0gICAgICAgIG1vdmVDaGlsZHJlblRvKCZibG9jaywgaW5saW5lUnVuU3RhcnQsIGNoaWxk
LCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Tm9ybWFsaXplQWZ0ZXJJbnNlcnRpb246Ok5vKTsKLSAg
ICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGMgPSBmaXJzdENo
aWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQotICAgICAgICBBU1NFUlQoIWMtPmlzSW5s
aW5lKCkpOwotI2VuZGlmCi0KLSAgICByZXBhaW50KCk7Ci19Ci0KIHZvaWQgUmVuZGVyQmxvY2s6
OnJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2soUmVuZGVyQmxvY2sqIGNoaWxkKQogewogICAg
IEFTU0VSVChjaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKTsKQEAgLTMyMTIsNyArMjk3Nyw3IEBA
IGNvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJCbG9jazo6b3V0bGluZVN0eWxlRm9yUmVwYWludCgp
IGNvbnN0CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRlckVs
ZW1lbnQmKQogewotICAgIG1ha2VDaGlsZHJlbk5vbklubGluZSgpOworICAgIFJlbmRlclRyZWVC
dWlsZGVyOjptYWtlQ2hpbGRyZW5Ob25JbmxpbmUoKnRoaXMpOwogICAgIGlmIChpc0Fub255bW91
c0Jsb2NrKCkgJiYgaXM8UmVuZGVyQmxvY2s+KHBhcmVudCgpKSkKICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KCpwYXJlbnQoKSkucmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayh0aGlz
KTsKICAgICAvLyB8dGhpc3wgbWF5IGJlIGRlYWQgaGVyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAppbmRleCBiYTViYWMzODAyNjJhODE4YTI2ZWZkNDM3MDYwMWE4ZWU0N2Rj
NzAwLi5lNjhmNWZjOGMxNDkwOGM5MWZkMDZlYzNmZWY1YTQ0NGYzZDBmZWI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMzk1LDcgKzM5NSwxMCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBhZGp1c3RCb3JkZXJCb3hSZWN0Rm9yUGFpbnRpbmcoTGF5b3V0UmVj
dCYpIG92ZXJyaWRlOwogICAgIExheW91dFJlY3QgcGFpbnRSZWN0VG9DbGlwT3V0RnJvbUJvcmRl
cihjb25zdCBMYXlvdXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgCisgICAgdm9pZCBhZGRDaGlsZEln
bm9yaW5nQ29udGludWF0aW9uKFJlbmRlclRyZWVCdWlsZGVyJiwgUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKFJlbmRlckJsb2NrKiBj
aGlsZCk7CisgICAgYm9vbCBpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIGlzSW5saW5lKCkgJiYgaXNSZXBsYWNlZCgpOyB9CisKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkT3ZlcmZsb3dGcm9tQ2hpbGRyZW4oKTsKICAgICAvLyBGSVhNRS1C
TE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphdGlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUgbW92
ZWQgdG8gUmVuZGVyQmxvY2tGbG93CkBAIC00MzIsMTcgKzQzNSw5IEBAIHByaXZhdGU6CiAKICAg
ICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIGlz
SW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNJbmxpbmUo
KSAmJiBpc1JlcGxhY2VkKCk7IH0KLQotICAgIHZvaWQgbWFrZUNoaWxkcmVuTm9uSW5saW5lKFJl
bmRlck9iamVjdCogaW5zZXJ0aW9uUG9pbnQgPSBudWxscHRyKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayhSZW5kZXJCbG9jayogY2hpbGQpOwotCiAgICAg
Ly8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJz
IGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93CiAgICAgdmlydHVhbCB2b2lkIG1vdmVBbGxD
aGlsZHJlbkluY2x1ZGluZ0Zsb2F0c1RvKFJlbmRlckJsb2NrJiB0b0Jsb2NrLCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6Tm9ybWFsaXplQWZ0ZXJJbnNlcnRpb24gbm9ybWFsaXplQWZ0ZXJJbnNlcnRp
b24pIHsgbW92ZUFsbENoaWxkcmVuVG8oJnRvQmxvY2ssIG5vcm1hbGl6ZUFmdGVySW5zZXJ0aW9u
KTsgfQogCi0gICAgdm9pZCBhZGRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlclRyZWVCdWlsZGVy
JiwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQpOwotICAgIHZvaWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJUcmVl
QnVpbGRlciYsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkKSBvdmVycmlkZTsKLQogICAgIGJvb2wgaXNTZWxmQ29sbGFwc2luZ0Jsb2Nr
KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGNoaWxkcmVuUHJldmVudFNlbGZD
b2xsYXBzaW5nKCkgY29uc3Q7CiAgICAgCkBAIC01MDIsNyArNDk3LDYgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxk
cmVuKGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKTsK
IAogICAgIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gY2xvbmUoKSBjb25zdDsKLSAgICBSZW5kZXJC
bG9jayogY29udGludWF0aW9uQmVmb3JlKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogCiAg
ICAgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIHVwZGF0ZUNhY2hlZEVuY2xvc2luZ0ZyYWdtZW50ZWRG
bG93KFJlbmRlckZyYWdtZW50ZWRGbG93KikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKaW5kZXggOTZiMDczZWQ2MTJhNTMzZTg2ZDlmZmNiOGRlM2ZkOTcxODA4
MWQ3ZC4uZDEwNjNhNjg5YTFlNTAyYmE0ZmM0ZDEyMWFkYzFlOTI2NDgyNTZmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTQ5MDQsNTcgKzQ5MDQsNiBAQCBib29s
IFJlbmRlckJveDo6aGFzUmVsYXRpdmVMb2dpY2FsV2lkdGgoKSBjb25zdAogICAgICAgICB8fCBz
dHlsZSgpLmxvZ2ljYWxNYXhXaWR0aCgpLmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpOwogfQogCi1z
dGF0aWMgdm9pZCBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KFJlbmRlckJveCYgYm94KQot
ewotICAgIC8vIEZJWE1FOiBUaGUgdGFibGUgY29kZSBzaG91bGQgaGFuZGxlIHRoYXQgYXV0b21h
dGljYWxseS4gSWYgbm90LAotICAgIC8vIHdlIHNob3VsZCBmaXggaXQgYW5kIHJlbW92ZSB0aGUg
dGFibGUgcGFydCBjaGVja3MuCi0gICAgaWYgKGlzPFJlbmRlclRhYmxlPihib3gpKSB7Ci0gICAg
ICAgIC8vIEJlY2F1c2Ugd2UgbWF5IGhhdmUgYWRkZWQgc29tZSBzZWN0aW9ucyB3aXRoIGFscmVh
ZHkgY29tcHV0ZWQgY29sdW1uIHN0cnVjdHVyZXMsIHdlIG5lZWQgdG8KLSAgICAgICAgLy8gc3lu
YyB0aGUgdGFibGUgc3RydWN0dXJlIHdpdGggdGhlbSBub3cuIFRoaXMgYXZvaWRzIGNyYXNoZXMg
d2hlbiBhZGRpbmcgbmV3IGNlbGxzIHRvIHRoZSB0YWJsZS4KLSAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyVGFibGU+KGJveCkuZm9yY2VTZWN0aW9uc1JlY2FsYygpOwotICAgIH0gZWxzZSBpZiAoaXM8
UmVuZGVyVGFibGVTZWN0aW9uPihib3gpKQotICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVNl
Y3Rpb24+KGJveCkuc2V0TmVlZHNDZWxsUmVjYWxjKCk7Ci0KLSAgICBib3guc2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci19Ci0KLVJlbmRlck9iamVjdCogUmVuZGVyQm94Ojpz
cGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkK
LXsKLSAgICBib29sIGRpZFNwbGl0UGFyZW50QW5vbnltb3VzQm94ZXMgPSBmYWxzZTsKLQotICAg
IHdoaWxlIChiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykgewotICAgICAgICBhdXRvJiBi
b3hUb1NwbGl0ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsK
LSAgICAgICAgaWYgKGJveFRvU3BsaXQuZmlyc3RDaGlsZCgpICE9IGJlZm9yZUNoaWxkICYmIGJv
eFRvU3BsaXQuaXNBbm9ueW1vdXMoKSkgewotICAgICAgICAgICAgZGlkU3BsaXRQYXJlbnRBbm9u
eW1vdXNCb3hlcyA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gc3BsaXQgdGhl
IHBhcmVudCBib3ggaW50byB0d28gYm94ZXMgYW5kIG1vdmUgY2hpbGRyZW4KLSAgICAgICAgICAg
IC8vIGZyb20gfGJlZm9yZUNoaWxkfCB0byBlbmQgaW50byB0aGUgbmV3IHBvc3QgYm94LgotICAg
ICAgICAgICAgYXV0byBuZXdQb3N0Qm94ID0gYm94VG9TcGxpdC5jcmVhdGVBbm9ueW1vdXNCb3hX
aXRoU2FtZVR5cGVBcygqdGhpcyk7Ci0gICAgICAgICAgICBhdXRvJiBwb3N0Qm94ID0gKm5ld1Bv
c3RCb3g7Ci0gICAgICAgICAgICBwb3N0Qm94LnNldENoaWxkcmVuSW5saW5lKGJveFRvU3BsaXQu
Y2hpbGRyZW5JbmxpbmUoKSk7Ci0gICAgICAgICAgICBSZW5kZXJCb3gqIHBhcmVudEJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4oYm94VG9TcGxpdC5wYXJlbnQoKSk7Ci0gICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGludmFsaWRhdGUgdGhlIHxwYXJlbnRCb3h8IGJlZm9yZSBpbnNlcnRpbmcgdGhl
IG5ldyBub2RlCi0gICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSB0YWJsZSByZXBhaW50aW5nIGxv
Z2ljIGtub3dzIHRoZSBzdHJ1Y3R1cmUgaXMgZGlydHkuCi0gICAgICAgICAgICAvLyBTZWUgZm9y
IGV4YW1wbGUgUmVuZGVyVGFibGVDZWxsOmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50Lgot
ICAgICAgICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdCgqcGFyZW50Qm94KTsKLSAg
ICAgICAgICAgIHBhcmVudEJveC0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5ld1Bvc3RC
b3gpLCBib3hUb1NwbGl0Lm5leHRTaWJsaW5nKCkpOwotICAgICAgICAgICAgYm94VG9TcGxpdC5t
b3ZlQ2hpbGRyZW5UbygmcG9zdEJveCwgYmVmb3JlQ2hpbGQsIG51bGxwdHIsIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpOb3JtYWxpemVBZnRlckluc2VydGlvbjo6WWVzKTsKLQotICAgICAgICAgICAg
bWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdChib3hUb1NwbGl0KTsKLSAgICAgICAgICAgIG1h
cmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQocG9zdEJveCk7Ci0KLSAgICAgICAgICAgIGJlZm9y
ZUNoaWxkID0gJnBvc3RCb3g7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYmVmb3JlQ2hp
bGQgPSAmYm94VG9TcGxpdDsKLSAgICB9Ci0KLSAgICBpZiAoZGlkU3BsaXRQYXJlbnRBbm9ueW1v
dXNCb3hlcykKLSAgICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdCgqdGhpcyk7Ci0K
LSAgICBBU1NFUlQoYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpOwotICAgIHJldHVybiBi
ZWZvcmVDaGlsZDsKLX0KLQogTGF5b3V0VW5pdCBSZW5kZXJCb3g6Om9mZnNldEZyb21Mb2dpY2Fs
VG9wT2ZGaXJzdFBhZ2UoKSBjb25zdAogewogICAgIGF1dG8qIGxheW91dFN0YXRlID0gdmlldygp
LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IDRhY2QyZTQ4YmExZWJlMTBiOTM4MzJjYjUxNTczNDdh
N2E3ZWRhOTcuLmFkNDQ5MWJkN2NhZGE0MzA2YTVlNDExMjQxOTRjMmJiYjI2MjE0MWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTY2NSw4ICs2NjUsNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB2b2lkIHBhaW50Um9vdEJveEZpbGxMYXllcnMoY29uc3QgUGFpbnRJbmZvJik7
CiAKLSAgICBSZW5kZXJPYmplY3QqIHNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKLQogICAgIGJvb2wgc2tpcENvbnRhaW5pbmdCbG9ja0Zv
clBlcmNlbnRIZWlnaHRDYWxjdWxhdGlvbihjb25zdCBSZW5kZXJCb3gmIGNvbnRhaW5pbmdCbG9j
aywgYm9vbCBpc1BlcnBlbmRpY3VsYXJXcml0aW5nTW9kZSkgY29uc3Q7CiAKIHByaXZhdGU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcAppbmRleCAzOTkzZmQx
YzE2NjEyYmEwYmI3YzE4OGJiNDdkY2M5MTE2ZTA4YjYxLi42NjM2YTlkZGEyNDA2MjdkNmM4MTA5
OGRkNjkzNzljMDAxMDNmMThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUnVieUJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
dWJ5QmFzZS5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBSZW5kZXJSdWJ5QmFzZTo6bW92ZUNo
aWxkcmVuKFJlbmRlclJ1YnlCYXNlKiB0b0Jhc2UsIFJlbmRlck9iamVjdCogYmVmb3JlQ2gKICAg
ICBBU1NFUlRfQVJHKHRvQmFzZSwgdG9CYXNlKTsKIAogICAgIGlmIChiZWZvcmVDaGlsZCAmJiBi
ZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykKLSAgICAgICAgYmVmb3JlQ2hpbGQgPSBzcGxp
dEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoYmVmb3JlQ2hpbGQpOworICAgICAgICBiZWZvcmVD
aGlsZCA9IFJlbmRlclRyZWVCdWlsZGVyOjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQo
KnRoaXMsIGJlZm9yZUNoaWxkKTsKIAogICAgIGlmIChjaGlsZHJlbklubGluZSgpKQogICAgICAg
ICBtb3ZlSW5saW5lQ2hpbGRyZW4odG9CYXNlLCBiZWZvcmVDaGlsZCk7CkBAIC0xMTUsNyArMTE1
LDcgQEAgdm9pZCBSZW5kZXJSdWJ5QmFzZTo6bW92ZUJsb2NrQ2hpbGRyZW4oUmVuZGVyUnVieUJh
c2UqIHRvQmFzZSwgUmVuZGVyT2JqZWN0KiBiZWYKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KHRvQmFzZS0+Y2hpbGRyZW5JbmxpbmUoKSkKLSAgICAgICAgdG9CYXNlLT5tYWtlQ2hpbGRyZW5O
b25JbmxpbmUoKTsKKyAgICAgICAgUmVuZGVyVHJlZUJ1aWxkZXI6Om1ha2VDaGlsZHJlbk5vbklu
bGluZSgqdG9CYXNlKTsKIAogICAgIC8vIElmIGFuIGFub255bW91cyBibG9jayB3b3VsZCBiZSBw
dXQgbmV4dCB0byBhbm90aGVyIHN1Y2ggYmxvY2ssIHRoZW4gbWVyZ2UgdGhvc2UuCiAgICAgUmVu
ZGVyT2JqZWN0KiBmaXJzdENoaWxkSGVyZSA9IGZpcnN0Q2hpbGQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IGVlYzY2YWEwMmJjMzc2NzdhODZlYzZmNGQz
ZTU1MDgyM2NmMzAyZjMuLjg0NTI5ODdkNGVhMTdmODQwMGM3ZDgzYmFhMjA2MGY4MWU0Mjc1OWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtMTcwLDcgKzE3
MCw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlclRyZWVCdWlsZGVyJiBidWls
ZGVyLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjCiAgICAgICAgIHNldE5lZWRzU2VjdGlvblJl
Y2FsYygpOwogCiAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAh
PSB0aGlzKQotICAgICAgICBiZWZvcmVDaGlsZCA9IHNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRD
aGlsZChiZWZvcmVDaGlsZCk7CisgICAgICAgIGJlZm9yZUNoaWxkID0gUmVuZGVyVHJlZUJ1aWxk
ZXI6OnNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZCgqdGhpcywgYmVmb3JlQ2hpbGQpOwog
CiAgICAgUmVuZGVyQm94OjphZGRDaGlsZChidWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3Jl
Q2hpbGQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAK
aW5kZXggNmNiMjUyNTU5MzIxM2U5M2ZmMTBkMjk5ZDMzNTQ4NjkyYzQyZGE4ZC4uYTVjZDAzZmQw
M2Y3OGNjMTdmODFmZGY0MDVjYzVlNGIxZjYwMjcyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCkBAIC0xMTQsNyArMTE0LDcgQEAgY29uc3QgQm9yZGVy
VmFsdWUmIFJlbmRlclRhYmxlUm93Ojpib3JkZXJBZGpvaW5pbmdFbmRDZWxsKGNvbnN0IFJlbmRl
clRhYmxlQ2VsbCYKIHZvaWQgUmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKFJlbmRlclRyZWVCdWls
ZGVyJiBidWlsZGVyLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKIHsKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBh
cmVudCgpICE9IHRoaXMpCi0gICAgICAgIGJlZm9yZUNoaWxkID0gc3BsaXRBbm9ueW1vdXNCb3hl
c0Fyb3VuZENoaWxkKGJlZm9yZUNoaWxkKTsgICAgCisgICAgICAgIGJlZm9yZUNoaWxkID0gUmVu
ZGVyVHJlZUJ1aWxkZXI6OnNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZCgqdGhpcywgYmVm
b3JlQ2hpbGQpOyAgICAKIAogICAgIC8vIEdlbmVyYXRlZCBjb250ZW50IGNhbiByZXN1bHQgaW4g
dXMgaGF2aW5nIGEgbnVsbCBzZWN0aW9uIHNvIG1ha2Ugc3VyZSB0byBudWxsIGNoZWNrIG91ciBw
YXJlbnQuCiAgICAgaWYgKGF1dG8qIHNlY3Rpb24gPSB0aGlzLT5zZWN0aW9uKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IGZlMmI5
MDRkYmVlMzUxMzBiMjNkZmRjYTcyM2Q3NmVlODcwOGI2YTUuLmE4NzEwZjNjMmFjMzBiNjIzNmVm
MzQxZjA2MmM0N2ExN2Q4YzUxZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlclRyZWVCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJQdHI8
UmVuZGVyT2IKICAgICAgICAgc2V0Um93TG9naWNhbEhlaWdodFRvUm93U3R5bGVMb2dpY2FsSGVp
Z2h0SWZOb3RSZWxhdGl2ZShtX2dyaWRbaW5zZXJ0aW9uUm93XSk7CiAKICAgICBpZiAoYmVmb3Jl
Q2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMpCi0gICAgICAgIGJlZm9yZUNo
aWxkID0gc3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKGJlZm9yZUNoaWxkKTsKKyAgICAg
ICAgYmVmb3JlQ2hpbGQgPSBSZW5kZXJUcmVlQnVpbGRlcjo6c3BsaXRBbm9ueW1vdXNCb3hlc0Fy
b3VuZENoaWxkKCp0aGlzLCBiZWZvcmVDaGlsZCk7CiAKICAgICBBU1NFUlQoIWJlZm9yZUNoaWxk
IHx8IGlzPFJlbmRlclRhYmxlUm93PigqYmVmb3JlQ2hpbGQpKTsKICAgICBSZW5kZXJCb3g6OmFk
ZENoaWxkKGJ1aWxkZXIsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNw
cAppbmRleCAzMTkyZDRhNzI5ZDE1YTUzMGE0ZTIyZmI0MWRkODMzOWE2NWIzNTY5Li41OTE5MTM3
MTczNTc5MDdiMzUzYjYxM2I0NDY2YmE3MTZmN2EzMjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJSdWJ5UnVuLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGFibGVSb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyVHJl
ZUJ1aWxkZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oIgogI2luY2x1ZGUg
IlJlbmRlclRyZWVCdWlsZGVyTGlzdC5oIgpAQCAtNDQsNiArNDUsNTkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBSZW5kZXJUcmVlQnVpbGRlciogUmVuZGVyVHJlZUJ1aWxkZXI6OnNfY3VycmVu
dDsKIAorc3RhdGljIHZvaWQgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdChSZW5kZXJCb3gm
IGJveCkKK3sKKyAgICAvLyBGSVhNRTogVGhlIHRhYmxlIGNvZGUgc2hvdWxkIGhhbmRsZSB0aGF0
IGF1dG9tYXRpY2FsbHkuIElmIG5vdCwKKyAgICAvLyB3ZSBzaG91bGQgZml4IGl0IGFuZCByZW1v
dmUgdGhlIHRhYmxlIHBhcnQgY2hlY2tzLgorICAgIGlmIChpczxSZW5kZXJUYWJsZT4oYm94KSkg
eworICAgICAgICAvLyBCZWNhdXNlIHdlIG1heSBoYXZlIGFkZGVkIHNvbWUgc2VjdGlvbnMgd2l0
aCBhbHJlYWR5IGNvbXB1dGVkIGNvbHVtbiBzdHJ1Y3R1cmVzLCB3ZSBuZWVkIHRvCisgICAgICAg
IC8vIHN5bmMgdGhlIHRhYmxlIHN0cnVjdHVyZSB3aXRoIHRoZW0gbm93LiBUaGlzIGF2b2lkcyBj
cmFzaGVzIHdoZW4gYWRkaW5nIG5ldyBjZWxscyB0byB0aGUgdGFibGUuCisgICAgICAgIGRvd25j
YXN0PFJlbmRlclRhYmxlPihib3gpLmZvcmNlU2VjdGlvbnNSZWNhbGMoKTsKKyAgICB9IGVsc2Ug
aWYgKGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oYm94KSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVy
VGFibGVTZWN0aW9uPihib3gpLnNldE5lZWRzQ2VsbFJlY2FsYygpOworCisgICAgYm94LnNldE5l
ZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworfQorCitzdGF0aWMgdm9pZCBnZXRJbmxp
bmVSdW4oUmVuZGVyT2JqZWN0KiBzdGFydCwgUmVuZGVyT2JqZWN0KiBib3VuZGFyeSwgUmVuZGVy
T2JqZWN0KiYgaW5saW5lUnVuU3RhcnQsIFJlbmRlck9iamVjdComIGlubGluZVJ1bkVuZCkKK3sK
KyAgICAvLyBCZWdpbm5pbmcgYXQgfHN0YXJ0fCB3ZSBmaW5kIHRoZSBsYXJnZXN0IGNvbnRpZ3Vv
dXMgcnVuIG9mIGlubGluZXMgdGhhdAorICAgIC8vIHdlIGNhbi4gV2UgZGVub3RlIHRoZSBydW4g
d2l0aCBzdGFydCBhbmQgZW5kIHBvaW50cywgfGlubGluZVJ1blN0YXJ0fAorICAgIC8vIGFuZCB8
aW5saW5lUnVuRW5kfC4gTm90ZSB0aGF0IHRoZXNlIHR3byB2YWx1ZXMgbWF5IGJlIHRoZSBzYW1l
IGlmCisgICAgLy8gd2UgZW5jb3VudGVyIG9ubHkgb25lIGlubGluZS4KKyAgICAvLworICAgIC8v
IFdlIHNraXAgYW55IG5vbi1pbmxpbmVzIHdlIGVuY291bnRlciBhcyBsb25nIGFzIHdlIGhhdmVu
J3QgZm91bmQgYW55CisgICAgLy8gaW5saW5lcyB5ZXQuCisgICAgLy8KKyAgICAvLyB8Ym91bmRh
cnl8IGluZGljYXRlcyBhIG5vbi1pbmNsdXNpdmUgYm91bmRhcnkgcG9pbnQuIFJlZ2FyZGxlc3Mg
b2Ygd2hldGhlciB8Ym91bmRhcnl8CisgICAgLy8gaXMgaW5saW5lIG9yIG5vdCwgd2Ugd2lsbCBu
b3QgaW5jbHVkZSBpdCBpbiBhIHJ1biB3aXRoIGlubGluZXMgYmVmb3JlIGl0LiBJdCdzIGFzIHRo
b3VnaCB3ZSBlbmNvdW50ZXJlZAorICAgIC8vIGEgbm9uLWlubGluZS4KKworICAgIC8vIFN0YXJ0
IGJ5IHNraXBwaW5nIGFzIG1hbnkgbm9uLWlubGluZXMgYXMgd2UgY2FuLgorICAgIGF1dG8qIGN1
cnIgPSBzdGFydDsKKyAgICBib29sIHNhd0lubGluZTsKKyAgICBkbyB7CisgICAgICAgIHdoaWxl
IChjdXJyICYmICEoY3Vyci0+aXNJbmxpbmUoKSB8fCBjdXJyLT5pc0Zsb2F0aW5nT3JPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpKQorICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCk7
CisKKyAgICAgICAgaW5saW5lUnVuU3RhcnQgPSBpbmxpbmVSdW5FbmQgPSBjdXJyOworCisgICAg
ICAgIGlmICghY3VycikKKyAgICAgICAgICAgIHJldHVybjsgLy8gTm8gbW9yZSBpbmxpbmUgY2hp
bGRyZW4gdG8gYmUgZm91bmQuCisKKyAgICAgICAgc2F3SW5saW5lID0gY3Vyci0+aXNJbmxpbmUo
KTsKKworICAgICAgICBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgd2hpbGUg
KGN1cnIgJiYgKGN1cnItPmlzSW5saW5lKCkgfHwgY3Vyci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93
UG9zaXRpb25lZCgpKSAmJiAoY3VyciAhPSBib3VuZGFyeSkpIHsKKyAgICAgICAgICAgIGlubGlu
ZVJ1bkVuZCA9IGN1cnI7CisgICAgICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmUoKSkKKyAgICAg
ICAgICAgICAgICBzYXdJbmxpbmUgPSB0cnVlOworICAgICAgICAgICAgY3VyciA9IGN1cnItPm5l
eHRTaWJsaW5nKCk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlICghc2F3SW5saW5lKTsKK30KKwor
CiBSZW5kZXJUcmVlQnVpbGRlcjo6UmVuZGVyVHJlZUJ1aWxkZXIoUmVuZGVyVmlldyYgdmlldykK
ICAgICA6IG1fdmlldyh2aWV3KQogICAgICwgbV9maXJzdExldHRlckJ1aWxkZXIoc3RkOjptYWtl
X3VuaXF1ZTxGaXJzdExldHRlcj4oKnRoaXMpKQpAQCAtNTIsNiArMTA2LDcgQEAgUmVuZGVyVHJl
ZUJ1aWxkZXI6OlJlbmRlclRyZWVCdWlsZGVyKFJlbmRlclZpZXcmIHZpZXcpCiAgICAgLCBtX3Rh
YmxlQnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPFRhYmxlPigqdGhpcykpCiAgICAgLCBtX3J1YnlC
dWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8UnVieT4oKnRoaXMpKQogICAgICwgbV9mb3JtQ29udHJv
bHNCdWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8Rm9ybUNvbnRyb2xzPigqdGhpcykpCisgICAgLCBt
X2Jsb2NrQnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPEJsb2NrPigqdGhpcykpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIXNfY3VycmVudCB8fCAmbV92aWV3ICE9ICZzX2N1cnJlbnQtPm1fdmlldyk7
CiAgICAgbV9wcmV2aW91cyA9IHNfY3VycmVudDsKQEAgLTEyOCw2ICsxODMsOTUgQEAgdm9pZCBS
ZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGQoUmVuZGVyVHJlZVBvc2l0aW9uJiBwb3NpdGlv
biwgUmVuZGVyUHRyPFJlbmQKICAgICBpbnNlcnRDaGlsZChwb3NpdGlvbi5wYXJlbnQoKSwgV1RG
TW92ZShjaGlsZCksIHBvc2l0aW9uLm5leHRTaWJsaW5nKCkpOwogfQogCit2b2lkIFJlbmRlclRy
ZWVCdWlsZGVyOjppbnNlcnRDaGlsZFRvUmVuZGVyQmxvY2soUmVuZGVyQmxvY2smIHBhcmVudCwg
UmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQp
Cit7CisgICAgYmxvY2tCdWlsZGVyKCkuaW5zZXJ0Q2hpbGQocGFyZW50LCBXVEZNb3ZlKGNoaWxk
KSwgYmVmb3JlQ2hpbGQpOworfQorCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGls
ZFRvUmVuZGVyQmxvY2tJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJCbG9jayYgcGFyZW50LCBS
ZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkK
K3sKKyAgICBibG9ja0J1aWxkZXIoKS5pbnNlcnRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKHBh
cmVudCwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKK30KKwordm9pZCBSZW5kZXJUcmVl
QnVpbGRlcjo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRl
ck9iamVjdCogaW5zZXJ0aW9uUG9pbnQpCit7CisgICAgLy8gbWFrZUNoaWxkcmVuTm9uSW5saW5l
IHRha2VzIGEgYmxvY2sgd2hvc2UgY2hpbGRyZW4gYXJlICphbGwqIGlubGluZSBhbmQgaXQKKyAg
ICAvLyBtYWtlcyBzdXJlIHRoYXQgaW5saW5lIGNoaWxkcmVuIGFyZSBjb2FsZXNjZWQgdW5kZXIg
YW5vbnltb3VzCisgICAgLy8gYmxvY2tzLiBJZiB8aW5zZXJ0aW9uUG9pbnR8IGlzIGRlZmluZWQs
IHRoZW4gaXQgcmVwcmVzZW50cyB0aGUgaW5zZXJ0aW9uIHBvaW50IGZvcgorICAgIC8vIHRoZSBu
ZXcgYmxvY2sgY2hpbGQgdGhhdCBpcyBjYXVzaW5nIHVzIHRvIGhhdmUgdG8gd3JhcCBhbGwgdGhl
IGlubGluZXMuIFRoaXMKKyAgICAvLyBtZWFucyB0aGF0IHdlIGNhbm5vdCBjb2FsZXNjZSBpbmxp
bmVzIGJlZm9yZSB8aW5zZXJ0aW9uUG9pbnR8IHdpdGggaW5saW5lcyBmb2xsb3dpbmcKKyAgICAv
LyB8aW5zZXJ0aW9uUG9pbnR8LCBiZWNhdXNlIHRoZSBuZXcgY2hpbGQgaXMgZ29pbmcgdG8gYmUg
aW5zZXJ0ZWQgaW4gYmV0d2VlbiB0aGUgaW5saW5lcywKKyAgICAvLyBzcGxpdHRpbmcgdGhlbS4K
KyAgICBBU1NFUlQocGFyZW50LmlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgfHwgIXBhcmVu
dC5pc0lubGluZSgpKTsKKyAgICBBU1NFUlQoIWluc2VydGlvblBvaW50IHx8IGluc2VydGlvblBv
aW50LT5wYXJlbnQoKSA9PSAmcGFyZW50KTsKKworICAgIHBhcmVudC5zZXRDaGlsZHJlbklubGlu
ZShmYWxzZSk7CisKKyAgICBhdXRvKiBjaGlsZCA9IHBhcmVudC5maXJzdENoaWxkKCk7CisgICAg
aWYgKCFjaGlsZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFyZW50LmRlbGV0ZUxpbmVzKCk7
CisKKyAgICB3aGlsZSAoY2hpbGQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBpbmxpbmVSdW5T
dGFydCA9IG51bGxwdHI7CisgICAgICAgIFJlbmRlck9iamVjdCogaW5saW5lUnVuRW5kID0gbnVs
bHB0cjsKKyAgICAgICAgZ2V0SW5saW5lUnVuKGNoaWxkLCBpbnNlcnRpb25Qb2ludCwgaW5saW5l
UnVuU3RhcnQsIGlubGluZVJ1bkVuZCk7CisKKyAgICAgICAgaWYgKCFpbmxpbmVSdW5TdGFydCkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNoaWxkID0gaW5saW5lUnVuRW5kLT5uZXh0
U2libGluZygpOworCisgICAgICAgIGF1dG8gbmV3QmxvY2sgPSBwYXJlbnQuY3JlYXRlQW5vbnlt
b3VzQmxvY2soKTsKKyAgICAgICAgYXV0byYgYmxvY2sgPSAqbmV3QmxvY2s7CisgICAgICAgIHBh
cmVudC5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUobmV3QmxvY2spLCBpbmxpbmVSdW5TdGFy
dCk7CisgICAgICAgIHBhcmVudC5tb3ZlQ2hpbGRyZW5UbygmYmxvY2ssIGlubGluZVJ1blN0YXJ0
LCBjaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6ZUFmdGVySW5zZXJ0aW9uOjpO
byk7CisgICAgfQorI2lmbmRlZiBOREVCVUcKKyAgICBmb3IgKFJlbmRlck9iamVjdCogYyA9IHBh
cmVudC5maXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQorICAgICAgICBBU1NF
UlQoIWMtPmlzSW5saW5lKCkpOworI2VuZGlmCisgICAgcGFyZW50LnJlcGFpbnQoKTsKK30KKwor
UmVuZGVyT2JqZWN0KiBSZW5kZXJUcmVlQnVpbGRlcjo6c3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3Vu
ZENoaWxkKFJlbmRlckJveCYgcGFyZW50LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQorewor
ICAgIGJvb2wgZGlkU3BsaXRQYXJlbnRBbm9ueW1vdXNCb3hlcyA9IGZhbHNlOworCisgICAgd2hp
bGUgKGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSAmcGFyZW50KSB7CisgICAgICAgIGF1dG8mIGJv
eFRvU3BsaXQgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpiZWZvcmVDaGlsZC0+cGFyZW50KCkpOwor
ICAgICAgICBpZiAoYm94VG9TcGxpdC5maXJzdENoaWxkKCkgIT0gYmVmb3JlQ2hpbGQgJiYgYm94
VG9TcGxpdC5pc0Fub255bW91cygpKSB7CisgICAgICAgICAgICBkaWRTcGxpdFBhcmVudEFub255
bW91c0JveGVzID0gdHJ1ZTsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBzcGxpdCB0aGUg
cGFyZW50IGJveCBpbnRvIHR3byBib3hlcyBhbmQgbW92ZSBjaGlsZHJlbgorICAgICAgICAgICAg
Ly8gZnJvbSB8YmVmb3JlQ2hpbGR8IHRvIGVuZCBpbnRvIHRoZSBuZXcgcG9zdCBib3guCisgICAg
ICAgICAgICBhdXRvIG5ld1Bvc3RCb3ggPSBib3hUb1NwbGl0LmNyZWF0ZUFub255bW91c0JveFdp
dGhTYW1lVHlwZUFzKHBhcmVudCk7CisgICAgICAgICAgICBhdXRvJiBwb3N0Qm94ID0gKm5ld1Bv
c3RCb3g7CisgICAgICAgICAgICBwb3N0Qm94LnNldENoaWxkcmVuSW5saW5lKGJveFRvU3BsaXQu
Y2hpbGRyZW5JbmxpbmUoKSk7CisgICAgICAgICAgICBSZW5kZXJCb3gqIHBhcmVudEJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4oYm94VG9TcGxpdC5wYXJlbnQoKSk7CisgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGludmFsaWRhdGUgdGhlIHxwYXJlbnRCb3h8IGJlZm9yZSBpbnNlcnRpbmcgdGhl
IG5ldyBub2RlCisgICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSB0YWJsZSByZXBhaW50aW5nIGxv
Z2ljIGtub3dzIHRoZSBzdHJ1Y3R1cmUgaXMgZGlydHkuCisgICAgICAgICAgICAvLyBTZWUgZm9y
IGV4YW1wbGUgUmVuZGVyVGFibGVDZWxsOmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50Lgor
ICAgICAgICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdCgqcGFyZW50Qm94KTsKKyAg
ICAgICAgICAgIHBhcmVudEJveC0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5ld1Bvc3RC
b3gpLCBib3hUb1NwbGl0Lm5leHRTaWJsaW5nKCkpOworICAgICAgICAgICAgYm94VG9TcGxpdC5t
b3ZlQ2hpbGRyZW5UbygmcG9zdEJveCwgYmVmb3JlQ2hpbGQsIG51bGxwdHIsIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpOb3JtYWxpemVBZnRlckluc2VydGlvbjo6WWVzKTsKKworICAgICAgICAgICAg
bWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdChib3hUb1NwbGl0KTsKKyAgICAgICAgICAgIG1h
cmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQocG9zdEJveCk7CisKKyAgICAgICAgICAgIGJlZm9y
ZUNoaWxkID0gJnBvc3RCb3g7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYmVmb3JlQ2hp
bGQgPSAmYm94VG9TcGxpdDsKKyAgICB9CisKKyAgICBpZiAoZGlkU3BsaXRQYXJlbnRBbm9ueW1v
dXNCb3hlcykKKyAgICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdChwYXJlbnQpOwor
CisgICAgQVNTRVJUKGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSAmcGFyZW50KTsKKyAgICByZXR1
cm4gYmVmb3JlQ2hpbGQ7Cit9CisKIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OnVwZGF0ZUFmdGVy
RGVzY2VuZGFudHMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7CiAgICAgaWYgKGlzPFJlbmRl
ckJsb2NrPihyZW5kZXJlcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oCmluZGV4IGIwNWZkMWZmOWE1MTRmZWVlZTUyZDA5
MGQ2ZjM3ODc2MjRmYjdlNmYuLmQ3NzE4OWJhOGJkYmYyNTIyY2NlZjA4MDY4NzYzYmU4M2UyNjVm
OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlQnVpbGRlci5oCkBAIC00Niw2ICs0NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6
IFJlbW92ZS4KICAgICBzdGF0aWMgUmVuZGVyVHJlZUJ1aWxkZXIqIGN1cnJlbnQoKSB7IHJldHVy
biBzX2N1cnJlbnQ7IH0KIAorICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdGVtcG9yYXJ5IHVu
dGlsIGFmdGVyIGFsbCBibG9jay9pbmxpbmUvY29udGludWF0aW9uIGNvZGUgaXMgbW92ZWQgb3Zl
ci4KKyAgICB2b2lkIGluc2VydENoaWxkVG9SZW5kZXJCbG9jayhSZW5kZXJCbG9jayYgcGFyZW50
LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51
bGxwdHIpOworICAgIHZvaWQgaW5zZXJ0Q2hpbGRUb1JlbmRlckJsb2NrSWdub3JpbmdDb250aW51
YXRpb24oUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4sIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKTsKKyAgICBzdGF0aWMgdm9pZCBtYWtlQ2hp
bGRyZW5Ob25JbmxpbmUoUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyT2JqZWN0KiBpbnNlcnRp
b25Qb2ludCA9IG51bGxwdHIpOworICAgIHN0YXRpYyBSZW5kZXJPYmplY3QqIHNwbGl0QW5vbnlt
b3VzQm94ZXNBcm91bmRDaGlsZChSZW5kZXJCb3gmIHBhcmVudCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCk7CisKIHByaXZhdGU6CiAgICAgY2xhc3MgRmlyc3RMZXR0ZXI7CiAgICAgY2xhc3Mg
TGlzdDsKQEAgLTUzLDYgKzU5LDcgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBUYWJsZTsKICAgICBj
bGFzcyBSdWJ5OwogICAgIGNsYXNzIEZvcm1Db250cm9sczsKKyAgICBjbGFzcyBCbG9jazsKIAog
ICAgIEZpcnN0TGV0dGVyJiBmaXJzdExldHRlckJ1aWxkZXIoKSB7IHJldHVybiAqbV9maXJzdExl
dHRlckJ1aWxkZXI7IH0KICAgICBMaXN0JiBsaXN0QnVpbGRlcigpIHsgcmV0dXJuICptX2xpc3RC
dWlsZGVyOyB9CkBAIC02MCw2ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgVGFibGUmIHRhYmxlQnVp
bGRlcigpIHsgcmV0dXJuICptX3RhYmxlQnVpbGRlcjsgfQogICAgIFJ1YnkmIHJ1YnlCdWlsZGVy
KCkgeyByZXR1cm4gKm1fcnVieUJ1aWxkZXI7IH0KICAgICBGb3JtQ29udHJvbHMmIGZvcm1Db250
cm9sc0J1aWxkZXIoKSB7IHJldHVybiAqbV9mb3JtQ29udHJvbHNCdWlsZGVyOyB9CisgICAgQmxv
Y2smIGJsb2NrQnVpbGRlcigpIHsgcmV0dXJuICptX2Jsb2NrQnVpbGRlcjsgfQogCiAgICAgUmVu
ZGVyVmlldyYgbV92aWV3OwogCkBAIC03Miw2ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFRhYmxlPiBtX3RhYmxlQnVpbGRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVi
eT4gbV9ydWJ5QnVpbGRlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9ybUNvbnRyb2xzPiBtX2Zv
cm1Db250cm9sc0J1aWxkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJsb2NrPiBtX2Jsb2NrQnVp
bGRlcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRh
dGluZy9SZW5kZXJUcmVlQnVpbGRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckJsb2NrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzNkZjQ0
N2UwYTU4YWE1NWM0ZmVkMzAwYzM2MjYzNjM1MDcwZGVmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3Bw
CkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyQmxvY2suaCIKKworI2luY2x1ZGUgIlJlbmRlckNoaWxk
SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIFJlbmRlckJsb2NrKiBjb250aW51YXRpb25CZWZvcmUoUmVuZGVy
QmxvY2smIHBhcmVudCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBpZiAoYmVm
b3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09ICZwYXJlbnQpCisgICAgICAgIHJl
dHVybiAmcGFyZW50OworCisgICAgUmVuZGVyQmxvY2sqIG5leHRUb0xhc3QgPSAmcGFyZW50Owor
ICAgIFJlbmRlckJsb2NrKiBsYXN0ID0gJnBhcmVudDsKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnQg
PSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocGFyZW50LmNvbnRpbnVhdGlvbigpKTsgY3VycmVudDsg
Y3VycmVudCA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihjdXJyZW50LT5jb250aW51YXRpb24oKSkp
IHsKKyAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSBj
dXJyZW50KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudC0+Zmlyc3RDaGlsZCgpID09IGJlZm9y
ZUNoaWxkKQorICAgICAgICAgICAgICAgIHJldHVybiBsYXN0OworICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnQ7CisgICAgICAgIH0KKworICAgICAgICBuZXh0VG9MYXN0ID0gbGFzdDsKKyAgICAg
ICAgbGFzdCA9IGN1cnJlbnQ7CisgICAgfQorCisgICAgaWYgKCFiZWZvcmVDaGlsZCAmJiAhbGFz
dC0+Zmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gbmV4dFRvTGFzdDsKKyAgICByZXR1cm4g
bGFzdDsKK30KKworUmVuZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjpCbG9jayhSZW5kZXJUcmVlQnVp
bGRlciYgYnVpbGRlcikKKyAgICA6IG1fYnVpbGRlcihidWlsZGVyKQoreworfQorCit2b2lkIFJl
bmRlclRyZWVCdWlsZGVyOjpCbG9jazo6aW5zZXJ0Q2hpbGQoUmVuZGVyQmxvY2smIHBhcmVudCwg
UmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQp
Cit7CisgICAgaWYgKHBhcmVudC5jb250aW51YXRpb24oKSAmJiAhcGFyZW50LmlzQW5vbnltb3Vz
QmxvY2soKSkKKyAgICAgICAgaW5zZXJ0Q2hpbGRUb0NvbnRpbnVhdGlvbihwYXJlbnQsIFdURk1v
dmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgZWxzZQorICAgICAgICBpbnNlcnRDaGlsZEln
bm9yaW5nQ29udGludWF0aW9uKHBhcmVudCwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsK
K30KKwordm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2s6Omluc2VydENoaWxkVG9Db250aW51
YXRpb24oUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit7CisgICAgUmVuZGVyQmxvY2sqIGZsb3cgPSBj
b250aW51YXRpb25CZWZvcmUocGFyZW50LCBiZWZvcmVDaGlsZCk7CisgICAgQVNTRVJUKCFiZWZv
cmVDaGlsZCB8fCBpczxSZW5kZXJCbG9jaz4oKmJlZm9yZUNoaWxkLT5wYXJlbnQoKSkpOworICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBiZWZvcmVDaGlsZFBhcmVudCA9IG51bGxwdHI7CisgICAg
aWYgKGJlZm9yZUNoaWxkKQorICAgICAgICBiZWZvcmVDaGlsZFBhcmVudCA9IGRvd25jYXN0PFJl
bmRlckJveE1vZGVsT2JqZWN0PihiZWZvcmVDaGlsZC0+cGFyZW50KCkpOworICAgIGVsc2Ugewor
ICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGludWF0aW9uID0gZmxvdy0+Y29udGlu
dWF0aW9uKCk7CisgICAgICAgIGlmIChjb250aW51YXRpb24pCisgICAgICAgICAgICBiZWZvcmVD
aGlsZFBhcmVudCA9IGNvbnRpbnVhdGlvbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmVm
b3JlQ2hpbGRQYXJlbnQgPSBmbG93OworICAgIH0KKworICAgIGlmIChjaGlsZC0+aXNGbG9hdGlu
Z09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CisgICAgICAgIGJlZm9yZUNoaWxkUGFyZW50LT5h
ZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG1fYnVpbGRlciwgV1RGTW92ZShjaGlsZCksIGJl
Zm9yZUNoaWxkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgY2hpbGRJc05v
cm1hbCA9IGNoaWxkLT5pc0lubGluZSgpIHx8ICFjaGlsZC0+c3R5bGUoKS5jb2x1bW5TcGFuKCk7
CisgICAgYm9vbCBiY3BJc05vcm1hbCA9IGJlZm9yZUNoaWxkUGFyZW50LT5pc0lubGluZSgpIHx8
ICFiZWZvcmVDaGlsZFBhcmVudC0+c3R5bGUoKS5jb2x1bW5TcGFuKCk7CisgICAgYm9vbCBmbG93
SXNOb3JtYWwgPSBmbG93LT5pc0lubGluZSgpIHx8ICFmbG93LT5zdHlsZSgpLmNvbHVtblNwYW4o
KTsKKworICAgIGlmIChmbG93ID09IGJlZm9yZUNoaWxkUGFyZW50KSB7CisgICAgICAgIGZsb3ct
PmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSwg
YmVmb3JlQ2hpbGQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlIGdvYWwg
aGVyZSBpcyB0byBtYXRjaCB1cCBpZiB3ZSBjYW4sIHNvIHRoYXQgd2UgY2FuIGNvYWxlc2NlIGFu
ZCBjcmVhdGUgdGhlCisgICAgLy8gbWluaW1hbCAjIG9mIGNvbnRpbnVhdGlvbnMgbmVlZGVkIGZv
ciB0aGUgaW5saW5lLgorICAgIGlmIChjaGlsZElzTm9ybWFsID09IGJjcElzTm9ybWFsKSB7Cisg
ICAgICAgIGJlZm9yZUNoaWxkUGFyZW50LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG1f
YnVpbGRlciwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoZmxvd0lzTm9ybWFsID09IGNoaWxkSXNOb3JtYWwpIHsKKyAgICAgICAg
Zmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihtX2J1aWxkZXIsIFdURk1vdmUoY2hp
bGQpLCBudWxscHRyKTsgLy8gSnVzdCB0cmVhdCBsaWtlIGFuIGFwcGVuZC4KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihtX2J1aWxkZXIsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7Cit9CisKK3Zv
aWQgUmVuZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjppbnNlcnRDaGlsZElnbm9yaW5nQ29udGludWF0
aW9uKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZv
cmVDaGlsZC0+cGFyZW50KCkgIT0gJnBhcmVudCkgeworICAgICAgICBSZW5kZXJFbGVtZW50KiBi
ZWZvcmVDaGlsZENvbnRhaW5lciA9IGJlZm9yZUNoaWxkLT5wYXJlbnQoKTsKKyAgICAgICAgd2hp
bGUgKGJlZm9yZUNoaWxkQ29udGFpbmVyLT5wYXJlbnQoKSAhPSAmcGFyZW50KQorICAgICAgICAg
ICAgYmVmb3JlQ2hpbGRDb250YWluZXIgPSBiZWZvcmVDaGlsZENvbnRhaW5lci0+cGFyZW50KCk7
CisgICAgICAgIEFTU0VSVChiZWZvcmVDaGlsZENvbnRhaW5lcik7CisKKyAgICAgICAgaWYgKGJl
Zm9yZUNoaWxkQ29udGFpbmVyLT5pc0Fub255bW91cygpKSB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFiZWZvcmVDaGlsZENvbnRhaW5lci0+
aXNJbmxpbmUoKSk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0ZWQgYmVmb3JlQ2hp
bGQgaXMgbm90IG9uZSBvZiBvdXIgY2hpbGRyZW4sIHRoZW4gdGhpcyBpcyBiZWNhdXNlCisgICAg
ICAgICAgICAvLyB0aGVyZSBpcyBhbiBhbm9ueW1vdXMgY29udGFpbmVyIHdpdGhpbiB0aGlzIG9i
amVjdCB0aGF0IGNvbnRhaW5zIHRoZSBiZWZvcmVDaGlsZC4KKyAgICAgICAgICAgIFJlbmRlckVs
ZW1lbnQqIGJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVyID0gYmVmb3JlQ2hpbGRDb250YWlu
ZXI7CisgICAgICAgICAgICBpZiAoYmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXItPmlzQW5v
bnltb3VzQmxvY2soKQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAgICAgICAgICAg
ICAvLyBGdWxsIHNjcmVlbiByZW5kZXJlcnMgYW5kIGZ1bGwgc2NyZWVuIHBsYWNlaG9sZGVycyBh
Y3QgYXMgYW5vbnltb3VzIGJsb2Nrcywgbm90IHRhYmxlczoKKyAgICAgICAgICAgICAgICB8fCBi
ZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5lci0+aXNSZW5kZXJGdWxsU2NyZWVuKCkKKyAgICAg
ICAgICAgICAgICB8fCBiZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5lci0+aXNSZW5kZXJGdWxs
U2NyZWVuUGxhY2Vob2xkZXIoKQorI2VuZGlmCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0IHRoZSBjaGlsZCBpbnRvIHRoZSBhbm9ueW1vdXMgYmxvY2sgYm94
IGluc3RlYWQgb2YgaGVyZS4KKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzSW5saW5lKCkg
fHwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpLT5maXJzdENoaWxkKCkgIT0gYmVmb3JlQ2hpbGQpCisg
ICAgICAgICAgICAgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZCgqYmVmb3JlQ2hpbGQtPnBh
cmVudCgpLCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgbV9idWlsZGVyLmluc2VydENoaWxkKHBhcmVudCwgV1RG
TW92ZShjaGlsZCksIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGRBbm9u
eW1vdXNDb250YWluZXItPmlzVGFibGUoKSk7CisKKyAgICAgICAgICAgIGlmIChjaGlsZC0+aXNU
YWJsZVBhcnQoKSkgeworICAgICAgICAgICAgICAgIC8vIEluc2VydCBpbnRvIHRoZSBhbm9ueW1v
dXMgdGFibGUuCisgICAgICAgICAgICAgICAgbV9idWlsZGVyLmluc2VydENoaWxkKCpiZWZvcmVD
aGlsZEFub255bW91c0NvbnRhaW5lciwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJlZm9y
ZUNoaWxkID0gUmVuZGVyVHJlZUJ1aWxkZXI6OnNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGls
ZChwYXJlbnQsIGJlZm9yZUNoaWxkKTsKKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gJnBhcmVudCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIG1hZGVCb3hlc05vbklubGluZSA9IGZhbHNl
OworCisgICAgLy8gQSBibG9jayBoYXMgdG8gZWl0aGVyIGhhdmUgYWxsIG9mIGl0cyBjaGlsZHJl
biBpbmxpbmUsIG9yIGFsbCBvZiBpdHMgY2hpbGRyZW4gYXMgYmxvY2tzLgorICAgIC8vIFNvLCBp
ZiBvdXIgY2hpbGRyZW4gYXJlIGN1cnJlbnRseSBpbmxpbmUgYW5kIGEgYmxvY2sgY2hpbGQgaGFz
IHRvIGJlIGluc2VydGVkLCB3ZSBtb3ZlIGFsbCBvdXIKKyAgICAvLyBpbmxpbmUgY2hpbGRyZW4g
aW50byBhbm9ueW1vdXMgYmxvY2sgYm94ZXMuCisgICAgaWYgKHBhcmVudC5jaGlsZHJlbklubGlu
ZSgpICYmICFjaGlsZC0+aXNJbmxpbmUoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmdPck91dE9mRmxv
d1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAvLyBUaGlzIGlzIGEgYmxvY2sgd2l0aCBpbmxpbmUg
Y29udGVudC4gV3JhcCB0aGUgaW5saW5lIGNvbnRlbnQgaW4gYW5vbnltb3VzIGJsb2Nrcy4KKyAg
ICAgICAgUmVuZGVyVHJlZUJ1aWxkZXI6Om1ha2VDaGlsZHJlbk5vbklubGluZShwYXJlbnQsIGJl
Zm9yZUNoaWxkKTsKKyAgICAgICAgbWFkZUJveGVzTm9uSW5saW5lID0gdHJ1ZTsKKworICAgICAg
ICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9ICZwYXJlbnQpIHsK
KyAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOworICAgICAg
ICAgICAgQVNTRVJUKGJlZm9yZUNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpOworICAgICAgICAg
ICAgQVNTRVJUKGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSAmcGFyZW50KTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSBpZiAoIXBhcmVudC5jaGlsZHJlbklubGluZSgpICYmIChjaGlsZC0+aXNGbG9h
dGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IGNoaWxkLT5pc0lubGluZSgpKSkgeworICAg
ICAgICAvLyBJZiB3ZSdyZSBpbnNlcnRpbmcgYW4gaW5saW5lIGNoaWxkIGJ1dCBhbGwgb2Ygb3Vy
IGNoaWxkcmVuIGFyZSBibG9ja3MsIHRoZW4gd2UgaGF2ZSB0byBtYWtlIHN1cmUKKyAgICAgICAg
Ly8gaXQgaXMgcHV0IGludG8gYW4gYW5vbXlvdXMgYmxvY2sgYm94LiBXZSB0cnkgdG8gdXNlIGFu
IGV4aXN0aW5nIGFub255bW91cyBib3ggaWYgcG9zc2libGUsIG90aGVyd2lzZQorICAgICAgICAv
LyBhIG5ldyBvbmUgaXMgY3JlYXRlZCBhbmQgaW5zZXJ0ZWQgaW50byBvdXIgbGlzdCBvZiBjaGls
ZHJlbiBpbiB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb24uCisgICAgICAgIFJlbmRlck9iamVjdCog
YWZ0ZXJDaGlsZCA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygp
IDogcGFyZW50Lmxhc3RDaGlsZCgpOworCisgICAgICAgIGlmIChhZnRlckNoaWxkICYmIGFmdGVy
Q2hpbGQtPmlzQW5vbnltb3VzQmxvY2soKSkgeworICAgICAgICAgICAgbV9idWlsZGVyLmluc2Vy
dENoaWxkKGRvd25jYXN0PFJlbmRlckJsb2NrPigqYWZ0ZXJDaGlsZCksIFdURk1vdmUoY2hpbGQp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaGlsZC0+
aXNJbmxpbmUoKSkgeworICAgICAgICAgICAgLy8gTm8gc3VpdGFibGUgZXhpc3RpbmcgYW5vbnlt
b3VzIGJveCAtIGNyZWF0ZSBhIG5ldyBvbmUuCisgICAgICAgICAgICBhdXRvIG5ld0JveCA9IHBh
cmVudC5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOworICAgICAgICAgICAgYXV0byYgYm94ID0gKm5l
d0JveDsKKyAgICAgICAgICAgIHBhcmVudC5SZW5kZXJCb3g6OmFkZENoaWxkKG1fYnVpbGRlciwg
V1RGTW92ZShuZXdCb3gpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBtX2J1aWxkZXIuaW5z
ZXJ0Q2hpbGQoYm94LCBXVEZNb3ZlKGNoaWxkKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBwYXJlbnQuaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7CisK
KyAgICBwYXJlbnQuUmVuZGVyQm94OjphZGRDaGlsZChtX2J1aWxkZXIsIFdURk1vdmUoY2hpbGQp
LCBiZWZvcmVDaGlsZCk7CisKKyAgICBpZiAobWFkZUJveGVzTm9uSW5saW5lICYmIGlzPFJlbmRl
ckJsb2NrPihwYXJlbnQucGFyZW50KCkpICYmIHBhcmVudC5pc0Fub255bW91c0Jsb2NrKCkpCisg
ICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqcGFyZW50LnBhcmVudCgpKS5yZW1vdmVMZWZ0
b3ZlckFub255bW91c0Jsb2NrKCZwYXJlbnQpOworICAgIC8vIHBhcmVudCBvYmplY3QgbWF5IGJl
IGRlYWQgaGVyZQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jY2RhYmYz
YTk5NjE4NGVhZmQ2ZmQ1ZDMxN2ZhZmViYzllODQ5YjdhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suaApA
QCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJS
ZW5kZXJUcmVlQnVpbGRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRl
clRyZWVCdWlsZGVyOjpCbG9jayB7CitwdWJsaWM6CisgICAgQmxvY2soUmVuZGVyVHJlZUJ1aWxk
ZXImKTsKKworICAgIHZvaWQgaW5zZXJ0Q2hpbGQoUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVy
UHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOworICAg
IHZvaWQgaW5zZXJ0Q2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJCbG9jayYgcGFyZW50
LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbnNlcnRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRl
ckJsb2NrJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKTsKKworICAgIFJlbmRlclRyZWVCdWlsZGVyJiBtX2J1aWxkZXI7Cit9
OworCit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330551</attachid>
            <date>2018-01-05 09:15:50 -0800</date>
            <delta_ts>2018-01-08 09:08:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181319-20180105091550.patch</filename>
            <type>text/plain</type>
            <size>49966</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY2Y2VlODg0ZDY3OTUy
MmYxZjYyYzZmYWI1NTdiMTI3NGM0NGZkMy4uMDA4NzIyOTYyNjQ4NzczMDk0M2UwYjAxMDJjZmJh
NWMwNjdhOGVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE4LTAxLTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1JlbmRlclRyZWVCdWlsZGVy
XSBNb3ZlIFJlbmRlckJsb2NrIGFkZENoaWxkIGxvZ2ljIHRvIFJlbmRlclRyZWVCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEzMTkKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MzEzNDY0PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
dHRpIEtvaXZpc3RvLgorCisgICAgICAgIFRoaXMgaXMgYWJvdXQgbW92aW5nIHRoZSBjb2RlLCBu
byBjbGVhbnVwIGFuZC9vciBub3JtYWxpemF0aW9uICh1bmZvcnR1bmF0ZWx5IGl0IGFsc28gbWVh
bnMKKyAgICAgICAgc29tZSB0ZW1wb3JhcnkgY2hhbmdlcykuICAKKworICAgICAgICBObyBjaGFu
Z2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGlu
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGlsZEJlY2FtZU5vbklu
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVmb3Jl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDaGlsZFRvQ29u
dGludWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmdldElubGluZVJ1bik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9uSW5s
aW5lKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtCb3hG
b3JSZWxheW91dEFmdGVyU3BsaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieUJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6Om1vdmVDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QmFzZTo6bW92ZUJsb2NrQ2hpbGRyZW4pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6YWRkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtCb3hG
b3JSZWxheW91dEFmdGVyU3BsaXQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW5saW5lUnVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpSZW5kZXJUcmVlQnVpbGRlcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGRUb1JlbmRl
ckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGls
ZFRvUmVuZGVyQmxvY2tJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUcmVlQnVpbGRlcjo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRyZWVCdWlsZGVyOjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQpOgor
ICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OmJsb2NrQnVpbGRlcik6CisgICAgICAgICog
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRpbnVhdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2s6OkJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVCdWlsZGVyOjpCbG9jazo6aW5zZXJ0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjppbnNlcnRDaGlsZFRvQ29udGludWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpCbG9jazo6aW5zZXJ0Q2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVC
dWlsZGVyQmxvY2suaDogQWRkZWQuCisgICAgICAgIAogMjAxOC0wMS0wNCAgQ2hyaXMgRmxlaXph
Y2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBJbXBsZW1lbnQgdXBkYXRl
ZCBDU1MzIFNwZWVjaCBmb3IgJ3NwZWFrJyBhbmQgJ3NwZWFrLWFzJyBwcm9wZXJ0aWVzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IGE0YmFmNTkxNGYxMmIyYzY5NzVkNjNiNTg2Yjg2ZDAxYjdkYmI4Y2IuLjA4
NGU3NTI1NTQzYzRmOWJmZjA5ZTgwZTFjNzE1Y2RkYmEzZDlmNmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0xOTg0LDYgKzE5ODQsNyBAQCByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5j
cHAKIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAogCiByZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZUJ1aWxkZXIuY3BwCityZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXJCbG9jay5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0
dGVyLmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyRm9ybUNvbnRyb2xz
LmNwcAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyTGlzdC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBk
ZTE5MGExMmYxZTAzMDllYzI1YmJhZWJhMzU2MTIwYzlhM2Y3YjdhLi43ZTdhYzBjNjBlYjcwZjEw
ZWUxMWMyZTM1YzdkMWI1ZGI0OTYxM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zOTMsNiArMzkzLDcgQEAKIAkJMTE5MzQw
NzkxRkU4QjkyMzAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyVGFibGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTM0MDc3MUZFOEI5MjMwMDkz
NUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlclRhYmxlLmggKi87IH07CiAJCTExOTM0MDhBMUZFQjM1
NUQwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlclJ1YnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTM0MDg4MUZFQjM1NUQwMDkzNUYxRSAvKiBS
ZW5kZXJUcmVlQnVpbGRlclJ1YnkuaCAqLzsgfTsKIAkJMTE5MzQwOTcxRkVENzE1NTAwOTM1RjFF
IC8qIFJlbmRlclRyZWVCdWlsZGVyRm9ybUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTkzNDA5NTFGRUQ3MTU1MDA5MzVGMUUgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuaCAqLzsgfTsKKwkJMTE5MzQwQTMxRkVFMDI0MDAw
OTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTM0MEExMUZFRTAyNDAwMDkzNUYxRSAvKiBSZW5k
ZXJUcmVlQnVpbGRlckJsb2NrLmggKi87IH07CiAJCTExRTA2N0VFMUU2MjQ2RTUwMDE2MkQxNiAv
KiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDExRTA2N0VEMUU2MjQ2RTUwMDE2MkQxNiAvKiBTaW1wbGVMaW5l
TGF5b3V0Q292ZXJhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNDAwRDdBODE3MTM2RUE3MDA3N0NFMDUgLyogU2NyaXB0V3JhcHBhYmxlSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQw
MEQ3QTcxNzEzNkVBNzAwNzdDRTA1IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAzQjk5NzA5RUIx
M0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDAzQjk5NTA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU1ODMs
NiArNTU4NCw4IEBACiAJCTExOTM0MDg4MUZFQjM1NUQwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVp
bGRlclJ1YnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExOTM0MDk0MUZFRDcxNTUwMDkzNUYxRSAvKiBSZW5k
ZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJU
cmVlQnVpbGRlckZvcm1Db250cm9scy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTExOTM0MDk1MUZFRDcxNTUwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9s
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxMTkzNDBBMDFGRUUwMjQwMDA5MzVGMUUgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlQnVp
bGRlckJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTE5MzQwQTExRkVF
MDI0MDAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
MUUwNjdFQjFFNjI0NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRDb3Zl
cmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExRTA2N0VEMUU2MjQ2RTUw
MDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MDBEN0E3MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRXcmFwcGFi
bGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBw
YWJsZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NjA5LDYgKzI0
NjEyLDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUU0N0MzOTIwMUZFNkUwRDkwMEJCQkM2QiAv
KiBSZW5kZXJUcmVlQnVpbGRlci5jcHAgKi8sCiAJCQkJRTQ3QzM5MkExRkU2RTBERTAwQkJCQzZC
IC8qIFJlbmRlclRyZWVCdWlsZGVyLmggKi8sCisJCQkJMTE5MzQwQTAxRkVFMDI0MDAwOTM1RjFF
IC8qIFJlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwICovLAorCQkJCTExOTM0MEExMUZFRTAyNDAw
MDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckJsb2NrLmggKi8sCiAJCQkJRTQ3QzM5MjExRkU2
RTBEQTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIuY3BwICovLAogCQkJ
CUU0N0MzOTI2MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVy
LmggKi8sCiAJCQkJMTE5MzQwOTQxRkVENzE1NTAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVy
Rm9ybUNvbnRyb2xzLmNwcCAqLywKQEAgLTI5MDM1LDYgKzI5MDQwLDcgQEAKIAkJCQlCQ0VBNDg4
NzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRjE5OThDMDgyNDVFNTkwMDFFOUFCQyAvKiBSZW5kZXJUcmVlQXNUZXh0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDdDMzkyRDFGRTZFMEYzMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTExOTM0MEEzMUZFRTAyNDAwMDkzNUYxRSAvKiBSZW5kZXJU
cmVlQnVpbGRlckJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDdDMzkzMDFGRTZFMEZEMDBC
QkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTE5MzQwOTcxRkVENzE1NTAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyRm9ybUNvbnRy
b2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDdDMzkzMjFGRTZFMTA1MDBCQkJDNkIgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJMaXN0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDFmN2QyOWYzZDRjMGM5NDJkYzNhNzkwMzQzNTRmYzA4
ZWZjYjI5ZTAuLmYyY2EwZTEzNGM5MGI2NmUyZDBlNDJhYzdkMTc4MDZiNjUyMmFiY2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNDQ2LDcxICs0NDYsNiBA
QCB2b2lkIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eQogICAgIHNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGls
ZHJlbihvbGRTdHlsZSAmJiBkaWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91dCAmJiBuZWVkc0xh
eW91dCgpICYmIGJvcmRlck9yUGFkZGluZ0xvZ2ljYWxXaWR0aENoYW5nZWQoKm9sZFN0eWxlLCBz
dHlsZSgpKSk7CiB9CiAKLVJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVm
b3JlKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCi17Ci0gICAgaWYgKGJlZm9yZUNoaWxkICYm
IGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKQotICAgICAgICByZXR1cm4gdGhpczsKLQot
ICAgIFJlbmRlckJsb2NrKiBuZXh0VG9MYXN0ID0gdGhpczsKLSAgICBSZW5kZXJCbG9jayogbGFz
dCA9IHRoaXM7Ci0gICAgZm9yIChhdXRvKiBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+
KGNvbnRpbnVhdGlvbigpKTsgY3VycmVudDsgY3VycmVudCA9IGRvd25jYXN0PFJlbmRlckJsb2Nr
PihjdXJyZW50LT5jb250aW51YXRpb24oKSkpIHsKLSAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYm
IGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSBjdXJyZW50KSB7Ci0gICAgICAgICAgICBpZiAoY3Vy
cmVudC0+Zmlyc3RDaGlsZCgpID09IGJlZm9yZUNoaWxkKQotICAgICAgICAgICAgICAgIHJldHVy
biBsYXN0OwotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgIH0KLQotICAgICAg
ICBuZXh0VG9MYXN0ID0gbGFzdDsKLSAgICAgICAgbGFzdCA9IGN1cnJlbnQ7Ci0gICAgfQotCi0g
ICAgaWYgKCFiZWZvcmVDaGlsZCAmJiAhbGFzdC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1
cm4gbmV4dFRvTGFzdDsKLSAgICByZXR1cm4gbGFzdDsKLX0KLQotdm9pZCBSZW5kZXJCbG9jazo6
YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlciwgUmVuZGVy
UHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCi17
Ci0gICAgUmVuZGVyQmxvY2sqIGZsb3cgPSBjb250aW51YXRpb25CZWZvcmUoYmVmb3JlQ2hpbGQp
OwotICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgaXM8UmVuZGVyQmxvY2s+KCpiZWZvcmVDaGls
ZC0+cGFyZW50KCkpKTsKLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYmVmb3JlQ2hpbGRQYXJl
bnQgPSBudWxscHRyOwotICAgIGlmIChiZWZvcmVDaGlsZCkKLSAgICAgICAgYmVmb3JlQ2hpbGRQ
YXJlbnQgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oYmVmb3JlQ2hpbGQtPnBhcmVu
dCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVh
dGlvbiA9IGZsb3ctPmNvbnRpbnVhdGlvbigpOwotICAgICAgICBpZiAoY29udGludWF0aW9uKQot
ICAgICAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQgPSBjb250aW51YXRpb247Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGJlZm9yZUNoaWxkUGFyZW50ID0gZmxvdzsKLSAgICB9Ci0KLSAgICBp
ZiAobmV3Q2hpbGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAg
ICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWlsZGVy
LCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgYm9vbCBjaGlsZElzTm9ybWFsID0gbmV3Q2hpbGQtPmlzSW5saW5lKCkgfHwgIW5l
d0NoaWxkLT5zdHlsZSgpLmNvbHVtblNwYW4oKTsKLSAgICBib29sIGJjcElzTm9ybWFsID0gYmVm
b3JlQ2hpbGRQYXJlbnQtPmlzSW5saW5lKCkgfHwgIWJlZm9yZUNoaWxkUGFyZW50LT5zdHlsZSgp
LmNvbHVtblNwYW4oKTsKLSAgICBib29sIGZsb3dJc05vcm1hbCA9IGZsb3ctPmlzSW5saW5lKCkg
fHwgIWZsb3ctPnN0eWxlKCkuY29sdW1uU3BhbigpOwotCi0gICAgaWYgKGZsb3cgPT0gYmVmb3Jl
Q2hpbGRQYXJlbnQpIHsKLSAgICAgICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihidWlsZGVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWF0Y2ggdXAgaWYg
d2UgY2FuLCBzbyB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQgY3JlYXRlIHRoZQotICAgIC8vIG1p
bmltYWwgIyBvZiBjb250aW51YXRpb25zIG5lZWRlZCBmb3IgdGhlIGlubGluZS4KLSAgICBpZiAo
Y2hpbGRJc05vcm1hbCA9PSBiY3BJc05vcm1hbCkgewotICAgICAgICBiZWZvcmVDaGlsZFBhcmVu
dC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWlsZGVyLCBXVEZNb3ZlKG5ld0NoaWxk
KSwgYmVmb3JlQ2hpbGQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChmbG93SXNO
b3JtYWwgPT0gY2hpbGRJc05vcm1hbCkgewotICAgICAgICBmbG93LT5hZGRDaGlsZElnbm9yaW5n
Q29udGludWF0aW9uKGJ1aWxkZXIsIFdURk1vdmUobmV3Q2hpbGQpLCAwKTsgLy8gSnVzdCB0cmVh
dCBsaWtlIGFuIGFwcGVuZC4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBiZWZvcmVDaGls
ZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWlsZGVyLCBXVEZNb3ZlKG5l
d0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwotfQotCiBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IFJlbmRl
ckJsb2NrOjpjbG9uZSgpIGNvbnN0CiB7CiAgICAgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBjbG9u
ZUJsb2NrOwpAQCAtNTMzLDEzOCArNDY4LDEyIEBAIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gUmVu
ZGVyQmxvY2s6OmNsb25lKCkgY29uc3QKIAogdm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoUmVu
ZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewotICAgIGlmIChjb250aW51YXRpb24oKSAm
JiAhaXNBbm9ueW1vdXNCbG9jaygpKQotICAgICAgICBhZGRDaGlsZFRvQ29udGludWF0aW9uKGJ1
aWxkZXIsIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7Ci0gICAgZWxzZQotICAgICAg
ICBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKGJ1aWxkZXIsIFdURk1vdmUobmV3Q2hpbGQp
LCBiZWZvcmVDaGlsZCk7CisgICAgYnVpbGRlci5pbnNlcnRDaGlsZFRvUmVuZGVyQmxvY2soKnRo
aXMsIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxv
Y2s6OmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxk
ZXIsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKQogewotICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkg
IT0gdGhpcykgewotICAgICAgICBSZW5kZXJFbGVtZW50KiBiZWZvcmVDaGlsZENvbnRhaW5lciA9
IGJlZm9yZUNoaWxkLT5wYXJlbnQoKTsKLSAgICAgICAgd2hpbGUgKGJlZm9yZUNoaWxkQ29udGFp
bmVyLT5wYXJlbnQoKSAhPSB0aGlzKQotICAgICAgICAgICAgYmVmb3JlQ2hpbGRDb250YWluZXIg
PSBiZWZvcmVDaGlsZENvbnRhaW5lci0+cGFyZW50KCk7Ci0gICAgICAgIEFTU0VSVChiZWZvcmVD
aGlsZENvbnRhaW5lcik7Ci0KLSAgICAgICAgaWYgKGJlZm9yZUNoaWxkQ29udGFpbmVyLT5pc0Fu
b255bW91cygpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCFiZWZvcmVDaGlsZENvbnRhaW5lci0+aXNJbmxpbmUoKSk7Ci0KLSAgICAgICAg
ICAgIC8vIElmIHRoZSByZXF1ZXN0ZWQgYmVmb3JlQ2hpbGQgaXMgbm90IG9uZSBvZiBvdXIgY2hp
bGRyZW4sIHRoZW4gdGhpcyBpcyBiZWNhdXNlCi0gICAgICAgICAgICAvLyB0aGVyZSBpcyBhbiBh
bm9ueW1vdXMgY29udGFpbmVyIHdpdGhpbiB0aGlzIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBi
ZWZvcmVDaGlsZC4KLSAgICAgICAgICAgIFJlbmRlckVsZW1lbnQqIGJlZm9yZUNoaWxkQW5vbnlt
b3VzQ29udGFpbmVyID0gYmVmb3JlQ2hpbGRDb250YWluZXI7Ci0gICAgICAgICAgICBpZiAoYmVm
b3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXItPmlzQW5vbnltb3VzQmxvY2soKQotI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKLSAgICAgICAgICAgICAgICAvLyBGdWxsIHNjcmVlbiByZW5kZXJl
cnMgYW5kIGZ1bGwgc2NyZWVuIHBsYWNlaG9sZGVycyBhY3QgYXMgYW5vbnltb3VzIGJsb2Nrcywg
bm90IHRhYmxlczoKLSAgICAgICAgICAgICAgICB8fCBiZWZvcmVDaGlsZEFub255bW91c0NvbnRh
aW5lci0+aXNSZW5kZXJGdWxsU2NyZWVuKCkKLSAgICAgICAgICAgICAgICB8fCBiZWZvcmVDaGls
ZEFub255bW91c0NvbnRhaW5lci0+aXNSZW5kZXJGdWxsU2NyZWVuUGxhY2Vob2xkZXIoKQotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBj
aGlsZCBpbnRvIHRoZSBhbm9ueW1vdXMgYmxvY2sgYm94IGluc3RlYWQgb2YgaGVyZS4KLSAgICAg
ICAgICAgICAgICBpZiAobmV3Q2hpbGQtPmlzSW5saW5lKCkgfHwgYmVmb3JlQ2hpbGQtPnBhcmVu
dCgpLT5maXJzdENoaWxkKCkgIT0gYmVmb3JlQ2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIGJ1
aWxkZXIuaW5zZXJ0Q2hpbGQoKmJlZm9yZUNoaWxkLT5wYXJlbnQoKSwgV1RGTW92ZShuZXdDaGls
ZCksIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuaW5zZXJ0Q2hpbGQoKnRoaXMsIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVD
aGlsZC0+cGFyZW50KCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgQVNTRVJUKGJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVyLT5pc1Rh
YmxlKCkpOwotCi0gICAgICAgICAgICBpZiAobmV3Q2hpbGQtPmlzVGFibGVQYXJ0KCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBJbnNlcnQgaW50byB0aGUgYW5vbnltb3VzIHRhYmxlLgotICAgICAg
ICAgICAgICAgIGJ1aWxkZXIuaW5zZXJ0Q2hpbGQoKmJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFp
bmVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBzcGxpdEFu
b255bW91c0JveGVzQXJvdW5kQ2hpbGQoYmVmb3JlQ2hpbGQpOwotCi0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGJlZm9yZUNoaWxkLT5wYXJlbnQo
KSA9PSB0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgbWFkZUJveGVzTm9uSW5s
aW5lID0gZmFsc2U7Ci0KLSAgICAvLyBBIGJsb2NrIGhhcyB0byBlaXRoZXIgaGF2ZSBhbGwgb2Yg
aXRzIGNoaWxkcmVuIGlubGluZSwgb3IgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcyBibG9ja3MuCi0g
ICAgLy8gU28sIGlmIG91ciBjaGlsZHJlbiBhcmUgY3VycmVudGx5IGlubGluZSBhbmQgYSBibG9j
ayBjaGlsZCBoYXMgdG8gYmUgaW5zZXJ0ZWQsIHdlIG1vdmUgYWxsIG91cgotICAgIC8vIGlubGlu
ZSBjaGlsZHJlbiBpbnRvIGFub255bW91cyBibG9jayBib3hlcy4KLSAgICBpZiAoY2hpbGRyZW5J
bmxpbmUoKSAmJiAhbmV3Q2hpbGQtPmlzSW5saW5lKCkgJiYgIW5ld0NoaWxkLT5pc0Zsb2F0aW5n
T3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgLy8gVGhpcyBpcyBhIGJsb2NrIHdp
dGggaW5saW5lIGNvbnRlbnQuIFdyYXAgdGhlIGlubGluZSBjb250ZW50IGluIGFub255bW91cyBi
bG9ja3MuCi0gICAgICAgIG1ha2VDaGlsZHJlbk5vbklubGluZShiZWZvcmVDaGlsZCk7Ci0gICAg
ICAgIG1hZGVCb3hlc05vbklubGluZSA9IHRydWU7Ci0KLSAgICAgICAgaWYgKGJlZm9yZUNoaWxk
ICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgICAgICBiZWZvcmVD
aGlsZCA9IGJlZm9yZUNoaWxkLT5wYXJlbnQoKTsKLSAgICAgICAgICAgIEFTU0VSVChiZWZvcmVD
aGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKTsKLSAgICAgICAgICAgIEFTU0VSVChiZWZvcmVDaGls
ZC0+cGFyZW50KCkgPT0gdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFjaGlsZHJl
bklubGluZSgpICYmIChuZXdDaGlsZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgp
IHx8IG5ld0NoaWxkLT5pc0lubGluZSgpKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbnNlcnRp
bmcgYW4gaW5saW5lIGNoaWxkIGJ1dCBhbGwgb2Ygb3VyIGNoaWxkcmVuIGFyZSBibG9ja3MsIHRo
ZW4gd2UgaGF2ZSB0byBtYWtlIHN1cmUKLSAgICAgICAgLy8gaXQgaXMgcHV0IGludG8gYW4gYW5v
bXlvdXMgYmxvY2sgYm94LiBXZSB0cnkgdG8gdXNlIGFuIGV4aXN0aW5nIGFub255bW91cyBib3gg
aWYgcG9zc2libGUsIG90aGVyd2lzZQotICAgICAgICAvLyBhIG5ldyBvbmUgaXMgY3JlYXRlZCBh
bmQgaW5zZXJ0ZWQgaW50byBvdXIgbGlzdCBvZiBjaGlsZHJlbiBpbiB0aGUgYXBwcm9wcmlhdGUg
cG9zaXRpb24uCi0gICAgICAgIFJlbmRlck9iamVjdCogYWZ0ZXJDaGlsZCA9IGJlZm9yZUNoaWxk
ID8gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpIDogbGFzdENoaWxkKCk7Ci0KLSAgICAg
ICAgaWYgKGFmdGVyQ2hpbGQgJiYgYWZ0ZXJDaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKSB7Ci0g
ICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKGRvd25jYXN0PFJlbmRlckJsb2NrPigqYWZ0
ZXJDaGlsZCksIFdURk1vdmUobmV3Q2hpbGQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChuZXdDaGlsZC0+aXNJbmxpbmUoKSkgewotICAgICAgICAgICAg
Ly8gTm8gc3VpdGFibGUgZXhpc3RpbmcgYW5vbnltb3VzIGJveCAtIGNyZWF0ZSBhIG5ldyBvbmUu
Ci0gICAgICAgICAgICBhdXRvIG5ld0JveCA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0gICAg
ICAgICAgICBhdXRvJiBib3ggPSAqbmV3Qm94OwotICAgICAgICAgICAgUmVuZGVyQm94OjphZGRD
aGlsZChidWlsZGVyLCBXVEZNb3ZlKG5ld0JveCksIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgICAg
IGJ1aWxkZXIuaW5zZXJ0Q2hpbGQoYm94LCBXVEZNb3ZlKG5ld0NoaWxkKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnZhbGlkYXRlTGluZUxheW91dFBh
dGgoKTsKLQotICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoYnVpbGRlciwgV1RGTW92ZShuZXdDaGls
ZCksIGJlZm9yZUNoaWxkKTsKLSAKLSAgICBpZiAobWFkZUJveGVzTm9uSW5saW5lICYmIGlzPFJl
bmRlckJsb2NrPihwYXJlbnQoKSkgJiYgaXNBbm9ueW1vdXNCbG9jaygpKQotICAgICAgICBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2Nr
KHRoaXMpOwotICAgIC8vIHRoaXMgb2JqZWN0IG1heSBiZSBkZWFkIGhlcmUKLX0KLQotc3RhdGlj
IHZvaWQgZ2V0SW5saW5lUnVuKFJlbmRlck9iamVjdCogc3RhcnQsIFJlbmRlck9iamVjdCogYm91
bmRhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiYgaW5saW5lUnVu
U3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiYgaW5saW5lUnVu
RW5kKQotewotICAgIC8vIEJlZ2lubmluZyBhdCB8c3RhcnR8IHdlIGZpbmQgdGhlIGxhcmdlc3Qg
Y29udGlndW91cyBydW4gb2YgaW5saW5lcyB0aGF0Ci0gICAgLy8gd2UgY2FuLiAgV2UgZGVub3Rl
IHRoZSBydW4gd2l0aCBzdGFydCBhbmQgZW5kIHBvaW50cywgfGlubGluZVJ1blN0YXJ0fAotICAg
IC8vIGFuZCB8aW5saW5lUnVuRW5kfC4gIE5vdGUgdGhhdCB0aGVzZSB0d28gdmFsdWVzIG1heSBi
ZSB0aGUgc2FtZSBpZgotICAgIC8vIHdlIGVuY291bnRlciBvbmx5IG9uZSBpbmxpbmUuCi0gICAg
Ly8KLSAgICAvLyBXZSBza2lwIGFueSBub24taW5saW5lcyB3ZSBlbmNvdW50ZXIgYXMgbG9uZyBh
cyB3ZSBoYXZlbid0IGZvdW5kIGFueQotICAgIC8vIGlubGluZXMgeWV0LgotICAgIC8vCi0gICAg
Ly8gfGJvdW5kYXJ5fCBpbmRpY2F0ZXMgYSBub24taW5jbHVzaXZlIGJvdW5kYXJ5IHBvaW50LiAg
UmVnYXJkbGVzcyBvZiB3aGV0aGVyIHxib3VuZGFyeXwKLSAgICAvLyBpcyBpbmxpbmUgb3Igbm90
LCB3ZSB3aWxsIG5vdCBpbmNsdWRlIGl0IGluIGEgcnVuIHdpdGggaW5saW5lcyBiZWZvcmUgaXQu
ICBJdCdzIGFzIHRob3VnaCB3ZSBlbmNvdW50ZXJlZAotICAgIC8vIGEgbm9uLWlubGluZS4KLSAg
ICAKLSAgICAvLyBTdGFydCBieSBza2lwcGluZyBhcyBtYW55IG5vbi1pbmxpbmVzIGFzIHdlIGNh
bi4KLSAgICBSZW5kZXJPYmplY3QgKiBjdXJyID0gc3RhcnQ7Ci0gICAgYm9vbCBzYXdJbmxpbmU7
Ci0gICAgZG8gewotICAgICAgICB3aGlsZSAoY3VyciAmJiAhKGN1cnItPmlzSW5saW5lKCkgfHwg
Y3Vyci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSkKLSAgICAgICAgICAgIGN1
cnIgPSBjdXJyLT5uZXh0U2libGluZygpOwotICAgICAgICAKLSAgICAgICAgaW5saW5lUnVuU3Rh
cnQgPSBpbmxpbmVSdW5FbmQgPSBjdXJyOwotICAgICAgICAKLSAgICAgICAgaWYgKCFjdXJyKQot
ICAgICAgICAgICAgcmV0dXJuOyAvLyBObyBtb3JlIGlubGluZSBjaGlsZHJlbiB0byBiZSBmb3Vu
ZC4KLSAgICAgICAgCi0gICAgICAgIHNhd0lubGluZSA9IGN1cnItPmlzSW5saW5lKCk7Ci0gICAg
ICAgIAotICAgICAgICBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgd2hpbGUg
KGN1cnIgJiYgKGN1cnItPmlzSW5saW5lKCkgfHwgY3Vyci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93
UG9zaXRpb25lZCgpKSAmJiAoY3VyciAhPSBib3VuZGFyeSkpIHsKLSAgICAgICAgICAgIGlubGlu
ZVJ1bkVuZCA9IGN1cnI7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmUoKSkKLSAgICAg
ICAgICAgICAgICBzYXdJbmxpbmUgPSB0cnVlOwotICAgICAgICAgICAgY3VyciA9IGN1cnItPm5l
eHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICghc2F3SW5saW5lKTsKKyAgICBi
dWlsZGVyLmluc2VydENoaWxkVG9SZW5kZXJCbG9ja0lnbm9yaW5nQ29udGludWF0aW9uKCp0aGlz
LCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRlckJsb2Nr
OjpkZWxldGVMaW5lcygpCkBAIC02NzMsNTAgKzQ4Miw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRl
bGV0ZUxpbmVzKCkKICAgICAgICAgY2FjaGUtPmRlZmVyUmVjb21wdXRlSXNJZ25vcmVkKGVsZW1l
bnQoKSk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6Om1ha2VDaGlsZHJlbk5vbklubGluZShSZW5k
ZXJPYmplY3QqIGluc2VydGlvblBvaW50KQoteyAgICAKLSAgICAvLyBtYWtlQ2hpbGRyZW5Ob25J
bmxpbmUgdGFrZXMgYSBibG9jayB3aG9zZSBjaGlsZHJlbiBhcmUgKmFsbCogaW5saW5lIGFuZCBp
dAotICAgIC8vIG1ha2VzIHN1cmUgdGhhdCBpbmxpbmUgY2hpbGRyZW4gYXJlIGNvYWxlc2NlZCB1
bmRlciBhbm9ueW1vdXMKLSAgICAvLyBibG9ja3MuICBJZiB8aW5zZXJ0aW9uUG9pbnR8IGlzIGRl
ZmluZWQsIHRoZW4gaXQgcmVwcmVzZW50cyB0aGUgaW5zZXJ0aW9uIHBvaW50IGZvcgotICAgIC8v
IHRoZSBuZXcgYmxvY2sgY2hpbGQgdGhhdCBpcyBjYXVzaW5nIHVzIHRvIGhhdmUgdG8gd3JhcCBh
bGwgdGhlIGlubGluZXMuICBUaGlzCi0gICAgLy8gbWVhbnMgdGhhdCB3ZSBjYW5ub3QgY29hbGVz
Y2UgaW5saW5lcyBiZWZvcmUgfGluc2VydGlvblBvaW50fCB3aXRoIGlubGluZXMgZm9sbG93aW5n
Ci0gICAgLy8gfGluc2VydGlvblBvaW50fCwgYmVjYXVzZSB0aGUgbmV3IGNoaWxkIGlzIGdvaW5n
IHRvIGJlIGluc2VydGVkIGluIGJldHdlZW4gdGhlIGlubGluZXMsCi0gICAgLy8gc3BsaXR0aW5n
IHRoZW0uCi0gICAgQVNTRVJUKGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgfHwgIWlzSW5s
aW5lKCkpOwotICAgIEFTU0VSVCghaW5zZXJ0aW9uUG9pbnQgfHwgaW5zZXJ0aW9uUG9pbnQtPnBh
cmVudCgpID09IHRoaXMpOwotCi0gICAgc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwotCi0gICAg
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKLSAgICBpZiAoIWNoaWxkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBkZWxldGVMaW5lcygpOwotCi0gICAgd2hpbGUgKGNoaWxkKSB7
Ci0gICAgICAgIFJlbmRlck9iamVjdCogaW5saW5lUnVuU3RhcnQ7Ci0gICAgICAgIFJlbmRlck9i
amVjdCogaW5saW5lUnVuRW5kOwotICAgICAgICBnZXRJbmxpbmVSdW4oY2hpbGQsIGluc2VydGlv
blBvaW50LCBpbmxpbmVSdW5TdGFydCwgaW5saW5lUnVuRW5kKTsKLQotICAgICAgICBpZiAoIWlu
bGluZVJ1blN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2hpbGQgPSBpbmxp
bmVSdW5FbmQtPm5leHRTaWJsaW5nKCk7Ci0KLSAgICAgICAgYXV0byBuZXdCbG9jayA9IGNyZWF0
ZUFub255bW91c0Jsb2NrKCk7Ci0gICAgICAgIGF1dG8mIGJsb2NrID0gKm5ld0Jsb2NrOwotICAg
ICAgICBpbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUobmV3QmxvY2spLCBpbmxpbmVSdW5TdGFy
dCk7Ci0gICAgICAgIG1vdmVDaGlsZHJlblRvKCZibG9jaywgaW5saW5lUnVuU3RhcnQsIGNoaWxk
LCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Tm9ybWFsaXplQWZ0ZXJJbnNlcnRpb246Ok5vKTsKLSAg
ICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGMgPSBmaXJzdENo
aWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQotICAgICAgICBBU1NFUlQoIWMtPmlzSW5s
aW5lKCkpOwotI2VuZGlmCi0KLSAgICByZXBhaW50KCk7Ci19Ci0KIHZvaWQgUmVuZGVyQmxvY2s6
OnJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2soUmVuZGVyQmxvY2sqIGNoaWxkKQogewogICAg
IEFTU0VSVChjaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKTsKQEAgLTMyMTIsNyArMjk3Nyw3IEBA
IGNvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJCbG9jazo6b3V0bGluZVN0eWxlRm9yUmVwYWludCgp
IGNvbnN0CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRlckVs
ZW1lbnQmKQogewotICAgIG1ha2VDaGlsZHJlbk5vbklubGluZSgpOworICAgIFJlbmRlclRyZWVC
dWlsZGVyOjpjdXJyZW50KCktPm1ha2VDaGlsZHJlbk5vbklubGluZSgqdGhpcyk7CiAgICAgaWYg
KGlzQW5vbnltb3VzQmxvY2soKSAmJiBpczxSZW5kZXJCbG9jaz4ocGFyZW50KCkpKQogICAgICAg
ICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5yZW1vdmVMZWZ0b3ZlckFub255bW91
c0Jsb2NrKHRoaXMpOwogICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVhZCBoZXJlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IGJhNWJhYzM4MDI2MmE4MThhMjZlZmQ0Mzcw
NjAxYThlZTQ3ZGM3MDAuLmU2OGY1ZmM4YzE0OTA4YzkxZmQwNmVjM2ZlZjVhNDQ0ZjNkMGZlYjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0zOTUsNyArMzk1LDEw
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkanVzdEJvcmRlckJveFJlY3RGb3JQYWludGlu
ZyhMYXlvdXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgTGF5b3V0UmVjdCBwYWludFJlY3RUb0NsaXBP
dXRGcm9tQm9yZGVyKGNvbnN0IExheW91dFJlY3QmKSBvdmVycmlkZTsKLSAgICAKKyAgICB2b2lk
IGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyVHJlZUJ1aWxkZXImLCBSZW5kZXJQ
dHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2soUmVu
ZGVyQmxvY2sqIGNoaWxkKTsKKyAgICBib29sIGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gaXNJbmxpbmUoKSAmJiBpc1JlcGxhY2VkKCk7IH0KKwogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBhZGRPdmVyZmxvd0Zyb21DaGlsZHJlbigpOwogICAg
IC8vIEZJWE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemF0aW9uIHdoZW4gYWxsIGNhbGxl
cnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKQEAgLTQzMiwxNyArNDM1LDkgQEAgcHJp
dmF0ZToKIAogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIGJvb2wgaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBpc0lubGluZSgpICYmIGlzUmVwbGFjZWQoKTsgfQotCi0gICAgdm9pZCBtYWtlQ2hpbGRyZW5O
b25JbmxpbmUoUmVuZGVyT2JqZWN0KiBpbnNlcnRpb25Qb2ludCA9IG51bGxwdHIpOwotICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKFJlbmRlckJsb2NrKiBjaGls
ZCk7Ci0KICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdoZW4g
YWxsIGNhbGxlcnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0dWFsIHZv
aWQgbW92ZUFsbENoaWxkcmVuSW5jbHVkaW5nRmxvYXRzVG8oUmVuZGVyQmxvY2smIHRvQmxvY2ss
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpOb3JtYWxpemVBZnRlckluc2VydGlvbiBub3JtYWxpemVB
ZnRlckluc2VydGlvbikgeyBtb3ZlQWxsQ2hpbGRyZW5UbygmdG9CbG9jaywgbm9ybWFsaXplQWZ0
ZXJJbnNlcnRpb24pOyB9CiAKLSAgICB2b2lkIGFkZENoaWxkVG9Db250aW51YXRpb24oUmVuZGVy
VHJlZUJ1aWxkZXImLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCk7Ci0gICAgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9u
KFJlbmRlclRyZWVCdWlsZGVyJiwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpIG92ZXJyaWRlOwotCiAgICAgYm9vbCBpc1NlbGZDb2xs
YXBzaW5nQmxvY2soKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRyZW5Q
cmV2ZW50U2VsZkNvbGxhcHNpbmcoKSBjb25zdDsKICAgICAKQEAgLTUwMiw3ICs0OTcsNiBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRXaXRo
SW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENv
bnRhaW5lciopOwogCiAgICAgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBjbG9uZSgpIGNvbnN0Owot
ICAgIFJlbmRlckJsb2NrKiBjb250aW51YXRpb25CZWZvcmUoUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCk7CiAKICAgICBSZW5kZXJGcmFnbWVudGVkRmxvdyogdXBkYXRlQ2FjaGVkRW5jbG9zaW5n
RnJhZ21lbnRlZEZsb3coUmVuZGVyRnJhZ21lbnRlZEZsb3cqKSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA5NmIwNzNlZDYxMmE1MzNlODZkOWZmY2I4
ZGUzZmQ5NzE4MDgxZDdkLi5kMTA2M2E2ODlhMWU1MDJiYTRmYzRkMTIxYWRjMWU5MjY0ODI1NmY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNDkwNCw1NyArNDkw
NCw2IEBAIGJvb2wgUmVuZGVyQm94OjpoYXNSZWxhdGl2ZUxvZ2ljYWxXaWR0aCgpIGNvbnN0CiAg
ICAgICAgIHx8IHN0eWxlKCkubG9naWNhbE1heFdpZHRoKCkuaXNQZXJjZW50T3JDYWxjdWxhdGVk
KCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1hcmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQoUmVuZGVy
Qm94JiBib3gpCi17Ci0gICAgLy8gRklYTUU6IFRoZSB0YWJsZSBjb2RlIHNob3VsZCBoYW5kbGUg
dGhhdCBhdXRvbWF0aWNhbGx5LiBJZiBub3QsCi0gICAgLy8gd2Ugc2hvdWxkIGZpeCBpdCBhbmQg
cmVtb3ZlIHRoZSB0YWJsZSBwYXJ0IGNoZWNrcy4KLSAgICBpZiAoaXM8UmVuZGVyVGFibGU+KGJv
eCkpIHsKLSAgICAgICAgLy8gQmVjYXVzZSB3ZSBtYXkgaGF2ZSBhZGRlZCBzb21lIHNlY3Rpb25z
IHdpdGggYWxyZWFkeSBjb21wdXRlZCBjb2x1bW4gc3RydWN0dXJlcywgd2UgbmVlZCB0bwotICAg
ICAgICAvLyBzeW5jIHRoZSB0YWJsZSBzdHJ1Y3R1cmUgd2l0aCB0aGVtIG5vdy4gVGhpcyBhdm9p
ZHMgY3Jhc2hlcyB3aGVuIGFkZGluZyBuZXcgY2VsbHMgdG8gdGhlIHRhYmxlLgotICAgICAgICBk
b3duY2FzdDxSZW5kZXJUYWJsZT4oYm94KS5mb3JjZVNlY3Rpb25zUmVjYWxjKCk7Ci0gICAgfSBl
bHNlIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rpb24+KGJveCkpCi0gICAgICAgIGRvd25jYXN0PFJl
bmRlclRhYmxlU2VjdGlvbj4oYm94KS5zZXROZWVkc0NlbGxSZWNhbGMoKTsKLQotICAgIGJveC5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLX0KLQotUmVuZGVyT2JqZWN0KiBS
ZW5kZXJCb3g6OnNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQotewotICAgIGJvb2wgZGlkU3BsaXRQYXJlbnRBbm9ueW1vdXNCb3hlcyA9IGZh
bHNlOwotCi0gICAgd2hpbGUgKGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKSB7Ci0gICAg
ICAgIGF1dG8mIGJveFRvU3BsaXQgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpiZWZvcmVDaGlsZC0+
cGFyZW50KCkpOwotICAgICAgICBpZiAoYm94VG9TcGxpdC5maXJzdENoaWxkKCkgIT0gYmVmb3Jl
Q2hpbGQgJiYgYm94VG9TcGxpdC5pc0Fub255bW91cygpKSB7Ci0gICAgICAgICAgICBkaWRTcGxp
dFBhcmVudEFub255bW91c0JveGVzID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gV2UgaGF2ZSB0
byBzcGxpdCB0aGUgcGFyZW50IGJveCBpbnRvIHR3byBib3hlcyBhbmQgbW92ZSBjaGlsZHJlbgot
ICAgICAgICAgICAgLy8gZnJvbSB8YmVmb3JlQ2hpbGR8IHRvIGVuZCBpbnRvIHRoZSBuZXcgcG9z
dCBib3guCi0gICAgICAgICAgICBhdXRvIG5ld1Bvc3RCb3ggPSBib3hUb1NwbGl0LmNyZWF0ZUFu
b255bW91c0JveFdpdGhTYW1lVHlwZUFzKCp0aGlzKTsKLSAgICAgICAgICAgIGF1dG8mIHBvc3RC
b3ggPSAqbmV3UG9zdEJveDsKLSAgICAgICAgICAgIHBvc3RCb3guc2V0Q2hpbGRyZW5JbmxpbmUo
Ym94VG9TcGxpdC5jaGlsZHJlbklubGluZSgpKTsKLSAgICAgICAgICAgIFJlbmRlckJveCogcGFy
ZW50Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94Pihib3hUb1NwbGl0LnBhcmVudCgpKTsKLSAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgfHBhcmVudEJveHwgYmVmb3JlIGlu
c2VydGluZyB0aGUgbmV3IG5vZGUKLSAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIHRhYmxlIHJl
cGFpbnRpbmcgbG9naWMga25vd3MgdGhlIHN0cnVjdHVyZSBpcyBkaXJ0eS4KLSAgICAgICAgICAg
IC8vIFNlZSBmb3IgZXhhbXBsZSBSZW5kZXJUYWJsZUNlbGw6Y2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQuCi0gICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KCpwYXJl
bnRCb3gpOwotICAgICAgICAgICAgcGFyZW50Qm94LT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1v
dmUobmV3UG9zdEJveCksIGJveFRvU3BsaXQubmV4dFNpYmxpbmcoKSk7Ci0gICAgICAgICAgICBi
b3hUb1NwbGl0Lm1vdmVDaGlsZHJlblRvKCZwb3N0Qm94LCBiZWZvcmVDaGlsZCwgbnVsbHB0ciwg
UmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6ZUFmdGVySW5zZXJ0aW9uOjpZZXMpOwotCi0g
ICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KGJveFRvU3BsaXQpOwotICAg
ICAgICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdChwb3N0Qm94KTsKLQotICAgICAg
ICAgICAgYmVmb3JlQ2hpbGQgPSAmcG9zdEJveDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBiZWZvcmVDaGlsZCA9ICZib3hUb1NwbGl0OwotICAgIH0KLQotICAgIGlmIChkaWRTcGxpdFBh
cmVudEFub255bW91c0JveGVzKQotICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0
KCp0aGlzKTsKLQotICAgIEFTU0VSVChiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcyk7Ci0g
ICAgcmV0dXJuIGJlZm9yZUNoaWxkOwotfQotCiBMYXlvdXRVbml0IFJlbmRlckJveDo6b2Zmc2V0
RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpIGNvbnN0CiB7CiAgICAgYXV0byogbGF5b3V0U3Rh
dGUgPSB2aWV3KCkuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmxheW91dFN0YXRlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggNGFjZDJlNDhiYTFlYmUxMGI5Mzgz
MmNiNTE1NzM0N2E3YTdlZGE5Ny4uYWQ0NDkxYmQ3Y2FkYTQzMDZhNWU0MTEyNDE5NGMyYmJiMjYy
MTQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNjY1LDggKzY2NSw2
IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgcGFpbnRSb290Qm94RmlsbExheWVycyhjb25zdCBQ
YWludEluZm8mKTsKIAotICAgIFJlbmRlck9iamVjdCogc3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3Vu
ZENoaWxkKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwotCiAgICAgYm9vbCBza2lwQ29udGFp
bmluZ0Jsb2NrRm9yUGVyY2VudEhlaWdodENhbGN1bGF0aW9uKGNvbnN0IFJlbmRlckJveCYgY29u
dGFpbmluZ0Jsb2NrLCBib29sIGlzUGVycGVuZGljdWxhcldyaXRpbmdNb2RlKSBjb25zdDsKIAog
cHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCmlu
ZGV4IDM5OTNmZDFjMTY2MTJiYTBiYjdjMTg4YmI0N2RjYzkxMTZlMDhiNjEuLjIxYmQ5Y2E4M2Qy
ODA1NTYxYWFjMzViZmU2ZDY0NDg2MWI5YmRhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlCYXNlLmNwcApAQCAtNjEsNyArNjEsNyBAQCB2b2lkIFJlbmRlclJ1YnlC
YXNlOjptb3ZlQ2hpbGRyZW4oUmVuZGVyUnVieUJhc2UqIHRvQmFzZSwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaAogICAgIEFTU0VSVF9BUkcodG9CYXNlLCB0b0Jhc2UpOwogCiAgICAgaWYgKGJlZm9y
ZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKQotICAgICAgICBiZWZvcmVD
aGlsZCA9IHNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChiZWZvcmVDaGlsZCk7CisgICAg
ICAgIGJlZm9yZUNoaWxkID0gUmVuZGVyVHJlZUJ1aWxkZXI6OmN1cnJlbnQoKS0+c3BsaXRBbm9u
eW1vdXNCb3hlc0Fyb3VuZENoaWxkKCp0aGlzLCBiZWZvcmVDaGlsZCk7CiAKICAgICBpZiAoY2hp
bGRyZW5JbmxpbmUoKSkKICAgICAgICAgbW92ZUlubGluZUNoaWxkcmVuKHRvQmFzZSwgYmVmb3Jl
Q2hpbGQpOwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgUmVuZGVyUnVieUJhc2U6Om1vdmVCbG9j
a0NoaWxkcmVuKFJlbmRlclJ1YnlCYXNlKiB0b0Jhc2UsIFJlbmRlck9iamVjdCogYmVmCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmICh0b0Jhc2UtPmNoaWxkcmVuSW5saW5lKCkpCi0gICAgICAg
IHRvQmFzZS0+bWFrZUNoaWxkcmVuTm9uSW5saW5lKCk7CisgICAgICAgIFJlbmRlclRyZWVCdWls
ZGVyOjpjdXJyZW50KCktPm1ha2VDaGlsZHJlbk5vbklubGluZSgqdG9CYXNlKTsKIAogICAgIC8v
IElmIGFuIGFub255bW91cyBibG9jayB3b3VsZCBiZSBwdXQgbmV4dCB0byBhbm90aGVyIHN1Y2gg
YmxvY2ssIHRoZW4gbWVyZ2UgdGhvc2UuCiAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkSGVy
ZSA9IGZpcnN0Q2hpbGQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
CmluZGV4IGVlYzY2YWEwMmJjMzc2NzdhODZlYzZmNGQzZTU1MDgyM2NmMzAyZjMuLmM4YWQ3Yjdj
MWI3MDNjZTZlNTYxN2ZiMmFjODY3YmE4NGM2ZDllMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgUmVuZGVyVGFibGU6
OmFkZENoaWxkKFJlbmRlclRyZWVCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiBjCiAgICAgICAgIHNldE5lZWRzU2VjdGlvblJlY2FsYygpOwogCiAgICAgaWYgKGJlZm9y
ZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKQotICAgICAgICBiZWZvcmVD
aGlsZCA9IHNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChiZWZvcmVDaGlsZCk7CisgICAg
ICAgIGJlZm9yZUNoaWxkID0gYnVpbGRlci5zcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQo
KnRoaXMsIGJlZm9yZUNoaWxkKTsKIAogICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoYnVpbGRlciwg
V1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVSb3cuY3BwCmluZGV4IDZjYjI1MjU1OTMyMTNlOTNmZjEwZDI5OWQzMzU0
ODY5MmM0MmRhOGQuLjI4ZTk5NTAyMjI0ZjFhZTRiNTQ5ODkyNTA3YWU4YzJmZjAwN2U0ODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcApAQCAtMTE0LDcg
KzExNCw3IEBAIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVJvdzo6Ym9yZGVyQWRqb2lu
aW5nRW5kQ2VsbChjb25zdCBSZW5kZXJUYWJsZUNlbGwmCiB2b2lkIFJlbmRlclRhYmxlUm93Ojph
ZGRDaGlsZChSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgaWYgKGJlZm9yZUNo
aWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKQotICAgICAgICBiZWZvcmVDaGls
ZCA9IHNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChiZWZvcmVDaGlsZCk7ICAgIAorICAg
ICAgICBiZWZvcmVDaGlsZCA9IGJ1aWxkZXIuc3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxk
KCp0aGlzLCBiZWZvcmVDaGlsZCk7ICAgIAogCiAgICAgLy8gR2VuZXJhdGVkIGNvbnRlbnQgY2Fu
IHJlc3VsdCBpbiB1cyBoYXZpbmcgYSBudWxsIHNlY3Rpb24gc28gbWFrZSBzdXJlIHRvIG51bGwg
Y2hlY2sgb3VyIHBhcmVudC4KICAgICBpZiAoYXV0byogc2VjdGlvbiA9IHRoaXMtPnNlY3Rpb24o
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAK
aW5kZXggZmUyYjkwNGRiZWUzNTEzMGIyM2RmZGNhNzIzZDc2ZWU4NzA4YjZhNS4uMGM4ZWQ0Njky
ZGM2MWRlNTFmYzkwZGI4ZGQ0YmYxNGM0Mjg2OTA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIs
IFJlbmRlclB0cjxSZW5kZXJPYgogICAgICAgICBzZXRSb3dMb2dpY2FsSGVpZ2h0VG9Sb3dTdHls
ZUxvZ2ljYWxIZWlnaHRJZk5vdFJlbGF0aXZlKG1fZ3JpZFtpbnNlcnRpb25Sb3ddKTsKIAogICAg
IGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykKLSAgICAg
ICAgYmVmb3JlQ2hpbGQgPSBzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoYmVmb3JlQ2hp
bGQpOworICAgICAgICBiZWZvcmVDaGlsZCA9IGJ1aWxkZXIuc3BsaXRBbm9ueW1vdXNCb3hlc0Fy
b3VuZENoaWxkKCp0aGlzLCBiZWZvcmVDaGlsZCk7CiAKICAgICBBU1NFUlQoIWJlZm9yZUNoaWxk
IHx8IGlzPFJlbmRlclRhYmxlUm93PigqYmVmb3JlQ2hpbGQpKTsKICAgICBSZW5kZXJCb3g6OmFk
ZENoaWxkKGJ1aWxkZXIsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNw
cAppbmRleCAzMTkyZDRhNzI5ZDE1YTUzMGE0ZTIyZmI0MWRkODMzOWE2NWIzNTY5Li41OTE5MTM3
MTczNTc5MDdiMzUzYjYxM2I0NDY2YmE3MTZmN2EzMjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJSdWJ5UnVuLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGFibGVSb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyVHJl
ZUJ1aWxkZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0ZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oIgogI2luY2x1ZGUg
IlJlbmRlclRyZWVCdWlsZGVyTGlzdC5oIgpAQCAtNDQsNiArNDUsNTkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBSZW5kZXJUcmVlQnVpbGRlciogUmVuZGVyVHJlZUJ1aWxkZXI6OnNfY3VycmVu
dDsKIAorc3RhdGljIHZvaWQgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdChSZW5kZXJCb3gm
IGJveCkKK3sKKyAgICAvLyBGSVhNRTogVGhlIHRhYmxlIGNvZGUgc2hvdWxkIGhhbmRsZSB0aGF0
IGF1dG9tYXRpY2FsbHkuIElmIG5vdCwKKyAgICAvLyB3ZSBzaG91bGQgZml4IGl0IGFuZCByZW1v
dmUgdGhlIHRhYmxlIHBhcnQgY2hlY2tzLgorICAgIGlmIChpczxSZW5kZXJUYWJsZT4oYm94KSkg
eworICAgICAgICAvLyBCZWNhdXNlIHdlIG1heSBoYXZlIGFkZGVkIHNvbWUgc2VjdGlvbnMgd2l0
aCBhbHJlYWR5IGNvbXB1dGVkIGNvbHVtbiBzdHJ1Y3R1cmVzLCB3ZSBuZWVkIHRvCisgICAgICAg
IC8vIHN5bmMgdGhlIHRhYmxlIHN0cnVjdHVyZSB3aXRoIHRoZW0gbm93LiBUaGlzIGF2b2lkcyBj
cmFzaGVzIHdoZW4gYWRkaW5nIG5ldyBjZWxscyB0byB0aGUgdGFibGUuCisgICAgICAgIGRvd25j
YXN0PFJlbmRlclRhYmxlPihib3gpLmZvcmNlU2VjdGlvbnNSZWNhbGMoKTsKKyAgICB9IGVsc2Ug
aWYgKGlzPFJlbmRlclRhYmxlU2VjdGlvbj4oYm94KSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVy
VGFibGVTZWN0aW9uPihib3gpLnNldE5lZWRzQ2VsbFJlY2FsYygpOworCisgICAgYm94LnNldE5l
ZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworfQorCitzdGF0aWMgdm9pZCBnZXRJbmxp
bmVSdW4oUmVuZGVyT2JqZWN0KiBzdGFydCwgUmVuZGVyT2JqZWN0KiBib3VuZGFyeSwgUmVuZGVy
T2JqZWN0KiYgaW5saW5lUnVuU3RhcnQsIFJlbmRlck9iamVjdComIGlubGluZVJ1bkVuZCkKK3sK
KyAgICAvLyBCZWdpbm5pbmcgYXQgfHN0YXJ0fCB3ZSBmaW5kIHRoZSBsYXJnZXN0IGNvbnRpZ3Vv
dXMgcnVuIG9mIGlubGluZXMgdGhhdAorICAgIC8vIHdlIGNhbi4gV2UgZGVub3RlIHRoZSBydW4g
d2l0aCBzdGFydCBhbmQgZW5kIHBvaW50cywgfGlubGluZVJ1blN0YXJ0fAorICAgIC8vIGFuZCB8
aW5saW5lUnVuRW5kfC4gTm90ZSB0aGF0IHRoZXNlIHR3byB2YWx1ZXMgbWF5IGJlIHRoZSBzYW1l
IGlmCisgICAgLy8gd2UgZW5jb3VudGVyIG9ubHkgb25lIGlubGluZS4KKyAgICAvLworICAgIC8v
IFdlIHNraXAgYW55IG5vbi1pbmxpbmVzIHdlIGVuY291bnRlciBhcyBsb25nIGFzIHdlIGhhdmVu
J3QgZm91bmQgYW55CisgICAgLy8gaW5saW5lcyB5ZXQuCisgICAgLy8KKyAgICAvLyB8Ym91bmRh
cnl8IGluZGljYXRlcyBhIG5vbi1pbmNsdXNpdmUgYm91bmRhcnkgcG9pbnQuIFJlZ2FyZGxlc3Mg
b2Ygd2hldGhlciB8Ym91bmRhcnl8CisgICAgLy8gaXMgaW5saW5lIG9yIG5vdCwgd2Ugd2lsbCBu
b3QgaW5jbHVkZSBpdCBpbiBhIHJ1biB3aXRoIGlubGluZXMgYmVmb3JlIGl0LiBJdCdzIGFzIHRo
b3VnaCB3ZSBlbmNvdW50ZXJlZAorICAgIC8vIGEgbm9uLWlubGluZS4KKworICAgIC8vIFN0YXJ0
IGJ5IHNraXBwaW5nIGFzIG1hbnkgbm9uLWlubGluZXMgYXMgd2UgY2FuLgorICAgIGF1dG8qIGN1
cnIgPSBzdGFydDsKKyAgICBib29sIHNhd0lubGluZTsKKyAgICBkbyB7CisgICAgICAgIHdoaWxl
IChjdXJyICYmICEoY3Vyci0+aXNJbmxpbmUoKSB8fCBjdXJyLT5pc0Zsb2F0aW5nT3JPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpKQorICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCk7
CisKKyAgICAgICAgaW5saW5lUnVuU3RhcnQgPSBpbmxpbmVSdW5FbmQgPSBjdXJyOworCisgICAg
ICAgIGlmICghY3VycikKKyAgICAgICAgICAgIHJldHVybjsgLy8gTm8gbW9yZSBpbmxpbmUgY2hp
bGRyZW4gdG8gYmUgZm91bmQuCisKKyAgICAgICAgc2F3SW5saW5lID0gY3Vyci0+aXNJbmxpbmUo
KTsKKworICAgICAgICBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgd2hpbGUg
KGN1cnIgJiYgKGN1cnItPmlzSW5saW5lKCkgfHwgY3Vyci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93
UG9zaXRpb25lZCgpKSAmJiAoY3VyciAhPSBib3VuZGFyeSkpIHsKKyAgICAgICAgICAgIGlubGlu
ZVJ1bkVuZCA9IGN1cnI7CisgICAgICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmUoKSkKKyAgICAg
ICAgICAgICAgICBzYXdJbmxpbmUgPSB0cnVlOworICAgICAgICAgICAgY3VyciA9IGN1cnItPm5l
eHRTaWJsaW5nKCk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlICghc2F3SW5saW5lKTsKK30KKwor
CiBSZW5kZXJUcmVlQnVpbGRlcjo6UmVuZGVyVHJlZUJ1aWxkZXIoUmVuZGVyVmlldyYgdmlldykK
ICAgICA6IG1fdmlldyh2aWV3KQogICAgICwgbV9maXJzdExldHRlckJ1aWxkZXIoc3RkOjptYWtl
X3VuaXF1ZTxGaXJzdExldHRlcj4oKnRoaXMpKQpAQCAtNTIsNiArMTA2LDcgQEAgUmVuZGVyVHJl
ZUJ1aWxkZXI6OlJlbmRlclRyZWVCdWlsZGVyKFJlbmRlclZpZXcmIHZpZXcpCiAgICAgLCBtX3Rh
YmxlQnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPFRhYmxlPigqdGhpcykpCiAgICAgLCBtX3J1YnlC
dWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8UnVieT4oKnRoaXMpKQogICAgICwgbV9mb3JtQ29udHJv
bHNCdWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8Rm9ybUNvbnRyb2xzPigqdGhpcykpCisgICAgLCBt
X2Jsb2NrQnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPEJsb2NrPigqdGhpcykpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIXNfY3VycmVudCB8fCAmbV92aWV3ICE9ICZzX2N1cnJlbnQtPm1fdmlldyk7
CiAgICAgbV9wcmV2aW91cyA9IHNfY3VycmVudDsKQEAgLTEyOCw2ICsxODMsOTUgQEAgdm9pZCBS
ZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGQoUmVuZGVyVHJlZVBvc2l0aW9uJiBwb3NpdGlv
biwgUmVuZGVyUHRyPFJlbmQKICAgICBpbnNlcnRDaGlsZChwb3NpdGlvbi5wYXJlbnQoKSwgV1RG
TW92ZShjaGlsZCksIHBvc2l0aW9uLm5leHRTaWJsaW5nKCkpOwogfQogCit2b2lkIFJlbmRlclRy
ZWVCdWlsZGVyOjppbnNlcnRDaGlsZFRvUmVuZGVyQmxvY2soUmVuZGVyQmxvY2smIHBhcmVudCwg
UmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQp
Cit7CisgICAgYmxvY2tCdWlsZGVyKCkuaW5zZXJ0Q2hpbGQocGFyZW50LCBXVEZNb3ZlKGNoaWxk
KSwgYmVmb3JlQ2hpbGQpOworfQorCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGls
ZFRvUmVuZGVyQmxvY2tJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJCbG9jayYgcGFyZW50LCBS
ZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkK
K3sKKyAgICBibG9ja0J1aWxkZXIoKS5pbnNlcnRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKHBh
cmVudCwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKK30KKwordm9pZCBSZW5kZXJUcmVl
QnVpbGRlcjo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRl
ck9iamVjdCogaW5zZXJ0aW9uUG9pbnQpCit7CisgICAgLy8gbWFrZUNoaWxkcmVuTm9uSW5saW5l
IHRha2VzIGEgYmxvY2sgd2hvc2UgY2hpbGRyZW4gYXJlICphbGwqIGlubGluZSBhbmQgaXQKKyAg
ICAvLyBtYWtlcyBzdXJlIHRoYXQgaW5saW5lIGNoaWxkcmVuIGFyZSBjb2FsZXNjZWQgdW5kZXIg
YW5vbnltb3VzCisgICAgLy8gYmxvY2tzLiBJZiB8aW5zZXJ0aW9uUG9pbnR8IGlzIGRlZmluZWQs
IHRoZW4gaXQgcmVwcmVzZW50cyB0aGUgaW5zZXJ0aW9uIHBvaW50IGZvcgorICAgIC8vIHRoZSBu
ZXcgYmxvY2sgY2hpbGQgdGhhdCBpcyBjYXVzaW5nIHVzIHRvIGhhdmUgdG8gd3JhcCBhbGwgdGhl
IGlubGluZXMuIFRoaXMKKyAgICAvLyBtZWFucyB0aGF0IHdlIGNhbm5vdCBjb2FsZXNjZSBpbmxp
bmVzIGJlZm9yZSB8aW5zZXJ0aW9uUG9pbnR8IHdpdGggaW5saW5lcyBmb2xsb3dpbmcKKyAgICAv
LyB8aW5zZXJ0aW9uUG9pbnR8LCBiZWNhdXNlIHRoZSBuZXcgY2hpbGQgaXMgZ29pbmcgdG8gYmUg
aW5zZXJ0ZWQgaW4gYmV0d2VlbiB0aGUgaW5saW5lcywKKyAgICAvLyBzcGxpdHRpbmcgdGhlbS4K
KyAgICBBU1NFUlQocGFyZW50LmlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgfHwgIXBhcmVu
dC5pc0lubGluZSgpKTsKKyAgICBBU1NFUlQoIWluc2VydGlvblBvaW50IHx8IGluc2VydGlvblBv
aW50LT5wYXJlbnQoKSA9PSAmcGFyZW50KTsKKworICAgIHBhcmVudC5zZXRDaGlsZHJlbklubGlu
ZShmYWxzZSk7CisKKyAgICBhdXRvKiBjaGlsZCA9IHBhcmVudC5maXJzdENoaWxkKCk7CisgICAg
aWYgKCFjaGlsZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFyZW50LmRlbGV0ZUxpbmVzKCk7
CisKKyAgICB3aGlsZSAoY2hpbGQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBpbmxpbmVSdW5T
dGFydCA9IG51bGxwdHI7CisgICAgICAgIFJlbmRlck9iamVjdCogaW5saW5lUnVuRW5kID0gbnVs
bHB0cjsKKyAgICAgICAgZ2V0SW5saW5lUnVuKGNoaWxkLCBpbnNlcnRpb25Qb2ludCwgaW5saW5l
UnVuU3RhcnQsIGlubGluZVJ1bkVuZCk7CisKKyAgICAgICAgaWYgKCFpbmxpbmVSdW5TdGFydCkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNoaWxkID0gaW5saW5lUnVuRW5kLT5uZXh0
U2libGluZygpOworCisgICAgICAgIGF1dG8gbmV3QmxvY2sgPSBwYXJlbnQuY3JlYXRlQW5vbnlt
b3VzQmxvY2soKTsKKyAgICAgICAgYXV0byYgYmxvY2sgPSAqbmV3QmxvY2s7CisgICAgICAgIHBh
cmVudC5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUobmV3QmxvY2spLCBpbmxpbmVSdW5TdGFy
dCk7CisgICAgICAgIHBhcmVudC5tb3ZlQ2hpbGRyZW5UbygmYmxvY2ssIGlubGluZVJ1blN0YXJ0
LCBjaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6ZUFmdGVySW5zZXJ0aW9uOjpO
byk7CisgICAgfQorI2lmbmRlZiBOREVCVUcKKyAgICBmb3IgKFJlbmRlck9iamVjdCogYyA9IHBh
cmVudC5maXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQorICAgICAgICBBU1NF
UlQoIWMtPmlzSW5saW5lKCkpOworI2VuZGlmCisgICAgcGFyZW50LnJlcGFpbnQoKTsKK30KKwor
UmVuZGVyT2JqZWN0KiBSZW5kZXJUcmVlQnVpbGRlcjo6c3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3Vu
ZENoaWxkKFJlbmRlckJveCYgcGFyZW50LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQorewor
ICAgIGJvb2wgZGlkU3BsaXRQYXJlbnRBbm9ueW1vdXNCb3hlcyA9IGZhbHNlOworCisgICAgd2hp
bGUgKGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSAmcGFyZW50KSB7CisgICAgICAgIGF1dG8mIGJv
eFRvU3BsaXQgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpiZWZvcmVDaGlsZC0+cGFyZW50KCkpOwor
ICAgICAgICBpZiAoYm94VG9TcGxpdC5maXJzdENoaWxkKCkgIT0gYmVmb3JlQ2hpbGQgJiYgYm94
VG9TcGxpdC5pc0Fub255bW91cygpKSB7CisgICAgICAgICAgICBkaWRTcGxpdFBhcmVudEFub255
bW91c0JveGVzID0gdHJ1ZTsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBzcGxpdCB0aGUg
cGFyZW50IGJveCBpbnRvIHR3byBib3hlcyBhbmQgbW92ZSBjaGlsZHJlbgorICAgICAgICAgICAg
Ly8gZnJvbSB8YmVmb3JlQ2hpbGR8IHRvIGVuZCBpbnRvIHRoZSBuZXcgcG9zdCBib3guCisgICAg
ICAgICAgICBhdXRvIG5ld1Bvc3RCb3ggPSBib3hUb1NwbGl0LmNyZWF0ZUFub255bW91c0JveFdp
dGhTYW1lVHlwZUFzKHBhcmVudCk7CisgICAgICAgICAgICBhdXRvJiBwb3N0Qm94ID0gKm5ld1Bv
c3RCb3g7CisgICAgICAgICAgICBwb3N0Qm94LnNldENoaWxkcmVuSW5saW5lKGJveFRvU3BsaXQu
Y2hpbGRyZW5JbmxpbmUoKSk7CisgICAgICAgICAgICBSZW5kZXJCb3gqIHBhcmVudEJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4oYm94VG9TcGxpdC5wYXJlbnQoKSk7CisgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGludmFsaWRhdGUgdGhlIHxwYXJlbnRCb3h8IGJlZm9yZSBpbnNlcnRpbmcgdGhl
IG5ldyBub2RlCisgICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSB0YWJsZSByZXBhaW50aW5nIGxv
Z2ljIGtub3dzIHRoZSBzdHJ1Y3R1cmUgaXMgZGlydHkuCisgICAgICAgICAgICAvLyBTZWUgZm9y
IGV4YW1wbGUgUmVuZGVyVGFibGVDZWxsOmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50Lgor
ICAgICAgICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdCgqcGFyZW50Qm94KTsKKyAg
ICAgICAgICAgIHBhcmVudEJveC0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5ld1Bvc3RC
b3gpLCBib3hUb1NwbGl0Lm5leHRTaWJsaW5nKCkpOworICAgICAgICAgICAgYm94VG9TcGxpdC5t
b3ZlQ2hpbGRyZW5UbygmcG9zdEJveCwgYmVmb3JlQ2hpbGQsIG51bGxwdHIsIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpOb3JtYWxpemVBZnRlckluc2VydGlvbjo6WWVzKTsKKworICAgICAgICAgICAg
bWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdChib3hUb1NwbGl0KTsKKyAgICAgICAgICAgIG1h
cmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQocG9zdEJveCk7CisKKyAgICAgICAgICAgIGJlZm9y
ZUNoaWxkID0gJnBvc3RCb3g7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYmVmb3JlQ2hp
bGQgPSAmYm94VG9TcGxpdDsKKyAgICB9CisKKyAgICBpZiAoZGlkU3BsaXRQYXJlbnRBbm9ueW1v
dXNCb3hlcykKKyAgICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdChwYXJlbnQpOwor
CisgICAgQVNTRVJUKGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSAmcGFyZW50KTsKKyAgICByZXR1
cm4gYmVmb3JlQ2hpbGQ7Cit9CisKIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OnVwZGF0ZUFmdGVy
RGVzY2VuZGFudHMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7CiAgICAgaWYgKGlzPFJlbmRl
ckJsb2NrPihyZW5kZXJlcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
dXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oCmluZGV4IGIwNWZkMWZmOWE1MTRmZWVlZTUyZDA5
MGQ2ZjM3ODc2MjRmYjdlNmYuLmU5N2I0MmU2ZmRiZjlhOTY1MDdlNTUzM2JjMGQ3Mjk1ODlmYmVm
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5k
ZXJUcmVlQnVpbGRlci5oCkBAIC00Niw2ICs0NiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6
IFJlbW92ZS4KICAgICBzdGF0aWMgUmVuZGVyVHJlZUJ1aWxkZXIqIGN1cnJlbnQoKSB7IHJldHVy
biBzX2N1cnJlbnQ7IH0KIAorICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdGVtcG9yYXJ5IHVu
dGlsIGFmdGVyIGFsbCBibG9jay9pbmxpbmUvY29udGludWF0aW9uIGNvZGUgaXMgbW92ZWQgb3Zl
ci4KKyAgICB2b2lkIGluc2VydENoaWxkVG9SZW5kZXJCbG9jayhSZW5kZXJCbG9jayYgcGFyZW50
LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51
bGxwdHIpOworICAgIHZvaWQgaW5zZXJ0Q2hpbGRUb1JlbmRlckJsb2NrSWdub3JpbmdDb250aW51
YXRpb24oUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4sIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKTsKKyAgICB2b2lkIG1ha2VDaGlsZHJlbk5v
bklubGluZShSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJPYmplY3QqIGluc2VydGlvblBvaW50
ID0gbnVsbHB0cik7CisgICAgUmVuZGVyT2JqZWN0KiBzcGxpdEFub255bW91c0JveGVzQXJvdW5k
Q2hpbGQoUmVuZGVyQm94JiBwYXJlbnQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOworCiBw
cml2YXRlOgogICAgIGNsYXNzIEZpcnN0TGV0dGVyOwogICAgIGNsYXNzIExpc3Q7CkBAIC01Myw2
ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgVGFibGU7CiAgICAgY2xhc3MgUnVieTsKICAg
ICBjbGFzcyBGb3JtQ29udHJvbHM7CisgICAgY2xhc3MgQmxvY2s7CiAKICAgICBGaXJzdExldHRl
ciYgZmlyc3RMZXR0ZXJCdWlsZGVyKCkgeyByZXR1cm4gKm1fZmlyc3RMZXR0ZXJCdWlsZGVyOyB9
CiAgICAgTGlzdCYgbGlzdEJ1aWxkZXIoKSB7IHJldHVybiAqbV9saXN0QnVpbGRlcjsgfQpAQCAt
NjAsNiArNjcsNyBAQCBwcml2YXRlOgogICAgIFRhYmxlJiB0YWJsZUJ1aWxkZXIoKSB7IHJldHVy
biAqbV90YWJsZUJ1aWxkZXI7IH0KICAgICBSdWJ5JiBydWJ5QnVpbGRlcigpIHsgcmV0dXJuICpt
X3J1YnlCdWlsZGVyOyB9CiAgICAgRm9ybUNvbnRyb2xzJiBmb3JtQ29udHJvbHNCdWlsZGVyKCkg
eyByZXR1cm4gKm1fZm9ybUNvbnRyb2xzQnVpbGRlcjsgfQorICAgIEJsb2NrJiBibG9ja0J1aWxk
ZXIoKSB7IHJldHVybiAqbV9ibG9ja0J1aWxkZXI7IH0KIAogICAgIFJlbmRlclZpZXcmIG1fdmll
dzsKIApAQCAtNzIsNiArODAsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJs
ZT4gbV90YWJsZUJ1aWxkZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1Ynk+IG1fcnVieUJ1aWxk
ZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZvcm1Db250cm9scz4gbV9mb3JtQ29udHJvbHNCdWls
ZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCbG9jaz4gbV9ibG9ja0J1aWxkZXI7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJl
ZUJ1aWxkZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVu
ZGVyVHJlZUJ1aWxkZXJCbG9jay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGMxOWY3ODliODQ5OGQ3NTk1YzVm
NTViMDU0MWE5NTE1MDE0YTZjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckJsb2NrLmNwcApAQCAtMCwwICsxLDIw
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJU
cmVlQnVpbGRlckJsb2NrLmgiCisKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCisj
aW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBSZW5kZXJCbG9jayogY29udGludWF0aW9uQmVmb3JlKFJlbmRlckJsb2NrJiBwYXJlbnQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit7CisgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKSA9PSAmcGFyZW50KQorICAgICAgICByZXR1cm4gJnBhcmVudDsK
KworICAgIFJlbmRlckJsb2NrKiBuZXh0VG9MYXN0ID0gJnBhcmVudDsKKyAgICBSZW5kZXJCbG9j
ayogbGFzdCA9ICZwYXJlbnQ7CisgICAgZm9yIChhdXRvKiBjdXJyZW50ID0gZG93bmNhc3Q8UmVu
ZGVyQmxvY2s+KHBhcmVudC5jb250aW51YXRpb24oKSk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4oY3VycmVudC0+Y29udGludWF0aW9uKCkpKSB7CisgICAgICAgIGlm
IChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gY3VycmVudCkgeworICAg
ICAgICAgICAgaWYgKGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSBiZWZvcmVDaGlsZCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbGFzdDsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAg
ICAgICB9CisKKyAgICAgICAgbmV4dFRvTGFzdCA9IGxhc3Q7CisgICAgICAgIGxhc3QgPSBjdXJy
ZW50OworICAgIH0KKworICAgIGlmICghYmVmb3JlQ2hpbGQgJiYgIWxhc3QtPmZpcnN0Q2hpbGQo
KSkKKyAgICAgICAgcmV0dXJuIG5leHRUb0xhc3Q7CisgICAgcmV0dXJuIGxhc3Q7Cit9CisKK1Jl
bmRlclRyZWVCdWlsZGVyOjpCbG9jazo6QmxvY2soUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIp
CisgICAgOiBtX2J1aWxkZXIoYnVpbGRlcikKK3sKK30KKwordm9pZCBSZW5kZXJUcmVlQnVpbGRl
cjo6QmxvY2s6Omluc2VydENoaWxkKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIGlmIChw
YXJlbnQuY29udGludWF0aW9uKCkgJiYgIXBhcmVudC5pc0Fub255bW91c0Jsb2NrKCkpCisgICAg
ICAgIGluc2VydENoaWxkVG9Db250aW51YXRpb24ocGFyZW50LCBXVEZNb3ZlKGNoaWxkKSwgYmVm
b3JlQ2hpbGQpOworICAgIGVsc2UKKyAgICAgICAgaW5zZXJ0Q2hpbGRJZ25vcmluZ0NvbnRpbnVh
dGlvbihwYXJlbnQsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7Cit9CisKK3ZvaWQgUmVu
ZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjppbnNlcnRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlckJs
b2NrJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkKQoreworICAgIFJlbmRlckJsb2NrKiBmbG93ID0gY29udGludWF0aW9uQmVm
b3JlKHBhcmVudCwgYmVmb3JlQ2hpbGQpOworICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgaXM8
UmVuZGVyQmxvY2s+KCpiZWZvcmVDaGlsZC0+cGFyZW50KCkpKTsKKyAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogYmVmb3JlQ2hpbGRQYXJlbnQgPSBudWxscHRyOworICAgIGlmIChiZWZvcmVDaGls
ZCkKKyAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9i
amVjdD4oYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlvbiA9IGZsb3ctPmNvbnRpbnVhdGlvbigpOworICAg
ICAgICBpZiAoY29udGludWF0aW9uKQorICAgICAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQgPSBj
b250aW51YXRpb247CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZm9yZUNoaWxkUGFyZW50
ID0gZmxvdzsKKyAgICB9CisKKyAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bv
c2l0aW9uZWQoKSkgeworICAgICAgICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbihtX2J1aWxkZXIsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGNoaWxkSXNOb3JtYWwgPSBjaGlsZC0+
aXNJbmxpbmUoKSB8fCAhY2hpbGQtPnN0eWxlKCkuY29sdW1uU3BhbigpOworICAgIGJvb2wgYmNw
SXNOb3JtYWwgPSBiZWZvcmVDaGlsZFBhcmVudC0+aXNJbmxpbmUoKSB8fCAhYmVmb3JlQ2hpbGRQ
YXJlbnQtPnN0eWxlKCkuY29sdW1uU3BhbigpOworICAgIGJvb2wgZmxvd0lzTm9ybWFsID0gZmxv
dy0+aXNJbmxpbmUoKSB8fCAhZmxvdy0+c3R5bGUoKS5jb2x1bW5TcGFuKCk7CisKKyAgICBpZiAo
ZmxvdyA9PSBiZWZvcmVDaGlsZFBhcmVudCkgeworICAgICAgICBmbG93LT5hZGRDaGlsZElnbm9y
aW5nQ29udGludWF0aW9uKG1fYnVpbGRlciwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWF0
Y2ggdXAgaWYgd2UgY2FuLCBzbyB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQgY3JlYXRlIHRoZQor
ICAgIC8vIG1pbmltYWwgIyBvZiBjb250aW51YXRpb25zIG5lZWRlZCBmb3IgdGhlIGlubGluZS4K
KyAgICBpZiAoY2hpbGRJc05vcm1hbCA9PSBiY3BJc05vcm1hbCkgeworICAgICAgICBiZWZvcmVD
aGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihtX2J1aWxkZXIsIFdURk1v
dmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KGZsb3dJc05vcm1hbCA9PSBjaGlsZElzTm9ybWFsKSB7CisgICAgICAgIGZsb3ctPmFkZENoaWxk
SWdub3JpbmdDb250aW51YXRpb24obV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSwgbnVsbHB0cik7
IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQuCisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obV9idWls
ZGVyLCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOworfQorCit2b2lkIFJlbmRlclRyZWVC
dWlsZGVyOjpCbG9jazo6aW5zZXJ0Q2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJCbG9j
ayYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCkKK3sKKyAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVu
dCgpICE9ICZwYXJlbnQpIHsKKyAgICAgICAgUmVuZGVyRWxlbWVudCogYmVmb3JlQ2hpbGRDb250
YWluZXIgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7CisgICAgICAgIHdoaWxlIChiZWZvcmVDaGls
ZENvbnRhaW5lci0+cGFyZW50KCkgIT0gJnBhcmVudCkKKyAgICAgICAgICAgIGJlZm9yZUNoaWxk
Q29udGFpbmVyID0gYmVmb3JlQ2hpbGRDb250YWluZXItPnBhcmVudCgpOworICAgICAgICBBU1NF
UlQoYmVmb3JlQ2hpbGRDb250YWluZXIpOworCisgICAgICAgIGlmIChiZWZvcmVDaGlsZENvbnRh
aW5lci0+aXNBbm9ueW1vdXMoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTighYmVmb3JlQ2hpbGRDb250YWluZXItPmlzSW5saW5lKCkpOwor
CisgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdGVkIGJlZm9yZUNoaWxkIGlzIG5vdCBvbmUg
b2Ygb3VyIGNoaWxkcmVuLCB0aGVuIHRoaXMgaXMgYmVjYXVzZQorICAgICAgICAgICAgLy8gdGhl
cmUgaXMgYW4gYW5vbnltb3VzIGNvbnRhaW5lciB3aXRoaW4gdGhpcyBvYmplY3QgdGhhdCBjb250
YWlucyB0aGUgYmVmb3JlQ2hpbGQuCisgICAgICAgICAgICBSZW5kZXJFbGVtZW50KiBiZWZvcmVD
aGlsZEFub255bW91c0NvbnRhaW5lciA9IGJlZm9yZUNoaWxkQ29udGFpbmVyOworICAgICAgICAg
ICAgaWYgKGJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVyLT5pc0Fub255bW91c0Jsb2NrKCkK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgICAgICAgICAgICAgLy8gRnVsbCBzY3Jl
ZW4gcmVuZGVyZXJzIGFuZCBmdWxsIHNjcmVlbiBwbGFjZWhvbGRlcnMgYWN0IGFzIGFub255bW91
cyBibG9ja3MsIG5vdCB0YWJsZXM6CisgICAgICAgICAgICAgICAgfHwgYmVmb3JlQ2hpbGRBbm9u
eW1vdXNDb250YWluZXItPmlzUmVuZGVyRnVsbFNjcmVlbigpCisgICAgICAgICAgICAgICAgfHwg
YmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXItPmlzUmVuZGVyRnVsbFNjcmVlblBsYWNlaG9s
ZGVyKCkKKyNlbmRpZgorICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIC8vIElu
c2VydCB0aGUgY2hpbGQgaW50byB0aGUgYW5vbnltb3VzIGJsb2NrIGJveCBpbnN0ZWFkIG9mIGhl
cmUuCisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0lubGluZSgpIHx8IGJlZm9yZUNoaWxk
LT5wYXJlbnQoKS0+Zmlyc3RDaGlsZCgpICE9IGJlZm9yZUNoaWxkKQorICAgICAgICAgICAgICAg
ICAgICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQoKmJlZm9yZUNoaWxkLT5wYXJlbnQoKSwgV1RGTW92
ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZChwYXJlbnQsIFdURk1vdmUoY2hpbGQpLCBi
ZWZvcmVDaGlsZC0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKGJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVy
LT5pc1RhYmxlKCkpOworCisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVQYXJ0KCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgaW50byB0aGUgYW5vbnltb3VzIHRhYmxlLgorICAg
ICAgICAgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZCgqYmVmb3JlQ2hpbGRBbm9ueW1vdXND
b250YWluZXIsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBiZWZvcmVDaGlsZCA9IG1fYnVp
bGRlci5zcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQocGFyZW50LCBiZWZvcmVDaGlsZCk7
CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
YmVmb3JlQ2hpbGQtPnBhcmVudCgpID09ICZwYXJlbnQpOworICAgICAgICB9CisgICAgfQorCisg
ICAgYm9vbCBtYWRlQm94ZXNOb25JbmxpbmUgPSBmYWxzZTsKKworICAgIC8vIEEgYmxvY2sgaGFz
IHRvIGVpdGhlciBoYXZlIGFsbCBvZiBpdHMgY2hpbGRyZW4gaW5saW5lLCBvciBhbGwgb2YgaXRz
IGNoaWxkcmVuIGFzIGJsb2Nrcy4KKyAgICAvLyBTbywgaWYgb3VyIGNoaWxkcmVuIGFyZSBjdXJy
ZW50bHkgaW5saW5lIGFuZCBhIGJsb2NrIGNoaWxkIGhhcyB0byBiZSBpbnNlcnRlZCwgd2UgbW92
ZSBhbGwgb3VyCisgICAgLy8gaW5saW5lIGNoaWxkcmVuIGludG8gYW5vbnltb3VzIGJsb2NrIGJv
eGVzLgorICAgIGlmIChwYXJlbnQuY2hpbGRyZW5JbmxpbmUoKSAmJiAhY2hpbGQtPmlzSW5saW5l
KCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAgICAg
ICAgLy8gVGhpcyBpcyBhIGJsb2NrIHdpdGggaW5saW5lIGNvbnRlbnQuIFdyYXAgdGhlIGlubGlu
ZSBjb250ZW50IGluIGFub255bW91cyBibG9ja3MuCisgICAgICAgIG1fYnVpbGRlci5tYWtlQ2hp
bGRyZW5Ob25JbmxpbmUocGFyZW50LCBiZWZvcmVDaGlsZCk7CisgICAgICAgIG1hZGVCb3hlc05v
bklubGluZSA9IHRydWU7CisKKyAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxk
LT5wYXJlbnQoKSAhPSAmcGFyZW50KSB7CisgICAgICAgICAgICBiZWZvcmVDaGlsZCA9IGJlZm9y
ZUNoaWxkLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIEFTU0VSVChiZWZvcmVDaGlsZC0+aXNBbm9u
eW1vdXNCbG9jaygpKTsKKyAgICAgICAgICAgIEFTU0VSVChiZWZvcmVDaGlsZC0+cGFyZW50KCkg
PT0gJnBhcmVudCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFwYXJlbnQuY2hpbGRyZW5J
bmxpbmUoKSAmJiAoY2hpbGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBj
aGlsZC0+aXNJbmxpbmUoKSkpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW5zZXJ0aW5nIGFuIGlu
bGluZSBjaGlsZCBidXQgYWxsIG9mIG91ciBjaGlsZHJlbiBhcmUgYmxvY2tzLCB0aGVuIHdlIGhh
dmUgdG8gbWFrZSBzdXJlCisgICAgICAgIC8vIGl0IGlzIHB1dCBpbnRvIGFuIGFub215b3VzIGJs
b2NrIGJveC4gV2UgdHJ5IHRvIHVzZSBhbiBleGlzdGluZyBhbm9ueW1vdXMgYm94IGlmIHBvc3Np
YmxlLCBvdGhlcndpc2UKKyAgICAgICAgLy8gYSBuZXcgb25lIGlzIGNyZWF0ZWQgYW5kIGluc2Vy
dGVkIGludG8gb3VyIGxpc3Qgb2YgY2hpbGRyZW4gaW4gdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9u
LgorICAgICAgICBSZW5kZXJPYmplY3QqIGFmdGVyQ2hpbGQgPSBiZWZvcmVDaGlsZCA/IGJlZm9y
ZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6IHBhcmVudC5sYXN0Q2hpbGQoKTsKKworICAgICAg
ICBpZiAoYWZ0ZXJDaGlsZCAmJiBhZnRlckNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKKyAg
ICAgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZChkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmFm
dGVyQ2hpbGQpLCBXVEZNb3ZlKGNoaWxkKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY2hpbGQtPmlzSW5saW5lKCkpIHsKKyAgICAgICAgICAgIC8vIE5v
IHN1aXRhYmxlIGV4aXN0aW5nIGFub255bW91cyBib3ggLSBjcmVhdGUgYSBuZXcgb25lLgorICAg
ICAgICAgICAgYXV0byBuZXdCb3ggPSBwYXJlbnQuY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAg
ICAgICAgICAgIGF1dG8mIGJveCA9ICpuZXdCb3g7CisgICAgICAgICAgICBwYXJlbnQuUmVuZGVy
Qm94OjphZGRDaGlsZChtX2J1aWxkZXIsIFdURk1vdmUobmV3Qm94KSwgYmVmb3JlQ2hpbGQpOwor
ICAgICAgICAgICAgbV9idWlsZGVyLmluc2VydENoaWxkKGJveCwgV1RGTW92ZShjaGlsZCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgcGFyZW50LmludmFs
aWRhdGVMaW5lTGF5b3V0UGF0aCgpOworCisgICAgcGFyZW50LlJlbmRlckJveDo6YWRkQ2hpbGQo
bV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOworCisgICAgaWYgKG1hZGVC
b3hlc05vbklubGluZSAmJiBpczxSZW5kZXJCbG9jaz4ocGFyZW50LnBhcmVudCgpKSAmJiBwYXJl
bnQuaXNBbm9ueW1vdXNCbG9jaygpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBh
cmVudC5wYXJlbnQoKSkucmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jaygmcGFyZW50KTsKKyAg
ICAvLyBwYXJlbnQgb2JqZWN0IG1heSBiZSBkZWFkIGhlcmUKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2su
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlckJs
b2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2NkYWJmM2E5OTYxODRlYWZkNmZkNWQzMTdmYWZlYmM5ZTg0OWI3
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlQnVpbGRlckJsb2NrLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2sgeworcHVibGljOgor
ICAgIEJsb2NrKFJlbmRlclRyZWVCdWlsZGVyJik7CisKKyAgICB2b2lkIGluc2VydENoaWxkKFJl
bmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKTsKKyAgICB2b2lkIGluc2VydENoaWxkSWdub3JpbmdDb250aW51
YXRpb24oUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOworCitwcml2YXRlOgorICAgIHZvaWQgaW5zZXJ0
Q2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVy
T2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CisKKyAgICBSZW5kZXJU
cmVlQnVpbGRlciYgbV9idWlsZGVyOworfTsKKworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330706</attachid>
            <date>2018-01-08 09:08:17 -0800</date>
            <delta_ts>2018-01-08 09:40:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181319-20180108090816.patch</filename>
            <type>text/plain</type>
            <size>49988</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzI1NTY2YmU5ZGQ5YTJi
MmE2MDg4NDNmYjMzZDUyNjYyNjU5ZDJkMS4uNzIzZDJiNzNmNmIzMDk0Mjg0N2U3MmVjNDRkNDY0
YTdiMzNiNDYzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE4LTAxLTA4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1JlbmRlclRyZWVCdWlsZGVy
XSBNb3ZlIFJlbmRlckJsb2NrIGFkZENoaWxkIGxvZ2ljIHRvIFJlbmRlclRyZWVCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODEzMTkKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MzEzNDY0PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
dHRpIEtvaXZpc3RvLgorCisgICAgICAgIFRoaXMgaXMgYWJvdXQgbW92aW5nIHRoZSBjb2RlLCBu
byBjbGVhbnVwIGFuZC9vciBub3JtYWxpemF0aW9uICh1bmZvcnR1bmF0ZWx5IGl0IGFsc28gbWVh
bnMKKyAgICAgICAgc29tZSB0ZW1wb3JhcnkgY2hhbmdlcykuICAKKworICAgICAgICBObyBjaGFu
Z2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGlu
dWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGlsZEJlY2FtZU5vbklu
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGludWF0aW9uQmVmb3Jl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDaGlsZFRvQ29u
dGludWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmdldElubGluZVJ1bik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9uSW5s
aW5lKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtCb3hG
b3JSZWxheW91dEFmdGVyU3BsaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieUJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6Om1vdmVDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QmFzZTo6bW92ZUJsb2NrQ2hpbGRyZW4pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6YWRkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtCb3hG
b3JSZWxheW91dEFmdGVyU3BsaXQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW5saW5lUnVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpSZW5kZXJUcmVlQnVpbGRlcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGRUb1JlbmRl
ckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjppbnNlcnRDaGls
ZFRvUmVuZGVyQmxvY2tJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUcmVlQnVpbGRlcjo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRyZWVCdWlsZGVyOjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQpOgor
ICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVHJlZUJ1aWxkZXI6OmJsb2NrQnVpbGRlcik6CisgICAgICAgICog
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRpbnVhdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2s6OkJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRyZWVCdWlsZGVyOjpCbG9jazo6aW5zZXJ0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjppbnNlcnRDaGlsZFRvQ29udGludWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWlsZGVyOjpCbG9jazo6aW5zZXJ0Q2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVC
dWlsZGVyQmxvY2suaDogQWRkZWQuCisgICAgICAgIAogMjAxOC0wMS0wOCAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiBbaU9TXSBBU1NFUlRJ
T04gRkFJTEVEOiAhbm9kZS5pc0Nvbm5lY3RlZCgpIGluIFdlYkNvcmU6Om5vdGlmeU5vZGVJbnNl
cnRlZEludG9Eb2N1bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBhNGJhZjU5MTRmMTJiMmM2OTc1ZDYz
YjU4NmI4NmQwMWI3ZGJiOGNiLi4wODRlNzUyNTU0M2M0ZjliZmYwOWU4MGUxYzcxNWNkZGJhM2Q5
ZjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTk4NCw2ICsxOTg0LDcgQEAgcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAK
IAogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcAorcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwCiByZW5kZXJpbmcvdXBkYXRpbmcvUmVu
ZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlQnVpbGRlckZvcm1Db250cm9scy5jcHAKIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVl
QnVpbGRlckxpc3QuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggZGFjZjYzNjgzZWYwOTY1ZmUyMGVhYzQ4MDExZWEyZWY2ODc0
YmMwNC4uZDc4MmEyOTE2ODUyNGVjMzQxZTU3ZTJlNDU5OTdiZjQyMDkwMDcwMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzkz
LDYgKzM5Myw3IEBACiAJCTExOTM0MDc5MUZFOEI5MjMwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVp
bGRlclRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxMTkzNDA3NzFGRThCOTIzMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJUYWJsZS5oICov
OyB9OwogCQkxMTkzNDA4QTFGRUIzNTVEMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTkzNDA4
ODFGRUIzNTVEMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmggKi87IH07CiAJCTEx
OTM0MDk3MUZFRDcxNTUwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5MzQwOTUx
RkVENzE1NTAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyRm9ybUNvbnRyb2xzLmggKi87IH07
CisJCTExOTM0MEEzMUZFRTAyNDAwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckJsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTkzNDBBMTFG
RUUwMjQwMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oICovOyB9OwogCQkxMUUw
NjdFRTFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMUUwNjdFRDFFNjI0NkU1
MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMEQ3QTgxNzEzNkVBNzAwNzdDRTA1
IC8qIFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDBEN0E3MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRXcmFw
cGFibGVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQwM0I5OTcwOUVCMTNBRjAwNzk3QzdGIC8qIERPTVdpbmRvdy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwM0I5OTUwOUVCMTNBRjAw
Nzk3QzdGIC8qIERPTVdpbmRvdy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC01NTg4LDYgKzU1ODksOCBAQAogCQkxMTkzNDA4ODFGRUIzNTVEMDA5
MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRy
ZWVCdWlsZGVyUnVieS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMTkzNDA5NDFG
RUQ3MTU1MDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxMTkzNDA5NTFGRUQ3MTU1MDA5MzVGMUUgLyogUmVuZGVy
VHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxk
ZXJGb3JtQ29udHJvbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTE5MzQwQTAx
RkVFMDI0MDAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTExOTM0MEExMUZFRTAyNDAwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckJs
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyQmxvY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFFMDY3RUIxRTYyNDYxMzAwMTYyRDE2IC8qIFNpbXBsZUxp
bmVMYXlvdXRDb3ZlcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxMUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRDb3Zl
cmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwRDdBNzE3MTM2RUE3MDA3
N0NFMDUgLyogU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNDYyNiw2ICsyNDYyOSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlFNDdD
MzkyMDFGRTZFMEQ5MDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXIuY3BwICovLAogCQkJCUU0
N0MzOTJBMUZFNkUwREUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlci5oICovLAorCQkJCTEx
OTM0MEEwMUZFRTAyNDAwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckJsb2NrLmNwcCAqLywK
KwkJCQkxMTkzNDBBMTFGRUUwMjQwMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5o
ICovLAogCQkJCUU0N0MzOTIxMUZFNkUwREEwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckZp
cnN0TGV0dGVyLmNwcCAqLywKIAkJCQlFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVy
VHJlZUJ1aWxkZXJGaXJzdExldHRlci5oICovLAogCQkJCTExOTM0MDk0MUZFRDcxNTUwMDkzNUYx
RSAvKiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5jcHAgKi8sCkBAIC0yOTA1Myw2ICsy
OTA1OCw3IEBACiAJCQkJQkNFQTQ4ODcwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFj
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk4QzA4MjQ1RTU5MDAxRTlBQkMgLyogUmVuZGVy
VHJlZUFzVGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5MkQxRkU2RTBGMzAwQkJCQzZC
IC8qIFJlbmRlclRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxMTkzNDBBMzFGRUUw
MjQwMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTQ3QzM5MzAxRkU2RTBGRDAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyRmlyc3RMZXR0
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTExOTM0MDk3MUZFRDcxNTUwMDkzNUYxRSAvKiBSZW5k
ZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5MzIx
RkU2RTEwNTAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTGlzdC5oIGluIEhlYWRlcnMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAxZjdkMjlmM2Q0
YzBjOTQyZGMzYTc5MDM0MzU0ZmMwOGVmY2IyOWUwLi5mMmNhMGUxMzRjOTBiNjZlMmQwZTQyYWM3
ZDE3ODA2YjY1MjJhYmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKQEAgLTQ0Niw3MSArNDQ2LDYgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHkKICAgICBzZXRT
aG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4ob2xkU3R5bGUgJiYgZGlmZiA9PSBTdHlsZURpZmZl
cmVuY2VMYXlvdXQgJiYgbmVlZHNMYXlvdXQoKSAmJiBib3JkZXJPclBhZGRpbmdMb2dpY2FsV2lk
dGhDaGFuZ2VkKCpvbGRTdHlsZSwgc3R5bGUoKSkpOwogfQogCi1SZW5kZXJCbG9jayogUmVuZGVy
QmxvY2s6OmNvbnRpbnVhdGlvbkJlZm9yZShSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQotewot
ICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcykKLSAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0KLSAgICBSZW5kZXJCbG9jayogbmV4dFRvTGFzdCA9IHRoaXM7
Ci0gICAgUmVuZGVyQmxvY2sqIGxhc3QgPSB0aGlzOwotICAgIGZvciAoYXV0byogY3VycmVudCA9
IGRvd25jYXN0PFJlbmRlckJsb2NrPihjb250aW51YXRpb24oKSk7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY3VycmVudC0+Y29udGludWF0aW9uKCkpKSB7Ci0gICAg
ICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gY3VycmVudCkg
ewotICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSBiZWZvcmVDaGlsZCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdDsKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50
OwotICAgICAgICB9Ci0KLSAgICAgICAgbmV4dFRvTGFzdCA9IGxhc3Q7Ci0gICAgICAgIGxhc3Qg
PSBjdXJyZW50OwotICAgIH0KLQotICAgIGlmICghYmVmb3JlQ2hpbGQgJiYgIWxhc3QtPmZpcnN0
Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIG5leHRUb0xhc3Q7Ci0gICAgcmV0dXJuIGxhc3Q7Ci19
Ci0KLXZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkVG9Db250aW51YXRpb24oUmVuZGVyVHJlZUJ1
aWxkZXImIGJ1aWxkZXIsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKQotewotICAgIFJlbmRlckJsb2NrKiBmbG93ID0gY29udGludWF0
aW9uQmVmb3JlKGJlZm9yZUNoaWxkKTsKLSAgICBBU1NFUlQoIWJlZm9yZUNoaWxkIHx8IGlzPFJl
bmRlckJsb2NrPigqYmVmb3JlQ2hpbGQtPnBhcmVudCgpKSk7Ci0gICAgUmVuZGVyQm94TW9kZWxP
YmplY3QqIGJlZm9yZUNoaWxkUGFyZW50ID0gbnVsbHB0cjsKLSAgICBpZiAoYmVmb3JlQ2hpbGQp
Ci0gICAgICAgIGJlZm9yZUNoaWxkUGFyZW50ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmpl
Y3Q+KGJlZm9yZUNoaWxkLT5wYXJlbnQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24gPSBmbG93LT5jb250aW51YXRpb24oKTsKLSAgICAg
ICAgaWYgKGNvbnRpbnVhdGlvbikKLSAgICAgICAgICAgIGJlZm9yZUNoaWxkUGFyZW50ID0gY29u
dGludWF0aW9uOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiZWZvcmVDaGlsZFBhcmVudCA9
IGZsb3c7Ci0gICAgfQotCi0gICAgaWYgKG5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpIHsKLSAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdub3Jp
bmdDb250aW51YXRpb24oYnVpbGRlciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgY2hpbGRJc05vcm1hbCA9IG5ld0No
aWxkLT5pc0lubGluZSgpIHx8ICFuZXdDaGlsZC0+c3R5bGUoKS5jb2x1bW5TcGFuKCk7Ci0gICAg
Ym9vbCBiY3BJc05vcm1hbCA9IGJlZm9yZUNoaWxkUGFyZW50LT5pc0lubGluZSgpIHx8ICFiZWZv
cmVDaGlsZFBhcmVudC0+c3R5bGUoKS5jb2x1bW5TcGFuKCk7Ci0gICAgYm9vbCBmbG93SXNOb3Jt
YWwgPSBmbG93LT5pc0lubGluZSgpIHx8ICFmbG93LT5zdHlsZSgpLmNvbHVtblNwYW4oKTsKLQot
ICAgIGlmIChmbG93ID09IGJlZm9yZUNoaWxkUGFyZW50KSB7Ci0gICAgICAgIGZsb3ctPmFkZENo
aWxkSWdub3JpbmdDb250aW51YXRpb24oYnVpbGRlciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9y
ZUNoaWxkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBUaGUgZ29hbCBo
ZXJlIGlzIHRvIG1hdGNoIHVwIGlmIHdlIGNhbiwgc28gdGhhdCB3ZSBjYW4gY29hbGVzY2UgYW5k
IGNyZWF0ZSB0aGUKLSAgICAvLyBtaW5pbWFsICMgb2YgY29udGludWF0aW9ucyBuZWVkZWQgZm9y
IHRoZSBpbmxpbmUuCi0gICAgaWYgKGNoaWxkSXNOb3JtYWwgPT0gYmNwSXNOb3JtYWwpIHsKLSAg
ICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oYnVp
bGRlciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoZmxvd0lzTm9ybWFsID09IGNoaWxkSXNOb3JtYWwpIHsKLSAgICAgICAg
Zmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWlsZGVyLCBXVEZNb3ZlKG5ld0No
aWxkKSwgMCk7IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQuCi0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRp
b24oYnVpbGRlciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKLX0KLQogUmVuZGVy
UHRyPFJlbmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y2xvbmUoKSBjb25zdAogewogICAgIFJlbmRl
clB0cjxSZW5kZXJCbG9jaz4gY2xvbmVCbG9jazsKQEAgLTUzMywxMzggKzQ2OCwxMiBAQCBSZW5k
ZXJQdHI8UmVuZGVyQmxvY2s+IFJlbmRlckJsb2NrOjpjbG9uZSgpIGNvbnN0CiAKIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkZENoaWxkKFJlbmRlclRyZWVCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJQdHI8
UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKLSAg
ICBpZiAoY29udGludWF0aW9uKCkgJiYgIWlzQW5vbnltb3VzQmxvY2soKSkKLSAgICAgICAgYWRk
Q2hpbGRUb0NvbnRpbnVhdGlvbihidWlsZGVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hp
bGQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihidWls
ZGVyLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOworICAgIGJ1aWxkZXIuaW5zZXJ0
Q2hpbGRUb1JlbmRlckJsb2NrKCp0aGlzLCBXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQp
OwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJl
bmRlclRyZWVCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKLSAgICBpZiAoYmVmb3JlQ2hpbGQgJiYg
YmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMpIHsKLSAgICAgICAgUmVuZGVyRWxlbWVudCog
YmVmb3JlQ2hpbGRDb250YWluZXIgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7Ci0gICAgICAgIHdo
aWxlIChiZWZvcmVDaGlsZENvbnRhaW5lci0+cGFyZW50KCkgIT0gdGhpcykKLSAgICAgICAgICAg
IGJlZm9yZUNoaWxkQ29udGFpbmVyID0gYmVmb3JlQ2hpbGRDb250YWluZXItPnBhcmVudCgpOwot
ICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGRDb250YWluZXIpOwotCi0gICAgICAgIGlmIChiZWZv
cmVDaGlsZENvbnRhaW5lci0+aXNBbm9ueW1vdXMoKSkgewotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighYmVmb3JlQ2hpbGRDb250YWluZXItPmlz
SW5saW5lKCkpOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdGVkIGJlZm9yZUNoaWxk
IGlzIG5vdCBvbmUgb2Ygb3VyIGNoaWxkcmVuLCB0aGVuIHRoaXMgaXMgYmVjYXVzZQotICAgICAg
ICAgICAgLy8gdGhlcmUgaXMgYW4gYW5vbnltb3VzIGNvbnRhaW5lciB3aXRoaW4gdGhpcyBvYmpl
Y3QgdGhhdCBjb250YWlucyB0aGUgYmVmb3JlQ2hpbGQuCi0gICAgICAgICAgICBSZW5kZXJFbGVt
ZW50KiBiZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5lciA9IGJlZm9yZUNoaWxkQ29udGFpbmVy
OwotICAgICAgICAgICAgaWYgKGJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVyLT5pc0Fub255
bW91c0Jsb2NrKCkKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgICAgICAgICAgICAg
Ly8gRnVsbCBzY3JlZW4gcmVuZGVyZXJzIGFuZCBmdWxsIHNjcmVlbiBwbGFjZWhvbGRlcnMgYWN0
IGFzIGFub255bW91cyBibG9ja3MsIG5vdCB0YWJsZXM6Ci0gICAgICAgICAgICAgICAgfHwgYmVm
b3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXItPmlzUmVuZGVyRnVsbFNjcmVlbigpCi0gICAgICAg
ICAgICAgICAgfHwgYmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXItPmlzUmVuZGVyRnVsbFNj
cmVlblBsYWNlaG9sZGVyKCkKLSNlbmRpZgotICAgICAgICAgICAgICAgICkgewotICAgICAgICAg
ICAgICAgIC8vIEluc2VydCB0aGUgY2hpbGQgaW50byB0aGUgYW5vbnltb3VzIGJsb2NrIGJveCBp
bnN0ZWFkIG9mIGhlcmUuCi0gICAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkLT5pc0lubGluZSgp
IHx8IGJlZm9yZUNoaWxkLT5wYXJlbnQoKS0+Zmlyc3RDaGlsZCgpICE9IGJlZm9yZUNoaWxkKQot
ICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKCpiZWZvcmVDaGlsZC0+cGFy
ZW50KCksIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKCp0aGlzLCBXVEZN
b3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChiZWZvcmVDaGlsZEFu
b255bW91c0NvbnRhaW5lci0+aXNUYWJsZSgpKTsKLQotICAgICAgICAgICAgaWYgKG5ld0NoaWxk
LT5pc1RhYmxlUGFydCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGludG8gdGhlIGFu
b255bW91cyB0YWJsZS4KLSAgICAgICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKCpiZWZv
cmVDaGlsZEFub255bW91c0NvbnRhaW5lciwgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxk
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGJlZm9yZUNoaWxkID0gc3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKGJlZm9yZUNoaWxk
KTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBib29sIG1hZGVCb3hlc05vbklubGluZSA9IGZhbHNlOwotCi0gICAgLy8gQSBibG9jayBoYXMg
dG8gZWl0aGVyIGhhdmUgYWxsIG9mIGl0cyBjaGlsZHJlbiBpbmxpbmUsIG9yIGFsbCBvZiBpdHMg
Y2hpbGRyZW4gYXMgYmxvY2tzLgotICAgIC8vIFNvLCBpZiBvdXIgY2hpbGRyZW4gYXJlIGN1cnJl
bnRseSBpbmxpbmUgYW5kIGEgYmxvY2sgY2hpbGQgaGFzIHRvIGJlIGluc2VydGVkLCB3ZSBtb3Zl
IGFsbCBvdXIKLSAgICAvLyBpbmxpbmUgY2hpbGRyZW4gaW50byBhbm9ueW1vdXMgYmxvY2sgYm94
ZXMuCi0gICAgaWYgKGNoaWxkcmVuSW5saW5lKCkgJiYgIW5ld0NoaWxkLT5pc0lubGluZSgpICYm
ICFuZXdDaGlsZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAg
IC8vIFRoaXMgaXMgYSBibG9jayB3aXRoIGlubGluZSBjb250ZW50LiBXcmFwIHRoZSBpbmxpbmUg
Y29udGVudCBpbiBhbm9ueW1vdXMgYmxvY2tzLgotICAgICAgICBtYWtlQ2hpbGRyZW5Ob25Jbmxp
bmUoYmVmb3JlQ2hpbGQpOwotICAgICAgICBtYWRlQm94ZXNOb25JbmxpbmUgPSB0cnVlOwotCi0g
ICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykg
ewotICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzQmxvY2soKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmICghY2hpbGRyZW5JbmxpbmUoKSAmJiAobmV3Q2hpbGQtPmlzRmxvYXRpbmdP
ck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBuZXdDaGlsZC0+aXNJbmxpbmUoKSkpIHsKLSAgICAg
ICAgLy8gSWYgd2UncmUgaW5zZXJ0aW5nIGFuIGlubGluZSBjaGlsZCBidXQgYWxsIG9mIG91ciBj
aGlsZHJlbiBhcmUgYmxvY2tzLCB0aGVuIHdlIGhhdmUgdG8gbWFrZSBzdXJlCi0gICAgICAgIC8v
IGl0IGlzIHB1dCBpbnRvIGFuIGFub215b3VzIGJsb2NrIGJveC4gV2UgdHJ5IHRvIHVzZSBhbiBl
eGlzdGluZyBhbm9ueW1vdXMgYm94IGlmIHBvc3NpYmxlLCBvdGhlcndpc2UKLSAgICAgICAgLy8g
YSBuZXcgb25lIGlzIGNyZWF0ZWQgYW5kIGluc2VydGVkIGludG8gb3VyIGxpc3Qgb2YgY2hpbGRy
ZW4gaW4gdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9uLgotICAgICAgICBSZW5kZXJPYmplY3QqIGFm
dGVyQ2hpbGQgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6
IGxhc3RDaGlsZCgpOwotCi0gICAgICAgIGlmIChhZnRlckNoaWxkICYmIGFmdGVyQ2hpbGQtPmlz
QW5vbnltb3VzQmxvY2soKSkgewotICAgICAgICAgICAgYnVpbGRlci5pbnNlcnRDaGlsZChkb3du
Y2FzdDxSZW5kZXJCbG9jaz4oKmFmdGVyQ2hpbGQpLCBXVEZNb3ZlKG5ld0NoaWxkKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmV3Q2hpbGQtPmlzSW5s
aW5lKCkpIHsKLSAgICAgICAgICAgIC8vIE5vIHN1aXRhYmxlIGV4aXN0aW5nIGFub255bW91cyBi
b3ggLSBjcmVhdGUgYSBuZXcgb25lLgotICAgICAgICAgICAgYXV0byBuZXdCb3ggPSBjcmVhdGVB
bm9ueW1vdXNCbG9jaygpOwotICAgICAgICAgICAgYXV0byYgYm94ID0gKm5ld0JveDsKLSAgICAg
ICAgICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoYnVpbGRlciwgV1RGTW92ZShuZXdCb3gpLCBiZWZv
cmVDaGlsZCk7Ci0gICAgICAgICAgICBidWlsZGVyLmluc2VydENoaWxkKGJveCwgV1RGTW92ZShu
ZXdDaGlsZCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7Ci0KLSAgICBSZW5kZXJCb3g6OmFkZENoaWxkKGJ1
aWxkZXIsIFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7Ci0gCi0gICAgaWYgKG1hZGVC
b3hlc05vbklubGluZSAmJiBpczxSZW5kZXJCbG9jaz4ocGFyZW50KCkpICYmIGlzQW5vbnltb3Vz
QmxvY2soKSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpwYXJlbnQoKSkucmVtb3Zl
TGVmdG92ZXJBbm9ueW1vdXNCbG9jayh0aGlzKTsKLSAgICAvLyB0aGlzIG9iamVjdCBtYXkgYmUg
ZGVhZCBoZXJlCi19Ci0KLXN0YXRpYyB2b2lkIGdldElubGluZVJ1bihSZW5kZXJPYmplY3QqIHN0
YXJ0LCBSZW5kZXJPYmplY3QqIGJvdW5kYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdComIGlubGluZVJ1blN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdComIGlubGluZVJ1bkVuZCkKLXsKLSAgICAvLyBCZWdpbm5pbmcgYXQgfHN0YXJ0
fCB3ZSBmaW5kIHRoZSBsYXJnZXN0IGNvbnRpZ3VvdXMgcnVuIG9mIGlubGluZXMgdGhhdAotICAg
IC8vIHdlIGNhbi4gIFdlIGRlbm90ZSB0aGUgcnVuIHdpdGggc3RhcnQgYW5kIGVuZCBwb2ludHMs
IHxpbmxpbmVSdW5TdGFydHwKLSAgICAvLyBhbmQgfGlubGluZVJ1bkVuZHwuICBOb3RlIHRoYXQg
dGhlc2UgdHdvIHZhbHVlcyBtYXkgYmUgdGhlIHNhbWUgaWYKLSAgICAvLyB3ZSBlbmNvdW50ZXIg
b25seSBvbmUgaW5saW5lLgotICAgIC8vCi0gICAgLy8gV2Ugc2tpcCBhbnkgbm9uLWlubGluZXMg
d2UgZW5jb3VudGVyIGFzIGxvbmcgYXMgd2UgaGF2ZW4ndCBmb3VuZCBhbnkKLSAgICAvLyBpbmxp
bmVzIHlldC4KLSAgICAvLwotICAgIC8vIHxib3VuZGFyeXwgaW5kaWNhdGVzIGEgbm9uLWluY2x1
c2l2ZSBib3VuZGFyeSBwb2ludC4gIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB8Ym91bmRhcnl8Ci0g
ICAgLy8gaXMgaW5saW5lIG9yIG5vdCwgd2Ugd2lsbCBub3QgaW5jbHVkZSBpdCBpbiBhIHJ1biB3
aXRoIGlubGluZXMgYmVmb3JlIGl0LiAgSXQncyBhcyB0aG91Z2ggd2UgZW5jb3VudGVyZWQKLSAg
ICAvLyBhIG5vbi1pbmxpbmUuCi0gICAgCi0gICAgLy8gU3RhcnQgYnkgc2tpcHBpbmcgYXMgbWFu
eSBub24taW5saW5lcyBhcyB3ZSBjYW4uCi0gICAgUmVuZGVyT2JqZWN0ICogY3VyciA9IHN0YXJ0
OwotICAgIGJvb2wgc2F3SW5saW5lOwotICAgIGRvIHsKLSAgICAgICAgd2hpbGUgKGN1cnIgJiYg
IShjdXJyLT5pc0lubGluZSgpIHx8IGN1cnItPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkpCi0gICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlubGluZVJ1blN0YXJ0ID0gaW5saW5lUnVuRW5kID0gY3VycjsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghY3VycikKLSAgICAgICAgICAgIHJldHVybjsgLy8gTm8gbW9yZSBpbmxp
bmUgY2hpbGRyZW4gdG8gYmUgZm91bmQuCi0gICAgICAgIAotICAgICAgICBzYXdJbmxpbmUgPSBj
dXJyLT5pc0lubGluZSgpOwotICAgICAgICAKLSAgICAgICAgY3VyciA9IGN1cnItPm5leHRTaWJs
aW5nKCk7Ci0gICAgICAgIHdoaWxlIChjdXJyICYmIChjdXJyLT5pc0lubGluZSgpIHx8IGN1cnIt
PmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgJiYgKGN1cnIgIT0gYm91bmRhcnkp
KSB7Ci0gICAgICAgICAgICBpbmxpbmVSdW5FbmQgPSBjdXJyOwotICAgICAgICAgICAgaWYgKGN1
cnItPmlzSW5saW5lKCkpCi0gICAgICAgICAgICAgICAgc2F3SW5saW5lID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpOwotICAgICAgICB9Ci0gICAgfSB3aGls
ZSAoIXNhd0lubGluZSk7CisgICAgYnVpbGRlci5pbnNlcnRDaGlsZFRvUmVuZGVyQmxvY2tJZ25v
cmluZ0NvbnRpbnVhdGlvbigqdGhpcywgV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsK
IH0KIAogdm9pZCBSZW5kZXJCbG9jazo6ZGVsZXRlTGluZXMoKQpAQCAtNjczLDUwICs0ODIsNiBA
QCB2b2lkIFJlbmRlckJsb2NrOjpkZWxldGVMaW5lcygpCiAgICAgICAgIGNhY2hlLT5kZWZlclJl
Y29tcHV0ZUlzSWdub3JlZChlbGVtZW50KCkpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjptYWtl
Q2hpbGRyZW5Ob25JbmxpbmUoUmVuZGVyT2JqZWN0KiBpbnNlcnRpb25Qb2ludCkKLXsgICAgCi0g
ICAgLy8gbWFrZUNoaWxkcmVuTm9uSW5saW5lIHRha2VzIGEgYmxvY2sgd2hvc2UgY2hpbGRyZW4g
YXJlICphbGwqIGlubGluZSBhbmQgaXQKLSAgICAvLyBtYWtlcyBzdXJlIHRoYXQgaW5saW5lIGNo
aWxkcmVuIGFyZSBjb2FsZXNjZWQgdW5kZXIgYW5vbnltb3VzCi0gICAgLy8gYmxvY2tzLiAgSWYg
fGluc2VydGlvblBvaW50fCBpcyBkZWZpbmVkLCB0aGVuIGl0IHJlcHJlc2VudHMgdGhlIGluc2Vy
dGlvbiBwb2ludCBmb3IKLSAgICAvLyB0aGUgbmV3IGJsb2NrIGNoaWxkIHRoYXQgaXMgY2F1c2lu
ZyB1cyB0byBoYXZlIHRvIHdyYXAgYWxsIHRoZSBpbmxpbmVzLiAgVGhpcwotICAgIC8vIG1lYW5z
IHRoYXQgd2UgY2Fubm90IGNvYWxlc2NlIGlubGluZXMgYmVmb3JlIHxpbnNlcnRpb25Qb2ludHwg
d2l0aCBpbmxpbmVzIGZvbGxvd2luZwotICAgIC8vIHxpbnNlcnRpb25Qb2ludHwsIGJlY2F1c2Ug
dGhlIG5ldyBjaGlsZCBpcyBnb2luZyB0byBiZSBpbnNlcnRlZCBpbiBiZXR3ZWVuIHRoZSBpbmxp
bmVzLAotICAgIC8vIHNwbGl0dGluZyB0aGVtLgotICAgIEFTU0VSVChpc0lubGluZUJsb2NrT3JJ
bmxpbmVUYWJsZSgpIHx8ICFpc0lubGluZSgpKTsKLSAgICBBU1NFUlQoIWluc2VydGlvblBvaW50
IHx8IGluc2VydGlvblBvaW50LT5wYXJlbnQoKSA9PSB0aGlzKTsKLQotICAgIHNldENoaWxkcmVu
SW5saW5lKGZhbHNlKTsKLQotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7
Ci0gICAgaWYgKCFjaGlsZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGVsZXRlTGluZXMoKTsK
LQotICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIGlubGluZVJ1blN0
YXJ0OwotICAgICAgICBSZW5kZXJPYmplY3QqIGlubGluZVJ1bkVuZDsKLSAgICAgICAgZ2V0SW5s
aW5lUnVuKGNoaWxkLCBpbnNlcnRpb25Qb2ludCwgaW5saW5lUnVuU3RhcnQsIGlubGluZVJ1bkVu
ZCk7Ci0KLSAgICAgICAgaWYgKCFpbmxpbmVSdW5TdGFydCkKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNoaWxkID0gaW5saW5lUnVuRW5kLT5uZXh0U2libGluZygpOwotCi0gICAgICAg
IGF1dG8gbmV3QmxvY2sgPSBjcmVhdGVBbm9ueW1vdXNCbG9jaygpOwotICAgICAgICBhdXRvJiBi
bG9jayA9ICpuZXdCbG9jazsKLSAgICAgICAgaW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5l
d0Jsb2NrKSwgaW5saW5lUnVuU3RhcnQpOwotICAgICAgICBtb3ZlQ2hpbGRyZW5UbygmYmxvY2ss
IGlubGluZVJ1blN0YXJ0LCBjaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3Q6Ok5vcm1hbGl6ZUFm
dGVySW5zZXJ0aW9uOjpObyk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjID0gZmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4dFNpYmxpbmcoKSkKLSAg
ICAgICAgQVNTRVJUKCFjLT5pc0lubGluZSgpKTsKLSNlbmRpZgotCi0gICAgcmVwYWludCgpOwot
fQotCiB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKFJlbmRl
ckJsb2NrKiBjaGlsZCkKIHsKICAgICBBU1NFUlQoY2hpbGQtPmlzQW5vbnltb3VzQmxvY2soKSk7
CkBAIC0zMjEyLDcgKzI5NzcsNyBAQCBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyQmxvY2s6Om91
dGxpbmVTdHlsZUZvclJlcGFpbnQoKSBjb25zdAogCiB2b2lkIFJlbmRlckJsb2NrOjpjaGlsZEJl
Y2FtZU5vbklubGluZShSZW5kZXJFbGVtZW50JikKIHsKLSAgICBtYWtlQ2hpbGRyZW5Ob25Jbmxp
bmUoKTsKKyAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5tYWtlQ2hpbGRyZW5Ob25J
bmxpbmUoKnRoaXMpOwogICAgIGlmIChpc0Fub255bW91c0Jsb2NrKCkgJiYgaXM8UmVuZGVyQmxv
Y2s+KHBhcmVudCgpKSkKICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpwYXJlbnQoKSku
cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayh0aGlzKTsKICAgICAvLyB8dGhpc3wgbWF5IGJl
IGRlYWQgaGVyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCBiYTVi
YWMzODAyNjJhODE4YTI2ZWZkNDM3MDYwMWE4ZWU0N2RjNzAwLi5lNjhmNWZjOGMxNDkwOGM5MWZk
MDZlYzNmZWY1YTQ0NGYzZDBmZWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaApAQCAtMzk1LDcgKzM5NSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGp1c3RC
b3JkZXJCb3hSZWN0Rm9yUGFpbnRpbmcoTGF5b3V0UmVjdCYpIG92ZXJyaWRlOwogICAgIExheW91
dFJlY3QgcGFpbnRSZWN0VG9DbGlwT3V0RnJvbUJvcmRlcihjb25zdCBMYXlvdXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgCisgICAgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRl
clRyZWVCdWlsZGVyJiwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVMZWZ0
b3ZlckFub255bW91c0Jsb2NrKFJlbmRlckJsb2NrKiBjaGlsZCk7CisgICAgYm9vbCBpc0lubGlu
ZUJsb2NrT3JJbmxpbmVUYWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlzSW5saW5lKCkgJiYg
aXNSZXBsYWNlZCgpOyB9CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYWRkT3ZlcmZs
b3dGcm9tQ2hpbGRyZW4oKTsKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFs
aXphdGlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93CkBA
IC00MzIsMTcgKzQzNSw5IEBAIHByaXZhdGU6CiAKICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1l
KCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNJbmxpbmUoKSAmJiBpc1JlcGxhY2VkKCk7IH0KLQot
ICAgIHZvaWQgbWFrZUNoaWxkcmVuTm9uSW5saW5lKFJlbmRlck9iamVjdCogaW5zZXJ0aW9uUG9p
bnQgPSBudWxscHRyKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNC
bG9jayhSZW5kZXJCbG9jayogY2hpbGQpOwotCiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1v
dmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxv
Y2tGbG93CiAgICAgdmlydHVhbCB2b2lkIG1vdmVBbGxDaGlsZHJlbkluY2x1ZGluZ0Zsb2F0c1Rv
KFJlbmRlckJsb2NrJiB0b0Jsb2NrLCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Tm9ybWFsaXplQWZ0
ZXJJbnNlcnRpb24gbm9ybWFsaXplQWZ0ZXJJbnNlcnRpb24pIHsgbW92ZUFsbENoaWxkcmVuVG8o
JnRvQmxvY2ssIG5vcm1hbGl6ZUFmdGVySW5zZXJ0aW9uKTsgfQogCi0gICAgdm9pZCBhZGRDaGls
ZFRvQ29udGludWF0aW9uKFJlbmRlclRyZWVCdWlsZGVyJiwgUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwotICAgIHZvaWQgYWRkQ2hp
bGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJUcmVlQnVpbGRlciYsIFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKSBvdmVycmlkZTsK
LQogICAgIGJvb2wgaXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBib29sIGNoaWxkcmVuUHJldmVudFNlbGZDb2xsYXBzaW5nKCkgY29uc3Q7CiAgICAg
CkBAIC01MDIsNyArNDk3LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dFBvaW50Jiwg
Y29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKTsKIAogICAgIFJlbmRlclB0cjxSZW5kZXJC
bG9jaz4gY2xvbmUoKSBjb25zdDsKLSAgICBSZW5kZXJCbG9jayogY29udGludWF0aW9uQmVmb3Jl
KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogCiAgICAgUmVuZGVyRnJhZ21lbnRlZEZsb3cq
IHVwZGF0ZUNhY2hlZEVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93KFJlbmRlckZyYWdtZW50ZWRGbG93
KikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggOTZi
MDczZWQ2MTJhNTMzZTg2ZDlmZmNiOGRlM2ZkOTcxODA4MWQ3ZC4uZDEwNjNhNjg5YTFlNTAyYmE0
ZmM0ZDEyMWFkYzFlOTI2NDgyNTZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKQEAgLTQ5MDQsNTcgKzQ5MDQsNiBAQCBib29sIFJlbmRlckJveDo6aGFzUmVsYXRpdmVM
b2dpY2FsV2lkdGgoKSBjb25zdAogICAgICAgICB8fCBzdHlsZSgpLmxvZ2ljYWxNYXhXaWR0aCgp
LmlzUGVyY2VudE9yQ2FsY3VsYXRlZCgpOwogfQogCi1zdGF0aWMgdm9pZCBtYXJrQm94Rm9yUmVs
YXlvdXRBZnRlclNwbGl0KFJlbmRlckJveCYgYm94KQotewotICAgIC8vIEZJWE1FOiBUaGUgdGFi
bGUgY29kZSBzaG91bGQgaGFuZGxlIHRoYXQgYXV0b21hdGljYWxseS4gSWYgbm90LAotICAgIC8v
IHdlIHNob3VsZCBmaXggaXQgYW5kIHJlbW92ZSB0aGUgdGFibGUgcGFydCBjaGVja3MuCi0gICAg
aWYgKGlzPFJlbmRlclRhYmxlPihib3gpKSB7Ci0gICAgICAgIC8vIEJlY2F1c2Ugd2UgbWF5IGhh
dmUgYWRkZWQgc29tZSBzZWN0aW9ucyB3aXRoIGFscmVhZHkgY29tcHV0ZWQgY29sdW1uIHN0cnVj
dHVyZXMsIHdlIG5lZWQgdG8KLSAgICAgICAgLy8gc3luYyB0aGUgdGFibGUgc3RydWN0dXJlIHdp
dGggdGhlbSBub3cuIFRoaXMgYXZvaWRzIGNyYXNoZXMgd2hlbiBhZGRpbmcgbmV3IGNlbGxzIHRv
IHRoZSB0YWJsZS4KLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGU+KGJveCkuZm9yY2VTZWN0
aW9uc1JlY2FsYygpOwotICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyVGFibGVTZWN0aW9uPihib3gp
KQotICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGJveCkuc2V0TmVlZHNDZWxs
UmVjYWxjKCk7Ci0KLSAgICBib3guc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7
Ci19Ci0KLVJlbmRlck9iamVjdCogUmVuZGVyQm94OjpzcGxpdEFub255bW91c0JveGVzQXJvdW5k
Q2hpbGQoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKLXsKLSAgICBib29sIGRpZFNwbGl0UGFy
ZW50QW5vbnltb3VzQm94ZXMgPSBmYWxzZTsKLQotICAgIHdoaWxlIChiZWZvcmVDaGlsZC0+cGFy
ZW50KCkgIT0gdGhpcykgewotICAgICAgICBhdXRvJiBib3hUb1NwbGl0ID0gZG93bmNhc3Q8UmVu
ZGVyQm94PigqYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsKLSAgICAgICAgaWYgKGJveFRvU3BsaXQu
Zmlyc3RDaGlsZCgpICE9IGJlZm9yZUNoaWxkICYmIGJveFRvU3BsaXQuaXNBbm9ueW1vdXMoKSkg
ewotICAgICAgICAgICAgZGlkU3BsaXRQYXJlbnRBbm9ueW1vdXNCb3hlcyA9IHRydWU7Ci0KLSAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8gc3BsaXQgdGhlIHBhcmVudCBib3ggaW50byB0d28gYm94
ZXMgYW5kIG1vdmUgY2hpbGRyZW4KLSAgICAgICAgICAgIC8vIGZyb20gfGJlZm9yZUNoaWxkfCB0
byBlbmQgaW50byB0aGUgbmV3IHBvc3QgYm94LgotICAgICAgICAgICAgYXV0byBuZXdQb3N0Qm94
ID0gYm94VG9TcGxpdC5jcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcygqdGhpcyk7Ci0g
ICAgICAgICAgICBhdXRvJiBwb3N0Qm94ID0gKm5ld1Bvc3RCb3g7Ci0gICAgICAgICAgICBwb3N0
Qm94LnNldENoaWxkcmVuSW5saW5lKGJveFRvU3BsaXQuY2hpbGRyZW5JbmxpbmUoKSk7Ci0gICAg
ICAgICAgICBSZW5kZXJCb3gqIHBhcmVudEJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oYm94VG9T
cGxpdC5wYXJlbnQoKSk7Ci0gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGludmFsaWRhdGUgdGhl
IHxwYXJlbnRCb3h8IGJlZm9yZSBpbnNlcnRpbmcgdGhlIG5ldyBub2RlCi0gICAgICAgICAgICAv
LyBzbyB0aGF0IHRoZSB0YWJsZSByZXBhaW50aW5nIGxvZ2ljIGtub3dzIHRoZSBzdHJ1Y3R1cmUg
aXMgZGlydHkuCi0gICAgICAgICAgICAvLyBTZWUgZm9yIGV4YW1wbGUgUmVuZGVyVGFibGVDZWxs
OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50LgotICAgICAgICAgICAgbWFya0JveEZvclJl
bGF5b3V0QWZ0ZXJTcGxpdCgqcGFyZW50Qm94KTsKLSAgICAgICAgICAgIHBhcmVudEJveC0+aW5z
ZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5ld1Bvc3RCb3gpLCBib3hUb1NwbGl0Lm5leHRTaWJs
aW5nKCkpOwotICAgICAgICAgICAgYm94VG9TcGxpdC5tb3ZlQ2hpbGRyZW5UbygmcG9zdEJveCwg
YmVmb3JlQ2hpbGQsIG51bGxwdHIsIFJlbmRlckJveE1vZGVsT2JqZWN0OjpOb3JtYWxpemVBZnRl
ckluc2VydGlvbjo6WWVzKTsKLQotICAgICAgICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJT
cGxpdChib3hUb1NwbGl0KTsKLSAgICAgICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFmdGVyU3Bs
aXQocG9zdEJveCk7Ci0KLSAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gJnBvc3RCb3g7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSAmYm94VG9TcGxpdDsKLSAgICB9
Ci0KLSAgICBpZiAoZGlkU3BsaXRQYXJlbnRBbm9ueW1vdXNCb3hlcykKLSAgICAgICAgbWFya0Jv
eEZvclJlbGF5b3V0QWZ0ZXJTcGxpdCgqdGhpcyk7Ci0KLSAgICBBU1NFUlQoYmVmb3JlQ2hpbGQt
PnBhcmVudCgpID09IHRoaXMpOwotICAgIHJldHVybiBiZWZvcmVDaGlsZDsKLX0KLQogTGF5b3V0
VW5pdCBSZW5kZXJCb3g6Om9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBjb25zdAog
ewogICAgIGF1dG8qIGxheW91dFN0YXRlID0gdmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRl
eHQoKS5sYXlvdXRTdGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4
IDRhY2QyZTQ4YmExZWJlMTBiOTM4MzJjYjUxNTczNDdhN2E3ZWRhOTcuLmFkNDQ5MWJkN2NhZGE0
MzA2YTVlNDExMjQxOTRjMmJiYjI2MjE0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgKQEAgLTY2NSw4ICs2NjUsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIHBhaW50Um9v
dEJveEZpbGxMYXllcnMoY29uc3QgUGFpbnRJbmZvJik7CiAKLSAgICBSZW5kZXJPYmplY3QqIHNw
bGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsK
LQogICAgIGJvb2wgc2tpcENvbnRhaW5pbmdCbG9ja0ZvclBlcmNlbnRIZWlnaHRDYWxjdWxhdGlv
bihjb25zdCBSZW5kZXJCb3gmIGNvbnRhaW5pbmdCbG9jaywgYm9vbCBpc1BlcnBlbmRpY3VsYXJX
cml0aW5nTW9kZSkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJ1YnlCYXNlLmNwcAppbmRleCAzOTkzZmQxYzE2NjEyYmEwYmI3YzE4OGJiNDdkY2M5
MTE2ZTA4YjYxLi4yMWJkOWNhODNkMjgwNTU2MWFhYzM1YmZlNmQ2NDQ4NjFiOWJkYWJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAKQEAgLTYxLDcgKzYx
LDcgQEAgdm9pZCBSZW5kZXJSdWJ5QmFzZTo6bW92ZUNoaWxkcmVuKFJlbmRlclJ1YnlCYXNlKiB0
b0Jhc2UsIFJlbmRlck9iamVjdCogYmVmb3JlQ2gKICAgICBBU1NFUlRfQVJHKHRvQmFzZSwgdG9C
YXNlKTsKIAogICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0g
dGhpcykKLSAgICAgICAgYmVmb3JlQ2hpbGQgPSBzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hp
bGQoYmVmb3JlQ2hpbGQpOworICAgICAgICBiZWZvcmVDaGlsZCA9IFJlbmRlclRyZWVCdWlsZGVy
OjpjdXJyZW50KCktPnNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZCgqdGhpcywgYmVmb3Jl
Q2hpbGQpOwogCiAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCiAgICAgICAgIG1vdmVJbmxpbmVD
aGlsZHJlbih0b0Jhc2UsIGJlZm9yZUNoaWxkKTsKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIFJl
bmRlclJ1YnlCYXNlOjptb3ZlQmxvY2tDaGlsZHJlbihSZW5kZXJSdWJ5QmFzZSogdG9CYXNlLCBS
ZW5kZXJPYmplY3QqIGJlZgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAodG9CYXNlLT5jaGls
ZHJlbklubGluZSgpKQotICAgICAgICB0b0Jhc2UtPm1ha2VDaGlsZHJlbk5vbklubGluZSgpOwor
ICAgICAgICBSZW5kZXJUcmVlQnVpbGRlcjo6Y3VycmVudCgpLT5tYWtlQ2hpbGRyZW5Ob25Jbmxp
bmUoKnRvQmFzZSk7CiAKICAgICAvLyBJZiBhbiBhbm9ueW1vdXMgYmxvY2sgd291bGQgYmUgcHV0
IG5leHQgdG8gYW5vdGhlciBzdWNoIGJsb2NrLCB0aGVuIG1lcmdlIHRob3NlLgogICAgIFJlbmRl
ck9iamVjdCogZmlyc3RDaGlsZEhlcmUgPSBmaXJzdENoaWxkKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRleCBlZWM2NmFhMDJiYzM3Njc3YTg2ZWM2ZjRkM2U1
NTA4MjNjZjMwMmYzLi5jOGFkN2I3YzFiNzAzY2U2ZTU2MTdmYjJhYzg2N2JhODRjNmQ5ZTJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTE3MCw3ICsxNzAs
NyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJUcmVlQnVpbGRlciYgYnVpbGRl
ciwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gYwogICAgICAgICBzZXROZWVkc1NlY3Rpb25SZWNh
bGMoKTsKIAogICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0g
dGhpcykKLSAgICAgICAgYmVmb3JlQ2hpbGQgPSBzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hp
bGQoYmVmb3JlQ2hpbGQpOworICAgICAgICBiZWZvcmVDaGlsZCA9IGJ1aWxkZXIuc3BsaXRBbm9u
eW1vdXNCb3hlc0Fyb3VuZENoaWxkKCp0aGlzLCBiZWZvcmVDaGlsZCk7CiAKICAgICBSZW5kZXJC
b3g6OmFkZENoaWxkKGJ1aWxkZXIsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAppbmRleCA2Y2IyNTI1
NTkzMjEzZTkzZmYxMGQyOTlkMzM1NDg2OTJjNDJkYThkLi4yOGU5OTUwMjIyNGYxYWU0YjU0OTg5
MjUwN2FlOGMyZmYwMDdlNDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVSb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVJvdy5jcHAKQEAgLTExNCw3ICsxMTQsNyBAQCBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVy
VGFibGVSb3c6OmJvcmRlckFkam9pbmluZ0VuZENlbGwoY29uc3QgUmVuZGVyVGFibGVDZWxsJgog
dm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVyVHJlZUJ1aWxkZXImIGJ1aWxkZXIs
IFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KQogewogICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhp
cykKLSAgICAgICAgYmVmb3JlQ2hpbGQgPSBzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQo
YmVmb3JlQ2hpbGQpOyAgICAKKyAgICAgICAgYmVmb3JlQ2hpbGQgPSBidWlsZGVyLnNwbGl0QW5v
bnltb3VzQm94ZXNBcm91bmRDaGlsZCgqdGhpcywgYmVmb3JlQ2hpbGQpOyAgICAKIAogICAgIC8v
IEdlbmVyYXRlZCBjb250ZW50IGNhbiByZXN1bHQgaW4gdXMgaGF2aW5nIGEgbnVsbCBzZWN0aW9u
IHNvIG1ha2Ugc3VyZSB0byBudWxsIGNoZWNrIG91ciBwYXJlbnQuCiAgICAgaWYgKGF1dG8qIHNl
Y3Rpb24gPSB0aGlzLT5zZWN0aW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IGZlMmI5MDRkYmVlMzUxMzBiMjNkZmRjYTcyM2Q3
NmVlODcwOGI2YTUuLjBjOGVkNDY5MmRjNjFkZTUxZmM5MGRiOGRkNGJmMTRjNDI4NjkwNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBA
IC0xNDAsNyArMTQwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRl
clRyZWVCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJQdHI8UmVuZGVyT2IKICAgICAgICAgc2V0Um93
TG9naWNhbEhlaWdodFRvUm93U3R5bGVMb2dpY2FsSGVpZ2h0SWZOb3RSZWxhdGl2ZShtX2dyaWRb
aW5zZXJ0aW9uUm93XSk7CiAKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBh
cmVudCgpICE9IHRoaXMpCi0gICAgICAgIGJlZm9yZUNoaWxkID0gc3BsaXRBbm9ueW1vdXNCb3hl
c0Fyb3VuZENoaWxkKGJlZm9yZUNoaWxkKTsKKyAgICAgICAgYmVmb3JlQ2hpbGQgPSBidWlsZGVy
LnNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZCgqdGhpcywgYmVmb3JlQ2hpbGQpOwogCiAg
ICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCBpczxSZW5kZXJUYWJsZVJvdz4oKmJlZm9yZUNoaWxk
KSk7CiAgICAgUmVuZGVyQm94OjphZGRDaGlsZChidWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSwgYmVm
b3JlQ2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlQnVpbGRlci5jcHAKaW5kZXggMzE5MmQ0YTcyOWQxNWE1MzBhNGUyMmZiNDFk
ZDgzMzlhNjViMzU2OS4uNTkxOTEzNzE3MzU3OTA3YjM1M2I2MTNiNDQ2NmJhNzE2ZjdhMzIxMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVC
dWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVy
VHJlZUJ1aWxkZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyUnVieVJ1
bi5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgorI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJU
cmVlQnVpbGRlckZpcnN0TGV0dGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJGb3Jt
Q29udHJvbHMuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCIKQEAgLTQ0LDYg
KzQ1LDU5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyVHJlZUJ1aWxkZXIqIFJlbmRl
clRyZWVCdWlsZGVyOjpzX2N1cnJlbnQ7CiAKK3N0YXRpYyB2b2lkIG1hcmtCb3hGb3JSZWxheW91
dEFmdGVyU3BsaXQoUmVuZGVyQm94JiBib3gpCit7CisgICAgLy8gRklYTUU6IFRoZSB0YWJsZSBj
b2RlIHNob3VsZCBoYW5kbGUgdGhhdCBhdXRvbWF0aWNhbGx5LiBJZiBub3QsCisgICAgLy8gd2Ug
c2hvdWxkIGZpeCBpdCBhbmQgcmVtb3ZlIHRoZSB0YWJsZSBwYXJ0IGNoZWNrcy4KKyAgICBpZiAo
aXM8UmVuZGVyVGFibGU+KGJveCkpIHsKKyAgICAgICAgLy8gQmVjYXVzZSB3ZSBtYXkgaGF2ZSBh
ZGRlZCBzb21lIHNlY3Rpb25zIHdpdGggYWxyZWFkeSBjb21wdXRlZCBjb2x1bW4gc3RydWN0dXJl
cywgd2UgbmVlZCB0bworICAgICAgICAvLyBzeW5jIHRoZSB0YWJsZSBzdHJ1Y3R1cmUgd2l0aCB0
aGVtIG5vdy4gVGhpcyBhdm9pZHMgY3Jhc2hlcyB3aGVuIGFkZGluZyBuZXcgY2VsbHMgdG8gdGhl
IHRhYmxlLgorICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZT4oYm94KS5mb3JjZVNlY3Rpb25z
UmVjYWxjKCk7CisgICAgfSBlbHNlIGlmIChpczxSZW5kZXJUYWJsZVNlY3Rpb24+KGJveCkpCisg
ICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oYm94KS5zZXROZWVkc0NlbGxSZWNh
bGMoKTsKKworICAgIGJveC5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKK30K
Kworc3RhdGljIHZvaWQgZ2V0SW5saW5lUnVuKFJlbmRlck9iamVjdCogc3RhcnQsIFJlbmRlck9i
amVjdCogYm91bmRhcnksIFJlbmRlck9iamVjdComIGlubGluZVJ1blN0YXJ0LCBSZW5kZXJPYmpl
Y3QqJiBpbmxpbmVSdW5FbmQpCit7CisgICAgLy8gQmVnaW5uaW5nIGF0IHxzdGFydHwgd2UgZmlu
ZCB0aGUgbGFyZ2VzdCBjb250aWd1b3VzIHJ1biBvZiBpbmxpbmVzIHRoYXQKKyAgICAvLyB3ZSBj
YW4uIFdlIGRlbm90ZSB0aGUgcnVuIHdpdGggc3RhcnQgYW5kIGVuZCBwb2ludHMsIHxpbmxpbmVS
dW5TdGFydHwKKyAgICAvLyBhbmQgfGlubGluZVJ1bkVuZHwuIE5vdGUgdGhhdCB0aGVzZSB0d28g
dmFsdWVzIG1heSBiZSB0aGUgc2FtZSBpZgorICAgIC8vIHdlIGVuY291bnRlciBvbmx5IG9uZSBp
bmxpbmUuCisgICAgLy8KKyAgICAvLyBXZSBza2lwIGFueSBub24taW5saW5lcyB3ZSBlbmNvdW50
ZXIgYXMgbG9uZyBhcyB3ZSBoYXZlbid0IGZvdW5kIGFueQorICAgIC8vIGlubGluZXMgeWV0Lgor
ICAgIC8vCisgICAgLy8gfGJvdW5kYXJ5fCBpbmRpY2F0ZXMgYSBub24taW5jbHVzaXZlIGJvdW5k
YXJ5IHBvaW50LiBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgfGJvdW5kYXJ5fAorICAgIC8vIGlzIGlu
bGluZSBvciBub3QsIHdlIHdpbGwgbm90IGluY2x1ZGUgaXQgaW4gYSBydW4gd2l0aCBpbmxpbmVz
IGJlZm9yZSBpdC4gSXQncyBhcyB0aG91Z2ggd2UgZW5jb3VudGVyZWQKKyAgICAvLyBhIG5vbi1p
bmxpbmUuCisKKyAgICAvLyBTdGFydCBieSBza2lwcGluZyBhcyBtYW55IG5vbi1pbmxpbmVzIGFz
IHdlIGNhbi4KKyAgICBhdXRvKiBjdXJyID0gc3RhcnQ7CisgICAgYm9vbCBzYXdJbmxpbmU7Cisg
ICAgZG8geworICAgICAgICB3aGlsZSAoY3VyciAmJiAhKGN1cnItPmlzSW5saW5lKCkgfHwgY3Vy
ci0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSkKKyAgICAgICAgICAgIGN1cnIg
PSBjdXJyLT5uZXh0U2libGluZygpOworCisgICAgICAgIGlubGluZVJ1blN0YXJ0ID0gaW5saW5l
UnVuRW5kID0gY3VycjsKKworICAgICAgICBpZiAoIWN1cnIpCisgICAgICAgICAgICByZXR1cm47
IC8vIE5vIG1vcmUgaW5saW5lIGNoaWxkcmVuIHRvIGJlIGZvdW5kLgorCisgICAgICAgIHNhd0lu
bGluZSA9IGN1cnItPmlzSW5saW5lKCk7CisKKyAgICAgICAgY3VyciA9IGN1cnItPm5leHRTaWJs
aW5nKCk7CisgICAgICAgIHdoaWxlIChjdXJyICYmIChjdXJyLT5pc0lubGluZSgpIHx8IGN1cnIt
PmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgJiYgKGN1cnIgIT0gYm91bmRhcnkp
KSB7CisgICAgICAgICAgICBpbmxpbmVSdW5FbmQgPSBjdXJyOworICAgICAgICAgICAgaWYgKGN1
cnItPmlzSW5saW5lKCkpCisgICAgICAgICAgICAgICAgc2F3SW5saW5lID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpOworICAgICAgICB9CisgICAgfSB3aGls
ZSAoIXNhd0lubGluZSk7Cit9CisKKwogUmVuZGVyVHJlZUJ1aWxkZXI6OlJlbmRlclRyZWVCdWls
ZGVyKFJlbmRlclZpZXcmIHZpZXcpCiAgICAgOiBtX3ZpZXcodmlldykKICAgICAsIG1fZmlyc3RM
ZXR0ZXJCdWlsZGVyKHN0ZDo6bWFrZV91bmlxdWU8Rmlyc3RMZXR0ZXI+KCp0aGlzKSkKQEAgLTUy
LDYgKzEwNiw3IEBAIFJlbmRlclRyZWVCdWlsZGVyOjpSZW5kZXJUcmVlQnVpbGRlcihSZW5kZXJW
aWV3JiB2aWV3KQogICAgICwgbV90YWJsZUJ1aWxkZXIoc3RkOjptYWtlX3VuaXF1ZTxUYWJsZT4o
KnRoaXMpKQogICAgICwgbV9ydWJ5QnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPFJ1Ynk+KCp0aGlz
KSkKICAgICAsIG1fZm9ybUNvbnRyb2xzQnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPEZvcm1Db250
cm9scz4oKnRoaXMpKQorICAgICwgbV9ibG9ja0J1aWxkZXIoc3RkOjptYWtlX3VuaXF1ZTxCbG9j
az4oKnRoaXMpKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFzX2N1cnJlbnQgfHwgJm1fdmlldyAh
PSAmc19jdXJyZW50LT5tX3ZpZXcpOwogICAgIG1fcHJldmlvdXMgPSBzX2N1cnJlbnQ7CkBAIC0x
MjgsNiArMTgzLDk1IEBAIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6Omluc2VydENoaWxkKFJlbmRl
clRyZWVQb3NpdGlvbiYgcG9zaXRpb24sIFJlbmRlclB0cjxSZW5kCiAgICAgaW5zZXJ0Q2hpbGQo
cG9zaXRpb24ucGFyZW50KCksIFdURk1vdmUoY2hpbGQpLCBwb3NpdGlvbi5uZXh0U2libGluZygp
KTsKIH0KIAordm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGRUb1JlbmRlckJsb2Nr
KFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAgIGJsb2NrQnVpbGRlcigpLmluc2VydENoaWxk
KHBhcmVudCwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKK30KKwordm9pZCBSZW5kZXJU
cmVlQnVpbGRlcjo6aW5zZXJ0Q2hpbGRUb1JlbmRlckJsb2NrSWdub3JpbmdDb250aW51YXRpb24o
UmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQpCit7CisgICAgYmxvY2tCdWlsZGVyKCkuaW5zZXJ0Q2hpbGRJ
Z25vcmluZ0NvbnRpbnVhdGlvbihwYXJlbnQsIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7
Cit9CisKK3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6Om1ha2VDaGlsZHJlbk5vbklubGluZShSZW5k
ZXJCbG9jayYgcGFyZW50LCBSZW5kZXJPYmplY3QqIGluc2VydGlvblBvaW50KQoreworICAgIC8v
IG1ha2VDaGlsZHJlbk5vbklubGluZSB0YWtlcyBhIGJsb2NrIHdob3NlIGNoaWxkcmVuIGFyZSAq
YWxsKiBpbmxpbmUgYW5kIGl0CisgICAgLy8gbWFrZXMgc3VyZSB0aGF0IGlubGluZSBjaGlsZHJl
biBhcmUgY29hbGVzY2VkIHVuZGVyIGFub255bW91cworICAgIC8vIGJsb2Nrcy4gSWYgfGluc2Vy
dGlvblBvaW50fCBpcyBkZWZpbmVkLCB0aGVuIGl0IHJlcHJlc2VudHMgdGhlIGluc2VydGlvbiBw
b2ludCBmb3IKKyAgICAvLyB0aGUgbmV3IGJsb2NrIGNoaWxkIHRoYXQgaXMgY2F1c2luZyB1cyB0
byBoYXZlIHRvIHdyYXAgYWxsIHRoZSBpbmxpbmVzLiBUaGlzCisgICAgLy8gbWVhbnMgdGhhdCB3
ZSBjYW5ub3QgY29hbGVzY2UgaW5saW5lcyBiZWZvcmUgfGluc2VydGlvblBvaW50fCB3aXRoIGlu
bGluZXMgZm9sbG93aW5nCisgICAgLy8gfGluc2VydGlvblBvaW50fCwgYmVjYXVzZSB0aGUgbmV3
IGNoaWxkIGlzIGdvaW5nIHRvIGJlIGluc2VydGVkIGluIGJldHdlZW4gdGhlIGlubGluZXMsCisg
ICAgLy8gc3BsaXR0aW5nIHRoZW0uCisgICAgQVNTRVJUKHBhcmVudC5pc0lubGluZUJsb2NrT3JJ
bmxpbmVUYWJsZSgpIHx8ICFwYXJlbnQuaXNJbmxpbmUoKSk7CisgICAgQVNTRVJUKCFpbnNlcnRp
b25Qb2ludCB8fCBpbnNlcnRpb25Qb2ludC0+cGFyZW50KCkgPT0gJnBhcmVudCk7CisKKyAgICBw
YXJlbnQuc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOworCisgICAgYXV0byogY2hpbGQgPSBwYXJl
bnQuZmlyc3RDaGlsZCgpOworICAgIGlmICghY2hpbGQpCisgICAgICAgIHJldHVybjsKKworICAg
IHBhcmVudC5kZWxldGVMaW5lcygpOworCisgICAgd2hpbGUgKGNoaWxkKSB7CisgICAgICAgIFJl
bmRlck9iamVjdCogaW5saW5lUnVuU3RhcnQgPSBudWxscHRyOworICAgICAgICBSZW5kZXJPYmpl
Y3QqIGlubGluZVJ1bkVuZCA9IG51bGxwdHI7CisgICAgICAgIGdldElubGluZVJ1bihjaGlsZCwg
aW5zZXJ0aW9uUG9pbnQsIGlubGluZVJ1blN0YXJ0LCBpbmxpbmVSdW5FbmQpOworCisgICAgICAg
IGlmICghaW5saW5lUnVuU3RhcnQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjaGls
ZCA9IGlubGluZVJ1bkVuZC0+bmV4dFNpYmxpbmcoKTsKKworICAgICAgICBhdXRvIG5ld0Jsb2Nr
ID0gcGFyZW50LmNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgIGF1dG8mIGJsb2NrID0g
Km5ld0Jsb2NrOworICAgICAgICBwYXJlbnQuaW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5l
d0Jsb2NrKSwgaW5saW5lUnVuU3RhcnQpOworICAgICAgICBwYXJlbnQubW92ZUNoaWxkcmVuVG8o
JmJsb2NrLCBpbmxpbmVSdW5TdGFydCwgY2hpbGQsIFJlbmRlckJveE1vZGVsT2JqZWN0OjpOb3Jt
YWxpemVBZnRlckluc2VydGlvbjo6Tm8pOworICAgIH0KKyNpZm5kZWYgTkRFQlVHCisgICAgZm9y
IChSZW5kZXJPYmplY3QqIGMgPSBwYXJlbnQuZmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4dFNp
YmxpbmcoKSkKKyAgICAgICAgQVNTRVJUKCFjLT5pc0lubGluZSgpKTsKKyNlbmRpZgorICAgIHBh
cmVudC5yZXBhaW50KCk7Cit9CisKK1JlbmRlck9iamVjdCogUmVuZGVyVHJlZUJ1aWxkZXI6OnNw
bGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChSZW5kZXJCb3gmIHBhcmVudCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBib29sIGRpZFNwbGl0UGFyZW50QW5vbnltb3VzQm94
ZXMgPSBmYWxzZTsKKworICAgIHdoaWxlIChiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gJnBhcmVu
dCkgeworICAgICAgICBhdXRvJiBib3hUb1NwbGl0ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqYmVm
b3JlQ2hpbGQtPnBhcmVudCgpKTsKKyAgICAgICAgaWYgKGJveFRvU3BsaXQuZmlyc3RDaGlsZCgp
ICE9IGJlZm9yZUNoaWxkICYmIGJveFRvU3BsaXQuaXNBbm9ueW1vdXMoKSkgeworICAgICAgICAg
ICAgZGlkU3BsaXRQYXJlbnRBbm9ueW1vdXNCb3hlcyA9IHRydWU7CisKKyAgICAgICAgICAgIC8v
IFdlIGhhdmUgdG8gc3BsaXQgdGhlIHBhcmVudCBib3ggaW50byB0d28gYm94ZXMgYW5kIG1vdmUg
Y2hpbGRyZW4KKyAgICAgICAgICAgIC8vIGZyb20gfGJlZm9yZUNoaWxkfCB0byBlbmQgaW50byB0
aGUgbmV3IHBvc3QgYm94LgorICAgICAgICAgICAgYXV0byBuZXdQb3N0Qm94ID0gYm94VG9TcGxp
dC5jcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhwYXJlbnQpOworICAgICAgICAgICAg
YXV0byYgcG9zdEJveCA9ICpuZXdQb3N0Qm94OworICAgICAgICAgICAgcG9zdEJveC5zZXRDaGls
ZHJlbklubGluZShib3hUb1NwbGl0LmNoaWxkcmVuSW5saW5lKCkpOworICAgICAgICAgICAgUmVu
ZGVyQm94KiBwYXJlbnRCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KGJveFRvU3BsaXQucGFyZW50
KCkpOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBpbnZhbGlkYXRlIHRoZSB8cGFyZW50Qm94
fCBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBuZXcgbm9kZQorICAgICAgICAgICAgLy8gc28gdGhhdCB0
aGUgdGFibGUgcmVwYWludGluZyBsb2dpYyBrbm93cyB0aGUgc3RydWN0dXJlIGlzIGRpcnR5Lgor
ICAgICAgICAgICAgLy8gU2VlIGZvciBleGFtcGxlIFJlbmRlclRhYmxlQ2VsbDpjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludC4KKyAgICAgICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFmdGVy
U3BsaXQoKnBhcmVudEJveCk7CisgICAgICAgICAgICBwYXJlbnRCb3gtPmluc2VydENoaWxkSW50
ZXJuYWwoV1RGTW92ZShuZXdQb3N0Qm94KSwgYm94VG9TcGxpdC5uZXh0U2libGluZygpKTsKKyAg
ICAgICAgICAgIGJveFRvU3BsaXQubW92ZUNoaWxkcmVuVG8oJnBvc3RCb3gsIGJlZm9yZUNoaWxk
LCBudWxscHRyLCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Tm9ybWFsaXplQWZ0ZXJJbnNlcnRpb246
Olllcyk7CisKKyAgICAgICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQoYm94VG9T
cGxpdCk7CisgICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KHBvc3RCb3gp
OworCisgICAgICAgICAgICBiZWZvcmVDaGlsZCA9ICZwb3N0Qm94OworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gJmJveFRvU3BsaXQ7CisgICAgfQorCisgICAgaWYg
KGRpZFNwbGl0UGFyZW50QW5vbnltb3VzQm94ZXMpCisgICAgICAgIG1hcmtCb3hGb3JSZWxheW91
dEFmdGVyU3BsaXQocGFyZW50KTsKKworICAgIEFTU0VSVChiZWZvcmVDaGlsZC0+cGFyZW50KCkg
PT0gJnBhcmVudCk7CisgICAgcmV0dXJuIGJlZm9yZUNoaWxkOworfQorCiB2b2lkIFJlbmRlclRy
ZWVCdWlsZGVyOjp1cGRhdGVBZnRlckRlc2NlbmRhbnRzKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
KQogewogICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaAppbmRleCBi
MDVmZDFmZjlhNTE0ZmVlZWU1MmQwOTBkNmYzNzg3NjI0ZmI3ZTZmLi5lOTdiNDJlNmZkYmY5YTk2
NTA3ZTU1MzNiYzBkNzI5NTg5ZmJlZjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXIuaApAQCAtNDYsNiArNDYsMTIgQEAg
cHVibGljOgogICAgIC8vIEZJWE1FOiBSZW1vdmUuCiAgICAgc3RhdGljIFJlbmRlclRyZWVCdWls
ZGVyKiBjdXJyZW50KCkgeyByZXR1cm4gc19jdXJyZW50OyB9CiAKKyAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIHRlbXBvcmFyeSB1bnRpbCBhZnRlciBhbGwgYmxvY2svaW5saW5lL2NvbnRpbnVh
dGlvbiBjb2RlIGlzIG1vdmVkIG92ZXIuCisgICAgdm9pZCBpbnNlcnRDaGlsZFRvUmVuZGVyQmxv
Y2soUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4sIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKTsKKyAgICB2b2lkIGluc2VydENoaWxkVG9SZW5k
ZXJCbG9ja0lnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7Cisg
ICAgdm9pZCBtYWtlQ2hpbGRyZW5Ob25JbmxpbmUoUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVy
T2JqZWN0KiBpbnNlcnRpb25Qb2ludCA9IG51bGxwdHIpOworICAgIFJlbmRlck9iamVjdCogc3Bs
aXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKFJlbmRlckJveCYgcGFyZW50LCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKTsKKwogcHJpdmF0ZToKICAgICBjbGFzcyBGaXJzdExldHRlcjsKICAg
ICBjbGFzcyBMaXN0OwpAQCAtNTMsNiArNTksNyBAQCBwcml2YXRlOgogICAgIGNsYXNzIFRhYmxl
OwogICAgIGNsYXNzIFJ1Ynk7CiAgICAgY2xhc3MgRm9ybUNvbnRyb2xzOworICAgIGNsYXNzIEJs
b2NrOwogCiAgICAgRmlyc3RMZXR0ZXImIGZpcnN0TGV0dGVyQnVpbGRlcigpIHsgcmV0dXJuICpt
X2ZpcnN0TGV0dGVyQnVpbGRlcjsgfQogICAgIExpc3QmIGxpc3RCdWlsZGVyKCkgeyByZXR1cm4g
Km1fbGlzdEJ1aWxkZXI7IH0KQEAgLTYwLDYgKzY3LDcgQEAgcHJpdmF0ZToKICAgICBUYWJsZSYg
dGFibGVCdWlsZGVyKCkgeyByZXR1cm4gKm1fdGFibGVCdWlsZGVyOyB9CiAgICAgUnVieSYgcnVi
eUJ1aWxkZXIoKSB7IHJldHVybiAqbV9ydWJ5QnVpbGRlcjsgfQogICAgIEZvcm1Db250cm9scyYg
Zm9ybUNvbnRyb2xzQnVpbGRlcigpIHsgcmV0dXJuICptX2Zvcm1Db250cm9sc0J1aWxkZXI7IH0K
KyAgICBCbG9jayYgYmxvY2tCdWlsZGVyKCkgeyByZXR1cm4gKm1fYmxvY2tCdWlsZGVyOyB9CiAK
ICAgICBSZW5kZXJWaWV3JiBtX3ZpZXc7CiAKQEAgLTcyLDYgKzgwLDcgQEAgcHJpdmF0ZToKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VGFibGU+IG1fdGFibGVCdWlsZGVyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSdWJ5PiBtX3J1YnlCdWlsZGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGb3JtQ29udHJv
bHM+IG1fZm9ybUNvbnRyb2xzQnVpbGRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmxvY2s+IG1f
YmxvY2tCdWlsZGVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyQmxvY2suY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjBjMTlmNzg5Yjg0OThkNzU5NWM1ZjU1YjA1NDFhOTUxNTAxNGE2YzAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJC
bG9jay5jcHAKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oIgorCisjaW5jbHVkZSAiUmVu
ZGVyQ2hpbGRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUmVuZGVyQmxvY2sqIGNvbnRpbnVhdGlvbkJlZm9y
ZShSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQoreworICAg
IGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gJnBhcmVudCkKKyAg
ICAgICAgcmV0dXJuICZwYXJlbnQ7CisKKyAgICBSZW5kZXJCbG9jayogbmV4dFRvTGFzdCA9ICZw
YXJlbnQ7CisgICAgUmVuZGVyQmxvY2sqIGxhc3QgPSAmcGFyZW50OworICAgIGZvciAoYXV0byog
Y3VycmVudCA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihwYXJlbnQuY29udGludWF0aW9uKCkpOyBj
dXJyZW50OyBjdXJyZW50ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGN1cnJlbnQtPmNvbnRpbnVh
dGlvbigpKSkgeworICAgICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVu
dCgpID09IGN1cnJlbnQpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LT5maXJzdENoaWxkKCkg
PT0gYmVmb3JlQ2hpbGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3Q7CisgICAgICAgICAg
ICByZXR1cm4gY3VycmVudDsKKyAgICAgICAgfQorCisgICAgICAgIG5leHRUb0xhc3QgPSBsYXN0
OworICAgICAgICBsYXN0ID0gY3VycmVudDsKKyAgICB9CisKKyAgICBpZiAoIWJlZm9yZUNoaWxk
ICYmICFsYXN0LT5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiBuZXh0VG9MYXN0OworICAg
IHJldHVybiBsYXN0OworfQorCitSZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2s6OkJsb2NrKFJlbmRl
clRyZWVCdWlsZGVyJiBidWlsZGVyKQorICAgIDogbV9idWlsZGVyKGJ1aWxkZXIpCit7Cit9CisK
K3ZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OkJsb2NrOjppbnNlcnRDaGlsZChSZW5kZXJCbG9jayYg
cGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCkKK3sKKyAgICBpZiAocGFyZW50LmNvbnRpbnVhdGlvbigpICYmICFwYXJlbnQuaXNB
bm9ueW1vdXNCbG9jaygpKQorICAgICAgICBpbnNlcnRDaGlsZFRvQ29udGludWF0aW9uKHBhcmVu
dCwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAgICBlbHNlCisgICAgICAgIGluc2Vy
dENoaWxkSWdub3JpbmdDb250aW51YXRpb24ocGFyZW50LCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3Jl
Q2hpbGQpOworfQorCit2b2lkIFJlbmRlclRyZWVCdWlsZGVyOjpCbG9jazo6aW5zZXJ0Q2hpbGRU
b0NvbnRpbnVhdGlvbihSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0
PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBSZW5kZXJCbG9jayog
ZmxvdyA9IGNvbnRpbnVhdGlvbkJlZm9yZShwYXJlbnQsIGJlZm9yZUNoaWxkKTsKKyAgICBBU1NF
UlQoIWJlZm9yZUNoaWxkIHx8IGlzPFJlbmRlckJsb2NrPigqYmVmb3JlQ2hpbGQtPnBhcmVudCgp
KSk7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJlZm9yZUNoaWxkUGFyZW50ID0gbnVsbHB0
cjsKKyAgICBpZiAoYmVmb3JlQ2hpbGQpCisgICAgICAgIGJlZm9yZUNoaWxkUGFyZW50ID0gZG93
bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KGJlZm9yZUNoaWxkLT5wYXJlbnQoKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb24gPSBmbG93
LT5jb250aW51YXRpb24oKTsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAg
IGJlZm9yZUNoaWxkUGFyZW50ID0gY29udGludWF0aW9uOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBiZWZvcmVDaGlsZFBhcmVudCA9IGZsb3c7CisgICAgfQorCisgICAgaWYgKGNoaWxkLT5p
c0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgYmVmb3JlQ2hpbGRQ
YXJlbnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obV9idWlsZGVyLCBXVEZNb3ZlKGNo
aWxkKSwgYmVmb3JlQ2hpbGQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBj
aGlsZElzTm9ybWFsID0gY2hpbGQtPmlzSW5saW5lKCkgfHwgIWNoaWxkLT5zdHlsZSgpLmNvbHVt
blNwYW4oKTsKKyAgICBib29sIGJjcElzTm9ybWFsID0gYmVmb3JlQ2hpbGRQYXJlbnQtPmlzSW5s
aW5lKCkgfHwgIWJlZm9yZUNoaWxkUGFyZW50LT5zdHlsZSgpLmNvbHVtblNwYW4oKTsKKyAgICBi
b29sIGZsb3dJc05vcm1hbCA9IGZsb3ctPmlzSW5saW5lKCkgfHwgIWZsb3ctPnN0eWxlKCkuY29s
dW1uU3BhbigpOworCisgICAgaWYgKGZsb3cgPT0gYmVmb3JlQ2hpbGRQYXJlbnQpIHsKKyAgICAg
ICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihtX2J1aWxkZXIsIFdURk1vdmUo
Y2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBU
aGUgZ29hbCBoZXJlIGlzIHRvIG1hdGNoIHVwIGlmIHdlIGNhbiwgc28gdGhhdCB3ZSBjYW4gY29h
bGVzY2UgYW5kIGNyZWF0ZSB0aGUKKyAgICAvLyBtaW5pbWFsICMgb2YgY29udGludWF0aW9ucyBu
ZWVkZWQgZm9yIHRoZSBpbmxpbmUuCisgICAgaWYgKGNoaWxkSXNOb3JtYWwgPT0gYmNwSXNOb3Jt
YWwpIHsKKyAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51
YXRpb24obV9idWlsZGVyLCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChmbG93SXNOb3JtYWwgPT0gY2hpbGRJc05vcm1hbCkgewor
ICAgICAgICBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG1fYnVpbGRlciwgV1RG
TW92ZShjaGlsZCksIG51bGxwdHIpOyAvLyBKdXN0IHRyZWF0IGxpa2UgYW4gYXBwZW5kLgorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGJlZm9yZUNoaWxkUGFyZW50LT5hZGRDaGlsZElnbm9y
aW5nQ29udGludWF0aW9uKG1fYnVpbGRlciwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsK
K30KKwordm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6QmxvY2s6Omluc2VydENoaWxkSWdub3JpbmdD
b250aW51YXRpb24oUmVuZGVyQmxvY2smIHBhcmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4g
Y2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit7CisgICAgaWYgKGJlZm9yZUNoaWxk
ICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSAmcGFyZW50KSB7CisgICAgICAgIFJlbmRlckVs
ZW1lbnQqIGJlZm9yZUNoaWxkQ29udGFpbmVyID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOworICAg
ICAgICB3aGlsZSAoYmVmb3JlQ2hpbGRDb250YWluZXItPnBhcmVudCgpICE9ICZwYXJlbnQpCisg
ICAgICAgICAgICBiZWZvcmVDaGlsZENvbnRhaW5lciA9IGJlZm9yZUNoaWxkQ29udGFpbmVyLT5w
YXJlbnQoKTsKKyAgICAgICAgQVNTRVJUKGJlZm9yZUNoaWxkQ29udGFpbmVyKTsKKworICAgICAg
ICBpZiAoYmVmb3JlQ2hpbGRDb250YWluZXItPmlzQW5vbnltb3VzKCkpIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIWJlZm9yZUNoaWxkQ29u
dGFpbmVyLT5pc0lubGluZSgpKTsKKworICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3RlZCBi
ZWZvcmVDaGlsZCBpcyBub3Qgb25lIG9mIG91ciBjaGlsZHJlbiwgdGhlbiB0aGlzIGlzIGJlY2F1
c2UKKyAgICAgICAgICAgIC8vIHRoZXJlIGlzIGFuIGFub255bW91cyBjb250YWluZXIgd2l0aGlu
IHRoaXMgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGJlZm9yZUNoaWxkLgorICAgICAgICAgICAg
UmVuZGVyRWxlbWVudCogYmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXIgPSBiZWZvcmVDaGls
ZENvbnRhaW5lcjsKKyAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5l
ci0+aXNBbm9ueW1vdXNCbG9jaygpCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgICAg
ICAgICAgICAgIC8vIEZ1bGwgc2NyZWVuIHJlbmRlcmVycyBhbmQgZnVsbCBzY3JlZW4gcGxhY2Vo
b2xkZXJzIGFjdCBhcyBhbm9ueW1vdXMgYmxvY2tzLCBub3QgdGFibGVzOgorICAgICAgICAgICAg
ICAgIHx8IGJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVyLT5pc1JlbmRlckZ1bGxTY3JlZW4o
KQorICAgICAgICAgICAgICAgIHx8IGJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVyLT5pc1Jl
bmRlckZ1bGxTY3JlZW5QbGFjZWhvbGRlcigpCisjZW5kaWYKKyAgICAgICAgICAgICAgICApIHsK
KyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGNoaWxkIGludG8gdGhlIGFub255bW91cyBi
bG9jayBib3ggaW5zdGVhZCBvZiBoZXJlLgorICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNJ
bmxpbmUoKSB8fCBiZWZvcmVDaGlsZC0+cGFyZW50KCktPmZpcnN0Q2hpbGQoKSAhPSBiZWZvcmVD
aGlsZCkKKyAgICAgICAgICAgICAgICAgICAgbV9idWlsZGVyLmluc2VydENoaWxkKCpiZWZvcmVD
aGlsZC0+cGFyZW50KCksIFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQocGFy
ZW50LCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChiZWZvcmVD
aGlsZEFub255bW91c0NvbnRhaW5lci0+aXNUYWJsZSgpKTsKKworICAgICAgICAgICAgaWYgKGNo
aWxkLT5pc1RhYmxlUGFydCgpKSB7CisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGludG8gdGhl
IGFub255bW91cyB0YWJsZS4KKyAgICAgICAgICAgICAgICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQo
KmJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVyLCBXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hp
bGQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYmVmb3JlQ2hpbGQgPSBtX2J1aWxkZXIuc3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxk
KHBhcmVudCwgYmVmb3JlQ2hpbGQpOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSAmcGFyZW50KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgbWFkZUJveGVzTm9uSW5saW5lID0gZmFsc2U7
CisKKyAgICAvLyBBIGJsb2NrIGhhcyB0byBlaXRoZXIgaGF2ZSBhbGwgb2YgaXRzIGNoaWxkcmVu
IGlubGluZSwgb3IgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcyBibG9ja3MuCisgICAgLy8gU28sIGlm
IG91ciBjaGlsZHJlbiBhcmUgY3VycmVudGx5IGlubGluZSBhbmQgYSBibG9jayBjaGlsZCBoYXMg
dG8gYmUgaW5zZXJ0ZWQsIHdlIG1vdmUgYWxsIG91cgorICAgIC8vIGlubGluZSBjaGlsZHJlbiBp
bnRvIGFub255bW91cyBibG9jayBib3hlcy4KKyAgICBpZiAocGFyZW50LmNoaWxkcmVuSW5saW5l
KCkgJiYgIWNoaWxkLT5pc0lubGluZSgpICYmICFjaGlsZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93
UG9zaXRpb25lZCgpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgYSBibG9jayB3aXRoIGlubGluZSBj
b250ZW50LiBXcmFwIHRoZSBpbmxpbmUgY29udGVudCBpbiBhbm9ueW1vdXMgYmxvY2tzLgorICAg
ICAgICBtX2J1aWxkZXIubWFrZUNoaWxkcmVuTm9uSW5saW5lKHBhcmVudCwgYmVmb3JlQ2hpbGQp
OworICAgICAgICBtYWRlQm94ZXNOb25JbmxpbmUgPSB0cnVlOworCisgICAgICAgIGlmIChiZWZv
cmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gJnBhcmVudCkgeworICAgICAgICAg
ICAgYmVmb3JlQ2hpbGQgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7CisgICAgICAgICAgICBBU1NF
UlQoYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzQmxvY2soKSk7CisgICAgICAgICAgICBBU1NFUlQo
YmVmb3JlQ2hpbGQtPnBhcmVudCgpID09ICZwYXJlbnQpOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmICghcGFyZW50LmNoaWxkcmVuSW5saW5lKCkgJiYgKGNoaWxkLT5pc0Zsb2F0aW5nT3JPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkgfHwgY2hpbGQtPmlzSW5saW5lKCkpKSB7CisgICAgICAgIC8vIElm
IHdlJ3JlIGluc2VydGluZyBhbiBpbmxpbmUgY2hpbGQgYnV0IGFsbCBvZiBvdXIgY2hpbGRyZW4g
YXJlIGJsb2NrcywgdGhlbiB3ZSBoYXZlIHRvIG1ha2Ugc3VyZQorICAgICAgICAvLyBpdCBpcyBw
dXQgaW50byBhbiBhbm9teW91cyBibG9jayBib3guIFdlIHRyeSB0byB1c2UgYW4gZXhpc3Rpbmcg
YW5vbnltb3VzIGJveCBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlCisgICAgICAgIC8vIGEgbmV3IG9u
ZSBpcyBjcmVhdGVkIGFuZCBpbnNlcnRlZCBpbnRvIG91ciBsaXN0IG9mIGNoaWxkcmVuIGluIHRo
ZSBhcHByb3ByaWF0ZSBwb3NpdGlvbi4KKyAgICAgICAgUmVuZGVyT2JqZWN0KiBhZnRlckNoaWxk
ID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBwYXJlbnQu
bGFzdENoaWxkKCk7CisKKyAgICAgICAgaWYgKGFmdGVyQ2hpbGQgJiYgYWZ0ZXJDaGlsZC0+aXNB
bm9ueW1vdXNCbG9jaygpKSB7CisgICAgICAgICAgICBtX2J1aWxkZXIuaW5zZXJ0Q2hpbGQoZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KCphZnRlckNoaWxkKSwgV1RGTW92ZShjaGlsZCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNoaWxkLT5pc0lubGluZSgp
KSB7CisgICAgICAgICAgICAvLyBObyBzdWl0YWJsZSBleGlzdGluZyBhbm9ueW1vdXMgYm94IC0g
Y3JlYXRlIGEgbmV3IG9uZS4KKyAgICAgICAgICAgIGF1dG8gbmV3Qm94ID0gcGFyZW50LmNyZWF0
ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgICAgICBhdXRvJiBib3ggPSAqbmV3Qm94OworICAg
ICAgICAgICAgcGFyZW50LlJlbmRlckJveDo6YWRkQ2hpbGQobV9idWlsZGVyLCBXVEZNb3ZlKG5l
d0JveCksIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIG1fYnVpbGRlci5pbnNlcnRDaGlsZChi
b3gsIFdURk1vdmUoY2hpbGQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHBhcmVudC5pbnZhbGlkYXRlTGluZUxheW91dFBhdGgoKTsKKworICAgIHBhcmVu
dC5SZW5kZXJCb3g6OmFkZENoaWxkKG1fYnVpbGRlciwgV1RGTW92ZShjaGlsZCksIGJlZm9yZUNo
aWxkKTsKKworICAgIGlmIChtYWRlQm94ZXNOb25JbmxpbmUgJiYgaXM8UmVuZGVyQmxvY2s+KHBh
cmVudC5wYXJlbnQoKSkgJiYgcGFyZW50LmlzQW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAgZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KCpwYXJlbnQucGFyZW50KCkpLnJlbW92ZUxlZnRvdmVyQW5vbnlt
b3VzQmxvY2soJnBhcmVudCk7CisgICAgLy8gcGFyZW50IG9iamVjdCBtYXkgYmUgZGVhZCBoZXJl
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlQnVpbGRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRp
bmcvUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjZGFiZjNhOTk2MTg0ZWFm
ZDZmZDVkMzE3ZmFmZWJjOWU4NDliN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxkZXJCbG9jay5oCkBAIC0wLDAgKzEs
NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlclRyZWVC
dWlsZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyVHJlZUJ1aWxk
ZXI6OkJsb2NrIHsKK3B1YmxpYzoKKyAgICBCbG9jayhSZW5kZXJUcmVlQnVpbGRlciYpOworCisg
ICAgdm9pZCBpbnNlcnRDaGlsZChSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5kZXJQdHI8UmVuZGVy
T2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CisgICAgdm9pZCBpbnNl
cnRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIGluc2VydENoaWxkVG9Db250aW51YXRpb24oUmVuZGVyQmxvY2smIHBh
cmVudCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQpOworCisgICAgUmVuZGVyVHJlZUJ1aWxkZXImIG1fYnVpbGRlcjsKK307CisKK30KKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>