<?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>160506</bug_id>
          
          <creation_ts>2016-08-03 07:18:21 -0700</creation_ts>
          <short_desc>Duplicated code in DrawingAreaProxyImpl and CoordinatedDrawingAreaProxy</short_desc>
          <delta_ts>2016-08-07 22:40:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Local 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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>yoon</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1216908</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-03 07:18:21 -0700</bug_when>
    <thetext>This is mostly the same than bug #159259, CoordinatedDrawingAreaProxy is just a copy paste of DrawingAreaProxyImpl with the non accelerated composited code path removed. We could reuse most of the code by subclassing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216910</commentid>
    <comment_count>1</comment_count>
      <attachid>285228</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-03 07:26:49 -0700</bug_when>
    <thetext>Created attachment 285228
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216916</commentid>
    <comment_count>2</comment_count>
      <attachid>285229</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-03 07:43:45 -0700</bug_when>
    <thetext>Created attachment 285229
Try to fix EFL build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216917</commentid>
    <comment_count>3</comment_count>
      <attachid>285230</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-03 07:48:30 -0700</bug_when>
    <thetext>Created attachment 285230
Try to fix EFL build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218457</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-07 22:40:02 -0700</bug_when>
    <thetext>Committed r204249: &lt;http://trac.webkit.org/changeset/204249&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285228</attachid>
            <date>2016-08-03 07:26:49 -0700</date>
            <delta_ts>2016-08-03 07:43:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-drawing-area-proxy.diff</filename>
            <type>text/plain</type>
            <size>64177</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0MzIwYzQwLi5jMjU2ZWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzIg
QEAKKzIwMTYtMDgtMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIER1cGxpY2F0ZWQgY29kZSBpbiBEcmF3aW5nQXJlYVByb3h5SW1wbCBhbmQg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA1MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTYW1lIGxvZ2ljIGFzIGluIHIyMDI4NTUgYnV0IGluIHRoZSBV
SSBwcm9jZXNzLiBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkgaXMganVzdCBhIGNvcHkgcGFz
dGUgb2YKKyAgICAgICAgRHJhd2luZ0FyZWFQcm94eUltcGwgd2l0aCBub24tYWNjZWxlcmF0ZWQg
Y29kZSBwYXRoIHJlbW92ZWQuIFRoZXJlJ3MgYWN0dWFsbHkgbm90aGluZyAob3IgdmVyeSBsaXR0
bGUpIHNwZWNpZmljCisgICAgICAgIHRvIGNvb3JkaW5hdGVkIGdyYXBoaWNzIGluIHRoZSBDb29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHkgaW1wbGVtZW50YXRpb24uIFRoaXMgcGF0Y2ggcmVuYW1l
cworICAgICAgICBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkgYXMgQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYVByb3h5IGFuZCBtYWtlcyBEcmF3aW5nQXJlYVByb3h5SW1wbCBpbmhlcml0IGZyb20g
aXQsIHNvCisgICAgICAgIHRoYXQgaW4gY2FzZSBvZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB0
aGUgcGFyZW50IGNsYXNzIGlzIHVzZWQsIGFuZCBEcmF3aW5nQXJlYVByb3h5SW1wbCBvbmx5IGFk
ZHMgdGhlIG5vbgorICAgICAgICBhY2NlbGVyYXRlZCBjb2RlIHBhdGguCisgICAgICAgIFRvIHNp
bXBsaWZ5IHRoZSBjb21tb24gQVBJIG9mIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eSwgSSBo
YXZlIGNoYW5nZWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgdG8KKyAgICAgICAgcmVj
ZWl2ZSBhIFdlYlBhZ2VQcm94eSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZCBvZiBhIGRyYXdp
bmcgYXJlYSwgc2luY2UgdGhlIGRyYXdpbmcgYXJlYSB3YXMgdXNlZCBqdXN0IHRvIGdldAorICAg
ICAgICB0aGUgcGFnZSBwcm94eS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAg
ICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BY2NlbGVyYXRl
ZERyYXdpbmdBcmVhUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcC4K
KyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpBY2NlbGVyYXRl
ZERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdB
cmVhUHJveHk6On5BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0
OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OmFsd2F5c1VzZUNvbXBvc2l0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpkaXNwYXRjaEFmdGVy
RW5zdXJpbmdEcmF3aW5nKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJl
YVByb3h5OjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3
aW5nQXJlYVByb3h5OjpkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6dmlzaWJpbGl0eURpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckJhY2tp
bmdTdG9yZVVwZGF0ZU9uTmV4dFBhaW50KToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYVByb3h5OjpkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6QWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6YmFja2lu
Z1N0b3JlU3RhdGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdp
bmdBcmVhUHJveHk6OnNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckFuZERpc3BhdGNoRGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdp
bmdBcmVhUHJveHk6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGVzdHJveU5hdGl2ZVN1
cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FjY2VsZXJh
dGVkRHJhd2luZ0FyZWFQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmguCisg
ICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6aXNJbkFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5n
QXJlYVByb3h5Ojpjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdw
b3J0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNv
bW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRT
Y3JvbGxPZmZzZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnN5bmNWaXNpYmxlQ29udGVudHMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkRy
YXdpbmdBcmVhUHJveHlJbXBsOjpkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJv
eHlJbXBsOjp+RHJhd2luZ0FyZWFQcm94eUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6dXBkYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmluY29ycG9yYXRlVXBkYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmRpc2NhcmRCYWNraW5nU3RvcmVT
b29uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmRp
c2NhcmRCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Ojpjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Ojp1cGRhdGVWaWV3cG9ydFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpjcmVh
dGVEcmF3aW5nQXJlYVByb3h5KToKKwogMjAxNi0wOC0wMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQmFkIHBlcmZvcm1hbmNlIGlu
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUgd2l0aCB0aGUgbW9kZXNldHRpbmcgaW50ZWwg
ZHJpdmVyIGFuZCBEUkkzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMjAy
MGZiZS4uZmFhN2JiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTU0LDYgKzU0LDcg
QEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBTaGFyZWQvdW5peC9DaGlsZFBy
b2Nlc3NNYWluLmNwcAogCisgICAgVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eS5jcHAKICAgICBVSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAogICAgIFVJUHJvY2Vzcy9EZWZh
dWx0VW5kb0NvbnRyb2xsZXIuY3BwCiAgICAgVUlQcm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNv
ZGluZ05vbmUuY3BwCkBAIC0xMTIsNyArMTEzLDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VS
Q0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKIAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eS5jcHAKICAgICBVSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKICAg
ICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNw
cAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlBhZ2VQcm94eUNvb3JkaW5h
dGVkR3JhcGhpY3MuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5j
bWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDM2OWFhMDIuLjc4
ODk2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC04MSw2ICs4MSw3IEBAIGxpc3Qo
QVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL3VuaXgvQ2hpbGRQcm9jZXNzTWFp
bi5jcHAKIAorICAgIFVJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCiAg
ICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAKICAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9D
b250cm9sbGVyLmNwcAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVh
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWFQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiNjI1Ygot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERy
YXdpbmdBcmVhUHJveHkuY3BwCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eS5oIgorCisjaW5jbHVk
ZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlICJVcGRhdGVJ
bmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5j
ZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
Z2lvbi5oPgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKKyNp
bmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgorI2VuZGlmCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYVByb3h5OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVByb3h5
JiB3ZWJQYWdlUHJveHkpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VT
UykKKyAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlQ29vcmRpbmF0ZWQsIHdl
YlBhZ2VQcm94eSkKKyNlbHNlCisgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlw
ZUltcGwsIHdlYlBhZ2VQcm94eSkKKyNlbmRpZgoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDU19NVUxUSVBST0NFU1MpCisgICAgLy8gQ29uc3RydWN0IHRoZSBwcm94eSBlYXJseSB0byBh
bGxvdyBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyB3aGlsZSBBQyBpcyBl
bnRlcmVkIHRoZXJlLgorICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgPSBzdGQ6
Om1ha2VfdW5pcXVlPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Pih3ZWJQYWdlUHJveHkp
OworI2VuZGlmCit9CisKK0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6fkFjY2VsZXJhdGVk
RHJhd2luZ0FyZWFQcm94eSgpCit7CisgICAgLy8gTWFrZSBzdXJlIHRvIGV4aXQgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcgbW9kZS4KKyAgICBpZiAoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKCkpCisgICAgICAgIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOworfQorCiti
b29sIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6YWx3YXlzVXNlQ29tcG9zaXRpbmcoKSBj
b25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2VQcm94eS5wcmVmZXJlbmNlcygpLmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKCkgJiYgbV93ZWJQYWdlUHJveHkucHJlZmVyZW5jZXMoKS5m
b3JjZUNvbXBvc2l0aW5nTW9kZSgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQ
cm94eTo6ZGlzcGF0Y2hBZnRlckVuc3VyaW5nRHJhd2luZyhzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCit7CisgICAgaWYgKCFtX3dlYlBh
Z2VQcm94eS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jh
c2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY2FsbGJhY2tGdW5jdGlvbl0geworICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOworICAgIH0p
OworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6c2l6ZURpZENoYW5nZSgp
Cit7CisgICAgYmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5KTsK
K30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OmRldmljZVNjYWxlRmFjdG9y
RGlkQ2hhbmdlKCkKK3sKKyAgICBiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNwb25kSW1t
ZWRpYXRlbHkpOworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6dmlzaWJp
bGl0eURpZENoYW5nZSgpCit7CisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGJhY2tpbmcgc3Rv
cmUsIGdvIGFoZWFkIGFuZCBtYXJrIHRoZSBiYWNraW5nIHN0b3JlIGFzIGJlaW5nIGNoYW5nZWQg
c28KKyAgICAvLyB0aGF0IHdoZW4gcGFpbnQgd2UnbGwgYWN0dWFsbHkgd2FpdCBmb3Igc29tZXRo
aW5nIHRvIHBhaW50IGFuZCBub3QgZmxhc2ggd2hpdGUuCisgICAgaWYgKG1fbGF5ZXJUcmVlQ29u
dGV4dC5pc0VtcHR5KCkpCisgICAgICAgIGJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKERvTm90
UmVzcG9uZEltbWVkaWF0ZWx5KTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJv
eHk6OndhaXRGb3JCYWNraW5nU3RvcmVVcGRhdGVPbk5leHRQYWludCgpCit7CisgICAgbV9oYXNS
ZWNlaXZlZEZpcnN0VXBkYXRlID0gdHJ1ZTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdB
cmVhUHJveHk6OmRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9y
ZVN0YXRlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IExheWVyVHJlZUNv
bnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgQVNTRVJUX0FSRyhiYWNraW5nU3RvcmVT
dGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQp
OworICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJ
RCA+IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpOworICAgIG1fY3VycmVudEJhY2tpbmdT
dG9yZVN0YXRlSUQgPSBiYWNraW5nU3RvcmVTdGF0ZUlEOworCisgICAgbV9pc1dhaXRpbmdGb3JE
aWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9IGZhbHNlOworCisgICAgLy8gU3RvcCB0aGUgcmVz
cG9uc2l2ZW5lc3MgdGltZXIgdGhhdCB3YXMgc3RhcnRlZCBpbiBzZW5kVXBkYXRlQmFja2luZ1N0
b3JlU3RhdGUuCisgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnJlc3BvbnNpdmVuZXNzVGlt
ZXIoKS5zdG9wKCk7CisKKyAgICBpZiAobGF5ZXJUcmVlQ29udGV4dCAhPSBtX2xheWVyVHJlZUNv
bnRleHQpIHsKKyAgICAgICAgaWYgKGxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpICYmICFtX2xh
eWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2xheWVyVHJlZUNvbnRleHQu
aXNFbXB0eSgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5
KCkgJiYgbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKKyAgICAgICAgICAg
IEFTU0VSVChsYXllclRyZWVDb250ZXh0ID09IG1fbGF5ZXJUcmVlQ29udGV4dCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShs
YXllclRyZWVDb250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVChsYXllclRyZWVDb250ZXh0ID09
IG1fbGF5ZXJUcmVlQ29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9uZXh0
QmFja2luZ1N0b3JlU3RhdGVJRCAhPSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKQorICAg
ICAgICBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoUmVzcG9uZEltbWVkaWF0ZWx5KTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlID0gdHJ1ZTsKKworI2lm
IFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElSRUNURURf
WENPTVBPU0lURV9XSU5ET1cpCisgICAgICAgIGlmIChtX3BlbmRpbmdOYXRpdmVTdXJmYWNlSGFu
ZGxlRm9yQ29tcG9zaXRpbmcpIHsKKyAgICAgICAgICAgIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVG
b3JDb21wb3NpdGluZyhtX3BlbmRpbmdOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcp
OworICAgICAgICAgICAgbV9wZW5kaW5nTmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5n
ID0gMDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCit2b2lkIEFjY2VsZXJhdGVkRHJh
d2luZ0FyZWFQcm94eTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBi
YWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250
ZXh0KQoreworICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3Jl
U3RhdGVJRCA8PSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKKyAgICBpZiAoYmFja2lu
Z1N0b3JlU3RhdGVJRCA8IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29u
dGV4dCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpleGl0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3Qg
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBBU1NFUlRfQVJHKGJhY2tpbmdTdG9yZVN0
YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJ
RCk7CisgICAgaWYgKGJhY2tpbmdTdG9yZVN0YXRlSUQgPCBtX2N1cnJlbnRCYWNraW5nU3RvcmVT
dGF0ZUlEKQorICAgICAgICByZXR1cm47CisKKyAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNv
bnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgQVNTRVJUX0FS
RyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fY3VycmVudEJh
Y2tpbmdTdG9yZVN0YXRlSUQpOworICAgIGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEIDwgbV9jdXJy
ZW50QmFja2luZ1N0b3JlU3RhdGVJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdXBkYXRlQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Cit9CisKK3ZvaWQgQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNw
b25kSW1tZWRpYXRlbHlPck5vdCByZXNwb25kSW1tZWRpYXRlbHlPck5vdCkKK3sKKyAgICArK21f
bmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQ7CisgICAgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
KHJlc3BvbmRJbW1lZGlhdGVseU9yTm90KTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdB
cmVhUHJveHk6OnNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShSZXNwb25kSW1tZWRpYXRlbHlP
ck5vdCByZXNwb25kSW1tZWRpYXRlbHlPck5vdCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50QmFj
a2luZ1N0b3JlU3RhdGVJRCA8IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQpOworCisgICAgaWYg
KCFtX3dlYlBhZ2VQcm94eS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV93ZWJQYWdlUHJveHkudmlld1NpemUoKS5pc0VtcHR5KCkgJiYgIW1fd2Vi
UGFnZVByb3h5LnVzZUZpeGVkTGF5b3V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNX
YWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgPSByZXNwb25kSW1tZWRpYXRlbHlP
ck5vdCA9PSBSZXNwb25kSW1tZWRpYXRlbHk7CisKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKG1f
bmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQsIHJlc3BvbmRJbW1lZGlhdGVseU9yTm90ID09IFJlc3Bv
bmRJbW1lZGlhdGVseSwgbV93ZWJQYWdlUHJveHkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgbV9zaXpl
LCBtX3Njcm9sbE9mZnNldCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKKyAgICBtX3Njcm9s
bE9mZnNldCA9IEludFNpemUoKTsKKworICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKSB7CisgICAgICAgIC8vIFN0YXJ0IHRoZSByZXNwb25zaXZlbmVzcyB0
aW1lci4gV2Ugd2lsbCBzdG9wIGl0IHdoZW4gd2UgaGVhciBiYWNrIGZyb20gdGhlIFdlYlByb2Nl
c3MKKyAgICAgICAgLy8gaW4gZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUuCisgICAgICAgIG1f
d2ViUGFnZVByb3h5LnByb2Nlc3MoKS5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKKyAg
ICB9CisKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSAm
JiAhbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBXYWl0IGZvciB0
aGUgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZS4gTm9ybWFsbHkgd2UgZG8gdGhp
cyBpbiBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50LCBidXQgdGhhdAorICAgICAg
ICAvLyBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQgd2hlbiBpbiBhY2NlbGVyYXRlZCBjb21wb3Np
dGluZyBtb2RlLgorICAgICAgICB3YWl0Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZSgpOworICAgIH0KK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6
OndhaXRGb3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCkKK3sKKyAgICBB
U1NFUlQobV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk7CisKKyAgICBp
ZiAoIW1fd2ViUGFnZVByb3h5LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICht
X3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc3RhdGUoKSA9PSBXZWJQcm9jZXNzUHJveHk6OlN0YXRl
OjpMYXVuY2hpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB3YWl0Rm9yQW5k
RGlzcGF0Y2hJbW1lZGlhdGVseSB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIG9sZGVzdCBEaWRVcGRh
dGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlIHRoYXQKKyAgICAvLyBoYXNuJ3QgeWV0IGJlZW4g
cHJvY2Vzc2VkLiBCdXQgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIHNraXAgYWhlYWQgdG8gc29tZSBv
dGhlciBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZQorICAgIC8vIG1lc3NhZ2UsIGlmIG11bHRp
cGxlIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2VzIGFyZSB3YWl0aW5nIHRvIGJl
IHByb2Nlc3NlZC4gRm9yIGluc3RhbmNlLCB3ZSBjb3VsZAorICAgIC8vIGNob29zZSB0aGUgbW9z
dCByZWNlbnQgb25lLCBvciB0aGUgb25lIHRoYXQgaXMgY2xvc2VzdCB0byBvdXIgY3VycmVudCBz
aXplLgorCisgICAgLy8gVGhlIHRpbWVvdXQsIGluIHNlY29uZHMsIHdlIHVzZSB3aGVuIHdhaXRp
bmcgZm9yIGEgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSB3aGVuIHdlJ3JlIGFz
a2VkIHRvIHBhaW50LgorICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCkt
PndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5
OjpEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNTAwKSk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYVByb3h5OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVy
VHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgQVNTRVJUKGFsd2F5c1VzZUNv
bXBvc2l0aW5nKCkgfHwgIWlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKKworICAg
IG1fbGF5ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7CisgICAgbV93ZWJQYWdlUHJv
eHkuZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKK30K
Kwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OmV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpCit7CisgICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSgpKTsKKworICAgIG1fbGF5ZXJUcmVlQ29udGV4dCA9IExheWVyVHJlZUNvbnRleHQoKTsKKyAg
ICBtX3dlYlBhZ2VQcm94eS5leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKK30KKwor
dm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7Cisg
ICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKKworICAgIG1fbGF5
ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7CisgICAgbV93ZWJQYWdlUHJveHkudXBk
YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Cit9CisKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVE
X1hDT01QT1NJVEVfV0lORE9XKQordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnNl
dE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCBoYW5kbGUpCit7Cisg
ICAgaWYgKCFtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUpIHsKKyAgICAgICAgbV9wZW5kaW5nTmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nID0gaGFuZGxlOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpEcmF3
aW5nQXJlYTo6U2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKGhhbmRsZSksIG1f
d2ViUGFnZVByb3h5LnBhZ2VJRCgpLCBJUEM6OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGlu
Z0ZvclN5bmNSZXBseSk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5Ojpk
ZXN0cm95TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCkKK3sKKyAgICBpZiAobV9w
ZW5kaW5nTmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKSB7CisgICAgICAgIG1fcGVu
ZGluZ05hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyA9IDA7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgYm9vbCBoYW5kbGVkOworICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3Mo
KS5zZW5kU3luYyhNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFu
ZGxlRm9yQ29tcG9zaXRpbmcoKSwgTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpEZXN0cm95TmF0aXZl
U3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nOjpSZXBseShoYW5kbGVkKSwgbV93ZWJQYWdlUHJv
eHkucGFnZUlEKCkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTlkOTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YVByb3h5LmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAo
QykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTsK
KworY2xhc3MgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5IDogcHVibGljIERyYXdpbmdBcmVh
UHJveHkgeworcHVibGljOgorICAgIGV4cGxpY2l0IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eShXZWJQYWdlUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJv
eHkoKTsKKworICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gYWx3YXlzVXNlQ29tcG9zaXRpbmcoKSB8fCAhbV9sYXllclRyZWVDb250ZXh0Lmlz
RW1wdHkoKTsgfQorICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZSgpOworCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKKyAgICBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSYgY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKSBjb25zdCB7IHJldHVy
biAqbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5nZXQoKTsgfQorI2VuZGlmCisKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVE
X1hDT01QT1NJVEVfV0lORE9XKQorICAgIHZvaWQgc2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKHVpbnQ2NF90KTsKKyAgICB2b2lkIGRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxl
Rm9yQ29tcG9zaXRpbmcoKTsKKyNlbmRpZgorCisgICAgdm9pZCBkaXNwYXRjaEFmdGVyRW5zdXJp
bmdEcmF3aW5nKHN0ZDo6ZnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4pIG92ZXJy
aWRlOworCitwcm90ZWN0ZWQ6CisgICAgLy8gRHJhd2luZ0FyZWFQcm94eQorICAgIHZvaWQgc2l6
ZURpZENoYW5nZSgpIG92ZXJyaWRlOworICAgIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFu
Z2UoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdhaXRGb3JCYWNraW5nU3RvcmVVcGRhdGVPbk5leHRQ
YWludCgpIG92ZXJyaWRlOworCisgICAgLy8gSVBDIG1lc3NhZ2UgaGFuZGxlcnMKKyAgICB2b2lk
IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQs
IGNvbnN0IFVwZGF0ZUluZm8mLCBjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKKyAgICB2b2lk
IGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0
ZUlELCBjb25zdCBVcGRhdGVJbmZvJikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBM
YXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICBlbnVtIFJlc3BvbmRJbW1lZGlhdGVs
eU9yTm90IHsgRG9Ob3RSZXNwb25kSW1tZWRpYXRlbHksIFJlc3BvbmRJbW1lZGlhdGVseSB9Owor
ICAgIHZvaWQgYmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5T3JO
b3QpOworICAgIHZvaWQgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJbW1lZGlh
dGVseU9yTm90KTsKKyAgICB2b2lkIHdhaXRGb3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdT
dG9yZVN0YXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7CisgICAgdm9pZCBleGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoKTsKKyAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKKworICAgIGJvb2wgYWx3YXlzVXNlQ29t
cG9zaXRpbmcoKSBjb25zdDsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19NVUxUSVBS
T0NFU1MpCisgICAgc3RkOjp1bmlxdWVfcHRyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
PiBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OworI2VuZGlmCisKKyAgICAvLyBUaGUg
c3RhdGUgSUQgY29ycmVzcG9uZGluZyB0byBvdXIgY3VycmVudCBiYWNraW5nIHN0b3JlLiBVcGRh
dGVkIHdoZW5ldmVyIHdlIGFsbG9jYXRlCisgICAgLy8gYSBuZXcgYmFja2luZyBzdG9yZS4gQW55
IG1lc3NhZ2VzIHJlY2VpdmVkIHRoYXQgY29ycmVzcG9uZCB0byBhbiBlYXJsaWVyIHN0YXRlIGFy
ZSBpZ25vcmVkLAorICAgIC8vIGFzIHRoZXkgZG9uJ3QgYXBwbHkgdG8gb3VyIGN1cnJlbnQgYmFj
a2luZyBzdG9yZS4KKyAgICB1aW50NjRfdCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEIHsg
MCB9OworCisgICAgLy8gVGhlIG5leHQgYmFja2luZyBzdG9yZSBzdGF0ZSBJRCB3ZSB3aWxsIHJl
cXVlc3QgdGhlIHdlYiBwcm9jZXNzIHVwZGF0ZSB0by4gSW5jcmVtZW50ZWQKKyAgICAvLyB3aGVu
ZXZlciBvdXIgc3RhdGUgY2hhbmdlcyBpbiBhIHdheSB0aGF0IHdpbGwgcmVxdWlyZSBhIG5ldyBi
YWNraW5nIHN0b3JlIHRvIGJlIGFsbG9jYXRlZC4KKyAgICB1aW50NjRfdCBtX25leHRCYWNraW5n
U3RvcmVTdGF0ZUlEIHsgMCB9OworCisgICAgLy8gVGhlIGN1cnJlbnQgbGF5ZXIgdHJlZSBjb250
ZXh0LgorICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworCisgICAgLy8g
V2hldGhlciB3ZSd2ZSBzZW50IGEgVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSBhbmQg
YXJlIG5vdyB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2Uu
CisgICAgLy8gVXNlZCB0byB0aHJvdHRsZSBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdl
cyBzbyB3ZSBkb24ndCBzZW5kIHRoZW0gZmFzdGVyIHRoYW4gdGhlIFdlYiBwcm9jZXNzIGNhbiBo
YW5kbGUuCisgICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
IHsgZmFsc2UgfTsKKworICAgIC8vIEZvciBhIG5ldyBEcmF3aW5nIEFyZWEgZG9uJ3QgZHJhdyBh
bnl0aGluZyB1bnRpbCB0aGUgV2ViUHJvY2VzcyBoYXMgc2VudCBvdmVyIHRoZSBmaXJzdCBjb250
ZW50LgorICAgIGJvb2wgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlIHsgZmFsc2UgfTsKKworI2lm
IFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElSRUNURURf
WENPTVBPU0lURV9XSU5ET1cpCisgICAgdWludDY0X3QgbV9wZW5kaW5nTmF0aXZlU3VyZmFjZUhh
bmRsZUZvckNvbXBvc2l0aW5nIHsgMCB9OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94
eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOTI5OGUuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZERyYXdpbmdBcmVhUHJv
eHkuaCIKLQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0jaW5j
bHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKLSNpbmNsdWRlICJVcGRh
dGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQ
cm94eTo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KFdlYlBhZ2VQcm94eSYgd2ViUGFnZVBy
b3h5KQotICAgIDogRHJhd2luZ0FyZWFQcm94eShEcmF3aW5nQXJlYVR5cGVDb29yZGluYXRlZCwg
d2ViUGFnZVByb3h5KQotICAgICwgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCgwKQotICAg
ICwgbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCgwKQotICAgICwgbV9pc1dhaXRpbmdGb3JEaWRV
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZShmYWxzZSkKLSAgICAsIG1faGFzUmVjZWl2ZWRGaXJzdFVw
ZGF0ZShmYWxzZSkKLXsKLSAgICAvLyBDb25zdHJ1Y3QgdGhlIHByb3h5IGVhcmx5IHRvIGFsbG93
IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNzIHdoaWxlIEFDIGlzIGVudGVy
ZWQgdGhlcmUuCi0gICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk+KHRoaXMpOwotfQotCi1Db29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHk6On5Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkoKQot
ewotICAgIC8vIE1ha2Ugc3VyZSB0byBleGl0IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUu
Ci0gICAgaWYgKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKQotICAgICAgICBleGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdp
bmdBcmVhUHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKLXsKLSAgICBtX3dlYlBhZ2VQcm94eS5zZXRW
aWV3TmVlZHNEaXNwbGF5KHZpZXdwb3J0VmlzaWJsZVJlY3QoKSk7Ci19Ci0KLVdlYkNvcmU6Oklu
dFJlY3QgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3QoKSBjb25zdAot
ewotICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZVByb3h5LnZp
ZXdTaXplKCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlzcGF0
Y2hBZnRlckVuc3VyaW5nRHJhd2luZyhzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpF
cnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2VQcm94eS5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jhc2U6OkVycm9yOjpP
d25lcldhc0ludmFsaWRhdGVkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbY2FsbGJhY2tGdW5jdGlvbl0gewotICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOwotICAgIH0pOwotfQotCi12b2lk
IENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6c2l6ZURpZENoYW5nZSgpCi17Ci0gICAgYmFj
a2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5KTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkK
LXsKLSAgICBiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNwb25kSW1tZWRpYXRlbHkpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6dmlzaWJpbGl0eURpZENoYW5n
ZSgpCi17Ci0gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGJhY2tpbmcgc3RvcmUsIGdvIGFoZWFk
IGFuZCBtYXJrIHRoZSBiYWNraW5nIHN0b3JlIGFzIGJlaW5nIGNoYW5nZWQgc28KLSAgICAvLyB0
aGF0IHdoZW4gcGFpbnQgd2UnbGwgYWN0dWFsbHkgd2FpdCBmb3Igc29tZXRoaW5nIHRvIHBhaW50
IGFuZCBub3QgZmxhc2ggd2hpdGUuCi0gICAgaWYgKG1fbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5
KCkpCi0gICAgICAgIGJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKERvTm90UmVzcG9uZEltbWVk
aWF0ZWx5KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JC
YWNraW5nU3RvcmVVcGRhdGVPbk5leHRQYWludCgpCi17Ci0gICAgbV9oYXNSZWNlaXZlZEZpcnN0
VXBkYXRlID0gdHJ1ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRp
ZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNv
bnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVy
VHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNr
aW5nU3RvcmVTdGF0ZUlEIDw9IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAgIEFTU0VS
VF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA+IG1fY3VycmVu
dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAgIG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQg
PSBiYWNraW5nU3RvcmVTdGF0ZUlEOwotCi0gICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZSA9IGZhbHNlOwotCi0gICAgLy8gU3RvcCB0aGUgcmVzcG9uc2l2ZW5lc3Mg
dGltZXIgdGhhdCB3YXMgc3RhcnRlZCBpbiBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUuCi0g
ICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdG9wKCk7
Ci0KLSAgICBpZiAobGF5ZXJUcmVlQ29udGV4dCAhPSBtX2xheWVyVHJlZUNvbnRleHQpIHsKLSAg
ICAgICAgaWYgKCFtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2xh
eWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbGF5
ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Ci0gICAgICAgICAgICBBU1NFUlQobGF5
ZXJUcmVlQ29udGV4dCA9PSBtX2xheWVyVHJlZUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQgIT0gbV9jdXJyZW50QmFja2luZ1N0
b3JlU3RhdGVJRCkKLSAgICAgICAgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJ
bW1lZGlhdGVseSk7Ci0gICAgZWxzZQotICAgICAgICBtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUg
PSB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25z
dCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQotewotICAgIEFTU0VSVF9BUkco
YmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA8PSBtX2N1cnJlbnRCYWNr
aW5nU3RvcmVTdGF0ZUlEKTsKLSAgICBpZiAoYmFja2luZ1N0b3JlU3RhdGVJRCA8IG1fY3VycmVu
dEJhY2tpbmdTdG9yZVN0YXRlSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWREcmF3aW5nQXJlYVByb3h5OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWlu
dDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykK
LXsKLSAgICBBU1NFUlRfQVJHKGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRl
SUQgPD0gbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCk7Ci0gICAgaWYgKGJhY2tpbmdTdG9y
ZVN0YXRlSUQgPCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxh
eWVyVHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBi
YWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAg
IGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEIDwgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
bGF5ZXJUcmVlQ29udGV4dCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5
OjpiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNwb25kSW1tZWRpYXRlbHlPck5vdCByZXNw
b25kSW1tZWRpYXRlbHlPck5vdCkKLXsKLSAgICArK21fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQ7
Ci0gICAgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHJlc3BvbmRJbW1lZGlhdGVseU9yTm90
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnNlbmRVcGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZShSZXNwb25kSW1tZWRpYXRlbHlPck5vdCByZXNwb25kSW1tZWRpYXRlbHlP
ck5vdCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCA8IG1fbmV4
dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotCi0gICAgaWYgKCFtX3dlYlBhZ2VQcm94eS5pc1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV93ZWJQYWdlUHJv
eHkudmlld1NpemUoKS5pc0VtcHR5KCkgJiYgIW1fd2ViUGFnZVByb3h5LnVzZUZpeGVkTGF5b3V0
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUgPSByZXNwb25kSW1tZWRpYXRlbHlPck5vdCA9PSBSZXNwb25kSW1tZWRpYXRl
bHk7Ci0KLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6RHJhd2lu
Z0FyZWE6OlVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQs
IHJlc3BvbmRJbW1lZGlhdGVseU9yTm90ID09IFJlc3BvbmRJbW1lZGlhdGVseSwgbV93ZWJQYWdl
UHJveHkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgbV9zaXplLCBtX3Njcm9sbE9mZnNldCksIG1fd2Vi
UGFnZVByb3h5LnBhZ2VJRCgpKTsKLSAgICBtX3Njcm9sbE9mZnNldCA9IEludFNpemUoKTsKLQot
ICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKSB7Ci0gICAg
ICAgIC8vIFN0YXJ0IHRoZSByZXNwb25zaXZlbmVzcyB0aW1lci4gV2Ugd2lsbCBzdG9wIGl0IHdo
ZW4gd2UgaGVhciBiYWNrIGZyb20gdGhlIFdlYlByb2Nlc3MKLSAgICAgICAgLy8gaW4gZGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUuCi0gICAgICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5y
ZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9pc1dhaXRp
bmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSAmJiAhbV9sYXllclRyZWVDb250ZXh0Lmlz
RW1wdHkoKSkgewotICAgICAgICAvLyBXYWl0IGZvciB0aGUgRGlkVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGUgbWVzc2FnZS4gTm9ybWFsbHkgd2UgZG8gdGhpcyBpbiBDb29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHk6OnBhaW50LCBidXQgdGhhdAotICAgICAgICAvLyBmdW5jdGlvbiBpcyBuZXZlciBj
YWxsZWQgd2hlbiBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLgotICAgICAgICB3YWl0
Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOwotICAgIH0KLX0KLQot
dm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JBbmREaXNwYXRjaERpZFVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCkKLXsKLSAgICBBU1NFUlQobV9pc1dhaXRpbmdGb3JEaWRV
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk7Ci0KLSAgICBpZiAoIW1fd2ViUGFnZVByb3h5LmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCku
c3RhdGUoKSA9PSBXZWJQcm9jZXNzUHJveHk6OlN0YXRlOjpMYXVuY2hpbmcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIEZJWE1FOiB3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSB3aWxs
IGFsd2F5cyByZXR1cm4gdGhlIG9sZGVzdCBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNz
YWdlIHRoYXQKLSAgICAvLyBoYXNuJ3QgeWV0IGJlZW4gcHJvY2Vzc2VkLiBCdXQgaXQgbWlnaHQg
YmUgYmV0dGVyIHRvIHNraXAgYWhlYWQgdG8gc29tZSBvdGhlciBEaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZQotICAgIC8vIG1lc3NhZ2UsIGlmIG11bHRpcGxlIERpZFVwZGF0ZUJhY2tpbmdTdG9y
ZVN0YXRlIG1lc3NhZ2VzIGFyZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZC4gRm9yIGluc3RhbmNl
LCB3ZSBjb3VsZAotICAgIC8vIGNob29zZSB0aGUgbW9zdCByZWNlbnQgb25lLCBvciB0aGUgb25l
IHRoYXQgaXMgY2xvc2VzdCB0byBvdXIgY3VycmVudCBzaXplLgotCi0gICAgLy8gVGhlIHRpbWVv
dXQsIGluIHNlY29uZHMsIHdlIHVzZSB3aGVuIHdhaXRpbmcgZm9yIGEgRGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUgbWVzc2FnZSB3aGVuIHdlJ3JlIGFza2VkIHRvIHBhaW50LgotICAgIG1fd2Vi
UGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRjaEltbWVk
aWF0ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNraW5nU3RvcmVT
dGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMo
NTAwKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjplbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNv
bnRleHQpCi17Ci0gICAgQVNTRVJUKCFpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7
Ci0KLSAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBsYXllclRyZWVDb250ZXh0OwotICAgIG1fd2Vi
UGFnZVByb3h5LmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4
dCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjpzZXRWaXNpYmxlQ29u
dGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBtX2Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2li
bGVDb250ZW50c1JlY3QsIHRyYWplY3RvcnlWZWN0b3IpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
RHJhd2luZ0FyZWFQcm94eTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKLXsKLSAg
ICBBU1NFUlQoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwotCi0gICAgbV9sYXll
clRyZWVDb250ZXh0ID0gTGF5ZXJUcmVlQ29udGV4dCgpOwotICAgIG1fd2ViUGFnZVByb3h5LmV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJh
d2luZ0FyZWFQcm94eTo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKLXsKLSAgICBBU1NFUlQoaXNJbkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwotCi0gICAgbV9sYXllclRyZWVDb250ZXh0ID0gbGF5
ZXJUcmVlQ29udGV4dDsKLSAgICBtX3dlYlBhZ2VQcm94eS51cGRhdGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjYzY2ViOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5X2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5X2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUg
IkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRl
ICJMYXllclRyZWVDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgUmVnaW9uOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7Ci0KLWNsYXNzIENvb3JkaW5hdGVk
RHJhd2luZ0FyZWFQcm94eSA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKLXB1YmxpYzoKLSAg
ICBleHBsaWNpdCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVByb3h5Jik7Ci0g
ICAgdmlydHVhbCB+Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KCk7Ci0KLSAgICBib29sIGlz
SW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuICFtX2xheWVyVHJl
ZUNvbnRleHQuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKCk7Ci0K
LSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiB2aXNpYmxlQ29udGVudHNSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0
b3J5KTsKLQotICAgIGJvb2wgaGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZTsgfQotCi0gICAgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkmIGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkgY29uc3QgeyByZXR1cm4g
Km1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuZ2V0KCk7IH0KLQotICAgIFdlYkNvcmU6
OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzUmVj
dCgpOyB9Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2
b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Ci0KLSAgICBXZWJQYWdlUHJveHkmIHBhZ2UoKSB7IHJldHVy
biBtX3dlYlBhZ2VQcm94eTsgfQotICAgIAotICAgIHZvaWQgZGlzcGF0Y2hBZnRlckVuc3VyaW5n
RHJhd2luZyhzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+KSBvdmVycmlk
ZTsKLQotcHJpdmF0ZToKLSAgICAvLyBEcmF3aW5nQXJlYVByb3h5Ci0gICAgdmlydHVhbCB2b2lk
IHNpemVEaWRDaGFuZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRD
aGFuZ2UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9yQmFja2luZ1N0b3JlVXBkYXRlT25O
ZXh0UGFpbnQoKTsKLQotICAgIC8vIElQQyBtZXNzYWdlIGhhbmRsZXJzCi0gICAgdmlydHVhbCB2
b2lkIGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRl
SUQsIGNvbnN0IFVwZGF0ZUluZm8mLCBjb25zdCBMYXllclRyZWVDb250ZXh0Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2lu
Z1N0b3JlU3RhdGVJRCwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3Rh
dGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBM
YXllclRyZWVDb250ZXh0Jik7Ci0KLSAgICBlbnVtIFJlc3BvbmRJbW1lZGlhdGVseU9yTm90IHsg
RG9Ob3RSZXNwb25kSW1tZWRpYXRlbHksIFJlc3BvbmRJbW1lZGlhdGVseSB9OwotICAgIHZvaWQg
YmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QpOwotICAg
IHZvaWQgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJbW1lZGlhdGVseU9yTm90
KTsKLSAgICB2b2lkIHdhaXRGb3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
KCk7Ci0KLSAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYpOwotICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KCk7Ci0gICAgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0Jik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk+IG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7Ci0KLSAgICAvLyBU
aGUgc3RhdGUgSUQgY29ycmVzcG9uZGluZyB0byBvdXIgY3VycmVudCBiYWNraW5nIHN0b3JlLiBV
cGRhdGVkIHdoZW5ldmVyIHdlIGFsbG9jYXRlCi0gICAgLy8gYSBuZXcgYmFja2luZyBzdG9yZS4g
QW55IG1lc3NhZ2VzIHJlY2VpdmVkIHRoYXQgY29ycmVzcG9uZCB0byBhbiBlYXJsaWVyIHN0YXRl
IGFyZSBpZ25vcmVkLAotICAgIC8vIGFzIHRoZXkgZG9uJ3QgYXBwbHkgdG8gb3VyIGN1cnJlbnQg
YmFja2luZyBzdG9yZS4KLSAgICB1aW50NjRfdCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlE
OwotCi0gICAgLy8gVGhlIG5leHQgYmFja2luZyBzdG9yZSBzdGF0ZSBJRCB3ZSB3aWxsIHJlcXVl
c3QgdGhlIHdlYiBwcm9jZXNzIHVwZGF0ZSB0by4gSW5jcmVtZW50ZWQKLSAgICAvLyB3aGVuZXZl
ciBvdXIgc3RhdGUgY2hhbmdlcyBpbiBhIHdheSB0aGF0IHdpbGwgcmVxdWlyZSBhIG5ldyBiYWNr
aW5nIHN0b3JlIHRvIGJlIGFsbG9jYXRlZC4KLSAgICB1aW50NjRfdCBtX25leHRCYWNraW5nU3Rv
cmVTdGF0ZUlEOwotCi0gICAgLy8gVGhlIGN1cnJlbnQgbGF5ZXIgdHJlZSBjb250ZXh0LgotICAg
IExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotCi0gICAgLy8gV2hldGhlciB3
ZSd2ZSBzZW50IGEgVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSBhbmQgYXJlIG5vdyB3
YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UuCi0gICAgLy8g
VXNlZCB0byB0aHJvdHRsZSBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlcyBzbyB3ZSBk
b24ndCBzZW5kIHRoZW0gZmFzdGVyIHRoYW4gdGhlIFdlYiBwcm9jZXNzIGNhbiBoYW5kbGUuCi0g
ICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlOwotCi0gICAg
Ly8gRm9yIGEgbmV3IERyYXdpbmcgQXJlYSBkb24ndCBkcmF3IGFueXRoaW5nIHVudGlsIHRoZSBX
ZWJQcm9jZXNzIGhhcyBzZW50IG92ZXIgdGhlIGZpcnN0IGNvbnRlbnQuCi0gICAgYm9vbCBtX2hh
c1JlY2VpdmVkRmlyc3RVcGRhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNlbmRpZiAvLyBDb29yZGluYXRlZERy
YXdpbmdBcmVhUHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuY3BwCmluZGV4IGUyYzY2OTAuLjZkMWFmZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTIwLDEw
ICsyMCw5IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQogI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAKLSNpbmNsdWRlICJDb29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKQEAgLTM0LDIyICszMywyMiBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShD
b29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCi0gICAgOiBtX2Ry
YXdpbmdBcmVhUHJveHkoZHJhd2luZ0FyZWFQcm94eSkKK0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShXZWJQYWdlUHJveHkmIHdlYlBh
Z2VQcm94eSkKKyAgICA6IG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKICAgICAsIG1fc2Nl
bmUoYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSh0aGlzKSkpCiB7Ci0gICAg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkucHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkucGFnZUlEKCksICp0aGlzKTsKKyAgICBt
X3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBh
Z2VQcm94eS5wYWdlSUQoKSwgKnRoaXMpOwogfQogCiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkKIHsKLSAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS5wYWdlSUQoKSk7CisgICAgbV93ZWJQYWdlUHJveHku
cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFn
ZUlEKCkpOwogICAgIG1fc2NlbmUtPmRldGFjaCgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiB7Ci0gICAgbV9kcmF3aW5nQXJlYVBy
b3h5LT51cGRhdGVWaWV3cG9ydCgpOworICAgIG1fd2ViUGFnZVByb3h5LnNldFZpZXdOZWVkc0Rp
c3BsYXkoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3dlYlBhZ2VQcm94eS52aWV3U2l6ZSgp
KSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBk
YXRlKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbikKQEAgLTY1LDkgKzY0LDcgQEAgdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlKGNvbnN0IENvb3JkaW4KICAgICB9KTsKIAogICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKLSAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS5kaWRSZW5kZXJGcmFtZShncmFwaGljc1N0YXRlLmNvbnRlbnRzU2l6
ZSwgZ3JhcGhpY3NTdGF0ZS5jb3ZlcmVkUmVjdCk7Ci0jZW5kaWYKKyAgICBtX3dlYlBhZ2VQcm94
eS5kaWRSZW5kZXJGcmFtZShncmFwaGljc1N0YXRlLmNvbnRlbnRzU2l6ZSwgZ3JhcGhpY3NTdGF0
ZS5jb3ZlcmVkUmVjdCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQpAQCAtNzUsMjAgKzcyLDIwIEBAIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0CiAgICAgaWYgKHJlY3QgPT0gbV9sYXN0U2VudFZpc2libGVSZWN0ICYmIHRy
YWplY3RvcnlWZWN0b3IgPT0gbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3IpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50c1JlY3Qo
cmVjdCwgdHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLnBhZ2VJ
RCgpKTsKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHRyYWplY3Rv
cnlWZWN0b3IpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7CiAgICAgbV9sYXN0U2VudFZpc2li
bGVSZWN0ID0gcmVjdDsKICAgICBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvciA9IHRyYWplY3Rv
cnlWZWN0b3I7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRl
ck5leHRGcmFtZSgpCiB7Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkucHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1l
KCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLnBhZ2VJRCgpKTsKKyAgICBtX3dlYlBhZ2VQ
cm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpS
ZW5kZXJOZXh0RnJhbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOwogfQogCiB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3Qg
bGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQogewotICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OkNvbW1pdFNjcm9sbE9mZnNldChsYXllcklELCBvZmZzZXQpLCBtX2RyYXdpbmdBcmVhUHJv
eHktPnBhZ2UoKS5wYWdlSUQoKSk7CisgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29tbWl0U2Nyb2xsT2Zmc2V0KGxh
eWVySUQsIG9mZnNldCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKIH0KIAogfQotI2VuZGlm
IC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1NfTVVMVElQUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggNGYzOGRjNS4uZTQ0NzQ4MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0zNSwxMyAr
MzUsMTMgQEAgY2xhc3MgSW50U2l6ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIENv
b3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKIAogY2xhc3Mg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lQ2xpZW50LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KTsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eShDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkqKTsKKyAgICBleHBsaWNp
dCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShXZWJQYWdlUHJveHkmKTsKICAgICB2aXJ0
dWFsIH5Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpOwogCiAgICAgdm9pZCBjb21taXRD
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlJik7CkBAIC02MCw3ICs2MCw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpNZXNzYWdlRGVjb2RlciYpIG92ZXJyaWRlOwogCi0gICAgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7CisgICAgV2ViUGFnZVByb3h5JiBtX3dlYlBh
Z2VQcm94eTsKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lPiBtX3NjZW5lOwog
ICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2xhc3RTZW50VmlzaWJsZVJlY3Q7CiAgICAgV2ViQ29y
ZTo6RmxvYXRQb2ludCBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1BhZ2VWaWV3cG9ydENv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKaW5kZXggMTcxNTY1Ny4uMzFlMDQ0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvUGFn
ZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKQEAgLTIyLDcgKzIy
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9s
bGVyLmgiCiAKLSNpbmNsdWRlICJDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNs
dWRlICJBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KQEAgLTI2MywxMyArMjYzLDEzIEBAIHZvaWQgUGFnZVZp
ZXdwb3J0Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQ29udGVudHNWaXNpYmlsaXR5KGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0CiAKIGJvb2wgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6c3luY1Zpc2libGVD
b250ZW50cyhjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewotICAgIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxDb29yZGlu
YXRlZERyYXdpbmdBcmVhUHJveHkqPihtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSk7Cisg
ICAgYXV0byogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxBY2NlbGVyYXRlZEFyZWFQcm94eSo+
KG1fd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsKICAgICBpZiAoIWRyYXdpbmdBcmVhIHx8
IG1fdmlld3BvcnRTaXplLmlzRW1wdHkoKSB8fCBtX2NvbnRlbnRzU2l6ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0
KGJvdW5kQ29udGVudHNQb3NpdGlvbihtX2NvbnRlbnRzUG9zaXRpb24pLCB2aXNpYmxlQ29udGVu
dHNTaXplKCkpOwogICAgIHZpc2libGVDb250ZW50c1JlY3QuaW50ZXJzZWN0KEZsb2F0UmVjdChG
bG9hdFBvaW50Ojp6ZXJvKCksIG1fY29udGVudHNTaXplKSk7Ci0gICAgZHJhd2luZ0FyZWEtPnNl
dFZpc2libGVDb250ZW50c1JlY3QodmlzaWJsZUNvbnRlbnRzUmVjdCwgdHJhamVjdG9yeVZlY3Rv
cik7CisgICAgZHJhd2luZ0FyZWEtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkuc2V0
VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0LCB0cmFqZWN0b3J5VmVjdG9y
KTsKIAogICAgIGlmICghbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuKQogICAgICAgICBtX2NsaWVu
dC5kaWRDaGFuZ2VWaXNpYmxlQ29udGVudHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IDI0NzYyOTYuLmVmY2FiNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNw
cApAQCAtNDEsMjYgKzQxLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIERyYXdpbmdBcmVhUHJveHlJbXBsOjpEcmF3aW5nQXJlYVByb3h5SW1wbChX
ZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKLSAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJhd2lu
Z0FyZWFUeXBlSW1wbCwgd2ViUGFnZVByb3h5KQotICAgICwgbV9jdXJyZW50QmFja2luZ1N0b3Jl
U3RhdGVJRCgwKQotICAgICwgbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCgwKQotICAgICwgbV9p
c1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShmYWxzZSkKLSAgICAsIG1faGFz
UmVjZWl2ZWRGaXJzdFVwZGF0ZShmYWxzZSkKLSAgICAsIG1faXNCYWNraW5nU3RvcmVEaXNjYXJk
YWJsZSh0cnVlKQorICAgIDogQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5KHdlYlBhZ2VQcm94
eSkKICAgICAsIG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwg
dGhpcywgJkRyYXdpbmdBcmVhUHJveHlJbXBsOjpkaXNjYXJkQmFja2luZ1N0b3JlKQogewogfQog
CiBEcmF3aW5nQXJlYVByb3h5SW1wbDo6fkRyYXdpbmdBcmVhUHJveHlJbXBsKCkKIHsKLSAgICAv
LyBNYWtlIHN1cmUgdG8gZXhpdCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLgotICAgIGlm
IChpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkKLSAgICAgICAgZXhpdEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKCk7Ci19Ci0KLWJvb2wgRHJhd2luZ0FyZWFQcm94eUltcGw6OmFs
d2F5c1VzZUNvbXBvc2l0aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlUHJveHku
cHJlZmVyZW5jZXMoKS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpICYmIG1fd2ViUGFn
ZVByb3h5LnByZWZlcmVuY2VzKCkuZm9yY2VDb21wb3NpdGluZ01vZGUoKTsKIH0KIAogdm9pZCBE
cmF3aW5nQXJlYVByb3h5SW1wbDo6cGFpbnQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBSZWdpb24mIHVucGFpbnRlZFJl
Z2lvbikKQEAgLTc4LDggKzY1LDggQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6cGFpbnQo
QmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBjb250ZXh0LAogCiAgICAgICAg
IC8vIElmIHdlIGhhdmVuJ3QgeWV0IHJlY2VpdmVkIG91ciBmaXJzdCBiaXRzIGZyb20gdGhlIFdl
YlByb2Nlc3MgdGhlbiBkb24ndCBwYWludCBhbnl0aGluZy4KICAgICAgICAgaWYgKCFtX2hhc1Jl
Y2VpdmVkRmlyc3RVcGRhdGUpCi0gICAgICAgICAgICByZXR1cm47ICAgICAgICAKLSAgICAgICAg
CisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgaWYgKG1faXNXYWl0aW5nRm9yRGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUpIHsKICAgICAgICAgICAgIC8vIFdhaXQgZm9yIGEgRGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSB0aGF0IGNvbnRhaW5zIHRoZSBuZXcgYml0cyBi
ZWZvcmUgd2UgcGFpbnQKICAgICAgICAgICAgIC8vIHdoYXQncyBjdXJyZW50bHkgaW4gdGhlIGJh
Y2tpbmcgc3RvcmUuCkBAIC0xMDYsMTYgKzkzLDYgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1w
bDo6cGFpbnQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBjb250ZXh0LAog
ICAgIGRpc2NhcmRCYWNraW5nU3RvcmVTb29uKCk7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OnNpemVEaWRDaGFuZ2UoKQotewotICAgIGJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdl
KFJlc3BvbmRJbW1lZGlhdGVseSk7Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRl
dmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkKLXsKLSAgICBiYWNraW5nU3RvcmVTdGF0ZURpZENo
YW5nZShSZXNwb25kSW1tZWRpYXRlbHkpOwotfQotCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBs
OjpzZXRCYWNraW5nU3RvcmVJc0Rpc2NhcmRhYmxlKGJvb2wgaXNCYWNraW5nU3RvcmVEaXNjYXJk
YWJsZSkKIHsKICAgICBpZiAobV9pc0JhY2tpbmdTdG9yZURpc2NhcmRhYmxlID09IGlzQmFja2lu
Z1N0b3JlRGlzY2FyZGFibGUpCkBAIC0xMjgsMTEgKzEwNSw2IEBAIHZvaWQgRHJhd2luZ0FyZWFQ
cm94eUltcGw6OnNldEJhY2tpbmdTdG9yZUlzRGlzY2FyZGFibGUoYm9vbCBpc0JhY2tpbmdTdG9y
ZURpc2NhCiAgICAgICAgIG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyLnN0b3AoKTsKIH0KIAot
dm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6d2FpdEZvckJhY2tpbmdTdG9yZVVwZGF0ZU9uTmV4
dFBhaW50KCkKLXsKLSAgICBtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUgPSB0cnVlOwotfQotCiB2
b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjp1cGRhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3Rh
dGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIHsKICAgICBBU1NFUlRfQVJHKGJh
Y2tpbmdTdG9yZVN0YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9jdXJyZW50QmFja2lu
Z1N0b3JlU3RhdGVJRCk7CkBAIC0xNDcsNDEgKzExOSw3IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OnVwZGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJ
bmZvCiAKIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0
YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8sIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCiB7Ci0gICAg
QVNTRVJUX0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1f
bmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3Rh
dGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA+IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQp
OwotICAgIG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQgPSBiYWNraW5nU3RvcmVTdGF0ZUlE
OwotCi0gICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9IGZhbHNl
OwotCi0gICAgLy8gU3RvcCB0aGUgcmVzcG9uc2l2ZW5lc3MgdGltZXIgdGhhdCB3YXMgc3RhcnRl
ZCBpbiBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUuCi0gICAgbV93ZWJQYWdlUHJveHkucHJv
Y2VzcygpLnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdG9wKCk7Ci0KLSAgICBpZiAobGF5ZXJUcmVl
Q29udGV4dCAhPSBtX2xheWVyVHJlZUNvbnRleHQpIHsKLSAgICAgICAgaWYgKGxheWVyVHJlZUNv
bnRleHQuaXNFbXB0eSgpICYmICFtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgICAgIEFT
U0VSVChtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKTsKLSAgICAgICAgfSBlbHNlIGlmICgh
bGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkgJiYgbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHko
KSkgewotICAgICAgICAgICAgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRy
ZWVDb250ZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVChsYXllclRyZWVDb250ZXh0ID09IG1fbGF5
ZXJUcmVlQ29udGV4dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1cGRhdGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKLSAgICAgICAgICAgIEFT
U0VSVChsYXllclRyZWVDb250ZXh0ID09IG1fbGF5ZXJUcmVlQ29udGV4dCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAobV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCAhPSBtX2N1cnJlbnRC
YWNraW5nU3RvcmVTdGF0ZUlEKQotICAgICAgICBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUo
UmVzcG9uZEltbWVkaWF0ZWx5KTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9oYXNSZWNlaXZlZEZp
cnN0VXBkYXRlID0gdHJ1ZTsKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0o
R1RLKSAmJiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgICAgIGlmICht
X3BlbmRpbmdOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpIHsKLSAgICAgICAgICAg
IHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyhtX3BlbmRpbmdOYXRpdmVTdXJm
YWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpOwotICAgICAgICAgICAgbV9wZW5kaW5nTmF0aXZlU3Vy
ZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nID0gMDsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQot
CisgICAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpkaWRVcGRhdGVCYWNraW5nU3RvcmVT
dGF0ZShiYWNraW5nU3RvcmVTdGF0ZUlELCB1cGRhdGVJbmZvLCBsYXllclRyZWVDb250ZXh0KTsK
ICAgICBpZiAoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpIHsKICAgICAgICAgQVNT
RVJUKCFtX2JhY2tpbmdTdG9yZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE5MywzNSArMTMxLDE3
IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
KHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlCiAgICAgaW5jb3Jwb3JhdGVVcGRhdGUodXBkYXRl
SW5mbyk7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgTGF5ZXJU
cmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKLXsKLSAgICBBU1NFUlRfQVJHKGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9jdXJyZW50QmFja2luZ1N0b3Jl
U3RhdGVJRCk7Ci0gICAgaWYgKGJhY2tpbmdTdG9yZVN0YXRlSUQgPCBtX2N1cnJlbnRCYWNraW5n
U3RvcmVTdGF0ZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwotfQotCiB2b2lkIERyYXdpbmdBcmVhUHJv
eHlJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0
b3JlU3RhdGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIHsKICAgICBBU1NFUlRf
QVJHKGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9jdXJyZW50
QmFja2luZ1N0b3JlU3RhdGVJRCk7CiAgICAgaWYgKGJhY2tpbmdTdG9yZVN0YXRlSUQgPCBtX2N1
cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKQogICAgICAgICByZXR1cm47CiAKLSAgICBleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKKyAgICBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJv
eHk6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwogCiAgICAgaW5jb3Jwb3JhdGVV
cGRhdGUodXBkYXRlSW5mbyk7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnVwZGF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQs
IGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJU
X0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fY3VycmVu
dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAgIGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEIDwgbV9j
dXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdXBkYXRl
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Ci19Ci0KIHZvaWQg
RHJhd2luZ0FyZWFQcm94eUltcGw6OmluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8m
IHVwZGF0ZUluZm8pCiB7CiAgICAgQVNTRVJUKCFpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoKSk7CkBAIC0yNDMsMTE1ICsxNjMsMTAgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6
aW5jb3Jwb3JhdGVVcGRhdGUoY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKICAgICBtX3dl
YlBhZ2VQcm94eS5zZXRWaWV3TmVlZHNEaXNwbGF5KGRhbWFnZVJlZ2lvbik7CiB9CiAKLXZvaWQg
RHJhd2luZ0FyZWFQcm94eUltcGw6OmJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKFJlc3BvbmRJ
bW1lZGlhdGVseU9yTm90IHJlc3BvbmRJbW1lZGlhdGVseU9yTm90KQotewotICAgICsrbV9uZXh0
QmFja2luZ1N0b3JlU3RhdGVJRDsKLSAgICBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUocmVz
cG9uZEltbWVkaWF0ZWx5T3JOb3QpOwotfQotCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpz
ZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoUmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QgcmVzcG9u
ZEltbWVkaWF0ZWx5T3JOb3QpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudEJhY2tpbmdTdG9yZVN0
YXRlSUQgPCBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKLQotICAgIGlmICghbV93ZWJQYWdl
UHJveHkuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pc1dhaXRpbmdG
b3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fd2ViUGFnZVByb3h5LnZpZXdTaXplKCkuaXNFbXB0eSgpICYmICFtX3dlYlBhZ2VQcm94eS51
c2VGaXhlZExheW91dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzV2FpdGluZ0ZvckRp
ZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gcmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QgPT0gUmVz
cG9uZEltbWVkaWF0ZWx5OwotCi0gICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OkRyYXdpbmdBcmVhOjpVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShtX25leHRCYWNraW5n
U3RvcmVTdGF0ZUlELCByZXNwb25kSW1tZWRpYXRlbHlPck5vdCA9PSBSZXNwb25kSW1tZWRpYXRl
bHksIG1fd2ViUGFnZVByb3h5LmRldmljZVNjYWxlRmFjdG9yKCksIG1fc2l6ZSwgbV9zY3JvbGxP
ZmZzZXQpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7Ci0gICAgbV9zY3JvbGxPZmZzZXQgPSBJ
bnRTaXplKCk7Ci0KLSAgICBpZiAobV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVT
dGF0ZSkgewotICAgICAgICAvLyBTdGFydCB0aGUgcmVzcG9uc2l2ZW5lc3MgdGltZXIuIFdlIHdp
bGwgc3RvcCBpdCB3aGVuIHdlIGhlYXIgYmFjayBmcm9tIHRoZSBXZWJQcm9jZXNzCi0gICAgICAg
IC8vIGluIGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlLgotICAgICAgICBtX3dlYlBhZ2VQcm94
eS5wcm9jZXNzKCkucmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7Ci0gICAgfQotCi0gICAg
aWYgKG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgJiYgIW1fbGF5ZXJU
cmVlQ29udGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gV2FpdCBmb3IgdGhlIERpZFVwZGF0
ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UuIE5vcm1hbGx5IHdlIGRvIHRoaXMgaW4gRHJhd2lu
Z0FyZWFQcm94eUltcGw6OnBhaW50LCBidXQgdGhhdAotICAgICAgICAvLyBmdW5jdGlvbiBpcyBu
ZXZlciBjYWxsZWQgd2hlbiBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLgotICAgICAg
ICB3YWl0Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOwotICAgIH0K
LX0KLQotdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6d2FpdEZvckFuZERpc3BhdGNoRGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUoKQotewotICAgIEFTU0VSVChtX2lzV2FpdGluZ0ZvckRpZFVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKTsKLQotICAgIGlmICghbV93ZWJQYWdlUHJveHkuaXNWYWxp
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5z
dGF0ZSgpID09IFdlYlByb2Nlc3NQcm94eTo6U3RhdGU6OkxhdW5jaGluZykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRklYTUU6IHdhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5IHdpbGwg
YWx3YXlzIHJldHVybiB0aGUgb2xkZXN0IERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3Nh
Z2UgdGhhdAotICAgIC8vIGhhc24ndCB5ZXQgYmVlbiBwcm9jZXNzZWQuIEJ1dCBpdCBtaWdodCBi
ZSBiZXR0ZXIgdG8gc2tpcCBhaGVhZCB0byBzb21lIG90aGVyIERpZFVwZGF0ZUJhY2tpbmdTdG9y
ZVN0YXRlCi0gICAgLy8gbWVzc2FnZSwgaWYgbXVsdGlwbGUgRGlkVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGUgbWVzc2FnZXMgYXJlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkLiBGb3IgaW5zdGFuY2Us
IHdlIGNvdWxkCi0gICAgLy8gY2hvb3NlIHRoZSBtb3N0IHJlY2VudCBvbmUsIG9yIHRoZSBvbmUg
dGhhdCBpcyBjbG9zZXN0IHRvIG91ciBjdXJyZW50IHNpemUuCi0KLSAgICAvLyBUaGUgdGltZW91
dCB3ZSB1c2Ugd2hlbiB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1l
c3NhZ2Ugd2hlbiB3ZSdyZSBhc2tlZCB0byBwYWludCBpcyA1MDAgbWlsbGlzZWNvbmRzLgotICAg
IG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRj
aEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNraW5n
U3RvcmVTdGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMoNTAwKSk7Ci19Ci0KIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29u
dGV4dCkKIHsKLSAgICBBU1NFUlQoYWx3YXlzVXNlQ29tcG9zaXRpbmcoKSB8fCAhaXNJbkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwotCiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRy
OwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7Ci0gICAgbV93ZWJQ
YWdlUHJveHkuZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0
KTsKLX0KLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKSAmJiAhVVNF
KFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBs
OjpzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QgaGFuZGxlKQot
ewotICAgIGlmICghbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlKSB7Ci0gICAgICAgIG1fcGVuZGlu
Z05hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyA9IGhhbmRsZTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
RHJhd2luZ0FyZWE6OlNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyhoYW5kbGUp
LCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSwgSVBDOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldh
aXRpbmdGb3JTeW5jUmVwbHkpOwotfQotCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpkZXN0
cm95TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCkKLXsKLSAgICBpZiAobV9wZW5k
aW5nTmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKSB7Ci0gICAgICAgIG1fcGVuZGlu
Z05hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyA9IDA7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgYm9vbCBoYW5kbGVkOwotICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5z
ZW5kU3luYyhNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxl
Rm9yQ29tcG9zaXRpbmcoKSwgTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpEZXN0cm95TmF0aXZlU3Vy
ZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nOjpSZXBseShoYW5kbGVkKSwgbV93ZWJQYWdlUHJveHku
cGFnZUlEKCkpOwotfQotI2VuZGlmCi0KLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpc3Bh
dGNoQWZ0ZXJFbnN1cmluZ0RyYXdpbmcoc3RkOjpmdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6
OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKLXsKLSAgICBpZiAoIW1fd2ViUGFnZVByb3h5Lmlz
VmFsaWQoKSkgewotICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6
Ok93bmVyV2FzSW52YWxpZGF0ZWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjYWxsYmFja0Z1bmN0aW9uXSB7IGNhbGxiYWNrRnVuY3Rp
b24oQ2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7IH0pOwotfQotCi12b2lkIERyYXdpbmdBcmVh
UHJveHlJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotICAgIEFTU0VS
VChpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7Ci0KLSAgICBtX2xheWVyVHJlZUNv
bnRleHQgPSBMYXllclRyZWVDb250ZXh0KCk7Ci0gICAgbV93ZWJQYWdlUHJveHkuZXhpdEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6
OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQm
IGxheWVyVHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSgpKTsKLQotICAgIG1fbGF5ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7
Ci0gICAgbV93ZWJQYWdlUHJveHkudXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5
ZXJUcmVlQ29udGV4dCk7CisgICAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjplbnRlckFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwogfQogCiB2b2lkIERy
YXdpbmdBcmVhUHJveHlJbXBsOjpkaXNjYXJkQmFja2luZ1N0b3JlU29vbigpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IDFlZDZkMDAu
LjAxMWM0ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5SW1wbC5oCkBAIC0yNiw5ICsyNiw5IEBACiAjaWZuZGVmIERyYXdpbmdBcmVhUHJveHlJbXBs
X2gKICNkZWZpbmUgRHJhd2luZ0FyZWFQcm94eUltcGxfaAogCisjaW5jbHVkZSAiQWNjZWxlcmF0
ZWREcmF3aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVk
ZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNyw4MSAr
MzcsMzIgQEAgY2xhc3MgUmVnaW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgRHJh
d2luZ0FyZWFQcm94eUltcGwgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94eSB7CitjbGFzcyBEcmF3
aW5nQXJlYVByb3h5SW1wbCBmaW5hbCA6IHB1YmxpYyBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJv
eHkgewogcHVibGljOgogICAgIGV4cGxpY2l0IERyYXdpbmdBcmVhUHJveHlJbXBsKFdlYlBhZ2VQ
cm94eSYpOwogICAgIHZpcnR1YWwgfkRyYXdpbmdBcmVhUHJveHlJbXBsKCk7CiAKICAgICB2b2lk
IHBhaW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBXZWJDb3JlOjpSZWdpb24mIHVucGFpbnRlZFJlZ2lvbik7CiAKLSAgICBi
b29sIGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGFsd2F5
c1VzZUNvbXBvc2l0aW5nKCkgfHwgIW1fbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCk7IH0KLQot
ICAgIGJvb2wgaGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmVj
ZWl2ZWRGaXJzdFVwZGF0ZTsgfQotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBQTEFURk9S
TShHVEspICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLSAgICB2b2lkIHNl
dE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCk7Ci0gICAgdm9pZCBk
ZXN0cm95TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCk7Ci0jZW5kaWYKLQotICAg
IHZvaWQgZGlzcGF0Y2hBZnRlckVuc3VyaW5nRHJhd2luZyhzdGQ6OmZ1bmN0aW9uPHZvaWQgKENh
bGxiYWNrQmFzZTo6RXJyb3IpPikgb3ZlcnJpZGU7Ci0KIHByaXZhdGU6CiAgICAgLy8gRHJhd2lu
Z0FyZWFQcm94eQotICAgIHZvaWQgc2l6ZURpZENoYW5nZSgpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSBvdmVycmlkZTsKLQogICAgIHZvaWQgc2V0QmFj
a2luZ1N0b3JlSXNEaXNjYXJkYWJsZShib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHdhaXRGb3JC
YWNraW5nU3RvcmVVcGRhdGVPbk5leHRQYWludCgpIG92ZXJyaWRlOwogCiAgICAgLy8gSVBDIG1l
c3NhZ2UgaGFuZGxlcnMKICAgICB2b2lkIHVwZGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0
ZUlELCBjb25zdCBVcGRhdGVJbmZvJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRVcGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJ
bmZvJiwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBj
b25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgVXBk
YXRlSW5mbyYpIG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgTGF5ZXJUcmVlQ29udGV4
dCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBpbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJ
bmZvJik7CiAKLSAgICBlbnVtIFJlc3BvbmRJbW1lZGlhdGVseU9yTm90IHsgRG9Ob3RSZXNwb25k
SW1tZWRpYXRlbHksIFJlc3BvbmRJbW1lZGlhdGVseSB9OwotICAgIHZvaWQgYmFja2luZ1N0b3Jl
U3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QpOwotICAgIHZvaWQgc2VuZFVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJbW1lZGlhdGVseU9yTm90KTsKLSAgICB2b2lk
IHdhaXRGb3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCk7Ci0KLSAgICB2
b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4
dCYpOwotICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7Ci0gICAgdm9p
ZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0
Jik7Ci0gICAgYm9vbCBhbHdheXNVc2VDb21wb3NpdGluZygpIGNvbnN0OworICAgIHZvaWQgZW50
ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIGRpc2NhcmRCYWNraW5nU3RvcmVTb29uKCk7CiAgICAgdm9pZCBk
aXNjYXJkQmFja2luZ1N0b3JlKCk7CiAKLSAgICAvLyBUaGUgc3RhdGUgSUQgY29ycmVzcG9uZGlu
ZyB0byBvdXIgY3VycmVudCBiYWNraW5nIHN0b3JlLiBVcGRhdGVkIHdoZW5ldmVyIHdlIGFsbG9j
YXRlCi0gICAgLy8gYSBuZXcgYmFja2luZyBzdG9yZS4gQW55IG1lc3NhZ2VzIHJlY2VpdmVkIHRo
YXQgY29ycmVzcG9uZCB0byBhbiBlYXJsaWVyIHN0YXRlIGFyZSBpZ25vcmVkLAotICAgIC8vIGFz
IHRoZXkgZG9uJ3QgYXBwbHkgdG8gb3VyIGN1cnJlbnQgYmFja2luZyBzdG9yZS4KLSAgICB1aW50
NjRfdCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEOwotCi0gICAgLy8gVGhlIG5leHQgYmFj
a2luZyBzdG9yZSBzdGF0ZSBJRCB3ZSB3aWxsIHJlcXVlc3QgdGhlIHdlYiBwcm9jZXNzIHVwZGF0
ZSB0by4gSW5jcmVtZW50ZWQKLSAgICAvLyB3aGVuZXZlciBvdXIgc3RhdGUgY2hhbmdlcyBpbiBh
IHdheSB0aGF0IHdpbGwgcmVxdWlyZSBhIG5ldyBiYWNraW5nIHN0b3JlIHRvIGJlIGFsbG9jYXRl
ZC4KLSAgICB1aW50NjRfdCBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEOwotCi0gICAgLy8gVGhl
IGN1cnJlbnQgbGF5ZXIgdHJlZSBjb250ZXh0LgotICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXll
clRyZWVDb250ZXh0OwotCi0gICAgLy8gV2hldGhlciB3ZSd2ZSBzZW50IGEgVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUgbWVzc2FnZSBhbmQgYXJlIG5vdyB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UuCi0gICAgLy8gVXNlZCB0byB0aHJvdHRsZSBVcGRhdGVC
YWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlcyBzbyB3ZSBkb24ndCBzZW5kIHRoZW0gZmFzdGVyIHRo
YW4gdGhlIFdlYiBwcm9jZXNzIGNhbiBoYW5kbGUuCi0gICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRp
ZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlOwotICAgIAotICAgIC8vIEZvciBhIG5ldyBEcmF3aW5n
IEFyZWEgZG9uJ3QgZHJhdyBhbnl0aGluZyB1bnRpbCB0aGUgV2ViUHJvY2VzcyBoYXMgc2VudCBv
dmVyIHRoZSBmaXJzdCBjb250ZW50LgotICAgIGJvb2wgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRl
OwotCi0gICAgYm9vbCBtX2lzQmFja2luZ1N0b3JlRGlzY2FyZGFibGU7CisgICAgYm9vbCBtX2lz
QmFja2luZ1N0b3JlRGlzY2FyZGFibGUgeyB0cnVlIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJh
Y2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0KICAgICBSdW5Mb29wOjpUaW1lcjxEcmF3aW5n
QXJlYVByb3h5SW1wbD4gbV9kaXNjYXJkQmFja2luZ1N0b3JlVGltZXI7Ci0KLSNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykKLSAgICB1aW50NjRfdCBtX3BlbmRpbmdOYXRp
dmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcgeyAwIH07Ci0jZW5kaWYKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAK
aW5kZXggYTE4YWMwMS4uZDdmN2I0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dl
YlZpZXcuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiAjaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJDb29yZGlu
YXRlZERyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJBY2NlbGVyYXRlZERyYXdpbmdBcmVh
UHJveHkuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCIKICNpbmNsdWRl
ICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgIkRvd25sb2FkTWFu
YWdlckVmbC5oIgpAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgV2ViVmlldzo6c2V0VmlzaWJsZShi
b29sIHZpc2libGUpCiAgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKICAgICBtX3BhZ2UtPnZpZXdT
dGF0ZURpZENoYW5nZShWaWV3U3RhdGU6OklzVmlzaWJsZSk7CiAKLSAgICBpZiAoQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PENvb3JkaW5hdGVk
RHJhd2luZ0FyZWFQcm94eSo+KHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkpCisgICAgaWYgKGF1dG8q
IGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8QWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5Kj4o
cGFnZSgpLT5kcmF3aW5nQXJlYSgpKSkKICAgICAgICAgZHJhd2luZ0FyZWEtPnZpc2liaWxpdHlE
aWRDaGFuZ2UoKTsKIH0KIApAQCAtMzY4LDcgKzM2OCw3IEBAIEFmZmluZVRyYW5zZm9ybSBXZWJW
aWV3Ojp0cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3QKIAogQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KiBXZWJWaWV3Ojpjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKQogewotICAgIGlmIChDb29yZGlu
YXRlZERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5Kj4ocGFnZSgpLT5kcmF3aW5nQXJlYSgpKSkKKyAgICBpZiAoYXV0
byogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkq
PihwYWdlKCktPmRyYXdpbmdBcmVhKCkpKQogICAgICAgICByZXR1cm4gZHJhd2luZ0FyZWEtPmNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkuY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7
CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM3NiwxMiArMzc2LDEyIEBAIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSogV2ViVmlldzo6Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkKIAogdm9p
ZCBXZWJWaWV3Ojp1cGRhdGVWaWV3cG9ydFNpemUoKQogewotICAgIGlmIChDb29yZGluYXRlZERy
YXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWREcmF3
aW5nQXJlYVByb3h5Kj4ocGFnZSgpLT5kcmF3aW5nQXJlYSgpKSkgeworICAgIGlmIChhdXRvKiBk
cmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eSo+KHBh
Z2UoKS0+ZHJhd2luZ0FyZWEoKSkpIHsKICAgICAgICAgLy8gV2ViIFByb2Nlc3MgZXhwZWN0cyBz
aXplcyBpbiBVSSB1bml0cywgYW5kIG5vdCByYXcgZGV2aWNlIHVuaXRzLgogICAgICAgICBkcmF3
aW5nQXJlYS0+c2V0U2l6ZShyb3VuZGVkSW50U2l6ZShkaXBTaXplKCkpLCBJbnRTaXplKCksIElu
dFNpemUoKSk7CiAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KGNvbnRlbnRQ
b3NpdGlvbigpLCB2aXNpYmxlQ29udGVudHNTaXplKCkpOwogICAgICAgICB2aXNpYmxlQ29udGVu
dHNSZWN0LmludGVyc2VjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb250ZW50c1NpemUoKSkp
OwotICAgICAgICBkcmF3aW5nQXJlYS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlQ29u
dGVudHNSZWN0LCBGbG9hdFBvaW50KCkpOworICAgICAgICBkcmF3aW5nQXJlYS0+Y29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkoKS5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250
ZW50c1JlY3QsIEZsb2F0UG9pbnQoKSk7CiAgICAgfQogfQogCkBAIC00MDYsNyArNDA2LDcgQEAg
V2ViQ29yZTo6RmxvYXRTaXplIFdlYlZpZXc6OnZpc2libGVDb250ZW50c1NpemUoKSBjb25zdAog
CiBzdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gV2ViVmlldzo6Y3JlYXRlRHJhd2lu
Z0FyZWFQcm94eSgpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29vcmRpbmF0ZWRE
cmF3aW5nQXJlYVByb3h5PigqbV9wYWdlKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxB
Y2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk+KCptX3BhZ2UpOwogfQogCiB2b2lkIFdlYlZpZXc6
OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6UmVnaW9uJiByZWdpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285229</attachid>
            <date>2016-08-03 07:43:45 -0700</date>
            <delta_ts>2016-08-03 07:48:30 -0700</delta_ts>
            <desc>Try to fix EFL build</desc>
            <filename>wk2-drawing-area-proxy.diff</filename>
            <type>text/plain</type>
            <size>64184</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0MzIwYzQwLi5jMjU2ZWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzIg
QEAKKzIwMTYtMDgtMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIER1cGxpY2F0ZWQgY29kZSBpbiBEcmF3aW5nQXJlYVByb3h5SW1wbCBhbmQg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA1MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTYW1lIGxvZ2ljIGFzIGluIHIyMDI4NTUgYnV0IGluIHRoZSBV
SSBwcm9jZXNzLiBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkgaXMganVzdCBhIGNvcHkgcGFz
dGUgb2YKKyAgICAgICAgRHJhd2luZ0FyZWFQcm94eUltcGwgd2l0aCBub24tYWNjZWxlcmF0ZWQg
Y29kZSBwYXRoIHJlbW92ZWQuIFRoZXJlJ3MgYWN0dWFsbHkgbm90aGluZyAob3IgdmVyeSBsaXR0
bGUpIHNwZWNpZmljCisgICAgICAgIHRvIGNvb3JkaW5hdGVkIGdyYXBoaWNzIGluIHRoZSBDb29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHkgaW1wbGVtZW50YXRpb24uIFRoaXMgcGF0Y2ggcmVuYW1l
cworICAgICAgICBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkgYXMgQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYVByb3h5IGFuZCBtYWtlcyBEcmF3aW5nQXJlYVByb3h5SW1wbCBpbmhlcml0IGZyb20g
aXQsIHNvCisgICAgICAgIHRoYXQgaW4gY2FzZSBvZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB0
aGUgcGFyZW50IGNsYXNzIGlzIHVzZWQsIGFuZCBEcmF3aW5nQXJlYVByb3h5SW1wbCBvbmx5IGFk
ZHMgdGhlIG5vbgorICAgICAgICBhY2NlbGVyYXRlZCBjb2RlIHBhdGguCisgICAgICAgIFRvIHNp
bXBsaWZ5IHRoZSBjb21tb24gQVBJIG9mIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eSwgSSBo
YXZlIGNoYW5nZWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgdG8KKyAgICAgICAgcmVj
ZWl2ZSBhIFdlYlBhZ2VQcm94eSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZCBvZiBhIGRyYXdp
bmcgYXJlYSwgc2luY2UgdGhlIGRyYXdpbmcgYXJlYSB3YXMgdXNlZCBqdXN0IHRvIGdldAorICAg
ICAgICB0aGUgcGFnZSBwcm94eS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAg
ICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BY2NlbGVyYXRl
ZERyYXdpbmdBcmVhUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcC4K
KyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpBY2NlbGVyYXRl
ZERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdB
cmVhUHJveHk6On5BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0
OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OmFsd2F5c1VzZUNvbXBvc2l0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpkaXNwYXRjaEFmdGVy
RW5zdXJpbmdEcmF3aW5nKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJl
YVByb3h5OjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3
aW5nQXJlYVByb3h5OjpkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6dmlzaWJpbGl0eURpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckJhY2tp
bmdTdG9yZVVwZGF0ZU9uTmV4dFBhaW50KToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYVByb3h5OjpkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6QWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6YmFja2lu
Z1N0b3JlU3RhdGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdp
bmdBcmVhUHJveHk6OnNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckFuZERpc3BhdGNoRGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdp
bmdBcmVhUHJveHk6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGVzdHJveU5hdGl2ZVN1
cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FjY2VsZXJh
dGVkRHJhd2luZ0FyZWFQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmguCisg
ICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6aXNJbkFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5n
QXJlYVByb3h5Ojpjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdw
b3J0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNv
bW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRT
Y3JvbGxPZmZzZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnN5bmNWaXNpYmxlQ29udGVudHMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkRy
YXdpbmdBcmVhUHJveHlJbXBsOjpkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJv
eHlJbXBsOjp+RHJhd2luZ0FyZWFQcm94eUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6dXBkYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmluY29ycG9yYXRlVXBkYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmRpc2NhcmRCYWNraW5nU3RvcmVT
b29uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmRp
c2NhcmRCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Ojpjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Ojp1cGRhdGVWaWV3cG9ydFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpjcmVh
dGVEcmF3aW5nQXJlYVByb3h5KToKKwogMjAxNi0wOC0wMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQmFkIHBlcmZvcm1hbmNlIGlu
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUgd2l0aCB0aGUgbW9kZXNldHRpbmcgaW50ZWwg
ZHJpdmVyIGFuZCBEUkkzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMjAy
MGZiZS4uZmFhN2JiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTU0LDYgKzU0LDcg
QEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBTaGFyZWQvdW5peC9DaGlsZFBy
b2Nlc3NNYWluLmNwcAogCisgICAgVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eS5jcHAKICAgICBVSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAogICAgIFVJUHJvY2Vzcy9EZWZh
dWx0VW5kb0NvbnRyb2xsZXIuY3BwCiAgICAgVUlQcm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNv
ZGluZ05vbmUuY3BwCkBAIC0xMTIsNyArMTEzLDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VS
Q0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKIAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eS5jcHAKICAgICBVSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKICAg
ICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNw
cAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlBhZ2VQcm94eUNvb3JkaW5h
dGVkR3JhcGhpY3MuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5j
bWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDM2OWFhMDIuLjc4
ODk2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC04MSw2ICs4MSw3IEBAIGxpc3Qo
QVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL3VuaXgvQ2hpbGRQcm9jZXNzTWFp
bi5jcHAKIAorICAgIFVJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCiAg
ICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAKICAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9D
b250cm9sbGVyLmNwcAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVh
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWFQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiNjI1Ygot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERy
YXdpbmdBcmVhUHJveHkuY3BwCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eS5oIgorCisjaW5jbHVk
ZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlICJVcGRhdGVJ
bmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5j
ZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
Z2lvbi5oPgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKKyNp
bmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgorI2VuZGlmCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYVByb3h5OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVByb3h5
JiB3ZWJQYWdlUHJveHkpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VT
UykKKyAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlQ29vcmRpbmF0ZWQsIHdl
YlBhZ2VQcm94eSkKKyNlbHNlCisgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlw
ZUltcGwsIHdlYlBhZ2VQcm94eSkKKyNlbmRpZgoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDU19NVUxUSVBST0NFU1MpCisgICAgLy8gQ29uc3RydWN0IHRoZSBwcm94eSBlYXJseSB0byBh
bGxvdyBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyB3aGlsZSBBQyBpcyBl
bnRlcmVkIHRoZXJlLgorICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgPSBzdGQ6
Om1ha2VfdW5pcXVlPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Pih3ZWJQYWdlUHJveHkp
OworI2VuZGlmCit9CisKK0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6fkFjY2VsZXJhdGVk
RHJhd2luZ0FyZWFQcm94eSgpCit7CisgICAgLy8gTWFrZSBzdXJlIHRvIGV4aXQgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcgbW9kZS4KKyAgICBpZiAoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKCkpCisgICAgICAgIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOworfQorCiti
b29sIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6YWx3YXlzVXNlQ29tcG9zaXRpbmcoKSBj
b25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2VQcm94eS5wcmVmZXJlbmNlcygpLmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKCkgJiYgbV93ZWJQYWdlUHJveHkucHJlZmVyZW5jZXMoKS5m
b3JjZUNvbXBvc2l0aW5nTW9kZSgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQ
cm94eTo6ZGlzcGF0Y2hBZnRlckVuc3VyaW5nRHJhd2luZyhzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCit7CisgICAgaWYgKCFtX3dlYlBh
Z2VQcm94eS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jh
c2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY2FsbGJhY2tGdW5jdGlvbl0geworICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOworICAgIH0p
OworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6c2l6ZURpZENoYW5nZSgp
Cit7CisgICAgYmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5KTsK
K30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OmRldmljZVNjYWxlRmFjdG9y
RGlkQ2hhbmdlKCkKK3sKKyAgICBiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNwb25kSW1t
ZWRpYXRlbHkpOworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6dmlzaWJp
bGl0eURpZENoYW5nZSgpCit7CisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGJhY2tpbmcgc3Rv
cmUsIGdvIGFoZWFkIGFuZCBtYXJrIHRoZSBiYWNraW5nIHN0b3JlIGFzIGJlaW5nIGNoYW5nZWQg
c28KKyAgICAvLyB0aGF0IHdoZW4gcGFpbnQgd2UnbGwgYWN0dWFsbHkgd2FpdCBmb3Igc29tZXRo
aW5nIHRvIHBhaW50IGFuZCBub3QgZmxhc2ggd2hpdGUuCisgICAgaWYgKG1fbGF5ZXJUcmVlQ29u
dGV4dC5pc0VtcHR5KCkpCisgICAgICAgIGJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKERvTm90
UmVzcG9uZEltbWVkaWF0ZWx5KTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJv
eHk6OndhaXRGb3JCYWNraW5nU3RvcmVVcGRhdGVPbk5leHRQYWludCgpCit7CisgICAgbV9oYXNS
ZWNlaXZlZEZpcnN0VXBkYXRlID0gdHJ1ZTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdB
cmVhUHJveHk6OmRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9y
ZVN0YXRlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IExheWVyVHJlZUNv
bnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgQVNTRVJUX0FSRyhiYWNraW5nU3RvcmVT
dGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQp
OworICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJ
RCA+IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpOworICAgIG1fY3VycmVudEJhY2tpbmdT
dG9yZVN0YXRlSUQgPSBiYWNraW5nU3RvcmVTdGF0ZUlEOworCisgICAgbV9pc1dhaXRpbmdGb3JE
aWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9IGZhbHNlOworCisgICAgLy8gU3RvcCB0aGUgcmVz
cG9uc2l2ZW5lc3MgdGltZXIgdGhhdCB3YXMgc3RhcnRlZCBpbiBzZW5kVXBkYXRlQmFja2luZ1N0
b3JlU3RhdGUuCisgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnJlc3BvbnNpdmVuZXNzVGlt
ZXIoKS5zdG9wKCk7CisKKyAgICBpZiAobGF5ZXJUcmVlQ29udGV4dCAhPSBtX2xheWVyVHJlZUNv
bnRleHQpIHsKKyAgICAgICAgaWYgKGxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpICYmICFtX2xh
eWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2xheWVyVHJlZUNvbnRleHQu
aXNFbXB0eSgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5
KCkgJiYgbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKKyAgICAgICAgICAg
IEFTU0VSVChsYXllclRyZWVDb250ZXh0ID09IG1fbGF5ZXJUcmVlQ29udGV4dCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShs
YXllclRyZWVDb250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVChsYXllclRyZWVDb250ZXh0ID09
IG1fbGF5ZXJUcmVlQ29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9uZXh0
QmFja2luZ1N0b3JlU3RhdGVJRCAhPSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKQorICAg
ICAgICBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoUmVzcG9uZEltbWVkaWF0ZWx5KTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlID0gdHJ1ZTsKKworI2lm
IFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElSRUNURURf
WENPTVBPU0lURV9XSU5ET1cpCisgICAgICAgIGlmIChtX3BlbmRpbmdOYXRpdmVTdXJmYWNlSGFu
ZGxlRm9yQ29tcG9zaXRpbmcpIHsKKyAgICAgICAgICAgIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVG
b3JDb21wb3NpdGluZyhtX3BlbmRpbmdOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcp
OworICAgICAgICAgICAgbV9wZW5kaW5nTmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5n
ID0gMDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCit2b2lkIEFjY2VsZXJhdGVkRHJh
d2luZ0FyZWFQcm94eTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBi
YWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250
ZXh0KQoreworICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3Jl
U3RhdGVJRCA8PSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKKyAgICBpZiAoYmFja2lu
Z1N0b3JlU3RhdGVJRCA8IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29u
dGV4dCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpleGl0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3Qg
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBBU1NFUlRfQVJHKGJhY2tpbmdTdG9yZVN0
YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJ
RCk7CisgICAgaWYgKGJhY2tpbmdTdG9yZVN0YXRlSUQgPCBtX2N1cnJlbnRCYWNraW5nU3RvcmVT
dGF0ZUlEKQorICAgICAgICByZXR1cm47CisKKyAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNv
bnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgQVNTRVJUX0FS
RyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fY3VycmVudEJh
Y2tpbmdTdG9yZVN0YXRlSUQpOworICAgIGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEIDwgbV9jdXJy
ZW50QmFja2luZ1N0b3JlU3RhdGVJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdXBkYXRlQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Cit9CisKK3ZvaWQgQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNw
b25kSW1tZWRpYXRlbHlPck5vdCByZXNwb25kSW1tZWRpYXRlbHlPck5vdCkKK3sKKyAgICArK21f
bmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQ7CisgICAgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
KHJlc3BvbmRJbW1lZGlhdGVseU9yTm90KTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdB
cmVhUHJveHk6OnNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShSZXNwb25kSW1tZWRpYXRlbHlP
ck5vdCByZXNwb25kSW1tZWRpYXRlbHlPck5vdCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50QmFj
a2luZ1N0b3JlU3RhdGVJRCA8IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQpOworCisgICAgaWYg
KCFtX3dlYlBhZ2VQcm94eS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV93ZWJQYWdlUHJveHkudmlld1NpemUoKS5pc0VtcHR5KCkgJiYgIW1fd2Vi
UGFnZVByb3h5LnVzZUZpeGVkTGF5b3V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNX
YWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgPSByZXNwb25kSW1tZWRpYXRlbHlP
ck5vdCA9PSBSZXNwb25kSW1tZWRpYXRlbHk7CisKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKG1f
bmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQsIHJlc3BvbmRJbW1lZGlhdGVseU9yTm90ID09IFJlc3Bv
bmRJbW1lZGlhdGVseSwgbV93ZWJQYWdlUHJveHkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgbV9zaXpl
LCBtX3Njcm9sbE9mZnNldCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKKyAgICBtX3Njcm9s
bE9mZnNldCA9IEludFNpemUoKTsKKworICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKSB7CisgICAgICAgIC8vIFN0YXJ0IHRoZSByZXNwb25zaXZlbmVzcyB0
aW1lci4gV2Ugd2lsbCBzdG9wIGl0IHdoZW4gd2UgaGVhciBiYWNrIGZyb20gdGhlIFdlYlByb2Nl
c3MKKyAgICAgICAgLy8gaW4gZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUuCisgICAgICAgIG1f
d2ViUGFnZVByb3h5LnByb2Nlc3MoKS5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKKyAg
ICB9CisKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSAm
JiAhbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBXYWl0IGZvciB0
aGUgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZS4gTm9ybWFsbHkgd2UgZG8gdGhp
cyBpbiBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50LCBidXQgdGhhdAorICAgICAg
ICAvLyBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQgd2hlbiBpbiBhY2NlbGVyYXRlZCBjb21wb3Np
dGluZyBtb2RlLgorICAgICAgICB3YWl0Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZSgpOworICAgIH0KK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6
OndhaXRGb3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCkKK3sKKyAgICBB
U1NFUlQobV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk7CisKKyAgICBp
ZiAoIW1fd2ViUGFnZVByb3h5LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICht
X3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc3RhdGUoKSA9PSBXZWJQcm9jZXNzUHJveHk6OlN0YXRl
OjpMYXVuY2hpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB3YWl0Rm9yQW5k
RGlzcGF0Y2hJbW1lZGlhdGVseSB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIG9sZGVzdCBEaWRVcGRh
dGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlIHRoYXQKKyAgICAvLyBoYXNuJ3QgeWV0IGJlZW4g
cHJvY2Vzc2VkLiBCdXQgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIHNraXAgYWhlYWQgdG8gc29tZSBv
dGhlciBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZQorICAgIC8vIG1lc3NhZ2UsIGlmIG11bHRp
cGxlIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2VzIGFyZSB3YWl0aW5nIHRvIGJl
IHByb2Nlc3NlZC4gRm9yIGluc3RhbmNlLCB3ZSBjb3VsZAorICAgIC8vIGNob29zZSB0aGUgbW9z
dCByZWNlbnQgb25lLCBvciB0aGUgb25lIHRoYXQgaXMgY2xvc2VzdCB0byBvdXIgY3VycmVudCBz
aXplLgorCisgICAgLy8gVGhlIHRpbWVvdXQsIGluIHNlY29uZHMsIHdlIHVzZSB3aGVuIHdhaXRp
bmcgZm9yIGEgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSB3aGVuIHdlJ3JlIGFz
a2VkIHRvIHBhaW50LgorICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCkt
PndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5
OjpEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNTAwKSk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYVByb3h5OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVy
VHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgQVNTRVJUKGFsd2F5c1VzZUNv
bXBvc2l0aW5nKCkgfHwgIWlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKKworICAg
IG1fbGF5ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7CisgICAgbV93ZWJQYWdlUHJv
eHkuZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKK30K
Kwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OmV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpCit7CisgICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSgpKTsKKworICAgIG1fbGF5ZXJUcmVlQ29udGV4dCA9IExheWVyVHJlZUNvbnRleHQoKTsKKyAg
ICBtX3dlYlBhZ2VQcm94eS5leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKK30KKwor
dm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7Cisg
ICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKKworICAgIG1fbGF5
ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7CisgICAgbV93ZWJQYWdlUHJveHkudXBk
YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Cit9CisKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVE
X1hDT01QT1NJVEVfV0lORE9XKQordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnNl
dE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCBoYW5kbGUpCit7Cisg
ICAgaWYgKCFtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUpIHsKKyAgICAgICAgbV9wZW5kaW5nTmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nID0gaGFuZGxlOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpEcmF3
aW5nQXJlYTo6U2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKGhhbmRsZSksIG1f
d2ViUGFnZVByb3h5LnBhZ2VJRCgpLCBJUEM6OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGlu
Z0ZvclN5bmNSZXBseSk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5Ojpk
ZXN0cm95TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCkKK3sKKyAgICBpZiAobV9w
ZW5kaW5nTmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKSB7CisgICAgICAgIG1fcGVu
ZGluZ05hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyA9IDA7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgYm9vbCBoYW5kbGVkOworICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3Mo
KS5zZW5kU3luYyhNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFu
ZGxlRm9yQ29tcG9zaXRpbmcoKSwgTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpEZXN0cm95TmF0aXZl
U3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nOjpSZXBseShoYW5kbGVkKSwgbV93ZWJQYWdlUHJv
eHkucGFnZUlEKCkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTlkOTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YVByb3h5LmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAo
QykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTsK
KworY2xhc3MgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5IDogcHVibGljIERyYXdpbmdBcmVh
UHJveHkgeworcHVibGljOgorICAgIGV4cGxpY2l0IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eShXZWJQYWdlUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJv
eHkoKTsKKworICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gYWx3YXlzVXNlQ29tcG9zaXRpbmcoKSB8fCAhbV9sYXllclRyZWVDb250ZXh0Lmlz
RW1wdHkoKTsgfQorICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZSgpOworCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKKyAgICBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSYgY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKSBjb25zdCB7IHJldHVy
biAqbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5nZXQoKTsgfQorI2VuZGlmCisKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVE
X1hDT01QT1NJVEVfV0lORE9XKQorICAgIHZvaWQgc2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKHVpbnQ2NF90KTsKKyAgICB2b2lkIGRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxl
Rm9yQ29tcG9zaXRpbmcoKTsKKyNlbmRpZgorCisgICAgdm9pZCBkaXNwYXRjaEFmdGVyRW5zdXJp
bmdEcmF3aW5nKHN0ZDo6ZnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4pIG92ZXJy
aWRlOworCitwcm90ZWN0ZWQ6CisgICAgLy8gRHJhd2luZ0FyZWFQcm94eQorICAgIHZvaWQgc2l6
ZURpZENoYW5nZSgpIG92ZXJyaWRlOworICAgIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFu
Z2UoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdhaXRGb3JCYWNraW5nU3RvcmVVcGRhdGVPbk5leHRQ
YWludCgpIG92ZXJyaWRlOworCisgICAgLy8gSVBDIG1lc3NhZ2UgaGFuZGxlcnMKKyAgICB2b2lk
IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQs
IGNvbnN0IFVwZGF0ZUluZm8mLCBjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKKyAgICB2b2lk
IGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0
ZUlELCBjb25zdCBVcGRhdGVJbmZvJikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBM
YXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICBlbnVtIFJlc3BvbmRJbW1lZGlhdGVs
eU9yTm90IHsgRG9Ob3RSZXNwb25kSW1tZWRpYXRlbHksIFJlc3BvbmRJbW1lZGlhdGVseSB9Owor
ICAgIHZvaWQgYmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5T3JO
b3QpOworICAgIHZvaWQgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJbW1lZGlh
dGVseU9yTm90KTsKKyAgICB2b2lkIHdhaXRGb3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdT
dG9yZVN0YXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7CisgICAgdm9pZCBleGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoKTsKKyAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKKworICAgIGJvb2wgYWx3YXlzVXNlQ29t
cG9zaXRpbmcoKSBjb25zdDsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19NVUxUSVBS
T0NFU1MpCisgICAgc3RkOjp1bmlxdWVfcHRyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
PiBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OworI2VuZGlmCisKKyAgICAvLyBUaGUg
c3RhdGUgSUQgY29ycmVzcG9uZGluZyB0byBvdXIgY3VycmVudCBiYWNraW5nIHN0b3JlLiBVcGRh
dGVkIHdoZW5ldmVyIHdlIGFsbG9jYXRlCisgICAgLy8gYSBuZXcgYmFja2luZyBzdG9yZS4gQW55
IG1lc3NhZ2VzIHJlY2VpdmVkIHRoYXQgY29ycmVzcG9uZCB0byBhbiBlYXJsaWVyIHN0YXRlIGFy
ZSBpZ25vcmVkLAorICAgIC8vIGFzIHRoZXkgZG9uJ3QgYXBwbHkgdG8gb3VyIGN1cnJlbnQgYmFj
a2luZyBzdG9yZS4KKyAgICB1aW50NjRfdCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEIHsg
MCB9OworCisgICAgLy8gVGhlIG5leHQgYmFja2luZyBzdG9yZSBzdGF0ZSBJRCB3ZSB3aWxsIHJl
cXVlc3QgdGhlIHdlYiBwcm9jZXNzIHVwZGF0ZSB0by4gSW5jcmVtZW50ZWQKKyAgICAvLyB3aGVu
ZXZlciBvdXIgc3RhdGUgY2hhbmdlcyBpbiBhIHdheSB0aGF0IHdpbGwgcmVxdWlyZSBhIG5ldyBi
YWNraW5nIHN0b3JlIHRvIGJlIGFsbG9jYXRlZC4KKyAgICB1aW50NjRfdCBtX25leHRCYWNraW5n
U3RvcmVTdGF0ZUlEIHsgMCB9OworCisgICAgLy8gVGhlIGN1cnJlbnQgbGF5ZXIgdHJlZSBjb250
ZXh0LgorICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworCisgICAgLy8g
V2hldGhlciB3ZSd2ZSBzZW50IGEgVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSBhbmQg
YXJlIG5vdyB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2Uu
CisgICAgLy8gVXNlZCB0byB0aHJvdHRsZSBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdl
cyBzbyB3ZSBkb24ndCBzZW5kIHRoZW0gZmFzdGVyIHRoYW4gdGhlIFdlYiBwcm9jZXNzIGNhbiBo
YW5kbGUuCisgICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
IHsgZmFsc2UgfTsKKworICAgIC8vIEZvciBhIG5ldyBEcmF3aW5nIEFyZWEgZG9uJ3QgZHJhdyBh
bnl0aGluZyB1bnRpbCB0aGUgV2ViUHJvY2VzcyBoYXMgc2VudCBvdmVyIHRoZSBmaXJzdCBjb250
ZW50LgorICAgIGJvb2wgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlIHsgZmFsc2UgfTsKKworI2lm
IFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElSRUNURURf
WENPTVBPU0lURV9XSU5ET1cpCisgICAgdWludDY0X3QgbV9wZW5kaW5nTmF0aXZlU3VyZmFjZUhh
bmRsZUZvckNvbXBvc2l0aW5nIHsgMCB9OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94
eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOTI5OGUuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZERyYXdpbmdBcmVhUHJv
eHkuaCIKLQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0jaW5j
bHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKLSNpbmNsdWRlICJVcGRh
dGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQ
cm94eTo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KFdlYlBhZ2VQcm94eSYgd2ViUGFnZVBy
b3h5KQotICAgIDogRHJhd2luZ0FyZWFQcm94eShEcmF3aW5nQXJlYVR5cGVDb29yZGluYXRlZCwg
d2ViUGFnZVByb3h5KQotICAgICwgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCgwKQotICAg
ICwgbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCgwKQotICAgICwgbV9pc1dhaXRpbmdGb3JEaWRV
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZShmYWxzZSkKLSAgICAsIG1faGFzUmVjZWl2ZWRGaXJzdFVw
ZGF0ZShmYWxzZSkKLXsKLSAgICAvLyBDb25zdHJ1Y3QgdGhlIHByb3h5IGVhcmx5IHRvIGFsbG93
IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNzIHdoaWxlIEFDIGlzIGVudGVy
ZWQgdGhlcmUuCi0gICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk+KHRoaXMpOwotfQotCi1Db29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHk6On5Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkoKQot
ewotICAgIC8vIE1ha2Ugc3VyZSB0byBleGl0IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUu
Ci0gICAgaWYgKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKQotICAgICAgICBleGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdp
bmdBcmVhUHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKLXsKLSAgICBtX3dlYlBhZ2VQcm94eS5zZXRW
aWV3TmVlZHNEaXNwbGF5KHZpZXdwb3J0VmlzaWJsZVJlY3QoKSk7Ci19Ci0KLVdlYkNvcmU6Oklu
dFJlY3QgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3QoKSBjb25zdAot
ewotICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZVByb3h5LnZp
ZXdTaXplKCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlzcGF0
Y2hBZnRlckVuc3VyaW5nRHJhd2luZyhzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpF
cnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2VQcm94eS5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jhc2U6OkVycm9yOjpP
d25lcldhc0ludmFsaWRhdGVkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbY2FsbGJhY2tGdW5jdGlvbl0gewotICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOwotICAgIH0pOwotfQotCi12b2lk
IENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6c2l6ZURpZENoYW5nZSgpCi17Ci0gICAgYmFj
a2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5KTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkK
LXsKLSAgICBiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNwb25kSW1tZWRpYXRlbHkpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6dmlzaWJpbGl0eURpZENoYW5n
ZSgpCi17Ci0gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGJhY2tpbmcgc3RvcmUsIGdvIGFoZWFk
IGFuZCBtYXJrIHRoZSBiYWNraW5nIHN0b3JlIGFzIGJlaW5nIGNoYW5nZWQgc28KLSAgICAvLyB0
aGF0IHdoZW4gcGFpbnQgd2UnbGwgYWN0dWFsbHkgd2FpdCBmb3Igc29tZXRoaW5nIHRvIHBhaW50
IGFuZCBub3QgZmxhc2ggd2hpdGUuCi0gICAgaWYgKG1fbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5
KCkpCi0gICAgICAgIGJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKERvTm90UmVzcG9uZEltbWVk
aWF0ZWx5KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JC
YWNraW5nU3RvcmVVcGRhdGVPbk5leHRQYWludCgpCi17Ci0gICAgbV9oYXNSZWNlaXZlZEZpcnN0
VXBkYXRlID0gdHJ1ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRp
ZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNv
bnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVy
VHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNr
aW5nU3RvcmVTdGF0ZUlEIDw9IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAgIEFTU0VS
VF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA+IG1fY3VycmVu
dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAgIG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQg
PSBiYWNraW5nU3RvcmVTdGF0ZUlEOwotCi0gICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZSA9IGZhbHNlOwotCi0gICAgLy8gU3RvcCB0aGUgcmVzcG9uc2l2ZW5lc3Mg
dGltZXIgdGhhdCB3YXMgc3RhcnRlZCBpbiBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUuCi0g
ICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdG9wKCk7
Ci0KLSAgICBpZiAobGF5ZXJUcmVlQ29udGV4dCAhPSBtX2xheWVyVHJlZUNvbnRleHQpIHsKLSAg
ICAgICAgaWYgKCFtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2xh
eWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbGF5
ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Ci0gICAgICAgICAgICBBU1NFUlQobGF5
ZXJUcmVlQ29udGV4dCA9PSBtX2xheWVyVHJlZUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQgIT0gbV9jdXJyZW50QmFja2luZ1N0
b3JlU3RhdGVJRCkKLSAgICAgICAgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJ
bW1lZGlhdGVseSk7Ci0gICAgZWxzZQotICAgICAgICBtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUg
PSB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25z
dCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQotewotICAgIEFTU0VSVF9BUkco
YmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA8PSBtX2N1cnJlbnRCYWNr
aW5nU3RvcmVTdGF0ZUlEKTsKLSAgICBpZiAoYmFja2luZ1N0b3JlU3RhdGVJRCA8IG1fY3VycmVu
dEJhY2tpbmdTdG9yZVN0YXRlSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWREcmF3aW5nQXJlYVByb3h5OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWlu
dDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykK
LXsKLSAgICBBU1NFUlRfQVJHKGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRl
SUQgPD0gbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCk7Ci0gICAgaWYgKGJhY2tpbmdTdG9y
ZVN0YXRlSUQgPCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxh
eWVyVHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBi
YWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAg
IGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEIDwgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
bGF5ZXJUcmVlQ29udGV4dCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5
OjpiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNwb25kSW1tZWRpYXRlbHlPck5vdCByZXNw
b25kSW1tZWRpYXRlbHlPck5vdCkKLXsKLSAgICArK21fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQ7
Ci0gICAgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHJlc3BvbmRJbW1lZGlhdGVseU9yTm90
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnNlbmRVcGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZShSZXNwb25kSW1tZWRpYXRlbHlPck5vdCByZXNwb25kSW1tZWRpYXRlbHlP
ck5vdCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCA8IG1fbmV4
dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotCi0gICAgaWYgKCFtX3dlYlBhZ2VQcm94eS5pc1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV93ZWJQYWdlUHJv
eHkudmlld1NpemUoKS5pc0VtcHR5KCkgJiYgIW1fd2ViUGFnZVByb3h5LnVzZUZpeGVkTGF5b3V0
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUgPSByZXNwb25kSW1tZWRpYXRlbHlPck5vdCA9PSBSZXNwb25kSW1tZWRpYXRl
bHk7Ci0KLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6RHJhd2lu
Z0FyZWE6OlVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQs
IHJlc3BvbmRJbW1lZGlhdGVseU9yTm90ID09IFJlc3BvbmRJbW1lZGlhdGVseSwgbV93ZWJQYWdl
UHJveHkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgbV9zaXplLCBtX3Njcm9sbE9mZnNldCksIG1fd2Vi
UGFnZVByb3h5LnBhZ2VJRCgpKTsKLSAgICBtX3Njcm9sbE9mZnNldCA9IEludFNpemUoKTsKLQot
ICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKSB7Ci0gICAg
ICAgIC8vIFN0YXJ0IHRoZSByZXNwb25zaXZlbmVzcyB0aW1lci4gV2Ugd2lsbCBzdG9wIGl0IHdo
ZW4gd2UgaGVhciBiYWNrIGZyb20gdGhlIFdlYlByb2Nlc3MKLSAgICAgICAgLy8gaW4gZGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUuCi0gICAgICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5y
ZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9pc1dhaXRp
bmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSAmJiAhbV9sYXllclRyZWVDb250ZXh0Lmlz
RW1wdHkoKSkgewotICAgICAgICAvLyBXYWl0IGZvciB0aGUgRGlkVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGUgbWVzc2FnZS4gTm9ybWFsbHkgd2UgZG8gdGhpcyBpbiBDb29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHk6OnBhaW50LCBidXQgdGhhdAotICAgICAgICAvLyBmdW5jdGlvbiBpcyBuZXZlciBj
YWxsZWQgd2hlbiBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLgotICAgICAgICB3YWl0
Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOwotICAgIH0KLX0KLQot
dm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JBbmREaXNwYXRjaERpZFVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCkKLXsKLSAgICBBU1NFUlQobV9pc1dhaXRpbmdGb3JEaWRV
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk7Ci0KLSAgICBpZiAoIW1fd2ViUGFnZVByb3h5LmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCku
c3RhdGUoKSA9PSBXZWJQcm9jZXNzUHJveHk6OlN0YXRlOjpMYXVuY2hpbmcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIEZJWE1FOiB3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSB3aWxs
IGFsd2F5cyByZXR1cm4gdGhlIG9sZGVzdCBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNz
YWdlIHRoYXQKLSAgICAvLyBoYXNuJ3QgeWV0IGJlZW4gcHJvY2Vzc2VkLiBCdXQgaXQgbWlnaHQg
YmUgYmV0dGVyIHRvIHNraXAgYWhlYWQgdG8gc29tZSBvdGhlciBEaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZQotICAgIC8vIG1lc3NhZ2UsIGlmIG11bHRpcGxlIERpZFVwZGF0ZUJhY2tpbmdTdG9y
ZVN0YXRlIG1lc3NhZ2VzIGFyZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZC4gRm9yIGluc3RhbmNl
LCB3ZSBjb3VsZAotICAgIC8vIGNob29zZSB0aGUgbW9zdCByZWNlbnQgb25lLCBvciB0aGUgb25l
IHRoYXQgaXMgY2xvc2VzdCB0byBvdXIgY3VycmVudCBzaXplLgotCi0gICAgLy8gVGhlIHRpbWVv
dXQsIGluIHNlY29uZHMsIHdlIHVzZSB3aGVuIHdhaXRpbmcgZm9yIGEgRGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUgbWVzc2FnZSB3aGVuIHdlJ3JlIGFza2VkIHRvIHBhaW50LgotICAgIG1fd2Vi
UGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRjaEltbWVk
aWF0ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNraW5nU3RvcmVT
dGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMo
NTAwKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjplbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNv
bnRleHQpCi17Ci0gICAgQVNTRVJUKCFpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7
Ci0KLSAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBsYXllclRyZWVDb250ZXh0OwotICAgIG1fd2Vi
UGFnZVByb3h5LmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4
dCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjpzZXRWaXNpYmxlQ29u
dGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBtX2Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2li
bGVDb250ZW50c1JlY3QsIHRyYWplY3RvcnlWZWN0b3IpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
RHJhd2luZ0FyZWFQcm94eTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKLXsKLSAg
ICBBU1NFUlQoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwotCi0gICAgbV9sYXll
clRyZWVDb250ZXh0ID0gTGF5ZXJUcmVlQ29udGV4dCgpOwotICAgIG1fd2ViUGFnZVByb3h5LmV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJh
d2luZ0FyZWFQcm94eTo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKLXsKLSAgICBBU1NFUlQoaXNJbkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwotCi0gICAgbV9sYXllclRyZWVDb250ZXh0ID0gbGF5
ZXJUcmVlQ29udGV4dDsKLSAgICBtX3dlYlBhZ2VQcm94eS51cGRhdGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjYzY2ViOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5X2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5X2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUg
IkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRl
ICJMYXllclRyZWVDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgUmVnaW9uOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7Ci0KLWNsYXNzIENvb3JkaW5hdGVk
RHJhd2luZ0FyZWFQcm94eSA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKLXB1YmxpYzoKLSAg
ICBleHBsaWNpdCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVByb3h5Jik7Ci0g
ICAgdmlydHVhbCB+Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KCk7Ci0KLSAgICBib29sIGlz
SW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuICFtX2xheWVyVHJl
ZUNvbnRleHQuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKCk7Ci0K
LSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiB2aXNpYmxlQ29udGVudHNSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0
b3J5KTsKLQotICAgIGJvb2wgaGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZTsgfQotCi0gICAgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkmIGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkgY29uc3QgeyByZXR1cm4g
Km1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuZ2V0KCk7IH0KLQotICAgIFdlYkNvcmU6
OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzUmVj
dCgpOyB9Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2
b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Ci0KLSAgICBXZWJQYWdlUHJveHkmIHBhZ2UoKSB7IHJldHVy
biBtX3dlYlBhZ2VQcm94eTsgfQotICAgIAotICAgIHZvaWQgZGlzcGF0Y2hBZnRlckVuc3VyaW5n
RHJhd2luZyhzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+KSBvdmVycmlk
ZTsKLQotcHJpdmF0ZToKLSAgICAvLyBEcmF3aW5nQXJlYVByb3h5Ci0gICAgdmlydHVhbCB2b2lk
IHNpemVEaWRDaGFuZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRD
aGFuZ2UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9yQmFja2luZ1N0b3JlVXBkYXRlT25O
ZXh0UGFpbnQoKTsKLQotICAgIC8vIElQQyBtZXNzYWdlIGhhbmRsZXJzCi0gICAgdmlydHVhbCB2
b2lkIGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRl
SUQsIGNvbnN0IFVwZGF0ZUluZm8mLCBjb25zdCBMYXllclRyZWVDb250ZXh0Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2lu
Z1N0b3JlU3RhdGVJRCwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3Rh
dGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBM
YXllclRyZWVDb250ZXh0Jik7Ci0KLSAgICBlbnVtIFJlc3BvbmRJbW1lZGlhdGVseU9yTm90IHsg
RG9Ob3RSZXNwb25kSW1tZWRpYXRlbHksIFJlc3BvbmRJbW1lZGlhdGVseSB9OwotICAgIHZvaWQg
YmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QpOwotICAg
IHZvaWQgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJbW1lZGlhdGVseU9yTm90
KTsKLSAgICB2b2lkIHdhaXRGb3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
KCk7Ci0KLSAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYpOwotICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KCk7Ci0gICAgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0Jik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk+IG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7Ci0KLSAgICAvLyBU
aGUgc3RhdGUgSUQgY29ycmVzcG9uZGluZyB0byBvdXIgY3VycmVudCBiYWNraW5nIHN0b3JlLiBV
cGRhdGVkIHdoZW5ldmVyIHdlIGFsbG9jYXRlCi0gICAgLy8gYSBuZXcgYmFja2luZyBzdG9yZS4g
QW55IG1lc3NhZ2VzIHJlY2VpdmVkIHRoYXQgY29ycmVzcG9uZCB0byBhbiBlYXJsaWVyIHN0YXRl
IGFyZSBpZ25vcmVkLAotICAgIC8vIGFzIHRoZXkgZG9uJ3QgYXBwbHkgdG8gb3VyIGN1cnJlbnQg
YmFja2luZyBzdG9yZS4KLSAgICB1aW50NjRfdCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlE
OwotCi0gICAgLy8gVGhlIG5leHQgYmFja2luZyBzdG9yZSBzdGF0ZSBJRCB3ZSB3aWxsIHJlcXVl
c3QgdGhlIHdlYiBwcm9jZXNzIHVwZGF0ZSB0by4gSW5jcmVtZW50ZWQKLSAgICAvLyB3aGVuZXZl
ciBvdXIgc3RhdGUgY2hhbmdlcyBpbiBhIHdheSB0aGF0IHdpbGwgcmVxdWlyZSBhIG5ldyBiYWNr
aW5nIHN0b3JlIHRvIGJlIGFsbG9jYXRlZC4KLSAgICB1aW50NjRfdCBtX25leHRCYWNraW5nU3Rv
cmVTdGF0ZUlEOwotCi0gICAgLy8gVGhlIGN1cnJlbnQgbGF5ZXIgdHJlZSBjb250ZXh0LgotICAg
IExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotCi0gICAgLy8gV2hldGhlciB3
ZSd2ZSBzZW50IGEgVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSBhbmQgYXJlIG5vdyB3
YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UuCi0gICAgLy8g
VXNlZCB0byB0aHJvdHRsZSBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlcyBzbyB3ZSBk
b24ndCBzZW5kIHRoZW0gZmFzdGVyIHRoYW4gdGhlIFdlYiBwcm9jZXNzIGNhbiBoYW5kbGUuCi0g
ICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlOwotCi0gICAg
Ly8gRm9yIGEgbmV3IERyYXdpbmcgQXJlYSBkb24ndCBkcmF3IGFueXRoaW5nIHVudGlsIHRoZSBX
ZWJQcm9jZXNzIGhhcyBzZW50IG92ZXIgdGhlIGZpcnN0IGNvbnRlbnQuCi0gICAgYm9vbCBtX2hh
c1JlY2VpdmVkRmlyc3RVcGRhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNlbmRpZiAvLyBDb29yZGluYXRlZERy
YXdpbmdBcmVhUHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuY3BwCmluZGV4IGUyYzY2OTAuLjZkMWFmZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTIwLDEw
ICsyMCw5IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQogI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAKLSNpbmNsdWRlICJDb29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKQEAgLTM0LDIyICszMywyMiBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShD
b29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCi0gICAgOiBtX2Ry
YXdpbmdBcmVhUHJveHkoZHJhd2luZ0FyZWFQcm94eSkKK0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShXZWJQYWdlUHJveHkmIHdlYlBh
Z2VQcm94eSkKKyAgICA6IG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKICAgICAsIG1fc2Nl
bmUoYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSh0aGlzKSkpCiB7Ci0gICAg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkucHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkucGFnZUlEKCksICp0aGlzKTsKKyAgICBt
X3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBh
Z2VQcm94eS5wYWdlSUQoKSwgKnRoaXMpOwogfQogCiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkKIHsKLSAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS5wYWdlSUQoKSk7CisgICAgbV93ZWJQYWdlUHJveHku
cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFn
ZUlEKCkpOwogICAgIG1fc2NlbmUtPmRldGFjaCgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiB7Ci0gICAgbV9kcmF3aW5nQXJlYVBy
b3h5LT51cGRhdGVWaWV3cG9ydCgpOworICAgIG1fd2ViUGFnZVByb3h5LnNldFZpZXdOZWVkc0Rp
c3BsYXkoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3dlYlBhZ2VQcm94eS52aWV3U2l6ZSgp
KSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBk
YXRlKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbikKQEAgLTY1LDkgKzY0LDcgQEAgdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlKGNvbnN0IENvb3JkaW4KICAgICB9KTsKIAogICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKLSAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS5kaWRSZW5kZXJGcmFtZShncmFwaGljc1N0YXRlLmNvbnRlbnRzU2l6
ZSwgZ3JhcGhpY3NTdGF0ZS5jb3ZlcmVkUmVjdCk7Ci0jZW5kaWYKKyAgICBtX3dlYlBhZ2VQcm94
eS5kaWRSZW5kZXJGcmFtZShncmFwaGljc1N0YXRlLmNvbnRlbnRzU2l6ZSwgZ3JhcGhpY3NTdGF0
ZS5jb3ZlcmVkUmVjdCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQpAQCAtNzUsMjAgKzcyLDIwIEBAIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0CiAgICAgaWYgKHJlY3QgPT0gbV9sYXN0U2VudFZpc2libGVSZWN0ICYmIHRy
YWplY3RvcnlWZWN0b3IgPT0gbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3IpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50c1JlY3Qo
cmVjdCwgdHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLnBhZ2VJ
RCgpKTsKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHRyYWplY3Rv
cnlWZWN0b3IpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7CiAgICAgbV9sYXN0U2VudFZpc2li
bGVSZWN0ID0gcmVjdDsKICAgICBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvciA9IHRyYWplY3Rv
cnlWZWN0b3I7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRl
ck5leHRGcmFtZSgpCiB7Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkucHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1l
KCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLnBhZ2VJRCgpKTsKKyAgICBtX3dlYlBhZ2VQ
cm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpS
ZW5kZXJOZXh0RnJhbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOwogfQogCiB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3Qg
bGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQogewotICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OkNvbW1pdFNjcm9sbE9mZnNldChsYXllcklELCBvZmZzZXQpLCBtX2RyYXdpbmdBcmVhUHJv
eHktPnBhZ2UoKS5wYWdlSUQoKSk7CisgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29tbWl0U2Nyb2xsT2Zmc2V0KGxh
eWVySUQsIG9mZnNldCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKIH0KIAogfQotI2VuZGlm
IC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1NfTVVMVElQUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggNGYzOGRjNS4uZTQ0NzQ4MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0zNSwxMyAr
MzUsMTMgQEAgY2xhc3MgSW50U2l6ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIENv
b3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKIAogY2xhc3Mg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lQ2xpZW50LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KTsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eShDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkqKTsKKyAgICBleHBsaWNp
dCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShXZWJQYWdlUHJveHkmKTsKICAgICB2aXJ0
dWFsIH5Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpOwogCiAgICAgdm9pZCBjb21taXRD
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlJik7CkBAIC02MCw3ICs2MCw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpNZXNzYWdlRGVjb2RlciYpIG92ZXJyaWRlOwogCi0gICAgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7CisgICAgV2ViUGFnZVByb3h5JiBtX3dlYlBh
Z2VQcm94eTsKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lPiBtX3NjZW5lOwog
ICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2xhc3RTZW50VmlzaWJsZVJlY3Q7CiAgICAgV2ViQ29y
ZTo6RmxvYXRQb2ludCBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1BhZ2VWaWV3cG9ydENv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKaW5kZXggMTcxNTY1Ny4uNzI3MjYzOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvUGFn
ZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKQEAgLTIyLDcgKzIy
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9s
bGVyLmgiCiAKLSNpbmNsdWRlICJDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNs
dWRlICJBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KQEAgLTI2MywxMyArMjYzLDEzIEBAIHZvaWQgUGFnZVZp
ZXdwb3J0Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQ29udGVudHNWaXNpYmlsaXR5KGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0CiAKIGJvb2wgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6c3luY1Zpc2libGVD
b250ZW50cyhjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewotICAgIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxDb29yZGlu
YXRlZERyYXdpbmdBcmVhUHJveHkqPihtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSk7Cisg
ICAgYXV0byogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxBY2NlbGVyYXRlZERyYXdpbmdBcmVh
UHJveHkqPihtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSk7CiAgICAgaWYgKCFkcmF3aW5n
QXJlYSB8fCBtX3ZpZXdwb3J0U2l6ZS5pc0VtcHR5KCkgfHwgbV9jb250ZW50c1NpemUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRl
bnRzUmVjdChib3VuZENvbnRlbnRzUG9zaXRpb24obV9jb250ZW50c1Bvc2l0aW9uKSwgdmlzaWJs
ZUNvbnRlbnRzU2l6ZSgpKTsKICAgICB2aXNpYmxlQ29udGVudHNSZWN0LmludGVyc2VjdChGbG9h
dFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX2NvbnRlbnRzU2l6ZSkpOwotICAgIGRyYXdpbmdB
cmVhLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250ZW50c1JlY3QsIHRyYWplY3Rv
cnlWZWN0b3IpOworICAgIGRyYXdpbmdBcmVhLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eSgpLnNldFZpc2libGVDb250ZW50c1JlY3QodmlzaWJsZUNvbnRlbnRzUmVjdCwgdHJhamVjdG9y
eVZlY3Rvcik7CiAKICAgICBpZiAoIW1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbikKICAgICAgICAg
bV9jbGllbnQuZGlkQ2hhbmdlVmlzaWJsZUNvbnRlbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAppbmRleCAyNDc2Mjk2Li5lZmNh
YjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94
eUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
SW1wbC5jcHAKQEAgLTQxLDI2ICs0MSwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBEcmF3aW5nQXJlYVByb3h5SW1wbDo6RHJhd2luZ0FyZWFQcm94
eUltcGwoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCi0gICAgOiBEcmF3aW5nQXJlYVByb3h5
KERyYXdpbmdBcmVhVHlwZUltcGwsIHdlYlBhZ2VQcm94eSkKLSAgICAsIG1fY3VycmVudEJhY2tp
bmdTdG9yZVN0YXRlSUQoMCkKLSAgICAsIG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQoMCkKLSAg
ICAsIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoZmFsc2UpCi0gICAg
LCBtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUoZmFsc2UpCi0gICAgLCBtX2lzQmFja2luZ1N0b3Jl
RGlzY2FyZGFibGUodHJ1ZSkKKyAgICA6IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eSh3ZWJQ
YWdlUHJveHkpCiAgICAgLCBtX2Rpc2NhcmRCYWNraW5nU3RvcmVUaW1lcihSdW5Mb29wOjpjdXJy
ZW50KCksIHRoaXMsICZEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlzY2FyZEJhY2tpbmdTdG9yZSkK
IHsKIH0KIAogRHJhd2luZ0FyZWFQcm94eUltcGw6On5EcmF3aW5nQXJlYVByb3h5SW1wbCgpCiB7
Ci0gICAgLy8gTWFrZSBzdXJlIHRvIGV4aXQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZS4K
LSAgICBpZiAoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpCi0gICAgICAgIGV4aXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotfQotCi1ib29sIERyYXdpbmdBcmVhUHJveHlJ
bXBsOjphbHdheXNVc2VDb21wb3NpdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFn
ZVByb3h5LnByZWZlcmVuY2VzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSAmJiBt
X3dlYlBhZ2VQcm94eS5wcmVmZXJlbmNlcygpLmZvcmNlQ29tcG9zaXRpbmdNb2RlKCk7CiB9CiAK
IHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnBhaW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1H
cmFwaGljc0NvbnRleHQgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgUmVnaW9uJiB1bnBh
aW50ZWRSZWdpb24pCkBAIC03OCw4ICs2NSw4IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6
OnBhaW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgY29udGV4dCwKIAog
ICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCByZWNlaXZlZCBvdXIgZmlyc3QgYml0cyBmcm9t
IHRoZSBXZWJQcm9jZXNzIHRoZW4gZG9uJ3QgcGFpbnQgYW55dGhpbmcuCiAgICAgICAgIGlmICgh
bV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlKQotICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgCi0g
ICAgICAgIAorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChtX2lzV2FpdGluZ0Zv
ckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKSB7CiAgICAgICAgICAgICAvLyBXYWl0IGZvciBh
IERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UgdGhhdCBjb250YWlucyB0aGUgbmV3
IGJpdHMgYmVmb3JlIHdlIHBhaW50CiAgICAgICAgICAgICAvLyB3aGF0J3MgY3VycmVudGx5IGlu
IHRoZSBiYWNraW5nIHN0b3JlLgpAQCAtMTA2LDE2ICs5Myw2IEBAIHZvaWQgRHJhd2luZ0FyZWFQ
cm94eUltcGw6OnBhaW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgY29u
dGV4dCwKICAgICBkaXNjYXJkQmFja2luZ1N0b3JlU29vbigpOwogfQogCi12b2lkIERyYXdpbmdB
cmVhUHJveHlJbXBsOjpzaXplRGlkQ2hhbmdlKCkKLXsKLSAgICBiYWNraW5nU3RvcmVTdGF0ZURp
ZENoYW5nZShSZXNwb25kSW1tZWRpYXRlbHkpOwotfQotCi12b2lkIERyYXdpbmdBcmVhUHJveHlJ
bXBsOjpkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpCi17Ci0gICAgYmFja2luZ1N0b3JlU3Rh
dGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5KTsKLX0KLQogdm9pZCBEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6c2V0QmFja2luZ1N0b3JlSXNEaXNjYXJkYWJsZShib29sIGlzQmFja2luZ1N0b3Jl
RGlzY2FyZGFibGUpCiB7CiAgICAgaWYgKG1faXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSA9PSBp
c0JhY2tpbmdTdG9yZURpc2NhcmRhYmxlKQpAQCAtMTI4LDExICsxMDUsNiBAQCB2b2lkIERyYXdp
bmdBcmVhUHJveHlJbXBsOjpzZXRCYWNraW5nU3RvcmVJc0Rpc2NhcmRhYmxlKGJvb2wgaXNCYWNr
aW5nU3RvcmVEaXNjYQogICAgICAgICBtX2Rpc2NhcmRCYWNraW5nU3RvcmVUaW1lci5zdG9wKCk7
CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OndhaXRGb3JCYWNraW5nU3RvcmVVcGRh
dGVPbk5leHRQYWludCgpCi17Ci0gICAgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlID0gdHJ1ZTsK
LX0KLQogdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6dXBkYXRlKHVpbnQ2NF90IGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7CiAgICAgQVNTRVJU
X0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fY3VycmVu
dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwpAQCAtMTQ3LDQxICsxMTksNyBAQCB2b2lkIERyYXdpbmdB
cmVhUHJveHlJbXBsOjp1cGRhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3Qg
VXBkYXRlSW5mbwogCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpkaWRVcGRhdGVCYWNraW5n
U3RvcmVTdGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvLCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQog
ewotICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJ
RCA8PSBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKLSAgICBBU1NFUlRfQVJHKGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPiBtX2N1cnJlbnRCYWNraW5nU3RvcmVT
dGF0ZUlEKTsKLSAgICBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEID0gYmFja2luZ1N0b3Jl
U3RhdGVJRDsKLQotICAgIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUg
PSBmYWxzZTsKLQotICAgIC8vIFN0b3AgdGhlIHJlc3BvbnNpdmVuZXNzIHRpbWVyIHRoYXQgd2Fz
IHN0YXJ0ZWQgaW4gc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlLgotICAgIG1fd2ViUGFnZVBy
b3h5LnByb2Nlc3MoKS5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RvcCgpOwotCi0gICAgaWYgKGxh
eWVyVHJlZUNvbnRleHQgIT0gbV9sYXllclRyZWVDb250ZXh0KSB7Ci0gICAgICAgIGlmIChsYXll
clRyZWVDb250ZXh0LmlzRW1wdHkoKSAmJiAhbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7Ci0gICAgICAg
ICAgICBBU1NFUlQobV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoIWxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpICYmIG1fbGF5ZXJUcmVlQ29udGV4dC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
bGF5ZXJUcmVlQ29udGV4dCk7Ci0gICAgICAgICAgICBBU1NFUlQobGF5ZXJUcmVlQ29udGV4dCA9
PSBtX2xheWVyVHJlZUNvbnRleHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXBk
YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Ci0gICAgICAg
ICAgICBBU1NFUlQobGF5ZXJUcmVlQ29udGV4dCA9PSBtX2xheWVyVHJlZUNvbnRleHQpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQgIT0gbV9j
dXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCkKLSAgICAgICAgc2VuZFVwZGF0ZUJhY2tpbmdTdG9y
ZVN0YXRlKFJlc3BvbmRJbW1lZGlhdGVseSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1faGFzUmVj
ZWl2ZWRGaXJzdFVwZGF0ZSA9IHRydWU7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBM
QVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQotICAgICAg
ICBpZiAobV9wZW5kaW5nTmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKSB7Ci0gICAg
ICAgICAgICBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcobV9wZW5kaW5nTmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKTsKLSAgICAgICAgICAgIG1fcGVuZGluZ05h
dGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyA9IDA7Ci0gICAgICAgIH0KLSNlbmRpZgot
ICAgIH0KLQorICAgIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUoYmFja2luZ1N0b3JlU3RhdGVJRCwgdXBkYXRlSW5mbywgbGF5ZXJUcmVlQ29u
dGV4dCk7CiAgICAgaWYgKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKSB7CiAgICAg
ICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUpOwogICAgICAgICByZXR1cm47CkBAIC0xOTMsMzUg
KzEzMSwxNyBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpkaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZQogICAgIGluY29ycG9yYXRlVXBkYXRl
KHVwZGF0ZUluZm8pOwogfQogCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjplbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0
IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhi
YWNraW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fY3VycmVudEJhY2tp
bmdTdG9yZVN0YXRlSUQpOwotICAgIGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEIDwgbV9jdXJyZW50
QmFja2luZ1N0b3JlU3RhdGVJRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKLX0KLQogdm9pZCBEcmF3aW5n
QXJlYVByb3h5SW1wbDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJh
Y2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7CiAgICAg
QVNTRVJUX0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1f
Y3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpOwogICAgIGlmIChiYWNraW5nU3RvcmVTdGF0ZUlE
IDwgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CisgICAgQWNjZWxlcmF0ZWREcmF3aW5n
QXJlYVByb3h5OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKIAogICAgIGluY29y
cG9yYXRlVXBkYXRlKHVwZGF0ZUluZm8pOwogfQogCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBs
Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVT
dGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQotewotICAg
IEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA8PSBt
X2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKLSAgICBpZiAoYmFja2luZ1N0b3JlU3RhdGVJ
RCA8IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwotfQot
CiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjppbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvKQogewogICAgIEFTU0VSVCghaXNJbkFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKCkpOwpAQCAtMjQzLDExNSArMTYzLDEwIEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OmluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiAg
ICAgbV93ZWJQYWdlUHJveHkuc2V0Vmlld05lZWRzRGlzcGxheShkYW1hZ2VSZWdpb24pOwogfQog
Ci12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShS
ZXNwb25kSW1tZWRpYXRlbHlPck5vdCByZXNwb25kSW1tZWRpYXRlbHlPck5vdCkKLXsKLSAgICAr
K21fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQ7Ci0gICAgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0
YXRlKHJlc3BvbmRJbW1lZGlhdGVseU9yTm90KTsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVByb3h5
SW1wbDo6c2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJbW1lZGlhdGVseU9yTm90
IHJlc3BvbmRJbW1lZGlhdGVseU9yTm90KQotewotICAgIEFTU0VSVChtX2N1cnJlbnRCYWNraW5n
U3RvcmVTdGF0ZUlEIDwgbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCk7Ci0KLSAgICBpZiAoIW1f
d2ViUGFnZVByb3h5LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNX
YWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX3dlYlBhZ2VQcm94eS52aWV3U2l6ZSgpLmlzRW1wdHkoKSAmJiAhbV93ZWJQYWdl
UHJveHkudXNlRml4ZWRMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1dhaXRp
bmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9IHJlc3BvbmRJbW1lZGlhdGVseU9yTm90
ID09IFJlc3BvbmRJbW1lZGlhdGVseTsKLQotICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6VXBkYXRlQmFja2luZ1N0b3JlU3RhdGUobV9uZXh0
QmFja2luZ1N0b3JlU3RhdGVJRCwgcmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QgPT0gUmVzcG9uZElt
bWVkaWF0ZWx5LCBtX3dlYlBhZ2VQcm94eS5kZXZpY2VTY2FsZUZhY3RvcigpLCBtX3NpemUsIG1f
c2Nyb2xsT2Zmc2V0KSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOwotICAgIG1fc2Nyb2xsT2Zm
c2V0ID0gSW50U2l6ZSgpOwotCi0gICAgaWYgKG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUpIHsKLSAgICAgICAgLy8gU3RhcnQgdGhlIHJlc3BvbnNpdmVuZXNzIHRpbWVy
LiBXZSB3aWxsIHN0b3AgaXQgd2hlbiB3ZSBoZWFyIGJhY2sgZnJvbSB0aGUgV2ViUHJvY2Vzcwot
ICAgICAgICAvLyBpbiBkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZS4KLSAgICAgICAgbV93ZWJQ
YWdlUHJveHkucHJvY2VzcygpLnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOwotICAgIH0K
LQotICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlICYmICFt
X2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFdhaXQgZm9yIHRoZSBE
aWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlLiBOb3JtYWxseSB3ZSBkbyB0aGlzIGlu
IERyYXdpbmdBcmVhUHJveHlJbXBsOjpwYWludCwgYnV0IHRoYXQKLSAgICAgICAgLy8gZnVuY3Rp
b24gaXMgbmV2ZXIgY2FsbGVkIHdoZW4gaW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZS4K
LSAgICAgICAgd2FpdEZvckFuZERpc3BhdGNoRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OndhaXRGb3JBbmREaXNwYXRj
aERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCkKLXsKLSAgICBBU1NFUlQobV9pc1dhaXRpbmdG
b3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk7Ci0KLSAgICBpZiAoIW1fd2ViUGFnZVByb3h5
LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3dlYlBhZ2VQcm94eS5wcm9j
ZXNzKCkuc3RhdGUoKSA9PSBXZWJQcm9jZXNzUHJveHk6OlN0YXRlOjpMYXVuY2hpbmcpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiB3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVs
eSB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIG9sZGVzdCBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0
ZSBtZXNzYWdlIHRoYXQKLSAgICAvLyBoYXNuJ3QgeWV0IGJlZW4gcHJvY2Vzc2VkLiBCdXQgaXQg
bWlnaHQgYmUgYmV0dGVyIHRvIHNraXAgYWhlYWQgdG8gc29tZSBvdGhlciBEaWRVcGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZQotICAgIC8vIG1lc3NhZ2UsIGlmIG11bHRpcGxlIERpZFVwZGF0ZUJhY2tp
bmdTdG9yZVN0YXRlIG1lc3NhZ2VzIGFyZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZC4gRm9yIGlu
c3RhbmNlLCB3ZSBjb3VsZAotICAgIC8vIGNob29zZSB0aGUgbW9zdCByZWNlbnQgb25lLCBvciB0
aGUgb25lIHRoYXQgaXMgY2xvc2VzdCB0byBvdXIgY3VycmVudCBzaXplLgotCi0gICAgLy8gVGhl
IHRpbWVvdXQgd2UgdXNlIHdoZW4gd2FpdGluZyBmb3IgYSBEaWRVcGRhdGVCYWNraW5nU3RvcmVT
dGF0ZSBtZXNzYWdlIHdoZW4gd2UncmUgYXNrZWQgdG8gcGFpbnQgaXMgNTAwIG1pbGxpc2Vjb25k
cy4KLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuY29ubmVjdGlvbigpLT53YWl0Rm9yQW5k
RGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6RGlkVXBkYXRl
QmFja2luZ1N0b3JlU3RhdGU+KG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzKDUwMCkpOwotfQotCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjplbnRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVy
VHJlZUNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKGFsd2F5c1VzZUNvbXBvc2l0aW5nKCkgfHwgIWlz
SW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKLQogICAgIG1fYmFja2luZ1N0b3JlID0g
bnVsbHB0cjsKLSAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBsYXllclRyZWVDb250ZXh0OwotICAg
IG1fd2ViUGFnZVByb3h5LmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVl
Q29udGV4dCk7Ci19Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykg
JiYgIVVTRShSRURJUkVDVEVEX1hDT01QT1NJVEVfV0lORE9XKQotdm9pZCBEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90IGhh
bmRsZSkKLXsKLSAgICBpZiAoIW1faGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZSkgewotICAgICAgICBt
X3BlbmRpbmdOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcgPSBoYW5kbGU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OkRyYXdpbmdBcmVhOjpTZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmco
aGFuZGxlKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCksIElQQzo6RGlzcGF0Y2hNZXNzYWdlRXZl
bldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1w
bDo6ZGVzdHJveU5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpCi17Ci0gICAgaWYg
KG1fcGVuZGluZ05hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZykgewotICAgICAgICBt
X3BlbmRpbmdOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcgPSAwOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGJvb2wgaGFuZGxlZDsKLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9j
ZXNzKCkuc2VuZFN5bmMoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpEZXN0cm95TmF0aXZlU3VyZmFj
ZUhhbmRsZUZvckNvbXBvc2l0aW5nKCksIE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6RGVzdHJveU5h
dGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZzo6UmVwbHkoaGFuZGxlZCksIG1fd2ViUGFn
ZVByb3h5LnBhZ2VJRCgpKTsKLX0KLSNlbmRpZgotCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBs
OjpkaXNwYXRjaEFmdGVyRW5zdXJpbmdEcmF3aW5nKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2VQ
cm94eS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jhc2U6
OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY2FsbGJhY2tGdW5jdGlvbl0geyBjYWxsYmFj
a0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOyB9KTsKLX0KLQotdm9pZCBEcmF3
aW5nQXJlYVByb3h5SW1wbDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKLXsKLSAg
ICBBU1NFUlQoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwotCi0gICAgbV9sYXll
clRyZWVDb250ZXh0ID0gTGF5ZXJUcmVlQ29udGV4dCgpOwotICAgIG1fd2ViUGFnZVByb3h5LmV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotfQotCi12b2lkIERyYXdpbmdBcmVhUHJv
eHlJbXBsOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVD
b250ZXh0JiBsYXllclRyZWVDb250ZXh0KQotewotICAgIEFTU0VSVChpc0luQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKSk7Ci0KLSAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBsYXllclRyZWVD
b250ZXh0OwotICAgIG1fd2ViUGFnZVByb3h5LnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKGxheWVyVHJlZUNvbnRleHQpOworICAgIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6
ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKIH0KIAog
dm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlzY2FyZEJhY2tpbmdTdG9yZVNvb24oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAppbmRleCAx
ZWQ2ZDAwLi4wMTFjNGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eUltcGwuaApAQCAtMjYsOSArMjYsOSBAQAogI2lmbmRlZiBEcmF3aW5nQXJlYVBy
b3h5SW1wbF9oCiAjZGVmaW5lIERyYXdpbmdBcmVhUHJveHlJbXBsX2gKIAorI2luY2x1ZGUgIkFj
Y2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgog
I2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0
LmgiCiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzcsODEgKzM3LDMyIEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNs
YXNzIERyYXdpbmdBcmVhUHJveHlJbXBsIDogcHVibGljIERyYXdpbmdBcmVhUHJveHkgeworY2xh
c3MgRHJhd2luZ0FyZWFQcm94eUltcGwgZmluYWwgOiBwdWJsaWMgQWNjZWxlcmF0ZWREcmF3aW5n
QXJlYVByb3h5IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBEcmF3aW5nQXJlYVByb3h5SW1wbChX
ZWJQYWdlUHJveHkmKTsKICAgICB2aXJ0dWFsIH5EcmF3aW5nQXJlYVByb3h5SW1wbCgpOwogCiAg
ICAgdm9pZCBwYWludChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6UmVnaW9uJiB1bnBhaW50ZWRSZWdpb24pOwog
Ci0gICAgYm9vbCBpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBjb25zdCB7IHJldHVy
biBhbHdheXNVc2VDb21wb3NpdGluZygpIHx8ICFtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgp
OyB9Ci0KLSAgICBib29sIGhhc1JlY2VpdmVkRmlyc3RVcGRhdGUoKSBjb25zdCB7IHJldHVybiBt
X2hhc1JlY2VpdmVkRmlyc3RVcGRhdGU7IH0KLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYg
UExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAg
dm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QpOwotICAg
IHZvaWQgZGVzdHJveU5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpOwotI2VuZGlm
Ci0KLSAgICB2b2lkIGRpc3BhdGNoQWZ0ZXJFbnN1cmluZ0RyYXdpbmcoc3RkOjpmdW5jdGlvbjx2
b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4pIG92ZXJyaWRlOwotCiBwcml2YXRlOgogICAgIC8v
IERyYXdpbmdBcmVhUHJveHkKLSAgICB2b2lkIHNpemVEaWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0KICAgICB2b2lk
IHNldEJhY2tpbmdTdG9yZUlzRGlzY2FyZGFibGUoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3
YWl0Rm9yQmFja2luZ1N0b3JlVXBkYXRlT25OZXh0UGFpbnQoKSBvdmVycmlkZTsKIAogICAgIC8v
IElQQyBtZXNzYWdlIGhhbmRsZXJzCiAgICAgdm9pZCB1cGRhdGUodWludDY0X3QgYmFja2luZ1N0
b3JlU3RhdGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3Qg
VXBkYXRlSW5mbyYsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3Rh
dGVJRCwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNv
bnN0IFVwZGF0ZUluZm8mKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgaW5jb3Jwb3JhdGVVcGRhdGUoY29uc3Qg
VXBkYXRlSW5mbyYpOwogCi0gICAgZW51bSBSZXNwb25kSW1tZWRpYXRlbHlPck5vdCB7IERvTm90
UmVzcG9uZEltbWVkaWF0ZWx5LCBSZXNwb25kSW1tZWRpYXRlbHkgfTsKLSAgICB2b2lkIGJhY2tp
bmdTdG9yZVN0YXRlRGlkQ2hhbmdlKFJlc3BvbmRJbW1lZGlhdGVseU9yTm90KTsKLSAgICB2b2lk
IHNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShSZXNwb25kSW1tZWRpYXRlbHlPck5vdCk7Ci0g
ICAgdm9pZCB3YWl0Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOwot
Ci0gICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKTsKLSAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwot
ICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVl
Q29udGV4dCYpOwotICAgIGJvb2wgYWx3YXlzVXNlQ29tcG9zaXRpbmcoKSBjb25zdDsKKyAgICB2
b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4
dCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkaXNjYXJkQmFja2luZ1N0b3JlU29vbigpOwogICAg
IHZvaWQgZGlzY2FyZEJhY2tpbmdTdG9yZSgpOwogCi0gICAgLy8gVGhlIHN0YXRlIElEIGNvcnJl
c3BvbmRpbmcgdG8gb3VyIGN1cnJlbnQgYmFja2luZyBzdG9yZS4gVXBkYXRlZCB3aGVuZXZlciB3
ZSBhbGxvY2F0ZQotICAgIC8vIGEgbmV3IGJhY2tpbmcgc3RvcmUuIEFueSBtZXNzYWdlcyByZWNl
aXZlZCB0aGF0IGNvcnJlc3BvbmQgdG8gYW4gZWFybGllciBzdGF0ZSBhcmUgaWdub3JlZCwKLSAg
ICAvLyBhcyB0aGV5IGRvbid0IGFwcGx5IHRvIG91ciBjdXJyZW50IGJhY2tpbmcgc3RvcmUuCi0g
ICAgdWludDY0X3QgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRDsKLQotICAgIC8vIFRoZSBu
ZXh0IGJhY2tpbmcgc3RvcmUgc3RhdGUgSUQgd2Ugd2lsbCByZXF1ZXN0IHRoZSB3ZWIgcHJvY2Vz
cyB1cGRhdGUgdG8uIEluY3JlbWVudGVkCi0gICAgLy8gd2hlbmV2ZXIgb3VyIHN0YXRlIGNoYW5n
ZXMgaW4gYSB3YXkgdGhhdCB3aWxsIHJlcXVpcmUgYSBuZXcgYmFja2luZyBzdG9yZSB0byBiZSBh
bGxvY2F0ZWQuCi0gICAgdWludDY0X3QgbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRDsKLQotICAg
IC8vIFRoZSBjdXJyZW50IGxheWVyIHRyZWUgY29udGV4dC4KLSAgICBMYXllclRyZWVDb250ZXh0
IG1fbGF5ZXJUcmVlQ29udGV4dDsKLQotICAgIC8vIFdoZXRoZXIgd2UndmUgc2VudCBhIFVwZGF0
ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UgYW5kIGFyZSBub3cgd2FpdGluZyBmb3IgYSBEaWRV
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlLgotICAgIC8vIFVzZWQgdG8gdGhyb3R0bGUg
VXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZXMgc28gd2UgZG9uJ3Qgc2VuZCB0aGVtIGZh
c3RlciB0aGFuIHRoZSBXZWIgcHJvY2VzcyBjYW4gaGFuZGxlLgotICAgIGJvb2wgbV9pc1dhaXRp
bmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZTsKLSAgICAKLSAgICAvLyBGb3IgYSBuZXcg
RHJhd2luZyBBcmVhIGRvbid0IGRyYXcgYW55dGhpbmcgdW50aWwgdGhlIFdlYlByb2Nlc3MgaGFz
IHNlbnQgb3ZlciB0aGUgZmlyc3QgY29udGVudC4KLSAgICBib29sIG1faGFzUmVjZWl2ZWRGaXJz
dFVwZGF0ZTsKLQotICAgIGJvb2wgbV9pc0JhY2tpbmdTdG9yZURpc2NhcmRhYmxlOworICAgIGJv
b2wgbV9pc0JhY2tpbmdTdG9yZURpc2NhcmRhYmxlIHsgdHJ1ZSB9OwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotCiAgICAgUnVuTG9vcDo6VGltZXI8
RHJhd2luZ0FyZWFQcm94eUltcGw+IG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyOwotCi0jaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBQTEFURk9STShHVEspCi0gICAgdWludDY0X3QgbV9wZW5k
aW5nTmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nIHsgMCB9OwotI2VuZGlmCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZp
ZXcuY3BwCmluZGV4IGExOGFjMDEuLmQ3ZjdiNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJWaWV3LmNwcApAQCAtMjksNyArMjksNyBAQAogCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQogI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAi
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgiCiAj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKICNpbmNsdWRlICJEb3du
bG9hZE1hbmFnZXJFZmwuaCIKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIFdlYlZpZXc6OnNldFZp
c2libGUoYm9vbCB2aXNpYmxlKQogICAgIG1fdmlzaWJsZSA9IHZpc2libGU7CiAgICAgbV9wYWdl
LT52aWV3U3RhdGVEaWRDaGFuZ2UoVmlld1N0YXRlOjpJc1Zpc2libGUpOwogCi0gICAgaWYgKENv
b3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxDb29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHkqPihwYWdlKCktPmRyYXdpbmdBcmVhKCkpKQorICAgIGlm
IChhdXRvKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQ
cm94eSo+KHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkpCiAgICAgICAgIGRyYXdpbmdBcmVhLT52aXNp
YmlsaXR5RGlkQ2hhbmdlKCk7CiB9CiAKQEAgLTM2OCw3ICszNjgsNyBAQCBBZmZpbmVUcmFuc2Zv
cm0gV2ViVmlldzo6dHJhbnNmb3JtVG9TY2VuZSgpIGNvbnN0CiAKIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZSogV2ViVmlldzo6Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkKIHsKLSAgICBpZiAo
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PENv
b3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSo+KHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkpCisgICAg
aWYgKGF1dG8qIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8QWNjZWxlcmF0ZWREcmF3aW5nQXJl
YVByb3h5Kj4ocGFnZSgpLT5kcmF3aW5nQXJlYSgpKSkKICAgICAgICAgcmV0dXJuIGRyYXdpbmdB
cmVhLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLmNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSgpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zNzYsMTIgKzM3NiwxMiBAQCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUqIFdlYlZpZXc6OmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgp
CiAKIHZvaWQgV2ViVmlldzo6dXBkYXRlVmlld3BvcnRTaXplKCkKIHsKLSAgICBpZiAoQ29vcmRp
bmF0ZWREcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PENvb3JkaW5h
dGVkRHJhd2luZ0FyZWFQcm94eSo+KHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkpIHsKKyAgICBpZiAo
YXV0byogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJv
eHkqPihwYWdlKCktPmRyYXdpbmdBcmVhKCkpKSB7CiAgICAgICAgIC8vIFdlYiBQcm9jZXNzIGV4
cGVjdHMgc2l6ZXMgaW4gVUkgdW5pdHMsIGFuZCBub3QgcmF3IGRldmljZSB1bml0cy4KICAgICAg
ICAgZHJhd2luZ0FyZWEtPnNldFNpemUocm91bmRlZEludFNpemUoZGlwU2l6ZSgpKSwgSW50U2l6
ZSgpLCBJbnRTaXplKCkpOwogICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdChj
b250ZW50UG9zaXRpb24oKSwgdmlzaWJsZUNvbnRlbnRzU2l6ZSgpKTsKICAgICAgICAgdmlzaWJs
ZUNvbnRlbnRzUmVjdC5pbnRlcnNlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29udGVudHNT
aXplKCkpKTsKLSAgICAgICAgZHJhd2luZ0FyZWEtPnNldFZpc2libGVDb250ZW50c1JlY3Qodmlz
aWJsZUNvbnRlbnRzUmVjdCwgRmxvYXRQb2ludCgpKTsKKyAgICAgICAgZHJhd2luZ0FyZWEtPmNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkuc2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNp
YmxlQ29udGVudHNSZWN0LCBGbG9hdFBvaW50KCkpOwogICAgIH0KIH0KIApAQCAtNDA2LDcgKzQw
Niw3IEBAIFdlYkNvcmU6OkZsb2F0U2l6ZSBXZWJWaWV3Ojp2aXNpYmxlQ29udGVudHNTaXplKCkg
Y29uc3QKIAogc3RkOjp1bmlxdWVfcHRyPERyYXdpbmdBcmVhUHJveHk+IFdlYlZpZXc6OmNyZWF0
ZURyYXdpbmdBcmVhUHJveHkoKQogewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWFQcm94eT4oKm1fcGFnZSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8QWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5PigqbV9wYWdlKTsKIH0KIAogdm9pZCBX
ZWJWaWV3OjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYgcmVnaW9u
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285230</attachid>
            <date>2016-08-03 07:48:30 -0700</date>
            <delta_ts>2016-08-05 10:16:50 -0700</delta_ts>
            <desc>Try to fix EFL build</desc>
            <filename>wk2-drawing-area-proxy.diff</filename>
            <type>text/plain</type>
            <size>64228</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0MzIwYzQwLi5jMjU2ZWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzIg
QEAKKzIwMTYtMDgtMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIER1cGxpY2F0ZWQgY29kZSBpbiBEcmF3aW5nQXJlYVByb3h5SW1wbCBhbmQg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA1MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTYW1lIGxvZ2ljIGFzIGluIHIyMDI4NTUgYnV0IGluIHRoZSBV
SSBwcm9jZXNzLiBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkgaXMganVzdCBhIGNvcHkgcGFz
dGUgb2YKKyAgICAgICAgRHJhd2luZ0FyZWFQcm94eUltcGwgd2l0aCBub24tYWNjZWxlcmF0ZWQg
Y29kZSBwYXRoIHJlbW92ZWQuIFRoZXJlJ3MgYWN0dWFsbHkgbm90aGluZyAob3IgdmVyeSBsaXR0
bGUpIHNwZWNpZmljCisgICAgICAgIHRvIGNvb3JkaW5hdGVkIGdyYXBoaWNzIGluIHRoZSBDb29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHkgaW1wbGVtZW50YXRpb24uIFRoaXMgcGF0Y2ggcmVuYW1l
cworICAgICAgICBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkgYXMgQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYVByb3h5IGFuZCBtYWtlcyBEcmF3aW5nQXJlYVByb3h5SW1wbCBpbmhlcml0IGZyb20g
aXQsIHNvCisgICAgICAgIHRoYXQgaW4gY2FzZSBvZiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyB0
aGUgcGFyZW50IGNsYXNzIGlzIHVzZWQsIGFuZCBEcmF3aW5nQXJlYVByb3h5SW1wbCBvbmx5IGFk
ZHMgdGhlIG5vbgorICAgICAgICBhY2NlbGVyYXRlZCBjb2RlIHBhdGguCisgICAgICAgIFRvIHNp
bXBsaWZ5IHRoZSBjb21tb24gQVBJIG9mIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eSwgSSBo
YXZlIGNoYW5nZWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgdG8KKyAgICAgICAgcmVj
ZWl2ZSBhIFdlYlBhZ2VQcm94eSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZCBvZiBhIGRyYXdp
bmcgYXJlYSwgc2luY2UgdGhlIGRyYXdpbmcgYXJlYSB3YXMgdXNlZCBqdXN0IHRvIGdldAorICAg
ICAgICB0aGUgcGFnZSBwcm94eS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAg
ICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BY2NlbGVyYXRl
ZERyYXdpbmdBcmVhUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcC4K
KyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpBY2NlbGVyYXRl
ZERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdB
cmVhUHJveHk6On5BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0
OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OmFsd2F5c1VzZUNvbXBvc2l0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpkaXNwYXRjaEFmdGVy
RW5zdXJpbmdEcmF3aW5nKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJl
YVByb3h5OjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3
aW5nQXJlYVByb3h5OjpkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6dmlzaWJpbGl0eURpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckJhY2tp
bmdTdG9yZVVwZGF0ZU9uTmV4dFBhaW50KToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYVByb3h5OjpkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6QWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6YmFja2lu
Z1N0b3JlU3RhdGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdp
bmdBcmVhUHJveHk6OnNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckFuZERpc3BhdGNoRGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdp
bmdBcmVhUHJveHk6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGVzdHJveU5hdGl2ZVN1
cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FjY2VsZXJh
dGVkRHJhd2luZ0FyZWFQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmguCisg
ICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6aXNJbkFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5n
QXJlYVByb3h5Ojpjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdw
b3J0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNv
bW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRT
Y3JvbGxPZmZzZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnN5bmNWaXNpYmxlQ29udGVudHMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkRy
YXdpbmdBcmVhUHJveHlJbXBsOjpkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJv
eHlJbXBsOjp+RHJhd2luZ0FyZWFQcm94eUltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6dXBkYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmluY29ycG9yYXRlVXBkYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmRpc2NhcmRCYWNraW5nU3RvcmVT
b29uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmRp
c2NhcmRCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Ojpjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Ojp1cGRhdGVWaWV3cG9ydFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpjcmVh
dGVEcmF3aW5nQXJlYVByb3h5KToKKwogMjAxNi0wOC0wMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQmFkIHBlcmZvcm1hbmNlIGlu
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUgd2l0aCB0aGUgbW9kZXNldHRpbmcgaW50ZWwg
ZHJpdmVyIGFuZCBEUkkzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMjAy
MGZiZS4uZmFhN2JiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTU0LDYgKzU0LDcg
QEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBTaGFyZWQvdW5peC9DaGlsZFBy
b2Nlc3NNYWluLmNwcAogCisgICAgVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eS5jcHAKICAgICBVSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNwcAogICAgIFVJUHJvY2Vzcy9EZWZh
dWx0VW5kb0NvbnRyb2xsZXIuY3BwCiAgICAgVUlQcm9jZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNv
ZGluZ05vbmUuY3BwCkBAIC0xMTIsNyArMTEzLDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VS
Q0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKIAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eS5jcHAKICAgICBVSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKICAg
ICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNw
cAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlBhZ2VQcm94eUNvb3JkaW5h
dGVkR3JhcGhpY3MuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5j
bWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDM2OWFhMDIuLjc4
ODk2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC04MSw2ICs4MSw3IEBAIGxpc3Qo
QVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL3VuaXgvQ2hpbGRQcm9jZXNzTWFp
bi5jcHAKIAorICAgIFVJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCiAg
ICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAKICAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9D
b250cm9sbGVyLmNwcAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERyYXdpbmdBcmVh
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWFQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiNjI1Ygot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BY2NlbGVyYXRlZERy
YXdpbmdBcmVhUHJveHkuY3BwCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eS5oIgorCisjaW5jbHVk
ZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlICJVcGRhdGVJ
bmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5j
ZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
Z2lvbi5oPgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKKyNp
bmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgorI2VuZGlmCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYVByb3h5OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVByb3h5
JiB3ZWJQYWdlUHJveHkpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VT
UykKKyAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlQ29vcmRpbmF0ZWQsIHdl
YlBhZ2VQcm94eSkKKyNlbHNlCisgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlw
ZUltcGwsIHdlYlBhZ2VQcm94eSkKKyNlbmRpZgoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDU19NVUxUSVBST0NFU1MpCisgICAgLy8gQ29uc3RydWN0IHRoZSBwcm94eSBlYXJseSB0byBh
bGxvdyBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyB3aGlsZSBBQyBpcyBl
bnRlcmVkIHRoZXJlLgorICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgPSBzdGQ6
Om1ha2VfdW5pcXVlPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Pih3ZWJQYWdlUHJveHkp
OworI2VuZGlmCit9CisKK0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6fkFjY2VsZXJhdGVk
RHJhd2luZ0FyZWFQcm94eSgpCit7CisgICAgLy8gTWFrZSBzdXJlIHRvIGV4aXQgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcgbW9kZS4KKyAgICBpZiAoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKCkpCisgICAgICAgIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOworfQorCiti
b29sIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6YWx3YXlzVXNlQ29tcG9zaXRpbmcoKSBj
b25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2VQcm94eS5wcmVmZXJlbmNlcygpLmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKCkgJiYgbV93ZWJQYWdlUHJveHkucHJlZmVyZW5jZXMoKS5m
b3JjZUNvbXBvc2l0aW5nTW9kZSgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQ
cm94eTo6ZGlzcGF0Y2hBZnRlckVuc3VyaW5nRHJhd2luZyhzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCit7CisgICAgaWYgKCFtX3dlYlBh
Z2VQcm94eS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jh
c2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY2FsbGJhY2tGdW5jdGlvbl0geworICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOworICAgIH0p
OworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6c2l6ZURpZENoYW5nZSgp
Cit7CisgICAgYmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5KTsK
K30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OmRldmljZVNjYWxlRmFjdG9y
RGlkQ2hhbmdlKCkKK3sKKyAgICBiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNwb25kSW1t
ZWRpYXRlbHkpOworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eTo6dmlzaWJp
bGl0eURpZENoYW5nZSgpCit7CisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGJhY2tpbmcgc3Rv
cmUsIGdvIGFoZWFkIGFuZCBtYXJrIHRoZSBiYWNraW5nIHN0b3JlIGFzIGJlaW5nIGNoYW5nZWQg
c28KKyAgICAvLyB0aGF0IHdoZW4gcGFpbnQgd2UnbGwgYWN0dWFsbHkgd2FpdCBmb3Igc29tZXRo
aW5nIHRvIHBhaW50IGFuZCBub3QgZmxhc2ggd2hpdGUuCisgICAgaWYgKG1fbGF5ZXJUcmVlQ29u
dGV4dC5pc0VtcHR5KCkpCisgICAgICAgIGJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKERvTm90
UmVzcG9uZEltbWVkaWF0ZWx5KTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJv
eHk6OndhaXRGb3JCYWNraW5nU3RvcmVVcGRhdGVPbk5leHRQYWludCgpCit7CisgICAgbV9oYXNS
ZWNlaXZlZEZpcnN0VXBkYXRlID0gdHJ1ZTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdB
cmVhUHJveHk6OmRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9y
ZVN0YXRlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IExheWVyVHJlZUNv
bnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgQVNTRVJUX0FSRyhiYWNraW5nU3RvcmVT
dGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQp
OworICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJ
RCA+IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpOworICAgIG1fY3VycmVudEJhY2tpbmdT
dG9yZVN0YXRlSUQgPSBiYWNraW5nU3RvcmVTdGF0ZUlEOworCisgICAgbV9pc1dhaXRpbmdGb3JE
aWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9IGZhbHNlOworCisgICAgLy8gU3RvcCB0aGUgcmVz
cG9uc2l2ZW5lc3MgdGltZXIgdGhhdCB3YXMgc3RhcnRlZCBpbiBzZW5kVXBkYXRlQmFja2luZ1N0
b3JlU3RhdGUuCisgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnJlc3BvbnNpdmVuZXNzVGlt
ZXIoKS5zdG9wKCk7CisKKyAgICBpZiAobGF5ZXJUcmVlQ29udGV4dCAhPSBtX2xheWVyVHJlZUNv
bnRleHQpIHsKKyAgICAgICAgaWYgKGxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpICYmICFtX2xh
eWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2xheWVyVHJlZUNvbnRleHQu
aXNFbXB0eSgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5
KCkgJiYgbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKKyAgICAgICAgICAg
IEFTU0VSVChsYXllclRyZWVDb250ZXh0ID09IG1fbGF5ZXJUcmVlQ29udGV4dCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShs
YXllclRyZWVDb250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVChsYXllclRyZWVDb250ZXh0ID09
IG1fbGF5ZXJUcmVlQ29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9uZXh0
QmFja2luZ1N0b3JlU3RhdGVJRCAhPSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKQorICAg
ICAgICBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoUmVzcG9uZEltbWVkaWF0ZWx5KTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlID0gdHJ1ZTsKKworI2lm
IFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElSRUNURURf
WENPTVBPU0lURV9XSU5ET1cpCisgICAgICAgIGlmIChtX3BlbmRpbmdOYXRpdmVTdXJmYWNlSGFu
ZGxlRm9yQ29tcG9zaXRpbmcpIHsKKyAgICAgICAgICAgIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVG
b3JDb21wb3NpdGluZyhtX3BlbmRpbmdOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcp
OworICAgICAgICAgICAgbV9wZW5kaW5nTmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5n
ID0gMDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCit2b2lkIEFjY2VsZXJhdGVkRHJh
d2luZ0FyZWFQcm94eTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBi
YWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250
ZXh0KQoreworICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3Jl
U3RhdGVJRCA8PSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKKyAgICBpZiAoYmFja2lu
Z1N0b3JlU3RhdGVJRCA8IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29u
dGV4dCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpleGl0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3Qg
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBBU1NFUlRfQVJHKGJhY2tpbmdTdG9yZVN0
YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJ
RCk7CisgICAgaWYgKGJhY2tpbmdTdG9yZVN0YXRlSUQgPCBtX2N1cnJlbnRCYWNraW5nU3RvcmVT
dGF0ZUlEKQorICAgICAgICByZXR1cm47CisKKyAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNv
bnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgQVNTRVJUX0FS
RyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fY3VycmVudEJh
Y2tpbmdTdG9yZVN0YXRlSUQpOworICAgIGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEIDwgbV9jdXJy
ZW50QmFja2luZ1N0b3JlU3RhdGVJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdXBkYXRlQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Cit9CisKK3ZvaWQgQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNw
b25kSW1tZWRpYXRlbHlPck5vdCByZXNwb25kSW1tZWRpYXRlbHlPck5vdCkKK3sKKyAgICArK21f
bmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQ7CisgICAgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
KHJlc3BvbmRJbW1lZGlhdGVseU9yTm90KTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdB
cmVhUHJveHk6OnNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShSZXNwb25kSW1tZWRpYXRlbHlP
ck5vdCByZXNwb25kSW1tZWRpYXRlbHlPck5vdCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50QmFj
a2luZ1N0b3JlU3RhdGVJRCA8IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQpOworCisgICAgaWYg
KCFtX3dlYlBhZ2VQcm94eS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV93ZWJQYWdlUHJveHkudmlld1NpemUoKS5pc0VtcHR5KCkgJiYgIW1fd2Vi
UGFnZVByb3h5LnVzZUZpeGVkTGF5b3V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNX
YWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgPSByZXNwb25kSW1tZWRpYXRlbHlP
ck5vdCA9PSBSZXNwb25kSW1tZWRpYXRlbHk7CisKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKG1f
bmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQsIHJlc3BvbmRJbW1lZGlhdGVseU9yTm90ID09IFJlc3Bv
bmRJbW1lZGlhdGVseSwgbV93ZWJQYWdlUHJveHkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgbV9zaXpl
LCBtX3Njcm9sbE9mZnNldCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKKyAgICBtX3Njcm9s
bE9mZnNldCA9IEludFNpemUoKTsKKworICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKSB7CisgICAgICAgIC8vIFN0YXJ0IHRoZSByZXNwb25zaXZlbmVzcyB0
aW1lci4gV2Ugd2lsbCBzdG9wIGl0IHdoZW4gd2UgaGVhciBiYWNrIGZyb20gdGhlIFdlYlByb2Nl
c3MKKyAgICAgICAgLy8gaW4gZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUuCisgICAgICAgIG1f
d2ViUGFnZVByb3h5LnByb2Nlc3MoKS5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKKyAg
ICB9CisKKyAgICBpZiAobV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSAm
JiAhbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBXYWl0IGZvciB0
aGUgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZS4gTm9ybWFsbHkgd2UgZG8gdGhp
cyBpbiBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50LCBidXQgdGhhdAorICAgICAg
ICAvLyBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQgd2hlbiBpbiBhY2NlbGVyYXRlZCBjb21wb3Np
dGluZyBtb2RlLgorICAgICAgICB3YWl0Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZSgpOworICAgIH0KK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6
OndhaXRGb3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCkKK3sKKyAgICBB
U1NFUlQobV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk7CisKKyAgICBp
ZiAoIW1fd2ViUGFnZVByb3h5LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICht
X3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc3RhdGUoKSA9PSBXZWJQcm9jZXNzUHJveHk6OlN0YXRl
OjpMYXVuY2hpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB3YWl0Rm9yQW5k
RGlzcGF0Y2hJbW1lZGlhdGVseSB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIG9sZGVzdCBEaWRVcGRh
dGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlIHRoYXQKKyAgICAvLyBoYXNuJ3QgeWV0IGJlZW4g
cHJvY2Vzc2VkLiBCdXQgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIHNraXAgYWhlYWQgdG8gc29tZSBv
dGhlciBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZQorICAgIC8vIG1lc3NhZ2UsIGlmIG11bHRp
cGxlIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2VzIGFyZSB3YWl0aW5nIHRvIGJl
IHByb2Nlc3NlZC4gRm9yIGluc3RhbmNlLCB3ZSBjb3VsZAorICAgIC8vIGNob29zZSB0aGUgbW9z
dCByZWNlbnQgb25lLCBvciB0aGUgb25lIHRoYXQgaXMgY2xvc2VzdCB0byBvdXIgY3VycmVudCBz
aXplLgorCisgICAgLy8gVGhlIHRpbWVvdXQsIGluIHNlY29uZHMsIHdlIHVzZSB3aGVuIHdhaXRp
bmcgZm9yIGEgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSB3aGVuIHdlJ3JlIGFz
a2VkIHRvIHBhaW50LgorICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCkt
PndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5
OjpEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNTAwKSk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYVByb3h5OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVy
VHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgQVNTRVJUKGFsd2F5c1VzZUNv
bXBvc2l0aW5nKCkgfHwgIWlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKKworICAg
IG1fbGF5ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7CisgICAgbV93ZWJQYWdlUHJv
eHkuZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKK30K
Kwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OmV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpCit7CisgICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSgpKTsKKworICAgIG1fbGF5ZXJUcmVlQ29udGV4dCA9IExheWVyVHJlZUNvbnRleHQoKTsKKyAg
ICBtX3dlYlBhZ2VQcm94eS5leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKK30KKwor
dm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7Cisg
ICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKKworICAgIG1fbGF5
ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7CisgICAgbV93ZWJQYWdlUHJveHkudXBk
YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Cit9CisKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVE
X1hDT01QT1NJVEVfV0lORE9XKQordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OnNl
dE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCBoYW5kbGUpCit7Cisg
ICAgaWYgKCFtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUpIHsKKyAgICAgICAgbV9wZW5kaW5nTmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nID0gaGFuZGxlOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpEcmF3
aW5nQXJlYTo6U2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKGhhbmRsZSksIG1f
d2ViUGFnZVByb3h5LnBhZ2VJRCgpLCBJUEM6OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGlu
Z0ZvclN5bmNSZXBseSk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5Ojpk
ZXN0cm95TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCkKK3sKKyAgICBpZiAobV9w
ZW5kaW5nTmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKSB7CisgICAgICAgIG1fcGVu
ZGluZ05hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyA9IDA7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgYm9vbCBoYW5kbGVkOworICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3Mo
KS5zZW5kU3luYyhNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFu
ZGxlRm9yQ29tcG9zaXRpbmcoKSwgTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpEZXN0cm95TmF0aXZl
U3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nOjpSZXBseShoYW5kbGVkKSwgbV93ZWJQYWdlUHJv
eHkucGFnZUlEKCkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTlkOTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YVByb3h5LmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAo
QykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTsK
KworY2xhc3MgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5IDogcHVibGljIERyYXdpbmdBcmVh
UHJveHkgeworcHVibGljOgorICAgIGV4cGxpY2l0IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94
eShXZWJQYWdlUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5BY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJv
eHkoKTsKKworICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gYWx3YXlzVXNlQ29tcG9zaXRpbmcoKSB8fCAhbV9sYXllclRyZWVDb250ZXh0Lmlz
RW1wdHkoKTsgfQorICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZSgpOworCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKKyAgICBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSYgY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKSBjb25zdCB7IHJldHVy
biAqbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5nZXQoKTsgfQorI2VuZGlmCisKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShSRURJUkVDVEVE
X1hDT01QT1NJVEVfV0lORE9XKQorICAgIHZvaWQgc2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKHVpbnQ2NF90KTsKKyAgICB2b2lkIGRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxl
Rm9yQ29tcG9zaXRpbmcoKTsKKyNlbmRpZgorCisgICAgdm9pZCBkaXNwYXRjaEFmdGVyRW5zdXJp
bmdEcmF3aW5nKHN0ZDo6ZnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4pIG92ZXJy
aWRlOworCitwcm90ZWN0ZWQ6CisgICAgLy8gRHJhd2luZ0FyZWFQcm94eQorICAgIHZvaWQgc2l6
ZURpZENoYW5nZSgpIG92ZXJyaWRlOworICAgIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFu
Z2UoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdhaXRGb3JCYWNraW5nU3RvcmVVcGRhdGVPbk5leHRQ
YWludCgpIG92ZXJyaWRlOworCisgICAgLy8gSVBDIG1lc3NhZ2UgaGFuZGxlcnMKKyAgICB2b2lk
IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQs
IGNvbnN0IFVwZGF0ZUluZm8mLCBjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKKyAgICB2b2lk
IGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0
ZUlELCBjb25zdCBVcGRhdGVJbmZvJikgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBM
YXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICBlbnVtIFJlc3BvbmRJbW1lZGlhdGVs
eU9yTm90IHsgRG9Ob3RSZXNwb25kSW1tZWRpYXRlbHksIFJlc3BvbmRJbW1lZGlhdGVseSB9Owor
ICAgIHZvaWQgYmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5T3JO
b3QpOworICAgIHZvaWQgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJbW1lZGlh
dGVseU9yTm90KTsKKyAgICB2b2lkIHdhaXRGb3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdT
dG9yZVN0YXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7CisgICAgdm9pZCBleGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoKTsKKyAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKKworICAgIGJvb2wgYWx3YXlzVXNlQ29t
cG9zaXRpbmcoKSBjb25zdDsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19NVUxUSVBS
T0NFU1MpCisgICAgc3RkOjp1bmlxdWVfcHRyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
PiBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OworI2VuZGlmCisKKyAgICAvLyBUaGUg
c3RhdGUgSUQgY29ycmVzcG9uZGluZyB0byBvdXIgY3VycmVudCBiYWNraW5nIHN0b3JlLiBVcGRh
dGVkIHdoZW5ldmVyIHdlIGFsbG9jYXRlCisgICAgLy8gYSBuZXcgYmFja2luZyBzdG9yZS4gQW55
IG1lc3NhZ2VzIHJlY2VpdmVkIHRoYXQgY29ycmVzcG9uZCB0byBhbiBlYXJsaWVyIHN0YXRlIGFy
ZSBpZ25vcmVkLAorICAgIC8vIGFzIHRoZXkgZG9uJ3QgYXBwbHkgdG8gb3VyIGN1cnJlbnQgYmFj
a2luZyBzdG9yZS4KKyAgICB1aW50NjRfdCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEIHsg
MCB9OworCisgICAgLy8gVGhlIG5leHQgYmFja2luZyBzdG9yZSBzdGF0ZSBJRCB3ZSB3aWxsIHJl
cXVlc3QgdGhlIHdlYiBwcm9jZXNzIHVwZGF0ZSB0by4gSW5jcmVtZW50ZWQKKyAgICAvLyB3aGVu
ZXZlciBvdXIgc3RhdGUgY2hhbmdlcyBpbiBhIHdheSB0aGF0IHdpbGwgcmVxdWlyZSBhIG5ldyBi
YWNraW5nIHN0b3JlIHRvIGJlIGFsbG9jYXRlZC4KKyAgICB1aW50NjRfdCBtX25leHRCYWNraW5n
U3RvcmVTdGF0ZUlEIHsgMCB9OworCisgICAgLy8gVGhlIGN1cnJlbnQgbGF5ZXIgdHJlZSBjb250
ZXh0LgorICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworCisgICAgLy8g
V2hldGhlciB3ZSd2ZSBzZW50IGEgVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSBhbmQg
YXJlIG5vdyB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2Uu
CisgICAgLy8gVXNlZCB0byB0aHJvdHRsZSBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdl
cyBzbyB3ZSBkb24ndCBzZW5kIHRoZW0gZmFzdGVyIHRoYW4gdGhlIFdlYiBwcm9jZXNzIGNhbiBo
YW5kbGUuCisgICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
IHsgZmFsc2UgfTsKKworICAgIC8vIEZvciBhIG5ldyBEcmF3aW5nIEFyZWEgZG9uJ3QgZHJhdyBh
bnl0aGluZyB1bnRpbCB0aGUgV2ViUHJvY2VzcyBoYXMgc2VudCBvdmVyIHRoZSBmaXJzdCBjb250
ZW50LgorICAgIGJvb2wgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlIHsgZmFsc2UgfTsKKworI2lm
IFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElSRUNURURf
WENPTVBPU0lURV9XSU5ET1cpCisgICAgdWludDY0X3QgbV9wZW5kaW5nTmF0aXZlU3VyZmFjZUhh
bmRsZUZvckNvbXBvc2l0aW5nIHsgMCB9OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94
eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOTI5OGUuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZERyYXdpbmdBcmVhUHJv
eHkuaCIKLQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0jaW5j
bHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKLSNpbmNsdWRlICJVcGRh
dGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQ
cm94eTo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KFdlYlBhZ2VQcm94eSYgd2ViUGFnZVBy
b3h5KQotICAgIDogRHJhd2luZ0FyZWFQcm94eShEcmF3aW5nQXJlYVR5cGVDb29yZGluYXRlZCwg
d2ViUGFnZVByb3h5KQotICAgICwgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCgwKQotICAg
ICwgbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCgwKQotICAgICwgbV9pc1dhaXRpbmdGb3JEaWRV
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZShmYWxzZSkKLSAgICAsIG1faGFzUmVjZWl2ZWRGaXJzdFVw
ZGF0ZShmYWxzZSkKLXsKLSAgICAvLyBDb25zdHJ1Y3QgdGhlIHByb3h5IGVhcmx5IHRvIGFsbG93
IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNzIHdoaWxlIEFDIGlzIGVudGVy
ZWQgdGhlcmUuCi0gICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk+KHRoaXMpOwotfQotCi1Db29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHk6On5Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkoKQot
ewotICAgIC8vIE1ha2Ugc3VyZSB0byBleGl0IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUu
Ci0gICAgaWYgKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKQotICAgICAgICBleGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdp
bmdBcmVhUHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKLXsKLSAgICBtX3dlYlBhZ2VQcm94eS5zZXRW
aWV3TmVlZHNEaXNwbGF5KHZpZXdwb3J0VmlzaWJsZVJlY3QoKSk7Ci19Ci0KLVdlYkNvcmU6Oklu
dFJlY3QgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3QoKSBjb25zdAot
ewotICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZVByb3h5LnZp
ZXdTaXplKCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlzcGF0
Y2hBZnRlckVuc3VyaW5nRHJhd2luZyhzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpF
cnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2VQcm94eS5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jhc2U6OkVycm9yOjpP
d25lcldhc0ludmFsaWRhdGVkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbY2FsbGJhY2tGdW5jdGlvbl0gewotICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpOwotICAgIH0pOwotfQotCi12b2lk
IENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6c2l6ZURpZENoYW5nZSgpCi17Ci0gICAgYmFj
a2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5KTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkK
LXsKLSAgICBiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNwb25kSW1tZWRpYXRlbHkpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6dmlzaWJpbGl0eURpZENoYW5n
ZSgpCi17Ci0gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGJhY2tpbmcgc3RvcmUsIGdvIGFoZWFk
IGFuZCBtYXJrIHRoZSBiYWNraW5nIHN0b3JlIGFzIGJlaW5nIGNoYW5nZWQgc28KLSAgICAvLyB0
aGF0IHdoZW4gcGFpbnQgd2UnbGwgYWN0dWFsbHkgd2FpdCBmb3Igc29tZXRoaW5nIHRvIHBhaW50
IGFuZCBub3QgZmxhc2ggd2hpdGUuCi0gICAgaWYgKG1fbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5
KCkpCi0gICAgICAgIGJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKERvTm90UmVzcG9uZEltbWVk
aWF0ZWx5KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JC
YWNraW5nU3RvcmVVcGRhdGVPbk5leHRQYWludCgpCi17Ci0gICAgbV9oYXNSZWNlaXZlZEZpcnN0
VXBkYXRlID0gdHJ1ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRp
ZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNv
bnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVy
VHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNr
aW5nU3RvcmVTdGF0ZUlEIDw9IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAgIEFTU0VS
VF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA+IG1fY3VycmVu
dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAgIG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQg
PSBiYWNraW5nU3RvcmVTdGF0ZUlEOwotCi0gICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZSA9IGZhbHNlOwotCi0gICAgLy8gU3RvcCB0aGUgcmVzcG9uc2l2ZW5lc3Mg
dGltZXIgdGhhdCB3YXMgc3RhcnRlZCBpbiBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUuCi0g
ICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdG9wKCk7
Ci0KLSAgICBpZiAobGF5ZXJUcmVlQ29udGV4dCAhPSBtX2xheWVyVHJlZUNvbnRleHQpIHsKLSAg
ICAgICAgaWYgKCFtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2xh
eWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbGF5
ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Ci0gICAgICAgICAgICBBU1NFUlQobGF5
ZXJUcmVlQ29udGV4dCA9PSBtX2xheWVyVHJlZUNvbnRleHQpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQgIT0gbV9jdXJyZW50QmFja2luZ1N0
b3JlU3RhdGVJRCkKLSAgICAgICAgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJ
bW1lZGlhdGVseSk7Ci0gICAgZWxzZQotICAgICAgICBtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUg
PSB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25z
dCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQotewotICAgIEFTU0VSVF9BUkco
YmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA8PSBtX2N1cnJlbnRCYWNr
aW5nU3RvcmVTdGF0ZUlEKTsKLSAgICBpZiAoYmFja2luZ1N0b3JlU3RhdGVJRCA8IG1fY3VycmVu
dEJhY2tpbmdTdG9yZVN0YXRlSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWREcmF3aW5nQXJlYVByb3h5OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWlu
dDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykK
LXsKLSAgICBBU1NFUlRfQVJHKGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRl
SUQgPD0gbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCk7Ci0gICAgaWYgKGJhY2tpbmdTdG9y
ZVN0YXRlSUQgPCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxh
eWVyVHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBi
YWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAg
IGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEIDwgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
bGF5ZXJUcmVlQ29udGV4dCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5
OjpiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShSZXNwb25kSW1tZWRpYXRlbHlPck5vdCByZXNw
b25kSW1tZWRpYXRlbHlPck5vdCkKLXsKLSAgICArK21fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQ7
Ci0gICAgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHJlc3BvbmRJbW1lZGlhdGVseU9yTm90
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnNlbmRVcGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZShSZXNwb25kSW1tZWRpYXRlbHlPck5vdCByZXNwb25kSW1tZWRpYXRlbHlP
ck5vdCkKLXsKLSAgICBBU1NFUlQobV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCA8IG1fbmV4
dEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotCi0gICAgaWYgKCFtX3dlYlBhZ2VQcm94eS5pc1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV93ZWJQYWdlUHJv
eHkudmlld1NpemUoKS5pc0VtcHR5KCkgJiYgIW1fd2ViUGFnZVByb3h5LnVzZUZpeGVkTGF5b3V0
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUgPSByZXNwb25kSW1tZWRpYXRlbHlPck5vdCA9PSBSZXNwb25kSW1tZWRpYXRl
bHk7Ci0KLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6RHJhd2lu
Z0FyZWE6OlVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQs
IHJlc3BvbmRJbW1lZGlhdGVseU9yTm90ID09IFJlc3BvbmRJbW1lZGlhdGVseSwgbV93ZWJQYWdl
UHJveHkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgbV9zaXplLCBtX3Njcm9sbE9mZnNldCksIG1fd2Vi
UGFnZVByb3h5LnBhZ2VJRCgpKTsKLSAgICBtX3Njcm9sbE9mZnNldCA9IEludFNpemUoKTsKLQot
ICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKSB7Ci0gICAg
ICAgIC8vIFN0YXJ0IHRoZSByZXNwb25zaXZlbmVzcyB0aW1lci4gV2Ugd2lsbCBzdG9wIGl0IHdo
ZW4gd2UgaGVhciBiYWNrIGZyb20gdGhlIFdlYlByb2Nlc3MKLSAgICAgICAgLy8gaW4gZGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUuCi0gICAgICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5y
ZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9pc1dhaXRp
bmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSAmJiAhbV9sYXllclRyZWVDb250ZXh0Lmlz
RW1wdHkoKSkgewotICAgICAgICAvLyBXYWl0IGZvciB0aGUgRGlkVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGUgbWVzc2FnZS4gTm9ybWFsbHkgd2UgZG8gdGhpcyBpbiBDb29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHk6OnBhaW50LCBidXQgdGhhdAotICAgICAgICAvLyBmdW5jdGlvbiBpcyBuZXZlciBj
YWxsZWQgd2hlbiBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLgotICAgICAgICB3YWl0
Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOwotICAgIH0KLX0KLQot
dm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JBbmREaXNwYXRjaERpZFVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCkKLXsKLSAgICBBU1NFUlQobV9pc1dhaXRpbmdGb3JEaWRV
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk7Ci0KLSAgICBpZiAoIW1fd2ViUGFnZVByb3h5LmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCku
c3RhdGUoKSA9PSBXZWJQcm9jZXNzUHJveHk6OlN0YXRlOjpMYXVuY2hpbmcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIEZJWE1FOiB3YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseSB3aWxs
IGFsd2F5cyByZXR1cm4gdGhlIG9sZGVzdCBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNz
YWdlIHRoYXQKLSAgICAvLyBoYXNuJ3QgeWV0IGJlZW4gcHJvY2Vzc2VkLiBCdXQgaXQgbWlnaHQg
YmUgYmV0dGVyIHRvIHNraXAgYWhlYWQgdG8gc29tZSBvdGhlciBEaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZQotICAgIC8vIG1lc3NhZ2UsIGlmIG11bHRpcGxlIERpZFVwZGF0ZUJhY2tpbmdTdG9y
ZVN0YXRlIG1lc3NhZ2VzIGFyZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZC4gRm9yIGluc3RhbmNl
LCB3ZSBjb3VsZAotICAgIC8vIGNob29zZSB0aGUgbW9zdCByZWNlbnQgb25lLCBvciB0aGUgb25l
IHRoYXQgaXMgY2xvc2VzdCB0byBvdXIgY3VycmVudCBzaXplLgotCi0gICAgLy8gVGhlIHRpbWVv
dXQsIGluIHNlY29uZHMsIHdlIHVzZSB3aGVuIHdhaXRpbmcgZm9yIGEgRGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUgbWVzc2FnZSB3aGVuIHdlJ3JlIGFza2VkIHRvIHBhaW50LgotICAgIG1fd2Vi
UGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRjaEltbWVk
aWF0ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNraW5nU3RvcmVT
dGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMo
NTAwKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjplbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNv
bnRleHQpCi17Ci0gICAgQVNTRVJUKCFpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7
Ci0KLSAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBsYXllclRyZWVDb250ZXh0OwotICAgIG1fd2Vi
UGFnZVByb3h5LmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4
dCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjpzZXRWaXNpYmxlQ29u
dGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBtX2Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2li
bGVDb250ZW50c1JlY3QsIHRyYWplY3RvcnlWZWN0b3IpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
RHJhd2luZ0FyZWFQcm94eTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKLXsKLSAg
ICBBU1NFUlQoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwotCi0gICAgbV9sYXll
clRyZWVDb250ZXh0ID0gTGF5ZXJUcmVlQ29udGV4dCgpOwotICAgIG1fd2ViUGFnZVByb3h5LmV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJh
d2luZ0FyZWFQcm94eTo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKLXsKLSAgICBBU1NFUlQoaXNJbkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwotCi0gICAgbV9sYXllclRyZWVDb250ZXh0ID0gbGF5
ZXJUcmVlQ29udGV4dDsKLSAgICBtX3dlYlBhZ2VQcm94eS51cGRhdGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjYzY2ViOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5X2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5X2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUg
IkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRl
ICJMYXllclRyZWVDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgUmVnaW9uOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7Ci0KLWNsYXNzIENvb3JkaW5hdGVk
RHJhd2luZ0FyZWFQcm94eSA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKLXB1YmxpYzoKLSAg
ICBleHBsaWNpdCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVByb3h5Jik7Ci0g
ICAgdmlydHVhbCB+Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KCk7Ci0KLSAgICBib29sIGlz
SW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuICFtX2xheWVyVHJl
ZUNvbnRleHQuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKCk7Ci0K
LSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiB2aXNpYmxlQ29udGVudHNSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0
b3J5KTsKLQotICAgIGJvb2wgaGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZTsgfQotCi0gICAgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkmIGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkgY29uc3QgeyByZXR1cm4g
Km1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuZ2V0KCk7IH0KLQotICAgIFdlYkNvcmU6
OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzUmVj
dCgpOyB9Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2
b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Ci0KLSAgICBXZWJQYWdlUHJveHkmIHBhZ2UoKSB7IHJldHVy
biBtX3dlYlBhZ2VQcm94eTsgfQotICAgIAotICAgIHZvaWQgZGlzcGF0Y2hBZnRlckVuc3VyaW5n
RHJhd2luZyhzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+KSBvdmVycmlk
ZTsKLQotcHJpdmF0ZToKLSAgICAvLyBEcmF3aW5nQXJlYVByb3h5Ci0gICAgdmlydHVhbCB2b2lk
IHNpemVEaWRDaGFuZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRD
aGFuZ2UoKTsKLQotICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9yQmFja2luZ1N0b3JlVXBkYXRlT25O
ZXh0UGFpbnQoKTsKLQotICAgIC8vIElQQyBtZXNzYWdlIGhhbmRsZXJzCi0gICAgdmlydHVhbCB2
b2lkIGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRl
SUQsIGNvbnN0IFVwZGF0ZUluZm8mLCBjb25zdCBMYXllclRyZWVDb250ZXh0Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2lu
Z1N0b3JlU3RhdGVJRCwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3Rh
dGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBM
YXllclRyZWVDb250ZXh0Jik7Ci0KLSAgICBlbnVtIFJlc3BvbmRJbW1lZGlhdGVseU9yTm90IHsg
RG9Ob3RSZXNwb25kSW1tZWRpYXRlbHksIFJlc3BvbmRJbW1lZGlhdGVseSB9OwotICAgIHZvaWQg
YmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QpOwotICAg
IHZvaWQgc2VuZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJbW1lZGlhdGVseU9yTm90
KTsKLSAgICB2b2lkIHdhaXRGb3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
KCk7Ci0KLSAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYpOwotICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KCk7Ci0gICAgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0Jik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk+IG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7Ci0KLSAgICAvLyBU
aGUgc3RhdGUgSUQgY29ycmVzcG9uZGluZyB0byBvdXIgY3VycmVudCBiYWNraW5nIHN0b3JlLiBV
cGRhdGVkIHdoZW5ldmVyIHdlIGFsbG9jYXRlCi0gICAgLy8gYSBuZXcgYmFja2luZyBzdG9yZS4g
QW55IG1lc3NhZ2VzIHJlY2VpdmVkIHRoYXQgY29ycmVzcG9uZCB0byBhbiBlYXJsaWVyIHN0YXRl
IGFyZSBpZ25vcmVkLAotICAgIC8vIGFzIHRoZXkgZG9uJ3QgYXBwbHkgdG8gb3VyIGN1cnJlbnQg
YmFja2luZyBzdG9yZS4KLSAgICB1aW50NjRfdCBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlE
OwotCi0gICAgLy8gVGhlIG5leHQgYmFja2luZyBzdG9yZSBzdGF0ZSBJRCB3ZSB3aWxsIHJlcXVl
c3QgdGhlIHdlYiBwcm9jZXNzIHVwZGF0ZSB0by4gSW5jcmVtZW50ZWQKLSAgICAvLyB3aGVuZXZl
ciBvdXIgc3RhdGUgY2hhbmdlcyBpbiBhIHdheSB0aGF0IHdpbGwgcmVxdWlyZSBhIG5ldyBiYWNr
aW5nIHN0b3JlIHRvIGJlIGFsbG9jYXRlZC4KLSAgICB1aW50NjRfdCBtX25leHRCYWNraW5nU3Rv
cmVTdGF0ZUlEOwotCi0gICAgLy8gVGhlIGN1cnJlbnQgbGF5ZXIgdHJlZSBjb250ZXh0LgotICAg
IExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotCi0gICAgLy8gV2hldGhlciB3
ZSd2ZSBzZW50IGEgVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSBhbmQgYXJlIG5vdyB3
YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UuCi0gICAgLy8g
VXNlZCB0byB0aHJvdHRsZSBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlcyBzbyB3ZSBk
b24ndCBzZW5kIHRoZW0gZmFzdGVyIHRoYW4gdGhlIFdlYiBwcm9jZXNzIGNhbiBoYW5kbGUuCi0g
ICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlOwotCi0gICAg
Ly8gRm9yIGEgbmV3IERyYXdpbmcgQXJlYSBkb24ndCBkcmF3IGFueXRoaW5nIHVudGlsIHRoZSBX
ZWJQcm9jZXNzIGhhcyBzZW50IG92ZXIgdGhlIGZpcnN0IGNvbnRlbnQuCi0gICAgYm9vbCBtX2hh
c1JlY2VpdmVkRmlyc3RVcGRhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNlbmRpZiAvLyBDb29yZGluYXRlZERy
YXdpbmdBcmVhUHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuY3BwCmluZGV4IGUyYzY2OTAuLjZkMWFmZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTIwLDEw
ICsyMCw5IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQogI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAKLSNpbmNsdWRlICJDb29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKQEAgLTM0LDIyICszMywyMiBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShD
b29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCi0gICAgOiBtX2Ry
YXdpbmdBcmVhUHJveHkoZHJhd2luZ0FyZWFQcm94eSkKK0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShXZWJQYWdlUHJveHkmIHdlYlBh
Z2VQcm94eSkKKyAgICA6IG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKICAgICAsIG1fc2Nl
bmUoYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSh0aGlzKSkpCiB7Ci0gICAg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkucHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkucGFnZUlEKCksICp0aGlzKTsKKyAgICBt
X3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBh
Z2VQcm94eS5wYWdlSUQoKSwgKnRoaXMpOwogfQogCiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkKIHsKLSAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS5wYWdlSUQoKSk7CisgICAgbV93ZWJQYWdlUHJveHku
cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFn
ZUlEKCkpOwogICAgIG1fc2NlbmUtPmRldGFjaCgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiB7Ci0gICAgbV9kcmF3aW5nQXJlYVBy
b3h5LT51cGRhdGVWaWV3cG9ydCgpOworICAgIG1fd2ViUGFnZVByb3h5LnNldFZpZXdOZWVkc0Rp
c3BsYXkoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3dlYlBhZ2VQcm94eS52aWV3U2l6ZSgp
KSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBk
YXRlKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbikKQEAgLTY1LDkgKzY0LDcgQEAgdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlKGNvbnN0IENvb3JkaW4KICAgICB9KTsKIAogICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKLSAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS5kaWRSZW5kZXJGcmFtZShncmFwaGljc1N0YXRlLmNvbnRlbnRzU2l6
ZSwgZ3JhcGhpY3NTdGF0ZS5jb3ZlcmVkUmVjdCk7Ci0jZW5kaWYKKyAgICBtX3dlYlBhZ2VQcm94
eS5kaWRSZW5kZXJGcmFtZShncmFwaGljc1N0YXRlLmNvbnRlbnRzU2l6ZSwgZ3JhcGhpY3NTdGF0
ZS5jb3ZlcmVkUmVjdCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQpAQCAtNzUsMjAgKzcyLDIwIEBAIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0CiAgICAgaWYgKHJlY3QgPT0gbV9sYXN0U2VudFZpc2libGVSZWN0ICYmIHRy
YWplY3RvcnlWZWN0b3IgPT0gbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3IpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50c1JlY3Qo
cmVjdCwgdHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLnBhZ2VJ
RCgpKTsKKyAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHRyYWplY3Rv
cnlWZWN0b3IpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7CiAgICAgbV9sYXN0U2VudFZpc2li
bGVSZWN0ID0gcmVjdDsKICAgICBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvciA9IHRyYWplY3Rv
cnlWZWN0b3I7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRl
ck5leHRGcmFtZSgpCiB7Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkucHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1l
KCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLnBhZ2VJRCgpKTsKKyAgICBtX3dlYlBhZ2VQ
cm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpS
ZW5kZXJOZXh0RnJhbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOwogfQogCiB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRTY3JvbGxPZmZzZXQodWludDMyX3Qg
bGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQogewotICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OkNvbW1pdFNjcm9sbE9mZnNldChsYXllcklELCBvZmZzZXQpLCBtX2RyYXdpbmdBcmVhUHJv
eHktPnBhZ2UoKS5wYWdlSUQoKSk7CisgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29tbWl0U2Nyb2xsT2Zmc2V0KGxh
eWVySUQsIG9mZnNldCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKIH0KIAogfQotI2VuZGlm
IC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1NfTVVMVElQUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggNGYzOGRjNS4uZTQ0NzQ4MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0zNSwxMyAr
MzUsMTMgQEAgY2xhc3MgSW50U2l6ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIENv
b3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKIAogY2xhc3Mg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lQ2xpZW50LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KTsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eShDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkqKTsKKyAgICBleHBsaWNp
dCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShXZWJQYWdlUHJveHkmKTsKICAgICB2aXJ0
dWFsIH5Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpOwogCiAgICAgdm9pZCBjb21taXRD
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlJik7CkBAIC02MCw3ICs2MCw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpNZXNzYWdlRGVjb2RlciYpIG92ZXJyaWRlOwogCi0gICAgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7CisgICAgV2ViUGFnZVByb3h5JiBtX3dlYlBh
Z2VQcm94eTsKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lPiBtX3NjZW5lOwog
ICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2xhc3RTZW50VmlzaWJsZVJlY3Q7CiAgICAgV2ViQ29y
ZTo6RmxvYXRQb2ludCBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1BhZ2VWaWV3cG9ydENv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKaW5kZXggMTcxNTY1Ny4uZThmZjdkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvUGFn
ZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5jcHAKQEAgLTIyLDcgKzIy
LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9s
bGVyLmgiCiAKLSNpbmNsdWRlICJDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNs
dWRlICJBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnQuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgpAQCAtMjYzLDEzICsyNjQsMTMgQEAgdm9pZCBQYWdlVmlld3BvcnRDb250cm9s
bGVyOjpkaWRDaGFuZ2VDb250ZW50c1Zpc2liaWxpdHkoY29uc3QgRmxvYXRQb2ludCYgcG9zaXQK
IAogYm9vbCBQYWdlVmlld3BvcnRDb250cm9sbGVyOjpzeW5jVmlzaWJsZUNvbnRlbnRzKGNvbnN0
IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PENvb3JkaW5hdGVkRHJhd2luZ0Fy
ZWFQcm94eSo+KG1fd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsKKyAgICBhdXRvKiBkcmF3
aW5nQXJlYSA9IHN0YXRpY19jYXN0PEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eSo+KG1fd2Vi
UGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKTsKICAgICBpZiAoIWRyYXdpbmdBcmVhIHx8IG1fdmll
d3BvcnRTaXplLmlzRW1wdHkoKSB8fCBtX2NvbnRlbnRzU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KGJvdW5k
Q29udGVudHNQb3NpdGlvbihtX2NvbnRlbnRzUG9zaXRpb24pLCB2aXNpYmxlQ29udGVudHNTaXpl
KCkpOwogICAgIHZpc2libGVDb250ZW50c1JlY3QuaW50ZXJzZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50Ojp6ZXJvKCksIG1fY29udGVudHNTaXplKSk7Ci0gICAgZHJhd2luZ0FyZWEtPnNldFZpc2li
bGVDb250ZW50c1JlY3QodmlzaWJsZUNvbnRlbnRzUmVjdCwgdHJhamVjdG9yeVZlY3Rvcik7Cisg
ICAgZHJhd2luZ0FyZWEtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkuc2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0LCB0cmFqZWN0b3J5VmVjdG9yKTsKIAog
ICAgIGlmICghbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuKQogICAgICAgICBtX2NsaWVudC5kaWRD
aGFuZ2VWaXNpYmxlQ29udGVudHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IDI0NzYyOTYuLmVmY2FiNWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcApAQCAt
NDEsMjYgKzQxLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIERyYXdpbmdBcmVhUHJveHlJbXBsOjpEcmF3aW5nQXJlYVByb3h5SW1wbChXZWJQYWdl
UHJveHkmIHdlYlBhZ2VQcm94eSkKLSAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFU
eXBlSW1wbCwgd2ViUGFnZVByb3h5KQotICAgICwgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJ
RCgwKQotICAgICwgbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCgwKQotICAgICwgbV9pc1dhaXRp
bmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShmYWxzZSkKLSAgICAsIG1faGFzUmVjZWl2
ZWRGaXJzdFVwZGF0ZShmYWxzZSkKLSAgICAsIG1faXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSh0
cnVlKQorICAgIDogQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5KHdlYlBhZ2VQcm94eSkKICAg
ICAsIG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywg
JkRyYXdpbmdBcmVhUHJveHlJbXBsOjpkaXNjYXJkQmFja2luZ1N0b3JlKQogewogfQogCiBEcmF3
aW5nQXJlYVByb3h5SW1wbDo6fkRyYXdpbmdBcmVhUHJveHlJbXBsKCkKIHsKLSAgICAvLyBNYWtl
IHN1cmUgdG8gZXhpdCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLgotICAgIGlmIChpc0lu
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkKLSAgICAgICAgZXhpdEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCk7Ci19Ci0KLWJvb2wgRHJhd2luZ0FyZWFQcm94eUltcGw6OmFsd2F5c1Vz
ZUNvbXBvc2l0aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlUHJveHkucHJlZmVy
ZW5jZXMoKS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpICYmIG1fd2ViUGFnZVByb3h5
LnByZWZlcmVuY2VzKCkuZm9yY2VDb21wb3NpdGluZ01vZGUoKTsKIH0KIAogdm9pZCBEcmF3aW5n
QXJlYVByb3h5SW1wbDo6cGFpbnQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBSZWdpb24mIHVucGFpbnRlZFJlZ2lvbikK
QEAgLTc4LDggKzY1LDggQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6cGFpbnQoQmFja2lu
Z1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBjb250ZXh0LAogCiAgICAgICAgIC8vIElm
IHdlIGhhdmVuJ3QgeWV0IHJlY2VpdmVkIG91ciBmaXJzdCBiaXRzIGZyb20gdGhlIFdlYlByb2Nl
c3MgdGhlbiBkb24ndCBwYWludCBhbnl0aGluZy4KICAgICAgICAgaWYgKCFtX2hhc1JlY2VpdmVk
Rmlyc3RVcGRhdGUpCi0gICAgICAgICAgICByZXR1cm47ICAgICAgICAKLSAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm47CisKICAgICAgICAgaWYgKG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFj
a2luZ1N0b3JlU3RhdGUpIHsKICAgICAgICAgICAgIC8vIFdhaXQgZm9yIGEgRGlkVXBkYXRlQmFj
a2luZ1N0b3JlU3RhdGUgbWVzc2FnZSB0aGF0IGNvbnRhaW5zIHRoZSBuZXcgYml0cyBiZWZvcmUg
d2UgcGFpbnQKICAgICAgICAgICAgIC8vIHdoYXQncyBjdXJyZW50bHkgaW4gdGhlIGJhY2tpbmcg
c3RvcmUuCkBAIC0xMDYsMTYgKzkzLDYgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6cGFp
bnQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBjb250ZXh0LAogICAgIGRp
c2NhcmRCYWNraW5nU3RvcmVTb29uKCk7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6
OnNpemVEaWRDaGFuZ2UoKQotewotICAgIGJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKFJlc3Bv
bmRJbW1lZGlhdGVseSk7Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRldmljZVNj
YWxlRmFjdG9yRGlkQ2hhbmdlKCkKLXsKLSAgICBiYWNraW5nU3RvcmVTdGF0ZURpZENoYW5nZShS
ZXNwb25kSW1tZWRpYXRlbHkpOwotfQotCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRC
YWNraW5nU3RvcmVJc0Rpc2NhcmRhYmxlKGJvb2wgaXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSkK
IHsKICAgICBpZiAobV9pc0JhY2tpbmdTdG9yZURpc2NhcmRhYmxlID09IGlzQmFja2luZ1N0b3Jl
RGlzY2FyZGFibGUpCkBAIC0xMjgsMTEgKzEwNSw2IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUlt
cGw6OnNldEJhY2tpbmdTdG9yZUlzRGlzY2FyZGFibGUoYm9vbCBpc0JhY2tpbmdTdG9yZURpc2Nh
CiAgICAgICAgIG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyLnN0b3AoKTsKIH0KIAotdm9pZCBE
cmF3aW5nQXJlYVByb3h5SW1wbDo6d2FpdEZvckJhY2tpbmdTdG9yZVVwZGF0ZU9uTmV4dFBhaW50
KCkKLXsKLSAgICBtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUgPSB0cnVlOwotfQotCiB2b2lkIERy
YXdpbmdBcmVhUHJveHlJbXBsOjp1cGRhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwg
Y29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIHsKICAgICBBU1NFUlRfQVJHKGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9jdXJyZW50QmFja2luZ1N0b3Jl
U3RhdGVJRCk7CkBAIC0xNDcsNDEgKzExOSw3IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6
OnVwZGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvCiAK
IHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVp
bnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8s
IGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCiB7Ci0gICAgQVNTRVJU
X0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fbmV4dEJh
Y2tpbmdTdG9yZVN0YXRlSUQpOwotICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwg
YmFja2luZ1N0b3JlU3RhdGVJRCA+IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAg
IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQgPSBiYWNraW5nU3RvcmVTdGF0ZUlEOwotCi0g
ICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9IGZhbHNlOwotCi0g
ICAgLy8gU3RvcCB0aGUgcmVzcG9uc2l2ZW5lc3MgdGltZXIgdGhhdCB3YXMgc3RhcnRlZCBpbiBz
ZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUuCi0gICAgbV93ZWJQYWdlUHJveHkucHJvY2Vzcygp
LnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdG9wKCk7Ci0KLSAgICBpZiAobGF5ZXJUcmVlQ29udGV4
dCAhPSBtX2xheWVyVHJlZUNvbnRleHQpIHsKLSAgICAgICAgaWYgKGxheWVyVHJlZUNvbnRleHQu
aXNFbXB0eSgpICYmICFtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgICAgIEFTU0VSVCht
X2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKTsKLSAgICAgICAgfSBlbHNlIGlmICghbGF5ZXJU
cmVlQ29udGV4dC5pc0VtcHR5KCkgJiYgbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250
ZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVChsYXllclRyZWVDb250ZXh0ID09IG1fbGF5ZXJUcmVl
Q29udGV4dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1cGRhdGVBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVChs
YXllclRyZWVDb250ZXh0ID09IG1fbGF5ZXJUcmVlQ29udGV4dCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAobV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCAhPSBtX2N1cnJlbnRCYWNraW5n
U3RvcmVTdGF0ZUlEKQotICAgICAgICBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoUmVzcG9u
ZEltbWVkaWF0ZWx5KTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9oYXNSZWNlaXZlZEZpcnN0VXBk
YXRlID0gdHJ1ZTsKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKSAm
JiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgICAgIGlmIChtX3BlbmRp
bmdOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpIHsKLSAgICAgICAgICAgIHNldE5h
dGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyhtX3BlbmRpbmdOYXRpdmVTdXJmYWNlSGFu
ZGxlRm9yQ29tcG9zaXRpbmcpOwotICAgICAgICAgICAgbV9wZW5kaW5nTmF0aXZlU3VyZmFjZUhh
bmRsZUZvckNvbXBvc2l0aW5nID0gMDsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCisgICAg
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjpkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShi
YWNraW5nU3RvcmVTdGF0ZUlELCB1cGRhdGVJbmZvLCBsYXllclRyZWVDb250ZXh0KTsKICAgICBp
ZiAoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpIHsKICAgICAgICAgQVNTRVJUKCFt
X2JhY2tpbmdTdG9yZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE5MywzNSArMTMxLDE3IEBAIHZv
aWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2
NF90IGJhY2tpbmdTdG9yZVN0YXRlCiAgICAgaW5jb3Jwb3JhdGVVcGRhdGUodXBkYXRlSW5mbyk7
CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgTGF5ZXJUcmVlQ29u
dGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKLXsKLSAgICBBU1NFUlRfQVJHKGJhY2tpbmdTdG9yZVN0
YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJ
RCk7Ci0gICAgaWYgKGJhY2tpbmdTdG9yZVN0YXRlSUQgPCBtX2N1cnJlbnRCYWNraW5nU3RvcmVT
dGF0ZUlEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwotfQotCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBs
OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3Rh
dGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIHsKICAgICBBU1NFUlRfQVJHKGJh
Y2tpbmdTdG9yZVN0YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9jdXJyZW50QmFja2lu
Z1N0b3JlU3RhdGVJRCk7CiAgICAgaWYgKGJhY2tpbmdTdG9yZVN0YXRlSUQgPCBtX2N1cnJlbnRC
YWNraW5nU3RvcmVTdGF0ZUlEKQogICAgICAgICByZXR1cm47CiAKLSAgICBleGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoKTsKKyAgICBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHk6OmV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwogCiAgICAgaW5jb3Jwb3JhdGVVcGRhdGUo
dXBkYXRlSW5mbyk7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnVwZGF0ZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0
IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhi
YWNraW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fY3VycmVudEJhY2tp
bmdTdG9yZVN0YXRlSUQpOwotICAgIGlmIChiYWNraW5nU3RvcmVTdGF0ZUlEIDwgbV9jdXJyZW50
QmFja2luZ1N0b3JlU3RhdGVJRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdXBkYXRlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Ci19Ci0KIHZvaWQgRHJhd2lu
Z0FyZWFQcm94eUltcGw6OmluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8pCiB7CiAgICAgQVNTRVJUKCFpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7
CkBAIC0yNDMsMTE1ICsxNjMsMTAgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6aW5jb3Jw
b3JhdGVVcGRhdGUoY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKICAgICBtX3dlYlBhZ2VQ
cm94eS5zZXRWaWV3TmVlZHNEaXNwbGF5KGRhbWFnZVJlZ2lvbik7CiB9CiAKLXZvaWQgRHJhd2lu
Z0FyZWFQcm94eUltcGw6OmJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKFJlc3BvbmRJbW1lZGlh
dGVseU9yTm90IHJlc3BvbmRJbW1lZGlhdGVseU9yTm90KQotewotICAgICsrbV9uZXh0QmFja2lu
Z1N0b3JlU3RhdGVJRDsKLSAgICBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUocmVzcG9uZElt
bWVkaWF0ZWx5T3JOb3QpOwotfQotCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZW5kVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUoUmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QgcmVzcG9uZEltbWVk
aWF0ZWx5T3JOb3QpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQg
PCBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKLQotICAgIGlmICghbV93ZWJQYWdlUHJveHku
aXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pc1dhaXRpbmdGb3JEaWRV
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fd2Vi
UGFnZVByb3h5LnZpZXdTaXplKCkuaXNFbXB0eSgpICYmICFtX3dlYlBhZ2VQcm94eS51c2VGaXhl
ZExheW91dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0
ZUJhY2tpbmdTdG9yZVN0YXRlID0gcmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QgPT0gUmVzcG9uZElt
bWVkaWF0ZWx5OwotCi0gICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OkRyYXdpbmdBcmVhOjpVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShtX25leHRCYWNraW5nU3RvcmVT
dGF0ZUlELCByZXNwb25kSW1tZWRpYXRlbHlPck5vdCA9PSBSZXNwb25kSW1tZWRpYXRlbHksIG1f
d2ViUGFnZVByb3h5LmRldmljZVNjYWxlRmFjdG9yKCksIG1fc2l6ZSwgbV9zY3JvbGxPZmZzZXQp
LCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7Ci0gICAgbV9zY3JvbGxPZmZzZXQgPSBJbnRTaXpl
KCk7Ci0KLSAgICBpZiAobV9pc1dhaXRpbmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkg
ewotICAgICAgICAvLyBTdGFydCB0aGUgcmVzcG9uc2l2ZW5lc3MgdGltZXIuIFdlIHdpbGwgc3Rv
cCBpdCB3aGVuIHdlIGhlYXIgYmFjayBmcm9tIHRoZSBXZWJQcm9jZXNzCi0gICAgICAgIC8vIGlu
IGRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlLgotICAgICAgICBtX3dlYlBhZ2VQcm94eS5wcm9j
ZXNzKCkucmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7Ci0gICAgfQotCi0gICAgaWYgKG1f
aXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgJiYgIW1fbGF5ZXJUcmVlQ29u
dGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gV2FpdCBmb3IgdGhlIERpZFVwZGF0ZUJhY2tp
bmdTdG9yZVN0YXRlIG1lc3NhZ2UuIE5vcm1hbGx5IHdlIGRvIHRoaXMgaW4gRHJhd2luZ0FyZWFQ
cm94eUltcGw6OnBhaW50LCBidXQgdGhhdAotICAgICAgICAvLyBmdW5jdGlvbiBpcyBuZXZlciBj
YWxsZWQgd2hlbiBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLgotICAgICAgICB3YWl0
Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOwotICAgIH0KLX0KLQot
dm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6d2FpdEZvckFuZERpc3BhdGNoRGlkVXBkYXRlQmFj
a2luZ1N0b3JlU3RhdGUoKQotewotICAgIEFTU0VSVChtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKTsKLQotICAgIGlmICghbV93ZWJQYWdlUHJveHkuaXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zdGF0ZSgp
ID09IFdlYlByb2Nlc3NQcm94eTo6U3RhdGU6OkxhdW5jaGluZykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gRklYTUU6IHdhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5IHdpbGwgYWx3YXlz
IHJldHVybiB0aGUgb2xkZXN0IERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UgdGhh
dAotICAgIC8vIGhhc24ndCB5ZXQgYmVlbiBwcm9jZXNzZWQuIEJ1dCBpdCBtaWdodCBiZSBiZXR0
ZXIgdG8gc2tpcCBhaGVhZCB0byBzb21lIG90aGVyIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
Ci0gICAgLy8gbWVzc2FnZSwgaWYgbXVsdGlwbGUgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUg
bWVzc2FnZXMgYXJlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkLiBGb3IgaW5zdGFuY2UsIHdlIGNv
dWxkCi0gICAgLy8gY2hvb3NlIHRoZSBtb3N0IHJlY2VudCBvbmUsIG9yIHRoZSBvbmUgdGhhdCBp
cyBjbG9zZXN0IHRvIG91ciBjdXJyZW50IHNpemUuCi0KLSAgICAvLyBUaGUgdGltZW91dCB3ZSB1
c2Ugd2hlbiB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2Ug
d2hlbiB3ZSdyZSBhc2tlZCB0byBwYWludCBpcyA1MDAgbWlsbGlzZWNvbmRzLgotICAgIG1fd2Vi
UGFnZVByb3h5LnByb2Nlc3MoKS5jb25uZWN0aW9uKCktPndhaXRGb3JBbmREaXNwYXRjaEltbWVk
aWF0ZWx5PE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNraW5nU3RvcmVT
dGF0ZT4obV93ZWJQYWdlUHJveHkucGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMo
NTAwKSk7Ci19Ci0KIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkK
IHsKLSAgICBBU1NFUlQoYWx3YXlzVXNlQ29tcG9zaXRpbmcoKSB8fCAhaXNJbkFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCkpOwotCiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwotICAg
IG1fbGF5ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7Ci0gICAgbV93ZWJQYWdlUHJv
eHkuZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKLX0K
LQotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKFJFRElS
RUNURURfWENPTVBPU0lURV9XSU5ET1cpCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRO
YXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QgaGFuZGxlKQotewotICAg
IGlmICghbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlKSB7Ci0gICAgICAgIG1fcGVuZGluZ05hdGl2
ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyA9IGhhbmRsZTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6RHJhd2lu
Z0FyZWE6OlNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyhoYW5kbGUpLCBtX3dl
YlBhZ2VQcm94eS5wYWdlSUQoKSwgSVBDOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdG
b3JTeW5jUmVwbHkpOwotfQotCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpkZXN0cm95TmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCkKLXsKLSAgICBpZiAobV9wZW5kaW5nTmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKSB7Ci0gICAgICAgIG1fcGVuZGluZ05hdGl2
ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgYm9vbCBoYW5kbGVkOwotICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kU3lu
YyhNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29t
cG9zaXRpbmcoKSwgTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpEZXN0cm95TmF0aXZlU3VyZmFjZUhh
bmRsZUZvckNvbXBvc2l0aW5nOjpSZXBseShoYW5kbGVkKSwgbV93ZWJQYWdlUHJveHkucGFnZUlE
KCkpOwotfQotI2VuZGlmCi0KLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpc3BhdGNoQWZ0
ZXJFbnN1cmluZ0RyYXdpbmcoc3RkOjpmdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9y
KT4gY2FsbGJhY2tGdW5jdGlvbikKLXsKLSAgICBpZiAoIW1fd2ViUGFnZVByb3h5LmlzVmFsaWQo
KSkgewotICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVy
V2FzSW52YWxpZGF0ZWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtjYWxsYmFja0Z1bmN0aW9uXSB7IGNhbGxiYWNrRnVuY3Rpb24oQ2Fs
bGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7IH0pOwotfQotCi12b2lkIERyYXdpbmdBcmVhUHJveHlJ
bXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotICAgIEFTU0VSVChpc0lu
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7Ci0KLSAgICBtX2xheWVyVHJlZUNvbnRleHQg
PSBMYXllclRyZWVDb250ZXh0KCk7Ci0gICAgbV93ZWJQYWdlUHJveHkuZXhpdEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCk7Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnVwZGF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVy
VHJlZUNvbnRleHQpCi17Ci0gICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSgpKTsKLQotICAgIG1fbGF5ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7Ci0gICAg
bV93ZWJQYWdlUHJveHkudXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVl
Q29udGV4dCk7CisgICAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5OjplbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwogfQogCiB2b2lkIERyYXdpbmdB
cmVhUHJveHlJbXBsOjpkaXNjYXJkQmFja2luZ1N0b3JlU29vbigpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IDFlZDZkMDAuLjAxMWM0
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1w
bC5oCkBAIC0yNiw5ICsyNiw5IEBACiAjaWZuZGVmIERyYXdpbmdBcmVhUHJveHlJbXBsX2gKICNk
ZWZpbmUgRHJhd2luZ0FyZWFQcm94eUltcGxfaAogCisjaW5jbHVkZSAiQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiRHJh
d2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNyw4MSArMzcsMzIg
QEAgY2xhc3MgUmVnaW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgRHJhd2luZ0Fy
ZWFQcm94eUltcGwgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94eSB7CitjbGFzcyBEcmF3aW5nQXJl
YVByb3h5SW1wbCBmaW5hbCA6IHB1YmxpYyBBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkgewog
cHVibGljOgogICAgIGV4cGxpY2l0IERyYXdpbmdBcmVhUHJveHlJbXBsKFdlYlBhZ2VQcm94eSYp
OwogICAgIHZpcnR1YWwgfkRyYXdpbmdBcmVhUHJveHlJbXBsKCk7CiAKICAgICB2b2lkIHBhaW50
KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBXZWJDb3JlOjpSZWdpb24mIHVucGFpbnRlZFJlZ2lvbik7CiAKLSAgICBib29sIGlz
SW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGFsd2F5c1VzZUNv
bXBvc2l0aW5nKCkgfHwgIW1fbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCk7IH0KLQotICAgIGJv
b2wgaGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmVjZWl2ZWRG
aXJzdFVwZGF0ZTsgfQotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBQTEFURk9STShHVEsp
ICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLSAgICB2b2lkIHNldE5hdGl2
ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCk7Ci0gICAgdm9pZCBkZXN0cm95
TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCk7Ci0jZW5kaWYKLQotICAgIHZvaWQg
ZGlzcGF0Y2hBZnRlckVuc3VyaW5nRHJhd2luZyhzdGQ6OmZ1bmN0aW9uPHZvaWQgKENhbGxiYWNr
QmFzZTo6RXJyb3IpPikgb3ZlcnJpZGU7Ci0KIHByaXZhdGU6CiAgICAgLy8gRHJhd2luZ0FyZWFQ
cm94eQotICAgIHZvaWQgc2l6ZURpZENoYW5nZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV2aWNl
U2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSBvdmVycmlkZTsKLQogICAgIHZvaWQgc2V0QmFja2luZ1N0
b3JlSXNEaXNjYXJkYWJsZShib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHdhaXRGb3JCYWNraW5n
U3RvcmVVcGRhdGVPbk5leHRQYWludCgpIG92ZXJyaWRlOwogCiAgICAgLy8gSVBDIG1lc3NhZ2Ug
aGFuZGxlcnMKICAgICB2b2lkIHVwZGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBj
b25zdCBVcGRhdGVJbmZvJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJiwg
Y29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBM
YXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgVXBkYXRlSW5m
byYpIG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
dWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92
ZXJyaWRlOwogCiAgICAgdm9pZCBpbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJbmZvJik7
CiAKLSAgICBlbnVtIFJlc3BvbmRJbW1lZGlhdGVseU9yTm90IHsgRG9Ob3RSZXNwb25kSW1tZWRp
YXRlbHksIFJlc3BvbmRJbW1lZGlhdGVseSB9OwotICAgIHZvaWQgYmFja2luZ1N0b3JlU3RhdGVE
aWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QpOwotICAgIHZvaWQgc2VuZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJbW1lZGlhdGVseU9yTm90KTsKLSAgICB2b2lkIHdhaXRG
b3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCk7Ci0KLSAgICB2b2lkIGVu
dGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOwot
ICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7Ci0gICAgdm9pZCB1cGRh
dGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7Ci0g
ICAgYm9vbCBhbHdheXNVc2VDb21wb3NpdGluZygpIGNvbnN0OworICAgIHZvaWQgZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGRpc2NhcmRCYWNraW5nU3RvcmVTb29uKCk7CiAgICAgdm9pZCBkaXNjYXJk
QmFja2luZ1N0b3JlKCk7CiAKLSAgICAvLyBUaGUgc3RhdGUgSUQgY29ycmVzcG9uZGluZyB0byBv
dXIgY3VycmVudCBiYWNraW5nIHN0b3JlLiBVcGRhdGVkIHdoZW5ldmVyIHdlIGFsbG9jYXRlCi0g
ICAgLy8gYSBuZXcgYmFja2luZyBzdG9yZS4gQW55IG1lc3NhZ2VzIHJlY2VpdmVkIHRoYXQgY29y
cmVzcG9uZCB0byBhbiBlYXJsaWVyIHN0YXRlIGFyZSBpZ25vcmVkLAotICAgIC8vIGFzIHRoZXkg
ZG9uJ3QgYXBwbHkgdG8gb3VyIGN1cnJlbnQgYmFja2luZyBzdG9yZS4KLSAgICB1aW50NjRfdCBt
X2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEOwotCi0gICAgLy8gVGhlIG5leHQgYmFja2luZyBz
dG9yZSBzdGF0ZSBJRCB3ZSB3aWxsIHJlcXVlc3QgdGhlIHdlYiBwcm9jZXNzIHVwZGF0ZSB0by4g
SW5jcmVtZW50ZWQKLSAgICAvLyB3aGVuZXZlciBvdXIgc3RhdGUgY2hhbmdlcyBpbiBhIHdheSB0
aGF0IHdpbGwgcmVxdWlyZSBhIG5ldyBiYWNraW5nIHN0b3JlIHRvIGJlIGFsbG9jYXRlZC4KLSAg
ICB1aW50NjRfdCBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEOwotCi0gICAgLy8gVGhlIGN1cnJl
bnQgbGF5ZXIgdHJlZSBjb250ZXh0LgotICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVD
b250ZXh0OwotCi0gICAgLy8gV2hldGhlciB3ZSd2ZSBzZW50IGEgVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGUgbWVzc2FnZSBhbmQgYXJlIG5vdyB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZUJhY2tpbmdT
dG9yZVN0YXRlIG1lc3NhZ2UuCi0gICAgLy8gVXNlZCB0byB0aHJvdHRsZSBVcGRhdGVCYWNraW5n
U3RvcmVTdGF0ZSBtZXNzYWdlcyBzbyB3ZSBkb24ndCBzZW5kIHRoZW0gZmFzdGVyIHRoYW4gdGhl
IFdlYiBwcm9jZXNzIGNhbiBoYW5kbGUuCi0gICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0
ZUJhY2tpbmdTdG9yZVN0YXRlOwotICAgIAotICAgIC8vIEZvciBhIG5ldyBEcmF3aW5nIEFyZWEg
ZG9uJ3QgZHJhdyBhbnl0aGluZyB1bnRpbCB0aGUgV2ViUHJvY2VzcyBoYXMgc2VudCBvdmVyIHRo
ZSBmaXJzdCBjb250ZW50LgotICAgIGJvb2wgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlOwotCi0g
ICAgYm9vbCBtX2lzQmFja2luZ1N0b3JlRGlzY2FyZGFibGU7CisgICAgYm9vbCBtX2lzQmFja2lu
Z1N0b3JlRGlzY2FyZGFibGUgeyB0cnVlIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tpbmdT
dG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0KICAgICBSdW5Mb29wOjpUaW1lcjxEcmF3aW5nQXJlYVBy
b3h5SW1wbD4gbV9kaXNjYXJkQmFja2luZ1N0b3JlVGltZXI7Ci0KLSNpZiBVU0UoVEVYVFVSRV9N
QVBQRVIpICYmIFBMQVRGT1JNKEdUSykKLSAgICB1aW50NjRfdCBtX3BlbmRpbmdOYXRpdmVTdXJm
YWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcgeyAwIH07Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJW
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKaW5kZXgg
YTE4YWMwMS4uZDdmN2I0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcu
Y3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAj
aW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZERy
YXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHku
aCIKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCIKICNpbmNsdWRlICJDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgIkRvd25sb2FkTWFuYWdlckVm
bC5oIgpAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgV2ViVmlldzo6c2V0VmlzaWJsZShib29sIHZp
c2libGUpCiAgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKICAgICBtX3BhZ2UtPnZpZXdTdGF0ZURp
ZENoYW5nZShWaWV3U3RhdGU6OklzVmlzaWJsZSk7CiAKLSAgICBpZiAoQ29vcmRpbmF0ZWREcmF3
aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PENvb3JkaW5hdGVkRHJhd2lu
Z0FyZWFQcm94eSo+KHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkpCisgICAgaWYgKGF1dG8qIGRyYXdp
bmdBcmVhID0gc3RhdGljX2Nhc3Q8QWNjZWxlcmF0ZWREcmF3aW5nQXJlYVByb3h5Kj4ocGFnZSgp
LT5kcmF3aW5nQXJlYSgpKSkKICAgICAgICAgZHJhd2luZ0FyZWEtPnZpc2liaWxpdHlEaWRDaGFu
Z2UoKTsKIH0KIApAQCAtMzY4LDcgKzM2OCw3IEBAIEFmZmluZVRyYW5zZm9ybSBXZWJWaWV3Ojp0
cmFuc2Zvcm1Ub1NjZW5lKCkgY29uc3QKIAogQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBXZWJW
aWV3Ojpjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKQogewotICAgIGlmIChDb29yZGluYXRlZERy
YXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWREcmF3
aW5nQXJlYVByb3h5Kj4ocGFnZSgpLT5kcmF3aW5nQXJlYSgpKSkKKyAgICBpZiAoYXV0byogZHJh
d2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxBY2NlbGVyYXRlZERyYXdpbmdBcmVhUHJveHkqPihwYWdl
KCktPmRyYXdpbmdBcmVhKCkpKQogICAgICAgICByZXR1cm4gZHJhd2luZ0FyZWEtPmNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkuY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CiAKICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTM3NiwxMiArMzc2LDEyIEBAIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZSogV2ViVmlldzo6Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkKIAogdm9pZCBXZWJW
aWV3Ojp1cGRhdGVWaWV3cG9ydFNpemUoKQogewotICAgIGlmIChDb29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHkqIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWREcmF3aW5nQXJl
YVByb3h5Kj4ocGFnZSgpLT5kcmF3aW5nQXJlYSgpKSkgeworICAgIGlmIChhdXRvKiBkcmF3aW5n
QXJlYSA9IHN0YXRpY19jYXN0PEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFQcm94eSo+KHBhZ2UoKS0+
ZHJhd2luZ0FyZWEoKSkpIHsKICAgICAgICAgLy8gV2ViIFByb2Nlc3MgZXhwZWN0cyBzaXplcyBp
biBVSSB1bml0cywgYW5kIG5vdCByYXcgZGV2aWNlIHVuaXRzLgogICAgICAgICBkcmF3aW5nQXJl
YS0+c2V0U2l6ZShyb3VuZGVkSW50U2l6ZShkaXBTaXplKCkpLCBJbnRTaXplKCksIEludFNpemUo
KSk7CiAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KGNvbnRlbnRQb3NpdGlv
bigpLCB2aXNpYmxlQ29udGVudHNTaXplKCkpOwogICAgICAgICB2aXNpYmxlQ29udGVudHNSZWN0
LmludGVyc2VjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb250ZW50c1NpemUoKSkpOwotICAg
ICAgICBkcmF3aW5nQXJlYS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNS
ZWN0LCBGbG9hdFBvaW50KCkpOworICAgICAgICBkcmF3aW5nQXJlYS0+Y29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkoKS5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250ZW50c1Jl
Y3QsIEZsb2F0UG9pbnQoKSk7CiAgICAgfQogfQogCkBAIC00MDYsNyArNDA2LDcgQEAgV2ViQ29y
ZTo6RmxvYXRTaXplIFdlYlZpZXc6OnZpc2libGVDb250ZW50c1NpemUoKSBjb25zdAogCiBzdGQ6
OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gV2ViVmlldzo6Y3JlYXRlRHJhd2luZ0FyZWFQ
cm94eSgpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5PigqbV9wYWdlKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBY2NlbGVy
YXRlZERyYXdpbmdBcmVhUHJveHk+KCptX3BhZ2UpOwogfQogCiB2b2lkIFdlYlZpZXc6OnNldFZp
ZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6UmVnaW9uJiByZWdpb24pCg==
</data>
<flag name="review"
          id="308859"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>