<?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>203409</bug_id>
          
          <creation_ts>2019-10-25 07:13:33 -0700</creation_ts>
          <short_desc>Move more cascade related code from StyleResolver to PropertyCascade</short_desc>
          <delta_ts>2019-10-25 16:23:16 -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>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1583789</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-25 07:13:33 -0700</bug_when>
    <thetext>Continue cleanups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583806</commentid>
    <comment_count>1</comment_count>
      <attachid>381917</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-25 07:45:53 -0700</bug_when>
    <thetext>Created attachment 381917
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583808</commentid>
    <comment_count>2</comment_count>
      <attachid>381919</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-25 07:50:37 -0700</bug_when>
    <thetext>Created attachment 381919
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583809</commentid>
    <comment_count>3</comment_count>
      <attachid>381920</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-25 07:55:13 -0700</bug_when>
    <thetext>Created attachment 381920
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583818</commentid>
    <comment_count>4</comment_count>
      <attachid>381924</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-25 08:13:38 -0700</bug_when>
    <thetext>Created attachment 381924
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583906</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-25 11:01:39 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 381924:

imported/w3c/web-platform-tests/html/semantics/scripting-1/the-script-element/module/integrity.html bug 203394 (author: ysuzuki@apple.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583907</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-25 11:01:40 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 381924:

The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584077</commentid>
    <comment_count>7</comment_count>
      <attachid>381924</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-25 16:22:59 -0700</bug_when>
    <thetext>Comment on attachment 381924
patch

Clearing flags on attachment: 381924

Committed r251611: &lt;https://trac.webkit.org/changeset/251611&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584078</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-25 16:23:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584079</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-25 16:23:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/56636560&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381917</attachid>
            <date>2019-10-25 07:45:53 -0700</date>
            <delta_ts>2019-10-25 07:50:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>more-propertycascade.patch</filename>
            <type>text/plain</type>
            <size>57644</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MzgyZDIyN2E4MS4uZThhOTE4MmNmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxOS0xMC0yNSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBtb3JlIGNhc2NhZGUgcmVsYXRlZCBjb2RlIGZyb20gU3R5bGVSZXNv
bHZlciB0byBQcm9wZXJ0eUNhc2NhZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMzQwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gTW92ZSBhIGJ1bmNoIG9mIFN0eWxlUmVzb2x2ZXIgbWVtYmVyIGZ1
bmN0aW9ucyB0byBQcm9wZXJ0eUNhc2NhZGUuCisgICAgICAgIC0gTWFrZSBBcHBseUNhc2NhZGVk
UHJvcGVydHlTdGF0ZSBwYXJ0IG9mIHRoZSBQcm9wZXJ0eUNhc2NhZGUgaW50ZXJuYWwgc3RhdGUu
CisgICAgICAgIC0gUGFzcyBhcm91bmQgYSByZWZlcmVuY2UgdG8gdGhlIFByb3BlcnR5Q2FzY2Fk
ZSBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgc3RhdGUgb2JqZWN0CisgICAgICAgICAgVGhlIHN0YXRl
IGNvbnRhaW5lZCBQcm9wZXJ0eUNhc2NhZGUgbWVtYmVyIGFscmVhZHkgc28gdGhpcyBpcyBlcXVp
dmFsZW50IGJ1dCBzaW1wbGVyLgorCisgICAgICAgICogY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNl
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVZhcmlhYmxlRmFsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OnJlc29sdmVUb2tlblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWU6OnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMgY29uc3QpOgorICAgICAg
ICAqIGNzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmg6CisgICAgICAgICogY3NzL0VsZW1l
bnRSdWxlQ29sbGVjdG9yLmg6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FzY2FkZWRQcm9wZXJ0aWVzRm9yUm9sbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlDYXNjYWRl
ZEN1c3RvbVByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzSW1wbCk6IERlbGV0ZWQuCisK
KyAgICAgICAgVGhlc2UgYmVjb21lIFByb3BlcnR5Q2FzY2FkZSBtZW1iZXJzLgorCisgICAgICAg
ICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjphdXRob3JSb2xsYmFjayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6dXNlclJvbGxiYWNrIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRBdXRob3JSb2xsYmFjayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VXNl
clJvbGxiYWNrKTogRGVsZXRlZC4KKworICAgICAgICBSb2xsYmFja3MgYXJlIG5vdyBvd25lZCBi
eSBQcm9wZXJ0eUNhc2NhZGUuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZl
cmVuY2VzKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAqIHN0
eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OmFkZE5vcm1hbE1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZTo6YWRkSW1wb3J0YW50TWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseURlZmVycmVkUHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0aWVzSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseUN1c3RvbVBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBw
bHlDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjpwcm9wZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eTo6YXBwbHkpOgorICAgICAgICAqIHN0eWxlL1By
b3BlcnR5Q2FzY2FkZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZTo6c3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjpoYXNBcHBsaWVkUHJvcGVydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OlByb3BlcnR5Q2FzY2FkZTo6Y3VzdG9tUHJvcGVydGllcyk6IERlbGV0ZWQuCisKIDIwMTktMTAt
MjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEYXRhYmFzZUNv
bnRleHQgc2hvdWxkIG5vdCBwcmV2ZW50IGVudGVyaW5nIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcApp
bmRleCA5NGQ2M2EzYjU4OS4uZjg0YjhiNmU5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmgiCiAK
KyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIApAQCAtNDQsMjEgKzQ1LDIxIEBAIFN0cmluZyBD
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKICAgICByZXR1
cm4gbV9zdHJpbmdWYWx1ZTsKIH0KIAotc3RhdGljIGJvb2wgcmVzb2x2ZVRva2VuUmFuZ2UoQ1NT
UGFyc2VyVG9rZW5SYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYsIEFwcGx5Q2FzY2FkZWRQ
cm9wZXJ0eVN0YXRlJik7CitzdGF0aWMgYm9vbCByZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJU
b2tlblJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiwgU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSYpOwogCi1zdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVGYWxsYmFjayhDU1NQYXJzZXJUb2tl
blJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQsIEFwcGx5Q2FzY2Fk
ZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBib29sIHJlc29sdmVWYXJpYWJsZUZhbGxi
YWNrKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJl
c3VsdCwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKICAgICBpZiAocmFuZ2Uu
YXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IENvbW1hVG9rZW4pOwogICAgIHJhbmdlLmNvbnN1bWUoKTsKLSAgICByZXR1cm4g
cmVzb2x2ZVRva2VuUmFuZ2UocmFuZ2UsIHJlc3VsdCwgc3RhdGUpOworICAgIHJldHVybiByZXNv
bHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzdWx0LCBjYXNjYWRlKTsKIH0KIAotc3RhdGljIGJvb2wg
cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3Rv
cjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0
YXRlKQorc3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2Vu
UmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKLSAgICBhdXRvJiByZWdpc3RlcmVkUHJvcGVydGllcyA9
IHN0YXRlLnN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVBy
b3BlcnR5U2V0KCk7Ci0gICAgYXV0byYgc3R5bGUgPSAqc3RhdGUuc3R5bGVSZXNvbHZlci0+c3R5
bGUoKTsKKyAgICBhdXRvJiByZWdpc3RlcmVkUHJvcGVydGllcyA9IGNhc2NhZGUuc3R5bGVSZXNv
bHZlcigpLmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5U2V0KCk7Cisg
ICAgYXV0byYgc3R5bGUgPSAqY2FzY2FkZS5zdHlsZVJlc29sdmVyKCkuc3R5bGUoKTsKIAogICAg
IHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gSWRlbnRUb2tlbik7CkBAIC02NiwxMSArNjcsMTEgQEAgc3RhdGljIGJvb2wgcmVzb2x2
ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQ
YXJzZXIKICAgICBBU1NFUlQocmFuZ2UuYXRFbmQoKSB8fCAocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBDb21tYVRva2VuKSk7CiAKICAgICAvLyBBcHBseSB0aGlzIHZhcmlhYmxlIGZpcnN0LCBpbiBj
YXNlIGl0IGlzIHN0aWxsIHVucmVzb2x2ZWQKLSAgICBzdGF0ZS5zdHlsZVJlc29sdmVyLT5hcHBs
eUNhc2NhZGVkQ3VzdG9tUHJvcGVydHkodmFyaWFibGVOYW1lLCBzdGF0ZSk7CisgICAgY2FzY2Fk
ZS5hcHBseUN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CiAKICAgICAvLyBBcHBseSBmYWxs
YmFjayB0byBkZXRlY3QgY3ljbGVzCiAgICAgVmVjdG9yPENTU1BhcnNlclRva2VuPiBmYWxsYmFj
a1Jlc3VsdDsKLSAgICBib29sIGZhbGxiYWNrUmV0dXJuID0gcmVzb2x2ZVZhcmlhYmxlRmFsbGJh
Y2soQ1NTUGFyc2VyVG9rZW5SYW5nZShyYW5nZSksIGZhbGxiYWNrUmVzdWx0LCBzdGF0ZSk7Cisg
ICAgYm9vbCBmYWxsYmFja1JldHVybiA9IHJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKENTU1BhcnNl
clRva2VuUmFuZ2UocmFuZ2UpLCBmYWxsYmFja1Jlc3VsdCwgY2FzY2FkZSk7CiAKICAgICBhdXRv
KiBwcm9wZXJ0eSA9IHN0eWxlLmdldEN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CiAKQEAg
LTkyLDI0ICs5MywyNCBAQCBzdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoQ1NT
UGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlcgogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgYm9vbCByZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJUb2tlblJhbmdl
IHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQsIEFwcGx5Q2FzY2FkZWRQcm9w
ZXJ0eVN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBib29sIHJlc29sdmVUb2tlblJhbmdlKENTU1BhcnNl
clRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwog
ICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgewogICAgICAgICBpZiAocmFuZ2UucGVlaygpLmZ1
bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVZhciB8fCByYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09
IENTU1ZhbHVlRW52KQotICAgICAgICAgICAgc3VjY2VzcyAmPSByZXNvbHZlVmFyaWFibGVSZWZl
cmVuY2UocmFuZ2UuY29uc3VtZUJsb2NrKCksIHJlc3VsdCwgc3RhdGUpOworICAgICAgICAgICAg
c3VjY2VzcyAmPSByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UocmFuZ2UuY29uc3VtZUJsb2NrKCks
IHJlc3VsdCwgY2FzY2FkZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocmFuZ2UuY29uc3VtZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLVJl
ZlB0cjxDU1NWYXJpYWJsZURhdGE+IENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU6OnJlc29sdmVW
YXJpYWJsZVJlZmVyZW5jZXMoQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0YXRlKSBjb25z
dAorUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZTo6cmVz
b2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKSBj
b25zdAogewogICAgIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tlbnM7CiAgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSA9IG1fZGF0YS0+dG9rZW5SYW5nZSgpOwogCi0gICAg
aWYgKCFyZXNvbHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzb2x2ZWRUb2tlbnMsIHN0YXRlKSkKKyAg
ICBpZiAoIXJlc29sdmVUb2tlblJhbmdlKHJhbmdlLCByZXNvbHZlZFRva2VucywgY2FzY2FkZSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIENTU1ZhcmlhYmxlRGF0YTo6
Y3JlYXRlKHJlc29sdmVkVG9rZW5zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFi
bGVSZWZlcmVuY2VWYWx1ZS5oCmluZGV4IGQ3MGUzMjdjMTA2Li45YTEyMGMzNjc3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oCkBAIC0zOSw5
ICszOSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBBcHBseUNhc2NhZGVk
UHJvcGVydHlTdGF0ZTsKIGNsYXNzIENTU1BhcnNlclRva2VuUmFuZ2U7CiAKK25hbWVzcGFjZSBT
dHlsZSB7CitjbGFzcyBQcm9wZXJ0eUNhc2NhZGU7Cit9CisKIGNsYXNzIENTU1ZhcmlhYmxlUmVm
ZXJlbmNlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4gY3JlYXRlKGNvbnN0IENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQpAQCAtNTIsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBlcXVhbHMoY29u
c3QgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS5nZXQoKSA9PSBvdGhlci5tX2RhdGEuZ2V0KCk7IH0KICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4
dCgpIGNvbnN0OwogCi0gICAgUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gcmVzb2x2ZVZhcmlhYmxl
UmVmZXJlbmNlcyhBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpIGNvbnN0OworICAgIFJlZlB0
cjxDU1NWYXJpYWJsZURhdGE+IHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIENTU1ZhcmlhYmxlUmVmZXJlbmNl
VmFsdWUoUmVmPENTU1ZhcmlhYmxlRGF0YT4mJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuaAppbmRleCA1ZTUzNTMxOGJjMi4uZGJhOGU5NTMxMWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCkBAIC0yMiw2ICsyMiw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNs
dWRlICJSdWxlU2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCiAjaW5jbHVkZSAi
U3R5bGVTY29wZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTMyLDggKzMzLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudFJ1bGVTZXRzOwogY2xhc3MgTWF0Y2hSZXF1
ZXN0OwotY2xhc3MgUnVsZURhdGE7Ci1jbGFzcyBSdWxlU2V0OwogY2xhc3MgU2VsZWN0b3JGaWx0
ZXI7CiAKIGNsYXNzIFBzZXVkb1N0eWxlUmVxdWVzdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKaW5kZXggZmU2YjZkOThlN2UuLjNiNGRiYmQ2OTM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSAiUGFnZVJ1bGVD
b2xsZWN0b3IuaCIKICNpbmNsdWRlICJQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oIgogI2luY2x1
ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJRdWly
a3MuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZUNvbnN0YW50cy5oIgpAQCAtMzczLDI0ICszNzQsMjMgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxl
KgogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5j
ZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRv
IG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KLSAgICBTdHlsZTo6
UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgY2Fz
Y2FkZS5hZGROb3JtYWxNYXRjaGVzKHJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9y
KTsKKyAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIHJlc3VsdCwgZGly
ZWN0aW9uLCB3cml0aW5nTW9kZSk7CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxl
OjpDYXNjYWRlTGV2ZWw6OkF1dGhvcik7CiAKLSAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0
ZSBhcHBseVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZyZXN1bHQgfTsKLSAgICBhcHBseUNhc2Nh
ZGVkUHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHks
IGFwcGx5U3RhdGUpOworICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVy
dHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3Qg
ZGlydGllZCwgdXBkYXRlIGl0IG5vdy4KICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBOb3cg
cmVzb2x2ZSByZW1haW5pbmcgY3VzdG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkg
b3JkZXIKLSAgICBmb3IgKGF1dG8gaXQgPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdp
bigpOyBpdCAhPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAg
ICAgYXBwbHlDYXNjYWRlZEN1c3RvbVByb3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAg
IGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENT
U1Byb3BlcnR5LCBhcHBseVN0YXRlKTsKKyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGll
cygpOworCisgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3Bl
cnR5LCBsYXN0Q1NTUHJvcGVydHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQg
Ynkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIHVwZGF0ZSBpdCBhIHNlY29u
ZCB0aW1lLgogICAgIHVwZGF0ZUZvbnQoKTsKIAotICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFBy
b3BlcnRpZXMoKnRoaXMsIGFwcGx5U3RhdGUpOworICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFBy
b3BlcnRpZXMoKTsKIAogICAgIGFkanVzdFJlbmRlclN0eWxlKCpzdGF0ZS5zdHlsZSgpLCAqc3Rh
dGUucGFyZW50U3R5bGUoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAKQEAgLTU3OSwyMSArNTc5LDIw
IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQ
YWdlKGludCBwYWdlSW5kZXgpCiAgICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGU7CiAgICAgZXh0
cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCptX3N0YXRlLnN0eWxlKCksIHJlc3VsdCwgZGly
ZWN0aW9uLCB3cml0aW5nTW9kZSk7CiAKLSAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2Nh
ZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVz
KHJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yKTsKKyAgICBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIHJlc3VsdCwgZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7
CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OkF1dGhv
cik7CiAKLSAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBhcHBseVN0YXRlIHsgdGhpcywg
JmNhc2NhZGUsICZyZXN1bHQgfTsKLSAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhmaXJzdENT
U1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHksIGFwcGx5U3RhdGUpOworICAgIGNh
c2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQ
cm9wZXJ0eSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgdXBkYXRlIGl0IG5v
dy4KICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3Vz
dG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKLSAgICBmb3IgKGF1dG8g
aXQgPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdpbigpOyBpdCAhPSBjYXNjYWRlLmN1
c3RvbVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3Rv
bVByb3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0
aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5LCBhcHBseVN0YXRl
KTsKKyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOworCisgICAgY2FzY2FkZS5h
cHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkp
OwogCi0gICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygqdGhpcywgYXBwbHlTdGF0
ZSk7CisgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCiAgICAgLy8gTm93
IHJldHVybiB0aGUgc3R5bGUuCiAgICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CkBAIC0x
MzgyLDUyICsxMzgxLDQ4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIEZp
bmQgb3V0IGlmIHRoZXJlJ3MgYSAtd2Via2l0LWFwcGVhcmFuY2UgcHJvcGVydHkgaW4gZWZmZWN0
IGZyb20gdGhlIFVBIHNoZWV0LgogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJvcmRl
ciBhbmQgYmFja2dyb3VuZCBzdHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUo
KQogICAgICAgICAvLyBjYW4gbG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYgdGhp
cyBpcyBhIHN0eWxlZCBmb3JtIGNvbnRyb2wgb3Igbm90LgotICAgICAgICBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlIGNhc2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgICAgIGNhc2Nh
ZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNl
ckFnZW50LCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgICAgICBjYXNjYWRlLmFkZEltcG9ydGFu
dE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKLQotICAgICAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBh
cHBseVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZtYXRjaFJlc3VsdCB9OworICAgICAgICBTdHls
ZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24s
IHdyaXRpbmdNb2RlKTsKKyAgICAgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxlOjpD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgY2Fz
Y2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKIAotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhD
U1NQcm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRp
b24sIGFwcGx5U3RhdGUpOworICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQcm9w
ZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24pOwog
ICAgICAgICBhZGp1c3RTdHlsZUZvckludGVyQ2hhcmFjdGVyUnVieSgpOwogCiAjaWYgRU5BQkxF
KERBUktfTU9ERV9DU1MpCiAgICAgICAgIC8vIFN1cHBvcnRlZCBjb2xvciBzY2hlbWVzIGNhbiBh
ZmZlY3QgcmVzb2x2ZWQgY29sb3JzLCBzbyB3ZSBuZWVkIHRvIGFwcGx5IHRoYXQgcHJvcGVydHkg
YmVmb3JlIGFueSBjb2xvciBwcm9wZXJ0aWVzLgotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVy
dGllcyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBhcHBs
eVN0YXRlKTsKKyAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoQ1NTUHJvcGVydHlDb2xv
clNjaGVtZSwgQ1NTUHJvcGVydHlDb2xvclNjaGVtZSk7CiAjZW5kaWYKIAotICAgICAgICBhcHBs
eUNhc2NhZGVkUHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJv
cGVydHksIGFwcGx5U3RhdGUpOworICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJz
dENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgICAgIC8vIElm
IG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUgaXQgbm93LgogICAgICAgICB1cGRhdGVGb250
KCk7CiAKICAgICAgICAgLy8gTm93IHJlc29sdmUgcmVtYWluaW5nIGN1c3RvbSBwcm9wZXJ0aWVz
IGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCi0gICAgICAgIGZvciAoYXV0byBpdCA9IGNhc2Nh
ZGUuY3VzdG9tUHJvcGVydGllcygpLmJlZ2luKCk7IGl0ICE9IGNhc2NhZGUuY3VzdG9tUHJvcGVy
dGllcygpLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3RvbVByb3Bl
cnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVydGll
cyhmaXJzdExvd1ByaW9yaXR5UHJvcGVydHksIGxhc3RDU1NQcm9wZXJ0eSwgYXBwbHlTdGF0ZSk7
CisgICAgICAgIGNhc2NhZGUuYXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7CisKKyAgICAgICAgY2Fz
Y2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJv
cGVydHkpOwogCiAgICAgICAgIHN0YXRlLmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogICAg
IH0KIAotICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRp
bmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxl
OjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNj
YWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVz
ZXIsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1h
dGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJpdGVkT25s
eSk7Ci0gICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBTdHlsZTo6
Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgY2FzY2FkZS5h
ZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2Vy
LCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyht
YXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBhcHBseUluaGVyaXRl
ZE9ubHkpOwotCi0gICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRo
aXMsICZjYXNjYWRlLCAmbWF0Y2hSZXN1bHQgfTsKKyAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRl
IGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKKyAg
ICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50
LCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhTdHls
ZTo6Q2FzY2FkZUxldmVsOjpVc2VyLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUu
YWRkTm9ybWFsTWF0Y2hlcyhTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJp
dGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKFN0eWxlOjpDYXNjYWRl
TGV2ZWw6OkF1dGhvciwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZEltcG9y
dGFudE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlciwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKKyAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6
VXNlckFnZW50LCBhcHBseUluaGVyaXRlZE9ubHkpOwogCi0gICAgYXBwbHlDYXNjYWRlZFByb3Bl
cnRpZXMoQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24sIENTU1Byb3BlcnR5V2Via2l0UnVi
eVBvc2l0aW9uLCBhcHBseVN0YXRlKTsKKyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQ
cm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24p
OwogICAgIGFkanVzdFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KCk7CiAKICNpZiBFTkFCTEUo
REFSS19NT0RFX0NTUykKICAgICAvLyBTdXBwb3J0ZWQgY29sb3Igc2NoZW1lcyBjYW4gYWZmZWN0
IHJlc29sdmVkIGNvbG9ycywgc28gd2UgbmVlZCB0byBhcHBseSB0aGF0IHByb3BlcnR5IGJlZm9y
ZSBhbnkgY29sb3IgcHJvcGVydGllcy4KLSAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhDU1NQ
cm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBhcHBseVN0YXRlKTsK
KyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQ
cm9wZXJ0eUNvbG9yU2NoZW1lKTsKICNlbmRpZgogCi0gICAgYXBwbHlDYXNjYWRlZFByb3BlcnRp
ZXMoZmlyc3RDU1NQcm9wZXJ0eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5LCBhcHBseVN0YXRl
KTsKKyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGln
aFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgLy8gSWYgdGhlIGVmZmVjdGl2ZSB6b29tIHZhbHVl
IGNoYW5nZXMsIHdlIGNhbid0IHVzZSB0aGUgbWF0Y2hlZCBwcm9wZXJ0aWVzIGNhY2hlLiBTdGFy
dCBvdmVyLgogICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkKQEAgLTE0NDEs
MTQgKzE0MzYsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAgICAgcmV0dXJuIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQsIERvTm90VXNlTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZSk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3VzdG9t
IHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKLSAgICBmb3IgKGF1dG8gaXQg
PSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdpbigpOyBpdCAhPSBjYXNjYWRlLmN1c3Rv
bVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3RvbVBy
b3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVz
KGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5LCBhcHBseVN0YXRlKTsK
KyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOworCisgICAgY2FzY2FkZS5hcHBs
eVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkpOwog
CiAgICAgLy8gRmluYWxseSwgc29tZSBwcm9wZXJ0aWVzIG11c3QgYmUgYXBwbGllZCBpbiB0aGUg
b3JkZXIgdGhleSB3ZXJlIHBhcnNlZC4KICAgICAvLyBUaGVyZSBhcmUgc29tZSBDU1MgcHJvcGVy
dGllcyB0aGF0IGFmZmVjdCB0aGUgc2FtZSBSZW5kZXJTdHlsZSB2YWx1ZXMsCiAgICAgLy8gc28g
dG8gcHJlc2VydmUgYmVoYXZpb3IsIHdlIHF1ZXVlIHRoZW0gdXAgZHVyaW5nIGNhc2NhZGUgYW5k
IGZsdXNoIGhlcmUuCi0gICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygqdGhpcywg
YXBwbHlTdGF0ZSk7CisgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCiAg
ICAgQVNTRVJUKCFzdGF0ZS5mb250RGlydHkoKSk7CiAKQEAgLTE0NjksOSArMTQ2NCwxMCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSwgc3RkOgogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7Ci0g
ICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRoaXMsIG51bGxwdHIs
IG51bGxwdHIgfTsKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKKyAgICBTdHlsZTo6UHJv
cGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCB7IH0sIHsgfSk7CiAgICAg
aWYgKHZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KGlkLCB2YWx1ZSwgYXBwbHlTdGF0ZSk7
CisgICAgICAgIGFwcGx5UHJvcGVydHkoaWQsIHZhbHVlLCBjYXNjYWRlKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKQEAgLTE1
MjAsNjQgKzE1MTYsMTcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXNGb3JM
ZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBpczxTVkdFbGVtZW50PihtX3N0YXRlLmVsZW1lbnQo
KSkgJiYgIShpczxTVkdTVkdFbGVtZW50PigqbV9zdGF0ZS5lbGVtZW50KCkpICYmIG1fc3RhdGUu
ZWxlbWVudCgpLT5wYXJlbnROb2RlKCkpOwogfQogCi1TdHlsZTo6UHJvcGVydHlDYXNjYWRlKiBT
dHlsZVJlc29sdmVyOjpjYXNjYWRlZFByb3BlcnRpZXNGb3JSb2xsYmFjayhjb25zdCBNYXRjaFJl
c3VsdCYgbWF0Y2hSZXN1bHQpCi17Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAg
V3JpdGluZ01vZGUgd3JpdGluZ01vZGU7Ci0gICAgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdN
b2RlKCpzdGF0ZSgpLnN0eWxlKCksIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2Rl
KTsKLQotICAgIHN3aXRjaCAoc3RhdGUoKS5jYXNjYWRlTGV2ZWwoKSkgewotICAgIGNhc2UgU3R5
bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yOiB7Ci0gICAgICAgIGF1dG8qIGF1dGhvclJvbGxiYWNr
ID0gc3RhdGUoKS5hdXRob3JSb2xsYmFjaygpOwotICAgICAgICBpZiAoYXV0aG9yUm9sbGJhY2sp
Ci0gICAgICAgICAgICByZXR1cm4gYXV0aG9yUm9sbGJhY2s7Ci0KLSAgICAgICAgYXV0byBuZXdB
dXRob3JSb2xsYmFjayA9IG1ha2VVbmlxdWU8U3R5bGU6OlByb3BlcnR5Q2FzY2FkZT4oZGlyZWN0
aW9uLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgLy8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNh
c2NhZGUgY29udGFpbnMgVUEgcnVsZXMgYW5kIHVzZXIgcnVsZXMgYnV0IG5vIGF1dGhvciBydWxl
cy4KLSAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1
bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwotICAgICAgICBuZXdB
dXRob3JSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2Nh
ZGVMZXZlbDo6VXNlciwgZmFsc2UpOwotICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1w
b3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlciwgZmFs
c2UpOwotICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRj
aFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBmYWxzZSk7Ci0KLSAgICAg
ICAgc3RhdGUoKS5zZXRBdXRob3JSb2xsYmFjayhuZXdBdXRob3JSb2xsYmFjayk7Ci0gICAgICAg
IHJldHVybiBzdGF0ZSgpLmF1dGhvclJvbGxiYWNrKCk7Ci0gICAgfQotCi0gICAgY2FzZSBTdHls
ZTo6Q2FzY2FkZUxldmVsOjpVc2VyOiB7Ci0gICAgICAgIGF1dG8qIHVzZXJSb2xsYmFjayA9IHN0
YXRlKCkudXNlclJvbGxiYWNrKCk7Ci0gICAgICAgIGlmICh1c2VyUm9sbGJhY2spCi0gICAgICAg
ICAgICByZXR1cm4gdXNlclJvbGxiYWNrOwotCi0gICAgICAgIGF1dG8gbmV3VXNlclJvbGxiYWNr
ID0gbWFrZVVuaXF1ZTxTdHlsZTo6UHJvcGVydHlDYXNjYWRlPihkaXJlY3Rpb24sIHdyaXRpbmdN
b2RlKTsKLQotICAgICAgICAvLyBUaGlzIHNwZWNpYWwgcm9sbGJhY2sgY2FzY2FkZSBjb250YWlu
cyBvbmx5IFVBIHJ1bGVzLgotICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNo
ZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwot
ICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQs
IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwotCi0gICAgICAgIHN0YXRl
KCkuc2V0VXNlclJvbGxiYWNrKG5ld1VzZXJSb2xsYmFjayk7Ci0gICAgICAgIHJldHVybiBzdGF0
ZSgpLnVzZXJSb2xsYmFjaygpOwotICAgIH0KLQotICAgIGNhc2UgU3R5bGU6OkNhc2NhZGVMZXZl
bDo6VXNlckFnZW50OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIEFwcGx5Q2FzY2Fk
ZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1h
c2sgbGlua01hdGNoTWFzaykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIGNh
c2NhZGUsIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayBsaW5rTWF0Y2hNYXNrKQogewot
ICAgIGF1dG8qIG1hdGNoUmVzdWx0ID0gYXBwbHlTdGF0ZS5tYXRjaFJlc3VsdDsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFpc1Nob3J0aGFuZENTU1Byb3BlcnR5KGlkKSwgIlNob3J0aGFuZCBw
cm9wZXJ0eSBpZCA9ICVkIHdhc24ndCBleHBhbmRlZCBhdCBwYXJzaW5nIHRpbWUiLCBpZCk7CiAK
ICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZVRvQXBwbHkgPSB2YWx1ZTsKICAgICBpZiAodmFsdWUtPmhhc1ZhcmlhYmxlUmVmZXJlbmNlcygp
KSB7Ci0gICAgICAgIHZhbHVlVG9BcHBseSA9IHJlc29sdmVkVmFyaWFibGVWYWx1ZShpZCwgKnZh
bHVlLCBhcHBseVN0YXRlKTsKLSAgICAgICAgLy8gSWYgYXBwbGllZFByb3BlcnRpZXMgYWxyZWFk
eSBoYXMgdGhpcyBpZCwgdGhlbiB3ZSBkZXRlY3RlZCBhIGN5Y2xlLCBhbmQgdGhpcyB2YWx1ZSBz
aG91bGQgYmUgdW5zZXQuCi0gICAgICAgIGlmICghdmFsdWVUb0FwcGx5IHx8IGFwcGx5U3RhdGUu
YXBwbGllZFByb3BlcnRpZXMuZ2V0KGlkKSkgeworICAgICAgICB2YWx1ZVRvQXBwbHkgPSByZXNv
bHZlZFZhcmlhYmxlVmFsdWUoaWQsICp2YWx1ZSwgY2FzY2FkZSk7CisgICAgICAgIC8vIElmIHRo
ZSBjYXNjYWRlIGhhcyBhbHJlYWR5IGFwcGxpZWQgdGhpcyBpZCwgdGhlbiB3ZSBkZXRlY3RlZCBh
IGN5Y2xlLCBhbmQgdGhpcyB2YWx1ZSBzaG91bGQgYmUgdW5zZXQuCisgICAgICAgIGlmICghdmFs
dWVUb0FwcGx5IHx8IGNhc2NhZGUuaGFzQXBwbGllZFByb3BlcnR5KGlkKSkgewogICAgICAgICAg
ICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKICAgICAgICAgICAg
ICAgICB2YWx1ZVRvQXBwbHkgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUluaGVy
aXRlZFZhbHVlKCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNTg4LDcgKzE1MzcsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlLCBBcHBseUNhc2NhZAogICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2Fy
ZVByb3BlcnR5KGlkKSkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVy
dHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSwgc3RhdGUuc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChu
ZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lkLCB2YWx1ZVRv
QXBwbHkuZ2V0KCksIGFwcGx5U3RhdGUsIGxpbmtNYXRjaE1hc2spOworICAgICAgICByZXR1cm4g
YXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWVUb0FwcGx5LmdldCgpLCBjYXNjYWRlLCBsaW5rTWF0
Y2hNYXNrKTsKICAgICB9CiAKICAgICBDU1NWYWx1ZSogdmFsdWVUb0NoZWNrRm9ySW5oZXJpdElu
aXRpYWwgPSB2YWx1ZVRvQXBwbHkuZ2V0KCk7CkBAIC0xNjEzLDEyICsxNTYyLDEzIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUsIEFwcGx5Q2FzY2FkCiAgICAgYm9vbCBpc1JldmVydCA9IHZhbHVlVG9DaGVja0Zvcklu
aGVyaXRJbml0aWFsLT5pc1JldmVydFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09
IENTU1ZhbHVlUmV2ZXJ0OwogCiAgICAgaWYgKGlzUmV2ZXJ0KSB7Ci0gICAgICAgIGlmIChzdGF0
ZS5jYXNjYWRlTGV2ZWwoKSA9PSBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQgfHwgIW1h
dGNoUmVzdWx0KQorICAgICAgICBpZiAoc3RhdGUuY2FzY2FkZUxldmVsKCkgPT0gU3R5bGU6OkNh
c2NhZGVMZXZlbDo6VXNlckFnZW50KQogICAgICAgICAgICAgaXNVbnNldCA9IHRydWU7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGNvcnJlY3Qgcm9sbGJhY2sgb2Jq
ZWN0IGZyb20gdGhlIHN0YXRlLCBidWlsZGluZyBpdCBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAg
ICAvLyBUaGlzIHJlcXVpcmVzIGhhdmluZyB0aGUgb3JpZ2luYWwgTWF0Y2hSZXN1bHQgYXZhaWxh
YmxlLgotICAgICAgICAgICAgYXV0byogcm9sbGJhY2sgPSBjYXNjYWRlZFByb3BlcnRpZXNGb3JS
b2xsYmFjaygqbWF0Y2hSZXN1bHQpOworCisgICAgICAgICAgICBhdXRvKiByb2xsYmFjayA9IGNh
c2NhZGUucHJvcGVydHlDYXNjYWRlRm9yUm9sbGJhY2soc3RhdGUuY2FzY2FkZUxldmVsKCkpOwog
ICAgICAgICAgICAgQVNTRVJUKHJvbGxiYWNrKTsKIAogICAgICAgICAgICAgLy8gV2l0aCB0aGUg
Y2FzY2FkZSBidWlsdCwgd2UgbmVlZCB0byBvYnRhaW4gdGhlIHByb3BlcnR5IGFuZCBhcHBseSBp
dC4gSWYgdGhlIHByb3BlcnR5IGlzCkBAIC0xNjI4LDEzICsxNTc4LDEzIEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUs
IEFwcGx5Q2FzY2FkCiAgICAgICAgICAgICAgICAgaWYgKGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJl
ZCAmJiBjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQtPmluaGVyaXRzICYmIHJvbGxiYWNrLT5oYXND
dXN0b21Qcm9wZXJ0eShjdXN0b21Qcm9wZXJ0eVZhbHVlLT5uYW1lKCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gcHJvcGVydHkgPSByb2xsYmFjay0+Y3VzdG9tUHJvcGVydHkoY3VzdG9t
UHJvcGVydHlWYWx1ZS0+bmFtZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5
LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdKQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShwcm9wZXJ0eS5pZCwgcHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10sIGFw
cGx5U3RhdGUsIGxpbmtNYXRjaE1hc2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShwcm9wZXJ0eS5pZCwgcHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10sIGNh
c2NhZGUsIGxpbmtNYXRjaE1hc2spOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xsYmFjay0+aGFzUHJvcGVy
dHkoaWQpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcHJvcGVydHkgPSByb2xsYmFjay0+cHJv
cGVydHkoaWQpOwogICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0
Y2hNYXNrXSkKLSAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwg
cHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10sIGFwcGx5U3RhdGUsIGxpbmtNYXRjaE1h
c2spOworICAgICAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkLCBwcm9w
ZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0Y2hNYXNrXSwgY2FzY2FkZSwgbGlua01hdGNoTWFzayk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0xNjc2LDEwICsxNjI2
LDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUsIEFwcGx5Q2FzY2FkCiAgICAgU3R5bGVCdWlsZGVyOjphcHBseVBy
b3BlcnR5KGlkLCAqdGhpcywgKnZhbHVlVG9BcHBseSwgaXNJbml0aWFsLCBpc0luaGVyaXQsIGN1
c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCk7CiB9CiAKLVJlZlB0cjxDU1NWYWx1ZT4gU3R5bGVSZXNv
bHZlcjo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkgY29uc3QK
K1JlZlB0cjxDU1NWYWx1ZT4gU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGUmIGNhc2NhZGUpIGNvbnN0CiB7CiAgICAgQ1NTUGFyc2VyIHBhcnNlcihkb2N1bWVu
dCgpKTsKLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2Vz
KHByb3BJRCwgdmFsdWUsIHN0YXRlKTsKKyAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWVXaXRo
VmFyaWFibGVSZWZlcmVuY2VzKHByb3BJRCwgdmFsdWUsIGNhc2NhZGUpOwogfQogCiBSZWZQdHI8
U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NWYWx1ZSYgdmFsdWUpCkBA
IC0yMDMwLDExNCArMTk4MCw0IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3Bl
cmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmlsdGVyT3BlcmF0CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlDYXNjYWRlZEN1c3RvbVByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgbmFtZSwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0YXRl
KQotewotICAgIGlmIChzdGF0ZS5hcHBsaWVkQ3VzdG9tUHJvcGVydGllcy5jb250YWlucyhuYW1l
KSB8fCAhc3RhdGUuY2FzY2FkZS0+Y3VzdG9tUHJvcGVydGllcygpLmNvbnRhaW5zKG5hbWUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByb3BlcnR5ID0gc3RhdGUuY2FzY2FkZS0+Y3Vz
dG9tUHJvcGVydGllcygpLmdldChuYW1lKTsKLSAgICBib29sIGluQ3ljbGUgPSBzdGF0ZS5pblBy
b2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250YWlucyhuYW1lKTsKLQotICAgIGZvciAoYXV0byBp
bmRleCA6IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7Ci0gICAgICAgIGlm
ICghcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChpbmRleCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiB0aGlzLT5z
dGF0ZSgpLnN0eWxlKCktPmluc2lkZUxpbmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1
ZT4gdmFsdWVUb0FwcGx5ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGRvd25jYXN0
PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KCpwcm9wZXJ0eS5jc3NWYWx1ZVtpbmRleF0pKTsKLQot
ICAgICAgICBpZiAoaW5DeWNsZSkgewotICAgICAgICAgICAgc3RhdGUuYXBwbGllZEN1c3RvbVBy
b3BlcnRpZXMuYWRkKG5hbWUpOyAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IHRyeSB0byBhcHBseSB0
aGlzIHByb3BlcnR5IGFnYWluIHdoaWxlIHJlc29sdmluZyBpdC4KLSAgICAgICAgICAgIHZhbHVl
VG9BcHBseSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NW
YWx1ZUludmFsaWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGUuaW5Qcm9ncmVzc1Byb3Bl
cnRpZXNDdXN0b20uYWRkKG5hbWUpOwotCi0gICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZjxDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlPj4odmFsdWVUb0FwcGx5LT52YWx1ZSgp
KSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZSA9IHJlc29sdmVk
VmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0FwcGx5LmdldCgpLCBzdGF0
ZSk7Ci0KLSAgICAgICAgICAgIGlmIChzdGF0ZS5hcHBsaWVkQ3VzdG9tUHJvcGVydGllcy5jb250
YWlucyhuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm47IC8vIFRoZXJlIHdhcyBhIGN5Y2xl
IGFuZCB0aGUgdmFsdWUgd2FzIHJlc2V0LCBzbyBiYWlsLgotCi0gICAgICAgICAgICBpZiAoIXBh
cnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTQ3VzdG9tUHJvcGVy
dHlWYWx1ZTo6Y3JlYXRlV2l0aElEKG5hbWUsIENTU1ZhbHVlVW5zZXQpOwotCi0gICAgICAgICAg
ICB2YWx1ZVRvQXBwbHkgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqcGFyc2Vk
VmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0
aWVzQ3VzdG9tLmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLT5zdGF0
ZSgpLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICAgICAgICAgICAg
ICB0aGlzLT5zdGF0ZSgpLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2Up
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaExpbmspIHsKLSAgICAgICAgICAgICAgICB0aGlzLT5zdGF0ZSgpLnNldEFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICAgICAgICAgICAgICB0aGlzLT5zdGF0
ZSgpLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZp
c2l0ZWQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLT5zdGF0ZSgpLnNldEFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy0+c3RhdGUoKS5zZXRB
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKHRydWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0FwcGx5LnB0
cigpLCBzdGF0ZSwgaW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGUuaW5Qcm9n
cmVzc1Byb3BlcnRpZXNDdXN0b20ucmVtb3ZlKG5hbWUpOwotICAgIHN0YXRlLmFwcGxpZWRDdXN0
b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsKLQotICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0
b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7Ci0gICAgICAgIGlmICghcHJvcGVydHkuY3Nz
VmFsdWVbaW5kZXhdKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpbmRleCAh
PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiB0aGlzLT5zdGF0ZSgpLnN0eWxlKCkt
Pmluc2lkZUxpbmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWVUb0FwcGx5
ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGRvd25jYXN0PENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU+KCpwcm9wZXJ0eS5jc3NWYWx1ZVtpbmRleF0pKTsKLQotICAgICAgICBpZiAoaW5D
eWNsZSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxDU1NWYXJpYWJsZVJlZmVyZW5jZVZh
bHVlPj4odmFsdWVUb0FwcGx5LT52YWx1ZSgpKSkgewotICAgICAgICAgICAgLy8gUmVzb2x2ZSB0
aGlzIHZhbHVlIHNvIHRoYXQgd2UgcmVzZXQgaXRzIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAg
IHJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0FwcGx5Lmdl
dCgpLCBzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlDYXNjYWRlZFByb3BlcnRpZXMoaW50IGZpcnN0UHJvcGVydHksIGludCBsYXN0UHJvcGVy
dHksIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkKLXsKLSAgICBpZiAoTElLRUxZ
KHN0YXRlLmNhc2NhZGUtPmN1c3RvbVByb3BlcnRpZXMoKS5pc0VtcHR5KCkpKQotICAgICAgICBy
ZXR1cm4gYXBwbHlDYXNjYWRlZFByb3BlcnRpZXNJbXBsPEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFj
a2luZzo6RGlzYWJsZWQ+KGZpcnN0UHJvcGVydHksIGxhc3RQcm9wZXJ0eSwgc3RhdGUpOwotICAg
IHJldHVybiBhcHBseUNhc2NhZGVkUHJvcGVydGllc0ltcGw8Q3VzdG9tUHJvcGVydHlDeWNsZVRy
YWNraW5nOjpFbmFibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHksIHN0YXRlKTsKLX0K
LQotdGVtcGxhdGU8U3R5bGVSZXNvbHZlcjo6Q3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nIFRy
YWNrQ3ljbGVzPgotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlDYXNjYWRlZFByb3Bl
cnRpZXNJbXBsKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5LCBBcHBseUNhc2Nh
ZGVkUHJvcGVydHlTdGF0ZSYgc3RhdGUpCi17Ci0gICAgZm9yIChpbnQgaWQgPSBmaXJzdFByb3Bl
cnR5OyBpZCA8PSBsYXN0UHJvcGVydHk7ICsraWQpIHsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oaWQpOwotICAgICAgICBpZiAo
IXN0YXRlLmNhc2NhZGUtPmhhc1Byb3BlcnR5KHByb3BlcnR5SUQpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIEFTU0VSVChwcm9wZXJ0eUlEICE9IENTU1Byb3BlcnR5Q3VzdG9tKTsK
LSAgICAgICAgYXV0byYgcHJvcGVydHkgPSBzdGF0ZS5jYXNjYWRlLT5wcm9wZXJ0eShwcm9wZXJ0
eUlEKTsKLQotICAgICAgICBpZiAoVHJhY2tDeWNsZXMgPT0gQ3VzdG9tUHJvcGVydHlDeWNsZVRy
YWNraW5nOjpEaXNhYmxlZCkgewotICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkg
Y3VzdG9tIHByb3BlcnRpZXMsIHRoZW4gdGhlcmUgY2FuJ3QgYmUgYW55IGN5Y2xlcy4KLSAgICAg
ICAgICAgIHByb3BlcnR5LmFwcGx5KCp0aGlzLCBzdGF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXMuZ2V0KHBy
b3BlcnR5SUQpKSkgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBhIGN5Y2xlIChlZy4g
c2V0dGluZyBmb250IHNpemUgdXNpbmcgcmVnaXN0ZXJlZCBjdXN0b20gcHJvcGVydHkgdmFsdWUg
Y29udGFpbmluZyBlbSkuCi0gICAgICAgICAgICAgICAgLy8gU28gdGhpcyB2YWx1ZSBzaG91bGQg
YmUgdW5zZXQuCi0gICAgICAgICAgICAgICAgc3RhdGUuYXBwbGllZFByb3BlcnRpZXMuc2V0KHBy
b3BlcnR5SUQpOwotICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJvcGVydHkgaXMgaW4gYSBjeWNs
ZSwgYW5kIG9ubHkgdGhlIHJvb3Qgb2YgdGhlIGNhbGwgc3RhY2sgd2lsbCBoYXZlIGZpcnN0UHJv
cGVydHkgIT0gbGFzdFByb3BlcnR5LgotICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdFByb3Bl
cnR5ID09IGxhc3RQcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzLnNldChwcm9w
ZXJ0eUlEKTsKLSAgICAgICAgICAgIHByb3BlcnR5LmFwcGx5KCp0aGlzLCBzdGF0ZSk7Ci0gICAg
ICAgICAgICBzdGF0ZS5hcHBsaWVkUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7Ci0gICAgICAg
ICAgICBzdGF0ZS5pblByb2dyZXNzUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCwgZmFsc2UpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaAppbmRleCBmZGM1ZmIzZDgwYy4uYzA3YzhlZjhiZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMjAxLDkgKzIwMSw2IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmls
dGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CiAKLSAgICB2b2lkIGFwcGx5Q2FzY2FkZWRQ
cm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5LCBBcHBseUNhc2Nh
ZGVkUHJvcGVydHlTdGF0ZSYpOwotICAgIHZvaWQgYXBwbHlDYXNjYWRlZEN1c3RvbVByb3BlcnR5
KGNvbnN0IFN0cmluZyYgbmFtZSwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmKTsKLQogcHJp
dmF0ZToKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6
ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMg
Y2hhbmdlZC4gLWR3aAogICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRl
clN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKQEAgLTIxNCwyMiArMjEx
LDEyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxl
JiwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50Qm94U3R5bGUsIGNvbnN0IEVsZW1lbnQqKTsKICAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxl
Rm9yU2l0ZVNwZWNpZmljUXVpcmtzKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCYpOwotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRQb3NpdGlvbj4gYWRqdXN0TmFtZWRHcmlkSXRlbVBvc2l0
aW9uKGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmLCBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYsIGNv
bnN0IEdyaWRQb3NpdGlvbiYsIEdyaWRQb3NpdGlvblNpZGUpIGNvbnN0OwogICAgIAogICAgIHZv
aWQgYWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKTsKICAgICAKLSAgICBib29sIGZh
c3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwotCiAgICAgZW51bSBTaG91
bGRVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hlIHsgRG9Ob3RVc2VNYXRjaGVkUHJvcGVydGllc0Nh
Y2hlID0gMCwgVXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSB9OwogICAgIHZvaWQgYXBwbHlNYXRj
aGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQmLCBTaG91bGRV
c2VNYXRjaGVkUHJvcGVydGllc0NhY2hlID0gVXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk7CiAK
LSAgICBlbnVtIEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB7IEVuYWJsZWQgPSAwLCBEaXNh
YmxlZCB9OwotICAgIHRlbXBsYXRlPEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZz4KLSAgICBp
bmxpbmUgdm9pZCBhcHBseUNhc2NhZGVkUHJvcGVydGllc0ltcGwoaW50IGZpcnN0UHJvcGVydHks
IGludCBsYXN0UHJvcGVydHksIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7Ci0KLSAgICB2
b2lkIGNhc2NhZGVNYXRjaGVzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBNYXRjaFJl
c3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29s
IGluaGVyaXRlZE9ubHkpOwotCiAgICAgRG9jdW1lbnRSdWxlU2V0cyBtX3J1bGVTZXRzOwogCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgUmVmUHRyPFN0eWxlUnVsZUtleWZy
YW1lcz4+IEtleWZyYW1lc1J1bGVNYXA7CkBAIC0yOTEsMTIgKzI3OCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgU3R5bGU6OlNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGVTY29wZU9yZGluYWw7IH0KICAgICAgICAgdm9pZCBzZXRTdHlsZVNjb3BlT3Jk
aW5hbChTdHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsKSB7IG1fc3R5bGVTY29w
ZU9yZGluYWwgPSBzdHlsZVNjb3BlT3JkaW5hbDsgfQogCi0gICAgICAgIFN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGUqIGF1dGhvclJvbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9hdXRob3JSb2xsYmFj
ay5nZXQoKTsgfQotICAgICAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlKiB1c2VyUm9sbGJhY2so
KSBjb25zdCB7IHJldHVybiBtX3VzZXJSb2xsYmFjay5nZXQoKTsgfQotICAgICAgICAKLSAgICAg
ICAgdm9pZCBzZXRBdXRob3JSb2xsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8U3R5bGU6OlByb3BlcnR5
Q2FzY2FkZT4mIHJvbGxiYWNrKSB7IG1fYXV0aG9yUm9sbGJhY2sgPSBXVEZNb3ZlKHJvbGxiYWNr
KTsgfQotICAgICAgICB2b2lkIHNldFVzZXJSb2xsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8U3R5bGU6
OlByb3BlcnR5Q2FzY2FkZT4mIHJvbGxiYWNrKSB7IG1fdXNlclJvbGxiYWNrID0gV1RGTW92ZShy
b2xsYmFjayk7IH0KLQogICAgICAgICBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yRmlsdGVyOyB9CiAgICAgICAgIAogICAgIHBy
aXZhdGU6CkBAIC0zMDcsOCArMjg4LDYgQEAgcHVibGljOgogICAgICAgICBjb25zdCBSZW5kZXJT
dHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBtX293bmVkUGFyZW50U3R5bGU7CiAgICAgICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07Ci0gICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxTdHlsZTo6UHJvcGVydHlDYXNjYWRlPiBtX2F1dGhvclJvbGxiYWNrOwotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3R5bGU6OlByb3BlcnR5Q2FzY2FkZT4gbV91c2VyUm9sbGJhY2s7CiAK
ICAgICAgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIG1fc2VsZWN0b3JGaWx0ZXIgeyBudWxscHRy
IH07CiAKQEAgLTMzOCw4ICszMTcsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBhcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSgpOyB9CiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCk7IH0KIAotICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUqIGNhc2NhZGVkUHJvcGVydGllc0Zv
clJvbGxiYWNrKGNvbnN0IE1hdGNoUmVzdWx0Jik7Ci0KICAgICBDU1NUb1N0eWxlTWFwKiBzdHls
ZU1hcCgpIHsgcmV0dXJuICZtX3N0eWxlTWFwOyB9CiAgICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVy
cyYgaW5zcGVjdG9yQ1NTT01XcmFwcGVycygpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTT01XcmFw
cGVyczsgfQogICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bigpIHsgcmV0dXJuIG1fc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7IH0KQEAgLTM1MCwxMSArMzI3
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKSB7IG1fc3RhdGUuc2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9CiAgICAgdm9p
ZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBt
X3N0YXRlLnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CiAKLSAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUlELCBjb25zdCBD
U1NWYWx1ZSYsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJikgY29uc3Q7CisgICAgUmVmUHRy
PENTU1ZhbHVlPiByZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NT
VmFsdWUmLCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJikgY29uc3Q7CiAKICAgICBib29sIGFkanVz
dFJlbmRlclN0eWxlRm9yVGV4dEF1dG9zaXppbmcoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
Jik7CiAKLSAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBB
cHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYsIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFz
ayA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKyAgICB2b2lkIGFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgU2Vs
ZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1
bHQpOwogCiBwcml2YXRlOgogICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CkBA
IC00MTksMTggKzM5Niw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzRGVsZXRlZCB7IGZhbHNl
IH07CiB9OwogCi0vLyBTdGF0ZSB0byB1c2Ugd2hlbiBhcHBseWluZyBwcm9wZXJ0aWVzLCB0byBr
ZWVwIHRyYWNrIG9mIHdoaWNoIGN1c3RvbSBhbmQgaGlnaC1wcmlvcml0eQotLy8gcHJvcGVydGll
cyBoYXZlIGJlZW4gcmVzb2x2ZWQuCi1zdHJ1Y3QgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUg
ewotICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXI7Ci0gICAgU3R5bGU6OlByb3BlcnR5
Q2FzY2FkZSogY2FzY2FkZTsKLSAgICBjb25zdCBNYXRjaFJlc3VsdCogbWF0Y2hSZXN1bHQ7Ci0g
ICAgQml0bWFwPG51bUNTU1Byb3BlcnRpZXM+IGFwcGxpZWRQcm9wZXJ0aWVzID0geyB9OwotICAg
IEhhc2hTZXQ8U3RyaW5nPiBhcHBsaWVkQ3VzdG9tUHJvcGVydGllcyA9IHsgfTsKLSAgICBCaXRt
YXA8bnVtQ1NTUHJvcGVydGllcz4gaW5Qcm9ncmVzc1Byb3BlcnRpZXMgPSB7IH07Ci0gICAgSGFz
aFNldDxTdHJpbmc+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tID0geyB9OwotfTsKLQogaW5s
aW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyAmYXR0cmlidXRlTmFtZSkgY29uc3QKIHsK
ICAgICBBU1NFUlQoIWF0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUGFyc2VyLmNwcAppbmRleCBkNjRmZmViYTdhZi4uY2M5YmQyOTVmOGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0x
NzYsMTAgKzE3NywxMCBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbkZvckluc3Bl
Y3Rvcihjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBjbwogICAgIENTU1BhcnNlcklt
cGw6OnBhcnNlRGVjbGFyYXRpb25MaXN0Rm9ySW5zcGVjdG9yKHN0cmluZywgY29udGV4dCwgb2Jz
ZXJ2ZXIpOwogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhW
YXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0YXRlKQorUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5
SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUm
IGNhc2NhZGUpCiB7CiAgICAgQVNTRVJUKChwcm9wSUQgPT0gQ1NTUHJvcGVydHlDdXN0b20gJiYg
dmFsdWUuaXNDdXN0b21Qcm9wZXJ0eVZhbHVlKCkpIHx8IChwcm9wSUQgIT0gQ1NTUHJvcGVydHlD
dXN0b20gJiYgIXZhbHVlLmlzQ3VzdG9tUHJvcGVydHlWYWx1ZSgpKSk7Ci0gICAgYXV0byYgc3R5
bGUgPSAqc3RhdGUuc3R5bGVSZXNvbHZlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9ICpj
YXNjYWRlLnN0eWxlUmVzb2x2ZXIoKS5zdHlsZSgpOwogICAgIGF1dG8gZGlyZWN0aW9uID0gc3R5
bGUuZGlyZWN0aW9uKCk7CiAgICAgYXV0byB3cml0aW5nTW9kZSA9IHN0eWxlLndyaXRpbmdNb2Rl
KCk7CiAKQEAgLTE5Miw3ICsxOTMsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSQogICAgICAg
ICAgICAgc2hvcnRoYW5kSUQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJv
cGVydHkoc2hvcnRoYW5kSUQsIGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwogICAgICAgICBDU1NW
YXJpYWJsZVJlZmVyZW5jZVZhbHVlKiBzaG9ydGhhbmRWYWx1ZSA9IHBlbmRpbmdTdWJzdGl0dXRp
b24uc2hvcnRoYW5kVmFsdWUoKTsKIAotICAgICAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHNob3J0
aGFuZFZhbHVlLT5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKHN0YXRlKTsKKyAgICAgICAgYXV0
byByZXNvbHZlZERhdGEgPSBzaG9ydGhhbmRWYWx1ZS0+cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNl
cyhjYXNjYWRlKTsKICAgICAgICAgaWYgKCFyZXNvbHZlZERhdGEpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgVmVjdG9yPENTU1BhcnNlclRva2VuPiByZXNvbHZlZFRva2Vu
cyA9IHJlc29sdmVkRGF0YS0+dG9rZW5zKCk7CkBAIC0yMTEsNyArMjEyLDcgQEAgUmVmUHRyPENT
U1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1By
b3BlcnR5SUQgcHJvcEkKIAogICAgIGlmICh2YWx1ZS5pc1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUo
KSkgewogICAgICAgICBjb25zdCBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlJiB2YWx1ZVdpdGhS
ZWZlcmVuY2VzID0gZG93bmNhc3Q8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4odmFsdWUpOwot
ICAgICAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZh
cmlhYmxlUmVmZXJlbmNlcyhzdGF0ZSk7CisgICAgICAgIGF1dG8gcmVzb2x2ZWREYXRhID0gdmFs
dWVXaXRoUmVmZXJlbmNlcy5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGNhc2NhZGUpOwogICAg
ICAgICBpZiAoIXJlc29sdmVkRGF0YSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUocHJvcElELCBy
ZXNvbHZlZERhdGEtPnRva2VucygpLCBtX2NvbnRleHQpOwpAQCAtMjIxLDkgKzIyMiw5IEBAIFJl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNl
cyhDU1NQcm9wZXJ0eUlEIHByb3BJCiAgICAgY29uc3QgYXV0byYgdmFsdWVXaXRoUmVmZXJlbmNl
cyA9IFdURjo6Z2V0PFJlZjxDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlPj4oY3VzdG9tUHJvcFZh
bHVlLnZhbHVlKCkpLmdldCgpOwogCiAgICAgYXV0byYgbmFtZSA9IGRvd25jYXN0PENTU0N1c3Rv
bVByb3BlcnR5VmFsdWU+KHZhbHVlKS5uYW1lKCk7Ci0gICAgYXV0byogcmVnaXN0ZXJlZCA9IHN0
YXRlLnN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3Bl
cnR5U2V0KCkuZ2V0KG5hbWUpOworICAgIGF1dG8qIHJlZ2lzdGVyZWQgPSBjYXNjYWRlLnN0eWxl
UmVzb2x2ZXIoKS5kb2N1bWVudCgpLmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgp
LmdldChuYW1lKTsKICAgICBhdXRvJiBzeW50YXggPSByZWdpc3RlcmVkID8gcmVnaXN0ZXJlZC0+
c3ludGF4IDogIioiOwotICAgIGF1dG8gcmVzb2x2ZWREYXRhID0gdmFsdWVXaXRoUmVmZXJlbmNl
cy5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKHN0YXRlKTsKKyAgICBhdXRvIHJlc29sdmVkRGF0
YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjYXNjYWRl
KTsKIAogICAgIGlmICghcmVzb2x2ZWREYXRhKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTIzMyw5ICsyMzQsOSBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdp
dGhWYXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSQogICAgIENTU1Byb3BlcnR5
UGFyc2VyOjpjb2xsZWN0UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1ZURlcGVuZGVuY2llcyhzeW50
YXgsIGZhbHNlLCBkZXBlbmRlbmNpZXMsIHJlc29sdmVkRGF0YS0+dG9rZW5zKCksIG1fY29udGV4
dCk7CiAKICAgICBmb3IgKGF1dG8gaWQgOiBkZXBlbmRlbmNpZXMpCi0gICAgICAgIHN0YXRlLnN0
eWxlUmVzb2x2ZXItPmFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGlkLCBpZCwgc3RhdGUpOworICAg
ICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhpZCwgaWQpOwogCi0gICAgcmV0dXJuIENTU1By
b3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCBzeW50YXgs
IHJlc29sdmVkRGF0YS0+dG9rZW5zKCksICpzdGF0ZS5zdHlsZVJlc29sdmVyLCBtX2NvbnRleHQp
OworICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5
VmFsdWUobmFtZSwgc3ludGF4LCByZXNvbHZlZERhdGEtPnRva2VucygpLCBjYXNjYWRlLnN0eWxl
UmVzb2x2ZXIoKSwgbV9jb250ZXh0KTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFZlY3Rvcjxkb3Vi
bGU+PiBDU1NQYXJzZXI6OnBhcnNlS2V5ZnJhbWVLZXlMaXN0KGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAppbmRleCBlMzMwNzg5OGZhYS4u
ZDI2OTU1MTRlMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtMzAs
NyArMzAsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBBcHBseUNhc2NhZGVk
UHJvcGVydHlTdGF0ZTsKIGNsYXNzIENTU1BhcnNlck9ic2VydmVyOwogY2xhc3MgQ1NTU2VsZWN0
b3JMaXN0OwogY2xhc3MgQ29sb3I7CkBAIC00Miw2ICs0MSwxMCBAQCBjbGFzcyBTdHlsZVJ1bGVL
ZXlmcmFtZTsKIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIGNsYXNzIFJlbmRlclN0eWxlOwog
CituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgUHJvcGVydHlDYXNjYWRlOworfQorCiBjbGFzcyBD
U1NQYXJzZXIgewogcHVibGljOgogICAgIGVudW0gY2xhc3MgUGFyc2VSZXN1bHQgewpAQCAtNzgs
NyArODEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5n
JiwgQ1NTU2VsZWN0b3JMaXN0Jik7CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVmFsdWVX
aXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhbHVlJiwgQXBw
bHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVmFs
dWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhbHVlJiwg
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpOwogCiAgICAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3Io
Y29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7CiAgICAgc3RhdGljIENvbG9yIHBh
cnNlU3lzdGVtQ29sb3IoY29uc3QgU3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAKaW5kZXggNTNjZDYwMWI1ODYu
LjM2MTU0MmVhNmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNh
c2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAK
QEAgLTE0MCw4ICsxNDAsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRDdWVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiB9CiAjZW5kaWYKIAotUHJvcGVydHlDYXNjYWRlOjpQ
cm9wZXJ0eUNhc2NhZGUoVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKQotICAgIDogbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorUHJvcGVydHlDYXNjYWRlOjpQ
cm9wZXJ0eUNhc2NhZGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgTWF0Y2hS
ZXN1bHQmIG1hdGNoUmVzdWx0LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUpCisgICAgOiBtX3N0eWxlUmVzb2x2ZXIoc3R5bGVSZXNvbHZlcikKKyAgICAs
IG1fbWF0Y2hSZXN1bHQobWF0Y2hSZXN1bHQpCisgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24p
CiAgICAgLCBtX3dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKQogewogfQpAQCAtMTc0LDE3ICsxNzYs
MTcgQEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnNldChDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSYgY3NzVmFsdWUsIHVuc2lnbmVkIGxpbmtNYXQKICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlD
dXN0b20pIHsKICAgICAgICAgbV9wcm9wZXJ0eUlzUHJlc2VudC5zZXQoaWQpOwogICAgICAgICBj
b25zdCBhdXRvJiBjdXN0b21WYWx1ZSA9IGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+
KGNzc1ZhbHVlKTsKLSAgICAgICAgYm9vbCBoYXNWYWx1ZSA9IGN1c3RvbVByb3BlcnRpZXMoKS5j
b250YWlucyhjdXN0b21WYWx1ZS5uYW1lKCkpOworICAgICAgICBib29sIGhhc1ZhbHVlID0gbV9j
dXN0b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKGN1c3RvbVZhbHVlLm5hbWUoKSk7CiAgICAgICAgIGlm
ICghaGFzVmFsdWUpIHsKICAgICAgICAgICAgIFByb3BlcnR5IHByb3BlcnR5OwogICAgICAgICAg
ICAgcHJvcGVydHkuaWQgPSBpZDsKICAgICAgICAgICAgIG1lbXNldChwcm9wZXJ0eS5jc3NWYWx1
ZSwgMCwgc2l6ZW9mKHByb3BlcnR5LmNzc1ZhbHVlKSk7CiAgICAgICAgICAgICBzZXRQcm9wZXJ0
eUludGVybmFsKHByb3BlcnR5LCBpZCwgY3NzVmFsdWUsIGxpbmtNYXRjaFR5cGUsIGNhc2NhZGVM
ZXZlbCwgc3R5bGVTY29wZU9yZGluYWwpOwotICAgICAgICAgICAgY3VzdG9tUHJvcGVydGllcygp
LnNldChjdXN0b21WYWx1ZS5uYW1lKCksIHByb3BlcnR5KTsKKyAgICAgICAgICAgIG1fY3VzdG9t
UHJvcGVydGllcy5zZXQoY3VzdG9tVmFsdWUubmFtZSgpLCBwcm9wZXJ0eSk7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eSBwcm9wZXJ0eSA9IGN1c3RvbVByb3BlcnRpZXMo
KS5nZXQoY3VzdG9tVmFsdWUubmFtZSgpKTsKKyAgICAgICAgICAgIFByb3BlcnR5IHByb3BlcnR5
ID0gY3VzdG9tUHJvcGVydHkoY3VzdG9tVmFsdWUubmFtZSgpKTsKICAgICAgICAgICAgIHNldFBy
b3BlcnR5SW50ZXJuYWwocHJvcGVydHksIGlkLCBjc3NWYWx1ZSwgbGlua01hdGNoVHlwZSwgY2Fz
Y2FkZUxldmVsLCBzdHlsZVNjb3BlT3JkaW5hbCk7Ci0gICAgICAgICAgICBjdXN0b21Qcm9wZXJ0
aWVzKCkuc2V0KGN1c3RvbVZhbHVlLm5hbWUoKSwgcHJvcGVydHkpOworICAgICAgICAgICAgbV9j
dXN0b21Qcm9wZXJ0aWVzLnNldChjdXN0b21WYWx1ZS5uYW1lKCksIHByb3BlcnR5KTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ5LDkgKzI1MSw5IEBAIHN0YXRpYyBh
dXRvJiBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNo
UmVzdWx0LCBDYXNjYWRlCiAgICAgcmV0dXJuIG1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9u
czsKIH0KIAotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFkZE5vcm1hbE1hdGNoZXMoY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGlu
aGVyaXRlZE9ubHkpCit2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YWRkTm9ybWFsTWF0Y2hlcyhDYXNj
YWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkpCiB7Ci0gICAgZm9yIChh
dXRvJiBtYXRjaGVkRGVjbGFyYXRpb25zIDogZGVjbGFyYXRpb25zRm9yQ2FzY2FkZUxldmVsKG1h
dGNoUmVzdWx0LCBjYXNjYWRlTGV2ZWwpKQorICAgIGZvciAoYXV0byYgbWF0Y2hlZERlY2xhcmF0
aW9ucyA6IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbChtX21hdGNoUmVzdWx0LCBjYXNjYWRl
TGV2ZWwpKQogICAgICAgICBhZGRNYXRjaChtYXRjaGVkRGVjbGFyYXRpb25zLCBjYXNjYWRlTGV2
ZWwsIGZhbHNlLCBpbmhlcml0ZWRPbmx5KTsKIH0KIApAQCAtMjY0LDcgKzI2Niw3IEBAIHN0YXRp
YyBib29sIGhhc0ltcG9ydGFudFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9w
ZXJ0aWVzKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFk
ZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBDYXNjYWRl
TGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkpCit2b2lkIFByb3BlcnR5Q2Fz
Y2FkZTo6YWRkSW1wb3J0YW50TWF0Y2hlcyhDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29s
IGluaGVyaXRlZE9ubHkpCiB7CiAgICAgc3RydWN0IEluZGV4QW5kT3JkaW5hbCB7CiAgICAgICAg
IHVuc2lnbmVkIGluZGV4OwpAQCAtMjczLDcgKzI3NSw3IEBAIHZvaWQgUHJvcGVydHlDYXNjYWRl
OjphZGRJbXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2Fz
Y2FkCiAgICAgVmVjdG9yPEluZGV4QW5kT3JkaW5hbD4gaW1wb3J0YW50TWF0Y2hlczsKICAgICBi
b29sIGhhc01hdGNoZXNGcm9tT3RoZXJTY29wZXMgPSBmYWxzZTsKIAotICAgIGF1dG8mIG1hdGNo
ZWREZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwobWF0Y2hSZXN1bHQs
IGNhc2NhZGVMZXZlbCk7CisgICAgYXV0byYgbWF0Y2hlZERlY2xhcmF0aW9ucyA9IGRlY2xhcmF0
aW9uc0ZvckNhc2NhZGVMZXZlbChtX21hdGNoUmVzdWx0LCBjYXNjYWRlTGV2ZWwpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoZWREZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0g
bWF0Y2hlZERlY2xhcmF0aW9uc1tpXTsKQEAgLTMwMiwxNCArMzA0LDE2NCBAQCB2b2lkIFByb3Bl
cnR5Q2FzY2FkZTo6YWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hS
ZXN1bHQsIENhc2NhZAogICAgICAgICBhZGRNYXRjaChtYXRjaGVkRGVjbGFyYXRpb25zW21hdGNo
LmluZGV4XSwgY2FzY2FkZUxldmVsLCB0cnVlLCBpbmhlcml0ZWRPbmx5KTsKIH0KIAotdm9pZCBQ
cm9wZXJ0eUNhc2NhZGU6OmFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKFN0eWxlUmVzb2x2ZXImIHJl
c29sdmVyLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYgYXBwbHlTdGF0ZSkKK3ZvaWQgUHJv
cGVydHlDYXNjYWRlOjphcHBseURlZmVycmVkUHJvcGVydGllcygpCiB7CiAgICAgZm9yIChhdXRv
JiBwcm9wZXJ0eSA6IG1fZGVmZXJyZWRQcm9wZXJ0aWVzKQotICAgICAgICBwcm9wZXJ0eS5hcHBs
eShyZXNvbHZlciwgYXBwbHlTdGF0ZSk7CisgICAgICAgIHByb3BlcnR5LmFwcGx5KCp0aGlzKTsK
IH0KIAotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5OjphcHBseShTdHlsZVJlc29sdmVy
JiByZXNvbHZlciwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIGFwcGx5U3RhdGUpCit2b2lk
IFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBpbnQg
bGFzdFByb3BlcnR5KQogeworICAgIGlmIChMSUtFTFkobV9jdXN0b21Qcm9wZXJ0aWVzLmlzRW1w
dHkoKSkpCisgICAgICAgIHJldHVybiBhcHBseVByb3BlcnRpZXNJbXBsPEN1c3RvbVByb3BlcnR5
Q3ljbGVUcmFja2luZzo6RGlzYWJsZWQ+KGZpcnN0UHJvcGVydHksIGxhc3RQcm9wZXJ0eSk7CisK
KyAgICByZXR1cm4gYXBwbHlQcm9wZXJ0aWVzSW1wbDxDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tp
bmc6OkVuYWJsZWQ+KGZpcnN0UHJvcGVydHksIGxhc3RQcm9wZXJ0eSk7Cit9CisKK3RlbXBsYXRl
PFByb3BlcnR5Q2FzY2FkZTo6Q3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nIHRyYWNrQ3ljbGVz
PgoraW5saW5lIHZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnRpZXNJbXBsKGludCBm
aXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5KQoreworICAgIGZvciAoaW50IGlkID0gZmly
c3RQcm9wZXJ0eTsgaWQgPD0gbGFzdFByb3BlcnR5OyArK2lkKSB7CisgICAgICAgIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGlkKTsKKyAgICAg
ICAgaWYgKCFoYXNQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBBU1NFUlQocHJvcGVydHlJRCAhPSBDU1NQcm9wZXJ0eUN1c3RvbSk7CisgICAgICAg
IGF1dG8mIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVzW3Byb3BlcnR5SURdOworCisgICAgICAgIGlm
ICh0cmFja0N5Y2xlcyA9PSBDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmc6OkRpc2FibGVkKSB7
CisgICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBjdXN0b20gcHJvcGVydGllcywg
dGhlbiB0aGVyZSBjYW4ndCBiZSBhbnkgY3ljbGVzLgorICAgICAgICAgICAgcHJvcGVydHkuYXBw
bHkoKnRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1f
YXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGllcy5nZXQocHJvcGVydHlJRCkpKSB7CisgICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIGluIGEgY3ljbGUgKGVnLiBzZXR0aW5nIGZvbnQgc2l6ZSB1
c2luZyByZWdpc3RlcmVkIGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZSBjb250YWluaW5nIGVtKS4KKyAg
ICAgICAgICAgICAgICAvLyBTbyB0aGlzIHZhbHVlIHNob3VsZCBiZSB1bnNldC4KKyAgICAgICAg
ICAgICAgICBtX2FwcGx5U3RhdGUuYXBwbGllZFByb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQpOwor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJvcGVydHkgaXMgaW4gYSBjeWNsZSwgYW5kIG9ubHkg
dGhlIHJvb3Qgb2YgdGhlIGNhbGwgc3RhY2sgd2lsbCBoYXZlIGZpcnN0UHJvcGVydHkgIT0gbGFz
dFByb3BlcnR5LgorICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdFByb3BlcnR5ID09IGxhc3RQ
cm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGllcy5zZXQocHJvcGVydHlJ
RCk7CisgICAgICAgICAgICBwcm9wZXJ0eS5hcHBseSgqdGhpcyk7CisgICAgICAgICAgICBtX2Fw
cGx5U3RhdGUuYXBwbGllZFByb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQpOworICAgICAgICAgICAg
bV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlELCBmYWxzZSk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseUN1c3Rv
bVByb3BlcnRpZXMoKQoreworICAgIGZvciAoYXV0byYgbmFtZSA6IG1fY3VzdG9tUHJvcGVydGll
cy5rZXlzKCkpCisgICAgICAgIGFwcGx5Q3VzdG9tUHJvcGVydHkobmFtZSk7Cit9CisKK3ZvaWQg
UHJvcGVydHlDYXNjYWRlOjphcHBseUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBpZiAobV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmNvbnRhaW5z
KG5hbWUpIHx8ICFtX2N1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8gcHJvcGVydHkgPSBjdXN0b21Qcm9wZXJ0eShuYW1lKTsKKyAgICBi
b29sIGluQ3ljbGUgPSBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20uY29u
dGFpbnMobmFtZSk7CisKKyAgICBmb3IgKGF1dG8gaW5kZXggOiB7IFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hEZWZhdWx0LCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluaywgU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaFZpc2l0ZWQgfSkgeworICAgICAgICBpZiAoIXByb3BlcnR5LmNzc1ZhbHVlW2luZGV4
XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoaW5kZXggIT0gU2VsZWN0b3JD
aGVja2VyOjpNYXRjaERlZmF1bHQgJiYgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc3R5bGUoKS0+
aW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2YWx1ZVRvQXBwbHkg
PSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVy
dHlWYWx1ZT4oKnByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkpOworCisgICAgICAgIGlmIChpbkN5
Y2xlKSB7CisgICAgICAgICAgICBtX2FwcGx5U3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMu
YWRkKG5hbWUpOyAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IHRyeSB0byBhcHBseSB0aGlzIHByb3Bl
cnR5IGFnYWluIHdoaWxlIHJlc29sdmluZyBpdC4KKyAgICAgICAgICAgIHZhbHVlVG9BcHBseSA9
IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NWYWx1ZUludmFs
aWQpOworICAgICAgICB9CisKKyAgICAgICAgbV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0
aWVzQ3VzdG9tLmFkZChuYW1lKTsKKworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWUgPSBtX3N0eWxlUmVz
b2x2ZXIucmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5Q3VzdG9tLCB2YWx1ZVRvQXBw
bHkuZ2V0KCksICp0aGlzKTsKKworICAgICAgICAgICAgaWYgKG1fYXBwbHlTdGF0ZS5hcHBsaWVk
Q3VzdG9tUHJvcGVydGllcy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm47
IC8vIFRoZXJlIHdhcyBhIGN5Y2xlIGFuZCB0aGUgdmFsdWUgd2FzIHJlc2V0LCBzbyBiYWlsLgor
CisgICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQorICAgICAgICAgICAgICAgIHBhcnNlZFZh
bHVlID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlV2l0aElEKG5hbWUsIENTU1ZhbHVl
VW5zZXQpOworCisgICAgICAgICAgICB2YWx1ZVRvQXBwbHkgPSBkb3duY2FzdDxDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlPigqcGFyc2VkVmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1f
YXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250YWlucyhuYW1lKSkgewor
ICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KSB7
CisgICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKHRydWUpOworICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5z
dGF0ZSgpLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRj
aExpbmspIHsKKyAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgbV9zdHlsZVJl
c29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoVmlzaXRlZCkgeworICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5zdGF0
ZSgpLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShmYWxzZSk7CisgICAgICAgICAgICAg
ICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5h
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5Q3VzdG9tLCB2YWx1ZVRvQXBwbHkucHRyKCksICp0aGlz
LCBpbmRleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVz
c1Byb3BlcnRpZXNDdXN0b20ucmVtb3ZlKG5hbWUpOworICAgIG1fYXBwbHlTdGF0ZS5hcHBsaWVk
Q3VzdG9tUHJvcGVydGllcy5hZGQobmFtZSk7CisKKyAgICBmb3IgKGF1dG8gaW5kZXggOiB7IFNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0LCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluaywg
U2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQgfSkgeworICAgICAgICBpZiAoIXByb3BlcnR5
LmNzc1ZhbHVlW2luZGV4XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoaW5k
ZXggIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQgJiYgbV9zdHlsZVJlc29sdmVyLnN0
YXRlKCkuc3R5bGUoKS0+aW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVl
PiB2YWx1ZVRvQXBwbHkgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUoZG93bmNhc3Q8
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkpOworCisg
ICAgICAgIGlmIChpbkN5Y2xlICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPENTU1Zhcmlh
YmxlUmVmZXJlbmNlVmFsdWU+Pih2YWx1ZVRvQXBwbHktPnZhbHVlKCkpKSB7CisgICAgICAgICAg
ICAvLyBSZXNvbHZlIHRoaXMgdmFsdWUgc28gdGhhdCB3ZSByZXNldCBpdHMgZGVwZW5kZW5jaWVz
LgorICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQ
cm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0FwcGx5LmdldCgpLCAqdGhpcyk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK1N0eWxlOjpQcm9wZXJ0eUNhc2NhZGUqIFByb3BlcnR5Q2FzY2FkZTo6cHJvcGVy
dHlDYXNjYWRlRm9yUm9sbGJhY2soQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCkKK3sKKyAgICBz
d2l0Y2ggKGNhc2NhZGVMZXZlbCkgeworICAgIGNhc2UgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0
aG9yOgorICAgICAgICBpZiAoIW1fYXV0aG9yUm9sbGJhY2tDYXNjYWRlKSB7CisgICAgICAgICAg
ICBtX2F1dGhvclJvbGxiYWNrQ2FzY2FkZSA9IG1ha2VVbmlxdWU8U3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZT4obV9zdHlsZVJlc29sdmVyLCBtX21hdGNoUmVzdWx0LCBtX2RpcmVjdGlvbiwgbV93cml0
aW5nTW9kZSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgc3BlY2lhbCByb2xsYmFjayBjYXNjYWRl
IGNvbnRhaW5zIFVBIHJ1bGVzIGFuZCB1c2VyIHJ1bGVzIGJ1dCBubyBhdXRob3IgcnVsZXMuCisg
ICAgICAgICAgICBtX2F1dGhvclJvbGxiYWNrQ2FzY2FkZS0+YWRkTm9ybWFsTWF0Y2hlcyhTdHls
ZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQsIGZhbHNlKTsKKyAgICAgICAgICAgIG1fYXV0aG9y
Um9sbGJhY2tDYXNjYWRlLT5hZGROb3JtYWxNYXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVz
ZXIsIGZhbHNlKTsKKyAgICAgICAgICAgIG1fYXV0aG9yUm9sbGJhY2tDYXNjYWRlLT5hZGRJbXBv
cnRhbnRNYXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXIsIGZhbHNlKTsKKyAgICAgICAg
ICAgIG1fYXV0aG9yUm9sbGJhY2tDYXNjYWRlLT5hZGRJbXBvcnRhbnRNYXRjaGVzKFN0eWxlOjpD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBtX2F1dGhvclJvbGxiYWNrQ2FzY2FkZS5nZXQoKTsKKworICAgIGNhc2UgU3R5bGU6OkNhc2Nh
ZGVMZXZlbDo6VXNlcjoKKyAgICAgICAgaWYgKCFtX3VzZXJSb2xsYmFja0Nhc2NhZGUpIHsKKyAg
ICAgICAgICAgIG1fdXNlclJvbGxiYWNrQ2FzY2FkZSA9IG1ha2VVbmlxdWU8U3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZT4obV9zdHlsZVJlc29sdmVyLCBtX21hdGNoUmVzdWx0LCBtX2RpcmVjdGlvbiwg
bV93cml0aW5nTW9kZSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgc3BlY2lhbCByb2xsYmFjayBj
YXNjYWRlIGNvbnRhaW5zIG9ubHkgVUEgcnVsZXMuCisgICAgICAgICAgICBtX3VzZXJSb2xsYmFj
a0Nhc2NhZGUtPmFkZE5vcm1hbE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50
LCBmYWxzZSk7CisgICAgICAgICAgICBtX3VzZXJSb2xsYmFja0Nhc2NhZGUtPmFkZEltcG9ydGFu
dE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBmYWxzZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG1fdXNlclJvbGxiYWNrQ2FzY2FkZS5nZXQoKTsKKworICAgIGNh
c2UgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3Zv
aWQgUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eTo6YXBwbHkoUHJvcGVydHlDYXNjYWRlJiBjYXNj
YWRlKQoreworICAgIGF1dG8mIHJlc29sdmVyID0gY2FzY2FkZS5zdHlsZVJlc29sdmVyKCk7CiAg
ICAgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlID0gcmVzb2x2ZXIuc3RhdGUoKTsKICAgICBz
dGF0ZS5zZXRDYXNjYWRlTGV2ZWwobGV2ZWwpOwogICAgIHN0YXRlLnNldFN0eWxlU2NvcGVPcmRp
bmFsKHN0eWxlU2NvcGVPcmRpbmFsKTsKQEAgLTMxNyw3ICs0NjksNyBAQCB2b2lkIFByb3BlcnR5
Q2FzY2FkZTo6UHJvcGVydHk6OmFwcGx5KFN0eWxlUmVzb2x2ZXImIHJlc29sdmVyLCBBcHBseUNh
c2NhZGVkUHJvcAogICAgIGlmIChjc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVs
dF0pIHsKICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUp
OwogICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNl
KTsKLSAgICAgICAgcmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eShpZCwgY3NzVmFsdWVbU2VsZWN0b3JD
aGVja2VyOjpNYXRjaERlZmF1bHRdLCBhcHBseVN0YXRlLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
RGVmYXVsdCk7CisgICAgICAgIHJlc29sdmVyLmFwcGx5UHJvcGVydHkoaWQsIGNzc1ZhbHVlW1Nl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0XSwgY2FzY2FkZSwgU2VsZWN0b3JDaGVja2VyOjpN
YXRjaERlZmF1bHQpOwogICAgIH0KIAogICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5pbnNpZGVMaW5r
KCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQpAQCAtMzI2LDEzICs0NzgsMTMgQEAgdm9pZCBQ
cm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5OjphcHBseShTdHlsZVJlc29sdmVyJiByZXNvbHZlciwg
QXBwbHlDYXNjYWRlZFByb3AKICAgICBpZiAoY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRj
aExpbmtdKSB7CiAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0
cnVlKTsKICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShm
YWxzZSk7Ci0gICAgICAgIHJlc29sdmVyLmFwcGx5UHJvcGVydHkoaWQsIGNzc1ZhbHVlW1NlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hMaW5rXSwgYXBwbHlTdGF0ZSwgU2VsZWN0b3JDaGVja2VyOjpNYXRj
aExpbmspOworICAgICAgICByZXNvbHZlci5hcHBseVByb3BlcnR5KGlkLCBjc3NWYWx1ZVtTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoTGlua10sIGNhc2NhZGUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hM
aW5rKTsKICAgICB9CiAKICAgICBpZiAoY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZp
c2l0ZWRdKSB7CiAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShm
YWxzZSk7CiAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
dHJ1ZSk7Ci0gICAgICAgIHJlc29sdmVyLmFwcGx5UHJvcGVydHkoaWQsIGNzc1ZhbHVlW1NlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkXSwgYXBwbHlTdGF0ZSwgU2VsZWN0b3JDaGVja2VyOjpN
YXRjaFZpc2l0ZWQpOworICAgICAgICByZXNvbHZlci5hcHBseVByb3BlcnR5KGlkLCBjc3NWYWx1
ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZF0sIGNhc2NhZGUsIFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hWaXNpdGVkKTsKICAgICB9CiAKICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9w
ZXJ0eUNhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5oCmlu
ZGV4IDRlOWQ2MmE5MmRiLi5iZWJjNjJmMzVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVy
dHlDYXNjYWRlLmgKQEAgLTMyLDcgKzMyLDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgU3R5bGVSZXNvbHZlcjsKLXN0cnVjdCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZTsKIAog
bmFtZXNwYWNlIFN0eWxlIHsKIApAQCAtNDUsNDQgKzQ0LDc0IEBAIGVudW0gY2xhc3MgQ2FzY2Fk
ZUxldmVsIDogdWludDhfdCB7CiBjbGFzcyBQcm9wZXJ0eUNhc2NhZGUgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFByb3BlcnR5Q2FzY2FkZShUZXh0RGlyZWN0
aW9uLCBXcml0aW5nTW9kZSk7CisgICAgUHJvcGVydHlDYXNjYWRlKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBNYXRjaFJlc3VsdCYsIFRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlKTsKICAgICB+UHJv
cGVydHlDYXNjYWRlKCk7CiAKKyAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKCkgeyBy
ZXR1cm4gbV9zdHlsZVJlc29sdmVyOyB9CisKICAgICBzdHJ1Y3QgUHJvcGVydHkgewotICAgICAg
ICB2b2lkIGFwcGx5KFN0eWxlUmVzb2x2ZXImLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYp
OworICAgICAgICB2b2lkIGFwcGx5KFByb3BlcnR5Q2FzY2FkZSYpOwogCiAgICAgICAgIENTU1By
b3BlcnR5SUQgaWQ7CiAgICAgICAgIENhc2NhZGVMZXZlbCBsZXZlbDsKICAgICAgICAgU2NvcGVP
cmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsOwotICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWVbM107
CisgICAgICAgIENTU1ZhbHVlKiBjc3NWYWx1ZVszXTsgLy8gVmFsdWVzIGZvciBsaW5rIG1hdGNo
IHN0YXRlcyBNYXRjaERlZmF1bHQsIE1hdGNoTGluayBhbmQgTWF0Y2hWaXNpdGVkCiAgICAgfTsK
IAogICAgIGJvb2wgaGFzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCkgY29uc3Q7CiAgICAgUHJvcGVy
dHkmIHByb3BlcnR5KENTU1Byb3BlcnR5SUQpOwogCi0gICAgdm9pZCBhZGROb3JtYWxNYXRjaGVz
KGNvbnN0IE1hdGNoUmVzdWx0JiwgQ2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkgPSBm
YWxzZSk7Ci0gICAgdm9pZCBhZGRJbXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0Jiwg
Q2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7Ci0KLSAgICB2b2lkIGFw
cGx5RGVmZXJyZWRQcm9wZXJ0aWVzKFN0eWxlUmVzb2x2ZXImLCBBcHBseUNhc2NhZGVkUHJvcGVy
dHlTdGF0ZSYpOwotCi0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBQcm9wZXJ0eT4mIGN1c3RvbVBy
b3BlcnRpZXMoKSB7IHJldHVybiBtX2N1c3RvbVByb3BlcnRpZXM7IH0KICAgICBib29sIGhhc0N1
c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIFByb3BlcnR5IGN1c3RvbVBy
b3BlcnR5KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCisgICAgdm9pZCBhZGROb3JtYWxNYXRjaGVz
KENhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOworICAgIHZvaWQgYWRk
SW1wb3J0YW50TWF0Y2hlcyhDYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNl
KTsKKworICAgIGJvb2wgaGFzQXBwbGllZFByb3BlcnR5KENTU1Byb3BlcnR5SUQpIGNvbnN0Owor
CisgICAgdm9pZCBhcHBseVByb3BlcnRpZXMoaW50IGZpcnN0UHJvcGVydHksIGludCBsYXN0UHJv
cGVydHkpOworICAgIHZvaWQgYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoKTsKKworICAgIHZvaWQg
YXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7CisgICAgdm9pZCBhcHBseUN1c3RvbVByb3BlcnR5KGNv
bnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICBQcm9wZXJ0eUNhc2NhZGUqIHByb3BlcnR5Q2FzY2Fk
ZUZvclJvbGxiYWNrKENhc2NhZGVMZXZlbCk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBhZGRNYXRj
aChjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIENhc2NhZGVMZXZlbCwgYm9vbCBpc0ltcG9ydGFu
dCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsKICAgICB2b2lkIHNldChDU1NQcm9wZXJ0eUlELCBDU1NW
YWx1ZSYsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU2NvcGVPcmRpbmFs
KTsKICAgICB2b2lkIHNldERlZmVycmVkKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgdW5zaWdu
ZWQgbGlua01hdGNoVHlwZSwgQ2FzY2FkZUxldmVsLCBTY29wZU9yZGluYWwpOwogICAgIHN0YXRp
YyB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoUHJvcGVydHkmLCBDU1NQcm9wZXJ0eUlELCBDU1NW
YWx1ZSYsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU2NvcGVPcmRpbmFs
KTsKIAorICAgIGVudW0gQ3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nIHsgRW5hYmxlZCA9IDAs
IERpc2FibGVkIH07CisgICAgdGVtcGxhdGU8Q3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nIHRy
YWNrQ3ljbGVzPgorICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzSW1wbChpbnQgZmlyc3RQcm9wZXJ0
eSwgaW50IGxhc3RQcm9wZXJ0eSk7CisKKyAgICBTdHlsZVJlc29sdmVyJiBtX3N0eWxlUmVzb2x2
ZXI7CisgICAgY29uc3QgTWF0Y2hSZXN1bHQmIG1fbWF0Y2hSZXN1bHQ7CisKKyAgICBUZXh0RGly
ZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIFdyaXRpbmdNb2RlIG1fd3JpdGluZ01vZGU7CisKICAg
ICBQcm9wZXJ0eSBtX3Byb3BlcnRpZXNbbnVtQ1NTUHJvcGVydGllcyArIDJdOwogICAgIHN0ZDo6
Yml0c2V0PG51bUNTU1Byb3BlcnRpZXMgKyAyPiBtX3Byb3BlcnR5SXNQcmVzZW50OwogCiAgICAg
VmVjdG9yPFByb3BlcnR5LCA4PiBtX2RlZmVycmVkUHJvcGVydGllczsKICAgICBIYXNoTWFwPEF0
b21TdHJpbmcsIFByb3BlcnR5PiBtX2N1c3RvbVByb3BlcnRpZXM7CiAKLSAgICBUZXh0RGlyZWN0
aW9uIG1fZGlyZWN0aW9uOwotICAgIFdyaXRpbmdNb2RlIG1fd3JpdGluZ01vZGU7CisgICAgLy8g
U3RhdGUgdG8gdXNlIHdoZW4gYXBwbHlpbmcgcHJvcGVydGllcywgdG8ga2VlcCB0cmFjayBvZiB3
aGljaCBjdXN0b20gYW5kIGhpZ2gtcHJpb3JpdHkKKyAgICAvLyBwcm9wZXJ0aWVzIGhhdmUgYmVl
biByZXNvbHZlZC4KKyAgICBzdHJ1Y3QgQXBwbHlTdGF0ZSB7CisgICAgICAgIEJpdG1hcDxudW1D
U1NQcm9wZXJ0aWVzPiBhcHBsaWVkUHJvcGVydGllcyA9IHsgfTsKKyAgICAgICAgSGFzaFNldDxT
dHJpbmc+IGFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzID0geyB9OworICAgICAgICBCaXRtYXA8bnVt
Q1NTUHJvcGVydGllcz4gaW5Qcm9ncmVzc1Byb3BlcnRpZXMgPSB7IH07CisgICAgICAgIEhhc2hT
ZXQ8U3RyaW5nPiBpblByb2dyZXNzUHJvcGVydGllc0N1c3RvbSA9IHsgfTsKKyAgICB9OworCisg
ICAgQXBwbHlTdGF0ZSBtX2FwcGx5U3RhdGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvcGVy
dHlDYXNjYWRlPiBtX2F1dGhvclJvbGxiYWNrQ2FzY2FkZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
UHJvcGVydHlDYXNjYWRlPiBtX3VzZXJSb2xsYmFja0Nhc2NhZGU7CiB9OwogCiBpbmxpbmUgYm9v
bCBQcm9wZXJ0eUNhc2NhZGU6Omhhc1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpIGNvbnN0CkBA
IC0xMDYsNSArMTM1LDEwIEBAIGlubGluZSBQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5IFByb3Bl
cnR5Q2FzY2FkZTo6Y3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuCiAgICAgcmV0dXJuIG1f
Y3VzdG9tUHJvcGVydGllcy5nZXQobmFtZSk7CiB9CiAKK2lubGluZSBib29sIFByb3BlcnR5Q2Fz
Y2FkZTo6aGFzQXBwbGllZFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9hcHBseVN0YXRlLmFwcGxpZWRQcm9wZXJ0aWVzLmdldChwcm9wZXJ0
eUlEKTsKK30KKwogfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381919</attachid>
            <date>2019-10-25 07:50:37 -0700</date>
            <delta_ts>2019-10-25 07:55:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>more-propertycascade-2.patch</filename>
            <type>text/plain</type>
            <size>57642</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MzgyZDIyN2E4MS4uZThhOTE4MmNmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxOS0xMC0yNSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBtb3JlIGNhc2NhZGUgcmVsYXRlZCBjb2RlIGZyb20gU3R5bGVSZXNv
bHZlciB0byBQcm9wZXJ0eUNhc2NhZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMzQwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gTW92ZSBhIGJ1bmNoIG9mIFN0eWxlUmVzb2x2ZXIgbWVtYmVyIGZ1
bmN0aW9ucyB0byBQcm9wZXJ0eUNhc2NhZGUuCisgICAgICAgIC0gTWFrZSBBcHBseUNhc2NhZGVk
UHJvcGVydHlTdGF0ZSBwYXJ0IG9mIHRoZSBQcm9wZXJ0eUNhc2NhZGUgaW50ZXJuYWwgc3RhdGUu
CisgICAgICAgIC0gUGFzcyBhcm91bmQgYSByZWZlcmVuY2UgdG8gdGhlIFByb3BlcnR5Q2FzY2Fk
ZSBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgc3RhdGUgb2JqZWN0CisgICAgICAgICAgVGhlIHN0YXRl
IGNvbnRhaW5lZCBQcm9wZXJ0eUNhc2NhZGUgbWVtYmVyIGFscmVhZHkgc28gdGhpcyBpcyBlcXVp
dmFsZW50IGJ1dCBzaW1wbGVyLgorCisgICAgICAgICogY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNl
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVZhcmlhYmxlRmFsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OnJlc29sdmVUb2tlblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWU6OnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMgY29uc3QpOgorICAgICAg
ICAqIGNzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmg6CisgICAgICAgICogY3NzL0VsZW1l
bnRSdWxlQ29sbGVjdG9yLmg6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FzY2FkZWRQcm9wZXJ0aWVzRm9yUm9sbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlDYXNjYWRl
ZEN1c3RvbVByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzSW1wbCk6IERlbGV0ZWQuCisK
KyAgICAgICAgVGhlc2UgYmVjb21lIFByb3BlcnR5Q2FzY2FkZSBtZW1iZXJzLgorCisgICAgICAg
ICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjphdXRob3JSb2xsYmFjayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6dXNlclJvbGxiYWNrIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRBdXRob3JSb2xsYmFjayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VXNl
clJvbGxiYWNrKTogRGVsZXRlZC4KKworICAgICAgICBSb2xsYmFja3MgYXJlIG5vdyBvd25lZCBi
eSBQcm9wZXJ0eUNhc2NhZGUuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZl
cmVuY2VzKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAqIHN0
eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OmFkZE5vcm1hbE1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZTo6YWRkSW1wb3J0YW50TWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseURlZmVycmVkUHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0aWVzSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseUN1c3RvbVBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBw
bHlDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjpwcm9wZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eTo6YXBwbHkpOgorICAgICAgICAqIHN0eWxlL1By
b3BlcnR5Q2FzY2FkZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZTo6c3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjpoYXNBcHBsaWVkUHJvcGVydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OlByb3BlcnR5Q2FzY2FkZTo6Y3VzdG9tUHJvcGVydGllcyk6IERlbGV0ZWQuCisKIDIwMTktMTAt
MjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEYXRhYmFzZUNv
bnRleHQgc2hvdWxkIG5vdCBwcmV2ZW50IGVudGVyaW5nIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcApp
bmRleCA5NGQ2M2EzYjU4OS4uZjg0YjhiNmU5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmgiCiAK
KyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIApAQCAtNDQsMjEgKzQ1LDIxIEBAIFN0cmluZyBD
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKICAgICByZXR1
cm4gbV9zdHJpbmdWYWx1ZTsKIH0KIAotc3RhdGljIGJvb2wgcmVzb2x2ZVRva2VuUmFuZ2UoQ1NT
UGFyc2VyVG9rZW5SYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYsIEFwcGx5Q2FzY2FkZWRQ
cm9wZXJ0eVN0YXRlJik7CitzdGF0aWMgYm9vbCByZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJU
b2tlblJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiwgU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSYpOwogCi1zdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVGYWxsYmFjayhDU1NQYXJzZXJUb2tl
blJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQsIEFwcGx5Q2FzY2Fk
ZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBib29sIHJlc29sdmVWYXJpYWJsZUZhbGxi
YWNrKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJl
c3VsdCwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKICAgICBpZiAocmFuZ2Uu
YXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IENvbW1hVG9rZW4pOwogICAgIHJhbmdlLmNvbnN1bWUoKTsKLSAgICByZXR1cm4g
cmVzb2x2ZVRva2VuUmFuZ2UocmFuZ2UsIHJlc3VsdCwgc3RhdGUpOworICAgIHJldHVybiByZXNv
bHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzdWx0LCBjYXNjYWRlKTsKIH0KIAotc3RhdGljIGJvb2wg
cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3Rv
cjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0
YXRlKQorc3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2Vu
UmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKLSAgICBhdXRvJiByZWdpc3RlcmVkUHJvcGVydGllcyA9
IHN0YXRlLnN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVBy
b3BlcnR5U2V0KCk7Ci0gICAgYXV0byYgc3R5bGUgPSAqc3RhdGUuc3R5bGVSZXNvbHZlci0+c3R5
bGUoKTsKKyAgICBhdXRvJiByZWdpc3RlcmVkUHJvcGVydGllcyA9IGNhc2NhZGUuc3R5bGVSZXNv
bHZlcigpLmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5U2V0KCk7Cisg
ICAgYXV0byYgc3R5bGUgPSAqY2FzY2FkZS5zdHlsZVJlc29sdmVyKCkuc3R5bGUoKTsKIAogICAg
IHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gSWRlbnRUb2tlbik7CkBAIC02NiwxMSArNjcsMTEgQEAgc3RhdGljIGJvb2wgcmVzb2x2
ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQ
YXJzZXIKICAgICBBU1NFUlQocmFuZ2UuYXRFbmQoKSB8fCAocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBDb21tYVRva2VuKSk7CiAKICAgICAvLyBBcHBseSB0aGlzIHZhcmlhYmxlIGZpcnN0LCBpbiBj
YXNlIGl0IGlzIHN0aWxsIHVucmVzb2x2ZWQKLSAgICBzdGF0ZS5zdHlsZVJlc29sdmVyLT5hcHBs
eUNhc2NhZGVkQ3VzdG9tUHJvcGVydHkodmFyaWFibGVOYW1lLCBzdGF0ZSk7CisgICAgY2FzY2Fk
ZS5hcHBseUN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CiAKICAgICAvLyBBcHBseSBmYWxs
YmFjayB0byBkZXRlY3QgY3ljbGVzCiAgICAgVmVjdG9yPENTU1BhcnNlclRva2VuPiBmYWxsYmFj
a1Jlc3VsdDsKLSAgICBib29sIGZhbGxiYWNrUmV0dXJuID0gcmVzb2x2ZVZhcmlhYmxlRmFsbGJh
Y2soQ1NTUGFyc2VyVG9rZW5SYW5nZShyYW5nZSksIGZhbGxiYWNrUmVzdWx0LCBzdGF0ZSk7Cisg
ICAgYm9vbCBmYWxsYmFja1JldHVybiA9IHJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKENTU1BhcnNl
clRva2VuUmFuZ2UocmFuZ2UpLCBmYWxsYmFja1Jlc3VsdCwgY2FzY2FkZSk7CiAKICAgICBhdXRv
KiBwcm9wZXJ0eSA9IHN0eWxlLmdldEN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CiAKQEAg
LTkyLDI0ICs5MywyNCBAQCBzdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoQ1NT
UGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlcgogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgYm9vbCByZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJUb2tlblJhbmdl
IHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQsIEFwcGx5Q2FzY2FkZWRQcm9w
ZXJ0eVN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBib29sIHJlc29sdmVUb2tlblJhbmdlKENTU1BhcnNl
clRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwog
ICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgewogICAgICAgICBpZiAocmFuZ2UucGVlaygpLmZ1
bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVZhciB8fCByYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09
IENTU1ZhbHVlRW52KQotICAgICAgICAgICAgc3VjY2VzcyAmPSByZXNvbHZlVmFyaWFibGVSZWZl
cmVuY2UocmFuZ2UuY29uc3VtZUJsb2NrKCksIHJlc3VsdCwgc3RhdGUpOworICAgICAgICAgICAg
c3VjY2VzcyAmPSByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UocmFuZ2UuY29uc3VtZUJsb2NrKCks
IHJlc3VsdCwgY2FzY2FkZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocmFuZ2UuY29uc3VtZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLVJl
ZlB0cjxDU1NWYXJpYWJsZURhdGE+IENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU6OnJlc29sdmVW
YXJpYWJsZVJlZmVyZW5jZXMoQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0YXRlKSBjb25z
dAorUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZTo6cmVz
b2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKSBj
b25zdAogewogICAgIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tlbnM7CiAgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSA9IG1fZGF0YS0+dG9rZW5SYW5nZSgpOwogCi0gICAg
aWYgKCFyZXNvbHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzb2x2ZWRUb2tlbnMsIHN0YXRlKSkKKyAg
ICBpZiAoIXJlc29sdmVUb2tlblJhbmdlKHJhbmdlLCByZXNvbHZlZFRva2VucywgY2FzY2FkZSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIENTU1ZhcmlhYmxlRGF0YTo6
Y3JlYXRlKHJlc29sdmVkVG9rZW5zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFi
bGVSZWZlcmVuY2VWYWx1ZS5oCmluZGV4IGQ3MGUzMjdjMTA2Li45YTEyMGMzNjc3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oCkBAIC0zOSw5
ICszOSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBBcHBseUNhc2NhZGVk
UHJvcGVydHlTdGF0ZTsKIGNsYXNzIENTU1BhcnNlclRva2VuUmFuZ2U7CiAKK25hbWVzcGFjZSBT
dHlsZSB7CitjbGFzcyBQcm9wZXJ0eUNhc2NhZGU7Cit9CisKIGNsYXNzIENTU1ZhcmlhYmxlUmVm
ZXJlbmNlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4gY3JlYXRlKGNvbnN0IENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQpAQCAtNTIsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBlcXVhbHMoY29u
c3QgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS5nZXQoKSA9PSBvdGhlci5tX2RhdGEuZ2V0KCk7IH0KICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4
dCgpIGNvbnN0OwogCi0gICAgUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gcmVzb2x2ZVZhcmlhYmxl
UmVmZXJlbmNlcyhBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpIGNvbnN0OworICAgIFJlZlB0
cjxDU1NWYXJpYWJsZURhdGE+IHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIENTU1ZhcmlhYmxlUmVmZXJlbmNl
VmFsdWUoUmVmPENTU1ZhcmlhYmxlRGF0YT4mJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuaAppbmRleCA1ZTUzNTMxOGJjMi4uZGJhOGU5NTMxMWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCkBAIC0yMiw2ICsyMiw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNs
dWRlICJSdWxlU2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCiAjaW5jbHVkZSAi
U3R5bGVTY29wZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTMyLDggKzMzLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudFJ1bGVTZXRzOwogY2xhc3MgTWF0Y2hSZXF1
ZXN0OwotY2xhc3MgUnVsZURhdGE7Ci1jbGFzcyBSdWxlU2V0OwogY2xhc3MgU2VsZWN0b3JGaWx0
ZXI7CiAKIGNsYXNzIFBzZXVkb1N0eWxlUmVxdWVzdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKaW5kZXggZmU2YjZkOThlN2UuLjNiNGRiYmQ2OTM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSAiUGFnZVJ1bGVD
b2xsZWN0b3IuaCIKICNpbmNsdWRlICJQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oIgogI2luY2x1
ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJRdWly
a3MuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZUNvbnN0YW50cy5oIgpAQCAtMzczLDI0ICszNzQsMjMgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxl
KgogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5j
ZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRv
IG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KLSAgICBTdHlsZTo6
UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgY2Fz
Y2FkZS5hZGROb3JtYWxNYXRjaGVzKHJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9y
KTsKKyAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIHJlc3VsdCwgZGly
ZWN0aW9uLCB3cml0aW5nTW9kZSk7CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxl
OjpDYXNjYWRlTGV2ZWw6OkF1dGhvcik7CiAKLSAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0
ZSBhcHBseVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZyZXN1bHQgfTsKLSAgICBhcHBseUNhc2Nh
ZGVkUHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHks
IGFwcGx5U3RhdGUpOworICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVy
dHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3Qg
ZGlydGllZCwgdXBkYXRlIGl0IG5vdy4KICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBOb3cg
cmVzb2x2ZSByZW1haW5pbmcgY3VzdG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkg
b3JkZXIKLSAgICBmb3IgKGF1dG8gaXQgPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdp
bigpOyBpdCAhPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAg
ICAgYXBwbHlDYXNjYWRlZEN1c3RvbVByb3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAg
IGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENT
U1Byb3BlcnR5LCBhcHBseVN0YXRlKTsKKyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGll
cygpOworCisgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3Bl
cnR5LCBsYXN0Q1NTUHJvcGVydHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQg
Ynkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIHVwZGF0ZSBpdCBhIHNlY29u
ZCB0aW1lLgogICAgIHVwZGF0ZUZvbnQoKTsKIAotICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFBy
b3BlcnRpZXMoKnRoaXMsIGFwcGx5U3RhdGUpOworICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFBy
b3BlcnRpZXMoKTsKIAogICAgIGFkanVzdFJlbmRlclN0eWxlKCpzdGF0ZS5zdHlsZSgpLCAqc3Rh
dGUucGFyZW50U3R5bGUoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAKQEAgLTU3OSwyMSArNTc5LDIw
IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQ
YWdlKGludCBwYWdlSW5kZXgpCiAgICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGU7CiAgICAgZXh0
cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCptX3N0YXRlLnN0eWxlKCksIHJlc3VsdCwgZGly
ZWN0aW9uLCB3cml0aW5nTW9kZSk7CiAKLSAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2Nh
ZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVz
KHJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yKTsKKyAgICBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIHJlc3VsdCwgZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7
CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OkF1dGhv
cik7CiAKLSAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBhcHBseVN0YXRlIHsgdGhpcywg
JmNhc2NhZGUsICZyZXN1bHQgfTsKLSAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhmaXJzdENT
U1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHksIGFwcGx5U3RhdGUpOworICAgIGNh
c2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQ
cm9wZXJ0eSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgdXBkYXRlIGl0IG5v
dy4KICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3Vz
dG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKLSAgICBmb3IgKGF1dG8g
aXQgPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdpbigpOyBpdCAhPSBjYXNjYWRlLmN1
c3RvbVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3Rv
bVByb3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0
aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5LCBhcHBseVN0YXRl
KTsKKyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOworCisgICAgY2FzY2FkZS5h
cHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkp
OwogCi0gICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygqdGhpcywgYXBwbHlTdGF0
ZSk7CisgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCiAgICAgLy8gTm93
IHJldHVybiB0aGUgc3R5bGUuCiAgICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CkBAIC0x
MzgyLDUyICsxMzgxLDQ4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIEZp
bmQgb3V0IGlmIHRoZXJlJ3MgYSAtd2Via2l0LWFwcGVhcmFuY2UgcHJvcGVydHkgaW4gZWZmZWN0
IGZyb20gdGhlIFVBIHNoZWV0LgogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJvcmRl
ciBhbmQgYmFja2dyb3VuZCBzdHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUo
KQogICAgICAgICAvLyBjYW4gbG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYgdGhp
cyBpcyBhIHN0eWxlZCBmb3JtIGNvbnRyb2wgb3Igbm90LgotICAgICAgICBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlIGNhc2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgICAgIGNhc2Nh
ZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNl
ckFnZW50LCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgICAgICBjYXNjYWRlLmFkZEltcG9ydGFu
dE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKLQotICAgICAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBh
cHBseVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZtYXRjaFJlc3VsdCB9OworICAgICAgICBTdHls
ZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24s
IHdyaXRpbmdNb2RlKTsKKyAgICAgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxlOjpD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgY2Fz
Y2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKIAotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhD
U1NQcm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRp
b24sIGFwcGx5U3RhdGUpOworICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQcm9w
ZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24pOwog
ICAgICAgICBhZGp1c3RTdHlsZUZvckludGVyQ2hhcmFjdGVyUnVieSgpOwogCiAjaWYgRU5BQkxF
KERBUktfTU9ERV9DU1MpCiAgICAgICAgIC8vIFN1cHBvcnRlZCBjb2xvciBzY2hlbWVzIGNhbiBh
ZmZlY3QgcmVzb2x2ZWQgY29sb3JzLCBzbyB3ZSBuZWVkIHRvIGFwcGx5IHRoYXQgcHJvcGVydHkg
YmVmb3JlIGFueSBjb2xvciBwcm9wZXJ0aWVzLgotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVy
dGllcyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBhcHBs
eVN0YXRlKTsKKyAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoQ1NTUHJvcGVydHlDb2xv
clNjaGVtZSwgQ1NTUHJvcGVydHlDb2xvclNjaGVtZSk7CiAjZW5kaWYKIAotICAgICAgICBhcHBs
eUNhc2NhZGVkUHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJv
cGVydHksIGFwcGx5U3RhdGUpOworICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJz
dENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgICAgIC8vIElm
IG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUgaXQgbm93LgogICAgICAgICB1cGRhdGVGb250
KCk7CiAKICAgICAgICAgLy8gTm93IHJlc29sdmUgcmVtYWluaW5nIGN1c3RvbSBwcm9wZXJ0aWVz
IGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCi0gICAgICAgIGZvciAoYXV0byBpdCA9IGNhc2Nh
ZGUuY3VzdG9tUHJvcGVydGllcygpLmJlZ2luKCk7IGl0ICE9IGNhc2NhZGUuY3VzdG9tUHJvcGVy
dGllcygpLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3RvbVByb3Bl
cnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVydGll
cyhmaXJzdExvd1ByaW9yaXR5UHJvcGVydHksIGxhc3RDU1NQcm9wZXJ0eSwgYXBwbHlTdGF0ZSk7
CisgICAgICAgIGNhc2NhZGUuYXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7CisKKyAgICAgICAgY2Fz
Y2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJv
cGVydHkpOwogCiAgICAgICAgIHN0YXRlLmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogICAg
IH0KIAotICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRp
bmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxl
OjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNj
YWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVz
ZXIsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1h
dGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJpdGVkT25s
eSk7Ci0gICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBTdHlsZTo6
Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgY2FzY2FkZS5h
ZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2Vy
LCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyht
YXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBhcHBseUluaGVyaXRl
ZE9ubHkpOwotCi0gICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRo
aXMsICZjYXNjYWRlLCAmbWF0Y2hSZXN1bHQgfTsKKyAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRl
IGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKKyAg
ICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50
LCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhTdHls
ZTo6Q2FzY2FkZUxldmVsOjpVc2VyLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUu
YWRkTm9ybWFsTWF0Y2hlcyhTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJp
dGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKFN0eWxlOjpDYXNjYWRl
TGV2ZWw6OkF1dGhvciwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZEltcG9y
dGFudE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlciwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKKyAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6
VXNlckFnZW50LCBhcHBseUluaGVyaXRlZE9ubHkpOwogCi0gICAgYXBwbHlDYXNjYWRlZFByb3Bl
cnRpZXMoQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24sIENTU1Byb3BlcnR5V2Via2l0UnVi
eVBvc2l0aW9uLCBhcHBseVN0YXRlKTsKKyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQ
cm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24p
OwogICAgIGFkanVzdFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KCk7CiAKICNpZiBFTkFCTEUo
REFSS19NT0RFX0NTUykKICAgICAvLyBTdXBwb3J0ZWQgY29sb3Igc2NoZW1lcyBjYW4gYWZmZWN0
IHJlc29sdmVkIGNvbG9ycywgc28gd2UgbmVlZCB0byBhcHBseSB0aGF0IHByb3BlcnR5IGJlZm9y
ZSBhbnkgY29sb3IgcHJvcGVydGllcy4KLSAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhDU1NQ
cm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBhcHBseVN0YXRlKTsK
KyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQ
cm9wZXJ0eUNvbG9yU2NoZW1lKTsKICNlbmRpZgogCi0gICAgYXBwbHlDYXNjYWRlZFByb3BlcnRp
ZXMoZmlyc3RDU1NQcm9wZXJ0eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5LCBhcHBseVN0YXRl
KTsKKyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGln
aFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgLy8gSWYgdGhlIGVmZmVjdGl2ZSB6b29tIHZhbHVl
IGNoYW5nZXMsIHdlIGNhbid0IHVzZSB0aGUgbWF0Y2hlZCBwcm9wZXJ0aWVzIGNhY2hlLiBTdGFy
dCBvdmVyLgogICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkKQEAgLTE0NDEs
MTQgKzE0MzYsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAgICAgcmV0dXJuIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQsIERvTm90VXNlTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZSk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3VzdG9t
IHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKLSAgICBmb3IgKGF1dG8gaXQg
PSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdpbigpOyBpdCAhPSBjYXNjYWRlLmN1c3Rv
bVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3RvbVBy
b3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVz
KGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5LCBhcHBseVN0YXRlKTsK
KyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOworCisgICAgY2FzY2FkZS5hcHBs
eVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkpOwog
CiAgICAgLy8gRmluYWxseSwgc29tZSBwcm9wZXJ0aWVzIG11c3QgYmUgYXBwbGllZCBpbiB0aGUg
b3JkZXIgdGhleSB3ZXJlIHBhcnNlZC4KICAgICAvLyBUaGVyZSBhcmUgc29tZSBDU1MgcHJvcGVy
dGllcyB0aGF0IGFmZmVjdCB0aGUgc2FtZSBSZW5kZXJTdHlsZSB2YWx1ZXMsCiAgICAgLy8gc28g
dG8gcHJlc2VydmUgYmVoYXZpb3IsIHdlIHF1ZXVlIHRoZW0gdXAgZHVyaW5nIGNhc2NhZGUgYW5k
IGZsdXNoIGhlcmUuCi0gICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygqdGhpcywg
YXBwbHlTdGF0ZSk7CisgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCiAg
ICAgQVNTRVJUKCFzdGF0ZS5mb250RGlydHkoKSk7CiAKQEAgLTE0NjksOSArMTQ2NCwxMCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSwgc3RkOgogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7Ci0g
ICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRoaXMsIG51bGxwdHIs
IG51bGxwdHIgfTsKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKKyAgICBTdHlsZTo6UHJv
cGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCB7IH0sIHsgfSk7CiAgICAg
aWYgKHZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KGlkLCB2YWx1ZSwgYXBwbHlTdGF0ZSk7
CisgICAgICAgIGFwcGx5UHJvcGVydHkoaWQsIHZhbHVlLCBjYXNjYWRlKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKQEAgLTE1
MjAsNjQgKzE1MTYsMTcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXNGb3JM
ZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBpczxTVkdFbGVtZW50PihtX3N0YXRlLmVsZW1lbnQo
KSkgJiYgIShpczxTVkdTVkdFbGVtZW50PigqbV9zdGF0ZS5lbGVtZW50KCkpICYmIG1fc3RhdGUu
ZWxlbWVudCgpLT5wYXJlbnROb2RlKCkpOwogfQogCi1TdHlsZTo6UHJvcGVydHlDYXNjYWRlKiBT
dHlsZVJlc29sdmVyOjpjYXNjYWRlZFByb3BlcnRpZXNGb3JSb2xsYmFjayhjb25zdCBNYXRjaFJl
c3VsdCYgbWF0Y2hSZXN1bHQpCi17Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAg
V3JpdGluZ01vZGUgd3JpdGluZ01vZGU7Ci0gICAgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdN
b2RlKCpzdGF0ZSgpLnN0eWxlKCksIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2Rl
KTsKLQotICAgIHN3aXRjaCAoc3RhdGUoKS5jYXNjYWRlTGV2ZWwoKSkgewotICAgIGNhc2UgU3R5
bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yOiB7Ci0gICAgICAgIGF1dG8qIGF1dGhvclJvbGxiYWNr
ID0gc3RhdGUoKS5hdXRob3JSb2xsYmFjaygpOwotICAgICAgICBpZiAoYXV0aG9yUm9sbGJhY2sp
Ci0gICAgICAgICAgICByZXR1cm4gYXV0aG9yUm9sbGJhY2s7Ci0KLSAgICAgICAgYXV0byBuZXdB
dXRob3JSb2xsYmFjayA9IG1ha2VVbmlxdWU8U3R5bGU6OlByb3BlcnR5Q2FzY2FkZT4oZGlyZWN0
aW9uLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgLy8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNh
c2NhZGUgY29udGFpbnMgVUEgcnVsZXMgYW5kIHVzZXIgcnVsZXMgYnV0IG5vIGF1dGhvciBydWxl
cy4KLSAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1
bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwotICAgICAgICBuZXdB
dXRob3JSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2Nh
ZGVMZXZlbDo6VXNlciwgZmFsc2UpOwotICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1w
b3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlciwgZmFs
c2UpOwotICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRj
aFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBmYWxzZSk7Ci0KLSAgICAg
ICAgc3RhdGUoKS5zZXRBdXRob3JSb2xsYmFjayhuZXdBdXRob3JSb2xsYmFjayk7Ci0gICAgICAg
IHJldHVybiBzdGF0ZSgpLmF1dGhvclJvbGxiYWNrKCk7Ci0gICAgfQotCi0gICAgY2FzZSBTdHls
ZTo6Q2FzY2FkZUxldmVsOjpVc2VyOiB7Ci0gICAgICAgIGF1dG8qIHVzZXJSb2xsYmFjayA9IHN0
YXRlKCkudXNlclJvbGxiYWNrKCk7Ci0gICAgICAgIGlmICh1c2VyUm9sbGJhY2spCi0gICAgICAg
ICAgICByZXR1cm4gdXNlclJvbGxiYWNrOwotCi0gICAgICAgIGF1dG8gbmV3VXNlclJvbGxiYWNr
ID0gbWFrZVVuaXF1ZTxTdHlsZTo6UHJvcGVydHlDYXNjYWRlPihkaXJlY3Rpb24sIHdyaXRpbmdN
b2RlKTsKLQotICAgICAgICAvLyBUaGlzIHNwZWNpYWwgcm9sbGJhY2sgY2FzY2FkZSBjb250YWlu
cyBvbmx5IFVBIHJ1bGVzLgotICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNo
ZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwot
ICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQs
IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwotCi0gICAgICAgIHN0YXRl
KCkuc2V0VXNlclJvbGxiYWNrKG5ld1VzZXJSb2xsYmFjayk7Ci0gICAgICAgIHJldHVybiBzdGF0
ZSgpLnVzZXJSb2xsYmFjaygpOwotICAgIH0KLQotICAgIGNhc2UgU3R5bGU6OkNhc2NhZGVMZXZl
bDo6VXNlckFnZW50OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIEFwcGx5Q2FzY2Fk
ZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1h
c2sgbGlua01hdGNoTWFzaykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIGNh
c2NhZGUsIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayBsaW5rTWF0Y2hNYXNrKQogewot
ICAgIGF1dG8qIG1hdGNoUmVzdWx0ID0gYXBwbHlTdGF0ZS5tYXRjaFJlc3VsdDsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFpc1Nob3J0aGFuZENTU1Byb3BlcnR5KGlkKSwgIlNob3J0aGFuZCBw
cm9wZXJ0eSBpZCA9ICVkIHdhc24ndCBleHBhbmRlZCBhdCBwYXJzaW5nIHRpbWUiLCBpZCk7CiAK
ICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZVRvQXBwbHkgPSB2YWx1ZTsKICAgICBpZiAodmFsdWUtPmhhc1ZhcmlhYmxlUmVmZXJlbmNlcygp
KSB7Ci0gICAgICAgIHZhbHVlVG9BcHBseSA9IHJlc29sdmVkVmFyaWFibGVWYWx1ZShpZCwgKnZh
bHVlLCBhcHBseVN0YXRlKTsKLSAgICAgICAgLy8gSWYgYXBwbGllZFByb3BlcnRpZXMgYWxyZWFk
eSBoYXMgdGhpcyBpZCwgdGhlbiB3ZSBkZXRlY3RlZCBhIGN5Y2xlLCBhbmQgdGhpcyB2YWx1ZSBz
aG91bGQgYmUgdW5zZXQuCi0gICAgICAgIGlmICghdmFsdWVUb0FwcGx5IHx8IGFwcGx5U3RhdGUu
YXBwbGllZFByb3BlcnRpZXMuZ2V0KGlkKSkgeworICAgICAgICB2YWx1ZVRvQXBwbHkgPSByZXNv
bHZlZFZhcmlhYmxlVmFsdWUoaWQsICp2YWx1ZSwgY2FzY2FkZSk7CisgICAgICAgIC8vIElmIHRo
ZSBjYXNjYWRlIGhhcyBhbHJlYWR5IGFwcGxpZWQgdGhpcyBpZCwgdGhlbiB3ZSBkZXRlY3RlZCBh
IGN5Y2xlLCBhbmQgdGhpcyB2YWx1ZSBzaG91bGQgYmUgdW5zZXQuCisgICAgICAgIGlmICghdmFs
dWVUb0FwcGx5IHx8IGNhc2NhZGUuaGFzQXBwbGllZFByb3BlcnR5KGlkKSkgewogICAgICAgICAg
ICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKICAgICAgICAgICAg
ICAgICB2YWx1ZVRvQXBwbHkgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUluaGVy
aXRlZFZhbHVlKCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNTg4LDcgKzE1MzcsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlLCBBcHBseUNhc2NhZAogICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2Fy
ZVByb3BlcnR5KGlkKSkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVy
dHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSwgc3RhdGUuc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChu
ZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lkLCB2YWx1ZVRv
QXBwbHkuZ2V0KCksIGFwcGx5U3RhdGUsIGxpbmtNYXRjaE1hc2spOworICAgICAgICByZXR1cm4g
YXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWVUb0FwcGx5LmdldCgpLCBjYXNjYWRlLCBsaW5rTWF0
Y2hNYXNrKTsKICAgICB9CiAKICAgICBDU1NWYWx1ZSogdmFsdWVUb0NoZWNrRm9ySW5oZXJpdElu
aXRpYWwgPSB2YWx1ZVRvQXBwbHkuZ2V0KCk7CkBAIC0xNjEzLDEyICsxNTYyLDEzIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUsIEFwcGx5Q2FzY2FkCiAgICAgYm9vbCBpc1JldmVydCA9IHZhbHVlVG9DaGVja0Zvcklu
aGVyaXRJbml0aWFsLT5pc1JldmVydFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09
IENTU1ZhbHVlUmV2ZXJ0OwogCiAgICAgaWYgKGlzUmV2ZXJ0KSB7Ci0gICAgICAgIGlmIChzdGF0
ZS5jYXNjYWRlTGV2ZWwoKSA9PSBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQgfHwgIW1h
dGNoUmVzdWx0KQorICAgICAgICBpZiAoc3RhdGUuY2FzY2FkZUxldmVsKCkgPT0gU3R5bGU6OkNh
c2NhZGVMZXZlbDo6VXNlckFnZW50KQogICAgICAgICAgICAgaXNVbnNldCA9IHRydWU7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGNvcnJlY3Qgcm9sbGJhY2sgb2Jq
ZWN0IGZyb20gdGhlIHN0YXRlLCBidWlsZGluZyBpdCBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAg
ICAvLyBUaGlzIHJlcXVpcmVzIGhhdmluZyB0aGUgb3JpZ2luYWwgTWF0Y2hSZXN1bHQgYXZhaWxh
YmxlLgotICAgICAgICAgICAgYXV0byogcm9sbGJhY2sgPSBjYXNjYWRlZFByb3BlcnRpZXNGb3JS
b2xsYmFjaygqbWF0Y2hSZXN1bHQpOworCisgICAgICAgICAgICBhdXRvKiByb2xsYmFjayA9IGNh
c2NhZGUucHJvcGVydHlDYXNjYWRlRm9yUm9sbGJhY2soc3RhdGUuY2FzY2FkZUxldmVsKCkpOwog
ICAgICAgICAgICAgQVNTRVJUKHJvbGxiYWNrKTsKIAogICAgICAgICAgICAgLy8gV2l0aCB0aGUg
Y2FzY2FkZSBidWlsdCwgd2UgbmVlZCB0byBvYnRhaW4gdGhlIHByb3BlcnR5IGFuZCBhcHBseSBp
dC4gSWYgdGhlIHByb3BlcnR5IGlzCkBAIC0xNjI4LDEzICsxNTc4LDEzIEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUs
IEFwcGx5Q2FzY2FkCiAgICAgICAgICAgICAgICAgaWYgKGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJl
ZCAmJiBjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQtPmluaGVyaXRzICYmIHJvbGxiYWNrLT5oYXND
dXN0b21Qcm9wZXJ0eShjdXN0b21Qcm9wZXJ0eVZhbHVlLT5uYW1lKCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gcHJvcGVydHkgPSByb2xsYmFjay0+Y3VzdG9tUHJvcGVydHkoY3VzdG9t
UHJvcGVydHlWYWx1ZS0+bmFtZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5
LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdKQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShwcm9wZXJ0eS5pZCwgcHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10sIGFw
cGx5U3RhdGUsIGxpbmtNYXRjaE1hc2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShwcm9wZXJ0eS5pZCwgcHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10sIGNh
c2NhZGUsIGxpbmtNYXRjaE1hc2spOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xsYmFjay0+aGFzUHJvcGVy
dHkoaWQpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcHJvcGVydHkgPSByb2xsYmFjay0+cHJv
cGVydHkoaWQpOwogICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0
Y2hNYXNrXSkKLSAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwg
cHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10sIGFwcGx5U3RhdGUsIGxpbmtNYXRjaE1h
c2spOworICAgICAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkLCBwcm9w
ZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0Y2hNYXNrXSwgY2FzY2FkZSwgbGlua01hdGNoTWFzayk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0xNjc2LDEwICsxNjI2
LDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUsIEFwcGx5Q2FzY2FkCiAgICAgU3R5bGVCdWlsZGVyOjphcHBseVBy
b3BlcnR5KGlkLCAqdGhpcywgKnZhbHVlVG9BcHBseSwgaXNJbml0aWFsLCBpc0luaGVyaXQsIGN1
c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCk7CiB9CiAKLVJlZlB0cjxDU1NWYWx1ZT4gU3R5bGVSZXNv
bHZlcjo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkgY29uc3QK
K1JlZlB0cjxDU1NWYWx1ZT4gU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGUmIGNhc2NhZGUpIGNvbnN0CiB7CiAgICAgQ1NTUGFyc2VyIHBhcnNlcihkb2N1bWVu
dCgpKTsKLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2Vz
KHByb3BJRCwgdmFsdWUsIHN0YXRlKTsKKyAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWVXaXRo
VmFyaWFibGVSZWZlcmVuY2VzKHByb3BJRCwgdmFsdWUsIGNhc2NhZGUpOwogfQogCiBSZWZQdHI8
U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NWYWx1ZSYgdmFsdWUpCkBA
IC0yMDMwLDExNCArMTk4MCw0IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3Bl
cmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmlsdGVyT3BlcmF0CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlDYXNjYWRlZEN1c3RvbVByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgbmFtZSwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0YXRl
KQotewotICAgIGlmIChzdGF0ZS5hcHBsaWVkQ3VzdG9tUHJvcGVydGllcy5jb250YWlucyhuYW1l
KSB8fCAhc3RhdGUuY2FzY2FkZS0+Y3VzdG9tUHJvcGVydGllcygpLmNvbnRhaW5zKG5hbWUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByb3BlcnR5ID0gc3RhdGUuY2FzY2FkZS0+Y3Vz
dG9tUHJvcGVydGllcygpLmdldChuYW1lKTsKLSAgICBib29sIGluQ3ljbGUgPSBzdGF0ZS5pblBy
b2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250YWlucyhuYW1lKTsKLQotICAgIGZvciAoYXV0byBp
bmRleCA6IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7Ci0gICAgICAgIGlm
ICghcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChpbmRleCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiB0aGlzLT5z
dGF0ZSgpLnN0eWxlKCktPmluc2lkZUxpbmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1
ZT4gdmFsdWVUb0FwcGx5ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGRvd25jYXN0
PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KCpwcm9wZXJ0eS5jc3NWYWx1ZVtpbmRleF0pKTsKLQot
ICAgICAgICBpZiAoaW5DeWNsZSkgewotICAgICAgICAgICAgc3RhdGUuYXBwbGllZEN1c3RvbVBy
b3BlcnRpZXMuYWRkKG5hbWUpOyAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IHRyeSB0byBhcHBseSB0
aGlzIHByb3BlcnR5IGFnYWluIHdoaWxlIHJlc29sdmluZyBpdC4KLSAgICAgICAgICAgIHZhbHVl
VG9BcHBseSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NW
YWx1ZUludmFsaWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGUuaW5Qcm9ncmVzc1Byb3Bl
cnRpZXNDdXN0b20uYWRkKG5hbWUpOwotCi0gICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZjxDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlPj4odmFsdWVUb0FwcGx5LT52YWx1ZSgp
KSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZSA9IHJlc29sdmVk
VmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0FwcGx5LmdldCgpLCBzdGF0
ZSk7Ci0KLSAgICAgICAgICAgIGlmIChzdGF0ZS5hcHBsaWVkQ3VzdG9tUHJvcGVydGllcy5jb250
YWlucyhuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm47IC8vIFRoZXJlIHdhcyBhIGN5Y2xl
IGFuZCB0aGUgdmFsdWUgd2FzIHJlc2V0LCBzbyBiYWlsLgotCi0gICAgICAgICAgICBpZiAoIXBh
cnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTQ3VzdG9tUHJvcGVy
dHlWYWx1ZTo6Y3JlYXRlV2l0aElEKG5hbWUsIENTU1ZhbHVlVW5zZXQpOwotCi0gICAgICAgICAg
ICB2YWx1ZVRvQXBwbHkgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqcGFyc2Vk
VmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0
aWVzQ3VzdG9tLmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLT5zdGF0
ZSgpLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICAgICAgICAgICAg
ICB0aGlzLT5zdGF0ZSgpLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2Up
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaExpbmspIHsKLSAgICAgICAgICAgICAgICB0aGlzLT5zdGF0ZSgpLnNldEFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICAgICAgICAgICAgICB0aGlzLT5zdGF0
ZSgpLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZp
c2l0ZWQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLT5zdGF0ZSgpLnNldEFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy0+c3RhdGUoKS5zZXRB
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKHRydWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0FwcGx5LnB0
cigpLCBzdGF0ZSwgaW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGUuaW5Qcm9n
cmVzc1Byb3BlcnRpZXNDdXN0b20ucmVtb3ZlKG5hbWUpOwotICAgIHN0YXRlLmFwcGxpZWRDdXN0
b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsKLQotICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0
b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7Ci0gICAgICAgIGlmICghcHJvcGVydHkuY3Nz
VmFsdWVbaW5kZXhdKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpbmRleCAh
PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiB0aGlzLT5zdGF0ZSgpLnN0eWxlKCkt
Pmluc2lkZUxpbmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWVUb0FwcGx5
ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGRvd25jYXN0PENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU+KCpwcm9wZXJ0eS5jc3NWYWx1ZVtpbmRleF0pKTsKLQotICAgICAgICBpZiAoaW5D
eWNsZSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxDU1NWYXJpYWJsZVJlZmVyZW5jZVZh
bHVlPj4odmFsdWVUb0FwcGx5LT52YWx1ZSgpKSkgewotICAgICAgICAgICAgLy8gUmVzb2x2ZSB0
aGlzIHZhbHVlIHNvIHRoYXQgd2UgcmVzZXQgaXRzIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAg
IHJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0FwcGx5Lmdl
dCgpLCBzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlDYXNjYWRlZFByb3BlcnRpZXMoaW50IGZpcnN0UHJvcGVydHksIGludCBsYXN0UHJvcGVy
dHksIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkKLXsKLSAgICBpZiAoTElLRUxZ
KHN0YXRlLmNhc2NhZGUtPmN1c3RvbVByb3BlcnRpZXMoKS5pc0VtcHR5KCkpKQotICAgICAgICBy
ZXR1cm4gYXBwbHlDYXNjYWRlZFByb3BlcnRpZXNJbXBsPEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFj
a2luZzo6RGlzYWJsZWQ+KGZpcnN0UHJvcGVydHksIGxhc3RQcm9wZXJ0eSwgc3RhdGUpOwotICAg
IHJldHVybiBhcHBseUNhc2NhZGVkUHJvcGVydGllc0ltcGw8Q3VzdG9tUHJvcGVydHlDeWNsZVRy
YWNraW5nOjpFbmFibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHksIHN0YXRlKTsKLX0K
LQotdGVtcGxhdGU8U3R5bGVSZXNvbHZlcjo6Q3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nIFRy
YWNrQ3ljbGVzPgotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlDYXNjYWRlZFByb3Bl
cnRpZXNJbXBsKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5LCBBcHBseUNhc2Nh
ZGVkUHJvcGVydHlTdGF0ZSYgc3RhdGUpCi17Ci0gICAgZm9yIChpbnQgaWQgPSBmaXJzdFByb3Bl
cnR5OyBpZCA8PSBsYXN0UHJvcGVydHk7ICsraWQpIHsKLSAgICAgICAgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oaWQpOwotICAgICAgICBpZiAo
IXN0YXRlLmNhc2NhZGUtPmhhc1Byb3BlcnR5KHByb3BlcnR5SUQpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIEFTU0VSVChwcm9wZXJ0eUlEICE9IENTU1Byb3BlcnR5Q3VzdG9tKTsK
LSAgICAgICAgYXV0byYgcHJvcGVydHkgPSBzdGF0ZS5jYXNjYWRlLT5wcm9wZXJ0eShwcm9wZXJ0
eUlEKTsKLQotICAgICAgICBpZiAoVHJhY2tDeWNsZXMgPT0gQ3VzdG9tUHJvcGVydHlDeWNsZVRy
YWNraW5nOjpEaXNhYmxlZCkgewotICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkg
Y3VzdG9tIHByb3BlcnRpZXMsIHRoZW4gdGhlcmUgY2FuJ3QgYmUgYW55IGN5Y2xlcy4KLSAgICAg
ICAgICAgIHByb3BlcnR5LmFwcGx5KCp0aGlzLCBzdGF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXMuZ2V0KHBy
b3BlcnR5SUQpKSkgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBhIGN5Y2xlIChlZy4g
c2V0dGluZyBmb250IHNpemUgdXNpbmcgcmVnaXN0ZXJlZCBjdXN0b20gcHJvcGVydHkgdmFsdWUg
Y29udGFpbmluZyBlbSkuCi0gICAgICAgICAgICAgICAgLy8gU28gdGhpcyB2YWx1ZSBzaG91bGQg
YmUgdW5zZXQuCi0gICAgICAgICAgICAgICAgc3RhdGUuYXBwbGllZFByb3BlcnRpZXMuc2V0KHBy
b3BlcnR5SUQpOwotICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJvcGVydHkgaXMgaW4gYSBjeWNs
ZSwgYW5kIG9ubHkgdGhlIHJvb3Qgb2YgdGhlIGNhbGwgc3RhY2sgd2lsbCBoYXZlIGZpcnN0UHJv
cGVydHkgIT0gbGFzdFByb3BlcnR5LgotICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdFByb3Bl
cnR5ID09IGxhc3RQcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzLnNldChwcm9w
ZXJ0eUlEKTsKLSAgICAgICAgICAgIHByb3BlcnR5LmFwcGx5KCp0aGlzLCBzdGF0ZSk7Ci0gICAg
ICAgICAgICBzdGF0ZS5hcHBsaWVkUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7Ci0gICAgICAg
ICAgICBzdGF0ZS5pblByb2dyZXNzUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCwgZmFsc2UpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaAppbmRleCBmZGM1ZmIzZDgwYy4uYzA3YzhlZjhiZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMjAxLDkgKzIwMSw2IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmls
dGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CiAKLSAgICB2b2lkIGFwcGx5Q2FzY2FkZWRQ
cm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5LCBBcHBseUNhc2Nh
ZGVkUHJvcGVydHlTdGF0ZSYpOwotICAgIHZvaWQgYXBwbHlDYXNjYWRlZEN1c3RvbVByb3BlcnR5
KGNvbnN0IFN0cmluZyYgbmFtZSwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmKTsKLQogcHJp
dmF0ZToKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6
ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMg
Y2hhbmdlZC4gLWR3aAogICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRl
clN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKQEAgLTIxNCwyMiArMjEx
LDEyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxl
JiwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50Qm94U3R5bGUsIGNvbnN0IEVsZW1lbnQqKTsKICAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxl
Rm9yU2l0ZVNwZWNpZmljUXVpcmtzKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCYpOwotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRQb3NpdGlvbj4gYWRqdXN0TmFtZWRHcmlkSXRlbVBvc2l0
aW9uKGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmLCBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYsIGNv
bnN0IEdyaWRQb3NpdGlvbiYsIEdyaWRQb3NpdGlvblNpZGUpIGNvbnN0OwogICAgIAogICAgIHZv
aWQgYWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKTsKICAgICAKLSAgICBib29sIGZh
c3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwotCiAgICAgZW51bSBTaG91
bGRVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hlIHsgRG9Ob3RVc2VNYXRjaGVkUHJvcGVydGllc0Nh
Y2hlID0gMCwgVXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSB9OwogICAgIHZvaWQgYXBwbHlNYXRj
aGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGNvbnN0IEVsZW1lbnQmLCBTaG91bGRV
c2VNYXRjaGVkUHJvcGVydGllc0NhY2hlID0gVXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk7CiAK
LSAgICBlbnVtIEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB7IEVuYWJsZWQgPSAwLCBEaXNh
YmxlZCB9OwotICAgIHRlbXBsYXRlPEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZz4KLSAgICBp
bmxpbmUgdm9pZCBhcHBseUNhc2NhZGVkUHJvcGVydGllc0ltcGwoaW50IGZpcnN0UHJvcGVydHks
IGludCBsYXN0UHJvcGVydHksIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7Ci0KLSAgICB2
b2lkIGNhc2NhZGVNYXRjaGVzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBNYXRjaFJl
c3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29s
IGluaGVyaXRlZE9ubHkpOwotCiAgICAgRG9jdW1lbnRSdWxlU2V0cyBtX3J1bGVTZXRzOwogCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwgUmVmUHRyPFN0eWxlUnVsZUtleWZy
YW1lcz4+IEtleWZyYW1lc1J1bGVNYXA7CkBAIC0yOTEsMTIgKzI3OCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgU3R5bGU6OlNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGVTY29wZU9yZGluYWw7IH0KICAgICAgICAgdm9pZCBzZXRTdHlsZVNjb3BlT3Jk
aW5hbChTdHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsKSB7IG1fc3R5bGVTY29w
ZU9yZGluYWwgPSBzdHlsZVNjb3BlT3JkaW5hbDsgfQogCi0gICAgICAgIFN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGUqIGF1dGhvclJvbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9hdXRob3JSb2xsYmFj
ay5nZXQoKTsgfQotICAgICAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlKiB1c2VyUm9sbGJhY2so
KSBjb25zdCB7IHJldHVybiBtX3VzZXJSb2xsYmFjay5nZXQoKTsgfQotICAgICAgICAKLSAgICAg
ICAgdm9pZCBzZXRBdXRob3JSb2xsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8U3R5bGU6OlByb3BlcnR5
Q2FzY2FkZT4mIHJvbGxiYWNrKSB7IG1fYXV0aG9yUm9sbGJhY2sgPSBXVEZNb3ZlKHJvbGxiYWNr
KTsgfQotICAgICAgICB2b2lkIHNldFVzZXJSb2xsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8U3R5bGU6
OlByb3BlcnR5Q2FzY2FkZT4mIHJvbGxiYWNrKSB7IG1fdXNlclJvbGxiYWNrID0gV1RGTW92ZShy
b2xsYmFjayk7IH0KLQogICAgICAgICBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yRmlsdGVyOyB9CiAgICAgICAgIAogICAgIHBy
aXZhdGU6CkBAIC0zMDcsOCArMjg4LDYgQEAgcHVibGljOgogICAgICAgICBjb25zdCBSZW5kZXJT
dHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBtX293bmVkUGFyZW50U3R5bGU7CiAgICAgICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07Ci0gICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxTdHlsZTo6UHJvcGVydHlDYXNjYWRlPiBtX2F1dGhvclJvbGxiYWNrOwotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3R5bGU6OlByb3BlcnR5Q2FzY2FkZT4gbV91c2VyUm9sbGJhY2s7CiAK
ICAgICAgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIG1fc2VsZWN0b3JGaWx0ZXIgeyBudWxscHRy
IH07CiAKQEAgLTMzOCw4ICszMTcsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBhcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSgpOyB9CiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCk7IH0KIAotICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUqIGNhc2NhZGVkUHJvcGVydGllc0Zv
clJvbGxiYWNrKGNvbnN0IE1hdGNoUmVzdWx0Jik7Ci0KICAgICBDU1NUb1N0eWxlTWFwKiBzdHls
ZU1hcCgpIHsgcmV0dXJuICZtX3N0eWxlTWFwOyB9CiAgICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVy
cyYgaW5zcGVjdG9yQ1NTT01XcmFwcGVycygpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTT01XcmFw
cGVyczsgfQogICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
bigpIHsgcmV0dXJuIG1fc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7IH0KQEAgLTM1MCwxMSArMzI3
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKSB7IG1fc3RhdGUuc2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9CiAgICAgdm9p
ZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBt
X3N0YXRlLnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CiAKLSAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUlELCBjb25zdCBD
U1NWYWx1ZSYsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJikgY29uc3Q7CisgICAgUmVmUHRy
PENTU1ZhbHVlPiByZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NT
VmFsdWUmLCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJikgY29uc3Q7CiAKICAgICBib29sIGFkanVz
dFJlbmRlclN0eWxlRm9yVGV4dEF1dG9zaXppbmcoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50
Jik7CiAKLSAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBB
cHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYsIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFz
ayA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKyAgICB2b2lkIGFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgU2Vs
ZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1
bHQpOwogCiBwcml2YXRlOgogICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CkBA
IC00MTksMTggKzM5Niw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzRGVsZXRlZCB7IGZhbHNl
IH07CiB9OwogCi0vLyBTdGF0ZSB0byB1c2Ugd2hlbiBhcHBseWluZyBwcm9wZXJ0aWVzLCB0byBr
ZWVwIHRyYWNrIG9mIHdoaWNoIGN1c3RvbSBhbmQgaGlnaC1wcmlvcml0eQotLy8gcHJvcGVydGll
cyBoYXZlIGJlZW4gcmVzb2x2ZWQuCi1zdHJ1Y3QgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUg
ewotICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXI7Ci0gICAgU3R5bGU6OlByb3BlcnR5
Q2FzY2FkZSogY2FzY2FkZTsKLSAgICBjb25zdCBNYXRjaFJlc3VsdCogbWF0Y2hSZXN1bHQ7Ci0g
ICAgQml0bWFwPG51bUNTU1Byb3BlcnRpZXM+IGFwcGxpZWRQcm9wZXJ0aWVzID0geyB9OwotICAg
IEhhc2hTZXQ8U3RyaW5nPiBhcHBsaWVkQ3VzdG9tUHJvcGVydGllcyA9IHsgfTsKLSAgICBCaXRt
YXA8bnVtQ1NTUHJvcGVydGllcz4gaW5Qcm9ncmVzc1Byb3BlcnRpZXMgPSB7IH07Ci0gICAgSGFz
aFNldDxTdHJpbmc+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tID0geyB9OwotfTsKLQogaW5s
aW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyAmYXR0cmlidXRlTmFtZSkgY29uc3QKIHsK
ICAgICBBU1NFUlQoIWF0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUGFyc2VyLmNwcAppbmRleCBkNjRmZmViYTdhZi4uY2M5YmQyOTVmOGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0x
NzYsMTAgKzE3NywxMCBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbkZvckluc3Bl
Y3Rvcihjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBjbwogICAgIENTU1BhcnNlcklt
cGw6OnBhcnNlRGVjbGFyYXRpb25MaXN0Rm9ySW5zcGVjdG9yKHN0cmluZywgY29udGV4dCwgb2Jz
ZXJ2ZXIpOwogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhW
YXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0YXRlKQorUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5
SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUm
IGNhc2NhZGUpCiB7CiAgICAgQVNTRVJUKChwcm9wSUQgPT0gQ1NTUHJvcGVydHlDdXN0b20gJiYg
dmFsdWUuaXNDdXN0b21Qcm9wZXJ0eVZhbHVlKCkpIHx8IChwcm9wSUQgIT0gQ1NTUHJvcGVydHlD
dXN0b20gJiYgIXZhbHVlLmlzQ3VzdG9tUHJvcGVydHlWYWx1ZSgpKSk7Ci0gICAgYXV0byYgc3R5
bGUgPSAqc3RhdGUuc3R5bGVSZXNvbHZlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9ICpj
YXNjYWRlLnN0eWxlUmVzb2x2ZXIoKS5zdHlsZSgpOwogICAgIGF1dG8gZGlyZWN0aW9uID0gc3R5
bGUuZGlyZWN0aW9uKCk7CiAgICAgYXV0byB3cml0aW5nTW9kZSA9IHN0eWxlLndyaXRpbmdNb2Rl
KCk7CiAKQEAgLTE5Miw3ICsxOTMsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSQogICAgICAg
ICAgICAgc2hvcnRoYW5kSUQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJv
cGVydHkoc2hvcnRoYW5kSUQsIGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwogICAgICAgICBDU1NW
YXJpYWJsZVJlZmVyZW5jZVZhbHVlKiBzaG9ydGhhbmRWYWx1ZSA9IHBlbmRpbmdTdWJzdGl0dXRp
b24uc2hvcnRoYW5kVmFsdWUoKTsKIAotICAgICAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHNob3J0
aGFuZFZhbHVlLT5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKHN0YXRlKTsKKyAgICAgICAgYXV0
byByZXNvbHZlZERhdGEgPSBzaG9ydGhhbmRWYWx1ZS0+cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNl
cyhjYXNjYWRlKTsKICAgICAgICAgaWYgKCFyZXNvbHZlZERhdGEpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgVmVjdG9yPENTU1BhcnNlclRva2VuPiByZXNvbHZlZFRva2Vu
cyA9IHJlc29sdmVkRGF0YS0+dG9rZW5zKCk7CkBAIC0yMTEsNyArMjEyLDcgQEAgUmVmUHRyPENT
U1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1By
b3BlcnR5SUQgcHJvcEkKIAogICAgIGlmICh2YWx1ZS5pc1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUo
KSkgewogICAgICAgICBjb25zdCBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlJiB2YWx1ZVdpdGhS
ZWZlcmVuY2VzID0gZG93bmNhc3Q8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4odmFsdWUpOwot
ICAgICAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZh
cmlhYmxlUmVmZXJlbmNlcyhzdGF0ZSk7CisgICAgICAgIGF1dG8gcmVzb2x2ZWREYXRhID0gdmFs
dWVXaXRoUmVmZXJlbmNlcy5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGNhc2NhZGUpOwogICAg
ICAgICBpZiAoIXJlc29sdmVkRGF0YSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUocHJvcElELCBy
ZXNvbHZlZERhdGEtPnRva2VucygpLCBtX2NvbnRleHQpOwpAQCAtMjIxLDkgKzIyMiw5IEBAIFJl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNl
cyhDU1NQcm9wZXJ0eUlEIHByb3BJCiAgICAgY29uc3QgYXV0byYgdmFsdWVXaXRoUmVmZXJlbmNl
cyA9IFdURjo6Z2V0PFJlZjxDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlPj4oY3VzdG9tUHJvcFZh
bHVlLnZhbHVlKCkpLmdldCgpOwogCiAgICAgYXV0byYgbmFtZSA9IGRvd25jYXN0PENTU0N1c3Rv
bVByb3BlcnR5VmFsdWU+KHZhbHVlKS5uYW1lKCk7Ci0gICAgYXV0byogcmVnaXN0ZXJlZCA9IHN0
YXRlLnN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3Bl
cnR5U2V0KCkuZ2V0KG5hbWUpOworICAgIGF1dG8qIHJlZ2lzdGVyZWQgPSBjYXNjYWRlLnN0eWxl
UmVzb2x2ZXIoKS5kb2N1bWVudCgpLmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgp
LmdldChuYW1lKTsKICAgICBhdXRvJiBzeW50YXggPSByZWdpc3RlcmVkID8gcmVnaXN0ZXJlZC0+
c3ludGF4IDogIioiOwotICAgIGF1dG8gcmVzb2x2ZWREYXRhID0gdmFsdWVXaXRoUmVmZXJlbmNl
cy5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKHN0YXRlKTsKKyAgICBhdXRvIHJlc29sdmVkRGF0
YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjYXNjYWRl
KTsKIAogICAgIGlmICghcmVzb2x2ZWREYXRhKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTIzMyw5ICsyMzQsOSBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdp
dGhWYXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSQogICAgIENTU1Byb3BlcnR5
UGFyc2VyOjpjb2xsZWN0UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1ZURlcGVuZGVuY2llcyhzeW50
YXgsIGZhbHNlLCBkZXBlbmRlbmNpZXMsIHJlc29sdmVkRGF0YS0+dG9rZW5zKCksIG1fY29udGV4
dCk7CiAKICAgICBmb3IgKGF1dG8gaWQgOiBkZXBlbmRlbmNpZXMpCi0gICAgICAgIHN0YXRlLnN0
eWxlUmVzb2x2ZXItPmFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGlkLCBpZCwgc3RhdGUpOworICAg
ICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhpZCwgaWQpOwogCi0gICAgcmV0dXJuIENTU1By
b3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCBzeW50YXgs
IHJlc29sdmVkRGF0YS0+dG9rZW5zKCksICpzdGF0ZS5zdHlsZVJlc29sdmVyLCBtX2NvbnRleHQp
OworICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5
VmFsdWUobmFtZSwgc3ludGF4LCByZXNvbHZlZERhdGEtPnRva2VucygpLCBjYXNjYWRlLnN0eWxl
UmVzb2x2ZXIoKSwgbV9jb250ZXh0KTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFZlY3Rvcjxkb3Vi
bGU+PiBDU1NQYXJzZXI6OnBhcnNlS2V5ZnJhbWVLZXlMaXN0KGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAppbmRleCBlMzMwNzg5OGZhYS4u
ZDI2OTU1MTRlMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtMzAs
NyArMzAsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBBcHBseUNhc2NhZGVk
UHJvcGVydHlTdGF0ZTsKIGNsYXNzIENTU1BhcnNlck9ic2VydmVyOwogY2xhc3MgQ1NTU2VsZWN0
b3JMaXN0OwogY2xhc3MgQ29sb3I7CkBAIC00Miw2ICs0MSwxMCBAQCBjbGFzcyBTdHlsZVJ1bGVL
ZXlmcmFtZTsKIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIGNsYXNzIFJlbmRlclN0eWxlOwog
CituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgUHJvcGVydHlDYXNjYWRlOworfQorCiBjbGFzcyBD
U1NQYXJzZXIgewogcHVibGljOgogICAgIGVudW0gY2xhc3MgUGFyc2VSZXN1bHQgewpAQCAtNzgs
NyArODEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5n
JiwgQ1NTU2VsZWN0b3JMaXN0Jik7CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVmFsdWVX
aXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhbHVlJiwgQXBw
bHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVmFs
dWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhbHVlJiwg
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpOwogCiAgICAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3Io
Y29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7CiAgICAgc3RhdGljIENvbG9yIHBh
cnNlU3lzdGVtQ29sb3IoY29uc3QgU3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAKaW5kZXggNTNjZDYwMWI1ODYu
LmFmNjRhZjk4ZTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNh
c2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAK
QEAgLTE0MCw4ICsxNDAsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRDdWVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiB9CiAjZW5kaWYKIAotUHJvcGVydHlDYXNjYWRlOjpQ
cm9wZXJ0eUNhc2NhZGUoVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRp
bmdNb2RlKQotICAgIDogbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorUHJvcGVydHlDYXNjYWRlOjpQ
cm9wZXJ0eUNhc2NhZGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgTWF0Y2hS
ZXN1bHQmIG1hdGNoUmVzdWx0LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUpCisgICAgOiBtX3N0eWxlUmVzb2x2ZXIoc3R5bGVSZXNvbHZlcikKKyAgICAs
IG1fbWF0Y2hSZXN1bHQobWF0Y2hSZXN1bHQpCisgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24p
CiAgICAgLCBtX3dyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKQogewogfQpAQCAtMTc0LDE3ICsxNzYs
MTcgQEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnNldChDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSYgY3NzVmFsdWUsIHVuc2lnbmVkIGxpbmtNYXQKICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlD
dXN0b20pIHsKICAgICAgICAgbV9wcm9wZXJ0eUlzUHJlc2VudC5zZXQoaWQpOwogICAgICAgICBj
b25zdCBhdXRvJiBjdXN0b21WYWx1ZSA9IGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+
KGNzc1ZhbHVlKTsKLSAgICAgICAgYm9vbCBoYXNWYWx1ZSA9IGN1c3RvbVByb3BlcnRpZXMoKS5j
b250YWlucyhjdXN0b21WYWx1ZS5uYW1lKCkpOworICAgICAgICBib29sIGhhc1ZhbHVlID0gbV9j
dXN0b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKGN1c3RvbVZhbHVlLm5hbWUoKSk7CiAgICAgICAgIGlm
ICghaGFzVmFsdWUpIHsKICAgICAgICAgICAgIFByb3BlcnR5IHByb3BlcnR5OwogICAgICAgICAg
ICAgcHJvcGVydHkuaWQgPSBpZDsKICAgICAgICAgICAgIG1lbXNldChwcm9wZXJ0eS5jc3NWYWx1
ZSwgMCwgc2l6ZW9mKHByb3BlcnR5LmNzc1ZhbHVlKSk7CiAgICAgICAgICAgICBzZXRQcm9wZXJ0
eUludGVybmFsKHByb3BlcnR5LCBpZCwgY3NzVmFsdWUsIGxpbmtNYXRjaFR5cGUsIGNhc2NhZGVM
ZXZlbCwgc3R5bGVTY29wZU9yZGluYWwpOwotICAgICAgICAgICAgY3VzdG9tUHJvcGVydGllcygp
LnNldChjdXN0b21WYWx1ZS5uYW1lKCksIHByb3BlcnR5KTsKKyAgICAgICAgICAgIG1fY3VzdG9t
UHJvcGVydGllcy5zZXQoY3VzdG9tVmFsdWUubmFtZSgpLCBwcm9wZXJ0eSk7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eSBwcm9wZXJ0eSA9IGN1c3RvbVByb3BlcnRpZXMo
KS5nZXQoY3VzdG9tVmFsdWUubmFtZSgpKTsKKyAgICAgICAgICAgIFByb3BlcnR5IHByb3BlcnR5
ID0gY3VzdG9tUHJvcGVydHkoY3VzdG9tVmFsdWUubmFtZSgpKTsKICAgICAgICAgICAgIHNldFBy
b3BlcnR5SW50ZXJuYWwocHJvcGVydHksIGlkLCBjc3NWYWx1ZSwgbGlua01hdGNoVHlwZSwgY2Fz
Y2FkZUxldmVsLCBzdHlsZVNjb3BlT3JkaW5hbCk7Ci0gICAgICAgICAgICBjdXN0b21Qcm9wZXJ0
aWVzKCkuc2V0KGN1c3RvbVZhbHVlLm5hbWUoKSwgcHJvcGVydHkpOworICAgICAgICAgICAgbV9j
dXN0b21Qcm9wZXJ0aWVzLnNldChjdXN0b21WYWx1ZS5uYW1lKCksIHByb3BlcnR5KTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ5LDkgKzI1MSw5IEBAIHN0YXRpYyBh
dXRvJiBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNo
UmVzdWx0LCBDYXNjYWRlCiAgICAgcmV0dXJuIG1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9u
czsKIH0KIAotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFkZE5vcm1hbE1hdGNoZXMoY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGlu
aGVyaXRlZE9ubHkpCit2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YWRkTm9ybWFsTWF0Y2hlcyhDYXNj
YWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkpCiB7Ci0gICAgZm9yIChh
dXRvJiBtYXRjaGVkRGVjbGFyYXRpb25zIDogZGVjbGFyYXRpb25zRm9yQ2FzY2FkZUxldmVsKG1h
dGNoUmVzdWx0LCBjYXNjYWRlTGV2ZWwpKQorICAgIGZvciAoYXV0byYgbWF0Y2hlZERlY2xhcmF0
aW9ucyA6IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbChtX21hdGNoUmVzdWx0LCBjYXNjYWRl
TGV2ZWwpKQogICAgICAgICBhZGRNYXRjaChtYXRjaGVkRGVjbGFyYXRpb25zLCBjYXNjYWRlTGV2
ZWwsIGZhbHNlLCBpbmhlcml0ZWRPbmx5KTsKIH0KIApAQCAtMjY0LDcgKzI2Niw3IEBAIHN0YXRp
YyBib29sIGhhc0ltcG9ydGFudFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9w
ZXJ0aWVzKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFk
ZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBDYXNjYWRl
TGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkpCit2b2lkIFByb3BlcnR5Q2Fz
Y2FkZTo6YWRkSW1wb3J0YW50TWF0Y2hlcyhDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29s
IGluaGVyaXRlZE9ubHkpCiB7CiAgICAgc3RydWN0IEluZGV4QW5kT3JkaW5hbCB7CiAgICAgICAg
IHVuc2lnbmVkIGluZGV4OwpAQCAtMjczLDcgKzI3NSw3IEBAIHZvaWQgUHJvcGVydHlDYXNjYWRl
OjphZGRJbXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2Fz
Y2FkCiAgICAgVmVjdG9yPEluZGV4QW5kT3JkaW5hbD4gaW1wb3J0YW50TWF0Y2hlczsKICAgICBi
b29sIGhhc01hdGNoZXNGcm9tT3RoZXJTY29wZXMgPSBmYWxzZTsKIAotICAgIGF1dG8mIG1hdGNo
ZWREZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwobWF0Y2hSZXN1bHQs
IGNhc2NhZGVMZXZlbCk7CisgICAgYXV0byYgbWF0Y2hlZERlY2xhcmF0aW9ucyA9IGRlY2xhcmF0
aW9uc0ZvckNhc2NhZGVMZXZlbChtX21hdGNoUmVzdWx0LCBjYXNjYWRlTGV2ZWwpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoZWREZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0g
bWF0Y2hlZERlY2xhcmF0aW9uc1tpXTsKQEAgLTMwMiwxNCArMzA0LDE2NSBAQCB2b2lkIFByb3Bl
cnR5Q2FzY2FkZTo6YWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hS
ZXN1bHQsIENhc2NhZAogICAgICAgICBhZGRNYXRjaChtYXRjaGVkRGVjbGFyYXRpb25zW21hdGNo
LmluZGV4XSwgY2FzY2FkZUxldmVsLCB0cnVlLCBpbmhlcml0ZWRPbmx5KTsKIH0KIAotdm9pZCBQ
cm9wZXJ0eUNhc2NhZGU6OmFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKFN0eWxlUmVzb2x2ZXImIHJl
c29sdmVyLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYgYXBwbHlTdGF0ZSkKK3ZvaWQgUHJv
cGVydHlDYXNjYWRlOjphcHBseURlZmVycmVkUHJvcGVydGllcygpCiB7CiAgICAgZm9yIChhdXRv
JiBwcm9wZXJ0eSA6IG1fZGVmZXJyZWRQcm9wZXJ0aWVzKQotICAgICAgICBwcm9wZXJ0eS5hcHBs
eShyZXNvbHZlciwgYXBwbHlTdGF0ZSk7CisgICAgICAgIHByb3BlcnR5LmFwcGx5KCp0aGlzKTsK
IH0KIAotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5OjphcHBseShTdHlsZVJlc29sdmVy
JiByZXNvbHZlciwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIGFwcGx5U3RhdGUpCit2b2lk
IFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBpbnQg
bGFzdFByb3BlcnR5KQogeworICAgIGlmIChMSUtFTFkobV9jdXN0b21Qcm9wZXJ0aWVzLmlzRW1w
dHkoKSkpCisgICAgICAgIHJldHVybiBhcHBseVByb3BlcnRpZXNJbXBsPEN1c3RvbVByb3BlcnR5
Q3ljbGVUcmFja2luZzo6RGlzYWJsZWQ+KGZpcnN0UHJvcGVydHksIGxhc3RQcm9wZXJ0eSk7CisK
KyAgICByZXR1cm4gYXBwbHlQcm9wZXJ0aWVzSW1wbDxDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tp
bmc6OkVuYWJsZWQ+KGZpcnN0UHJvcGVydHksIGxhc3RQcm9wZXJ0eSk7Cit9CisKK3RlbXBsYXRl
PFByb3BlcnR5Q2FzY2FkZTo6Q3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nIHRyYWNrQ3ljbGVz
PgoraW5saW5lIHZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnRpZXNJbXBsKGludCBm
aXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5KQoreworICAgIGZvciAoaW50IGlkID0gZmly
c3RQcm9wZXJ0eTsgaWQgPD0gbGFzdFByb3BlcnR5OyArK2lkKSB7CisgICAgICAgIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGlkKTsKKyAgICAg
ICAgaWYgKCFoYXNQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBBU1NFUlQocHJvcGVydHlJRCAhPSBDU1NQcm9wZXJ0eUN1c3RvbSk7CisgICAgICAg
IGF1dG8mIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVzW3Byb3BlcnR5SURdOworCisgICAgICAgIGlm
ICh0cmFja0N5Y2xlcyA9PSBDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmc6OkVuYWJsZWQpIHsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRp
ZXMuZ2V0KHByb3BlcnR5SUQpKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBpbiBhIGN5
Y2xlIChlZy4gc2V0dGluZyBmb250IHNpemUgdXNpbmcgcmVnaXN0ZXJlZCBjdXN0b20gcHJvcGVy
dHkgdmFsdWUgY29udGFpbmluZyBlbSkuCisgICAgICAgICAgICAgICAgLy8gU28gdGhpcyB2YWx1
ZSBzaG91bGQgYmUgdW5zZXQuCisgICAgICAgICAgICAgICAgbV9hcHBseVN0YXRlLmFwcGxpZWRQ
cm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlEKTsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHByb3Bl
cnR5IGlzIGluIGEgY3ljbGUsIGFuZCBvbmx5IHRoZSByb290IG9mIHRoZSBjYWxsIHN0YWNrIHdp
bGwgaGF2ZSBmaXJzdFByb3BlcnR5ICE9IGxhc3RQcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICBB
U1NFUlQoZmlyc3RQcm9wZXJ0eSA9PSBsYXN0UHJvcGVydHkpOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9n
cmVzc1Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQpOworICAgICAgICAgICAgcHJvcGVydHkuYXBw
bHkoKnRoaXMpOworICAgICAgICAgICAgbV9hcHBseVN0YXRlLmFwcGxpZWRQcm9wZXJ0aWVzLnNl
dChwcm9wZXJ0eUlEKTsKKyAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVy
dGllcy5zZXQocHJvcGVydHlJRCwgZmFsc2UpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBjdXN0b20gcHJvcGVydGll
cywgdGhlbiB0aGVyZSBjYW4ndCBiZSBhbnkgY3ljbGVzLgorICAgICAgICBwcm9wZXJ0eS5hcHBs
eSgqdGhpcyk7CisgICAgfQorfQorCit2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlDdXN0b21Q
cm9wZXJ0aWVzKCkKK3sKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2N1c3RvbVByb3BlcnRpZXMu
a2V5cygpKQorICAgICAgICBhcHBseUN1c3RvbVByb3BlcnR5KG5hbWUpOworfQorCit2b2lkIFBy
b3BlcnR5Q2FzY2FkZTo6YXBwbHlDdXN0b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgaWYgKG1fYXBwbHlTdGF0ZS5hcHBsaWVkQ3VzdG9tUHJvcGVydGllcy5jb250YWlucyhu
YW1lKSB8fCAhbV9jdXN0b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHByb3BlcnR5ID0gY3VzdG9tUHJvcGVydHkobmFtZSk7CisgICAgYm9v
bCBpbkN5Y2xlID0gbV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tLmNvbnRh
aW5zKG5hbWUpOworCisgICAgZm9yIChhdXRvIGluZGV4IDogeyBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoRGVmYXVsdCwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmssIFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hWaXNpdGVkIH0pIHsKKyAgICAgICAgaWYgKCFwcm9wZXJ0eS5jc3NWYWx1ZVtpbmRleF0p
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGluZGV4ICE9IFNlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hEZWZhdWx0ICYmIG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnN0eWxlKCktPmlu
c2lkZUxpbmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWVUb0FwcGx5ID0g
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5
VmFsdWU+KCpwcm9wZXJ0eS5jc3NWYWx1ZVtpbmRleF0pKTsKKworICAgICAgICBpZiAoaW5DeWNs
ZSkgeworICAgICAgICAgICAgbV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmFk
ZChuYW1lKTsgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCB0cnkgdG8gYXBwbHkgdGhpcyBwcm9wZXJ0
eSBhZ2FpbiB3aGlsZSByZXNvbHZpbmcgaXQuCisgICAgICAgICAgICB2YWx1ZVRvQXBwbHkgPSBD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVXaXRoSUQobmFtZSwgQ1NTVmFsdWVJbnZhbGlk
KTsKKyAgICAgICAgfQorCisgICAgICAgIG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGll
c0N1c3RvbS5hZGQobmFtZSk7CisKKyAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
UmVmPENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+Pih2YWx1ZVRvQXBwbHktPnZhbHVlKCkpKSB7
CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlID0gbV9zdHlsZVJlc29s
dmVyLnJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0FwcGx5
LmdldCgpLCAqdGhpcyk7CisKKyAgICAgICAgICAgIGlmIChtX2FwcGx5U3RhdGUuYXBwbGllZEN1
c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOyAv
LyBUaGVyZSB3YXMgYSBjeWNsZSBhbmQgdGhlIHZhbHVlIHdhcyByZXNldCwgc28gYmFpbC4KKwor
ICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1
ZSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NWYWx1ZVVu
c2V0KTsKKworICAgICAgICAgICAgdmFsdWVUb0FwcGx5ID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJv
cGVydHlWYWx1ZT4oKnBhcnNlZFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Fw
cGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20uY29udGFpbnMobmFtZSkpIHsKKyAg
ICAgICAgICAgIGlmIChpbmRleCA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCkgewor
ICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNldEFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSh0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3Rh
dGUoKS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hM
aW5rKSB7CisgICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOworICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNv
bHZlci5zdGF0ZSgpLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaFZpc2l0ZWQpIHsKKyAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUo
KS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoZmFsc2UpOworICAgICAgICAgICAgICAg
IG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0FwcGx5LnB0cigpLCAqdGhpcywg
aW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQ
cm9wZXJ0aWVzQ3VzdG9tLnJlbW92ZShuYW1lKTsKKyAgICBtX2FwcGx5U3RhdGUuYXBwbGllZEN1
c3RvbVByb3BlcnRpZXMuYWRkKG5hbWUpOworCisgICAgZm9yIChhdXRvIGluZGV4IDogeyBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmssIFNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkIH0pIHsKKyAgICAgICAgaWYgKCFwcm9wZXJ0eS5j
c3NWYWx1ZVtpbmRleF0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGluZGV4
ICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0ICYmIG1fc3R5bGVSZXNvbHZlci5zdGF0
ZSgpLnN0eWxlKCktPmluc2lkZUxpbmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4g
dmFsdWVUb0FwcGx5ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGRvd25jYXN0PENT
U0N1c3RvbVByb3BlcnR5VmFsdWU+KCpwcm9wZXJ0eS5jc3NWYWx1ZVtpbmRleF0pKTsKKworICAg
ICAgICBpZiAoaW5DeWNsZSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxDU1NWYXJpYWJs
ZVJlZmVyZW5jZVZhbHVlPj4odmFsdWVUb0FwcGx5LT52YWx1ZSgpKSkgeworICAgICAgICAgICAg
Ly8gUmVzb2x2ZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgcmVzZXQgaXRzIGRlcGVuZGVuY2llcy4K
KyAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5yZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJv
cGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSwgKnRoaXMpOworICAgICAgICB9CisgICAg
fQorfQorCitTdHlsZTo6UHJvcGVydHlDYXNjYWRlKiBQcm9wZXJ0eUNhc2NhZGU6OnByb3BlcnR5
Q2FzY2FkZUZvclJvbGxiYWNrKENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwpCit7CisgICAgc3dp
dGNoIChjYXNjYWRlTGV2ZWwpIHsKKyAgICBjYXNlIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OkF1dGhv
cjoKKyAgICAgICAgaWYgKCFtX2F1dGhvclJvbGxiYWNrQ2FzY2FkZSkgeworICAgICAgICAgICAg
bV9hdXRob3JSb2xsYmFja0Nhc2NhZGUgPSBtYWtlVW5pcXVlPFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGU+KG1fc3R5bGVSZXNvbHZlciwgbV9tYXRjaFJlc3VsdCwgbV9kaXJlY3Rpb24sIG1fd3JpdGlu
Z01vZGUpOworCisgICAgICAgICAgICAvLyBUaGlzIHNwZWNpYWwgcm9sbGJhY2sgY2FzY2FkZSBj
b250YWlucyBVQSBydWxlcyBhbmQgdXNlciBydWxlcyBidXQgbm8gYXV0aG9yIHJ1bGVzLgorICAg
ICAgICAgICAgbV9hdXRob3JSb2xsYmFja0Nhc2NhZGUtPmFkZE5vcm1hbE1hdGNoZXMoU3R5bGU6
OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBmYWxzZSk7CisgICAgICAgICAgICBtX2F1dGhvclJv
bGxiYWNrQ2FzY2FkZS0+YWRkTm9ybWFsTWF0Y2hlcyhTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2Vy
LCBmYWxzZSk7CisgICAgICAgICAgICBtX2F1dGhvclJvbGxiYWNrQ2FzY2FkZS0+YWRkSW1wb3J0
YW50TWF0Y2hlcyhTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyLCBmYWxzZSk7CisgICAgICAgICAg
ICBtX2F1dGhvclJvbGxiYWNrQ2FzY2FkZS0+YWRkSW1wb3J0YW50TWF0Y2hlcyhTdHlsZTo6Q2Fz
Y2FkZUxldmVsOjpVc2VyQWdlbnQsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bV9hdXRob3JSb2xsYmFja0Nhc2NhZGUuZ2V0KCk7CisKKyAgICBjYXNlIFN0eWxlOjpDYXNjYWRl
TGV2ZWw6OlVzZXI6CisgICAgICAgIGlmICghbV91c2VyUm9sbGJhY2tDYXNjYWRlKSB7CisgICAg
ICAgICAgICBtX3VzZXJSb2xsYmFja0Nhc2NhZGUgPSBtYWtlVW5pcXVlPFN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGU+KG1fc3R5bGVSZXNvbHZlciwgbV9tYXRjaFJlc3VsdCwgbV9kaXJlY3Rpb24sIG1f
d3JpdGluZ01vZGUpOworCisgICAgICAgICAgICAvLyBUaGlzIHNwZWNpYWwgcm9sbGJhY2sgY2Fz
Y2FkZSBjb250YWlucyBvbmx5IFVBIHJ1bGVzLgorICAgICAgICAgICAgbV91c2VyUm9sbGJhY2tD
YXNjYWRlLT5hZGROb3JtYWxNYXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwg
ZmFsc2UpOworICAgICAgICAgICAgbV91c2VyUm9sbGJhY2tDYXNjYWRlLT5hZGRJbXBvcnRhbnRN
YXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBtX3VzZXJSb2xsYmFja0Nhc2NhZGUuZ2V0KCk7CisKKyAgICBjYXNl
IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lk
IFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHk6OmFwcGx5KFByb3BlcnR5Q2FzY2FkZSYgY2FzY2Fk
ZSkKK3sKKyAgICBhdXRvJiByZXNvbHZlciA9IGNhc2NhZGUuc3R5bGVSZXNvbHZlcigpOwogICAg
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSA9IHJlc29sdmVyLnN0YXRlKCk7CiAgICAgc3Rh
dGUuc2V0Q2FzY2FkZUxldmVsKGxldmVsKTsKICAgICBzdGF0ZS5zZXRTdHlsZVNjb3BlT3JkaW5h
bChzdHlsZVNjb3BlT3JkaW5hbCk7CkBAIC0zMTcsNyArNDcwLDcgQEAgdm9pZCBQcm9wZXJ0eUNh
c2NhZGU6OlByb3BlcnR5OjphcHBseShTdHlsZVJlc29sdmVyJiByZXNvbHZlciwgQXBwbHlDYXNj
YWRlZFByb3AKICAgICBpZiAoY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHRd
KSB7CiAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsK
ICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7
Ci0gICAgICAgIHJlc29sdmVyLmFwcGx5UHJvcGVydHkoaWQsIGNzc1ZhbHVlW1NlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hEZWZhdWx0XSwgYXBwbHlTdGF0ZSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERl
ZmF1bHQpOworICAgICAgICByZXNvbHZlci5hcHBseVByb3BlcnR5KGlkLCBjc3NWYWx1ZVtTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdF0sIGNhc2NhZGUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hEZWZhdWx0KTsKICAgICB9CiAKICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGluaygp
ID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKQEAgLTMyNiwxMyArNDc5LDEzIEBAIHZvaWQgUHJv
cGVydHlDYXNjYWRlOjpQcm9wZXJ0eTo6YXBwbHkoU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIsIEFw
cGx5Q2FzY2FkZWRQcm9wCiAgICAgaWYgKGNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hM
aW5rXSkgewogICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1
ZSk7CiAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFs
c2UpOwotICAgICAgICByZXNvbHZlci5hcHBseVByb3BlcnR5KGlkLCBjc3NWYWx1ZVtTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoTGlua10sIGFwcGx5U3RhdGUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hM
aW5rKTsKKyAgICAgICAgcmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eShpZCwgY3NzVmFsdWVbU2VsZWN0
b3JDaGVja2VyOjpNYXRjaExpbmtdLCBjYXNjYWRlLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGlu
ayk7CiAgICAgfQogCiAgICAgaWYgKGNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNp
dGVkXSkgewogICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoZmFs
c2UpOwogICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKHRy
dWUpOwotICAgICAgICByZXNvbHZlci5hcHBseVByb3BlcnR5KGlkLCBjc3NWYWx1ZVtTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoVmlzaXRlZF0sIGFwcGx5U3RhdGUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hWaXNpdGVkKTsKKyAgICAgICAgcmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eShpZCwgY3NzVmFsdWVb
U2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWRdLCBjYXNjYWRlLCBTZWxlY3RvckNoZWNrZXI6
Ok1hdGNoVmlzaXRlZCk7CiAgICAgfQogCiAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVy
dHlDYXNjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAppbmRl
eCA0ZTlkNjJhOTJkYi4uYmViYzYyZjM1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1Byb3BlcnR5Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5
Q2FzY2FkZS5oCkBAIC0zMiw3ICszMiw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFN0eWxlUmVzb2x2ZXI7Ci1zdHJ1Y3QgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGU7CiAKIG5h
bWVzcGFjZSBTdHlsZSB7CiAKQEAgLTQ1LDQ0ICs0NCw3NCBAQCBlbnVtIGNsYXNzIENhc2NhZGVM
ZXZlbCA6IHVpbnQ4X3QgewogY2xhc3MgUHJvcGVydHlDYXNjYWRlIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBQcm9wZXJ0eUNhc2NhZGUoVGV4dERpcmVjdGlv
biwgV3JpdGluZ01vZGUpOworICAgIFByb3BlcnR5Q2FzY2FkZShTdHlsZVJlc29sdmVyJiwgY29u
c3QgTWF0Y2hSZXN1bHQmLCBUZXh0RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7CiAgICAgflByb3Bl
cnR5Q2FzY2FkZSgpOwogCisgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcigpIHsgcmV0
dXJuIG1fc3R5bGVSZXNvbHZlcjsgfQorCiAgICAgc3RydWN0IFByb3BlcnR5IHsKLSAgICAgICAg
dm9pZCBhcHBseShTdHlsZVJlc29sdmVyJiwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmKTsK
KyAgICAgICAgdm9pZCBhcHBseShQcm9wZXJ0eUNhc2NhZGUmKTsKIAogICAgICAgICBDU1NQcm9w
ZXJ0eUlEIGlkOwogICAgICAgICBDYXNjYWRlTGV2ZWwgbGV2ZWw7CiAgICAgICAgIFNjb3BlT3Jk
aW5hbCBzdHlsZVNjb3BlT3JkaW5hbDsKLSAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlWzNdOwor
ICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWVbM107IC8vIFZhbHVlcyBmb3IgbGluayBtYXRjaCBz
dGF0ZXMgTWF0Y2hEZWZhdWx0LCBNYXRjaExpbmsgYW5kIE1hdGNoVmlzaXRlZAogICAgIH07CiAK
ICAgICBib29sIGhhc1Byb3BlcnR5KENTU1Byb3BlcnR5SUQpIGNvbnN0OwogICAgIFByb3BlcnR5
JiBwcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKIAotICAgIHZvaWQgYWRkTm9ybWFsTWF0Y2hlcyhj
b25zdCBNYXRjaFJlc3VsdCYsIENhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFs
c2UpOwotICAgIHZvaWQgYWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYsIENh
c2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOwotCi0gICAgdm9pZCBhcHBs
eURlZmVycmVkUHJvcGVydGllcyhTdHlsZVJlc29sdmVyJiwgQXBwbHlDYXNjYWRlZFByb3BlcnR5
U3RhdGUmKTsKLQotICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUHJvcGVydHk+JiBjdXN0b21Qcm9w
ZXJ0aWVzKCkgeyByZXR1cm4gbV9jdXN0b21Qcm9wZXJ0aWVzOyB9CiAgICAgYm9vbCBoYXNDdXN0
b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICBQcm9wZXJ0eSBjdXN0b21Qcm9w
ZXJ0eShjb25zdCBTdHJpbmcmKSBjb25zdDsKIAorICAgIHZvaWQgYWRkTm9ybWFsTWF0Y2hlcyhD
YXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlKTsKKyAgICB2b2lkIGFkZElt
cG9ydGFudE1hdGNoZXMoQ2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7
CisKKyAgICBib29sIGhhc0FwcGxpZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKSBjb25zdDsKKwor
ICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3Bl
cnR5KTsKKyAgICB2b2lkIGFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKCk7CisKKyAgICB2b2lkIGFw
cGx5Q3VzdG9tUHJvcGVydGllcygpOworICAgIHZvaWQgYXBwbHlDdXN0b21Qcm9wZXJ0eShjb25z
dCBTdHJpbmcmIG5hbWUpOworCisgICAgUHJvcGVydHlDYXNjYWRlKiBwcm9wZXJ0eUNhc2NhZGVG
b3JSb2xsYmFjayhDYXNjYWRlTGV2ZWwpOworCiBwcml2YXRlOgogICAgIHZvaWQgYWRkTWF0Y2go
Y29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaXNJbXBvcnRhbnQs
IGJvb2wgaW5oZXJpdGVkT25seSk7CiAgICAgdm9pZCBzZXQoQ1NTUHJvcGVydHlJRCwgQ1NTVmFs
dWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwsIFNjb3BlT3JkaW5hbCk7
CiAgICAgdm9pZCBzZXREZWZlcnJlZChDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIHVuc2lnbmVk
IGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU2NvcGVPcmRpbmFsKTsKICAgICBzdGF0aWMg
dm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKFByb3BlcnR5JiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFs
dWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwsIFNjb3BlT3JkaW5hbCk7
CiAKKyAgICBlbnVtIEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB7IEVuYWJsZWQgPSAwLCBE
aXNhYmxlZCB9OworICAgIHRlbXBsYXRlPEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB0cmFj
a0N5Y2xlcz4KKyAgICB2b2lkIGFwcGx5UHJvcGVydGllc0ltcGwoaW50IGZpcnN0UHJvcGVydHks
IGludCBsYXN0UHJvcGVydHkpOworCisgICAgU3R5bGVSZXNvbHZlciYgbV9zdHlsZVJlc29sdmVy
OworICAgIGNvbnN0IE1hdGNoUmVzdWx0JiBtX21hdGNoUmVzdWx0OworCisgICAgVGV4dERpcmVj
dGlvbiBtX2RpcmVjdGlvbjsKKyAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2RlOworCiAgICAg
UHJvcGVydHkgbV9wcm9wZXJ0aWVzW251bUNTU1Byb3BlcnRpZXMgKyAyXTsKICAgICBzdGQ6OmJp
dHNldDxudW1DU1NQcm9wZXJ0aWVzICsgMj4gbV9wcm9wZXJ0eUlzUHJlc2VudDsKIAogICAgIFZl
Y3RvcjxQcm9wZXJ0eSwgOD4gbV9kZWZlcnJlZFByb3BlcnRpZXM7CiAgICAgSGFzaE1hcDxBdG9t
U3RyaW5nLCBQcm9wZXJ0eT4gbV9jdXN0b21Qcm9wZXJ0aWVzOwogCi0gICAgVGV4dERpcmVjdGlv
biBtX2RpcmVjdGlvbjsKLSAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2RlOworICAgIC8vIFN0
YXRlIHRvIHVzZSB3aGVuIGFwcGx5aW5nIHByb3BlcnRpZXMsIHRvIGtlZXAgdHJhY2sgb2Ygd2hp
Y2ggY3VzdG9tIGFuZCBoaWdoLXByaW9yaXR5CisgICAgLy8gcHJvcGVydGllcyBoYXZlIGJlZW4g
cmVzb2x2ZWQuCisgICAgc3RydWN0IEFwcGx5U3RhdGUgeworICAgICAgICBCaXRtYXA8bnVtQ1NT
UHJvcGVydGllcz4gYXBwbGllZFByb3BlcnRpZXMgPSB7IH07CisgICAgICAgIEhhc2hTZXQ8U3Ry
aW5nPiBhcHBsaWVkQ3VzdG9tUHJvcGVydGllcyA9IHsgfTsKKyAgICAgICAgQml0bWFwPG51bUNT
U1Byb3BlcnRpZXM+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVzID0geyB9OworICAgICAgICBIYXNoU2V0
PFN0cmluZz4gaW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20gPSB7IH07CisgICAgfTsKKworICAg
IEFwcGx5U3RhdGUgbV9hcHBseVN0YXRlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFByb3BlcnR5
Q2FzY2FkZT4gbV9hdXRob3JSb2xsYmFja0Nhc2NhZGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBy
b3BlcnR5Q2FzY2FkZT4gbV91c2VyUm9sbGJhY2tDYXNjYWRlOwogfTsKIAogaW5saW5lIGJvb2wg
UHJvcGVydHlDYXNjYWRlOjpoYXNQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKSBjb25zdApAQCAt
MTA2LDUgKzEzNSwxMCBAQCBpbmxpbmUgUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eSBQcm9wZXJ0
eUNhc2NhZGU6OmN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbgogICAgIHJldHVybiBtX2N1
c3RvbVByb3BlcnRpZXMuZ2V0KG5hbWUpOwogfQogCitpbmxpbmUgYm9vbCBQcm9wZXJ0eUNhc2Nh
ZGU6Omhhc0FwcGxpZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fYXBwbHlTdGF0ZS5hcHBsaWVkUHJvcGVydGllcy5nZXQocHJvcGVydHlJ
RCk7Cit9CisKIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381920</attachid>
            <date>2019-10-25 07:55:13 -0700</date>
            <delta_ts>2019-10-25 08:13:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>more-propertycascade-3.patch</filename>
            <type>text/plain</type>
            <size>57556</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MzgyZDIyN2E4MS4uZThhOTE4MmNmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxOS0xMC0yNSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBtb3JlIGNhc2NhZGUgcmVsYXRlZCBjb2RlIGZyb20gU3R5bGVSZXNv
bHZlciB0byBQcm9wZXJ0eUNhc2NhZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMzQwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gTW92ZSBhIGJ1bmNoIG9mIFN0eWxlUmVzb2x2ZXIgbWVtYmVyIGZ1
bmN0aW9ucyB0byBQcm9wZXJ0eUNhc2NhZGUuCisgICAgICAgIC0gTWFrZSBBcHBseUNhc2NhZGVk
UHJvcGVydHlTdGF0ZSBwYXJ0IG9mIHRoZSBQcm9wZXJ0eUNhc2NhZGUgaW50ZXJuYWwgc3RhdGUu
CisgICAgICAgIC0gUGFzcyBhcm91bmQgYSByZWZlcmVuY2UgdG8gdGhlIFByb3BlcnR5Q2FzY2Fk
ZSBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgc3RhdGUgb2JqZWN0CisgICAgICAgICAgVGhlIHN0YXRl
IGNvbnRhaW5lZCBQcm9wZXJ0eUNhc2NhZGUgbWVtYmVyIGFscmVhZHkgc28gdGhpcyBpcyBlcXVp
dmFsZW50IGJ1dCBzaW1wbGVyLgorCisgICAgICAgICogY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNl
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVZhcmlhYmxlRmFsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OnJlc29sdmVUb2tlblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWU6OnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMgY29uc3QpOgorICAgICAg
ICAqIGNzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmg6CisgICAgICAgICogY3NzL0VsZW1l
bnRSdWxlQ29sbGVjdG9yLmg6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FzY2FkZWRQcm9wZXJ0aWVzRm9yUm9sbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlDYXNjYWRl
ZEN1c3RvbVByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzSW1wbCk6IERlbGV0ZWQuCisK
KyAgICAgICAgVGhlc2UgYmVjb21lIFByb3BlcnR5Q2FzY2FkZSBtZW1iZXJzLgorCisgICAgICAg
ICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjphdXRob3JSb2xsYmFjayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6dXNlclJvbGxiYWNrIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRBdXRob3JSb2xsYmFjayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VXNl
clJvbGxiYWNrKTogRGVsZXRlZC4KKworICAgICAgICBSb2xsYmFja3MgYXJlIG5vdyBvd25lZCBi
eSBQcm9wZXJ0eUNhc2NhZGUuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZl
cmVuY2VzKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAqIHN0
eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OmFkZE5vcm1hbE1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZTo6YWRkSW1wb3J0YW50TWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseURlZmVycmVkUHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0aWVzSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseUN1c3RvbVBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBw
bHlDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjpwcm9wZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eTo6YXBwbHkpOgorICAgICAgICAqIHN0eWxlL1By
b3BlcnR5Q2FzY2FkZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZTo6c3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjpoYXNBcHBsaWVkUHJvcGVydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OlByb3BlcnR5Q2FzY2FkZTo6Y3VzdG9tUHJvcGVydGllcyk6IERlbGV0ZWQuCisKIDIwMTktMTAt
MjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEYXRhYmFzZUNv
bnRleHQgc2hvdWxkIG5vdCBwcmV2ZW50IGVudGVyaW5nIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcApp
bmRleCA5NGQ2M2EzYjU4OS4uZjg0YjhiNmU5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmgiCiAK
KyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIApAQCAtNDQsMjEgKzQ1LDIxIEBAIFN0cmluZyBD
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKICAgICByZXR1
cm4gbV9zdHJpbmdWYWx1ZTsKIH0KIAotc3RhdGljIGJvb2wgcmVzb2x2ZVRva2VuUmFuZ2UoQ1NT
UGFyc2VyVG9rZW5SYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYsIEFwcGx5Q2FzY2FkZWRQ
cm9wZXJ0eVN0YXRlJik7CitzdGF0aWMgYm9vbCByZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJU
b2tlblJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiwgU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSYpOwogCi1zdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVGYWxsYmFjayhDU1NQYXJzZXJUb2tl
blJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQsIEFwcGx5Q2FzY2Fk
ZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBib29sIHJlc29sdmVWYXJpYWJsZUZhbGxi
YWNrKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJl
c3VsdCwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKICAgICBpZiAocmFuZ2Uu
YXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IENvbW1hVG9rZW4pOwogICAgIHJhbmdlLmNvbnN1bWUoKTsKLSAgICByZXR1cm4g
cmVzb2x2ZVRva2VuUmFuZ2UocmFuZ2UsIHJlc3VsdCwgc3RhdGUpOworICAgIHJldHVybiByZXNv
bHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzdWx0LCBjYXNjYWRlKTsKIH0KIAotc3RhdGljIGJvb2wg
cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3Rv
cjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0
YXRlKQorc3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2Vu
UmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKLSAgICBhdXRvJiByZWdpc3RlcmVkUHJvcGVydGllcyA9
IHN0YXRlLnN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVBy
b3BlcnR5U2V0KCk7Ci0gICAgYXV0byYgc3R5bGUgPSAqc3RhdGUuc3R5bGVSZXNvbHZlci0+c3R5
bGUoKTsKKyAgICBhdXRvJiByZWdpc3RlcmVkUHJvcGVydGllcyA9IGNhc2NhZGUuc3R5bGVSZXNv
bHZlcigpLmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5U2V0KCk7Cisg
ICAgYXV0byYgc3R5bGUgPSAqY2FzY2FkZS5zdHlsZVJlc29sdmVyKCkuc3R5bGUoKTsKIAogICAg
IHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gSWRlbnRUb2tlbik7CkBAIC02NiwxMSArNjcsMTEgQEAgc3RhdGljIGJvb2wgcmVzb2x2
ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQ
YXJzZXIKICAgICBBU1NFUlQocmFuZ2UuYXRFbmQoKSB8fCAocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBDb21tYVRva2VuKSk7CiAKICAgICAvLyBBcHBseSB0aGlzIHZhcmlhYmxlIGZpcnN0LCBpbiBj
YXNlIGl0IGlzIHN0aWxsIHVucmVzb2x2ZWQKLSAgICBzdGF0ZS5zdHlsZVJlc29sdmVyLT5hcHBs
eUNhc2NhZGVkQ3VzdG9tUHJvcGVydHkodmFyaWFibGVOYW1lLCBzdGF0ZSk7CisgICAgY2FzY2Fk
ZS5hcHBseUN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CiAKICAgICAvLyBBcHBseSBmYWxs
YmFjayB0byBkZXRlY3QgY3ljbGVzCiAgICAgVmVjdG9yPENTU1BhcnNlclRva2VuPiBmYWxsYmFj
a1Jlc3VsdDsKLSAgICBib29sIGZhbGxiYWNrUmV0dXJuID0gcmVzb2x2ZVZhcmlhYmxlRmFsbGJh
Y2soQ1NTUGFyc2VyVG9rZW5SYW5nZShyYW5nZSksIGZhbGxiYWNrUmVzdWx0LCBzdGF0ZSk7Cisg
ICAgYm9vbCBmYWxsYmFja1JldHVybiA9IHJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKENTU1BhcnNl
clRva2VuUmFuZ2UocmFuZ2UpLCBmYWxsYmFja1Jlc3VsdCwgY2FzY2FkZSk7CiAKICAgICBhdXRv
KiBwcm9wZXJ0eSA9IHN0eWxlLmdldEN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CiAKQEAg
LTkyLDI0ICs5MywyNCBAQCBzdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoQ1NT
UGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlcgogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgYm9vbCByZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJUb2tlblJhbmdl
IHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQsIEFwcGx5Q2FzY2FkZWRQcm9w
ZXJ0eVN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBib29sIHJlc29sdmVUb2tlblJhbmdlKENTU1BhcnNl
clRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwog
ICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgewogICAgICAgICBpZiAocmFuZ2UucGVlaygpLmZ1
bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVZhciB8fCByYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09
IENTU1ZhbHVlRW52KQotICAgICAgICAgICAgc3VjY2VzcyAmPSByZXNvbHZlVmFyaWFibGVSZWZl
cmVuY2UocmFuZ2UuY29uc3VtZUJsb2NrKCksIHJlc3VsdCwgc3RhdGUpOworICAgICAgICAgICAg
c3VjY2VzcyAmPSByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UocmFuZ2UuY29uc3VtZUJsb2NrKCks
IHJlc3VsdCwgY2FzY2FkZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocmFuZ2UuY29uc3VtZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLVJl
ZlB0cjxDU1NWYXJpYWJsZURhdGE+IENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU6OnJlc29sdmVW
YXJpYWJsZVJlZmVyZW5jZXMoQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0YXRlKSBjb25z
dAorUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZTo6cmVz
b2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKSBj
b25zdAogewogICAgIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tlbnM7CiAgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSA9IG1fZGF0YS0+dG9rZW5SYW5nZSgpOwogCi0gICAg
aWYgKCFyZXNvbHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzb2x2ZWRUb2tlbnMsIHN0YXRlKSkKKyAg
ICBpZiAoIXJlc29sdmVUb2tlblJhbmdlKHJhbmdlLCByZXNvbHZlZFRva2VucywgY2FzY2FkZSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIENTU1ZhcmlhYmxlRGF0YTo6
Y3JlYXRlKHJlc29sdmVkVG9rZW5zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFi
bGVSZWZlcmVuY2VWYWx1ZS5oCmluZGV4IGQ3MGUzMjdjMTA2Li45YTEyMGMzNjc3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oCkBAIC0zOSw5
ICszOSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBBcHBseUNhc2NhZGVk
UHJvcGVydHlTdGF0ZTsKIGNsYXNzIENTU1BhcnNlclRva2VuUmFuZ2U7CiAKK25hbWVzcGFjZSBT
dHlsZSB7CitjbGFzcyBQcm9wZXJ0eUNhc2NhZGU7Cit9CisKIGNsYXNzIENTU1ZhcmlhYmxlUmVm
ZXJlbmNlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4gY3JlYXRlKGNvbnN0IENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQpAQCAtNTIsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBlcXVhbHMoY29u
c3QgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS5nZXQoKSA9PSBvdGhlci5tX2RhdGEuZ2V0KCk7IH0KICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4
dCgpIGNvbnN0OwogCi0gICAgUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gcmVzb2x2ZVZhcmlhYmxl
UmVmZXJlbmNlcyhBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpIGNvbnN0OworICAgIFJlZlB0
cjxDU1NWYXJpYWJsZURhdGE+IHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIENTU1ZhcmlhYmxlUmVmZXJlbmNl
VmFsdWUoUmVmPENTU1ZhcmlhYmxlRGF0YT4mJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuaAppbmRleCA1ZTUzNTMxOGJjMi4uZGJhOGU5NTMxMWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCkBAIC0yMiw2ICsyMiw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNs
dWRlICJSdWxlU2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCiAjaW5jbHVkZSAi
U3R5bGVTY29wZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTMyLDggKzMzLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudFJ1bGVTZXRzOwogY2xhc3MgTWF0Y2hSZXF1
ZXN0OwotY2xhc3MgUnVsZURhdGE7Ci1jbGFzcyBSdWxlU2V0OwogY2xhc3MgU2VsZWN0b3JGaWx0
ZXI7CiAKIGNsYXNzIFBzZXVkb1N0eWxlUmVxdWVzdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKaW5kZXggZmU2YjZkOThlN2UuLjFmODZiZDdlMzEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSAiUGFnZVJ1bGVD
b2xsZWN0b3IuaCIKICNpbmNsdWRlICJQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oIgogI2luY2x1
ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJRdWly
a3MuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZUNvbnN0YW50cy5oIgpAQCAtMzczLDI0ICszNzQsMjMgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxl
KgogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5j
ZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRv
IG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KLSAgICBTdHlsZTo6
UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgY2Fz
Y2FkZS5hZGROb3JtYWxNYXRjaGVzKHJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9y
KTsKKyAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIHJlc3VsdCwgZGly
ZWN0aW9uLCB3cml0aW5nTW9kZSk7CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxl
OjpDYXNjYWRlTGV2ZWw6OkF1dGhvcik7CiAKLSAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0
ZSBhcHBseVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZyZXN1bHQgfTsKLSAgICBhcHBseUNhc2Nh
ZGVkUHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHks
IGFwcGx5U3RhdGUpOworICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVy
dHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3Qg
ZGlydGllZCwgdXBkYXRlIGl0IG5vdy4KICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBOb3cg
cmVzb2x2ZSByZW1haW5pbmcgY3VzdG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkg
b3JkZXIKLSAgICBmb3IgKGF1dG8gaXQgPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdp
bigpOyBpdCAhPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAg
ICAgYXBwbHlDYXNjYWRlZEN1c3RvbVByb3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAg
IGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENT
U1Byb3BlcnR5LCBhcHBseVN0YXRlKTsKKyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGll
cygpOworCisgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3Bl
cnR5LCBsYXN0Q1NTUHJvcGVydHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQg
Ynkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIHVwZGF0ZSBpdCBhIHNlY29u
ZCB0aW1lLgogICAgIHVwZGF0ZUZvbnQoKTsKIAotICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFBy
b3BlcnRpZXMoKnRoaXMsIGFwcGx5U3RhdGUpOworICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFBy
b3BlcnRpZXMoKTsKIAogICAgIGFkanVzdFJlbmRlclN0eWxlKCpzdGF0ZS5zdHlsZSgpLCAqc3Rh
dGUucGFyZW50U3R5bGUoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAKQEAgLTU3OSwyMSArNTc5LDIw
IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQ
YWdlKGludCBwYWdlSW5kZXgpCiAgICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGU7CiAgICAgZXh0
cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCptX3N0YXRlLnN0eWxlKCksIHJlc3VsdCwgZGly
ZWN0aW9uLCB3cml0aW5nTW9kZSk7CiAKLSAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2Nh
ZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVz
KHJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yKTsKKyAgICBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIHJlc3VsdCwgZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7
CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OkF1dGhv
cik7CiAKLSAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBhcHBseVN0YXRlIHsgdGhpcywg
JmNhc2NhZGUsICZyZXN1bHQgfTsKLSAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhmaXJzdENT
U1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHksIGFwcGx5U3RhdGUpOworICAgIGNh
c2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQ
cm9wZXJ0eSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgdXBkYXRlIGl0IG5v
dy4KICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3Vz
dG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKLSAgICBmb3IgKGF1dG8g
aXQgPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdpbigpOyBpdCAhPSBjYXNjYWRlLmN1
c3RvbVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3Rv
bVByb3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0
aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5LCBhcHBseVN0YXRl
KTsKKyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOworCisgICAgY2FzY2FkZS5h
cHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkp
OwogCi0gICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygqdGhpcywgYXBwbHlTdGF0
ZSk7CisgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCiAgICAgLy8gTm93
IHJldHVybiB0aGUgc3R5bGUuCiAgICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CkBAIC0x
MzgyLDUyICsxMzgxLDQ4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIEZp
bmQgb3V0IGlmIHRoZXJlJ3MgYSAtd2Via2l0LWFwcGVhcmFuY2UgcHJvcGVydHkgaW4gZWZmZWN0
IGZyb20gdGhlIFVBIHNoZWV0LgogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJvcmRl
ciBhbmQgYmFja2dyb3VuZCBzdHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUo
KQogICAgICAgICAvLyBjYW4gbG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYgdGhp
cyBpcyBhIHN0eWxlZCBmb3JtIGNvbnRyb2wgb3Igbm90LgotICAgICAgICBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlIGNhc2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgICAgIGNhc2Nh
ZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNl
ckFnZW50LCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgICAgICBjYXNjYWRlLmFkZEltcG9ydGFu
dE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKLQotICAgICAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBh
cHBseVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZtYXRjaFJlc3VsdCB9OworICAgICAgICBTdHls
ZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24s
IHdyaXRpbmdNb2RlKTsKKyAgICAgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxlOjpD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgY2Fz
Y2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKIAotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhD
U1NQcm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRp
b24sIGFwcGx5U3RhdGUpOworICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQcm9w
ZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24pOwog
ICAgICAgICBhZGp1c3RTdHlsZUZvckludGVyQ2hhcmFjdGVyUnVieSgpOwogCiAjaWYgRU5BQkxF
KERBUktfTU9ERV9DU1MpCiAgICAgICAgIC8vIFN1cHBvcnRlZCBjb2xvciBzY2hlbWVzIGNhbiBh
ZmZlY3QgcmVzb2x2ZWQgY29sb3JzLCBzbyB3ZSBuZWVkIHRvIGFwcGx5IHRoYXQgcHJvcGVydHkg
YmVmb3JlIGFueSBjb2xvciBwcm9wZXJ0aWVzLgotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVy
dGllcyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBhcHBs
eVN0YXRlKTsKKyAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoQ1NTUHJvcGVydHlDb2xv
clNjaGVtZSwgQ1NTUHJvcGVydHlDb2xvclNjaGVtZSk7CiAjZW5kaWYKIAotICAgICAgICBhcHBs
eUNhc2NhZGVkUHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJv
cGVydHksIGFwcGx5U3RhdGUpOworICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJz
dENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgICAgIC8vIElm
IG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUgaXQgbm93LgogICAgICAgICB1cGRhdGVGb250
KCk7CiAKICAgICAgICAgLy8gTm93IHJlc29sdmUgcmVtYWluaW5nIGN1c3RvbSBwcm9wZXJ0aWVz
IGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCi0gICAgICAgIGZvciAoYXV0byBpdCA9IGNhc2Nh
ZGUuY3VzdG9tUHJvcGVydGllcygpLmJlZ2luKCk7IGl0ICE9IGNhc2NhZGUuY3VzdG9tUHJvcGVy
dGllcygpLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3RvbVByb3Bl
cnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVydGll
cyhmaXJzdExvd1ByaW9yaXR5UHJvcGVydHksIGxhc3RDU1NQcm9wZXJ0eSwgYXBwbHlTdGF0ZSk7
CisgICAgICAgIGNhc2NhZGUuYXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7CisKKyAgICAgICAgY2Fz
Y2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJv
cGVydHkpOwogCiAgICAgICAgIHN0YXRlLmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogICAg
IH0KIAotICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRp
bmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxl
OjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNj
YWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVz
ZXIsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1h
dGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJpdGVkT25s
eSk7Ci0gICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBTdHlsZTo6
Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgY2FzY2FkZS5h
ZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2Vy
LCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyht
YXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBhcHBseUluaGVyaXRl
ZE9ubHkpOwotCi0gICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRo
aXMsICZjYXNjYWRlLCAmbWF0Y2hSZXN1bHQgfTsKKyAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRl
IGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKKyAg
ICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50
LCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhTdHls
ZTo6Q2FzY2FkZUxldmVsOjpVc2VyLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUu
YWRkTm9ybWFsTWF0Y2hlcyhTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJp
dGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKFN0eWxlOjpDYXNjYWRl
TGV2ZWw6OkF1dGhvciwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZEltcG9y
dGFudE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlciwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKKyAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6
VXNlckFnZW50LCBhcHBseUluaGVyaXRlZE9ubHkpOwogCi0gICAgYXBwbHlDYXNjYWRlZFByb3Bl
cnRpZXMoQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24sIENTU1Byb3BlcnR5V2Via2l0UnVi
eVBvc2l0aW9uLCBhcHBseVN0YXRlKTsKKyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQ
cm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24p
OwogICAgIGFkanVzdFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KCk7CiAKICNpZiBFTkFCTEUo
REFSS19NT0RFX0NTUykKICAgICAvLyBTdXBwb3J0ZWQgY29sb3Igc2NoZW1lcyBjYW4gYWZmZWN0
IHJlc29sdmVkIGNvbG9ycywgc28gd2UgbmVlZCB0byBhcHBseSB0aGF0IHByb3BlcnR5IGJlZm9y
ZSBhbnkgY29sb3IgcHJvcGVydGllcy4KLSAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhDU1NQ
cm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBhcHBseVN0YXRlKTsK
KyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQ
cm9wZXJ0eUNvbG9yU2NoZW1lKTsKICNlbmRpZgogCi0gICAgYXBwbHlDYXNjYWRlZFByb3BlcnRp
ZXMoZmlyc3RDU1NQcm9wZXJ0eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5LCBhcHBseVN0YXRl
KTsKKyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGln
aFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgLy8gSWYgdGhlIGVmZmVjdGl2ZSB6b29tIHZhbHVl
IGNoYW5nZXMsIHdlIGNhbid0IHVzZSB0aGUgbWF0Y2hlZCBwcm9wZXJ0aWVzIGNhY2hlLiBTdGFy
dCBvdmVyLgogICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkKQEAgLTE0NDEs
MTQgKzE0MzYsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAgICAgcmV0dXJuIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQsIERvTm90VXNlTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZSk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3VzdG9t
IHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKLSAgICBmb3IgKGF1dG8gaXQg
PSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdpbigpOyBpdCAhPSBjYXNjYWRlLmN1c3Rv
bVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3RvbVBy
b3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVz
KGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5LCBhcHBseVN0YXRlKTsK
KyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOworCisgICAgY2FzY2FkZS5hcHBs
eVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkpOwog
CiAgICAgLy8gRmluYWxseSwgc29tZSBwcm9wZXJ0aWVzIG11c3QgYmUgYXBwbGllZCBpbiB0aGUg
b3JkZXIgdGhleSB3ZXJlIHBhcnNlZC4KICAgICAvLyBUaGVyZSBhcmUgc29tZSBDU1MgcHJvcGVy
dGllcyB0aGF0IGFmZmVjdCB0aGUgc2FtZSBSZW5kZXJTdHlsZSB2YWx1ZXMsCiAgICAgLy8gc28g
dG8gcHJlc2VydmUgYmVoYXZpb3IsIHdlIHF1ZXVlIHRoZW0gdXAgZHVyaW5nIGNhc2NhZGUgYW5k
IGZsdXNoIGhlcmUuCi0gICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygqdGhpcywg
YXBwbHlTdGF0ZSk7CisgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCiAg
ICAgQVNTRVJUKCFzdGF0ZS5mb250RGlydHkoKSk7CiAKQEAgLTE0NjksOSArMTQ2NCwxMCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSwgc3RkOgogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7Ci0g
ICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRoaXMsIG51bGxwdHIs
IG51bGxwdHIgfTsKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKKyAgICBTdHlsZTo6UHJv
cGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCB7IH0sIHsgfSk7CiAgICAg
aWYgKHZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KGlkLCB2YWx1ZSwgYXBwbHlTdGF0ZSk7
CisgICAgICAgIGFwcGx5UHJvcGVydHkoaWQsIHZhbHVlLCBjYXNjYWRlKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKQEAgLTE1
MjAsNjQgKzE1MTYsMTcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXNGb3JM
ZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBpczxTVkdFbGVtZW50PihtX3N0YXRlLmVsZW1lbnQo
KSkgJiYgIShpczxTVkdTVkdFbGVtZW50PigqbV9zdGF0ZS5lbGVtZW50KCkpICYmIG1fc3RhdGUu
ZWxlbWVudCgpLT5wYXJlbnROb2RlKCkpOwogfQogCi1TdHlsZTo6UHJvcGVydHlDYXNjYWRlKiBT
dHlsZVJlc29sdmVyOjpjYXNjYWRlZFByb3BlcnRpZXNGb3JSb2xsYmFjayhjb25zdCBNYXRjaFJl
c3VsdCYgbWF0Y2hSZXN1bHQpCi17Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAg
V3JpdGluZ01vZGUgd3JpdGluZ01vZGU7Ci0gICAgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdN
b2RlKCpzdGF0ZSgpLnN0eWxlKCksIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2Rl
KTsKLQotICAgIHN3aXRjaCAoc3RhdGUoKS5jYXNjYWRlTGV2ZWwoKSkgewotICAgIGNhc2UgU3R5
bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yOiB7Ci0gICAgICAgIGF1dG8qIGF1dGhvclJvbGxiYWNr
ID0gc3RhdGUoKS5hdXRob3JSb2xsYmFjaygpOwotICAgICAgICBpZiAoYXV0aG9yUm9sbGJhY2sp
Ci0gICAgICAgICAgICByZXR1cm4gYXV0aG9yUm9sbGJhY2s7Ci0KLSAgICAgICAgYXV0byBuZXdB
dXRob3JSb2xsYmFjayA9IG1ha2VVbmlxdWU8U3R5bGU6OlByb3BlcnR5Q2FzY2FkZT4oZGlyZWN0
aW9uLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgLy8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNh
c2NhZGUgY29udGFpbnMgVUEgcnVsZXMgYW5kIHVzZXIgcnVsZXMgYnV0IG5vIGF1dGhvciBydWxl
cy4KLSAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1
bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwotICAgICAgICBuZXdB
dXRob3JSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2Nh
ZGVMZXZlbDo6VXNlciwgZmFsc2UpOwotICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1w
b3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlciwgZmFs
c2UpOwotICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRj
aFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBmYWxzZSk7Ci0KLSAgICAg
ICAgc3RhdGUoKS5zZXRBdXRob3JSb2xsYmFjayhuZXdBdXRob3JSb2xsYmFjayk7Ci0gICAgICAg
IHJldHVybiBzdGF0ZSgpLmF1dGhvclJvbGxiYWNrKCk7Ci0gICAgfQotCi0gICAgY2FzZSBTdHls
ZTo6Q2FzY2FkZUxldmVsOjpVc2VyOiB7Ci0gICAgICAgIGF1dG8qIHVzZXJSb2xsYmFjayA9IHN0
YXRlKCkudXNlclJvbGxiYWNrKCk7Ci0gICAgICAgIGlmICh1c2VyUm9sbGJhY2spCi0gICAgICAg
ICAgICByZXR1cm4gdXNlclJvbGxiYWNrOwotCi0gICAgICAgIGF1dG8gbmV3VXNlclJvbGxiYWNr
ID0gbWFrZVVuaXF1ZTxTdHlsZTo6UHJvcGVydHlDYXNjYWRlPihkaXJlY3Rpb24sIHdyaXRpbmdN
b2RlKTsKLQotICAgICAgICAvLyBUaGlzIHNwZWNpYWwgcm9sbGJhY2sgY2FzY2FkZSBjb250YWlu
cyBvbmx5IFVBIHJ1bGVzLgotICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNo
ZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwot
ICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQs
IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwotCi0gICAgICAgIHN0YXRl
KCkuc2V0VXNlclJvbGxiYWNrKG5ld1VzZXJSb2xsYmFjayk7Ci0gICAgICAgIHJldHVybiBzdGF0
ZSgpLnVzZXJSb2xsYmFjaygpOwotICAgIH0KLQotICAgIGNhc2UgU3R5bGU6OkNhc2NhZGVMZXZl
bDo6VXNlckFnZW50OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIEFwcGx5Q2FzY2Fk
ZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1h
c2sgbGlua01hdGNoTWFzaykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIGNh
c2NhZGUsIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayBsaW5rTWF0Y2hNYXNrKQogewot
ICAgIGF1dG8qIG1hdGNoUmVzdWx0ID0gYXBwbHlTdGF0ZS5tYXRjaFJlc3VsdDsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFpc1Nob3J0aGFuZENTU1Byb3BlcnR5KGlkKSwgIlNob3J0aGFuZCBw
cm9wZXJ0eSBpZCA9ICVkIHdhc24ndCBleHBhbmRlZCBhdCBwYXJzaW5nIHRpbWUiLCBpZCk7CiAK
ICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZVRvQXBwbHkgPSB2YWx1ZTsKICAgICBpZiAodmFsdWUtPmhhc1ZhcmlhYmxlUmVmZXJlbmNlcygp
KSB7Ci0gICAgICAgIHZhbHVlVG9BcHBseSA9IHJlc29sdmVkVmFyaWFibGVWYWx1ZShpZCwgKnZh
bHVlLCBhcHBseVN0YXRlKTsKLSAgICAgICAgLy8gSWYgYXBwbGllZFByb3BlcnRpZXMgYWxyZWFk
eSBoYXMgdGhpcyBpZCwgdGhlbiB3ZSBkZXRlY3RlZCBhIGN5Y2xlLCBhbmQgdGhpcyB2YWx1ZSBz
aG91bGQgYmUgdW5zZXQuCi0gICAgICAgIGlmICghdmFsdWVUb0FwcGx5IHx8IGFwcGx5U3RhdGUu
YXBwbGllZFByb3BlcnRpZXMuZ2V0KGlkKSkgeworICAgICAgICB2YWx1ZVRvQXBwbHkgPSByZXNv
bHZlZFZhcmlhYmxlVmFsdWUoaWQsICp2YWx1ZSwgY2FzY2FkZSk7CisgICAgICAgIC8vIElmIHRo
ZSBjYXNjYWRlIGhhcyBhbHJlYWR5IGFwcGxpZWQgdGhpcyBpZCwgdGhlbiB3ZSBkZXRlY3RlZCBh
IGN5Y2xlLCBhbmQgdGhpcyB2YWx1ZSBzaG91bGQgYmUgdW5zZXQuCisgICAgICAgIGlmICghdmFs
dWVUb0FwcGx5IHx8IGNhc2NhZGUuaGFzQXBwbGllZFByb3BlcnR5KGlkKSkgewogICAgICAgICAg
ICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKICAgICAgICAgICAg
ICAgICB2YWx1ZVRvQXBwbHkgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUluaGVy
aXRlZFZhbHVlKCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNTg4LDcgKzE1MzcsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlLCBBcHBseUNhc2NhZAogICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2Fy
ZVByb3BlcnR5KGlkKSkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVy
dHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSwgc3RhdGUuc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChu
ZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lkLCB2YWx1ZVRv
QXBwbHkuZ2V0KCksIGFwcGx5U3RhdGUsIGxpbmtNYXRjaE1hc2spOworICAgICAgICByZXR1cm4g
YXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWVUb0FwcGx5LmdldCgpLCBjYXNjYWRlLCBsaW5rTWF0
Y2hNYXNrKTsKICAgICB9CiAKICAgICBDU1NWYWx1ZSogdmFsdWVUb0NoZWNrRm9ySW5oZXJpdElu
aXRpYWwgPSB2YWx1ZVRvQXBwbHkuZ2V0KCk7CkBAIC0xNjEzLDEyICsxNTYyLDEwIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUsIEFwcGx5Q2FzY2FkCiAgICAgYm9vbCBpc1JldmVydCA9IHZhbHVlVG9DaGVja0Zvcklu
aGVyaXRJbml0aWFsLT5pc1JldmVydFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09
IENTU1ZhbHVlUmV2ZXJ0OwogCiAgICAgaWYgKGlzUmV2ZXJ0KSB7Ci0gICAgICAgIGlmIChzdGF0
ZS5jYXNjYWRlTGV2ZWwoKSA9PSBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQgfHwgIW1h
dGNoUmVzdWx0KQorICAgICAgICBpZiAoc3RhdGUuY2FzY2FkZUxldmVsKCkgPT0gU3R5bGU6OkNh
c2NhZGVMZXZlbDo6VXNlckFnZW50KQogICAgICAgICAgICAgaXNVbnNldCA9IHRydWU7CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGNvcnJlY3Qgcm9sbGJhY2sgb2Jq
ZWN0IGZyb20gdGhlIHN0YXRlLCBidWlsZGluZyBpdCBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAg
ICAvLyBUaGlzIHJlcXVpcmVzIGhhdmluZyB0aGUgb3JpZ2luYWwgTWF0Y2hSZXN1bHQgYXZhaWxh
YmxlLgotICAgICAgICAgICAgYXV0byogcm9sbGJhY2sgPSBjYXNjYWRlZFByb3BlcnRpZXNGb3JS
b2xsYmFjaygqbWF0Y2hSZXN1bHQpOworICAgICAgICAgICAgYXV0byogcm9sbGJhY2sgPSBjYXNj
YWRlLnByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKHN0YXRlLmNhc2NhZGVMZXZlbCgpKTsKICAg
ICAgICAgICAgIEFTU0VSVChyb2xsYmFjayk7CiAKICAgICAgICAgICAgIC8vIFdpdGggdGhlIGNh
c2NhZGUgYnVpbHQsIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBwcm9wZXJ0eSBhbmQgYXBwbHkgaXQu
IElmIHRoZSBwcm9wZXJ0eSBpcwpAQCAtMTYyOCwxMyArMTU3NSwxMyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBB
cHBseUNhc2NhZAogICAgICAgICAgICAgICAgIGlmIChjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQg
JiYgY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkLT5pbmhlcml0cyAmJiByb2xsYmFjay0+aGFzQ3Vz
dG9tUHJvcGVydHkoY3VzdG9tUHJvcGVydHlWYWx1ZS0+bmFtZSgpKSkgewogICAgICAgICAgICAg
ICAgICAgICBhdXRvIHByb3BlcnR5ID0gcm9sbGJhY2stPmN1c3RvbVByb3BlcnR5KGN1c3RvbVBy
b3BlcnR5VmFsdWUtPm5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5j
c3NWYWx1ZVtsaW5rTWF0Y2hNYXNrXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkocHJvcGVydHkuaWQsIHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdLCBhcHBs
eVN0YXRlLCBsaW5rTWF0Y2hNYXNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkocHJvcGVydHkuaWQsIHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdLCBjYXNj
YWRlLCBsaW5rTWF0Y2hNYXNrKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sbGJhY2stPmhhc1Byb3BlcnR5
KGlkKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIHByb3BlcnR5ID0gcm9sbGJhY2stPnByb3Bl
cnR5KGlkKTsKICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNo
TWFza10pCi0gICAgICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQsIHBy
b3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdLCBhcHBseVN0YXRlLCBsaW5rTWF0Y2hNYXNr
KTsKKyAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgcHJvcGVy
dHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10sIGNhc2NhZGUsIGxpbmtNYXRjaE1hc2spOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMTY3NiwxMCArMTYyMywx
MCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlLCBBcHBseUNhc2NhZAogICAgIFN0eWxlQnVpbGRlcjo6YXBwbHlQcm9w
ZXJ0eShpZCwgKnRoaXMsICp2YWx1ZVRvQXBwbHksIGlzSW5pdGlhbCwgaXNJbmhlcml0LCBjdXN0
b21Qcm9wZXJ0eVJlZ2lzdGVyZWQpOwogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUmVzb2x2
ZXI6OnJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYgc3RhdGUpIGNvbnN0CitS
ZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBTdHlsZTo6UHJvcGVydHlD
YXNjYWRlJiBjYXNjYWRlKSBjb25zdAogewogICAgIENTU1BhcnNlciBwYXJzZXIoZG9jdW1lbnQo
KSk7Ci0gICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhw
cm9wSUQsIHZhbHVlLCBzdGF0ZSk7CisgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlV2l0aFZh
cmlhYmxlUmVmZXJlbmNlcyhwcm9wSUQsIHZhbHVlLCBjYXNjYWRlKTsKIH0KIAogUmVmUHRyPFN0
eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQpAQCAt
MjAzMCwxMTQgKzE5NzcsNCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJh
dGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZpbHRlck9wZXJhdAogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5Q2FzY2FkZWRDdXN0b21Qcm9wZXJ0
eShjb25zdCBTdHJpbmcmIG5hbWUsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkK
LXsKLSAgICBpZiAoc3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkg
fHwgIXN0YXRlLmNhc2NhZGUtPmN1c3RvbVByb3BlcnRpZXMoKS5jb250YWlucyhuYW1lKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwcm9wZXJ0eSA9IHN0YXRlLmNhc2NhZGUtPmN1c3Rv
bVByb3BlcnRpZXMoKS5nZXQobmFtZSk7Ci0gICAgYm9vbCBpbkN5Y2xlID0gc3RhdGUuaW5Qcm9n
cmVzc1Byb3BlcnRpZXNDdXN0b20uY29udGFpbnMobmFtZSk7Ci0KLSAgICBmb3IgKGF1dG8gaW5k
ZXggOiB7IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0LCBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoTGluaywgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQgfSkgewotICAgICAgICBpZiAo
IXByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoaW5kZXggIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQgJiYgdGhpcy0+c3Rh
dGUoKS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+
IHZhbHVlVG9BcHBseSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7Ci0KLSAg
ICAgICAgaWYgKGluQ3ljbGUpIHsKLSAgICAgICAgICAgIHN0YXRlLmFwcGxpZWRDdXN0b21Qcm9w
ZXJ0aWVzLmFkZChuYW1lKTsgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCB0cnkgdG8gYXBwbHkgdGhp
cyBwcm9wZXJ0eSBhZ2FpbiB3aGlsZSByZXNvbHZpbmcgaXQuCi0gICAgICAgICAgICB2YWx1ZVRv
QXBwbHkgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVXaXRoSUQobmFtZSwgQ1NTVmFs
dWVJbnZhbGlkKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0
aWVzQ3VzdG9tLmFkZChuYW1lKTsKLQotICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWUgPSByZXNvbHZlZFZh
cmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSwgc3RhdGUp
OwotCi0gICAgICAgICAgICBpZiAoc3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFp
bnMobmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUaGVyZSB3YXMgYSBjeWNsZSBh
bmQgdGhlIHZhbHVlIHdhcyByZXNldCwgc28gYmFpbC4KLQotICAgICAgICAgICAgaWYgKCFwYXJz
ZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0N1c3RvbVByb3BlcnR5
VmFsdWU6OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NWYWx1ZVVuc2V0KTsKLQotICAgICAgICAgICAg
dmFsdWVUb0FwcGx5ID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnBhcnNlZFZh
bHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGF0ZS5pblByb2dyZXNzUHJvcGVydGll
c0N1c3RvbS5jb250YWlucyhuYW1lKSkgewotICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy0+c3RhdGUo
KS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
dGhpcy0+c3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hMaW5rKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy0+c3RhdGUoKS5zZXRBcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy0+c3RhdGUo
KS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNp
dGVkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy0+c3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUoZmFsc2UpOwotICAgICAgICAgICAgICAgIHRoaXMtPnN0YXRlKCkuc2V0QXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSh0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5wdHIo
KSwgc3RhdGUsIGluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRlLmluUHJvZ3Jl
c3NQcm9wZXJ0aWVzQ3VzdG9tLnJlbW92ZShuYW1lKTsKLSAgICBzdGF0ZS5hcHBsaWVkQ3VzdG9t
UHJvcGVydGllcy5hZGQobmFtZSk7Ci0KLSAgICBmb3IgKGF1dG8gaW5kZXggOiB7IFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hEZWZhdWx0LCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluaywgU2VsZWN0
b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQgfSkgewotICAgICAgICBpZiAoIXByb3BlcnR5LmNzc1Zh
bHVlW2luZGV4XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaW5kZXggIT0g
U2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQgJiYgdGhpcy0+c3RhdGUoKS5zdHlsZSgpLT5p
bnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlVG9BcHBseSA9
IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0
eVZhbHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7Ci0KLSAgICAgICAgaWYgKGluQ3lj
bGUgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1
ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkpIHsKLSAgICAgICAgICAgIC8vIFJlc29sdmUgdGhp
cyB2YWx1ZSBzbyB0aGF0IHdlIHJlc2V0IGl0cyBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICBy
ZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQo
KSwgc3RhdGUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5
LCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKExJS0VMWShz
dGF0ZS5jYXNjYWRlLT5jdXN0b21Qcm9wZXJ0aWVzKCkuaXNFbXB0eSgpKSkKLSAgICAgICAgcmV0
dXJuIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzSW1wbDxDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tp
bmc6OkRpc2FibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHksIHN0YXRlKTsKLSAgICBy
ZXR1cm4gYXBwbHlDYXNjYWRlZFByb3BlcnRpZXNJbXBsPEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFj
a2luZzo6RW5hYmxlZD4oZmlyc3RQcm9wZXJ0eSwgbGFzdFByb3BlcnR5LCBzdGF0ZSk7Ci19Ci0K
LXRlbXBsYXRlPFN0eWxlUmVzb2x2ZXI6OkN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyBUcmFj
a0N5Y2xlcz4KLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5Q2FzY2FkZWRQcm9wZXJ0
aWVzSW1wbChpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSwgQXBwbHlDYXNjYWRl
ZFByb3BlcnR5U3RhdGUmIHN0YXRlKQotewotICAgIGZvciAoaW50IGlkID0gZmlyc3RQcm9wZXJ0
eTsgaWQgPD0gbGFzdFByb3BlcnR5OyArK2lkKSB7Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGlkKTsKLSAgICAgICAgaWYgKCFz
dGF0ZS5jYXNjYWRlLT5oYXNQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBBU1NFUlQocHJvcGVydHlJRCAhPSBDU1NQcm9wZXJ0eUN1c3RvbSk7Ci0g
ICAgICAgIGF1dG8mIHByb3BlcnR5ID0gc3RhdGUuY2FzY2FkZS0+cHJvcGVydHkocHJvcGVydHlJ
RCk7Ci0KLSAgICAgICAgaWYgKFRyYWNrQ3ljbGVzID09IEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFj
a2luZzo6RGlzYWJsZWQpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IGN1
c3RvbSBwcm9wZXJ0aWVzLCB0aGVuIHRoZXJlIGNhbid0IGJlIGFueSBjeWNsZXMuCi0gICAgICAg
ICAgICBwcm9wZXJ0eS5hcHBseSgqdGhpcywgc3RhdGUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzLmdldChwcm9w
ZXJ0eUlEKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaW4gYSBjeWNsZSAoZWcuIHNl
dHRpbmcgZm9udCBzaXplIHVzaW5nIHJlZ2lzdGVyZWQgY3VzdG9tIHByb3BlcnR5IHZhbHVlIGNv
bnRhaW5pbmcgZW0pLgotICAgICAgICAgICAgICAgIC8vIFNvIHRoaXMgdmFsdWUgc2hvdWxkIGJl
IHVuc2V0LgotICAgICAgICAgICAgICAgIHN0YXRlLmFwcGxpZWRQcm9wZXJ0aWVzLnNldChwcm9w
ZXJ0eUlEKTsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHByb3BlcnR5IGlzIGluIGEgY3ljbGUs
IGFuZCBvbmx5IHRoZSByb290IG9mIHRoZSBjYWxsIHN0YWNrIHdpbGwgaGF2ZSBmaXJzdFByb3Bl
cnR5ICE9IGxhc3RQcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZmlyc3RQcm9wZXJ0
eSA9PSBsYXN0UHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBzdGF0ZS5pblByb2dyZXNzUHJvcGVydGllcy5zZXQocHJvcGVy
dHlJRCk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS5hcHBseSgqdGhpcywgc3RhdGUpOwotICAgICAg
ICAgICAgc3RhdGUuYXBwbGllZFByb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQpOwotICAgICAgICAg
ICAgc3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQsIGZhbHNlKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgKaW5kZXggZmRjNWZiM2Q4MGMuLmMwN2M4ZWY4YmYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTIwMSw5ICsyMDEsNiBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZpbHRl
ck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwogCi0gICAgdm9pZCBhcHBseUNhc2NhZGVkUHJv
cGVydGllcyhpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSwgQXBwbHlDYXNjYWRl
ZFByb3BlcnR5U3RhdGUmKTsKLSAgICB2b2lkIGFwcGx5Q2FzY2FkZWRDdXN0b21Qcm9wZXJ0eShj
b25zdCBTdHJpbmcmIG5hbWUsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7Ci0KIHByaXZh
dGU6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1cCB0aGUgZGVmYXVsdCBmb250IHNpemUg
aWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdlbmVyaWMgZm9udCBmYW1pbHkgaGFzIGNo
YW5nZWQuIC1kd2gKICAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJT
dHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CkBAIC0yMTQsMjIgKzIxMSwx
MiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYs
IGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVu
dEJveFN0eWxlLCBjb25zdCBFbGVtZW50Kik7CiAgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZUZv
clNpdGVTcGVjaWZpY1F1aXJrcyhSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQmKTsKLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxHcmlkUG9zaXRpb24+IGFkanVzdE5hbWVkR3JpZEl0ZW1Qb3NpdGlv
bihjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiwgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmLCBjb25z
dCBHcmlkUG9zaXRpb24mLCBHcmlkUG9zaXRpb25TaWRlKSBjb25zdDsKICAgICAKICAgICB2b2lk
IGFkanVzdFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KCk7CiAgICAgCi0gICAgYm9vbCBmYXN0
UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKLQogICAgIGVudW0gU2hvdWxk
VXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSB7IERvTm90VXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZSA9IDAsIFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgfTsKICAgICB2b2lkIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVtZW50JiwgU2hvdWxkVXNl
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSA9IFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOwogCi0g
ICAgZW51bSBDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmcgeyBFbmFibGVkID0gMCwgRGlzYWJs
ZWQgfTsKLSAgICB0ZW1wbGF0ZTxDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmc+Ci0gICAgaW5s
aW5lIHZvaWQgYXBwbHlDYXNjYWRlZFByb3BlcnRpZXNJbXBsKGludCBmaXJzdFByb3BlcnR5LCBp
bnQgbGFzdFByb3BlcnR5LCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpOwotCi0gICAgdm9p
ZCBjYXNjYWRlTWF0Y2hlcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgTWF0Y2hSZXN1
bHQmLCBib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBp
bmhlcml0ZWRPbmx5KTsKLQogICAgIERvY3VtZW50UnVsZVNldHMgbV9ydWxlU2V0czsKIAogICAg
IHR5cGVkZWYgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFt
ZXM+PiBLZXlmcmFtZXNSdWxlTWFwOwpAQCAtMjkxLDEyICsyNzgsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwoKSBjb25zdCB7IHJldHVy
biBtX3N0eWxlU2NvcGVPcmRpbmFsOyB9CiAgICAgICAgIHZvaWQgc2V0U3R5bGVTY29wZU9yZGlu
YWwoU3R5bGU6OlNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCkgeyBtX3N0eWxlU2NvcGVP
cmRpbmFsID0gc3R5bGVTY29wZU9yZGluYWw7IH0KIAotICAgICAgICBTdHlsZTo6UHJvcGVydHlD
YXNjYWRlKiBhdXRob3JSb2xsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aG9yUm9sbGJhY2su
Z2V0KCk7IH0KLSAgICAgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSogdXNlclJvbGxiYWNrKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VyUm9sbGJhY2suZ2V0KCk7IH0KLSAgICAgICAgCi0gICAgICAg
IHZvaWQgc2V0QXV0aG9yUm9sbGJhY2soc3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU+JiByb2xsYmFjaykgeyBtX2F1dGhvclJvbGxiYWNrID0gV1RGTW92ZShyb2xsYmFjayk7
IH0KLSAgICAgICAgdm9pZCBzZXRVc2VyUm9sbGJhY2soc3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGU+JiByb2xsYmFjaykgeyBtX3VzZXJSb2xsYmFjayA9IFdURk1vdmUocm9s
bGJhY2spOyB9Ci0KICAgICAgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVy
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RvckZpbHRlcjsgfQogICAgICAgICAKICAgICBwcml2
YXRlOgpAQCAtMzA3LDggKzI4OCw2IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgUmVuZGVyU3R5
bGUqIG1fcGFyZW50U3R5bGUgeyBudWxscHRyIH07CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gbV9vd25lZFBhcmVudFN0eWxlOwogICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSogbV9yb290RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OwotICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U3R5bGU6OlByb3BlcnR5Q2FzY2FkZT4gbV9hdXRob3JSb2xsYmFjazsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU+IG1fdXNlclJvbGxiYWNrOwogCiAg
ICAgICAgIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBtX3NlbGVjdG9yRmlsdGVyIHsgbnVsbHB0ciB9
OwogCkBAIC0zMzgsOCArMzE3LDYgQEAgcHVibGljOgogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKTsgfQogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
OyB9CiAKLSAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlKiBjYXNjYWRlZFByb3BlcnRpZXNGb3JS
b2xsYmFjayhjb25zdCBNYXRjaFJlc3VsdCYpOwotCiAgICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVN
YXAoKSB7IHJldHVybiAmbV9zdHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMm
IGluc3BlY3RvckNTU09NV3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBl
cnM7IH0KICAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24o
KSB7IHJldHVybiBtX3N0YXRlLmZvbnREZXNjcmlwdGlvbigpOyB9CkBAIC0zNTAsMTEgKzMyNywx
MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkgeyBtX3N0YXRlLnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQogICAgIHZvaWQg
c2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9z
dGF0ZS5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQogCi0gICAgUmVmUHRy
PENTU1ZhbHVlPiByZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NT
VmFsdWUmLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpIGNvbnN0OworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gcmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1Zh
bHVlJiwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpIGNvbnN0OwogCiAgICAgYm9vbCBhZGp1c3RS
ZW5kZXJTdHlsZUZvclRleHRBdXRvc2l6aW5nKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCYp
OwogCi0gICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgQXBw
bHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sg
PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCk7CisgICAgdm9pZCBhcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIFNlbGVj
dG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0
KTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwpAQCAt
NDE5LDE4ICszOTYsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0RlbGV0ZWQgeyBmYWxzZSB9
OwogfTsKIAotLy8gU3RhdGUgdG8gdXNlIHdoZW4gYXBwbHlpbmcgcHJvcGVydGllcywgdG8ga2Vl
cCB0cmFjayBvZiB3aGljaCBjdXN0b20gYW5kIGhpZ2gtcHJpb3JpdHkKLS8vIHByb3BlcnRpZXMg
aGF2ZSBiZWVuIHJlc29sdmVkLgotc3RydWN0IEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIHsK
LSAgICBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyOwotICAgIFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUqIGNhc2NhZGU7Ci0gICAgY29uc3QgTWF0Y2hSZXN1bHQqIG1hdGNoUmVzdWx0OwotICAg
IEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBhcHBsaWVkUHJvcGVydGllcyA9IHsgfTsKLSAgICBI
YXNoU2V0PFN0cmluZz4gYXBwbGllZEN1c3RvbVByb3BlcnRpZXMgPSB7IH07Ci0gICAgQml0bWFw
PG51bUNTU1Byb3BlcnRpZXM+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVzID0geyB9OwotICAgIEhhc2hT
ZXQ8U3RyaW5nPiBpblByb2dyZXNzUHJvcGVydGllc0N1c3RvbSA9IHsgfTsKLX07Ci0KIGlubGlu
ZSBib29sIFN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcgJmF0dHJpYnV0ZU5hbWUpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCFhdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1BhcnNlci5jcHAKaW5kZXggZDY0ZmZlYmE3YWYuLmNjOWJkMjk1ZjhiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMTc2
LDEwICsxNzcsMTAgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb25Gb3JJbnNwZWN0
b3IoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgY28KICAgICBDU1NQYXJzZXJJbXBs
OjpwYXJzZURlY2xhcmF0aW9uTGlzdEZvckluc3BlY3RvcihzdHJpbmcsIGNvbnRleHQsIG9ic2Vy
dmVyKTsKIH0KIAotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFy
aWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkKK1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlE
IHByb3BJRCwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBj
YXNjYWRlKQogewogICAgIEFTU0VSVCgocHJvcElEID09IENTU1Byb3BlcnR5Q3VzdG9tICYmIHZh
bHVlLmlzQ3VzdG9tUHJvcGVydHlWYWx1ZSgpKSB8fCAocHJvcElEICE9IENTU1Byb3BlcnR5Q3Vz
dG9tICYmICF2YWx1ZS5pc0N1c3RvbVByb3BlcnR5VmFsdWUoKSkpOwotICAgIGF1dG8mIHN0eWxl
ID0gKnN0YXRlLnN0eWxlUmVzb2x2ZXItPnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSAqY2Fz
Y2FkZS5zdHlsZVJlc29sdmVyKCkuc3R5bGUoKTsKICAgICBhdXRvIGRpcmVjdGlvbiA9IHN0eWxl
LmRpcmVjdGlvbigpOwogICAgIGF1dG8gd3JpdGluZ01vZGUgPSBzdHlsZS53cml0aW5nTW9kZSgp
OwogCkBAIC0xOTIsNyArMTkzLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
VmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJvcEkKICAgICAgICAg
ICAgIHNob3J0aGFuZElEID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3Bl
cnR5KHNob3J0aGFuZElELCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKICAgICAgICAgQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZSogc2hvcnRoYW5kVmFsdWUgPSBwZW5kaW5nU3Vic3RpdHV0aW9u
LnNob3J0aGFuZFZhbHVlKCk7CiAKLSAgICAgICAgYXV0byByZXNvbHZlZERhdGEgPSBzaG9ydGhh
bmRWYWx1ZS0+cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhzdGF0ZSk7CisgICAgICAgIGF1dG8g
cmVzb2x2ZWREYXRhID0gc2hvcnRoYW5kVmFsdWUtPnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMo
Y2FzY2FkZSk7CiAgICAgICAgIGlmICghcmVzb2x2ZWREYXRhKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tlbnMg
PSByZXNvbHZlZERhdGEtPnRva2VucygpOwpAQCAtMjExLDcgKzIxMiw3IEBAIFJlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9w
ZXJ0eUlEIHByb3BJCiAKICAgICBpZiAodmFsdWUuaXNWYXJpYWJsZVJlZmVyZW5jZVZhbHVlKCkp
IHsKICAgICAgICAgY29uc3QgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSYgdmFsdWVXaXRoUmVm
ZXJlbmNlcyA9IGRvd25jYXN0PENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+KHZhbHVlKTsKLSAg
ICAgICAgYXV0byByZXNvbHZlZERhdGEgPSB2YWx1ZVdpdGhSZWZlcmVuY2VzLnJlc29sdmVWYXJp
YWJsZVJlZmVyZW5jZXMoc3RhdGUpOworICAgICAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHZhbHVl
V2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjYXNjYWRlKTsKICAgICAg
ICAgaWYgKCFyZXNvbHZlZERhdGEpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgcmV0dXJuIENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKHByb3BJRCwgcmVz
b2x2ZWREYXRhLT50b2tlbnMoKSwgbV9jb250ZXh0KTsKQEAgLTIyMSw5ICsyMjIsOSBAQCBSZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMo
Q1NTUHJvcGVydHlJRCBwcm9wSQogICAgIGNvbnN0IGF1dG8mIHZhbHVlV2l0aFJlZmVyZW5jZXMg
PSBXVEY6OmdldDxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KGN1c3RvbVByb3BWYWx1
ZS52YWx1ZSgpKS5nZXQoKTsKIAogICAgIGF1dG8mIG5hbWUgPSBkb3duY2FzdDxDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlPih2YWx1ZSkubmFtZSgpOwotICAgIGF1dG8qIHJlZ2lzdGVyZWQgPSBzdGF0
ZS5zdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0
eVNldCgpLmdldChuYW1lKTsKKyAgICBhdXRvKiByZWdpc3RlcmVkID0gY2FzY2FkZS5zdHlsZVJl
c29sdmVyKCkuZG9jdW1lbnQoKS5nZXRDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHlTZXQoKS5n
ZXQobmFtZSk7CiAgICAgYXV0byYgc3ludGF4ID0gcmVnaXN0ZXJlZCA/IHJlZ2lzdGVyZWQtPnN5
bnRheCA6ICIqIjsKLSAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMu
cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhzdGF0ZSk7CisgICAgYXV0byByZXNvbHZlZERhdGEg
PSB2YWx1ZVdpdGhSZWZlcmVuY2VzLnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoY2FzY2FkZSk7
CiAKICAgICBpZiAoIXJlc29sdmVkRGF0YSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0y
MzMsOSArMjM0LDkgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRo
VmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJvcEkKICAgICBDU1NQcm9wZXJ0eVBh
cnNlcjo6Y29sbGVjdFBhcnNlZEN1c3RvbVByb3BlcnR5VmFsdWVEZXBlbmRlbmNpZXMoc3ludGF4
LCBmYWxzZSwgZGVwZW5kZW5jaWVzLCByZXNvbHZlZERhdGEtPnRva2VucygpLCBtX2NvbnRleHQp
OwogCiAgICAgZm9yIChhdXRvIGlkIDogZGVwZW5kZW5jaWVzKQotICAgICAgICBzdGF0ZS5zdHls
ZVJlc29sdmVyLT5hcHBseUNhc2NhZGVkUHJvcGVydGllcyhpZCwgaWQsIHN0YXRlKTsKKyAgICAg
ICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoaWQsIGlkKTsKIAotICAgIHJldHVybiBDU1NQcm9w
ZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgc3ludGF4LCBy
ZXNvbHZlZERhdGEtPnRva2VucygpLCAqc3RhdGUuc3R5bGVSZXNvbHZlciwgbV9jb250ZXh0KTsK
KyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZh
bHVlKG5hbWUsIHN5bnRheCwgcmVzb2x2ZWREYXRhLT50b2tlbnMoKSwgY2FzY2FkZS5zdHlsZVJl
c29sdmVyKCksIG1fY29udGV4dCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8ZG91Ymxl
Pj4gQ1NTUGFyc2VyOjpwYXJzZUtleWZyYW1lS2V5TGlzdChjb25zdCBTdHJpbmcmIHNlbGVjdG9y
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKaW5kZXggZTMzMDc4OThmYWEuLmQy
Njk1NTE0ZTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKQEAgLTMwLDcg
KzMwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgQXBwbHlDYXNjYWRlZFBy
b3BlcnR5U3RhdGU7CiBjbGFzcyBDU1NQYXJzZXJPYnNlcnZlcjsKIGNsYXNzIENTU1NlbGVjdG9y
TGlzdDsKIGNsYXNzIENvbG9yOwpAQCAtNDIsNiArNDEsMTAgQEAgY2xhc3MgU3R5bGVSdWxlS2V5
ZnJhbWU7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIAor
bmFtZXNwYWNlIFN0eWxlIHsKK2NsYXNzIFByb3BlcnR5Q2FzY2FkZTsKK30KKwogY2xhc3MgQ1NT
UGFyc2VyIHsKIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIFBhcnNlUmVzdWx0IHsKQEAgLTc4LDcg
KzgxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYs
IENTU1NlbGVjdG9yTGlzdCYpOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZhbHVlV2l0
aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYsIEFwcGx5
Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZhbHVl
V2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYsIFN0
eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKTsKIAogICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNv
bnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwogICAgIHN0YXRpYyBDb2xvciBwYXJz
ZVN5c3RlbUNvbG9yKGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCmluZGV4IDUzY2Q2MDFiNTg2Li43
MTViMGYxNjhkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNj
YWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCkBA
IC0xNDAsOCArMTQwLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkQ3VlU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQogfQogI2VuZGlmCiAKLVByb3BlcnR5Q2FzY2FkZTo6UHJv
cGVydHlDYXNjYWRlKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkKLSAgICA6IG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKK1Byb3BlcnR5Q2FzY2FkZTo6UHJv
cGVydHlDYXNjYWRlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IE1hdGNoUmVz
dWx0JiBtYXRjaFJlc3VsdCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKQorICAgIDogbV9zdHlsZVJlc29sdmVyKHN0eWxlUmVzb2x2ZXIpCisgICAgLCBt
X21hdGNoUmVzdWx0KG1hdGNoUmVzdWx0KQorICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQog
ICAgICwgbV93cml0aW5nTW9kZSh3cml0aW5nTW9kZSkKIHsKIH0KQEAgLTE3NCwxNyArMTc2LDE3
IEBAIHZvaWQgUHJvcGVydHlDYXNjYWRlOjpzZXQoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUm
IGNzc1ZhbHVlLCB1bnNpZ25lZCBsaW5rTWF0CiAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Q3Vz
dG9tKSB7CiAgICAgICAgIG1fcHJvcGVydHlJc1ByZXNlbnQuc2V0KGlkKTsKICAgICAgICAgY29u
c3QgYXV0byYgY3VzdG9tVmFsdWUgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPihj
c3NWYWx1ZSk7Ci0gICAgICAgIGJvb2wgaGFzVmFsdWUgPSBjdXN0b21Qcm9wZXJ0aWVzKCkuY29u
dGFpbnMoY3VzdG9tVmFsdWUubmFtZSgpKTsKKyAgICAgICAgYm9vbCBoYXNWYWx1ZSA9IG1fY3Vz
dG9tUHJvcGVydGllcy5jb250YWlucyhjdXN0b21WYWx1ZS5uYW1lKCkpOwogICAgICAgICBpZiAo
IWhhc1ZhbHVlKSB7CiAgICAgICAgICAgICBQcm9wZXJ0eSBwcm9wZXJ0eTsKICAgICAgICAgICAg
IHByb3BlcnR5LmlkID0gaWQ7CiAgICAgICAgICAgICBtZW1zZXQocHJvcGVydHkuY3NzVmFsdWUs
IDAsIHNpemVvZihwcm9wZXJ0eS5jc3NWYWx1ZSkpOwogICAgICAgICAgICAgc2V0UHJvcGVydHlJ
bnRlcm5hbChwcm9wZXJ0eSwgaWQsIGNzc1ZhbHVlLCBsaW5rTWF0Y2hUeXBlLCBjYXNjYWRlTGV2
ZWwsIHN0eWxlU2NvcGVPcmRpbmFsKTsKLSAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMoKS5z
ZXQoY3VzdG9tVmFsdWUubmFtZSgpLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICBtX2N1c3RvbVBy
b3BlcnRpZXMuc2V0KGN1c3RvbVZhbHVlLm5hbWUoKSwgcHJvcGVydHkpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgUHJvcGVydHkgcHJvcGVydHkgPSBjdXN0b21Qcm9wZXJ0aWVzKCku
Z2V0KGN1c3RvbVZhbHVlLm5hbWUoKSk7CisgICAgICAgICAgICBQcm9wZXJ0eSBwcm9wZXJ0eSA9
IGN1c3RvbVByb3BlcnR5KGN1c3RvbVZhbHVlLm5hbWUoKSk7CiAgICAgICAgICAgICBzZXRQcm9w
ZXJ0eUludGVybmFsKHByb3BlcnR5LCBpZCwgY3NzVmFsdWUsIGxpbmtNYXRjaFR5cGUsIGNhc2Nh
ZGVMZXZlbCwgc3R5bGVTY29wZU9yZGluYWwpOwotICAgICAgICAgICAgY3VzdG9tUHJvcGVydGll
cygpLnNldChjdXN0b21WYWx1ZS5uYW1lKCksIHByb3BlcnR5KTsKKyAgICAgICAgICAgIG1fY3Vz
dG9tUHJvcGVydGllcy5zZXQoY3VzdG9tVmFsdWUubmFtZSgpLCBwcm9wZXJ0eSk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0OSw5ICsyNTEsOSBAQCBzdGF0aWMgYXV0
byYgZGVjbGFyYXRpb25zRm9yQ2FzY2FkZUxldmVsKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgQ2FzY2FkZQogICAgIHJldHVybiBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnM7
CiB9CiAKLXZvaWQgUHJvcGVydHlDYXNjYWRlOjphZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNo
UmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBpbmhl
cml0ZWRPbmx5KQordm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFkZE5vcm1hbE1hdGNoZXMoQ2FzY2Fk
ZUxldmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5KQogewotICAgIGZvciAoYXV0
byYgbWF0Y2hlZERlY2xhcmF0aW9ucyA6IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbChtYXRj
aFJlc3VsdCwgY2FzY2FkZUxldmVsKSkKKyAgICBmb3IgKGF1dG8mIG1hdGNoZWREZWNsYXJhdGlv
bnMgOiBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwobV9tYXRjaFJlc3VsdCwgY2FzY2FkZUxl
dmVsKSkKICAgICAgICAgYWRkTWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9ucywgY2FzY2FkZUxldmVs
LCBmYWxzZSwgaW5oZXJpdGVkT25seSk7CiB9CiAKQEAgLTI2NCw3ICsyNjYsNyBAQCBzdGF0aWMg
Ym9vbCBoYXNJbXBvcnRhbnRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVy
dGllcykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUHJvcGVydHlDYXNjYWRlOjphZGRJ
bXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxl
dmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5KQordm9pZCBQcm9wZXJ0eUNhc2Nh
ZGU6OmFkZEltcG9ydGFudE1hdGNoZXMoQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBp
bmhlcml0ZWRPbmx5KQogewogICAgIHN0cnVjdCBJbmRleEFuZE9yZGluYWwgewogICAgICAgICB1
bnNpZ25lZCBpbmRleDsKQEAgLTI3Myw3ICsyNzUsNyBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6
YWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIENhc2Nh
ZAogICAgIFZlY3RvcjxJbmRleEFuZE9yZGluYWw+IGltcG9ydGFudE1hdGNoZXM7CiAgICAgYm9v
bCBoYXNNYXRjaGVzRnJvbU90aGVyU2NvcGVzID0gZmFsc2U7CiAKLSAgICBhdXRvJiBtYXRjaGVk
RGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zRm9yQ2FzY2FkZUxldmVsKG1hdGNoUmVzdWx0LCBj
YXNjYWRlTGV2ZWwpOworICAgIGF1dG8mIG1hdGNoZWREZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlv
bnNGb3JDYXNjYWRlTGV2ZWwobV9tYXRjaFJlc3VsdCwgY2FzY2FkZUxldmVsKTsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkRGVjbGFyYXRpb25zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1h
dGNoZWREZWNsYXJhdGlvbnNbaV07CkBAIC0zMDIsMTQgKzMwNCwxNjUgQEAgdm9pZCBQcm9wZXJ0
eUNhc2NhZGU6OmFkZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LCBDYXNjYWQKICAgICAgICAgYWRkTWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9uc1ttYXRjaC5p
bmRleF0sIGNhc2NhZGVMZXZlbCwgdHJ1ZSwgaW5oZXJpdGVkT25seSk7CiB9CiAKLXZvaWQgUHJv
cGVydHlDYXNjYWRlOjphcHBseURlZmVycmVkUHJvcGVydGllcyhTdHlsZVJlc29sdmVyJiByZXNv
bHZlciwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIGFwcGx5U3RhdGUpCit2b2lkIFByb3Bl
cnR5Q2FzY2FkZTo6YXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoKQogewogICAgIGZvciAoYXV0byYg
cHJvcGVydHkgOiBtX2RlZmVycmVkUHJvcGVydGllcykKLSAgICAgICAgcHJvcGVydHkuYXBwbHko
cmVzb2x2ZXIsIGFwcGx5U3RhdGUpOworICAgICAgICBwcm9wZXJ0eS5hcHBseSgqdGhpcyk7CiB9
CiAKLXZvaWQgUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eTo6YXBwbHkoU3R5bGVSZXNvbHZlciYg
cmVzb2x2ZXIsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlKQordm9pZCBQ
cm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydGllcyhpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxh
c3RQcm9wZXJ0eSkKIHsKKyAgICBpZiAoTElLRUxZKG1fY3VzdG9tUHJvcGVydGllcy5pc0VtcHR5
KCkpKQorICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0aWVzSW1wbDxDdXN0b21Qcm9wZXJ0eUN5
Y2xlVHJhY2tpbmc6OkRpc2FibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHkpOworCisg
ICAgcmV0dXJuIGFwcGx5UHJvcGVydGllc0ltcGw8Q3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5n
OjpFbmFibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHkpOworfQorCit0ZW1wbGF0ZTxQ
cm9wZXJ0eUNhc2NhZGU6OkN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB0cmFja0N5Y2xlcz4K
K2lubGluZSB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0aWVzSW1wbChpbnQgZmly
c3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKGludCBpZCA9IGZpcnN0
UHJvcGVydHk7IGlkIDw9IGxhc3RQcm9wZXJ0eTsgKytpZCkgeworICAgICAgICBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQgPSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihpZCk7CisgICAgICAg
IGlmICghaGFzUHJvcGVydHkocHJvcGVydHlJRCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgQVNTRVJUKHByb3BlcnR5SUQgIT0gQ1NTUHJvcGVydHlDdXN0b20pOworICAgICAgICBh
dXRvJiBwcm9wZXJ0eSA9IG1fcHJvcGVydGllc1twcm9wZXJ0eUlEXTsKKworICAgICAgICBpZiAo
dHJhY2tDeWNsZXMgPT0gQ3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nOjpFbmFibGVkKSB7Cisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVz
LmdldChwcm9wZXJ0eUlEKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaW4gYSBjeWNs
ZSAoZWcuIHNldHRpbmcgZm9udCBzaXplIHVzaW5nIHJlZ2lzdGVyZWQgY3VzdG9tIHByb3BlcnR5
IHZhbHVlIGNvbnRhaW5pbmcgZW0pLgorICAgICAgICAgICAgICAgIC8vIFNvIHRoaXMgdmFsdWUg
c2hvdWxkIGJlIHVuc2V0LgorICAgICAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5hcHBsaWVkUHJv
cGVydGllcy5zZXQocHJvcGVydHlJRCk7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9wZXJ0
eSBpcyBpbiBhIGN5Y2xlLCBhbmQgb25seSB0aGUgcm9vdCBvZiB0aGUgY2FsbCBzdGFjayB3aWxs
IGhhdmUgZmlyc3RQcm9wZXJ0eSAhPSBsYXN0UHJvcGVydHkuCisgICAgICAgICAgICAgICAgQVNT
RVJUKGZpcnN0UHJvcGVydHkgPT0gbGFzdFByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9hcHBseVN0YXRlLmluUHJvZ3Jl
c3NQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlEKTsKKyAgICAgICAgICAgIHByb3BlcnR5LmFwcGx5
KCp0aGlzKTsKKyAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5hcHBsaWVkUHJvcGVydGllcy5zZXQo
cHJvcGVydHlJRCk7CisgICAgICAgICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRp
ZXMuc2V0KHByb3BlcnR5SUQsIGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgY3VzdG9tIHByb3BlcnRpZXMs
IHRoZW4gdGhlcmUgY2FuJ3QgYmUgYW55IGN5Y2xlcy4KKyAgICAgICAgcHJvcGVydHkuYXBwbHko
KnRoaXMpOworICAgIH0KK30KKwordm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5Q3VzdG9tUHJv
cGVydGllcygpCit7CisgICAgZm9yIChhdXRvJiBuYW1lIDogbV9jdXN0b21Qcm9wZXJ0aWVzLmtl
eXMoKSkKKyAgICAgICAgYXBwbHlDdXN0b21Qcm9wZXJ0eShuYW1lKTsKK30KKwordm9pZCBQcm9w
ZXJ0eUNhc2NhZGU6OmFwcGx5Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIGlmIChtX2FwcGx5U3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFt
ZSkgfHwgIW1fY3VzdG9tUHJvcGVydGllcy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byBwcm9wZXJ0eSA9IGN1c3RvbVByb3BlcnR5KG5hbWUpOworICAgIGJvb2wg
aW5DeWNsZSA9IG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250YWlu
cyhuYW1lKTsKKworICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRj
aERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoVmlzaXRlZCB9KSB7CisgICAgICAgIGlmICghcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmRleCAhPSBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoRGVmYXVsdCAmJiBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zdHlsZSgpLT5pbnNp
ZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlVG9BcHBseSA9IENT
U0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZh
bHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7CisKKyAgICAgICAgaWYgKGluQ3ljbGUp
IHsKKyAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5hcHBsaWVkQ3VzdG9tUHJvcGVydGllcy5hZGQo
bmFtZSk7IC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdHJ5IHRvIGFwcGx5IHRoaXMgcHJvcGVydHkg
YWdhaW4gd2hpbGUgcmVzb2x2aW5nIGl0LgorICAgICAgICAgICAgdmFsdWVUb0FwcGx5ID0gQ1NT
Q3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlV2l0aElEKG5hbWUsIENTU1ZhbHVlSW52YWxpZCk7
CisgICAgICAgIH0KKworICAgICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXND
dXN0b20uYWRkKG5hbWUpOworCisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJl
ZjxDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlPj4odmFsdWVUb0FwcGx5LT52YWx1ZSgpKSkgewor
ICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZSA9IG1fc3R5bGVSZXNvbHZl
ci5yZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5n
ZXQoKSwgKnRoaXMpOworCisgICAgICAgICAgICBpZiAobV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0
b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsgLy8g
VGhlcmUgd2FzIGEgY3ljbGUgYW5kIHRoZSB2YWx1ZSB3YXMgcmVzZXQsIHNvIGJhaWwuCisKKyAg
ICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCisgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUg
PSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVXaXRoSUQobmFtZSwgQ1NTVmFsdWVVbnNl
dCk7CisKKyAgICAgICAgICAgIHZhbHVlVG9BcHBseSA9IGRvd25jYXN0PENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU+KCpwYXJzZWRWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9hcHBs
eVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tLmNvbnRhaW5zKG5hbWUpKSB7CisgICAg
ICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpIHsKKyAg
ICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRl
KCkuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGlu
aykgeworICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNldEFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2
ZXIuc3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hWaXNpdGVkKSB7CisgICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCku
c2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBt
X3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5wdHIoKSwgKnRoaXMsIGlu
ZGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJv
cGVydGllc0N1c3RvbS5yZW1vdmUobmFtZSk7CisgICAgbV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0
b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsKKworICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0
b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7CisgICAgICAgIGlmICghcHJvcGVydHkuY3Nz
VmFsdWVbaW5kZXhdKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmRleCAh
PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUo
KS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZh
bHVlVG9BcHBseSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7CisKKyAgICAg
ICAgaWYgKGluQ3ljbGUgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Q1NTVmFyaWFibGVS
ZWZlcmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIC8v
IFJlc29sdmUgdGhpcyB2YWx1ZSBzbyB0aGF0IHdlIHJlc2V0IGl0cyBkZXBlbmRlbmNpZXMuCisg
ICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIucmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3Bl
cnR5Q3VzdG9tLCB2YWx1ZVRvQXBwbHkuZ2V0KCksICp0aGlzKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworUHJvcGVydHlDYXNjYWRlKiBQcm9wZXJ0eUNhc2NhZGU6OnByb3BlcnR5Q2FzY2FkZUZv
clJvbGxiYWNrKENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwpCit7CisgICAgc3dpdGNoIChjYXNj
YWRlTGV2ZWwpIHsKKyAgICBjYXNlIENhc2NhZGVMZXZlbDo6QXV0aG9yOgorICAgICAgICBpZiAo
IW1fYXV0aG9yUm9sbGJhY2tDYXNjYWRlKSB7CisgICAgICAgICAgICBtX2F1dGhvclJvbGxiYWNr
Q2FzY2FkZSA9IG1ha2VVbmlxdWU8UHJvcGVydHlDYXNjYWRlPihtX3N0eWxlUmVzb2x2ZXIsIG1f
bWF0Y2hSZXN1bHQsIG1fZGlyZWN0aW9uLCBtX3dyaXRpbmdNb2RlKTsKKworICAgICAgICAgICAg
Ly8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNhc2NhZGUgY29udGFpbnMgVUEgcnVsZXMgYW5kIHVz
ZXIgcnVsZXMgYnV0IG5vIGF1dGhvciBydWxlcy4KKyAgICAgICAgICAgIG1fYXV0aG9yUm9sbGJh
Y2tDYXNjYWRlLT5hZGROb3JtYWxNYXRjaGVzKENhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBmYWxz
ZSk7CisgICAgICAgICAgICBtX2F1dGhvclJvbGxiYWNrQ2FzY2FkZS0+YWRkTm9ybWFsTWF0Y2hl
cyhDYXNjYWRlTGV2ZWw6OlVzZXIsIGZhbHNlKTsKKyAgICAgICAgICAgIG1fYXV0aG9yUm9sbGJh
Y2tDYXNjYWRlLT5hZGRJbXBvcnRhbnRNYXRjaGVzKENhc2NhZGVMZXZlbDo6VXNlciwgZmFsc2Up
OworICAgICAgICAgICAgbV9hdXRob3JSb2xsYmFja0Nhc2NhZGUtPmFkZEltcG9ydGFudE1hdGNo
ZXMoQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnQsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbV9hdXRob3JSb2xsYmFja0Nhc2NhZGUuZ2V0KCk7CisKKyAgICBjYXNlIENhc2NhZGVM
ZXZlbDo6VXNlcjoKKyAgICAgICAgaWYgKCFtX3VzZXJSb2xsYmFja0Nhc2NhZGUpIHsKKyAgICAg
ICAgICAgIG1fdXNlclJvbGxiYWNrQ2FzY2FkZSA9IG1ha2VVbmlxdWU8UHJvcGVydHlDYXNjYWRl
PihtX3N0eWxlUmVzb2x2ZXIsIG1fbWF0Y2hSZXN1bHQsIG1fZGlyZWN0aW9uLCBtX3dyaXRpbmdN
b2RlKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNhc2NhZGUgY29u
dGFpbnMgb25seSBVQSBydWxlcy4KKyAgICAgICAgICAgIG1fdXNlclJvbGxiYWNrQ2FzY2FkZS0+
YWRkTm9ybWFsTWF0Y2hlcyhDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOworICAgICAg
ICAgICAgbV91c2VyUm9sbGJhY2tDYXNjYWRlLT5hZGRJbXBvcnRhbnRNYXRjaGVzKENhc2NhZGVM
ZXZlbDo6VXNlckFnZW50LCBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fdXNl
clJvbGxiYWNrQ2FzY2FkZS5nZXQoKTsKKworICAgIGNhc2UgQ2FzY2FkZUxldmVsOjpVc2VyQWdl
bnQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5Ojph
cHBseShQcm9wZXJ0eUNhc2NhZGUmIGNhc2NhZGUpCit7CisgICAgYXV0byYgcmVzb2x2ZXIgPSBj
YXNjYWRlLnN0eWxlUmVzb2x2ZXIoKTsKICAgICBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUg
PSByZXNvbHZlci5zdGF0ZSgpOwogICAgIHN0YXRlLnNldENhc2NhZGVMZXZlbChsZXZlbCk7CiAg
ICAgc3RhdGUuc2V0U3R5bGVTY29wZU9yZGluYWwoc3R5bGVTY29wZU9yZGluYWwpOwpAQCAtMzE3
LDcgKzQ3MCw3IEBAIHZvaWQgUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eTo6YXBwbHkoU3R5bGVS
ZXNvbHZlciYgcmVzb2x2ZXIsIEFwcGx5Q2FzY2FkZWRQcm9wCiAgICAgaWYgKGNzc1ZhbHVlW1Nl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0XSkgewogICAgICAgICBzdGF0ZS5zZXRBcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7CiAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwotICAgICAgICByZXNvbHZlci5hcHBseVByb3Bl
cnR5KGlkLCBjc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdF0sIGFwcGx5U3Rh
dGUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKyAgICAgICAgcmVzb2x2ZXIuYXBw
bHlQcm9wZXJ0eShpZCwgY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHRdLCBj
YXNjYWRlLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCk7CiAgICAgfQogCiAgICAgaWYg
KHN0YXRlLnN0eWxlKCktPmluc2lkZUxpbmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCkBA
IC0zMjYsMTMgKzQ3OSwxMyBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHk6OmFwcGx5
KFN0eWxlUmVzb2x2ZXImIHJlc29sdmVyLCBBcHBseUNhc2NhZGVkUHJvcAogICAgIGlmIChjc3NW
YWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGlua10pIHsKICAgICAgICAgc3RhdGUuc2V0QXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwogICAgICAgICBzdGF0ZS5zZXRBcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKLSAgICAgICAgcmVzb2x2ZXIuYXBwbHlQ
cm9wZXJ0eShpZCwgY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmtdLCBhcHBseVN0
YXRlLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7CisgICAgICAgIHJlc29sdmVyLmFwcGx5
UHJvcGVydHkoaWQsIGNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rXSwgY2FzY2Fk
ZSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmspOwogICAgIH0KIAogICAgIGlmIChjc3NWYWx1
ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZF0pIHsKICAgICAgICAgc3RhdGUuc2V0QXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGZhbHNlKTsKICAgICAgICAgc3RhdGUuc2V0QXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSh0cnVlKTsKLSAgICAgICAgcmVzb2x2ZXIuYXBwbHlQ
cm9wZXJ0eShpZCwgY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWRdLCBhcHBs
eVN0YXRlLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7CisgICAgICAgIHJlc29sdmVy
LmFwcGx5UHJvcGVydHkoaWQsIGNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVk
XSwgY2FzY2FkZSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpOwogICAgIH0KIAogICAg
IHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUv
c3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKaW5kZXggNGU5ZDYyYTkyZGIuLmJlYmM2MmYzNWVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaApAQCAtMzIsNyArMzIsNiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTdHlsZVJlc29sdmVyOwotc3RydWN0IEFwcGx5
Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlOwogCiBuYW1lc3BhY2UgU3R5bGUgewogCkBAIC00NSw0NCAr
NDQsNzQgQEAgZW51bSBjbGFzcyBDYXNjYWRlTGV2ZWwgOiB1aW50OF90IHsKIGNsYXNzIFByb3Bl
cnR5Q2FzY2FkZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
UHJvcGVydHlDYXNjYWRlKFRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlKTsKKyAgICBQcm9wZXJ0
eUNhc2NhZGUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgVGV4dERpcmVjdGlv
biwgV3JpdGluZ01vZGUpOwogICAgIH5Qcm9wZXJ0eUNhc2NhZGUoKTsKIAorICAgIFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIoKSB7IHJldHVybiBtX3N0eWxlUmVzb2x2ZXI7IH0KKwogICAg
IHN0cnVjdCBQcm9wZXJ0eSB7Ci0gICAgICAgIHZvaWQgYXBwbHkoU3R5bGVSZXNvbHZlciYsIEFw
cGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7CisgICAgICAgIHZvaWQgYXBwbHkoUHJvcGVydHlD
YXNjYWRlJik7CiAKICAgICAgICAgQ1NTUHJvcGVydHlJRCBpZDsKICAgICAgICAgQ2FzY2FkZUxl
dmVsIGxldmVsOwogICAgICAgICBTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWw7Ci0gICAg
ICAgIENTU1ZhbHVlKiBjc3NWYWx1ZVszXTsKKyAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlWzNd
OyAvLyBWYWx1ZXMgZm9yIGxpbmsgbWF0Y2ggc3RhdGVzIE1hdGNoRGVmYXVsdCwgTWF0Y2hMaW5r
IGFuZCBNYXRjaFZpc2l0ZWQKICAgICB9OwogCiAgICAgYm9vbCBoYXNQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEKSBjb25zdDsKICAgICBQcm9wZXJ0eSYgcHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAK
LSAgICB2b2lkIGFkZE5vcm1hbE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBDYXNjYWRlTGV2
ZWwsIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlKTsKLSAgICB2b2lkIGFkZEltcG9ydGFudE1h
dGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVkT25s
eSA9IGZhbHNlKTsKLQotICAgIHZvaWQgYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoU3R5bGVSZXNv
bHZlciYsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7Ci0KLSAgICBIYXNoTWFwPEF0b21T
dHJpbmcsIFByb3BlcnR5PiYgY3VzdG9tUHJvcGVydGllcygpIHsgcmV0dXJuIG1fY3VzdG9tUHJv
cGVydGllczsgfQogICAgIGJvb2wgaGFzQ3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJikgY29u
c3Q7CiAgICAgUHJvcGVydHkgY3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAK
KyAgICB2b2lkIGFkZE5vcm1hbE1hdGNoZXMoQ2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9u
bHkgPSBmYWxzZSk7CisgICAgdm9pZCBhZGRJbXBvcnRhbnRNYXRjaGVzKENhc2NhZGVMZXZlbCwg
Ym9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOworCisgICAgYm9vbCBoYXNBcHBsaWVkUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCkgY29uc3Q7CisKKyAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhpbnQg
Zmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSk7CisgICAgdm9pZCBhcHBseURlZmVycmVk
UHJvcGVydGllcygpOworCisgICAgdm9pZCBhcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKKyAgICB2
b2lkIGFwcGx5Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIFByb3Bl
cnR5Q2FzY2FkZSogcHJvcGVydHlDYXNjYWRlRm9yUm9sbGJhY2soQ2FzY2FkZUxldmVsKTsKKwog
cHJpdmF0ZToKICAgICB2b2lkIGFkZE1hdGNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgQ2Fz
Y2FkZUxldmVsLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkpOwogICAgIHZv
aWQgc2V0KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwg
Q2FzY2FkZUxldmVsLCBTY29wZU9yZGluYWwpOwogICAgIHZvaWQgc2V0RGVmZXJyZWQoQ1NTUHJv
cGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWws
IFNjb3BlT3JkaW5hbCk7CiAgICAgc3RhdGljIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChQcm9w
ZXJ0eSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwg
Q2FzY2FkZUxldmVsLCBTY29wZU9yZGluYWwpOwogCisgICAgZW51bSBDdXN0b21Qcm9wZXJ0eUN5
Y2xlVHJhY2tpbmcgeyBFbmFibGVkID0gMCwgRGlzYWJsZWQgfTsKKyAgICB0ZW1wbGF0ZTxDdXN0
b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmcgdHJhY2tDeWNsZXM+CisgICAgdm9pZCBhcHBseVByb3Bl
cnRpZXNJbXBsKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5KTsKKworICAgIFN0
eWxlUmVzb2x2ZXImIG1fc3R5bGVSZXNvbHZlcjsKKyAgICBjb25zdCBNYXRjaFJlc3VsdCYgbV9t
YXRjaFJlc3VsdDsKKworICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247CisgICAgV3JpdGlu
Z01vZGUgbV93cml0aW5nTW9kZTsKKwogICAgIFByb3BlcnR5IG1fcHJvcGVydGllc1tudW1DU1NQ
cm9wZXJ0aWVzICsgMl07CiAgICAgc3RkOjpiaXRzZXQ8bnVtQ1NTUHJvcGVydGllcyArIDI+IG1f
cHJvcGVydHlJc1ByZXNlbnQ7CiAKICAgICBWZWN0b3I8UHJvcGVydHksIDg+IG1fZGVmZXJyZWRQ
cm9wZXJ0aWVzOwogICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUHJvcGVydHk+IG1fY3VzdG9tUHJv
cGVydGllczsKIAotICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0gICAgV3JpdGluZ01v
ZGUgbV93cml0aW5nTW9kZTsKKyAgICAvLyBTdGF0ZSB0byB1c2Ugd2hlbiBhcHBseWluZyBwcm9w
ZXJ0aWVzLCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGN1c3RvbSBhbmQgaGlnaC1wcmlvcml0eQor
ICAgIC8vIHByb3BlcnRpZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgorICAgIHN0cnVjdCBBcHBseVN0
YXRlIHsKKyAgICAgICAgQml0bWFwPG51bUNTU1Byb3BlcnRpZXM+IGFwcGxpZWRQcm9wZXJ0aWVz
ID0geyB9OworICAgICAgICBIYXNoU2V0PFN0cmluZz4gYXBwbGllZEN1c3RvbVByb3BlcnRpZXMg
PSB7IH07CisgICAgICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBpblByb2dyZXNzUHJvcGVy
dGllcyA9IHsgfTsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVz
Q3VzdG9tID0geyB9OworICAgIH07CisKKyAgICBBcHBseVN0YXRlIG1fYXBwbHlTdGF0ZTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eUNhc2NhZGU+IG1fYXV0aG9yUm9sbGJhY2tDYXNj
YWRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eUNhc2NhZGU+IG1fdXNlclJvbGxiYWNr
Q2FzY2FkZTsKIH07CiAKIGlubGluZSBib29sIFByb3BlcnR5Q2FzY2FkZTo6aGFzUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCkgY29uc3QKQEAgLTEwNiw1ICsxMzUsMTAgQEAgaW5saW5lIFByb3Bl
cnR5Q2FzY2FkZTo6UHJvcGVydHkgUHJvcGVydHlDYXNjYWRlOjpjdXN0b21Qcm9wZXJ0eShjb25z
dCBTdHJpbmcmIG4KICAgICByZXR1cm4gbV9jdXN0b21Qcm9wZXJ0aWVzLmdldChuYW1lKTsKIH0K
IAoraW5saW5lIGJvb2wgUHJvcGVydHlDYXNjYWRlOjpoYXNBcHBsaWVkUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlEKSBjb25zdAoreworICAgIHJldHVybiBtX2FwcGx5U3RhdGUuYXBw
bGllZFByb3BlcnRpZXMuZ2V0KHByb3BlcnR5SUQpOworfQorCiB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381924</attachid>
            <date>2019-10-25 08:13:38 -0700</date>
            <delta_ts>2019-10-25 16:22:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>more-propertycascade-4.patch</filename>
            <type>text/plain</type>
            <size>57556</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MzgyZDIyN2E4MS4uZThhOTE4MmNmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxOS0xMC0yNSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBtb3JlIGNhc2NhZGUgcmVsYXRlZCBjb2RlIGZyb20gU3R5bGVSZXNv
bHZlciB0byBQcm9wZXJ0eUNhc2NhZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMzQwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gTW92ZSBhIGJ1bmNoIG9mIFN0eWxlUmVzb2x2ZXIgbWVtYmVyIGZ1
bmN0aW9ucyB0byBQcm9wZXJ0eUNhc2NhZGUuCisgICAgICAgIC0gTWFrZSBBcHBseUNhc2NhZGVk
UHJvcGVydHlTdGF0ZSBwYXJ0IG9mIHRoZSBQcm9wZXJ0eUNhc2NhZGUgaW50ZXJuYWwgc3RhdGUu
CisgICAgICAgIC0gUGFzcyBhcm91bmQgYSByZWZlcmVuY2UgdG8gdGhlIFByb3BlcnR5Q2FzY2Fk
ZSBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgc3RhdGUgb2JqZWN0CisgICAgICAgICAgVGhlIHN0YXRl
IGNvbnRhaW5lZCBQcm9wZXJ0eUNhc2NhZGUgbWVtYmVyIGFscmVhZHkgc28gdGhpcyBpcyBlcXVp
dmFsZW50IGJ1dCBzaW1wbGVyLgorCisgICAgICAgICogY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNl
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVZhcmlhYmxlRmFsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OnJlc29sdmVUb2tlblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWU6OnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMgY29uc3QpOgorICAgICAg
ICAqIGNzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmg6CisgICAgICAgICogY3NzL0VsZW1l
bnRSdWxlQ29sbGVjdG9yLmg6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2FzY2FkZWRQcm9wZXJ0aWVzRm9yUm9sbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlDYXNjYWRl
ZEN1c3RvbVByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzSW1wbCk6IERlbGV0ZWQuCisK
KyAgICAgICAgVGhlc2UgYmVjb21lIFByb3BlcnR5Q2FzY2FkZSBtZW1iZXJzLgorCisgICAgICAg
ICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OlN0YXRlOjphdXRob3JSb2xsYmFjayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6dXNlclJvbGxiYWNrIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRBdXRob3JSb2xsYmFjayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VXNl
clJvbGxiYWNrKTogRGVsZXRlZC4KKworICAgICAgICBSb2xsYmFja3MgYXJlIG5vdyBvd25lZCBi
eSBQcm9wZXJ0eUNhc2NhZGUuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZl
cmVuY2VzKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAqIHN0
eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OmFkZE5vcm1hbE1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZTo6YWRkSW1wb3J0YW50TWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseURlZmVycmVkUHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0aWVzSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseUN1c3RvbVBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBw
bHlDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjpwcm9wZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eTo6YXBwbHkpOgorICAgICAgICAqIHN0eWxlL1By
b3BlcnR5Q2FzY2FkZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZTo6c3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjpoYXNBcHBsaWVkUHJvcGVydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OlByb3BlcnR5Q2FzY2FkZTo6Y3VzdG9tUHJvcGVydGllcyk6IERlbGV0ZWQuCisKIDIwMTktMTAt
MjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEYXRhYmFzZUNv
bnRleHQgc2hvdWxkIG5vdCBwcmV2ZW50IGVudGVyaW5nIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcApp
bmRleCA5NGQ2M2EzYjU4OS4uZjg0YjhiNmU5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmgiCiAK
KyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIApAQCAtNDQsMjEgKzQ1LDIxIEBAIFN0cmluZyBD
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKICAgICByZXR1
cm4gbV9zdHJpbmdWYWx1ZTsKIH0KIAotc3RhdGljIGJvb2wgcmVzb2x2ZVRva2VuUmFuZ2UoQ1NT
UGFyc2VyVG9rZW5SYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYsIEFwcGx5Q2FzY2FkZWRQ
cm9wZXJ0eVN0YXRlJik7CitzdGF0aWMgYm9vbCByZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJU
b2tlblJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiwgU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSYpOwogCi1zdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVGYWxsYmFjayhDU1NQYXJzZXJUb2tl
blJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQsIEFwcGx5Q2FzY2Fk
ZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBib29sIHJlc29sdmVWYXJpYWJsZUZhbGxi
YWNrKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJl
c3VsdCwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKICAgICBpZiAocmFuZ2Uu
YXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IENvbW1hVG9rZW4pOwogICAgIHJhbmdlLmNvbnN1bWUoKTsKLSAgICByZXR1cm4g
cmVzb2x2ZVRva2VuUmFuZ2UocmFuZ2UsIHJlc3VsdCwgc3RhdGUpOworICAgIHJldHVybiByZXNv
bHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzdWx0LCBjYXNjYWRlKTsKIH0KIAotc3RhdGljIGJvb2wg
cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3Rv
cjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0
YXRlKQorc3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2Vu
UmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKLSAgICBhdXRvJiByZWdpc3RlcmVkUHJvcGVydGllcyA9
IHN0YXRlLnN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVBy
b3BlcnR5U2V0KCk7Ci0gICAgYXV0byYgc3R5bGUgPSAqc3RhdGUuc3R5bGVSZXNvbHZlci0+c3R5
bGUoKTsKKyAgICBhdXRvJiByZWdpc3RlcmVkUHJvcGVydGllcyA9IGNhc2NhZGUuc3R5bGVSZXNv
bHZlcigpLmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5U2V0KCk7Cisg
ICAgYXV0byYgc3R5bGUgPSAqY2FzY2FkZS5zdHlsZVJlc29sdmVyKCkuc3R5bGUoKTsKIAogICAg
IHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gSWRlbnRUb2tlbik7CkBAIC02NiwxMSArNjcsMTEgQEAgc3RhdGljIGJvb2wgcmVzb2x2
ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQ
YXJzZXIKICAgICBBU1NFUlQocmFuZ2UuYXRFbmQoKSB8fCAocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBDb21tYVRva2VuKSk7CiAKICAgICAvLyBBcHBseSB0aGlzIHZhcmlhYmxlIGZpcnN0LCBpbiBj
YXNlIGl0IGlzIHN0aWxsIHVucmVzb2x2ZWQKLSAgICBzdGF0ZS5zdHlsZVJlc29sdmVyLT5hcHBs
eUNhc2NhZGVkQ3VzdG9tUHJvcGVydHkodmFyaWFibGVOYW1lLCBzdGF0ZSk7CisgICAgY2FzY2Fk
ZS5hcHBseUN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CiAKICAgICAvLyBBcHBseSBmYWxs
YmFjayB0byBkZXRlY3QgY3ljbGVzCiAgICAgVmVjdG9yPENTU1BhcnNlclRva2VuPiBmYWxsYmFj
a1Jlc3VsdDsKLSAgICBib29sIGZhbGxiYWNrUmV0dXJuID0gcmVzb2x2ZVZhcmlhYmxlRmFsbGJh
Y2soQ1NTUGFyc2VyVG9rZW5SYW5nZShyYW5nZSksIGZhbGxiYWNrUmVzdWx0LCBzdGF0ZSk7Cisg
ICAgYm9vbCBmYWxsYmFja1JldHVybiA9IHJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKENTU1BhcnNl
clRva2VuUmFuZ2UocmFuZ2UpLCBmYWxsYmFja1Jlc3VsdCwgY2FzY2FkZSk7CiAKICAgICBhdXRv
KiBwcm9wZXJ0eSA9IHN0eWxlLmdldEN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CiAKQEAg
LTkyLDI0ICs5MywyNCBAQCBzdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoQ1NT
UGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlcgogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgYm9vbCByZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJUb2tlblJhbmdl
IHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQsIEFwcGx5Q2FzY2FkZWRQcm9w
ZXJ0eVN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBib29sIHJlc29sdmVUb2tlblJhbmdlKENTU1BhcnNl
clRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwog
ICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgewogICAgICAgICBpZiAocmFuZ2UucGVlaygpLmZ1
bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVZhciB8fCByYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09
IENTU1ZhbHVlRW52KQotICAgICAgICAgICAgc3VjY2VzcyAmPSByZXNvbHZlVmFyaWFibGVSZWZl
cmVuY2UocmFuZ2UuY29uc3VtZUJsb2NrKCksIHJlc3VsdCwgc3RhdGUpOworICAgICAgICAgICAg
c3VjY2VzcyAmPSByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UocmFuZ2UuY29uc3VtZUJsb2NrKCks
IHJlc3VsdCwgY2FzY2FkZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocmFuZ2UuY29uc3VtZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLVJl
ZlB0cjxDU1NWYXJpYWJsZURhdGE+IENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU6OnJlc29sdmVW
YXJpYWJsZVJlZmVyZW5jZXMoQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIHN0YXRlKSBjb25z
dAorUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZTo6cmVz
b2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKSBj
b25zdAogewogICAgIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tlbnM7CiAgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSA9IG1fZGF0YS0+dG9rZW5SYW5nZSgpOwogCi0gICAg
aWYgKCFyZXNvbHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzb2x2ZWRUb2tlbnMsIHN0YXRlKSkKKyAg
ICBpZiAoIXJlc29sdmVUb2tlblJhbmdlKHJhbmdlLCByZXNvbHZlZFRva2VucywgY2FzY2FkZSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIENTU1ZhcmlhYmxlRGF0YTo6
Y3JlYXRlKHJlc29sdmVkVG9rZW5zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFi
bGVSZWZlcmVuY2VWYWx1ZS5oCmluZGV4IGQ3MGUzMjdjMTA2Li45YTEyMGMzNjc3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oCkBAIC0zOSw5
ICszOSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBBcHBseUNhc2NhZGVk
UHJvcGVydHlTdGF0ZTsKIGNsYXNzIENTU1BhcnNlclRva2VuUmFuZ2U7CiAKK25hbWVzcGFjZSBT
dHlsZSB7CitjbGFzcyBQcm9wZXJ0eUNhc2NhZGU7Cit9CisKIGNsYXNzIENTU1ZhcmlhYmxlUmVm
ZXJlbmNlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4gY3JlYXRlKGNvbnN0IENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQpAQCAtNTIsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBlcXVhbHMoY29u
c3QgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS5nZXQoKSA9PSBvdGhlci5tX2RhdGEuZ2V0KCk7IH0KICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4
dCgpIGNvbnN0OwogCi0gICAgUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gcmVzb2x2ZVZhcmlhYmxl
UmVmZXJlbmNlcyhBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpIGNvbnN0OworICAgIFJlZlB0
cjxDU1NWYXJpYWJsZURhdGE+IHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIENTU1ZhcmlhYmxlUmVmZXJlbmNl
VmFsdWUoUmVmPENTU1ZhcmlhYmxlRGF0YT4mJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuaAppbmRleCA1ZTUzNTMxOGJjMi4uZGJhOGU5NTMxMWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCkBAIC0yMiw2ICsyMiw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNs
dWRlICJSdWxlU2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCiAjaW5jbHVkZSAi
U3R5bGVTY29wZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTMyLDggKzMzLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudFJ1bGVTZXRzOwogY2xhc3MgTWF0Y2hSZXF1
ZXN0OwotY2xhc3MgUnVsZURhdGE7Ci1jbGFzcyBSdWxlU2V0OwogY2xhc3MgU2VsZWN0b3JGaWx0
ZXI7CiAKIGNsYXNzIFBzZXVkb1N0eWxlUmVxdWVzdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKaW5kZXggZmU2YjZkOThlN2UuLjFmODZiZDdlMzEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSAiUGFnZVJ1bGVD
b2xsZWN0b3IuaCIKICNpbmNsdWRlICJQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oIgogI2luY2x1
ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJRdWly
a3MuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZUNvbnN0YW50cy5oIgpAQCAtMzczLDI0ICszNzQsMjMgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxl
KgogCiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5j
ZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCiAgICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRv
IG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KLSAgICBTdHlsZTo6
UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgY2Fz
Y2FkZS5hZGROb3JtYWxNYXRjaGVzKHJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9y
KTsKKyAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIHJlc3VsdCwgZGly
ZWN0aW9uLCB3cml0aW5nTW9kZSk7CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxl
OjpDYXNjYWRlTGV2ZWw6OkF1dGhvcik7CiAKLSAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0
ZSBhcHBseVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZyZXN1bHQgfTsKLSAgICBhcHBseUNhc2Nh
ZGVkUHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHks
IGFwcGx5U3RhdGUpOworICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVy
dHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3Qg
ZGlydGllZCwgdXBkYXRlIGl0IG5vdy4KICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBOb3cg
cmVzb2x2ZSByZW1haW5pbmcgY3VzdG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkg
b3JkZXIKLSAgICBmb3IgKGF1dG8gaXQgPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdp
bigpOyBpdCAhPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAg
ICAgYXBwbHlDYXNjYWRlZEN1c3RvbVByb3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAg
IGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENT
U1Byb3BlcnR5LCBhcHBseVN0YXRlKTsKKyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGll
cygpOworCisgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3Bl
cnR5LCBsYXN0Q1NTUHJvcGVydHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQg
Ynkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIHVwZGF0ZSBpdCBhIHNlY29u
ZCB0aW1lLgogICAgIHVwZGF0ZUZvbnQoKTsKIAotICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFBy
b3BlcnRpZXMoKnRoaXMsIGFwcGx5U3RhdGUpOworICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFBy
b3BlcnRpZXMoKTsKIAogICAgIGFkanVzdFJlbmRlclN0eWxlKCpzdGF0ZS5zdHlsZSgpLCAqc3Rh
dGUucGFyZW50U3R5bGUoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAKQEAgLTU3OSwyMSArNTc5LDIw
IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQ
YWdlKGludCBwYWdlSW5kZXgpCiAgICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGU7CiAgICAgZXh0
cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCptX3N0YXRlLnN0eWxlKCksIHJlc3VsdCwgZGly
ZWN0aW9uLCB3cml0aW5nTW9kZSk7CiAKLSAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2Nh
ZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVz
KHJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yKTsKKyAgICBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIHJlc3VsdCwgZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7
CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OkF1dGhv
cik7CiAKLSAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBhcHBseVN0YXRlIHsgdGhpcywg
JmNhc2NhZGUsICZyZXN1bHQgfTsKLSAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhmaXJzdENT
U1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHksIGFwcGx5U3RhdGUpOworICAgIGNh
c2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQ
cm9wZXJ0eSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgdXBkYXRlIGl0IG5v
dy4KICAgICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3Vz
dG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKLSAgICBmb3IgKGF1dG8g
aXQgPSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdpbigpOyBpdCAhPSBjYXNjYWRlLmN1
c3RvbVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3Rv
bVByb3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0
aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5LCBhcHBseVN0YXRl
KTsKKyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOworCisgICAgY2FzY2FkZS5h
cHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkp
OwogCi0gICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygqdGhpcywgYXBwbHlTdGF0
ZSk7CisgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCiAgICAgLy8gTm93
IHJldHVybiB0aGUgc3R5bGUuCiAgICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CkBAIC0x
MzgyLDUyICsxMzgxLDQ4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIEZp
bmQgb3V0IGlmIHRoZXJlJ3MgYSAtd2Via2l0LWFwcGVhcmFuY2UgcHJvcGVydHkgaW4gZWZmZWN0
IGZyb20gdGhlIFVBIHNoZWV0LgogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJvcmRl
ciBhbmQgYmFja2dyb3VuZCBzdHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUo
KQogICAgICAgICAvLyBjYW4gbG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYgdGhp
cyBpcyBhIHN0eWxlZCBmb3JtIGNvbnRyb2wgb3Igbm90LgotICAgICAgICBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlIGNhc2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Ci0gICAgICAgIGNhc2Nh
ZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNl
ckFnZW50LCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgICAgICBjYXNjYWRlLmFkZEltcG9ydGFu
dE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKLQotICAgICAgICBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSBh
cHBseVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZtYXRjaFJlc3VsdCB9OworICAgICAgICBTdHls
ZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24s
IHdyaXRpbmdNb2RlKTsKKyAgICAgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKFN0eWxlOjpD
YXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgY2Fz
Y2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKIAotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhD
U1NQcm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRp
b24sIGFwcGx5U3RhdGUpOworICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQcm9w
ZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24pOwog
ICAgICAgICBhZGp1c3RTdHlsZUZvckludGVyQ2hhcmFjdGVyUnVieSgpOwogCiAjaWYgRU5BQkxF
KERBUktfTU9ERV9DU1MpCiAgICAgICAgIC8vIFN1cHBvcnRlZCBjb2xvciBzY2hlbWVzIGNhbiBh
ZmZlY3QgcmVzb2x2ZWQgY29sb3JzLCBzbyB3ZSBuZWVkIHRvIGFwcGx5IHRoYXQgcHJvcGVydHkg
YmVmb3JlIGFueSBjb2xvciBwcm9wZXJ0aWVzLgotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVy
dGllcyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBhcHBs
eVN0YXRlKTsKKyAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoQ1NTUHJvcGVydHlDb2xv
clNjaGVtZSwgQ1NTUHJvcGVydHlDb2xvclNjaGVtZSk7CiAjZW5kaWYKIAotICAgICAgICBhcHBs
eUNhc2NhZGVkUHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJv
cGVydHksIGFwcGx5U3RhdGUpOworICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJz
dENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgICAgIC8vIElm
IG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUgaXQgbm93LgogICAgICAgICB1cGRhdGVGb250
KCk7CiAKICAgICAgICAgLy8gTm93IHJlc29sdmUgcmVtYWluaW5nIGN1c3RvbSBwcm9wZXJ0aWVz
IGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCi0gICAgICAgIGZvciAoYXV0byBpdCA9IGNhc2Nh
ZGUuY3VzdG9tUHJvcGVydGllcygpLmJlZ2luKCk7IGl0ICE9IGNhc2NhZGUuY3VzdG9tUHJvcGVy
dGllcygpLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3RvbVByb3Bl
cnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgICAgICBhcHBseUNhc2NhZGVkUHJvcGVydGll
cyhmaXJzdExvd1ByaW9yaXR5UHJvcGVydHksIGxhc3RDU1NQcm9wZXJ0eSwgYXBwbHlTdGF0ZSk7
CisgICAgICAgIGNhc2NhZGUuYXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7CisKKyAgICAgICAgY2Fz
Y2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJv
cGVydHkpOwogCiAgICAgICAgIHN0YXRlLmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogICAg
IH0KIAotICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUgY2FzY2FkZShkaXJlY3Rpb24sIHdyaXRp
bmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxl
OjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNj
YWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVz
ZXIsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1h
dGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJpdGVkT25s
eSk7Ci0gICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBTdHlsZTo6
Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgY2FzY2FkZS5h
ZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2Vy
LCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyht
YXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBhcHBseUluaGVyaXRl
ZE9ubHkpOwotCi0gICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRo
aXMsICZjYXNjYWRlLCAmbWF0Y2hSZXN1bHQgfTsKKyAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRl
IGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKKyAg
ICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50
LCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhTdHls
ZTo6Q2FzY2FkZUxldmVsOjpVc2VyLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUu
YWRkTm9ybWFsTWF0Y2hlcyhTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJp
dGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKFN0eWxlOjpDYXNjYWRl
TGV2ZWw6OkF1dGhvciwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBjYXNjYWRlLmFkZEltcG9y
dGFudE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlciwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKKyAgICBjYXNjYWRlLmFkZEltcG9ydGFudE1hdGNoZXMoU3R5bGU6OkNhc2NhZGVMZXZlbDo6
VXNlckFnZW50LCBhcHBseUluaGVyaXRlZE9ubHkpOwogCi0gICAgYXBwbHlDYXNjYWRlZFByb3Bl
cnRpZXMoQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24sIENTU1Byb3BlcnR5V2Via2l0UnVi
eVBvc2l0aW9uLCBhcHBseVN0YXRlKTsKKyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQ
cm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24p
OwogICAgIGFkanVzdFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KCk7CiAKICNpZiBFTkFCTEUo
REFSS19NT0RFX0NTUykKICAgICAvLyBTdXBwb3J0ZWQgY29sb3Igc2NoZW1lcyBjYW4gYWZmZWN0
IHJlc29sdmVkIGNvbG9ycywgc28gd2UgbmVlZCB0byBhcHBseSB0aGF0IHByb3BlcnR5IGJlZm9y
ZSBhbnkgY29sb3IgcHJvcGVydGllcy4KLSAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhDU1NQ
cm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBhcHBseVN0YXRlKTsK
KyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQ
cm9wZXJ0eUNvbG9yU2NoZW1lKTsKICNlbmRpZgogCi0gICAgYXBwbHlDYXNjYWRlZFByb3BlcnRp
ZXMoZmlyc3RDU1NQcm9wZXJ0eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5LCBhcHBseVN0YXRl
KTsKKyAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGln
aFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgLy8gSWYgdGhlIGVmZmVjdGl2ZSB6b29tIHZhbHVl
IGNoYW5nZXMsIHdlIGNhbid0IHVzZSB0aGUgbWF0Y2hlZCBwcm9wZXJ0aWVzIGNhY2hlLiBTdGFy
dCBvdmVyLgogICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkKQEAgLTE0NDEs
MTQgKzE0MzYsMTQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVz
KGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAgICAgcmV0dXJuIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQsIERvTm90VXNlTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZSk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3VzdG9t
IHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKLSAgICBmb3IgKGF1dG8gaXQg
PSBjYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5iZWdpbigpOyBpdCAhPSBjYXNjYWRlLmN1c3Rv
bVByb3BlcnRpZXMoKS5lbmQoKTsgKytpdCkKLSAgICAgICAgYXBwbHlDYXNjYWRlZEN1c3RvbVBy
b3BlcnR5KGl0LT5rZXksIGFwcGx5U3RhdGUpOwotICAgIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVz
KGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5LCBhcHBseVN0YXRlKTsK
KyAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOworCisgICAgY2FzY2FkZS5hcHBs
eVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkpOwog
CiAgICAgLy8gRmluYWxseSwgc29tZSBwcm9wZXJ0aWVzIG11c3QgYmUgYXBwbGllZCBpbiB0aGUg
b3JkZXIgdGhleSB3ZXJlIHBhcnNlZC4KICAgICAvLyBUaGVyZSBhcmUgc29tZSBDU1MgcHJvcGVy
dGllcyB0aGF0IGFmZmVjdCB0aGUgc2FtZSBSZW5kZXJTdHlsZSB2YWx1ZXMsCiAgICAgLy8gc28g
dG8gcHJlc2VydmUgYmVoYXZpb3IsIHdlIHF1ZXVlIHRoZW0gdXAgZHVyaW5nIGNhc2NhZGUgYW5k
IGZsdXNoIGhlcmUuCi0gICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygqdGhpcywg
YXBwbHlTdGF0ZSk7CisgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCiAg
ICAgQVNTRVJUKCFzdGF0ZS5mb250RGlydHkoKSk7CiAKQEAgLTE0NjksOSArMTQ2NCwxMCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSwgc3RkOgogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiB7Ci0g
ICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0ZSB7IHRoaXMsIG51bGxwdHIs
IG51bGxwdHIgfTsKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKKyAgICBTdHlsZTo6UHJv
cGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCB7IH0sIHsgfSk7CiAgICAg
aWYgKHZhbHVlKQotICAgICAgICBhcHBseVByb3BlcnR5KGlkLCB2YWx1ZSwgYXBwbHlTdGF0ZSk7
CisgICAgICAgIGFwcGx5UHJvcGVydHkoaWQsIHZhbHVlLCBjYXNjYWRlKTsKIH0KIAogaW5saW5l
IGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKQEAgLTE1
MjAsNjQgKzE1MTYsMTcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXNGb3JM
ZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBpczxTVkdFbGVtZW50PihtX3N0YXRlLmVsZW1lbnQo
KSkgJiYgIShpczxTVkdTVkdFbGVtZW50PigqbV9zdGF0ZS5lbGVtZW50KCkpICYmIG1fc3RhdGUu
ZWxlbWVudCgpLT5wYXJlbnROb2RlKCkpOwogfQogCi1TdHlsZTo6UHJvcGVydHlDYXNjYWRlKiBT
dHlsZVJlc29sdmVyOjpjYXNjYWRlZFByb3BlcnRpZXNGb3JSb2xsYmFjayhjb25zdCBNYXRjaFJl
c3VsdCYgbWF0Y2hSZXN1bHQpCi17Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAg
V3JpdGluZ01vZGUgd3JpdGluZ01vZGU7Ci0gICAgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdN
b2RlKCpzdGF0ZSgpLnN0eWxlKCksIG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2Rl
KTsKLQotICAgIHN3aXRjaCAoc3RhdGUoKS5jYXNjYWRlTGV2ZWwoKSkgewotICAgIGNhc2UgU3R5
bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yOiB7Ci0gICAgICAgIGF1dG8qIGF1dGhvclJvbGxiYWNr
ID0gc3RhdGUoKS5hdXRob3JSb2xsYmFjaygpOwotICAgICAgICBpZiAoYXV0aG9yUm9sbGJhY2sp
Ci0gICAgICAgICAgICByZXR1cm4gYXV0aG9yUm9sbGJhY2s7Ci0KLSAgICAgICAgYXV0byBuZXdB
dXRob3JSb2xsYmFjayA9IG1ha2VVbmlxdWU8U3R5bGU6OlByb3BlcnR5Q2FzY2FkZT4oZGlyZWN0
aW9uLCB3cml0aW5nTW9kZSk7Ci0KLSAgICAgICAgLy8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNh
c2NhZGUgY29udGFpbnMgVUEgcnVsZXMgYW5kIHVzZXIgcnVsZXMgYnV0IG5vIGF1dGhvciBydWxl
cy4KLSAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1
bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwotICAgICAgICBuZXdB
dXRob3JSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2Nh
ZGVMZXZlbDo6VXNlciwgZmFsc2UpOwotICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1w
b3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlciwgZmFs
c2UpOwotICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRj
aFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBmYWxzZSk7Ci0KLSAgICAg
ICAgc3RhdGUoKS5zZXRBdXRob3JSb2xsYmFjayhuZXdBdXRob3JSb2xsYmFjayk7Ci0gICAgICAg
IHJldHVybiBzdGF0ZSgpLmF1dGhvclJvbGxiYWNrKCk7Ci0gICAgfQotCi0gICAgY2FzZSBTdHls
ZTo6Q2FzY2FkZUxldmVsOjpVc2VyOiB7Ci0gICAgICAgIGF1dG8qIHVzZXJSb2xsYmFjayA9IHN0
YXRlKCkudXNlclJvbGxiYWNrKCk7Ci0gICAgICAgIGlmICh1c2VyUm9sbGJhY2spCi0gICAgICAg
ICAgICByZXR1cm4gdXNlclJvbGxiYWNrOwotCi0gICAgICAgIGF1dG8gbmV3VXNlclJvbGxiYWNr
ID0gbWFrZVVuaXF1ZTxTdHlsZTo6UHJvcGVydHlDYXNjYWRlPihkaXJlY3Rpb24sIHdyaXRpbmdN
b2RlKTsKLQotICAgICAgICAvLyBUaGlzIHNwZWNpYWwgcm9sbGJhY2sgY2FzY2FkZSBjb250YWlu
cyBvbmx5IFVBIHJ1bGVzLgotICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNo
ZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwot
ICAgICAgICBuZXdVc2VyUm9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQs
IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOwotCi0gICAgICAgIHN0YXRl
KCkuc2V0VXNlclJvbGxiYWNrKG5ld1VzZXJSb2xsYmFjayk7Ci0gICAgICAgIHJldHVybiBzdGF0
ZSgpLnVzZXJSb2xsYmFjaygpOwotICAgIH0KLQotICAgIGNhc2UgU3R5bGU6OkNhc2NhZGVMZXZl
bDo6VXNlckFnZW50OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIEFwcGx5Q2FzY2Fk
ZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1h
c2sgbGlua01hdGNoTWFzaykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIGNh
c2NhZGUsIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayBsaW5rTWF0Y2hNYXNrKQogewot
ICAgIGF1dG8qIG1hdGNoUmVzdWx0ID0gYXBwbHlTdGF0ZS5tYXRjaFJlc3VsdDsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFpc1Nob3J0aGFuZENTU1Byb3BlcnR5KGlkKSwgIlNob3J0aGFuZCBw
cm9wZXJ0eSBpZCA9ICVkIHdhc24ndCBleHBhbmRlZCBhdCBwYXJzaW5nIHRpbWUiLCBpZCk7CiAK
ICAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZVRvQXBwbHkgPSB2YWx1ZTsKICAgICBpZiAodmFsdWUtPmhhc1ZhcmlhYmxlUmVmZXJlbmNlcygp
KSB7Ci0gICAgICAgIHZhbHVlVG9BcHBseSA9IHJlc29sdmVkVmFyaWFibGVWYWx1ZShpZCwgKnZh
bHVlLCBhcHBseVN0YXRlKTsKLSAgICAgICAgLy8gSWYgYXBwbGllZFByb3BlcnRpZXMgYWxyZWFk
eSBoYXMgdGhpcyBpZCwgdGhlbiB3ZSBkZXRlY3RlZCBhIGN5Y2xlLCBhbmQgdGhpcyB2YWx1ZSBz
aG91bGQgYmUgdW5zZXQuCi0gICAgICAgIGlmICghdmFsdWVUb0FwcGx5IHx8IGFwcGx5U3RhdGUu
YXBwbGllZFByb3BlcnRpZXMuZ2V0KGlkKSkgeworICAgICAgICB2YWx1ZVRvQXBwbHkgPSByZXNv
bHZlZFZhcmlhYmxlVmFsdWUoaWQsICp2YWx1ZSwgY2FzY2FkZSk7CisgICAgICAgIC8vIElmIHRo
ZSBjYXNjYWRlIGhhcyBhbHJlYWR5IGFwcGxpZWQgdGhpcyBpZCwgdGhlbiB3ZSBkZXRlY3RlZCBh
IGN5Y2xlLCBhbmQgdGhpcyB2YWx1ZSBzaG91bGQgYmUgdW5zZXQuCisgICAgICAgIGlmICghdmFs
dWVUb0FwcGx5IHx8IGNhc2NhZGUuaGFzQXBwbGllZFByb3BlcnR5KGlkKSkgewogICAgICAgICAg
ICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKICAgICAgICAgICAg
ICAgICB2YWx1ZVRvQXBwbHkgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUluaGVy
aXRlZFZhbHVlKCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNTg4LDcgKzE1MzcsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlLCBBcHBseUNhc2NhZAogICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2Fy
ZVByb3BlcnR5KGlkKSkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVy
dHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSwgc3RhdGUuc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChu
ZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lkLCB2YWx1ZVRv
QXBwbHkuZ2V0KCksIGFwcGx5U3RhdGUsIGxpbmtNYXRjaE1hc2spOworICAgICAgICByZXR1cm4g
YXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWVUb0FwcGx5LmdldCgpLCBjYXNjYWRlLCBsaW5rTWF0
Y2hNYXNrKTsKICAgICB9CiAKICAgICBDU1NWYWx1ZSogdmFsdWVUb0NoZWNrRm9ySW5oZXJpdElu
aXRpYWwgPSB2YWx1ZVRvQXBwbHkuZ2V0KCk7CkBAIC0xNjEzLDEyICsxNTYyLDEwIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUsIEFwcGx5Q2FzY2FkCiAgICAgYm9vbCBpc1JldmVydCA9IHZhbHVlVG9DaGVja0Zvcklu
aGVyaXRJbml0aWFsLT5pc1JldmVydFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09
IENTU1ZhbHVlUmV2ZXJ0OwogCiAgICAgaWYgKGlzUmV2ZXJ0KSB7Ci0gICAgICAgIGlmIChzdGF0
ZS5jYXNjYWRlTGV2ZWwoKSA9PSBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQgfHwgIW1h
dGNoUmVzdWx0KQorICAgICAgICBpZiAoc3RhdGUuY2FzY2FkZUxldmVsKCkgPT0gU3R5bGU6OkNh
c2NhZGVMZXZlbDo6VXNlckFnZW50KQogICAgICAgICAgICAgaXNVbnNldCA9IHRydWU7CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGNvcnJlY3Qgcm9sbGJhY2sgb2Jq
ZWN0IGZyb20gdGhlIHN0YXRlLCBidWlsZGluZyBpdCBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAg
ICAvLyBUaGlzIHJlcXVpcmVzIGhhdmluZyB0aGUgb3JpZ2luYWwgTWF0Y2hSZXN1bHQgYXZhaWxh
YmxlLgotICAgICAgICAgICAgYXV0byogcm9sbGJhY2sgPSBjYXNjYWRlZFByb3BlcnRpZXNGb3JS
b2xsYmFjaygqbWF0Y2hSZXN1bHQpOworICAgICAgICAgICAgYXV0byogcm9sbGJhY2sgPSBjYXNj
YWRlLnByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKHN0YXRlLmNhc2NhZGVMZXZlbCgpKTsKICAg
ICAgICAgICAgIEFTU0VSVChyb2xsYmFjayk7CiAKICAgICAgICAgICAgIC8vIFdpdGggdGhlIGNh
c2NhZGUgYnVpbHQsIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBwcm9wZXJ0eSBhbmQgYXBwbHkgaXQu
IElmIHRoZSBwcm9wZXJ0eSBpcwpAQCAtMTYyOCwxMyArMTU3NSwxMyBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBB
cHBseUNhc2NhZAogICAgICAgICAgICAgICAgIGlmIChjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQg
JiYgY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkLT5pbmhlcml0cyAmJiByb2xsYmFjay0+aGFzQ3Vz
dG9tUHJvcGVydHkoY3VzdG9tUHJvcGVydHlWYWx1ZS0+bmFtZSgpKSkgewogICAgICAgICAgICAg
ICAgICAgICBhdXRvIHByb3BlcnR5ID0gcm9sbGJhY2stPmN1c3RvbVByb3BlcnR5KGN1c3RvbVBy
b3BlcnR5VmFsdWUtPm5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5j
c3NWYWx1ZVtsaW5rTWF0Y2hNYXNrXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkocHJvcGVydHkuaWQsIHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdLCBhcHBs
eVN0YXRlLCBsaW5rTWF0Y2hNYXNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkocHJvcGVydHkuaWQsIHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdLCBjYXNj
YWRlLCBsaW5rTWF0Y2hNYXNrKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sbGJhY2stPmhhc1Byb3BlcnR5
KGlkKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIHByb3BlcnR5ID0gcm9sbGJhY2stPnByb3Bl
cnR5KGlkKTsKICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNo
TWFza10pCi0gICAgICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQsIHBy
b3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdLCBhcHBseVN0YXRlLCBsaW5rTWF0Y2hNYXNr
KTsKKyAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgcHJvcGVy
dHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10sIGNhc2NhZGUsIGxpbmtNYXRjaE1hc2spOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMTY3NiwxMCArMTYyMywx
MCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlLCBBcHBseUNhc2NhZAogICAgIFN0eWxlQnVpbGRlcjo6YXBwbHlQcm9w
ZXJ0eShpZCwgKnRoaXMsICp2YWx1ZVRvQXBwbHksIGlzSW5pdGlhbCwgaXNJbmhlcml0LCBjdXN0
b21Qcm9wZXJ0eVJlZ2lzdGVyZWQpOwogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUmVzb2x2
ZXI6OnJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYgc3RhdGUpIGNvbnN0CitS
ZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBTdHlsZTo6UHJvcGVydHlD
YXNjYWRlJiBjYXNjYWRlKSBjb25zdAogewogICAgIENTU1BhcnNlciBwYXJzZXIoZG9jdW1lbnQo
KSk7Ci0gICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhw
cm9wSUQsIHZhbHVlLCBzdGF0ZSk7CisgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlV2l0aFZh
cmlhYmxlUmVmZXJlbmNlcyhwcm9wSUQsIHZhbHVlLCBjYXNjYWRlKTsKIH0KIAogUmVmUHRyPFN0
eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQpAQCAt
MjAzMCwxMTQgKzE5NzcsNCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJh
dGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZpbHRlck9wZXJhdAogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5Q2FzY2FkZWRDdXN0b21Qcm9wZXJ0
eShjb25zdCBTdHJpbmcmIG5hbWUsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkK
LXsKLSAgICBpZiAoc3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkg
fHwgIXN0YXRlLmNhc2NhZGUtPmN1c3RvbVByb3BlcnRpZXMoKS5jb250YWlucyhuYW1lKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwcm9wZXJ0eSA9IHN0YXRlLmNhc2NhZGUtPmN1c3Rv
bVByb3BlcnRpZXMoKS5nZXQobmFtZSk7Ci0gICAgYm9vbCBpbkN5Y2xlID0gc3RhdGUuaW5Qcm9n
cmVzc1Byb3BlcnRpZXNDdXN0b20uY29udGFpbnMobmFtZSk7Ci0KLSAgICBmb3IgKGF1dG8gaW5k
ZXggOiB7IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0LCBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoTGluaywgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQgfSkgewotICAgICAgICBpZiAo
IXByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoaW5kZXggIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQgJiYgdGhpcy0+c3Rh
dGUoKS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+
IHZhbHVlVG9BcHBseSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7Ci0KLSAg
ICAgICAgaWYgKGluQ3ljbGUpIHsKLSAgICAgICAgICAgIHN0YXRlLmFwcGxpZWRDdXN0b21Qcm9w
ZXJ0aWVzLmFkZChuYW1lKTsgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCB0cnkgdG8gYXBwbHkgdGhp
cyBwcm9wZXJ0eSBhZ2FpbiB3aGlsZSByZXNvbHZpbmcgaXQuCi0gICAgICAgICAgICB2YWx1ZVRv
QXBwbHkgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVXaXRoSUQobmFtZSwgQ1NTVmFs
dWVJbnZhbGlkKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0
aWVzQ3VzdG9tLmFkZChuYW1lKTsKLQotICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWUgPSByZXNvbHZlZFZh
cmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSwgc3RhdGUp
OwotCi0gICAgICAgICAgICBpZiAoc3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFp
bnMobmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUaGVyZSB3YXMgYSBjeWNsZSBh
bmQgdGhlIHZhbHVlIHdhcyByZXNldCwgc28gYmFpbC4KLQotICAgICAgICAgICAgaWYgKCFwYXJz
ZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0N1c3RvbVByb3BlcnR5
VmFsdWU6OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NWYWx1ZVVuc2V0KTsKLQotICAgICAgICAgICAg
dmFsdWVUb0FwcGx5ID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnBhcnNlZFZh
bHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGF0ZS5pblByb2dyZXNzUHJvcGVydGll
c0N1c3RvbS5jb250YWlucyhuYW1lKSkgewotICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy0+c3RhdGUo
KS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
dGhpcy0+c3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hMaW5rKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy0+c3RhdGUoKS5zZXRBcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy0+c3RhdGUo
KS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNp
dGVkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy0+c3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUoZmFsc2UpOwotICAgICAgICAgICAgICAgIHRoaXMtPnN0YXRlKCkuc2V0QXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSh0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5wdHIo
KSwgc3RhdGUsIGluZGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRlLmluUHJvZ3Jl
c3NQcm9wZXJ0aWVzQ3VzdG9tLnJlbW92ZShuYW1lKTsKLSAgICBzdGF0ZS5hcHBsaWVkQ3VzdG9t
UHJvcGVydGllcy5hZGQobmFtZSk7Ci0KLSAgICBmb3IgKGF1dG8gaW5kZXggOiB7IFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hEZWZhdWx0LCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluaywgU2VsZWN0
b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQgfSkgewotICAgICAgICBpZiAoIXByb3BlcnR5LmNzc1Zh
bHVlW2luZGV4XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaW5kZXggIT0g
U2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQgJiYgdGhpcy0+c3RhdGUoKS5zdHlsZSgpLT5p
bnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlVG9BcHBseSA9
IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0
eVZhbHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7Ci0KLSAgICAgICAgaWYgKGluQ3lj
bGUgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1
ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkpIHsKLSAgICAgICAgICAgIC8vIFJlc29sdmUgdGhp
cyB2YWx1ZSBzbyB0aGF0IHdlIHJlc2V0IGl0cyBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICBy
ZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQo
KSwgc3RhdGUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5
LCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKExJS0VMWShz
dGF0ZS5jYXNjYWRlLT5jdXN0b21Qcm9wZXJ0aWVzKCkuaXNFbXB0eSgpKSkKLSAgICAgICAgcmV0
dXJuIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzSW1wbDxDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tp
bmc6OkRpc2FibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHksIHN0YXRlKTsKLSAgICBy
ZXR1cm4gYXBwbHlDYXNjYWRlZFByb3BlcnRpZXNJbXBsPEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFj
a2luZzo6RW5hYmxlZD4oZmlyc3RQcm9wZXJ0eSwgbGFzdFByb3BlcnR5LCBzdGF0ZSk7Ci19Ci0K
LXRlbXBsYXRlPFN0eWxlUmVzb2x2ZXI6OkN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyBUcmFj
a0N5Y2xlcz4KLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5Q2FzY2FkZWRQcm9wZXJ0
aWVzSW1wbChpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSwgQXBwbHlDYXNjYWRl
ZFByb3BlcnR5U3RhdGUmIHN0YXRlKQotewotICAgIGZvciAoaW50IGlkID0gZmlyc3RQcm9wZXJ0
eTsgaWQgPD0gbGFzdFByb3BlcnR5OyArK2lkKSB7Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGlkKTsKLSAgICAgICAgaWYgKCFz
dGF0ZS5jYXNjYWRlLT5oYXNQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBBU1NFUlQocHJvcGVydHlJRCAhPSBDU1NQcm9wZXJ0eUN1c3RvbSk7Ci0g
ICAgICAgIGF1dG8mIHByb3BlcnR5ID0gc3RhdGUuY2FzY2FkZS0+cHJvcGVydHkocHJvcGVydHlJ
RCk7Ci0KLSAgICAgICAgaWYgKFRyYWNrQ3ljbGVzID09IEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFj
a2luZzo6RGlzYWJsZWQpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IGN1
c3RvbSBwcm9wZXJ0aWVzLCB0aGVuIHRoZXJlIGNhbid0IGJlIGFueSBjeWNsZXMuCi0gICAgICAg
ICAgICBwcm9wZXJ0eS5hcHBseSgqdGhpcywgc3RhdGUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzLmdldChwcm9w
ZXJ0eUlEKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaW4gYSBjeWNsZSAoZWcuIHNl
dHRpbmcgZm9udCBzaXplIHVzaW5nIHJlZ2lzdGVyZWQgY3VzdG9tIHByb3BlcnR5IHZhbHVlIGNv
bnRhaW5pbmcgZW0pLgotICAgICAgICAgICAgICAgIC8vIFNvIHRoaXMgdmFsdWUgc2hvdWxkIGJl
IHVuc2V0LgotICAgICAgICAgICAgICAgIHN0YXRlLmFwcGxpZWRQcm9wZXJ0aWVzLnNldChwcm9w
ZXJ0eUlEKTsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHByb3BlcnR5IGlzIGluIGEgY3ljbGUs
IGFuZCBvbmx5IHRoZSByb290IG9mIHRoZSBjYWxsIHN0YWNrIHdpbGwgaGF2ZSBmaXJzdFByb3Bl
cnR5ICE9IGxhc3RQcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZmlyc3RQcm9wZXJ0
eSA9PSBsYXN0UHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBzdGF0ZS5pblByb2dyZXNzUHJvcGVydGllcy5zZXQocHJvcGVy
dHlJRCk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS5hcHBseSgqdGhpcywgc3RhdGUpOwotICAgICAg
ICAgICAgc3RhdGUuYXBwbGllZFByb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQpOwotICAgICAgICAg
ICAgc3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQsIGZhbHNlKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgKaW5kZXggZmRjNWZiM2Q4MGMuLmMwN2M4ZWY4YmYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTIwMSw5ICsyMDEsNiBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZpbHRl
ck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwogCi0gICAgdm9pZCBhcHBseUNhc2NhZGVkUHJv
cGVydGllcyhpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSwgQXBwbHlDYXNjYWRl
ZFByb3BlcnR5U3RhdGUmKTsKLSAgICB2b2lkIGFwcGx5Q2FzY2FkZWRDdXN0b21Qcm9wZXJ0eShj
b25zdCBTdHJpbmcmIG5hbWUsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7Ci0KIHByaXZh
dGU6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBmaXhlcyB1cCB0aGUgZGVmYXVsdCBmb250IHNpemUg
aWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJyZW50IGdlbmVyaWMgZm9udCBmYW1pbHkgaGFzIGNo
YW5nZWQuIC1kd2gKICAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJT
dHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CkBAIC0yMTQsMjIgKzIxMSwx
MiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYs
IGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVu
dEJveFN0eWxlLCBjb25zdCBFbGVtZW50Kik7CiAgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZUZv
clNpdGVTcGVjaWZpY1F1aXJrcyhSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQmKTsKLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxHcmlkUG9zaXRpb24+IGFkanVzdE5hbWVkR3JpZEl0ZW1Qb3NpdGlv
bihjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiwgY29uc3QgTmFtZWRHcmlkTGluZXNNYXAmLCBjb25z
dCBHcmlkUG9zaXRpb24mLCBHcmlkUG9zaXRpb25TaWRlKSBjb25zdDsKICAgICAKICAgICB2b2lk
IGFkanVzdFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KCk7CiAgICAgCi0gICAgYm9vbCBmYXN0
UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKLQogICAgIGVudW0gU2hvdWxk
VXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSB7IERvTm90VXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZSA9IDAsIFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUgfTsKICAgICB2b2lkIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVtZW50JiwgU2hvdWxkVXNl
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSA9IFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOwogCi0g
ICAgZW51bSBDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmcgeyBFbmFibGVkID0gMCwgRGlzYWJs
ZWQgfTsKLSAgICB0ZW1wbGF0ZTxDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmc+Ci0gICAgaW5s
aW5lIHZvaWQgYXBwbHlDYXNjYWRlZFByb3BlcnRpZXNJbXBsKGludCBmaXJzdFByb3BlcnR5LCBp
bnQgbGFzdFByb3BlcnR5LCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpOwotCi0gICAgdm9p
ZCBjYXNjYWRlTWF0Y2hlcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgTWF0Y2hSZXN1
bHQmLCBib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBp
bmhlcml0ZWRPbmx5KTsKLQogICAgIERvY3VtZW50UnVsZVNldHMgbV9ydWxlU2V0czsKIAogICAg
IHR5cGVkZWYgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFt
ZXM+PiBLZXlmcmFtZXNSdWxlTWFwOwpAQCAtMjkxLDEyICsyNzgsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwoKSBjb25zdCB7IHJldHVy
biBtX3N0eWxlU2NvcGVPcmRpbmFsOyB9CiAgICAgICAgIHZvaWQgc2V0U3R5bGVTY29wZU9yZGlu
YWwoU3R5bGU6OlNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCkgeyBtX3N0eWxlU2NvcGVP
cmRpbmFsID0gc3R5bGVTY29wZU9yZGluYWw7IH0KIAotICAgICAgICBTdHlsZTo6UHJvcGVydHlD
YXNjYWRlKiBhdXRob3JSb2xsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aG9yUm9sbGJhY2su
Z2V0KCk7IH0KLSAgICAgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSogdXNlclJvbGxiYWNrKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VyUm9sbGJhY2suZ2V0KCk7IH0KLSAgICAgICAgCi0gICAgICAg
IHZvaWQgc2V0QXV0aG9yUm9sbGJhY2soc3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU+JiByb2xsYmFjaykgeyBtX2F1dGhvclJvbGxiYWNrID0gV1RGTW92ZShyb2xsYmFjayk7
IH0KLSAgICAgICAgdm9pZCBzZXRVc2VyUm9sbGJhY2soc3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGU+JiByb2xsYmFjaykgeyBtX3VzZXJSb2xsYmFjayA9IFdURk1vdmUocm9s
bGJhY2spOyB9Ci0KICAgICAgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVy
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RvckZpbHRlcjsgfQogICAgICAgICAKICAgICBwcml2
YXRlOgpAQCAtMzA3LDggKzI4OCw2IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgUmVuZGVyU3R5
bGUqIG1fcGFyZW50U3R5bGUgeyBudWxscHRyIH07CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gbV9vd25lZFBhcmVudFN0eWxlOwogICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSogbV9yb290RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OwotICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U3R5bGU6OlByb3BlcnR5Q2FzY2FkZT4gbV9hdXRob3JSb2xsYmFjazsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU+IG1fdXNlclJvbGxiYWNrOwogCiAg
ICAgICAgIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBtX3NlbGVjdG9yRmlsdGVyIHsgbnVsbHB0ciB9
OwogCkBAIC0zMzgsOCArMzE3LDYgQEAgcHVibGljOgogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKTsgfQogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
OyB9CiAKLSAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlKiBjYXNjYWRlZFByb3BlcnRpZXNGb3JS
b2xsYmFjayhjb25zdCBNYXRjaFJlc3VsdCYpOwotCiAgICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVN
YXAoKSB7IHJldHVybiAmbV9zdHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMm
IGluc3BlY3RvckNTU09NV3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBl
cnM7IH0KICAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24o
KSB7IHJldHVybiBtX3N0YXRlLmZvbnREZXNjcmlwdGlvbigpOyB9CkBAIC0zNTAsMTEgKzMyNywx
MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkgeyBtX3N0YXRlLnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQogICAgIHZvaWQg
c2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9z
dGF0ZS5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQogCi0gICAgUmVmUHRy
PENTU1ZhbHVlPiByZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NT
VmFsdWUmLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpIGNvbnN0OworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gcmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1Zh
bHVlJiwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpIGNvbnN0OwogCiAgICAgYm9vbCBhZGp1c3RS
ZW5kZXJTdHlsZUZvclRleHRBdXRvc2l6aW5nKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCYp
OwogCi0gICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgQXBw
bHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sg
PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCk7CisgICAgdm9pZCBhcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIFNlbGVj
dG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0
KTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwpAQCAt
NDE5LDE4ICszOTYsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0RlbGV0ZWQgeyBmYWxzZSB9
OwogfTsKIAotLy8gU3RhdGUgdG8gdXNlIHdoZW4gYXBwbHlpbmcgcHJvcGVydGllcywgdG8ga2Vl
cCB0cmFjayBvZiB3aGljaCBjdXN0b20gYW5kIGhpZ2gtcHJpb3JpdHkKLS8vIHByb3BlcnRpZXMg
aGF2ZSBiZWVuIHJlc29sdmVkLgotc3RydWN0IEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlIHsK
LSAgICBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyOwotICAgIFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUqIGNhc2NhZGU7Ci0gICAgY29uc3QgTWF0Y2hSZXN1bHQqIG1hdGNoUmVzdWx0OwotICAg
IEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBhcHBsaWVkUHJvcGVydGllcyA9IHsgfTsKLSAgICBI
YXNoU2V0PFN0cmluZz4gYXBwbGllZEN1c3RvbVByb3BlcnRpZXMgPSB7IH07Ci0gICAgQml0bWFw
PG51bUNTU1Byb3BlcnRpZXM+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVzID0geyB9OwotICAgIEhhc2hT
ZXQ8U3RyaW5nPiBpblByb2dyZXNzUHJvcGVydGllc0N1c3RvbSA9IHsgfTsKLX07Ci0KIGlubGlu
ZSBib29sIFN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9yQXR0cmlidXRlKGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcgJmF0dHJpYnV0ZU5hbWUpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCFhdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1BhcnNlci5jcHAKaW5kZXggZDY0ZmZlYmE3YWYuLmNjOWJkMjk1ZjhiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMTc2
LDEwICsxNzcsMTAgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb25Gb3JJbnNwZWN0
b3IoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgY28KICAgICBDU1NQYXJzZXJJbXBs
OjpwYXJzZURlY2xhcmF0aW9uTGlzdEZvckluc3BlY3RvcihzdHJpbmcsIGNvbnRleHQsIG9ic2Vy
dmVyKTsKIH0KIAotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFy
aWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBzdGF0ZSkKK1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlE
IHByb3BJRCwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBj
YXNjYWRlKQogewogICAgIEFTU0VSVCgocHJvcElEID09IENTU1Byb3BlcnR5Q3VzdG9tICYmIHZh
bHVlLmlzQ3VzdG9tUHJvcGVydHlWYWx1ZSgpKSB8fCAocHJvcElEICE9IENTU1Byb3BlcnR5Q3Vz
dG9tICYmICF2YWx1ZS5pc0N1c3RvbVByb3BlcnR5VmFsdWUoKSkpOwotICAgIGF1dG8mIHN0eWxl
ID0gKnN0YXRlLnN0eWxlUmVzb2x2ZXItPnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSAqY2Fz
Y2FkZS5zdHlsZVJlc29sdmVyKCkuc3R5bGUoKTsKICAgICBhdXRvIGRpcmVjdGlvbiA9IHN0eWxl
LmRpcmVjdGlvbigpOwogICAgIGF1dG8gd3JpdGluZ01vZGUgPSBzdHlsZS53cml0aW5nTW9kZSgp
OwogCkBAIC0xOTIsNyArMTkzLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
VmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJvcEkKICAgICAgICAg
ICAgIHNob3J0aGFuZElEID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3Bl
cnR5KHNob3J0aGFuZElELCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKICAgICAgICAgQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZSogc2hvcnRoYW5kVmFsdWUgPSBwZW5kaW5nU3Vic3RpdHV0aW9u
LnNob3J0aGFuZFZhbHVlKCk7CiAKLSAgICAgICAgYXV0byByZXNvbHZlZERhdGEgPSBzaG9ydGhh
bmRWYWx1ZS0+cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhzdGF0ZSk7CisgICAgICAgIGF1dG8g
cmVzb2x2ZWREYXRhID0gc2hvcnRoYW5kVmFsdWUtPnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMo
Y2FzY2FkZSk7CiAgICAgICAgIGlmICghcmVzb2x2ZWREYXRhKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tlbnMg
PSByZXNvbHZlZERhdGEtPnRva2VucygpOwpAQCAtMjExLDcgKzIxMiw3IEBAIFJlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9w
ZXJ0eUlEIHByb3BJCiAKICAgICBpZiAodmFsdWUuaXNWYXJpYWJsZVJlZmVyZW5jZVZhbHVlKCkp
IHsKICAgICAgICAgY29uc3QgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSYgdmFsdWVXaXRoUmVm
ZXJlbmNlcyA9IGRvd25jYXN0PENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+KHZhbHVlKTsKLSAg
ICAgICAgYXV0byByZXNvbHZlZERhdGEgPSB2YWx1ZVdpdGhSZWZlcmVuY2VzLnJlc29sdmVWYXJp
YWJsZVJlZmVyZW5jZXMoc3RhdGUpOworICAgICAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHZhbHVl
V2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjYXNjYWRlKTsKICAgICAg
ICAgaWYgKCFyZXNvbHZlZERhdGEpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgcmV0dXJuIENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKHByb3BJRCwgcmVz
b2x2ZWREYXRhLT50b2tlbnMoKSwgbV9jb250ZXh0KTsKQEAgLTIyMSw5ICsyMjIsOSBAQCBSZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMo
Q1NTUHJvcGVydHlJRCBwcm9wSQogICAgIGNvbnN0IGF1dG8mIHZhbHVlV2l0aFJlZmVyZW5jZXMg
PSBXVEY6OmdldDxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KGN1c3RvbVByb3BWYWx1
ZS52YWx1ZSgpKS5nZXQoKTsKIAogICAgIGF1dG8mIG5hbWUgPSBkb3duY2FzdDxDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlPih2YWx1ZSkubmFtZSgpOwotICAgIGF1dG8qIHJlZ2lzdGVyZWQgPSBzdGF0
ZS5zdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0
eVNldCgpLmdldChuYW1lKTsKKyAgICBhdXRvKiByZWdpc3RlcmVkID0gY2FzY2FkZS5zdHlsZVJl
c29sdmVyKCkuZG9jdW1lbnQoKS5nZXRDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHlTZXQoKS5n
ZXQobmFtZSk7CiAgICAgYXV0byYgc3ludGF4ID0gcmVnaXN0ZXJlZCA/IHJlZ2lzdGVyZWQtPnN5
bnRheCA6ICIqIjsKLSAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMu
cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhzdGF0ZSk7CisgICAgYXV0byByZXNvbHZlZERhdGEg
PSB2YWx1ZVdpdGhSZWZlcmVuY2VzLnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoY2FzY2FkZSk7
CiAKICAgICBpZiAoIXJlc29sdmVkRGF0YSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0y
MzMsOSArMjM0LDkgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRo
VmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJvcEkKICAgICBDU1NQcm9wZXJ0eVBh
cnNlcjo6Y29sbGVjdFBhcnNlZEN1c3RvbVByb3BlcnR5VmFsdWVEZXBlbmRlbmNpZXMoc3ludGF4
LCBmYWxzZSwgZGVwZW5kZW5jaWVzLCByZXNvbHZlZERhdGEtPnRva2VucygpLCBtX2NvbnRleHQp
OwogCiAgICAgZm9yIChhdXRvIGlkIDogZGVwZW5kZW5jaWVzKQotICAgICAgICBzdGF0ZS5zdHls
ZVJlc29sdmVyLT5hcHBseUNhc2NhZGVkUHJvcGVydGllcyhpZCwgaWQsIHN0YXRlKTsKKyAgICAg
ICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoaWQsIGlkKTsKIAotICAgIHJldHVybiBDU1NQcm9w
ZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgc3ludGF4LCBy
ZXNvbHZlZERhdGEtPnRva2VucygpLCAqc3RhdGUuc3R5bGVSZXNvbHZlciwgbV9jb250ZXh0KTsK
KyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZh
bHVlKG5hbWUsIHN5bnRheCwgcmVzb2x2ZWREYXRhLT50b2tlbnMoKSwgY2FzY2FkZS5zdHlsZVJl
c29sdmVyKCksIG1fY29udGV4dCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8ZG91Ymxl
Pj4gQ1NTUGFyc2VyOjpwYXJzZUtleWZyYW1lS2V5TGlzdChjb25zdCBTdHJpbmcmIHNlbGVjdG9y
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKaW5kZXggZTMzMDc4OThmYWEuLmQy
Njk1NTE0ZTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKQEAgLTMwLDcg
KzMwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgQXBwbHlDYXNjYWRlZFBy
b3BlcnR5U3RhdGU7CiBjbGFzcyBDU1NQYXJzZXJPYnNlcnZlcjsKIGNsYXNzIENTU1NlbGVjdG9y
TGlzdDsKIGNsYXNzIENvbG9yOwpAQCAtNDIsNiArNDEsMTAgQEAgY2xhc3MgU3R5bGVSdWxlS2V5
ZnJhbWU7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIAor
bmFtZXNwYWNlIFN0eWxlIHsKK2NsYXNzIFByb3BlcnR5Q2FzY2FkZTsKK30KKwogY2xhc3MgQ1NT
UGFyc2VyIHsKIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIFBhcnNlUmVzdWx0IHsKQEAgLTc4LDcg
KzgxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYs
IENTU1NlbGVjdG9yTGlzdCYpOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZhbHVlV2l0
aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYsIEFwcGx5
Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZhbHVl
V2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYsIFN0
eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKTsKIAogICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNv
bnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwogICAgIHN0YXRpYyBDb2xvciBwYXJz
ZVN5c3RlbUNvbG9yKGNvbnN0IFN0cmluZyYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCmluZGV4IDUzY2Q2MDFiNTg2Li43
MTViMGYxNjhkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNj
YWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCkBA
IC0xNDAsOCArMTQwLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkQ3VlU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQogfQogI2VuZGlmCiAKLVByb3BlcnR5Q2FzY2FkZTo6UHJv
cGVydHlDYXNjYWRlKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkKLSAgICA6IG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKK1Byb3BlcnR5Q2FzY2FkZTo6UHJv
cGVydHlDYXNjYWRlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IE1hdGNoUmVz
dWx0JiBtYXRjaFJlc3VsdCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKQorICAgIDogbV9zdHlsZVJlc29sdmVyKHN0eWxlUmVzb2x2ZXIpCisgICAgLCBt
X21hdGNoUmVzdWx0KG1hdGNoUmVzdWx0KQorICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQog
ICAgICwgbV93cml0aW5nTW9kZSh3cml0aW5nTW9kZSkKIHsKIH0KQEAgLTE3NCwxNyArMTc2LDE3
IEBAIHZvaWQgUHJvcGVydHlDYXNjYWRlOjpzZXQoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUm
IGNzc1ZhbHVlLCB1bnNpZ25lZCBsaW5rTWF0CiAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Q3Vz
dG9tKSB7CiAgICAgICAgIG1fcHJvcGVydHlJc1ByZXNlbnQuc2V0KGlkKTsKICAgICAgICAgY29u
c3QgYXV0byYgY3VzdG9tVmFsdWUgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPihj
c3NWYWx1ZSk7Ci0gICAgICAgIGJvb2wgaGFzVmFsdWUgPSBjdXN0b21Qcm9wZXJ0aWVzKCkuY29u
dGFpbnMoY3VzdG9tVmFsdWUubmFtZSgpKTsKKyAgICAgICAgYm9vbCBoYXNWYWx1ZSA9IG1fY3Vz
dG9tUHJvcGVydGllcy5jb250YWlucyhjdXN0b21WYWx1ZS5uYW1lKCkpOwogICAgICAgICBpZiAo
IWhhc1ZhbHVlKSB7CiAgICAgICAgICAgICBQcm9wZXJ0eSBwcm9wZXJ0eTsKICAgICAgICAgICAg
IHByb3BlcnR5LmlkID0gaWQ7CiAgICAgICAgICAgICBtZW1zZXQocHJvcGVydHkuY3NzVmFsdWUs
IDAsIHNpemVvZihwcm9wZXJ0eS5jc3NWYWx1ZSkpOwogICAgICAgICAgICAgc2V0UHJvcGVydHlJ
bnRlcm5hbChwcm9wZXJ0eSwgaWQsIGNzc1ZhbHVlLCBsaW5rTWF0Y2hUeXBlLCBjYXNjYWRlTGV2
ZWwsIHN0eWxlU2NvcGVPcmRpbmFsKTsKLSAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMoKS5z
ZXQoY3VzdG9tVmFsdWUubmFtZSgpLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICBtX2N1c3RvbVBy
b3BlcnRpZXMuc2V0KGN1c3RvbVZhbHVlLm5hbWUoKSwgcHJvcGVydHkpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgUHJvcGVydHkgcHJvcGVydHkgPSBjdXN0b21Qcm9wZXJ0aWVzKCku
Z2V0KGN1c3RvbVZhbHVlLm5hbWUoKSk7CisgICAgICAgICAgICBQcm9wZXJ0eSBwcm9wZXJ0eSA9
IGN1c3RvbVByb3BlcnR5KGN1c3RvbVZhbHVlLm5hbWUoKSk7CiAgICAgICAgICAgICBzZXRQcm9w
ZXJ0eUludGVybmFsKHByb3BlcnR5LCBpZCwgY3NzVmFsdWUsIGxpbmtNYXRjaFR5cGUsIGNhc2Nh
ZGVMZXZlbCwgc3R5bGVTY29wZU9yZGluYWwpOwotICAgICAgICAgICAgY3VzdG9tUHJvcGVydGll
cygpLnNldChjdXN0b21WYWx1ZS5uYW1lKCksIHByb3BlcnR5KTsKKyAgICAgICAgICAgIG1fY3Vz
dG9tUHJvcGVydGllcy5zZXQoY3VzdG9tVmFsdWUubmFtZSgpLCBwcm9wZXJ0eSk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0OSw5ICsyNTEsOSBAQCBzdGF0aWMgYXV0
byYgZGVjbGFyYXRpb25zRm9yQ2FzY2FkZUxldmVsKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgQ2FzY2FkZQogICAgIHJldHVybiBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnM7
CiB9CiAKLXZvaWQgUHJvcGVydHlDYXNjYWRlOjphZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNo
UmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBpbmhl
cml0ZWRPbmx5KQordm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFkZE5vcm1hbE1hdGNoZXMoQ2FzY2Fk
ZUxldmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5KQogewotICAgIGZvciAoYXV0
byYgbWF0Y2hlZERlY2xhcmF0aW9ucyA6IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbChtYXRj
aFJlc3VsdCwgY2FzY2FkZUxldmVsKSkKKyAgICBmb3IgKGF1dG8mIG1hdGNoZWREZWNsYXJhdGlv
bnMgOiBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwobV9tYXRjaFJlc3VsdCwgY2FzY2FkZUxl
dmVsKSkKICAgICAgICAgYWRkTWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9ucywgY2FzY2FkZUxldmVs
LCBmYWxzZSwgaW5oZXJpdGVkT25seSk7CiB9CiAKQEAgLTI2NCw3ICsyNjYsNyBAQCBzdGF0aWMg
Ym9vbCBoYXNJbXBvcnRhbnRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVy
dGllcykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUHJvcGVydHlDYXNjYWRlOjphZGRJ
bXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxl
dmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5KQordm9pZCBQcm9wZXJ0eUNhc2Nh
ZGU6OmFkZEltcG9ydGFudE1hdGNoZXMoQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCwgYm9vbCBp
bmhlcml0ZWRPbmx5KQogewogICAgIHN0cnVjdCBJbmRleEFuZE9yZGluYWwgewogICAgICAgICB1
bnNpZ25lZCBpbmRleDsKQEAgLTI3Myw3ICsyNzUsNyBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6
YWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIENhc2Nh
ZAogICAgIFZlY3RvcjxJbmRleEFuZE9yZGluYWw+IGltcG9ydGFudE1hdGNoZXM7CiAgICAgYm9v
bCBoYXNNYXRjaGVzRnJvbU90aGVyU2NvcGVzID0gZmFsc2U7CiAKLSAgICBhdXRvJiBtYXRjaGVk
RGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zRm9yQ2FzY2FkZUxldmVsKG1hdGNoUmVzdWx0LCBj
YXNjYWRlTGV2ZWwpOworICAgIGF1dG8mIG1hdGNoZWREZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlv
bnNGb3JDYXNjYWRlTGV2ZWwobV9tYXRjaFJlc3VsdCwgY2FzY2FkZUxldmVsKTsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkRGVjbGFyYXRpb25zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1h
dGNoZWREZWNsYXJhdGlvbnNbaV07CkBAIC0zMDIsMTQgKzMwNCwxNjUgQEAgdm9pZCBQcm9wZXJ0
eUNhc2NhZGU6OmFkZEltcG9ydGFudE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LCBDYXNjYWQKICAgICAgICAgYWRkTWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9uc1ttYXRjaC5p
bmRleF0sIGNhc2NhZGVMZXZlbCwgdHJ1ZSwgaW5oZXJpdGVkT25seSk7CiB9CiAKLXZvaWQgUHJv
cGVydHlDYXNjYWRlOjphcHBseURlZmVycmVkUHJvcGVydGllcyhTdHlsZVJlc29sdmVyJiByZXNv
bHZlciwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIGFwcGx5U3RhdGUpCit2b2lkIFByb3Bl
cnR5Q2FzY2FkZTo6YXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoKQogewogICAgIGZvciAoYXV0byYg
cHJvcGVydHkgOiBtX2RlZmVycmVkUHJvcGVydGllcykKLSAgICAgICAgcHJvcGVydHkuYXBwbHko
cmVzb2x2ZXIsIGFwcGx5U3RhdGUpOworICAgICAgICBwcm9wZXJ0eS5hcHBseSgqdGhpcyk7CiB9
CiAKLXZvaWQgUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eTo6YXBwbHkoU3R5bGVSZXNvbHZlciYg
cmVzb2x2ZXIsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlKQordm9pZCBQ
cm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydGllcyhpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxh
c3RQcm9wZXJ0eSkKIHsKKyAgICBpZiAoTElLRUxZKG1fY3VzdG9tUHJvcGVydGllcy5pc0VtcHR5
KCkpKQorICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0aWVzSW1wbDxDdXN0b21Qcm9wZXJ0eUN5
Y2xlVHJhY2tpbmc6OkRpc2FibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHkpOworCisg
ICAgcmV0dXJuIGFwcGx5UHJvcGVydGllc0ltcGw8Q3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5n
OjpFbmFibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHkpOworfQorCit0ZW1wbGF0ZTxQ
cm9wZXJ0eUNhc2NhZGU6OkN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB0cmFja0N5Y2xlcz4K
K2lubGluZSB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0aWVzSW1wbChpbnQgZmly
c3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSkKK3sKKyAgICBmb3IgKGludCBpZCA9IGZpcnN0
UHJvcGVydHk7IGlkIDw9IGxhc3RQcm9wZXJ0eTsgKytpZCkgeworICAgICAgICBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQgPSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihpZCk7CisgICAgICAg
IGlmICghaGFzUHJvcGVydHkocHJvcGVydHlJRCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgQVNTRVJUKHByb3BlcnR5SUQgIT0gQ1NTUHJvcGVydHlDdXN0b20pOworICAgICAgICBh
dXRvJiBwcm9wZXJ0eSA9IG1fcHJvcGVydGllc1twcm9wZXJ0eUlEXTsKKworICAgICAgICBpZiAo
dHJhY2tDeWNsZXMgPT0gQ3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nOjpFbmFibGVkKSB7Cisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVz
LmdldChwcm9wZXJ0eUlEKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaW4gYSBjeWNs
ZSAoZWcuIHNldHRpbmcgZm9udCBzaXplIHVzaW5nIHJlZ2lzdGVyZWQgY3VzdG9tIHByb3BlcnR5
IHZhbHVlIGNvbnRhaW5pbmcgZW0pLgorICAgICAgICAgICAgICAgIC8vIFNvIHRoaXMgdmFsdWUg
c2hvdWxkIGJlIHVuc2V0LgorICAgICAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5hcHBsaWVkUHJv
cGVydGllcy5zZXQocHJvcGVydHlJRCk7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9wZXJ0
eSBpcyBpbiBhIGN5Y2xlLCBhbmQgb25seSB0aGUgcm9vdCBvZiB0aGUgY2FsbCBzdGFjayB3aWxs
IGhhdmUgZmlyc3RQcm9wZXJ0eSAhPSBsYXN0UHJvcGVydHkuCisgICAgICAgICAgICAgICAgQVNT
RVJUKGZpcnN0UHJvcGVydHkgPT0gbGFzdFByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9hcHBseVN0YXRlLmluUHJvZ3Jl
c3NQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlEKTsKKyAgICAgICAgICAgIHByb3BlcnR5LmFwcGx5
KCp0aGlzKTsKKyAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5hcHBsaWVkUHJvcGVydGllcy5zZXQo
cHJvcGVydHlJRCk7CisgICAgICAgICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRp
ZXMuc2V0KHByb3BlcnR5SUQsIGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgY3VzdG9tIHByb3BlcnRpZXMs
IHRoZW4gdGhlcmUgY2FuJ3QgYmUgYW55IGN5Y2xlcy4KKyAgICAgICAgcHJvcGVydHkuYXBwbHko
KnRoaXMpOworICAgIH0KK30KKwordm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5Q3VzdG9tUHJv
cGVydGllcygpCit7CisgICAgZm9yIChhdXRvJiBuYW1lIDogbV9jdXN0b21Qcm9wZXJ0aWVzLmtl
eXMoKSkKKyAgICAgICAgYXBwbHlDdXN0b21Qcm9wZXJ0eShuYW1lKTsKK30KKwordm9pZCBQcm9w
ZXJ0eUNhc2NhZGU6OmFwcGx5Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIGlmIChtX2FwcGx5U3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFt
ZSkgfHwgIW1fY3VzdG9tUHJvcGVydGllcy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byBwcm9wZXJ0eSA9IGN1c3RvbVByb3BlcnR5KG5hbWUpOworICAgIGJvb2wg
aW5DeWNsZSA9IG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250YWlu
cyhuYW1lKTsKKworICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRj
aERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoVmlzaXRlZCB9KSB7CisgICAgICAgIGlmICghcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmRleCAhPSBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoRGVmYXVsdCAmJiBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zdHlsZSgpLT5pbnNp
ZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlVG9BcHBseSA9IENT
U0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZh
bHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7CisKKyAgICAgICAgaWYgKGluQ3ljbGUp
IHsKKyAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5hcHBsaWVkQ3VzdG9tUHJvcGVydGllcy5hZGQo
bmFtZSk7IC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdHJ5IHRvIGFwcGx5IHRoaXMgcHJvcGVydHkg
YWdhaW4gd2hpbGUgcmVzb2x2aW5nIGl0LgorICAgICAgICAgICAgdmFsdWVUb0FwcGx5ID0gQ1NT
Q3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlV2l0aElEKG5hbWUsIENTU1ZhbHVlSW52YWxpZCk7
CisgICAgICAgIH0KKworICAgICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXND
dXN0b20uYWRkKG5hbWUpOworCisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJl
ZjxDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlPj4odmFsdWVUb0FwcGx5LT52YWx1ZSgpKSkgewor
ICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZSA9IG1fc3R5bGVSZXNvbHZl
ci5yZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5n
ZXQoKSwgKnRoaXMpOworCisgICAgICAgICAgICBpZiAobV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0
b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsgLy8g
VGhlcmUgd2FzIGEgY3ljbGUgYW5kIHRoZSB2YWx1ZSB3YXMgcmVzZXQsIHNvIGJhaWwuCisKKyAg
ICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCisgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUg
PSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVXaXRoSUQobmFtZSwgQ1NTVmFsdWVVbnNl
dCk7CisKKyAgICAgICAgICAgIHZhbHVlVG9BcHBseSA9IGRvd25jYXN0PENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU+KCpwYXJzZWRWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9hcHBs
eVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tLmNvbnRhaW5zKG5hbWUpKSB7CisgICAg
ICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpIHsKKyAg
ICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRl
KCkuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGlu
aykgeworICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNldEFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2
ZXIuc3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hWaXNpdGVkKSB7CisgICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCku
c2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBt
X3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5wdHIoKSwgKnRoaXMsIGlu
ZGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJv
cGVydGllc0N1c3RvbS5yZW1vdmUobmFtZSk7CisgICAgbV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0
b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsKKworICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0
b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7CisgICAgICAgIGlmICghcHJvcGVydHkuY3Nz
VmFsdWVbaW5kZXhdKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmRleCAh
PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUo
KS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZh
bHVlVG9BcHBseSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7CisKKyAgICAg
ICAgaWYgKGluQ3ljbGUgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Q1NTVmFyaWFibGVS
ZWZlcmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIC8v
IFJlc29sdmUgdGhpcyB2YWx1ZSBzbyB0aGF0IHdlIHJlc2V0IGl0cyBkZXBlbmRlbmNpZXMuCisg
ICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIucmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3Bl
cnR5Q3VzdG9tLCB2YWx1ZVRvQXBwbHkuZ2V0KCksICp0aGlzKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworUHJvcGVydHlDYXNjYWRlKiBQcm9wZXJ0eUNhc2NhZGU6OnByb3BlcnR5Q2FzY2FkZUZv
clJvbGxiYWNrKENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwpCit7CisgICAgc3dpdGNoIChjYXNj
YWRlTGV2ZWwpIHsKKyAgICBjYXNlIENhc2NhZGVMZXZlbDo6QXV0aG9yOgorICAgICAgICBpZiAo
IW1fYXV0aG9yUm9sbGJhY2tDYXNjYWRlKSB7CisgICAgICAgICAgICBtX2F1dGhvclJvbGxiYWNr
Q2FzY2FkZSA9IG1ha2VVbmlxdWU8UHJvcGVydHlDYXNjYWRlPihtX3N0eWxlUmVzb2x2ZXIsIG1f
bWF0Y2hSZXN1bHQsIG1fZGlyZWN0aW9uLCBtX3dyaXRpbmdNb2RlKTsKKworICAgICAgICAgICAg
Ly8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNhc2NhZGUgY29udGFpbnMgVUEgcnVsZXMgYW5kIHVz
ZXIgcnVsZXMgYnV0IG5vIGF1dGhvciBydWxlcy4KKyAgICAgICAgICAgIG1fYXV0aG9yUm9sbGJh
Y2tDYXNjYWRlLT5hZGROb3JtYWxNYXRjaGVzKENhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBmYWxz
ZSk7CisgICAgICAgICAgICBtX2F1dGhvclJvbGxiYWNrQ2FzY2FkZS0+YWRkTm9ybWFsTWF0Y2hl
cyhDYXNjYWRlTGV2ZWw6OlVzZXIsIGZhbHNlKTsKKyAgICAgICAgICAgIG1fYXV0aG9yUm9sbGJh
Y2tDYXNjYWRlLT5hZGRJbXBvcnRhbnRNYXRjaGVzKENhc2NhZGVMZXZlbDo6VXNlciwgZmFsc2Up
OworICAgICAgICAgICAgbV9hdXRob3JSb2xsYmFja0Nhc2NhZGUtPmFkZEltcG9ydGFudE1hdGNo
ZXMoQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnQsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbV9hdXRob3JSb2xsYmFja0Nhc2NhZGUuZ2V0KCk7CisKKyAgICBjYXNlIENhc2NhZGVM
ZXZlbDo6VXNlcjoKKyAgICAgICAgaWYgKCFtX3VzZXJSb2xsYmFja0Nhc2NhZGUpIHsKKyAgICAg
ICAgICAgIG1fdXNlclJvbGxiYWNrQ2FzY2FkZSA9IG1ha2VVbmlxdWU8UHJvcGVydHlDYXNjYWRl
PihtX3N0eWxlUmVzb2x2ZXIsIG1fbWF0Y2hSZXN1bHQsIG1fZGlyZWN0aW9uLCBtX3dyaXRpbmdN
b2RlKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNhc2NhZGUgY29u
dGFpbnMgb25seSBVQSBydWxlcy4KKyAgICAgICAgICAgIG1fdXNlclJvbGxiYWNrQ2FzY2FkZS0+
YWRkTm9ybWFsTWF0Y2hlcyhDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOworICAgICAg
ICAgICAgbV91c2VyUm9sbGJhY2tDYXNjYWRlLT5hZGRJbXBvcnRhbnRNYXRjaGVzKENhc2NhZGVM
ZXZlbDo6VXNlckFnZW50LCBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fdXNl
clJvbGxiYWNrQ2FzY2FkZS5nZXQoKTsKKworICAgIGNhc2UgQ2FzY2FkZUxldmVsOjpVc2VyQWdl
bnQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5Ojph
cHBseShQcm9wZXJ0eUNhc2NhZGUmIGNhc2NhZGUpCit7CisgICAgYXV0byYgcmVzb2x2ZXIgPSBj
YXNjYWRlLnN0eWxlUmVzb2x2ZXIoKTsKICAgICBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUg
PSByZXNvbHZlci5zdGF0ZSgpOwogICAgIHN0YXRlLnNldENhc2NhZGVMZXZlbChsZXZlbCk7CiAg
ICAgc3RhdGUuc2V0U3R5bGVTY29wZU9yZGluYWwoc3R5bGVTY29wZU9yZGluYWwpOwpAQCAtMzE3
LDcgKzQ3MCw3IEBAIHZvaWQgUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eTo6YXBwbHkoU3R5bGVS
ZXNvbHZlciYgcmVzb2x2ZXIsIEFwcGx5Q2FzY2FkZWRQcm9wCiAgICAgaWYgKGNzc1ZhbHVlW1Nl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0XSkgewogICAgICAgICBzdGF0ZS5zZXRBcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7CiAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwotICAgICAgICByZXNvbHZlci5hcHBseVByb3Bl
cnR5KGlkLCBjc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdF0sIGFwcGx5U3Rh
dGUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKyAgICAgICAgcmVzb2x2ZXIuYXBw
bHlQcm9wZXJ0eShpZCwgY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHRdLCBj
YXNjYWRlLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCk7CiAgICAgfQogCiAgICAgaWYg
KHN0YXRlLnN0eWxlKCktPmluc2lkZUxpbmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCkBA
IC0zMjYsMTMgKzQ3OSwxMyBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHk6OmFwcGx5
KFN0eWxlUmVzb2x2ZXImIHJlc29sdmVyLCBBcHBseUNhc2NhZGVkUHJvcAogICAgIGlmIChjc3NW
YWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGlua10pIHsKICAgICAgICAgc3RhdGUuc2V0QXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwogICAgICAgICBzdGF0ZS5zZXRBcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKLSAgICAgICAgcmVzb2x2ZXIuYXBwbHlQ
cm9wZXJ0eShpZCwgY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmtdLCBhcHBseVN0
YXRlLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7CisgICAgICAgIHJlc29sdmVyLmFwcGx5
UHJvcGVydHkoaWQsIGNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rXSwgY2FzY2Fk
ZSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmspOwogICAgIH0KIAogICAgIGlmIChjc3NWYWx1
ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZF0pIHsKICAgICAgICAgc3RhdGUuc2V0QXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGZhbHNlKTsKICAgICAgICAgc3RhdGUuc2V0QXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSh0cnVlKTsKLSAgICAgICAgcmVzb2x2ZXIuYXBwbHlQ
cm9wZXJ0eShpZCwgY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWRdLCBhcHBs
eVN0YXRlLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7CisgICAgICAgIHJlc29sdmVy
LmFwcGx5UHJvcGVydHkoaWQsIGNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVk
XSwgY2FzY2FkZSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpOwogICAgIH0KIAogICAg
IHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUv
c3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKaW5kZXggNGU5ZDYyYTkyZGIuLmJlYmM2MmYzNWVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaApAQCAtMzIsNyArMzIsNiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTdHlsZVJlc29sdmVyOwotc3RydWN0IEFwcGx5
Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlOwogCiBuYW1lc3BhY2UgU3R5bGUgewogCkBAIC00NSw0NCAr
NDQsNzQgQEAgZW51bSBjbGFzcyBDYXNjYWRlTGV2ZWwgOiB1aW50OF90IHsKIGNsYXNzIFByb3Bl
cnR5Q2FzY2FkZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
UHJvcGVydHlDYXNjYWRlKFRleHREaXJlY3Rpb24sIFdyaXRpbmdNb2RlKTsKKyAgICBQcm9wZXJ0
eUNhc2NhZGUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgVGV4dERpcmVjdGlv
biwgV3JpdGluZ01vZGUpOwogICAgIH5Qcm9wZXJ0eUNhc2NhZGUoKTsKIAorICAgIFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIoKSB7IHJldHVybiBtX3N0eWxlUmVzb2x2ZXI7IH0KKwogICAg
IHN0cnVjdCBQcm9wZXJ0eSB7Ci0gICAgICAgIHZvaWQgYXBwbHkoU3R5bGVSZXNvbHZlciYsIEFw
cGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7CisgICAgICAgIHZvaWQgYXBwbHkoUHJvcGVydHlD
YXNjYWRlJik7CiAKICAgICAgICAgQ1NTUHJvcGVydHlJRCBpZDsKICAgICAgICAgQ2FzY2FkZUxl
dmVsIGxldmVsOwogICAgICAgICBTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWw7Ci0gICAg
ICAgIENTU1ZhbHVlKiBjc3NWYWx1ZVszXTsKKyAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlWzNd
OyAvLyBWYWx1ZXMgZm9yIGxpbmsgbWF0Y2ggc3RhdGVzIE1hdGNoRGVmYXVsdCwgTWF0Y2hMaW5r
IGFuZCBNYXRjaFZpc2l0ZWQKICAgICB9OwogCiAgICAgYm9vbCBoYXNQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEKSBjb25zdDsKICAgICBQcm9wZXJ0eSYgcHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7CiAK
LSAgICB2b2lkIGFkZE5vcm1hbE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBDYXNjYWRlTGV2
ZWwsIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlKTsKLSAgICB2b2lkIGFkZEltcG9ydGFudE1h
dGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVkT25s
eSA9IGZhbHNlKTsKLQotICAgIHZvaWQgYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoU3R5bGVSZXNv
bHZlciYsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7Ci0KLSAgICBIYXNoTWFwPEF0b21T
dHJpbmcsIFByb3BlcnR5PiYgY3VzdG9tUHJvcGVydGllcygpIHsgcmV0dXJuIG1fY3VzdG9tUHJv
cGVydGllczsgfQogICAgIGJvb2wgaGFzQ3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJikgY29u
c3Q7CiAgICAgUHJvcGVydHkgY3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAK
KyAgICB2b2lkIGFkZE5vcm1hbE1hdGNoZXMoQ2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9u
bHkgPSBmYWxzZSk7CisgICAgdm9pZCBhZGRJbXBvcnRhbnRNYXRjaGVzKENhc2NhZGVMZXZlbCwg
Ym9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOworCisgICAgYm9vbCBoYXNBcHBsaWVkUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCkgY29uc3Q7CisKKyAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhpbnQg
Zmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSk7CisgICAgdm9pZCBhcHBseURlZmVycmVk
UHJvcGVydGllcygpOworCisgICAgdm9pZCBhcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKKyAgICB2
b2lkIGFwcGx5Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIFByb3Bl
cnR5Q2FzY2FkZSogcHJvcGVydHlDYXNjYWRlRm9yUm9sbGJhY2soQ2FzY2FkZUxldmVsKTsKKwog
cHJpdmF0ZToKICAgICB2b2lkIGFkZE1hdGNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgQ2Fz
Y2FkZUxldmVsLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkpOwogICAgIHZv
aWQgc2V0KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwg
Q2FzY2FkZUxldmVsLCBTY29wZU9yZGluYWwpOwogICAgIHZvaWQgc2V0RGVmZXJyZWQoQ1NTUHJv
cGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWws
IFNjb3BlT3JkaW5hbCk7CiAgICAgc3RhdGljIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChQcm9w
ZXJ0eSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwg
Q2FzY2FkZUxldmVsLCBTY29wZU9yZGluYWwpOwogCisgICAgZW51bSBDdXN0b21Qcm9wZXJ0eUN5
Y2xlVHJhY2tpbmcgeyBFbmFibGVkID0gMCwgRGlzYWJsZWQgfTsKKyAgICB0ZW1wbGF0ZTxDdXN0
b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmcgdHJhY2tDeWNsZXM+CisgICAgdm9pZCBhcHBseVByb3Bl
cnRpZXNJbXBsKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5KTsKKworICAgIFN0
eWxlUmVzb2x2ZXImIG1fc3R5bGVSZXNvbHZlcjsKKyAgICBjb25zdCBNYXRjaFJlc3VsdCYgbV9t
YXRjaFJlc3VsdDsKKworICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247CisgICAgV3JpdGlu
Z01vZGUgbV93cml0aW5nTW9kZTsKKwogICAgIFByb3BlcnR5IG1fcHJvcGVydGllc1tudW1DU1NQ
cm9wZXJ0aWVzICsgMl07CiAgICAgc3RkOjpiaXRzZXQ8bnVtQ1NTUHJvcGVydGllcyArIDI+IG1f
cHJvcGVydHlJc1ByZXNlbnQ7CiAKICAgICBWZWN0b3I8UHJvcGVydHksIDg+IG1fZGVmZXJyZWRQ
cm9wZXJ0aWVzOwogICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUHJvcGVydHk+IG1fY3VzdG9tUHJv
cGVydGllczsKIAotICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0gICAgV3JpdGluZ01v
ZGUgbV93cml0aW5nTW9kZTsKKyAgICAvLyBTdGF0ZSB0byB1c2Ugd2hlbiBhcHBseWluZyBwcm9w
ZXJ0aWVzLCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGN1c3RvbSBhbmQgaGlnaC1wcmlvcml0eQor
ICAgIC8vIHByb3BlcnRpZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgorICAgIHN0cnVjdCBBcHBseVN0
YXRlIHsKKyAgICAgICAgQml0bWFwPG51bUNTU1Byb3BlcnRpZXM+IGFwcGxpZWRQcm9wZXJ0aWVz
ID0geyB9OworICAgICAgICBIYXNoU2V0PFN0cmluZz4gYXBwbGllZEN1c3RvbVByb3BlcnRpZXMg
PSB7IH07CisgICAgICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBpblByb2dyZXNzUHJvcGVy
dGllcyA9IHsgfTsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVz
Q3VzdG9tID0geyB9OworICAgIH07CisKKyAgICBBcHBseVN0YXRlIG1fYXBwbHlTdGF0ZTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eUNhc2NhZGU+IG1fYXV0aG9yUm9sbGJhY2tDYXNj
YWRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eUNhc2NhZGU+IG1fdXNlclJvbGxiYWNr
Q2FzY2FkZTsKIH07CiAKIGlubGluZSBib29sIFByb3BlcnR5Q2FzY2FkZTo6aGFzUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCkgY29uc3QKQEAgLTEwNiw1ICsxMzUsMTAgQEAgaW5saW5lIFByb3Bl
cnR5Q2FzY2FkZTo6UHJvcGVydHkgUHJvcGVydHlDYXNjYWRlOjpjdXN0b21Qcm9wZXJ0eShjb25z
dCBTdHJpbmcmIG4KICAgICByZXR1cm4gbV9jdXN0b21Qcm9wZXJ0aWVzLmdldChuYW1lKTsKIH0K
IAoraW5saW5lIGJvb2wgUHJvcGVydHlDYXNjYWRlOjpoYXNBcHBsaWVkUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlEKSBjb25zdAoreworICAgIHJldHVybiBtX2FwcGx5U3RhdGUuYXBw
bGllZFByb3BlcnRpZXMuZ2V0KHByb3BlcnR5SUQpOworfQorCiB9CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>