<?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>184089</bug_id>
          
          <creation_ts>2018-03-28 09:12:50 -0700</creation_ts>
          <short_desc>[DFG] More aggressive removal of duplicate 32bit DFG code</short_desc>
          <delta_ts>2018-04-02 00:52:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1409861</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-28 09:12:50 -0700</bug_when>
    <thetext>[DFG] More aggressive removal of 32bit DFG</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409862</commentid>
    <comment_count>1</comment_count>
      <attachid>336662</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-28 09:13:41 -0700</bug_when>
    <thetext>Created attachment 336662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409953</commentid>
    <comment_count>2</comment_count>
      <attachid>336662</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-03-28 11:44:20 -0700</bug_when>
    <thetext>Comment on attachment 336662
Patch

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

seems like you broke 32-bit x86 builds

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        [DFG] More aggressive removal of 32bit DFG

this title should have &quot;duplicate&quot; before &quot;32bit&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410156</commentid>
    <comment_count>3</comment_count>
      <attachid>336746</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-28 19:23:01 -0700</bug_when>
    <thetext>Created attachment 336746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410158</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-28 19:27:54 -0700</bug_when>
    <thetext>OK, updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410159</commentid>
    <comment_count>5</comment_count>
      <attachid>336748</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-28 19:28:50 -0700</bug_when>
    <thetext>Created attachment 336748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410490</commentid>
    <comment_count>6</comment_count>
      <attachid>336832</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-29 19:18:58 -0700</bug_when>
    <thetext>Created attachment 336832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410551</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-29 22:40:43 -0700</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410985</commentid>
    <comment_count>8</comment_count>
      <attachid>336832</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-04-01 18:23:46 -0700</bug_when>
    <thetext>Comment on attachment 336832
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411015</commentid>
    <comment_count>9</comment_count>
      <attachid>336832</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-04-02 00:25:53 -0700</bug_when>
    <thetext>Comment on attachment 336832
Patch

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411019</commentid>
    <comment_count>10</comment_count>
      <attachid>336832</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-02 00:51:21 -0700</bug_when>
    <thetext>Comment on attachment 336832
Patch

Clearing flags on attachment: 336832

Committed r230150: &lt;https://trac.webkit.org/changeset/230150&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411020</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-02 00:51:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411021</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-02 00:52:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/39098832&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336662</attachid>
            <date>2018-03-28 09:13:41 -0700</date>
            <delta_ts>2018-03-28 19:22:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184089-20180329011339.patch</filename>
            <type>text/plain</type>
            <size>70829</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMDI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
MWIwODlhNDFhZDQzZjZhM2I5OGY5OTFkZGVlMTA5MmU0MTIxYzlhLi40OTQ1ZWE2NTNjMzdhMDBi
YzBhNDA3MDQ4MDNlOGQ3ZjY2NmExZGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxOC0wMy0yOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBNb3JlIGFnZ3Jlc3NpdmUgcmVtb3ZhbCBvZiAzMmJpdCBE
RkcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDA4
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggbW9yZSBhZ2dyZXNzaXZlbHkgcmVtb3ZlcyBkdXBsaWNhdGUgMzJiaXQgREZHIGNvZGUK
KyAgICAgICAgYnkgbGV2ZXJhZ2luZyBKU1ZhbHVlUmVncyBhbmQgbWV0YS1wcm9ncmFtbWVkIGNh
bGxPcGVyYXRpb24uCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxXaXRoVGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1pbk1heCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja0NlbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2xvYmFsVmFyaWFibGUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0R2xvYmFsVmFy
aWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0Q2xv
c3VyZVZhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRD
bG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
TmV3QXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVG9UaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlk
ZW50aXR5KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTgt
MDMtMjcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtHTElCXSBBZGQgSlNDV2Vha1ZhbHVlIHRvIEphdmFTY3JpcHRDb3JlIEdMaWIgQVBJCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4
IDc1NmI3MDEyNGZhNjEwMDY2NGE2YWIxMzkyYzMwMWE2YzJlZTRhZDUuLjlkYzRmZTY0MjRkZGQw
NTQ4OTZjNzU4NTc3ZDE1M2MyN2I4ZDRlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0zMjc4LDYgKzMyNzgsMjQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2woTm9kZSogbm9k
ZSwgRWRnZSYgY2hpbGQxLAogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKiBub2RlKQoreworICAgIEpTVmFs
dWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIGJh
c2VSZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOworICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZVJlZ3MgdGhpc1ZhbHVlUmVncyA9
IHRoaXNWYWx1ZS5qc1ZhbHVlUmVncygpOworICAgIEpTVmFsdWVPcGVyYW5kIHN1YnNjcmlwdCh0
aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgSlNWYWx1ZVJlZ3Mgc3Vic2NyaXB0UmVncyA9IHN1
YnNjcmlwdC5qc1ZhbHVlUmVncygpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBKU1Zh
bHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdl
dEJ5VmFsV2l0aFRoaXMsIHJlc3VsdFJlZ3MsIGJhc2VSZWdzLCB0aGlzVmFsdWVSZWdzLCBzdWJz
Y3JpcHRSZWdzKTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRSZWdzLCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUluc3RhbmNlT2ZGb3JPYmplY3QoTm9kZSosIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHByb3Rv
dHlwZVJlZywgR1BSUmVnIHNjcmF0Y2hSZWcsIEdQUlJlZyBzY3JhdGNoMlJlZywgR1BSUmVnIHNj
cmF0Y2gzUmVnKQogewogICAgIC8vIENoZWNrIHRoYXQgcHJvdG90eXBlIGlzIGFuIG9iamVjdC4K
QEAgLTU1MDIsNiArNTUyMCw3NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhT
cXJ0KE5vZGUqIG5vZGUpCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1pbk1heChOb2RlKiBub2RlKQor
eworICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVz
ZTogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1
c2UsIG9wMSk7CisKKyAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9q
aXQuYnJhbmNoMzIobm9kZS0+b3AoKSA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiA6IE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgb3AxR1BSLCBvcDJHUFIpOworICAg
ICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKG9wMUdQUiAh
PSByZXN1bHRHUFIpIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CisgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2pp
dCk7CisKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEZQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKworICAgICAgICBGUFJSZWcgb3AxRlBSID0gb3Ax
LmZwcigpOworICAgICAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOworICAgICAgICBGUFJS
ZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBkb25lOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3MgPSBt
X2ppdC5icmFuY2hEb3VibGUobm9kZS0+b3AoKSA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVMZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3Ax
RlBSLCBvcDJGUFIpOworCisgICAgICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBvbmUg
b3Igb25lIG9mIHRoZW4gaXMgTmFOCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMkxl
c3MgPSBtX2ppdC5icmFuY2hEb3VibGUobm9kZS0+b3AoKSA9PSBBcml0aE1pbiA/IE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgOiBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
TGVzc1RoYW5PckVxdWFsLCBvcDFGUFIsIG9wMkZQUik7CisKKyAgICAgICAgLy8gVW5vcmRlcmVk
IGNhc2UuIFdlIGRvbid0IGtub3cgd2hpY2ggb2Ygb3AxLCBvcDIgaXMgTmFOLiBNYW51ZmFjdHVy
ZSBOYU4gYnkgYWRkaW5nIAorICAgICAgICAvLyBvcDEgKyBvcDIgYW5kIHB1dHRpbmcgaXQgaW50
byByZXN1bHQuCisgICAgICAgIG1faml0LmFkZERvdWJsZShvcDFGUFIsIG9wMkZQUiwgcmVzdWx0
RlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBvcDJM
ZXNzLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDJGUFIsIHJlc3Vs
dEZQUik7CisKKyAgICAgICAgaWYgKG9wMUZQUiAhPSByZXN1bHRGUFIpIHsKKyAgICAgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgIG9wMUxlc3MubGluaygm
bV9qaXQpOworICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDFGUFIsIHJlc3VsdEZQUik7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CisKKyAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdEZQ
Uiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAg
IERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwogLy8gRm9yIHNtYWxsIHBvc2l0aXZlIGludGVnZXJzICwgaXQg
aXMgd29ydGggZG9pbmcgYSB0aW55IGlubGluZSBsb29wIHRvIGV4cG9uZW50aWF0ZSB0aGUgYmFz
ZS4KIC8vIEV2ZXJ5IHJlZ2lzdGVyIGlzIGNsb2JiZXJlZCBieSB0aGlzIGhlbHBlci4KIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjb21waWxlQXJpdGhQb3dJbnRlZ2VyRmFzdFBhdGgoSklU
Q29tcGlsZXImIGFzc2VtYmxlciwgRlBSUmVnIHhPcGVyYW5kLCBHUFJSZWcgeU9wZXJhbmQsIEZQ
UlJlZyByZXN1bHQpCkBAIC03NDUxLDYgKzc1MzksMTY2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVTcHJlYWQoTm9kZSogbm9kZSkKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOZXdBcnJheShOb2RlKiBub2RlKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOworICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYg
IWhhc0FueUFycmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgUmVn
aXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0
dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgIERGR19BU1NFUlQobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBub2RlLT5pbmRleGlu
Z1R5cGUoKSwgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSwgbm9kZS0+aW5kZXhpbmdUeXBlKCkp
OworICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpCisgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkKKyAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpOworCisgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoSGludCA9IG5vZGUtPnZlY3Rvckxl
bmd0aEhpbnQoKTsKKyAgICAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aEhpbnQgPj0gbnVtRWxlbWVu
dHMpOworCisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSBzdG9yYWdlKHRoaXMpOworCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKwor
ICAgICAgICBlbWl0QWxsb2NhdGVSYXdPYmplY3QocmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHN0b3Jh
Z2VHUFIsIG51bUVsZW1lbnRzLCB2ZWN0b3JMZW5ndGhIaW50KTsKKworICAgICAgICAvLyBBdCB0
aGlzIHBvaW50LCBvbmUgd2F5IG9yIGFub3RoZXIsIHJlc3VsdEdQUiBhbmQgc3RvcmFnZUdQUiBo
YXZlIHBvaW50ZXJzIHRvCisgICAgICAgIC8vIHRoZSBKU0FycmF5IGFuZCB0aGUgQnV0dGVyZmx5
LCByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgQVNTRVJUKCFoYXNVbmRlY2lkZWQoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkgfHwgIW5vZGUtPm51bUNoaWxkcmVuKCkpOworCisgICAgICAgIGZv
ciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1DaGlsZHJl
bigpOyArK29wZXJhbmRJZHgpIHsKKyAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgo
KS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdOworICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lE
RURfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzog
eworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1
c2UpOworICAgICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7CisgICAg
ICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKCksIHVzZSwgU3BlY0RvdWJsZVJlYWwsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaERvdWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZURvdWJsZShvcEZQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
Uiwgc2l6ZW9mKGRvdWJsZSkgKiBvcGVyYW5kSWR4KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyBvcGVyYW5kUmVn
cyA9IG9wZXJhbmQuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIo
bm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NI
RUNLKAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFJlZ3MsIHVzZSwgU3BlY0ludDMy
T25seSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmTm90SW50MzIob3Bl
cmFuZFJlZ3MpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmVWYWx1ZShvcGVyYW5kUmVncywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
c2l6ZW9mKEpTVmFsdWUpICogb3BlcmFuZElkeCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLy8gWXVjaywgd2Ugc2hvdWxkICpyZWFsbHkqIGhhdmUgYSB3YXkgb2YgYWxzbyBy
ZXR1cm5pbmcgdGhlIHN0b3JhZ2VHUFIuIEJ1dAorICAgICAgICAvLyB0aGF0J3MgdGhlIGxlYXN0
IG9mIHdoYXQncyB3cm9uZyB3aXRoIHRoaXMgY29kZS4gV2UgcmVhbGx5IHNob3VsZG4ndCBiZQor
ICAgICAgICAvLyBhbGxvY2F0aW5nIHRoZSBhcnJheSBhZnRlciBoYXZpbmcgY29tcHV0ZWQgLSBh
bmQgcHJvYmFibHkgc3BpbGxlZCB0byB0aGUKKyAgICAgICAgLy8gc3RhY2sgLSBhbGwgb2YgdGhl
IHRoaW5ncyB0aGF0IHdpbGwgZ28gaW50byB0aGUgYXJyYXkuIFRoZSBzb2x1dGlvbiB0byB0aGF0
CisgICAgICAgIC8vIGJpZ2dlciBwcm9ibGVtIHdpbGwgYWxzbyBsaWtlbHkgZml4IHRoZSByZWR1
bmRhbmN5IGluIHJlbG9hZGluZyB0aGUgc3RvcmFnZQorICAgICAgICAvLyBwb2ludGVyIHRoYXQg
d2UgY3VycmVudGx5IGhhdmUuCisKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFub2RlLT5udW1DaGlsZHJlbigp
KSB7CisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdFbXB0
eUFycmF5LCByZXN1bHQuZ3ByKCksIG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xv
YmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24o
bm9kZS0+aW5kZXhpbmdUeXBlKCkpKSk7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgKiBub2RlLT5udW1DaGlsZHJlbigpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZm
ZXIgPSBtX2ppdC52bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAg
RW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiBudWxscHRyOworCisg
ICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUtPm51bUNo
aWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgeworICAgICAgICAvLyBOZWVkIHRvIHBlcmZvcm0gdGhl
IHNwZWN1bGF0aW9ucyB0aGF0IHRoaXMgbm9kZSBwcm9taXNlcyB0byBwZXJmb3JtLiBJZiB3ZSdy
ZQorICAgICAgICAvLyBlbWl0dGluZyBjb2RlIGhlcmUgYW5kIHRoZSBpbmRleGluZyB0eXBlIGlz
IG5vdCBhcnJheSBzdG9yYWdlIHRoZW4gdGhlcmUgaXMKKyAgICAgICAgLy8gcHJvYmFibHkgc29t
ZXRoaW5nIGhpbGFyaW91cyBnb2luZyBvbiBhbmQgd2UncmUgYWxyZWFkeSBmYWlsaW5nIGF0IGFs
bCB0aGUKKyAgICAgICAgLy8gdGhpbmdzLCBidXQgYXQgbGVhc3Qgd2UncmUgZ29pbmcgdG8gYmUg
c291bmQuCisgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdOworICAgICAgICBzd2l0Y2ggKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVT
OgorICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9J
TkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVy
YW5kKHRoaXMsIHVzZSk7CisgICAgICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOworICAgICAgICAgICAgRlBSUmVnIG9wRlBSID0gb3BlcmFuZC5mcHIoKTsKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHNjcmF0Y2hSZWdzID0gc2NyYXRjaC5yZWdzKCk7CisgICAgICAg
ICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncygpLCB1c2Us
IFNwZWNEb3VibGVSZWFsLAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZSgKKyAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQsIG9wRlBSLCBvcEZQUikpOworICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKG9wRlBSLCBz
Y3JhdGNoUmVncyk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVZhbHVlKHNjcmF0Y2hSZWdzLCBi
dWZmZXIgKyBvcGVyYW5kSWR4KTsKKyAgICAgICAgICAgIG9wZXJhbmQudXNlKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19U
WVBFUzoKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyBvcGVyYW5kUmVncyA9IG9wZXJhbmQuanNWYWx1
ZVJlZ3MoKTsKKyAgICAgICAgICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRleGluZ1R5cGUoKSkp
IHsKKyAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAg
b3BlcmFuZFJlZ3MsIHVzZSwgU3BlY0ludDMyT25seSwKKyAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoSWZOb3RJbnQzMihvcGVyYW5kUmVncykpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9qaXQuc3RvcmVWYWx1ZShvcGVyYW5kUmVncywgYnVmZmVyICsgb3BlcmFuZElkeCk7
CisgICAgICAgICAgICBvcGVyYW5kLnVzZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBp
ZiAoc2NyYXRjaFNpemUpIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisK
KyAgICAgICAgLy8gVGVsbCBHQyBtYXJrIHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1
ZmZlciBpcyBhY3RpdmUgZHVyaW5nIGNhbGwuCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cihzY3JhdGNoQnVmZmVyLT5hZGRyZXNzT2ZBY3RpdmVMZW5ndGgoKSksIHNjcmF0Y2guZ3By
KCkpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKHNjcmF0Y2hTaXplKSwg
c2NyYXRjaC5ncHIoKSk7CisgICAgfQorCisgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
KHRoaXMpOworCisgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXks
IHJlc3VsdC5ncHIoKSwgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmpl
Y3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5p
bmRleGluZ1R5cGUoKSkpLAorICAgICAgICBzdGF0aWNfY2FzdDx2b2lkKj4oYnVmZmVyKSwgc2l6
ZV90KG5vZGUtPm51bUNoaWxkcmVuKCkpKTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwor
CisgICAgaWYgKHNjcmF0Y2hTaXplKSB7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOworCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5h
ZGRyZXNzT2ZBY3RpdmVMZW5ndGgoKSksIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICBtX2ppdC5z
dG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzY3JhdGNoLmdwcigpKTsKKyAgICB9CisK
KyAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5V2l0aFNw
cmVhZChOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlLT5vcCgpID09IE5ld0FycmF5V2l0
aFNwcmVhZCk7CkBAIC04NDQzLDYgKzg2OTEsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dFN0cnVjdHVyZUNoZWNrKE5vZGUqIG5vZGUsIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEcK
ICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja0NlbGwoTm9kZSog
bm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENlbGwsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGNlbGwuZ3ByKCkpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoV2Vha1B0cihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIGNlbGwuZ3ByKCksIG5vZGUtPmNlbGxPcGVyYW5kKCktPmNl
bGwoKSkpOworICAgIG5vUmVzdWx0KG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQ2hlY2tTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgewpAQCAtMTA0MzgsNyArMTA2OTMsMjMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWwoTm9k
ZSogbm9kZSkKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CiB9Ci0gICAgCisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRHbG9iYWxWYXJpYWJsZShOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVSZWdzVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJl
Z3MoKTsKKyAgICBtX2ppdC5sb2FkVmFsdWUobm9kZS0+dmFyaWFibGVQb2ludGVyKCksIHJlc3Vs
dFJlZ3MpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRHbG9iYWxWYXJpYWJsZShOb2RlKiBub2RlKQorewor
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgIG1faml0LnN0b3Jl
VmFsdWUodmFsdWVSZWdzLCBub2RlLT52YXJpYWJsZVBvaW50ZXIoKSk7CisgICAgbm9SZXN1bHQo
bm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXREeW5hbWljVmFyKE5v
ZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwpAQCAtMTA0NjUsNiArMTA3MzYsMzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dER5bmFtaWNWYXIoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0K
IAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENsb3N1cmVWYXIoTm9kZSogbm9kZSkK
K3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5y
ZWdzKCk7CisKKyAgICBtX2ppdC5sb2FkVmFsdWUoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGUobm9kZS0+c2NvcGVPZmZz
ZXQoKSkpLCByZXN1bHRSZWdzKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0Q2xvc3VyZVZhcihOb2RlKiBu
b2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKwor
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJl
Z3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworCisgICAgbV9qaXQuc3RvcmVWYWx1ZSh2YWx1ZVJl
Z3MsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlKG5vZGUtPnNjb3BlT2Zmc2V0KCkpKSk7CisgICAgbm9SZXN1bHQobm9k
ZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRBY2Nlc3NvckJ5VmFsKE5v
ZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CkBAIC0xMTI5NCw2ICsxMTU4OSwzOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlJZFdpdGhUaGlzKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeU9mZnNldChOb2RlKiBub2RlKQor
eworICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgc3RvcmFnZSk7CisKKyAg
ICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisKKyAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFn
ZUFjY2Vzc0RhdGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOworCisgICAgbV9qaXQubG9h
ZFZhbHVlKEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkpLCByZXN1bHRSZWdzKTsKKworICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRCeU9mZnNldChOb2RlKiBub2RlKQoreworICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMygpKTsKKworICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIo
KTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworCisg
ICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxkMigpKTsKKworICAgIFN0b3JhZ2VBY2Nlc3NE
YXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7CisKKyAg
ICBtX2ppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSkpOwor
CisgICAgbm9SZXN1bHQobm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVI
YXNTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKiBub2RlKQogewogICAgIEpTVmFsdWVPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTEzODIsNiArMTE3MDksMjAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShOb2RlKiBub2RlKQogICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRFeGVjdXRhYmxlKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgUmV1c2UsIGZ1bmN0aW9uKTsKKyAgICBHUFJSZWcgZnVuY3Rpb25HUFIg
PSBmdW5jdGlvbi5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgIHNwZWN1bGF0ZUNlbGxUeXBlKG5vZGUtPmNoaWxkMSgpLCBmdW5jdGlvbkdQUiwgU3BlY0Z1
bmN0aW9uLCBKU0Z1bmN0aW9uVHlwZSk7CisgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhmdW5jdGlvbkdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLCBy
ZXN1bHRHUFIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbV9qaXQueG9yUHRyKEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Qb2lzb246OmtleSgpKSwgcmVzdWx0R1BSKTsK
KyNlbmRpZgorICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdldHRlcihOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xMTQ1OCw2ICsxMTc5
OSw2MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyQ2F0KE5vZGUqIG5vZGUpCiAg
ICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTmV3QXJyYXlCdWZmZXIoTm9kZSogbm9kZSkKK3sKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKKyAgICBKU0ZpeGVkQXJyYXkqIGFycmF5ID0gbm9kZS0+Y2FzdE9w
ZXJhbmQ8SlNGaXhlZEFycmF5Kj4oKTsKKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IGFycmF5
LT5sZW5ndGgoKTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbm9kZS0+aW5kZXhp
bmdUeXBlKCk7CisgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAh
aGFzQW55QXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSkpIHsKKyAgICAgICAgdW5zaWduZWQgdmVj
dG9yTGVuZ3RoSGludCA9IG5vZGUtPnZlY3Rvckxlbmd0aEhpbnQoKTsKKyAgICAgICAgQVNTRVJU
KHZlY3Rvckxlbmd0aEhpbnQgPj0gbnVtRWxlbWVudHMpOworCisgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworCisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBz
dG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBlbWl0QWxsb2NhdGVSYXdPYmpl
Y3QocmVzdWx0R1BSLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5n
VHlwZSkpLCBzdG9yYWdlR1BSLCBudW1FbGVtZW50cywgdmVjdG9yTGVuZ3RoSGludCk7CisKKyAg
ICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBpbmRleGluZ1R5cGUgJiBJc0Fy
cmF5LCBpbmRleGluZ1R5cGUpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IG51bUVsZW1lbnRzOyArK2luZGV4KSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgICAgIGludDY0X3QgdmFsdWU7CisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEFy
cmF5V2l0aERvdWJsZSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdHdpc2VfY2FzdDxpbnQ2
NF90PihhcnJheS0+Z2V0KGluZGV4KS5hc051bWJlcigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB2YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShhcnJheS0+Z2V0KGluZGV4KSk7
CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkb3VibGUpID09IHNpemVvZihKU1Zh
bHVlKSwgIiIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChJbW02NCh2YWx1ZSksIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIGluZGV4KSk7
CisjZWxzZQorICAgICAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgIGludDMyX3QgaGFs
dmVzWzJdOworICAgICAgICAgICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKKyAgICAgICAgICAg
ICAgICBpbnQ2NF90IGVuY29kZWRWYWx1ZTsKKyAgICAgICAgICAgIH0gdTsKKyAgICAgICAgICAg
IGlmIChub2RlLT5pbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpCisgICAgICAgICAg
ICAgICAgdS5kb3VibGVWYWx1ZSA9IGFycmF5LT5nZXQoaW5kZXgpLmFzTnVtYmVyKCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdS5lbmNvZGVkVmFsdWUgPSBKU1ZhbHVlOjpl
bmNvZGUoYXJyYXktPmdldChpbmRleCkpOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoZG91YmxlKSA9PSBzaXplb2YoSlNWYWx1ZSksICIiKTsKKyAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoSW1tMzIodS5oYWx2ZXNbMF0pLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBpbmRleCkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihJbW0zMih1LmhhbHZlc1sxXSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IHNpemVvZihKU1ZhbHVlKSAqIGluZGV4ICsgc2l6ZW9mKGludDMyX3QpKSk7CisjZW5kaWYKKyAg
ICAgICAgfQorICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEdQUkZsdXNoZWRDYWxs
UmVzdWx0IHJlc3VsdCh0aGlzKTsKKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlCdWZmZXIsIHJlc3VsdC5ncHIoKSwgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlv
bihub2RlLT5pbmRleGluZ1R5cGUoKSkpLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5k
KCkpLCBzaXplX3QobnVtRWxlbWVudHMpKTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwor
CisgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZShOb2RlKiBub2RlKQogewogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwpAQCAtMTE1MjAsNiArMTE5MTgsMzQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYXkoTm9kZSogbm9kZSkKICAgICB9CiB9CiAK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb1RoaXMoTm9kZSogbm9kZSkKK3sKKyAgICBB
U1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgIEpTVmFs
dWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKworICAgIEpTVmFsdWVSZWdzIHRoaXNWYWx1ZVJlZ3Mg
PSB0aGlzVmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAgICBKU1ZhbHVlUmVncyB0ZW1wUmVncyA9IHRl
bXAucmVncygpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbCh0aGlzVmFsdWVSZWdzKSk7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZCgKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHRoaXNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KE92ZXJyaWRlc1RvVGhpcykpKTsKKyAgICBtX2ppdC5tb3ZlVmFsdWVSZWdzKHRoaXNWYWx1ZVJl
Z3MsIHRlbXBSZWdzKTsKKworICAgIEpfSklUT3BlcmF0aW9uX0VKIGZ1bmN0aW9uOworICAgIGlm
IChtX2ppdC5ncmFwaCgpLmV4ZWN1dGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNT
dHJpY3RNb2RlKCkpCisgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzU3RyaWN0Owor
ICAgIGVsc2UKKyAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXM7CisgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgZnVuY3Rpb24sIHRl
bXBSZWdzLCB0aGlzVmFsdWVSZWdzKSk7CisKKyAgICBqc1ZhbHVlUmVzdWx0KHRlbXBSZWdzLCBu
b2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVRoaXMoTm9kZSog
bm9kZSkKIHsKICAgICAvLyBOb3RlIHRoYXQgdGhlcmUgaXMgbm90IHNvIG11Y2ggcHJvZml0IHRv
IHNwZWN1bGF0ZSBoZXJlLiBUaGUgb25seSB0aGluZ3Mgd2UKQEAgLTExOTY1LDYgKzEyMzkxLDM5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQcm90b3R5cGVPZihOb2RlKiBub2Rl
KQogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlkZW50aXR5KE5vZGUq
IG5vZGUpCit7CisgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBzd2l0
Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgRG91YmxlUmVwVXNlOgor
ICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToKKyAgICBjYXNlIERvdWJsZVJlcEFueUludFVzZTog
eworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgb3ApOworICAgICAgICBtX2pp
dC5tb3ZlRG91YmxlKG9wLmZwcigpLCBzY3JhdGNoLmZwcigpKTsKKyAgICAgICAgZG91YmxlUmVz
dWx0KHNjcmF0Y2guZnByKCksIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBJbnQ1MlJlcFVzZTogeworICAgICAgICBTcGVjdWxhdGVJbnQ1Mk9wZXJhbmQgb3AodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNl
LCBvcCk7CisgICAgICAgIG1faml0Lm1vdmUob3AuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgIGludDUyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBkZWZhdWx0OiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wKHRoaXMsIG5vZGUt
PmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBKU1ZhbHVlUmVn
c1RlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
b3BSZWdzID0gb3AuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7CisgICAgICAgIG1faml0Lm1vdmVWYWx1ZVJlZ3Mob3BSZWdzLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KK30KKworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCmluZGV4IDNkNjUwMzkwNjc2N2E5OGEyM2RiNDE0MWQ4YzA2NmYzYTM0YzRlMTIuLjQy
NjY2MmIxYWQ4NGEzM2IxNDNlODEzMDUzOWU0YjRjMTA1MGY1YzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTEyODEsNiArMTI4MSw3IEBA
IGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICB2b2lkIGNvbXBpbGVMb2FkVmFsdWVGcm9tTWFw
QnVja2V0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVFeHRyYWN0VmFsdWVGcm9tV2Vha01hcEdl
dChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0UHJvdG90eXBlT2YoTm9kZSopOworICAgIHZv
aWQgY29tcGlsZUlkZW50aXR5KE5vZGUqKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2VPcGVyYW5kVHlwZSwgdHlwZW5hbWUgUHJvcGVydHlP
cGVyYW5kVHlwZSwgdHlwZW5hbWUgVmFsdWVPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVGFnVHlwZT4K
QEAgLTEzNTIsNiArMTM1Myw3IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICB2b2lkIGNv
bXBpbGVBcml0aFJhbmRvbShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhVbmFyeShOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhTcXJ0KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVB
cml0aE1pbk1heChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ29uc3RhbnRTdG9yYWdlUG9pbnRl
cihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZShOb2Rl
Kik7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcEZvclR5cGVkQXJyYXlPdXRPZkJvdW5kcyhO
b2RlKiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyBpbmRleEdQUik7CkBAIC0xMzY2LDYgKzEzNjgs
OSBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxGb3JP
YmplY3RXaXRoU3ltYm9sKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxX
aXRoU3RyaW5nKE5vZGUqLCBFZGdlJiBjaGlsZDEsIEVkZ2UmIGNoaWxkMiwgRWRnZSYgY2hpbGQz
KTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKE5vZGUqLCBFZGdl
JiBjaGlsZDEsIEVkZ2UmIGNoaWxkMiwgRWRnZSYgY2hpbGQzKTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbFdpdGhUaGlzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeU9mZnNldChOb2Rl
Kik7CisgICAgdm9pZCBjb21waWxlUHV0QnlPZmZzZXQoTm9kZSopOwogICAgIC8vIElmIHRoaXMg
cmV0dXJucyBmYWxzZSBpdCBtZWFucyB0aGF0IHdlIHRlcm1pbmF0ZWQgc3BlY3VsYXRpdmUgZXhl
Y3V0aW9uLgogICAgIGJvb2wgZ2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgKICAgICAgICAg
R1BSVGVtcG9yYXJ5JiB2YWx1ZSwKQEAgLTEzOTEsNiArMTM5Niw3IEBAIGNsYXNzIFNwZWN1bGF0
aXZlSklUIHsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUNyZWF0ZVJlc3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVNwcmVh
ZChOb2RlKik7CisgICAgdm9pZCBjb21waWxlTmV3QXJyYXkoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZU5ld0FycmF5V2l0aFNwcmVhZChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0UmVzdExl
bmd0aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJyYXlTbGljZShOb2RlKik7CkBAIC0xNDA2
LDYgKzE0MTIsNyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9pZCBjb21waWxlSXNP
YmplY3RPck51bGwoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlzRnVuY3Rpb24oTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZVR5cGVPZihOb2RlKik7CisgICAgdm9pZCBjb21waWxlQ2hlY2tDZWxs
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKik7CiAgICAgdm9p
ZCBlbWl0U3RydWN0dXJlQ2hlY2soTm9kZSosIEdQUlJlZyBjZWxsR1BSLCBHUFJSZWcgdGVtcEdQ
Uik7CiAgICAgdm9pZCBjb21waWxlUHV0QWNjZXNzb3JCeUlkKE5vZGUqKTsKQEAgLTE0MTksOCAr
MTQyNiwxMiBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9pZCBjb21waWxlVG9PYmpl
Y3RPckNhbGxPYmplY3RDb25zdHJ1Y3RvcihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUmVzb2x2
ZVNjb3BlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1
bmNEZWNsSW5FdmFsKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRHbG9iYWxWYXJpYWJsZShO
b2RlKik7CisgICAgdm9pZCBjb21waWxlUHV0R2xvYmFsVmFyaWFibGUoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUdldER5bmFtaWNWYXIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVB1dER5bmFt
aWNWYXIoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldENsb3N1cmVWYXIoTm9kZSopOworICAg
IHZvaWQgY29tcGlsZVB1dENsb3N1cmVWYXIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNvbXBh
cmVFcVB0cihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRGVmaW5lRGF0YVByb3BlcnR5KE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVEZWZpbmVBY2Nlc3NvclByb3BlcnR5KE5vZGUqKTsKQEAgLTE0
MzUsMTQgKzE0NDYsMTcgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIHZvaWQgY29tcGls
ZUhhc1N0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRQcm9wZXJ0
eUVudW1lcmF0b3IoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShO
b2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0RXhlY3V0YWJsZShOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlR2V0R2V0dGVyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRTZXR0ZXIoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZUdldENhbGxlZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVNldEFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTdHJDYXQo
Tm9kZSopOworICAgIHZvaWQgY29tcGlsZU5ld0FycmF5QnVmZmVyKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVOZXdBcnJheVdpdGhTaXplKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdUeXBl
ZEFycmF5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVUb1RoaXMoTm9kZSopOwogICAgIHZvaWQg
Y29tcGlsZUNyZWF0ZVRoaXMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5ld09iamVjdChOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlVG9QcmltaXRpdmUoTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggZDgx
YTVlZjliNDM1NDllZjRlNjUzODMyN2I0MzdiNjczOTg3NmI4MS4uZTZjODVlNDU0OWI3NGMzYmFl
MTMxMjM2YjM4NTI4ODY1M2I3NjZjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0yMDk2LDM0ICsyMDk2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAg
ICAgICAgY2FzZSBEb3VibGVSZXBVc2U6Ci0gICAgICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZTog
ewotICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcCh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgICAgICBkb3VibGVSZXN1bHQob3AuZnByKCksIG5vZGUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZTogCi0gICAg
ICAgIGNhc2UgQW55SW50VXNlOgotICAgICAgICBjYXNlIERvdWJsZVJlcEFueUludFVzZTogewot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgICAKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIG9wKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBSZXVzZSwgb3As
IFRhZ1dvcmQpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywg
UmV1c2UsIG9wLCBQYXlsb2FkV29yZCk7Ci0gICAgICAgICAgICBHUFJSZWcgc291cmNlVGFnID0g
b3AudGFnR1BSKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc291cmNlUGF5bG9hZCA9IG9wLnBheWxv
YWRHUFIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3By
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQu
Z3ByKCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHNvdXJjZVRhZywgcmVzdWx0VGFnR1BSKTsK
LSAgICAgICAgICAgIG1faml0Lm1vdmUoc291cmNlUGF5bG9hZCwgcmVzdWx0UGF5bG9hZEdQUik7
Ci0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQ
Uiwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9IC8vIHN3
aXRjaAorICAgICAgICBjb21waWxlSWRlbnRpdHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIApAQCAtMjM3NSw3MiArMjM0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKIAogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDogewot
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIElu
dDMyVXNlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3AxKTsKLQotICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9
IG9wMS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoMzIob3AgPT0gQXJpdGhN
aW4gPyBNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4gOiBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRo
YW4sIG9wMUdQUiwgb3AyR1BSKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1
bHRHUFIpOwotICAgICAgICAgICAgaWYgKG9wMUdQUiAhPSByZXN1bHRHUFIpIHsKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAg
ICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUob3AxR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2pp
dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2Fz
ZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxKTsKLQotICAgICAgICAgICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIo
KTsKLSAgICAgICAgICAgIEZQUlJlZyBvcDJGUFIgPSBvcDIuZnByKCk7Ci0gICAgICAgICAgICBG
UFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOwotCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0
ZXJUaGFuLCBvcDFGUFIsIG9wMkZQUik7Ci0gICAgICAgIAotICAgICAgICAgICAgLy8gb3AyIGlz
IGVhdGhlciB0aGUgbGVzc2VyIG9uZSBvciBvbmUgb2YgdGhlbiBpcyBOYU4KLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMkxlc3MgPSBtX2ppdC5icmFuY2hEb3VibGUob3AgPT0g
QXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsIDogTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCwgb3AxRlBSLCBvcDJGUFIpOwotICAg
ICAgICAKLSAgICAgICAgICAgIC8vIFVub3JkZXJlZCBjYXNlLiBXZSBkb24ndCBrbm93IHdoaWNo
IG9mIG9wMSwgb3AyIGlzIE5hTi4gTWFudWZhY3R1cmUgTmFOIGJ5IGFkZGluZyAKLSAgICAgICAg
ICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBpbnRvIHJlc3VsdC4KLSAgICAgICAgICAg
IG1faml0LmFkZERvdWJsZShvcDFGUFIsIG9wMkZQUiwgcmVzdWx0RlBSKTsKLSAgICAgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIAotICAgICAgICAgICAgb3AyTGVz
cy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMkZQUiwgcmVz
dWx0RlBSKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAob3AxRlBSICE9IHJlc3VsdEZQUikg
ewotICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlRG91YmxlKG9wMUZQUiwgcmVzdWx0RlBSKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgICAgIGRvdWJsZVJl
c3VsdChyZXN1bHRGUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGNv
bXBpbGVBcml0aE1pbk1heChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yODQz
LDIwICsyNzUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWxXaXRoVGhpczogewotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNW
YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIHRoaXNWYWx1
ZVJlZ3MgPSB0aGlzVmFsdWUuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
c3Vic2NyaXB0KHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3Mgc3Vi
c2NyaXB0UmVncyA9IHN1YnNjcmlwdC5qc1ZhbHVlUmVncygpOwotCi0gICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRo
aXMpOwotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbFdpdGhUaGlzLCByZXN1bHRSZWdz
LCBiYXNlUmVncywgdGhpc1ZhbHVlUmVncywgc3Vic2NyaXB0UmVncyk7Ci0gICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7Ci0KLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsV2l0aFRoaXMobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApAQCAtMzUxMSwxNzIgKzM0MDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE5ld0FycmF5
OiB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgp
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBpZiAoIWds
b2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2Uobm9k
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0
cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhp
bmdUeXBlKCkpKTsKLSAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
ID09IG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCgKLSAgICAgICAg
ICAgICAgICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAg
ICAgICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAg
ICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAg
ICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotCi0g
ICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgZW1pdEFsbG9jYXRl
UmF3T2JqZWN0KHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzdG9yYWdlR1BSLCBudW1FbGVtZW50cywg
bnVtRWxlbWVudHMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50
LCBvbmUgd2F5IG9yIGFub3RoZXIsIHJlc3VsdEdQUiBhbmQgc3RvcmFnZUdQUiBoYXZlIHBvaW50
ZXJzIHRvCi0gICAgICAgICAgICAvLyB0aGUgSlNBcnJheSBhbmQgdGhlIEJ1dHRlcmZseSwgcmVz
cGVjdGl2ZWx5LgotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIWhhc1VuZGVjaWRl
ZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB8fCAhbm9kZS0+bnVtQ2hpbGRyZW4oKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9w
ZXJhbmRJZHggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKLSAgICAgICAg
ICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5m
aXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsK
LSAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRoaXMs
IHVzZSk7Ci0gICAgICAgICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7
Ci0gICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVjRG91YmxlUmVhbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1
YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7Ci0gICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZURvdWJsZShvcEZQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgc2l6ZW9mKGRvdWJsZSkgKiBvcGVyYW5kSWR4KSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9J
TlQzMl9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnQz
Mk9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIG9wZXJhbmRJZHggKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKG9wZXJhbmQuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIG9wZXJhbmRJZHggKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFu
ZCh0aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgp
ICsgb3BlcmFuZElkeF0pOwotICAgICAgICAgICAgICAgICAgICBHUFJSZWcgb3BUYWdHUFIgPSBv
cGVyYW5kLnRhZ0dQUigpOwotICAgICAgICAgICAgICAgICAgICBHUFJSZWcgb3BQYXlsb2FkR1BS
ID0gb3BlcmFuZC5wYXlsb2FkR1BSKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIob3BUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihK
U1ZhbHVlKSAqIG9wZXJhbmRJZHggKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKG9wUGF5bG9hZEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogb3Bl
cmFuZElkeCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBZdWNrLCB3ZSBzaG91bGQgKnJlYWxseSogaGF2ZSBhIHdh
eSBvZiBhbHNvIHJldHVybmluZyB0aGUgc3RvcmFnZUdQUi4gQnV0Ci0gICAgICAgICAgICAvLyB0
aGF0J3MgdGhlIGxlYXN0IG9mIHdoYXQncyB3cm9uZyB3aXRoIHRoaXMgY29kZS4gV2UgcmVhbGx5
IHNob3VsZG4ndCBiZQotICAgICAgICAgICAgLy8gYWxsb2NhdGluZyB0aGUgYXJyYXkgYWZ0ZXIg
aGF2aW5nIGNvbXB1dGVkIC0gYW5kIHByb2JhYmx5IHNwaWxsZWQgdG8gdGhlCi0gICAgICAgICAg
ICAvLyBzdGFjayAtIGFsbCBvZiB0aGUgdGhpbmdzIHRoYXQgd2lsbCBnbyBpbnRvIHRoZSBhcnJh
eS4gVGhlIHNvbHV0aW9uIHRvIHRoYXQKLSAgICAgICAgICAgIC8vIGJpZ2dlciBwcm9ibGVtIHdp
bGwgYWxzbyBsaWtlbHkgZml4IHRoZSByZWR1bmRhbmN5IGluIHJlbG9hZGluZyB0aGUgc3RvcmFn
ZQotICAgICAgICAgICAgLy8gcG9pbnRlciB0aGF0IHdlIGN1cnJlbnRseSBoYXZlLgotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLT5udW1D
aGlsZHJlbigpKSB7Ci0gICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbigKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdFbXB0eUFycmF5LCByZXN1bHQuZ3By
KCksIG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBl
KCkpKSk7Ci0gICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAg
Y2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKiBub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICBTY3JhdGNoQnVmZmVy
KiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0oKS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRj
aFNpemUpOwotICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/
IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigp
KSA6IDA7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJZHggPSAwOyBv
cGVyYW5kSWR4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSWR4KSB7Ci0gICAgICAg
ICAgICAvLyBOZWVkIHRvIHBlcmZvcm0gdGhlIHNwZWN1bGF0aW9ucyB0aGF0IHRoaXMgbm9kZSBw
cm9taXNlcyB0byBwZXJmb3JtLiBJZiB3ZSdyZQotICAgICAgICAgICAgLy8gZW1pdHRpbmcgY29k
ZSBoZXJlIGFuZCB0aGUgaW5kZXhpbmcgdHlwZSBpcyBub3QgYXJyYXkgc3RvcmFnZSB0aGVuIHRo
ZXJlIGlzCi0gICAgICAgICAgICAvLyBwcm9iYWJseSBzb21ldGhpbmcgaGlsYXJpb3VzIGdvaW5n
IG9uIGFuZCB3ZSdyZSBhbHJlYWR5IGZhaWxpbmcgYXQgYWxsIHRoZQotICAgICAgICAgICAgLy8g
dGhpbmdzLCBidXQgYXQgbGVhc3Qgd2UncmUgZ29pbmcgdG8gYmUgc291bmQuCi0gICAgICAgICAg
ICBFZGdlIHVzZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENo
aWxkKCkgKyBvcGVyYW5kSWR4XTsKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+aW5kZXhpbmdU
eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAg
ICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAg
ICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFM
TF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKLSAgICAgICAgICAgICAgICBGUFJSZWcgb3BG
UFIgPSBvcGVyYW5kLmZwcigpOwotICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAotICAg
ICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncygpLCB1c2UsIFNwZWNGdWxsUmVhbE51bWJlciwK
LSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShvcEZQUiwgVHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIgKyBvcGVyYW5kSWR4KSkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBBTExfSU5U
MzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJh
bmQgb3BlcmFuZCh0aGlzLCB1c2UpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBvcEdQUiA9IG9w
ZXJhbmQuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIgKyBvcGVy
YW5kSWR4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihvcEdQUiwgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oYnVmZmVyICsgb3BlcmFuZElkeCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOiB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBtX2pp
dC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElk
eF0pOwotICAgICAgICAgICAgICAgIEdQUlJlZyBvcFRhZ0dQUiA9IG9wZXJhbmQudGFnR1BSKCk7
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIG9wUGF5bG9hZEdQUiA9IG9wZXJhbmQucGF5bG9hZEdQ
UigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIob3BU
YWdHUFIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciArIG9wZXJhbmRJZHgpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKG9wUGF5bG9hZEdQUiwgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oYnVmZmVyICsgb3BlcmFuZElkeCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICAgICAgICAgICAgICBvcGVyYW5kLnVz
ZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19U
WVBFUzoKLSAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICB1c2VDaGlsZHJlbihub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgaWYgKHNjcmF0Y2hTaXplKSB7Ci0gICAgICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLQotICAgICAgICAgICAgLy8gVGVsbCBHQyBtYXJr
IHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBhY3RpdmUgZHVyaW5nIGNh
bGwuCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+
YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBzY3JhdGNoLmdwcigpKTsKLSAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBzY3JhdGNoLmdwcigpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
LSAgICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICBvcGVyYXRpb25O
ZXdBcnJheSwgcmVzdWx0LmdwcigpLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDx2b2lkKj4o
YnVmZmVyKSwgc2l6ZV90KG5vZGUtPm51bUNoaWxkcmVuKCkpKTsKLSAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKLQotICAgICAgICBpZiAoc2NyYXRjaFNpemUpIHsKLSAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBzY3Jh
dGNoLmdwcigpKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIHNjcmF0Y2guZ3ByKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2VsbFJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAg
IGNvbXBpbGVOZXdBcnJheShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNjk2
LDQ1ICszNDI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjogewotICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgSlNGaXhlZEFycmF5KiBhcnJheSA9IG5v
ZGUtPmNhc3RPcGVyYW5kPEpTRml4ZWRBcnJheSo+KCk7Ci0gICAgICAgIHVuc2lnbmVkIG51bUVs
ZW1lbnRzID0gYXJyYXktPmxlbmd0aCgpOwotICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlID0gbm9kZS0+aW5kZXhpbmdUeXBlKCk7Ci0gICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5p
c0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUpKSB7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0g
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgZW1pdEFsbG9j
YXRlUmF3T2JqZWN0KHJlc3VsdEdQUiwgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlv
bihpbmRleGluZ1R5cGUpKSwgc3RvcmFnZUdQUiwgbnVtRWxlbWVudHMsIG51bUVsZW1lbnRzKTsK
LQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtRWxlbWVu
dHM7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGludDMyX3QgaGFsdmVzWzJdOwotICAgICAgICAgICAgICAgICAgICBkb3VibGUgZG91Ymxl
VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGludDY0X3QgZW5jb2RlZFZhbHVlOwotICAgICAg
ICAgICAgICAgIH0gdTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+aW5kZXhpbmdUeXBlKCkg
PT0gQXJyYXlXaXRoRG91YmxlKQotICAgICAgICAgICAgICAgICAgICB1LmRvdWJsZVZhbHVlID0g
YXJyYXktPmdldChpbmRleCkuYXNOdW1iZXIoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHUuZW5jb2RlZFZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5n
ZXQoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkb3VibGUp
ID09IHNpemVvZihKU1ZhbHVlKSwgIiIpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
SW1tMzIodS5oYWx2ZXNbMF0pLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBz
aXplb2YoSlNWYWx1ZSkgKiBpbmRleCkpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
SW1tMzIodS5oYWx2ZXNbMV0pLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBz
aXplb2YoSlNWYWx1ZSkgKiBpbmRleCArIHNpemVvZihpbnQzMl90KSkpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIsIHJlc3VsdC5ncHIoKSwg
bV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkp
LCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVyYW5kKCkpLCBzaXplX3QobnVtRWxlbWVudHMp
KTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgCi0gICAgICAgIGNl
bGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgY29tcGlsZU5ld0FycmF5QnVm
ZmVyKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzc1NSwzNSAr
MzQ0Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgVG9UaGlzOiB7Ci0gICAgICAgIEFTU0VSVChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHRo
aXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcFRhZyh0aGlzKTsKLSAgICAgICAgR1BS
UmVnIHRoaXNWYWx1ZVBheWxvYWRHUFIgPSB0aGlzVmFsdWUucGF5bG9hZEdQUigpOwotICAgICAg
ICBHUFJSZWcgdGhpc1ZhbHVlVGFnR1BSID0gdGhpc1ZhbHVlLnRhZ0dQUigpOwotICAgICAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wVGFnR1BSID0g
dGVtcFRhZy5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RD
ZWxsKHRoaXNWYWx1ZS5qc1ZhbHVlUmVncygpKSk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
Ci0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCggICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRoaXNWYWx1ZVBheWxvYWRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpKTsKLSAgICAgICAgbV9qaXQubW92ZSh0
aGlzVmFsdWVQYXlsb2FkR1BSLCB0ZW1wR1BSKTsKLSAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFs
dWVUYWdHUFIsIHRlbXBUYWdHUFIpOwotICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSiBmdW5jdGlv
bjsKLSAgICAgICAgaWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0
aW9uVG9UaGlzU3RyaWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IG9w
ZXJhdGlvblRvVGhpczsKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAg
ICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBmdW5jdGlv
biwKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyh0ZW1wVGFnR1BSLCB0ZW1wR1BSKSwgSlNW
YWx1ZVJlZ3ModGhpc1ZhbHVlVGFnR1BSLCB0aGlzVmFsdWVQYXlsb2FkR1BSKSkpOwotCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQodGVtcFRhZ0dQUiwgdGVtcEdQUiwgbm9kZSk7CisgICAgICAgIGNv
bXBpbGVUb1RoaXMobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzgyOCwyOSAr
MzQ5MiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldENsb3N1cmVWYXI6IHsKLSAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0g
ICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgIEdQ
UlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlKG5vZGUtPnNjb3BlT2Zmc2V0KCkpICsgVGFnT2Zmc2V0KSwg
cmVzdWx0VGFnR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKG5vZGUtPnNj
b3BlT2Zmc2V0KCkpICsgUGF5bG9hZE9mZnNldCksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7Cisg
ICAgICAgIGNvbXBpbGVHZXRDbG9zdXJlVmFyKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgCiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIo
KTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsK
LQotICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShub2RlLT5z
Y29wZU9mZnNldCgpKSArIFRhZ09mZnNldCkpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVl
UGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGUobm9kZS0+c2NvcGVPZmZzZXQoKSkgKyBQYXlsb2FkT2Zm
c2V0KSk7Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlUHV0Q2xvc3Vy
ZVZhcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDE4LDkgKzM2NjUsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIENoZWNrQ2VsbDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBj
ZWxsKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRD
ZWxsLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsLmdwcigpKSwgbm9kZS0+Y2hpbGQx
KCksIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBjZWxsLmdwcigp
LCBub2RlLT5jZWxsT3BlcmFuZCgpLT5jZWxsKCkpKTsKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7
CisgICAgICAgIGNvbXBpbGVDaGVja0NlbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IApAQCAtNDAzNywxMyArMzY4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldEV4ZWN1dGFibGU6IHsKLSAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBmdW5jdGlvbik7Ci0g
ICAgICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOwotICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZShu
b2RlLT5jaGlsZDEoKSwgZnVuY3Rpb25HUFIsIFNwZWNGdW5jdGlvbiwgSlNGdW5jdGlvblR5cGUp
OwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGZ1bmN0aW9uR1BS
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIHJlc3VsdEdQUik7Ci0gICAgICAg
IGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldEV4ZWN1dGFi
bGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MTA3LDIwICsz
NzQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDogewotICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdFRhZyh0aGlzLCBSZXVzZSwgc3RvcmFnZSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdw
cigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7Ci0gICAgICAgIAotICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0Rh
dGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAg
ICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAg
ICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2Fk
R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldEJ5T2Zmc2V0KG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDE1MCwyMSArMzc3Niw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMygpKTsKLQotICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0g
ICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwotICAgICAgICBHUFJS
ZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwotCi0gICAgICAgIHNwZWN1
bGF0ZShub2RlLCBub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEm
IHN0b3JhZ2VBY2Nlc3NEYXRhID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAg
Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc3RvcmFnZUFjY2Vzc0Rh
dGEub2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpKTsKLSAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAg
ICBjb21waWxlUHV0QnlPZmZzZXQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAt
NDI1MSwyOCArMzg2MywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAKICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJpYWJsZToKICAgICBjYXNlIEdldEds
b2JhbFZhcjogewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLQotICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIobm9kZS0+dmFyaWFibGVQb2ludGVyKCkpLCByZXN1bHRQYXlsb2FkLmdw
cigpKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFBh
eWxvYWQuZ3ByKCksIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkLmdwcigpLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7
Ci0KLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQu
Z3ByKCksIG5vZGUpOworICAgICAgICBjb21waWxlR2V0R2xvYmFsVmFyaWFibGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyaWFibGU6IHsKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAg
ICAgIC8vIEZJWE1FOiBpZiB3ZSBoYXBwZW4gdG8gaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyIC0gYW5k
IF9PTkxZXyBpZiB3ZSBoYXBwZW4gdG8gaGF2ZQotICAgICAgICAvLyBhIHNwYXJlIHJlZ2lzdGVy
IC0gYSBnb29kIG9wdGltaXphdGlvbiB3b3VsZCBiZSB0byBwdXQgdGhlIHJlZ2lzdGVyIHBvaW50
ZXIgaW50bwotICAgICAgICAvLyBhIHJlZ2lzdGVyIGFuZCB0aGVuIGRvIGEgemVybyBvZmZzZXQg
c3RvcmUgZm9sbG93ZWQgYnkgYSBmb3VyLW9mZnNldCBzdG9yZSAob3IKLSAgICAgICAgLy8gdmlj
ZS12ZXJzYSBkZXBlbmRpbmcgb24gZW5kaWFubmVzcykuCi0gICAgICAgIG1faml0LnN0b3JlMzIo
dmFsdWUudGFnR1BSKCksIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpLT50YWdQb2ludGVyKCkpOwot
ICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgbm9kZS0+dmFyaWFibGVQ
b2ludGVyKCktPnBheWxvYWRQb2ludGVyKCkpOwotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwor
ICAgICAgICBjb21waWxlUHV0R2xvYmFsVmFyaWFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKaW5kZXggZTk2YmY3MzkyNzAxOWRjYmNjYjVmNWE0NmViYzg3ZWJhMzc0ZjBkZS4u
YmE2OGVmZjI3ZDdmMDRlNTkzZWM1NjIyZjk0OWIzNTc5YjQzMzM4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0yMjAyLDMy
ICsyMjAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgSWRlbnRpdHk6IHsKLSAgICAgICAgc3BlY3VsYXRlKG5v
ZGUsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6Ci0gICAgICAgIGNhc2UgRG91Ymxl
UmVwUmVhbFVzZToKLSAgICAgICAgY2FzZSBEb3VibGVSZXBBbnlJbnRVc2U6IHsKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgb3ApOwotICAgICAgICAgICAgbV9q
aXQubW92ZURvdWJsZShvcC5mcHIoKSwgc2NyYXRjaC5mcHIoKSk7Ci0gICAgICAgICAgICBkb3Vi
bGVSZXN1bHQoc2NyYXRjaC5mcHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEludDUyUmVwVXNlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJ
bnQ1Mk9wZXJhbmQgb3AodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3ApOwotICAgICAgICAgICAgbV9qaXQubW92ZShv
cC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGludDUyUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZh
dWx0OiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcCh0aGlzLCBub2RlLT5jaGlsZDEo
KSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgUmV1c2UsIG9wKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9IC8vIHN3aXRj
aAorICAgICAgICBjb21waWxlSWRlbnRpdHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IApAQCAtMjUxNiw2OCArMjQ5MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgCiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4
OiB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7Ci0gICAgICAgIGNh
c2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoMzIob3AgPT0gQXJp
dGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4gOiBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRl
clRoYW4sIG9wMS5ncHIoKSwgb3AyLmdwcigpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3Ay
LmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgaWYgKG9wMS5ncHIoKSAhPSByZXN1
bHQuZ3ByKCkpIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwotICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAg
ICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgRlBSUmVnIG9wMUZQUiA9IG9wMS5mcHIoKTsKLSAgICAgICAgICAg
IEZQUlJlZyBvcDJGUFIgPSBvcDIuZnByKCk7Ci0gICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBS
ID0gcmVzdWx0LmZwcigpOwotICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBkb25lOwotICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG9wMUxlc3MgPSBtX2ppdC5icmFuY2hEb3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlTGVzc1RoYW4gOiBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4s
IG9wMUZQUiwgb3AyRlBSKTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBvcDIgaXMgZWF0aGVy
IHRoZSBsZXNzZXIgb25lIG9yIG9uZSBvZiB0aGVuIGlzIE5hTgotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgb3AyTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShvcCA9PSBBcml0aE1p
biA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgOiBNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsLCBvcDFGUFIsIG9wMkZQUik7Ci0gICAgICAgIAot
ICAgICAgICAgICAgLy8gVW5vcmRlcmVkIGNhc2UuIFdlIGRvbid0IGtub3cgd2hpY2ggb2Ygb3Ax
LCBvcDIgaXMgTmFOLiBNYW51ZmFjdHVyZSBOYU4gYnkgYWRkaW5nIAotICAgICAgICAgICAgLy8g
b3AxICsgb3AyIGFuZCBwdXR0aW5nIGl0IGludG8gcmVzdWx0LgotICAgICAgICAgICAgbV9qaXQu
YWRkRG91YmxlKG9wMUZQUiwgb3AyRlBSLCByZXN1bHRGUFIpOwotICAgICAgICAgICAgZG9uZS5h
cHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgCi0gICAgICAgICAgICBvcDJMZXNzLmxpbmso
Jm1faml0KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AyRlBSLCByZXN1bHRGUFIp
OwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChvcDFGUFIgIT0gcmVzdWx0RlBSKSB7Ci0gICAg
ICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIG1faml0
Lm1vdmVEb3VibGUob3AxRlBSLCByZXN1bHRGUFIpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJl
c3VsdEZQUiwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
KyAgICAgICAgY29tcGlsZUFyaXRoTWluTWF4KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTI5MjksMjAgKzI4NDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOiB7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0
aGlzVmFsdWUuZ3ByKCk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHN1YnNjcmlwdCh0aGlzLCBu
b2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgIEdQUlJlZyBzdWJzY3JpcHRHUFIgPSBzdWJzY3JpcHQu
Z3ByKCk7Ci0KLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgR1BSRmx1c2hlZENh
bGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsV2l0aFRoaXMs
IHJlc3VsdEdQUiwgYmFzZUdQUiwgdGhpc1ZhbHVlR1BSLCBzdWJzY3JpcHRHUFIpOwotICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsV2l0aFRoaXMobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzcxOSwxNzcgKzM2MjAsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIE5l
d0FycmF5OiB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5n
cmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBp
ZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3Jh
Z2Uobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICBSZWdpc3RlcmVkU3RydWN0
dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+
aW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBub2RlLT5pbmRleGluZ1R5cGUoKSwg
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSwgbm9kZS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAg
ICAgICAgQVNTRVJUKAotICAgICAgICAgICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIG51
bUVsZW1lbnRzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aEhpbnQgPSBub2RlLT52ZWN0b3JMZW5ndGhIaW50KCk7Ci0gICAgICAgICAgICBB
U1NFUlQodmVjdG9yTGVuZ3RoSGludCA+PSBudW1FbGVtZW50cyk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc3RvcmFnZSh0aGlzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
c3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgZW1pdEFsbG9jYXRlUmF3T2JqZWN0KHJlc3Vs
dEdQUiwgc3RydWN0dXJlLCBzdG9yYWdlR1BSLCBudW1FbGVtZW50cywgdmVjdG9yTGVuZ3RoSGlu
dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIG9uZSB3YXkg
b3IgYW5vdGhlciwgcmVzdWx0R1BSIGFuZCBzdG9yYWdlR1BSIGhhdmUgcG9pbnRlcnMgdG8KLSAg
ICAgICAgICAgIC8vIHRoZSBKU0FycmF5IGFuZCB0aGUgQnV0dGVyZmx5LCByZXNwZWN0aXZlbHku
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVCghaGFzVW5kZWNpZGVkKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpIHx8ICFub2RlLT5udW1DaGlsZHJlbigpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8
IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgewotICAgICAgICAgICAgICAgIEVk
Z2UgdXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQo
KSArIG9wZXJhbmRJZHhdOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+aW5kZXhpbmdU
eXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAg
ICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKLSAg
ICAgICAgICAgICAgICAgICAgRlBSUmVnIG9wRlBSID0gb3BlcmFuZC5mcHIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlUmVncygpLCB1c2UsIFNwZWNEb3VibGVSZWFsLAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoRG91YmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwgb3BGUFIpKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUob3BGUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihkb3VibGUpICogb3BlcmFuZElkeCkpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Y2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAg
ICAgICAgICAgICAgICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3Mob3BHUFIpLCB1c2UsIFNwZWNJbnQzMk9ubHksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3BHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlNjQob3BHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIHNpemVvZihKU1ZhbHVlKSAqIG9wZXJhbmRJZHgpKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gWXVjaywgd2Ugc2hvdWxkICpyZWFsbHkqIGhhdmUgYSB3YXkgb2YgYWxzbyByZXR1cm5pbmcg
dGhlIHN0b3JhZ2VHUFIuIEJ1dAotICAgICAgICAgICAgLy8gdGhhdCdzIHRoZSBsZWFzdCBvZiB3
aGF0J3Mgd3Jvbmcgd2l0aCB0aGlzIGNvZGUuIFdlIHJlYWxseSBzaG91bGRuJ3QgYmUKLSAgICAg
ICAgICAgIC8vIGFsbG9jYXRpbmcgdGhlIGFycmF5IGFmdGVyIGhhdmluZyBjb21wdXRlZCAtIGFu
ZCBwcm9iYWJseSBzcGlsbGVkIHRvIHRoZQotICAgICAgICAgICAgLy8gc3RhY2sgLSBhbGwgb2Yg
dGhlIHRoaW5ncyB0aGF0IHdpbGwgZ28gaW50byB0aGUgYXJyYXkuIFRoZSBzb2x1dGlvbiB0byB0
aGF0Ci0gICAgICAgICAgICAvLyBiaWdnZXIgcHJvYmxlbSB3aWxsIGFsc28gbGlrZWx5IGZpeCB0
aGUgcmVkdW5kYW5jeSBpbiByZWxvYWRpbmcgdGhlIHN0b3JhZ2UKLSAgICAgICAgICAgIC8vIHBv
aW50ZXIgdGhhdCB3ZSBjdXJyZW50bHkgaGF2ZS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS0+bnVtQ2hpbGRyZW4oKSkgewotICAgICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0
IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3RW1w
dHlBcnJheSwgcmVzdWx0LmdwcigpLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSkpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzaXplX3Qgc2NyYXRj
aFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAg
ICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZtKCktPnNjcmF0Y2hC
dWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKLSAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZl
ciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hC
dWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3Bl
cmFuZElkeCkgewotICAgICAgICAgICAgLy8gTmVlZCB0byBwZXJmb3JtIHRoZSBzcGVjdWxhdGlv
bnMgdGhhdCB0aGlzIG5vZGUgcHJvbWlzZXMgdG8gcGVyZm9ybS4gSWYgd2UncmUKLSAgICAgICAg
ICAgIC8vIGVtaXR0aW5nIGNvZGUgaGVyZSBhbmQgdGhlIGluZGV4aW5nIHR5cGUgaXMgbm90IGFy
cmF5IHN0b3JhZ2UgdGhlbiB0aGVyZSBpcwotICAgICAgICAgICAgLy8gcHJvYmFibHkgc29tZXRo
aW5nIGhpbGFyaW91cyBnb2luZyBvbiBhbmQgd2UncmUgYWxyZWFkeSBmYWlsaW5nIGF0IGFsbCB0
aGUKLSAgICAgICAgICAgIC8vIHRoaW5ncywgYnV0IGF0IGxlYXN0IHdlJ3JlIGdvaW5nIHRvIGJl
IHNvdW5kLgotICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hp
bGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07Ci0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19U
WVBFUzoKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7Ci0gICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgRlBS
UmVnIG9wRlBSID0gb3BlcmFuZC5mcHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCi0g
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwgU3BlY0RvdWJsZVJlYWwsCi0g
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwg
b3BGUFIpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5ib3hEb3VibGUob3BGUFIsIHNjcmF0Y2hH
UFIpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgYnVmZmVyICsg
b3BlcmFuZElkeCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pOwotICAgICAgICAgICAgICAgIEdQUlJlZyBvcEdQUiA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAg
ICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKG9wR1BSKSwgdXNlLCBTcGVjSW50MzJPbmx5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoNjQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCBvcEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQob3BHUFIs
IGJ1ZmZlciArIG9wZXJhbmRJZHgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAg
ICAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7Ci0gICAgICAgICAg
ICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIoKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKLSAgICAgICAgICAgICAgICBv
cGVyYW5kLnVzZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBz
d2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0RPVUJMRV9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgaWYgKHNjcmF0Y2hTaXplKSB7Ci0gICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLQotICAgICAgICAgICAgLy8gVGVs
bCBHQyBtYXJrIHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBhY3RpdmUg
ZHVyaW5nIGNhbGwuCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRj
aEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkpLCBzY3JhdGNoLmdwcigpKTsKLSAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBzY3JhdGNo
LmdwcigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICBv
cGVyYXRpb25OZXdBcnJheSwgcmVzdWx0LmdwcigpLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDx2b2lkKj4oYnVmZmVyKSwgc2l6ZV90KG5vZGUtPm51bUNoaWxkcmVuKCkpKTsKLSAgICAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLQotICAgICAgICBpZiAoc2NyYXRjaFNpemUpIHsKLSAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotCi0gICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3Ro
KCkpLCBzY3JhdGNoLmdwcigpKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIobnVsbHB0ciksIHNjcmF0Y2guZ3ByKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CisgICAgICAgIGNvbXBpbGVOZXdBcnJheShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC0zOTA5LDQ0ICszNjQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjogewotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgSlNGaXhlZEFycmF5KiBh
cnJheSA9IG5vZGUtPmNhc3RPcGVyYW5kPEpTRml4ZWRBcnJheSo+KCk7Ci0gICAgICAgIHVuc2ln
bmVkIG51bUVsZW1lbnRzID0gYXJyYXktPmxlbmd0aCgpOwotICAgICAgICBJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlID0gbm9kZS0+aW5kZXhpbmdUeXBlKCk7Ci0gICAgICAgIGlmICghZ2xvYmFs
T2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShpbmRleGlu
Z1R5cGUpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGhIaW50ID0gbm9kZS0+
dmVjdG9yTGVuZ3RoSGludCgpOwotICAgICAgICAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aEhpbnQg
Pj0gbnVtRWxlbWVudHMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIG1faml0LmdyYXBoKCkucmVn
aXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKSksIHN0b3JhZ2VHUFIsIG51bUVsZW1lbnRz
LCB2ZWN0b3JMZW5ndGhIaW50KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgREZHX0FTU0VS
VChtX2ppdC5ncmFwaCgpLCBub2RlLCBpbmRleGluZ1R5cGUgJiBJc0FycmF5LCBpbmRleGluZ1R5
cGUpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1F
bGVtZW50czsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGludDY0X3QgdmFsdWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBBcnJheVdpdGhEb3VibGUpCi0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlID0gYml0d2lzZV9jYXN0PGludDY0X3Q+KGFycmF5LT5nZXQoaW5k
ZXgpLmFzTnVtYmVyKCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoYXJyYXktPmdldChpbmRleCkpOwotICAgICAgICAg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRvdWJsZSkgPT0gc2l6ZW9mKEpTVmFsdWUpLCAi
Iik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChJbW02NCh2YWx1ZSksIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIGluZGV4KSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAg
ICAgICAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVz
dWx0LmdwcigpLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4
aW5nVHlwZSgpKSksIFRydXN0ZWRJbW1QdHIobm9kZS0+Y2VsbE9wZXJhbmQoKSksIHNpemVfdChu
dW1FbGVtZW50cykpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAK
LSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBjb21waWxl
TmV3QXJyYXlCdWZmZXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBA
IC0zOTY3LDI5ICszNjYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgIH0KIAogICAgIGNhc2UgVG9UaGlzOiB7Ci0gICAgICAgIEFTU0VSVChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOwotICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigp
OwotICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpKSk7
Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
OCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRoaXNWYWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSkpOwot
ICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgdGVtcEdQUik7Ci0gICAgICAgIEpfSklU
T3BlcmF0aW9uX0VKIGZ1bmN0aW9uOwotICAgICAgICBpZiAobV9qaXQuZ3JhcGgoKS5leGVjdXRh
YmxlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAg
ICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNTdHJpY3Q7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzOwotICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIGZ1bmN0
aW9uLCB0ZW1wR1BSLCB0aGlzVmFsdWVHUFIpKTsKLQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHRl
bXBHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlVG9UaGlzKG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTQwMzksMjQgKzM3MTEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBH
ZXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKG5v
ZGUtPnNjb3BlT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlR2V0Q2xvc3VyZVZhcihub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogewotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7Ci0KLSAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGUo
bm9kZS0+c2NvcGVPZmZzZXQoKSkpKTsKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAg
IGNvbXBpbGVQdXRDbG9zdXJlVmFyKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTQyMTIsOSArMzg3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tDZWxsOiB7Ci0gICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZENlbGwsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGwuZ3By
KCkpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90
RXF1YWwsIGNlbGwuZ3ByKCksIG5vZGUtPmNlbGxPcGVyYW5kKCktPmNlbGwoKSkpOwotICAgICAg
ICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZUNoZWNrQ2VsbChub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkBAIC00MjQzLDE0ICszOTAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0
RXhlY3V0YWJsZTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1
c2UsIGZ1bmN0aW9uKTsKLSAgICAgICAgR1BSUmVnIGZ1bmN0aW9uR1BSID0gZnVuY3Rpb24uZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIHNw
ZWN1bGF0ZUNlbGxUeXBlKG5vZGUtPmNoaWxkMSgpLCBmdW5jdGlvbkdQUiwgU3BlY0Z1bmN0aW9u
LCBKU0Z1bmN0aW9uVHlwZSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MoZnVuY3Rpb25HUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwgcmVz
dWx0R1BSKTsKLSAgICAgICAgbV9qaXQueG9yUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KEpTRnVuY3Rpb25Qb2lzb246OmtleSgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlR2V0RXhlY3V0YWJsZShub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQzMzEsMTcgKzM5ODEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgIGNh
c2UgR2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogewotICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgc3RvcmFnZSk7Ci0gICAgICAgIAot
ICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwot
ICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkpLCBy
ZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOworICAgICAgICBjb21waWxlR2V0QnlPZmZzZXQobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCkBAIC00MzU2LDE5ICszOTk2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9m
ZnNldDogewotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkp
OwotCi0gICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0KLSAgICAgICAgc3BlY3VsYXRlKG5vZGUs
IG5vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFj
Y2Vzc0RhdGEgPSBub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAgICAgICAKLSAgICAgICAg
bV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSkpOwotCi0gICAg
ICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlUHV0QnlPZmZzZXQobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDQ3MCwyMCArNDA5OCwxMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEdldEdsb2JhbExleGlj
YWxWYXJpYWJsZToKICAgICBjYXNlIEdldEdsb2JhbFZhcjogewotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotCi0gICAgICAgIG1faml0LmxvYWQ2NChub2RlLT52YXJpYWJsZVBv
aW50ZXIoKSwgcmVzdWx0LmdwcigpKTsKLQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVHZXRHbG9iYWxWYXJpYWJsZShub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRHbG9iYWxWYXJpYWJsZTogewotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAg
ICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgbm9kZS0+dmFyaWFibGVQb2ludGVyKCkpOwot
Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlUHV0R2xvYmFsVmFyaWFi
bGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336746</attachid>
            <date>2018-03-28 19:23:01 -0700</date>
            <delta_ts>2018-03-28 19:28:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184089-20180329112259.patch</filename>
            <type>text/plain</type>
            <size>70902</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
N2E3Y2JlNDNmMjlmZDk3NGE2ZjYzNmRjZTIwNzAzNTljY2ZiMDU4Li42YjlkODMyZDVjYzg5ZmYz
MWI2NDg2MjJkNDczYjc3ZTM4NmRiMWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxOC0wMy0yOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBNb3JlIGFnZ3Jlc3NpdmUgcmVtb3ZhbCBvZiAzMmJpdCBE
RkcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDA4
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggbW9yZSBhZ2dyZXNzaXZlbHkgcmVtb3ZlcyBkdXBsaWNhdGUgMzJiaXQgREZHIGNvZGUK
KyAgICAgICAgYnkgbGV2ZXJhZ2luZyBKU1ZhbHVlUmVncyBhbmQgbWV0YS1wcm9ncmFtbWVkIGNh
bGxPcGVyYXRpb24uCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxXaXRoVGhpcyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1pbk1heCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja0NlbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2xvYmFsVmFyaWFibGUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0R2xvYmFsVmFy
aWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0Q2xv
c3VyZVZhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRD
bG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
TmV3QXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVG9UaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlk
ZW50aXR5KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTgt
MDMtMjggIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAg
IE1TVkMgX19mb3JjZWlubGluZSBzbG93cyBkb3duIEpTQyByZWxlYXNlIGJ1aWxkIGZpdmVmb2xk
IGFmdGVyIHIyMjkzOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKaW5kZXggNzU2YjcwMTI0ZmE2MTAwNjY0YTZhYjEzOTJjMzAxYTZjMmVlNGFk
NS4uNzU3OTFjYmMwNTM4Y2Y5YWNhYTlhMzAxYmIwOGNiYjM4YWYyMjUzYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTMyNzgsNiAr
MzI3OCwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0
aFN5bWJvbChOb2RlKiBub2RlLCBFZGdlJiBjaGlsZDEsCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbFdpdGhUaGlzKE5vZGUqIG5v
ZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7CisgICAgSlNWYWx1
ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBKU1ZhbHVlUmVn
cyB0aGlzVmFsdWVSZWdzID0gdGhpc1ZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgSlNWYWx1ZU9w
ZXJhbmQgc3Vic2NyaXB0KHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICBKU1ZhbHVlUmVncyBz
dWJzY3JpcHRSZWdzID0gc3Vic2NyaXB0LmpzVmFsdWVSZWdzKCk7CisKKyAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uR2V0QnlWYWxXaXRoVGhpcywgcmVzdWx0UmVncywgYmFzZVJlZ3MsIHRo
aXNWYWx1ZVJlZ3MsIHN1YnNjcmlwdFJlZ3MpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CisKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworfQorCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvck9iamVjdChOb2RlKiwgR1BSUmVnIHZhbHVl
UmVnLCBHUFJSZWcgcHJvdG90eXBlUmVnLCBHUFJSZWcgc2NyYXRjaFJlZywgR1BSUmVnIHNjcmF0
Y2gyUmVnLCBHUFJSZWcgc2NyYXRjaDNSZWcpCiB7CiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90b3R5
cGUgaXMgYW4gb2JqZWN0LgpAQCAtNTUwMiw2ICs1NTIwLDc2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aFNxcnQoTm9kZSogbm9kZSkKICAgICBkb3VibGVSZXN1bHQocmVzdWx0
LmZwcigpLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTWlu
TWF4KE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsK
KyAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3AxKTsKKworICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3Ax
LmdwcigpOworICAgICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG9wMUxlc3MgPSBtX2ppdC5icmFuY2gzMihub2RlLT5vcCgpID09IEFyaXRoTWluID8gTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBvcDFH
UFIsIG9wMkdQUik7CisgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBpZiAob3AxR1BSICE9IHJlc3VsdEdQUikgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIG9wMUxlc3MubGluaygm
bV9qaXQpOworICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBv
cDFMZXNzLmxpbmsoJm1faml0KTsKKworICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIERvdWJsZVJlcFVzZTogewor
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworCisgICAgICAgIEZQ
UlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJlZyBvcDJGUFIgPSBvcDIuZnBy
KCk7CisgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb3AxTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShub2RlLT5vcCgpID09IEFyaXRoTWlu
ID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUdyZWF0ZXJUaGFuLCBvcDFGUFIsIG9wMkZQUik7CisKKyAgICAgICAgLy8gb3AyIGlzIGVhdGhl
ciB0aGUgbGVzc2VyIG9uZSBvciBvbmUgb2YgdGhlbiBpcyBOYU4KKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgb3AyTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShub2RlLT5vcCgpID09IEFy
aXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA6IE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wMUZQUiwgb3AyRlBSKTsKKworICAg
ICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGljaCBvZiBvcDEsIG9wMiBp
cyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCisgICAgICAgIC8vIG9wMSArIG9wMiBh
bmQgcHV0dGluZyBpdCBpbnRvIHJlc3VsdC4KKyAgICAgICAgbV9qaXQuYWRkRG91YmxlKG9wMUZQ
Uiwgb3AyRlBSLCByZXN1bHRGUFIpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworCisgICAgICAgIG9wMkxlc3MubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlRG91
YmxlKG9wMkZQUiwgcmVzdWx0RlBSKTsKKworICAgICAgICBpZiAob3AxRlBSICE9IHJlc3VsdEZQ
UikgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICAg
ICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9w
MUZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBvcDFMZXNzLmxp
bmsoJm1faml0KTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0RlBSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNl
IGtpbmQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAvLyBGb3Igc21hbGwgcG9zaXRp
dmUgaW50ZWdlcnMgLCBpdCBpcyB3b3J0aCBkb2luZyBhIHRpbnkgaW5saW5lIGxvb3AgdG8gZXhw
b25lbnRpYXRlIHRoZSBiYXNlLgogLy8gRXZlcnkgcmVnaXN0ZXIgaXMgY2xvYmJlcmVkIGJ5IHRo
aXMgaGVscGVyLgogc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNvbXBpbGVBcml0aFBvd0lu
dGVnZXJGYXN0UGF0aChKSVRDb21waWxlciYgYXNzZW1ibGVyLCBGUFJSZWcgeE9wZXJhbmQsIEdQ
UlJlZyB5T3BlcmFuZCwgRlBSUmVnIHJlc3VsdCkKQEAgLTc0NTEsNiArNzUzOSwxNjYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKiBub2RlKQogICAgIH0KIH0KIAor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5KE5vZGUqIG5vZGUpCit7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2
aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgp
KSkgeworICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG1faml0LmdyYXBo
KCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAg
REZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
ID09IG5vZGUtPmluZGV4aW5nVHlwZSgpLCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpLCBub2Rl
LT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIEFTU0VSVCgKKyAgICAgICAgICAgIGhhc1VuZGVj
aWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgfHwgaGFzSW50MzIo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMg
PSBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGhIaW50
ID0gbm9kZS0+dmVjdG9yTGVuZ3RoSGludCgpOworICAgICAgICBBU1NFUlQodmVjdG9yTGVuZ3Ro
SGludCA+PSBudW1FbGVtZW50cyk7CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOworCisgICAgICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIs
IHN0cnVjdHVyZSwgc3RvcmFnZUdQUiwgbnVtRWxlbWVudHMsIHZlY3Rvckxlbmd0aEhpbnQpOwor
CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIG9uZSB3YXkgb3IgYW5vdGhlciwgcmVzdWx0R1BS
IGFuZCBzdG9yYWdlR1BSIGhhdmUgcG9pbnRlcnMgdG8KKyAgICAgICAgLy8gdGhlIEpTQXJyYXkg
YW5kIHRoZSBCdXR0ZXJmbHksIHJlc3BlY3RpdmVseS4KKworICAgICAgICBBU1NFUlQoIWhhc1Vu
ZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB8fCAhbm9kZS0+bnVtQ2hpbGRyZW4o
KSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8
IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgeworICAgICAgICAgICAgRWRnZSB1
c2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsg
b3BlcmFuZElkeF07CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAg
IGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxF
X0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcGVyYW5kKHRoaXMsIHVzZSk7CisgICAgICAgICAgICAgICAgRlBSUmVnIG9wRlBSID0gb3Bl
cmFuZC5mcHIoKTsKKyAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVjRG91YmxlUmVhbCwKKyAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwor
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKG9wRlBSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoZG91YmxlKSAqIG9wZXJhbmRJZHgpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQUxMX0lO
VDMyX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhp
cywgdXNlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzIG9wZXJhbmRSZWdzID0gb3BlcmFuZC5qc1ZhbHVlUmVncygpOworICAgICAgICAgICAg
ICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kUmVn
cywgdXNlLCBTcGVjSW50MzJPbmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoSWZOb3RJbnQzMihvcGVyYW5kUmVncykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZVZhbHVlKG9wZXJhbmRSZWdzLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVyYW5kSWR4KSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBZdWNrLCB3ZSBzaG91bGQgKnJlYWxseSogaGF2
ZSBhIHdheSBvZiBhbHNvIHJldHVybmluZyB0aGUgc3RvcmFnZUdQUi4gQnV0CisgICAgICAgIC8v
IHRoYXQncyB0aGUgbGVhc3Qgb2Ygd2hhdCdzIHdyb25nIHdpdGggdGhpcyBjb2RlLiBXZSByZWFs
bHkgc2hvdWxkbid0IGJlCisgICAgICAgIC8vIGFsbG9jYXRpbmcgdGhlIGFycmF5IGFmdGVyIGhh
dmluZyBjb21wdXRlZCAtIGFuZCBwcm9iYWJseSBzcGlsbGVkIHRvIHRoZQorICAgICAgICAvLyBz
dGFjayAtIGFsbCBvZiB0aGUgdGhpbmdzIHRoYXQgd2lsbCBnbyBpbnRvIHRoZSBhcnJheS4gVGhl
IHNvbHV0aW9uIHRvIHRoYXQKKyAgICAgICAgLy8gYmlnZ2VyIHByb2JsZW0gd2lsbCBhbHNvIGxp
a2VseSBmaXggdGhlIHJlZHVuZGFuY3kgaW4gcmVsb2FkaW5nIHRoZSBzdG9yYWdlCisgICAgICAg
IC8vIHBvaW50ZXIgdGhhdCB3ZSBjdXJyZW50bHkgaGF2ZS4KKworICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW5v
ZGUtPm51bUNoaWxkcmVuKCkpIHsKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0VtcHR5QXJyYXksIHJlc3VsdC5ncHIoKSwgbV9qaXQuZ3JhcGgoKS5yZWdp
c3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBl
RHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpKTsKKyAgICAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG5vZGUtPm51bUNoaWxkcmVuKCk7CisgICAgU2NyYXRjaEJ1
ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZtKCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNj
cmF0Y2hTaXplKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/
IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigp
KSA6IG51bGxwdHI7CisKKyAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJZHggPSAwOyBvcGVyYW5k
SWR4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSWR4KSB7CisgICAgICAgIC8vIE5l
ZWQgdG8gcGVyZm9ybSB0aGUgc3BlY3VsYXRpb25zIHRoYXQgdGhpcyBub2RlIHByb21pc2VzIHRv
IHBlcmZvcm0uIElmIHdlJ3JlCisgICAgICAgIC8vIGVtaXR0aW5nIGNvZGUgaGVyZSBhbmQgdGhl
IGluZGV4aW5nIHR5cGUgaXMgbm90IGFycmF5IHN0b3JhZ2UgdGhlbiB0aGVyZSBpcworICAgICAg
ICAvLyBwcm9iYWJseSBzb21ldGhpbmcgaGlsYXJpb3VzIGdvaW5nIG9uIGFuZCB3ZSdyZSBhbHJl
YWR5IGZhaWxpbmcgYXQgYWxsIHRoZQorICAgICAgICAvLyB0aGluZ3MsIGJ1dCBhdCBsZWFzdCB3
ZSdyZSBnb2luZyB0byBiZSBzb3VuZC4KKyAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgp
Lm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07CisgICAg
ICAgIHN3aXRjaCAobm9kZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBTExfQkxB
TktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19U
WVBFUzoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdz
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICBGUFJSZWcgb3BGUFIgPSBvcGVy
YW5kLmZwcigpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mgc2NyYXRjaFJlZ3MgPSBzY3JhdGNo
LnJlZ3MoKTsKKyAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKCksIHVzZSwgU3BlY0RvdWJsZVJlYWwsCisgICAgICAgICAgICAgICAgbV9qaXQu
YnJhbmNoRG91YmxlKAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
Tm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7CisgICAgICAgICAgICBtX2ppdC5i
b3hEb3VibGUob3BGUFIsIHNjcmF0Y2hSZWdzKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlVmFs
dWUoc2NyYXRjaFJlZ3MsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOworICAgICAgICAgICAgb3BlcmFu
ZC51c2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQUxM
X0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIG9wZXJhbmRSZWdz
ID0gb3BlcmFuZC5qc1ZhbHVlUmVncygpOworICAgICAgICAgICAgaWYgKGhhc0ludDMyKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAg
ICAgICAgICAgICAgICAgICBvcGVyYW5kUmVncywgdXNlLCBTcGVjSW50MzJPbmx5LAorICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZk5vdEludDMyKG9wZXJhbmRSZWdzKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2ppdC5zdG9yZVZhbHVlKG9wZXJhbmRSZWdzLCBidWZm
ZXIgKyBvcGVyYW5kSWR4KTsKKyAgICAgICAgICAgIG9wZXJhbmQudXNlKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKworICAgIGlmIChzY3JhdGNoU2l6ZSkgeworICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKKworICAgICAgICAvLyBUZWxsIEdDIG1hcmsgcGhhc2UgaG93IG11Y2gg
b2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGlzIGFjdGl2ZSBkdXJpbmcgY2FsbC4KKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0
aCgpKSwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoc2NyYXRjaFNpemUpLCBzY3JhdGNoLmdwcigpKTsKKyAgICB9CisKKyAgICBHUFJGbHVzaGVk
Q2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAgICBjYWxsT3BlcmF0aW9uKAorICAgICAgICBv
cGVyYXRpb25OZXdBcnJheSwgcmVzdWx0LmdwcigpLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSksCisgICAgICAgIHN0YXRpY19jYXN0PHZv
aWQqPihidWZmZXIpLCBzaXplX3Qobm9kZS0+bnVtQ2hpbGRyZW4oKSkpOworICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBpZiAoc2NyYXRjaFNpemUpIHsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7
CisgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHNjcmF0Y2gu
Z3ByKCkpOworICAgIH0KKworICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTmV3QXJyYXlXaXRoU3ByZWFkKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkKTsKQEAgLTg0NDMsNiArODY5MSwxMyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0U3RydWN0dXJlQ2hlY2soTm9kZSogbm9kZSwgR1BSUmVnIGNlbGxH
UFIsIEdQUlJlZyB0ZW1wRwogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNoZWNrQ2VsbChOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2VsbCwgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbC5ncHIoKSksIG5vZGUtPmNoaWxkMSgpLCBtX2pp
dC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgY2VsbC5ncHIoKSwgbm9kZS0+
Y2VsbE9wZXJhbmQoKS0+Y2VsbCgpKSk7CisgICAgbm9SZXN1bHQobm9kZSk7Cit9CisKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2RlKiBub2RlKQogewogICAg
IHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CkBAIC0xMDQzOCw3ICsxMDY5Mywy
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdG
dW5jRGVjbEluRXZhbChOb2RlKiBub2RlKQogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KLSAgICAKKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdsb2JhbFZhcmlhYmxlKE5vZGUqIG5vZGUpCit7CisgICAg
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSByZXN1bHQucmVncygpOworICAgIG1faml0LmxvYWRWYWx1ZShub2RlLT52YXJpYWJs
ZVBvaW50ZXIoKSwgcmVzdWx0UmVncyk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEdsb2JhbFZhcmlhYmxl
KE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7
CisgICAgbV9qaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigp
KTsKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldER5bmFtaWNWYXIoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBz
Y29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xMDQ2NSw2ICsxMDczNiwzMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0RHluYW1pY1ZhcihOb2RlKiBub2RlKQogICAgIG5v
UmVzdWx0KG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0Q2xvc3Vy
ZVZhcihOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKworICAgIG1faml0LmxvYWRWYWx1ZShKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZShub2RlLT5zY29wZU9mZnNldCgpKSksIHJlc3VsdFJlZ3MpOworICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRD
bG9zdXJlVmFyKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgIEpT
VmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisKKyAgICBtX2ppdC5z
dG9yZVZhbHVlKHZhbHVlUmVncywgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGUobm9kZS0+c2NvcGVPZmZzZXQoKSkpKTsK
KyAgICBub1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEFjY2Vzc29yQnlWYWwoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTExMjk0LDYgKzExNTg5LDM4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkV2l0aFRoaXMoTm9kZSogbm9kZSkKICAgICBu
b1Jlc3VsdChub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5T2Zm
c2V0KE5vZGUqIG5vZGUpCit7CisgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNl
LCBzdG9yYWdlKTsKKworICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKworICAgIFN0b3JhZ2VB
Y2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7
CisKKyAgICBtX2ppdC5sb2FkVmFsdWUoSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSksIHJlc3VsdFJl
Z3MpOworCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKK30KKwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5T2Zmc2V0KE5vZGUqIG5vZGUpCit7CisgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworCisgICAgR1BSUmVnIHN0b3JhZ2VH
UFIgPSBzdG9yYWdlLmdwcigpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpz
VmFsdWVSZWdzKCk7CisKKyAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hpbGQyKCkpOworCisg
ICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGEoKTsKKworICAgIG1faml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzdG9yYWdlQWNjZXNz
RGF0YS5vZmZzZXQpKSk7CisKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUpCiB7CiAgICAg
SlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xMTM4Miw2ICsx
MTcwOSwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVyYXRvclBuYW1l
KE5vZGUqIG5vZGUpCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KIAor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEV4ZWN1dGFibGUoTm9kZSogbm9kZSkKK3sK
KyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgZnVuY3Rpb24pOworICAgIEdQ
UlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUobm9kZS0+Y2hpbGQxKCksIGZ1
bmN0aW9uR1BSLCBTcGVjRnVuY3Rpb24sIEpTRnVuY3Rpb25UeXBlKTsKKyAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGZ1bmN0aW9uR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRP
ZkV4ZWN1dGFibGUoKSksIHJlc3VsdEdQUik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2pp
dC54b3JQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5
KCkpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2V0dGVyKE5vZGUqIG5vZGUp
CiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
QEAgLTExNDU4LDYgKzExNzk5LDYzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJD
YXQoTm9kZSogbm9kZSkKICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CiAK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheUJ1ZmZlcihOb2RlKiBub2RlKQor
eworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIEpTRml4ZWRBcnJheSogYXJy
YXkgPSBub2RlLT5jYXN0T3BlcmFuZDxKU0ZpeGVkQXJyYXkqPigpOworICAgIHVuc2lnbmVkIG51
bUVsZW1lbnRzID0gYXJyYXktPmxlbmd0aCgpOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGUgPSBub2RlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZp
bmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkgeworICAg
ICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGhIaW50ID0gbm9kZS0+dmVjdG9yTGVuZ3RoSGludCgp
OworICAgICAgICBBU1NFUlQodmVjdG9yTGVuZ3RoSGludCA+PSBudW1FbGVtZW50cyk7CisKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
b3JhZ2UodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGVt
aXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24oaW5kZXhpbmdUeXBlKSksIHN0b3JhZ2VHUFIsIG51bUVsZW1lbnRzLCB2ZWN0b3JM
ZW5ndGhIaW50KTsKKworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIGlu
ZGV4aW5nVHlwZSAmIElzQXJyYXksIGluZGV4aW5nVHlwZSk7CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtRWxlbWVudHM7ICsraW5kZXgpIHsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoRG91YmxlKQorICAgICAgICAgICAgICAgIHZhbHVlID0g
Yml0d2lzZV9jYXN0PGludDY0X3Q+KGFycmF5LT5nZXQoaW5kZXgpLmFzTnVtYmVyKCkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGFy
cmF5LT5nZXQoaW5kZXgpKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRvdWJs
ZSkgPT0gc2l6ZW9mKEpTVmFsdWUpLCAiIik7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KElt
bTY0KHZhbHVlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpT
VmFsdWUpICogaW5kZXgpKTsKKyNlbHNlCisgICAgICAgICAgICB1bmlvbiB7CisgICAgICAgICAg
ICAgICAgaW50MzJfdCBoYWx2ZXNbMl07CisgICAgICAgICAgICAgICAgZG91YmxlIGRvdWJsZVZh
bHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgZW5jb2RlZFZhbHVlOworICAgICAgICAgICAg
fSB1OworICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERv
dWJsZSkKKyAgICAgICAgICAgICAgICB1LmRvdWJsZVZhbHVlID0gYXJyYXktPmdldChpbmRleCku
YXNOdW1iZXIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB1LmVuY29kZWRW
YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShhcnJheS0+Z2V0KGluZGV4KSk7CisgICAgICAgICAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihkb3VibGUpID09IHNpemVvZihKU1ZhbHVlKSwgIiIpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihJbW0zMih1LmhhbHZlc1swXSksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIGluZGV4KSk7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKEltbTMyKHUuaGFsdmVzWzFdKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXggKyBzaXplb2YoaW50MzJf
dCkpKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7Cisg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworCisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0LmdwcigpLCBtX2ppdC5ncmFwaCgpLnJl
Z2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSksIFRydXN0ZWRJbW1QdHIo
bm9kZS0+Y2VsbE9wZXJhbmQoKSksIHNpemVfdChudW1FbGVtZW50cykpOworICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Cit9
CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdpdGhTaXplKE5vZGUqIG5v
ZGUpCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0xMTUyMCw2ICsxMTkx
OCwzNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJheShOb2RlKiBu
b2RlKQogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvVGhpcyhOb2Rl
KiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1wKHRoaXMpOworCisgICAgSlNWYWx1ZVJl
Z3MgdGhpc1ZhbHVlUmVncyA9IHRoaXNWYWx1ZS5qc1ZhbHVlUmVncygpOworICAgIEpTVmFsdWVS
ZWdzIHRlbXBSZWdzID0gdGVtcC5yZWdzKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxs
KHRoaXNWYWx1ZVJlZ3MpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKAorICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0OCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGhpc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSkpOworICAgIG1faml0Lm1vdmVWYWx1
ZVJlZ3ModGhpc1ZhbHVlUmVncywgdGVtcFJlZ3MpOworCisgICAgSl9KSVRPcGVyYXRpb25fRUog
ZnVuY3Rpb247CisgICAgaWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpLT5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRp
b25Ub1RoaXNTdHJpY3Q7CisgICAgZWxzZQorICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRv
VGhpczsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0
aGlzLCBmdW5jdGlvbiwgdGVtcFJlZ3MsIHRoaXNWYWx1ZVJlZ3MpKTsKKworICAgIGpzVmFsdWVS
ZXN1bHQodGVtcFJlZ3MsIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3JlYXRlVGhpcyhOb2RlKiBub2RlKQogewogICAgIC8vIE5vdGUgdGhhdCB0aGVyZSBpcyBub3Qg
c28gbXVjaCBwcm9maXQgdG8gc3BlY3VsYXRlIGhlcmUuIFRoZSBvbmx5IHRoaW5ncyB3ZQpAQCAt
MTE5NjUsNiArMTIzOTEsNDMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3Rv
dHlwZU9mKE5vZGUqIG5vZGUpCiAgICAgfQogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlSWRlbnRpdHkoTm9kZSogbm9kZSkKK3sKKyAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hp
bGQxKCkpOworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICBjYXNlIERvdWJsZVJlcEFueUludFVzZToKKyNlbmRpZgorICAgIGNh
c2UgRG91YmxlUmVwVXNlOgorICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZTogeworICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
RlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgb3ApOworICAgICAgICBtX2ppdC5tb3ZlRG91Ymxl
KG9wLmZwcigpLCBzY3JhdGNoLmZwcigpKTsKKyAgICAgICAgZG91YmxlUmVzdWx0KHNjcmF0Y2gu
ZnByKCksIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBjYXNlIEludDUyUmVwVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZUludDUyT3BlcmFuZCBv
cCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgUmV1c2UsIG9wKTsKKyAgICAgICAgbV9qaXQubW92ZShvcC5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKKyAgICAgICAgaW50NTJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorI2VuZGlmCisgICAgZGVmYXVsdDogeworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBvcCh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcCk7CisgICAg
ICAgIEpTVmFsdWVSZWdzIG9wUmVncyA9IG9wLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgICAgICBtX2ppdC5tb3ZlVmFs
dWVSZWdzKG9wUmVncywgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9Cit9CisKKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCAzZDY1MDM5MDY3NjdhOThhMjNkYjQxNDFkOGMw
NjZmM2EzNGM0ZTEyLi40MjY2NjJiMWFkODRhMzNiMTQzZTgxMzA1MzllNGI0YzEwNTBmNWMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0x
MjgxLDYgKzEyODEsNyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9pZCBjb21waWxl
TG9hZFZhbHVlRnJvbU1hcEJ1Y2tldChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRXh0cmFjdFZh
bHVlRnJvbVdlYWtNYXBHZXQoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldFByb3RvdHlwZU9m
KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVJZGVudGl0eShOb2RlKik7CiAgICAgCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlT3BlcmFuZFR5cGUsIHR5
cGVuYW1lIFByb3BlcnR5T3BlcmFuZFR5cGUsIHR5cGVuYW1lIFZhbHVlT3BlcmFuZFR5cGUsIHR5
cGVuYW1lIFRhZ1R5cGU+CkBAIC0xMzUyLDYgKzEzNTMsNyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJ
VCB7CiAgICAgdm9pZCBjb21waWxlQXJpdGhSYW5kb20oTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUFyaXRoVW5hcnkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRoU3FydChOb2RlKik7Cisg
ICAgdm9pZCBjb21waWxlQXJpdGhNaW5NYXgoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNvbnN0
YW50U3RvcmFnZVBvaW50ZXIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2UoTm9kZSopOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGp1bXBGb3JUeXBlZEFy
cmF5T3V0T2ZCb3VuZHMoTm9kZSosIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgaW5kZXhHUFIpOwpA
QCAtMTM2Niw2ICsxMzY4LDkgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
UHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGls
ZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5
bWJvbChOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7Cisg
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7CisgICAgdm9pZCBjb21waWxl
R2V0QnlPZmZzZXQoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVB1dEJ5T2Zmc2V0KE5vZGUqKTsK
ICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgaXQgbWVhbnMgdGhhdCB3ZSB0ZXJtaW5hdGVk
IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbi4KICAgICBib29sIGdldEludFR5cGVkQXJyYXlTdG9yZU9w
ZXJhbmQoCiAgICAgICAgIEdQUlRlbXBvcmFyeSYgdmFsdWUsCkBAIC0xMzkxLDYgKzEzOTYsNyBA
QCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJn
dW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVSZXN0KE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVTcHJlYWQoTm9kZSopOworICAgIHZvaWQgY29tcGlsZU5ld0FycmF5KE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVOZXdBcnJheVdpdGhTcHJlYWQoTm9kZSopOwogICAgIHZvaWQg
Y29tcGlsZUdldFJlc3RMZW5ndGgoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFycmF5U2xpY2Uo
Tm9kZSopOwpAQCAtMTQwNiw2ICsxNDEyLDcgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAg
IHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc0Z1
bmN0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUeXBlT2YoTm9kZSopOworICAgIHZvaWQg
Y29tcGlsZUNoZWNrQ2VsbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUo
Tm9kZSopOwogICAgIHZvaWQgZW1pdFN0cnVjdHVyZUNoZWNrKE5vZGUqLCBHUFJSZWcgY2VsbEdQ
UiwgR1BSUmVnIHRlbXBHUFIpOwogICAgIHZvaWQgY29tcGlsZVB1dEFjY2Vzc29yQnlJZChOb2Rl
Kik7CkBAIC0xNDE5LDggKzE0MjYsMTIgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIHZv
aWQgY29tcGlsZVRvT2JqZWN0T3JDYWxsT2JqZWN0Q29uc3RydWN0b3IoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZVJlc29sdmVTY29wZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUmVzb2x2ZVNj
b3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0
R2xvYmFsVmFyaWFibGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVB1dEdsb2JhbFZhcmlhYmxl
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXREeW5hbWljVmFyKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVQdXREeW5hbWljVmFyKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRDbG9zdXJl
VmFyKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRDbG9zdXJlVmFyKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVDb21wYXJlRXFQdHIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZURlZmluZURh
dGFQcm9wZXJ0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRGVmaW5lQWNjZXNzb3JQcm9wZXJ0
eShOb2RlKik7CkBAIC0xNDM1LDE0ICsxNDQ2LDE3IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsK
ICAgICB2b2lkIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRF
bnVtZXJhdG9yUG5hbWUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEV4ZWN1dGFibGUoTm9k
ZSopOwogICAgIHZvaWQgY29tcGlsZUdldEdldHRlcihOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
R2V0U2V0dGVyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlU3RyQ2F0KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVOZXdBcnJheUJ1ZmZlcihO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3QXJyYXlXaXRoU2l6ZShOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlTmV3VHlwZWRBcnJheShOb2RlKik7CisgICAgdm9pZCBjb21waWxlVG9UaGlzKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVUaGlzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVOZXdPYmplY3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRvUHJpbWl0aXZlKE5vZGUqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCmluZGV4IGQ4MWE1ZWY5YjQzNTQ5ZWY0ZTY1MzgzMjdiNDM3YjY3Mzk4NzZiODEuLmU2
Yzg1ZTQ1NDliNzRjM2JhZTEzMTIzNmIzODUyODg2NTNiNzY2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMjA5
NiwzNCArMjA5Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElkZW50aXR5OiB7Ci0gICAgICAgIHNwZWN1bGF0
ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgotICAgICAgICBjYXNlIERv
dWJsZVJlcFJlYWxVc2U6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ao
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgZG91YmxlUmVzdWx0KG9wLmZwcigp
LCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW50
NTJSZXBVc2U6IAotICAgICAgICBjYXNlIEFueUludFVzZToKLSAgICAgICAgY2FzZSBEb3VibGVS
ZXBBbnlJbnRVc2U6IHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
ICAgCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OiB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcCh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWco
dGhpcywgUmV1c2UsIG9wLCBUYWdXb3JkKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRQYXlsb2FkKHRoaXMsIFJldXNlLCBvcCwgUGF5bG9hZFdvcmQpOwotICAgICAgICAgICAgR1BS
UmVnIHNvdXJjZVRhZyA9IG9wLnRhZ0dQUigpOwotICAgICAgICAgICAgR1BSUmVnIHNvdXJjZVBh
eWxvYWQgPSBvcC5wYXlsb2FkR1BSKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BS
ID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIg
PSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAgICAgbV9qaXQubW92ZShzb3VyY2VUYWcs
IHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHNvdXJjZVBheWxvYWQsIHJl
c3VsdFBheWxvYWRHUFIpOwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIs
IHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgY29tcGlsZUlkZW50aXR5KG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKQEAgLTIzNzUsNzIgKzIzNDgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNh
c2UgQXJpdGhNYXg6IHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsK
LSAgICAgICAgY2FzZSBJbnQzMlVzZTogewotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7Ci0KLSAgICAgICAgICAg
IEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgb3AyR1BSID0g
b3AyLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
LQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1faml0LmJyYW5j
aDMyKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuIDogTWFjcm9Bc3Nl
bWJsZXI6OkdyZWF0ZXJUaGFuLCBvcDFHUFIsIG9wMkdQUik7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGlmIChvcDFHUFIgIT0gcmVzdWx0
R1BSKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgICAgICBk
b25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG9w
MUxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQzMlJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAg
ICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAgICAgIEZQUlJlZyBv
cDFGUFIgPSBvcDEuZnByKCk7Ci0gICAgICAgICAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigp
OwotICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKLQotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShvcCA9
PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiA6IE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxRlBSLCBvcDJGUFIpOwotICAgICAgICAKLSAgICAg
ICAgICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBvbmUgb3Igb25lIG9mIHRoZW4gaXMg
TmFOCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJMZXNzID0gbV9qaXQuYnJh
bmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJU
aGFuT3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wMUZQ
Uiwgb3AyRlBSKTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2Ug
ZG9uJ3Qga25vdyB3aGljaCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBh
ZGRpbmcgCi0gICAgICAgICAgICAvLyBvcDEgKyBvcDIgYW5kIHB1dHRpbmcgaXQgaW50byByZXN1
bHQuCi0gICAgICAgICAgICBtX2ppdC5hZGREb3VibGUob3AxRlBSLCBvcDJGUFIsIHJlc3VsdEZQ
Uik7Ci0gICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAKLSAg
ICAgICAgICAgIG9wMkxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZURv
dWJsZShvcDJGUFIsIHJlc3VsdEZQUik7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKG9wMUZQ
UiAhPSByZXN1bHRGUFIpIHsKLSAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDFGUFIsIHJlc3VsdEZQUik7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsK
LSAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAg
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0RlBSLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQorICAgICAgICBjb21waWxlQXJpdGhNaW5NYXgobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMjg0MywyMCArMjc1MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6IHsKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOwotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBKU1Zh
bHVlUmVncyB0aGlzVmFsdWVSZWdzID0gdGhpc1ZhbHVlLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIHN1YnNjcmlwdCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAg
IEpTVmFsdWVSZWdzIHN1YnNjcmlwdFJlZ3MgPSBzdWJzY3JpcHQuanNWYWx1ZVJlZ3MoKTsKLQot
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxs
UmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJl
c3VsdC5yZWdzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxXaXRo
VGhpcywgcmVzdWx0UmVncywgYmFzZVJlZ3MsIHRoaXNWYWx1ZVJlZ3MsIHN1YnNjcmlwdFJlZ3Mp
OwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotCi0gICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbFdpdGhUaGlzKG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM1MTEsMTcyICszNDA2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
LSAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55
QXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgUmVnaXN0
ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJl
KGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0
aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSA9PSBub2RlLT5pbmRleGluZ1R5cGUoKSk7Ci0gICAgICAgICAgICBB
U1NFUlQoCi0gICAgICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpCi0gICAgICAgICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkKLSAgICAgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkKLSAgICAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBub2RlLT5u
dW1DaGlsZHJlbigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAg
ICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFnZUdQ
UiwgbnVtRWxlbWVudHMsIG51bUVsZW1lbnRzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCwgb25lIHdheSBvciBhbm90aGVyLCByZXN1bHRHUFIgYW5kIHN0b3Jh
Z2VHUFIgaGF2ZSBwb2ludGVycyB0bwotICAgICAgICAgICAgLy8gdGhlIEpTQXJyYXkgYW5kIHRo
ZSBCdXR0ZXJmbHksIHJlc3BlY3RpdmVseS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNT
RVJUKCFoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgfHwgIW5vZGUtPm51
bUNoaWxkcmVuKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9w
ZXJhbmRJZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5k
SWR4KSB7Ci0gICAgICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJn
Q2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIGNhc2UgQUxMX1VOREVD
SURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lO
REVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3BlcmFuZCh0aGlzLCB1c2UpOwotICAgICAgICAgICAgICAgICAgICBGUFJSZWcgb3BGUFIg
PSBvcGVyYW5kLmZwcigpOwotICAgICAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwgU3BlY0RvdWJsZVJlYWws
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQUikpOwotICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUob3BGUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihkb3VibGUpICogb3BlcmFuZElkeCkpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICAg
ICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVy
YW5kSWR4ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihvcGVyYW5kLmdwcigpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVyYW5kSWR4ICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIG9wZXJhbmQodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25v
ZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdKTsKLSAgICAgICAgICAgICAgICAgICAgR1BS
UmVnIG9wVGFnR1BSID0gb3BlcmFuZC50YWdHUFIoKTsKLSAgICAgICAgICAgICAgICAgICAgR1BS
UmVnIG9wUGF5bG9hZEdQUiA9IG9wZXJhbmQucGF5bG9hZEdQUigpOwotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKG9wVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVyYW5kSWR4ICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihvcFBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVv
ZihKU1ZhbHVlKSAqIG9wZXJhbmRJZHggKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIENSQVNI
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gWXVjaywgd2Ugc2hvdWxkICpy
ZWFsbHkqIGhhdmUgYSB3YXkgb2YgYWxzbyByZXR1cm5pbmcgdGhlIHN0b3JhZ2VHUFIuIEJ1dAot
ICAgICAgICAgICAgLy8gdGhhdCdzIHRoZSBsZWFzdCBvZiB3aGF0J3Mgd3Jvbmcgd2l0aCB0aGlz
IGNvZGUuIFdlIHJlYWxseSBzaG91bGRuJ3QgYmUKLSAgICAgICAgICAgIC8vIGFsbG9jYXRpbmcg
dGhlIGFycmF5IGFmdGVyIGhhdmluZyBjb21wdXRlZCAtIGFuZCBwcm9iYWJseSBzcGlsbGVkIHRv
IHRoZQotICAgICAgICAgICAgLy8gc3RhY2sgLSBhbGwgb2YgdGhlIHRoaW5ncyB0aGF0IHdpbGwg
Z28gaW50byB0aGUgYXJyYXkuIFRoZSBzb2x1dGlvbiB0byB0aGF0Ci0gICAgICAgICAgICAvLyBi
aWdnZXIgcHJvYmxlbSB3aWxsIGFsc28gbGlrZWx5IGZpeCB0aGUgcmVkdW5kYW5jeSBpbiByZWxv
YWRpbmcgdGhlIHN0b3JhZ2UKLSAgICAgICAgICAgIC8vIHBvaW50ZXIgdGhhdCB3ZSBjdXJyZW50
bHkgaGF2ZS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmICghbm9kZS0+bnVtQ2hpbGRyZW4oKSkgewotICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKLSAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3RW1wdHlB
cnJheSwgcmVzdWx0LmdwcigpLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5v
ZGUtPmluZGV4aW5nVHlwZSgpKSkpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2so
KTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzaXplX3Qgc2NyYXRjaFNp
emUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAg
ICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZtKCktPnNjcmF0Y2hCdWZm
ZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKLSAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9
IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSkgOiAwOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBv
cGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFu
ZElkeCkgewotICAgICAgICAgICAgLy8gTmVlZCB0byBwZXJmb3JtIHRoZSBzcGVjdWxhdGlvbnMg
dGhhdCB0aGlzIG5vZGUgcHJvbWlzZXMgdG8gcGVyZm9ybS4gSWYgd2UncmUKLSAgICAgICAgICAg
IC8vIGVtaXR0aW5nIGNvZGUgaGVyZSBhbmQgdGhlIGluZGV4aW5nIHR5cGUgaXMgbm90IGFycmF5
IHN0b3JhZ2UgdGhlbiB0aGVyZSBpcwotICAgICAgICAgICAgLy8gcHJvYmFibHkgc29tZXRoaW5n
IGhpbGFyaW91cyBnb2luZyBvbiBhbmQgd2UncmUgYWxyZWFkeSBmYWlsaW5nIGF0IGFsbCB0aGUK
LSAgICAgICAgICAgIC8vIHRoaW5ncywgYnV0IGF0IGxlYXN0IHdlJ3JlIGdvaW5nIHRvIGJlIHNv
dW5kLgotICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRy
ZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07Ci0gICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7Ci0gICAgICAgICAg
ICAgICAgRlBSUmVnIG9wRlBSID0gb3BlcmFuZC5mcHIoKTsKLSAgICAgICAgICAgICAgICBERkdf
VFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVj
RnVsbFJlYWxOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUob3BG
UFIsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyICsgb3BlcmFu
ZElkeCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50MzJPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKLSAgICAgICAgICAgICAgICBH
UFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oYnVmZmVyICsgb3BlcmFuZElkeCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIob3BH
UFIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciArIG9wZXJhbmRJZHgpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
ZXJhbmQodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hp
bGQoKSArIG9wZXJhbmRJZHhdKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgb3BUYWdHUFIgPSBv
cGVyYW5kLnRhZ0dQUigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBvcFBheWxvYWRHUFIgPSBv
cGVyYW5kLnBheWxvYWRHUFIoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKG9wVGFnR1BSLCByZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIgKyBv
cGVyYW5kSWR4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihvcFBheWxvYWRHUFIsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciArIG9wZXJhbmRJZHgpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Ci0gICAgICAgICAg
ICAgICAgb3BlcmFuZC51c2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICBjYXNlIEFMTF9E
T1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIGlmIChzY3JhdGNoU2l6ZSkg
ewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0KLSAgICAgICAgICAg
IC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMg
YWN0aXZlIGR1cmluZyBjYWxsLgotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7
Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKHNjcmF0Y2hTaXplKSwg
c2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3Vs
dCByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAg
ICAgICAgb3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdC5ncHIoKSwgbV9qaXQuZ3JhcGgoKS5yZWdp
c3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBl
RHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dm9pZCo+KGJ1ZmZlciksIHNpemVfdChub2RlLT5udW1DaGlsZHJlbigpKSk7Ci0g
ICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0KLSAgICAgICAgaWYgKHNjcmF0Y2hTaXpl
KSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLQotICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2
ZUxlbmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzY3JhdGNoLmdwcigpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOworICAgICAgICBjb21waWxlTmV3QXJyYXkobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMzY5Niw0NSArMzQyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6
IHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIEpTRml4ZWRB
cnJheSogYXJyYXkgPSBub2RlLT5jYXN0T3BlcmFuZDxKU0ZpeGVkQXJyYXkqPigpOwotICAgICAg
ICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IGFycmF5LT5sZW5ndGgoKTsKLSAgICAgICAgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSA9IG5vZGUtPmluZGV4aW5nVHlwZSgpOwotICAgICAgICBpZiAo
IWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2Uo
aW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAg
ICAgICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIG1faml0LmdyYXBoKCkucmVn
aXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKSksIHN0b3JhZ2VHUFIsIG51bUVsZW1lbnRz
LCBudW1FbGVtZW50cyk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IG51bUVsZW1lbnRzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgdW5pb24gewot
ICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGhhbHZlc1syXTsKLSAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGVuY29k
ZWRWYWx1ZTsKLSAgICAgICAgICAgICAgICB9IHU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkKLSAgICAgICAgICAgICAgICAgICAg
dS5kb3VibGVWYWx1ZSA9IGFycmF5LT5nZXQoaW5kZXgpLmFzTnVtYmVyKCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB1LmVuY29kZWRWYWx1ZSA9IEpTVmFsdWU6
OmVuY29kZShhcnJheS0+Z2V0KGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoZG91YmxlKSA9PSBzaXplb2YoSlNWYWx1ZSksICIiKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKEltbTMyKHUuaGFsdmVzWzBdKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXgpKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKEltbTMyKHUuaGFsdmVzWzFdKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXggKyBzaXplb2YoaW50MzJfdCkp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
Ci0gICAgICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5QnVmZmVy
LCByZXN1bHQuZ3ByKCksIG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+
aW5kZXhpbmdUeXBlKCkpKSwgVHJ1c3RlZEltbVB0cihub2RlLT5jZWxsT3BlcmFuZCgpKSwgc2l6
ZV90KG51bUVsZW1lbnRzKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAg
ICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGNv
bXBpbGVOZXdBcnJheUJ1ZmZlcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKQEAgLTM3NTUsMzUgKzM0NDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFRvVGhpczogewotICAgICAgICBB
U1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBH
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXBUYWcodGhp
cyk7Ci0gICAgICAgIEdQUlJlZyB0aGlzVmFsdWVQYXlsb2FkR1BSID0gdGhpc1ZhbHVlLnBheWxv
YWRHUFIoKTsKLSAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZVRhZ0dQUiA9IHRoaXNWYWx1ZS50YWdH
UFIoKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgICAgICBHUFJS
ZWcgdGVtcFRhZ0dQUiA9IHRlbXBUYWcuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaElmTm90Q2VsbCh0aGlzVmFsdWUuanNWYWx1ZVJlZ3MoKSkpOwotICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0aGlzVmFsdWVQ
YXlsb2FkR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihPdmVycmlkZXNUb1RoaXMpKSk7Ci0gICAg
ICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlUGF5bG9hZEdQUiwgdGVtcEdQUik7Ci0gICAgICAgIG1f
aml0Lm1vdmUodGhpc1ZhbHVlVGFnR1BSLCB0ZW1wVGFnR1BSKTsKLSAgICAgICAgSl9KSVRPcGVy
YXRpb25fRUogZnVuY3Rpb247Ci0gICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmV4ZWN1dGFibGVG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICBm
dW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpc1N0cmljdDsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXM7Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGVtcFRhZ0dQ
UiwgdGVtcEdQUiksIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZVRhZ0dQUiwgdGhpc1ZhbHVlUGF5bG9h
ZEdQUikpKTsKLQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHRlbXBUYWdHUFIsIHRlbXBHUFIsIG5v
ZGUpOworICAgICAgICBjb21waWxlVG9UaGlzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTM4MjgsMjkgKzM0OTIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDbG9zdXJl
VmFyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdw
cigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShub2RlLT5zY29wZU9mZnNldCgp
KSArIFRhZ09mZnNldCksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZShub2RlLT5zY29wZU9mZnNldCgpKSArIFBheWxvYWRPZmZzZXQpLCByZXN1bHRQYXls
b2FkR1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxv
YWRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlR2V0Q2xvc3VyZVZhcihub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIAogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogewotICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BS
ID0gdmFsdWUudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1
ZS5wYXlsb2FkR1BSKCk7Ci0KLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGUobm9kZS0+c2NvcGVPZmZzZXQoKSkgKyBUYWdPZmZzZXQpKTsKLSAgICAgICAgbV9q
aXQuc3RvcmUzMih2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKG5vZGUtPnNjb3BlT2Zmc2V0
KCkpICsgUGF5bG9hZE9mZnNldCkpOwotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAg
Y29tcGlsZVB1dENsb3N1cmVWYXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAt
NDAxOCw5ICszNjY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDaGVja0NlbGw6IHsKLSAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkQ2VsbCwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbC5ncHIo
KSksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RF
cXVhbCwgY2VsbC5ncHIoKSwgbm9kZS0+Y2VsbE9wZXJhbmQoKS0+Y2VsbCgpKSk7Ci0gICAgICAg
IG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlQ2hlY2tDZWxsKG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTQwMzcsMTMgKzM2ODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRF
eGVjdXRhYmxlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9uKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVz
ZSwgZnVuY3Rpb24pOwotICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIgPSBmdW5jdGlvbi5ncHIo
KTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgc3Bl
Y3VsYXRlQ2VsbFR5cGUobm9kZS0+Y2hpbGQxKCksIGZ1bmN0aW9uR1BSLCBTcGVjRnVuY3Rpb24s
IEpTRnVuY3Rpb25UeXBlKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhmdW5jdGlvbkdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLCByZXN1
bHRHUFIpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNv
bXBpbGVHZXRFeGVjdXRhYmxlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtNDEwNywyMCArMzc0Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKLSAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIHN0b3JhZ2UpOwotICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJl
ZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQ
UiA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSBy
ZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAKLSAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEm
IHN0b3JhZ2VBY2Nlc3NEYXRhID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAg
Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBh
eWxvYWRHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJl
c3VsdFRhZ0dQUik7Ci0gICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQ
UiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVHZXRCeU9mZnNldChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQxNTAsMjEgKzM3NzYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0KLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIo
KTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsK
LQotICAgICAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgIFN0
b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG5vZGUtPnN0b3JhZ2VBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVRhZ0dQUiwgSklU
Q29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc3RvcmFn
ZUFjY2Vzc0RhdGEub2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVBheWxvYWRH
UFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNl
KHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIAotICAgICAgICBub1Jlc3Vs
dChub2RlKTsKKyAgICAgICAgY29tcGlsZVB1dEJ5T2Zmc2V0KG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTQyNTEsMjggKzM4NjMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBHZXRHbG9iYWxMZXhpY2FsVmFyaWFibGU6
CiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBh
eWxvYWQodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0KLSAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
QWRkcmVzcyhyZXN1bHRQYXlsb2FkLmdwcigpLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZC5ncHIoKSwgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOwotCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigp
LCByZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldEdsb2JhbFZh
cmlhYmxlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFB1dEdsb2Jh
bFZhcmlhYmxlOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKLQotICAgICAgICAvLyBGSVhNRTogaWYgd2UgaGFwcGVuIHRvIGhhdmUgYSBzcGFy
ZSByZWdpc3RlciAtIGFuZCBfT05MWV8gaWYgd2UgaGFwcGVuIHRvIGhhdmUKLSAgICAgICAgLy8g
YSBzcGFyZSByZWdpc3RlciAtIGEgZ29vZCBvcHRpbWl6YXRpb24gd291bGQgYmUgdG8gcHV0IHRo
ZSByZWdpc3RlciBwb2ludGVyIGludG8KLSAgICAgICAgLy8gYSByZWdpc3RlciBhbmQgdGhlbiBk
byBhIHplcm8gb2Zmc2V0IHN0b3JlIGZvbGxvd2VkIGJ5IGEgZm91ci1vZmZzZXQgc3RvcmUgKG9y
Ci0gICAgICAgIC8vIHZpY2UtdmVyc2EgZGVwZW5kaW5nIG9uIGVuZGlhbm5lc3MpLgotICAgICAg
ICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBub2RlLT52YXJpYWJsZVBvaW50ZXIoKS0+
dGFnUG9pbnRlcigpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCks
IG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpLT5wYXlsb2FkUG9pbnRlcigpKTsKLQotICAgICAgICBu
b1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZVB1dEdsb2JhbFZhcmlhYmxlKG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IGU5NmJmNzM5MjcwMTlkY2JjY2I1ZjVhNDZl
YmM4N2ViYTM3NGYwZGUuLmJhNjhlZmYyN2Q3ZjA0ZTU5M2VjNTYyMmY5NDliMzU3OWI0MzMzOGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcApAQCAtMjIwMiwzMiArMjIwMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElkZW50aXR5OiB7Ci0gICAg
ICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgotICAg
ICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6Ci0gICAgICAgIGNhc2UgRG91YmxlUmVwQW55SW50
VXNlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMsIG9wKTsK
LSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AuZnByKCksIHNjcmF0Y2guZnByKCkpOwot
ICAgICAgICAgICAgZG91YmxlUmVzdWx0KHNjcmF0Y2guZnByKCksIG5vZGUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZTogewotICAgICAg
ICAgICAgU3BlY3VsYXRlSW50NTJPcGVyYW5kIG9wKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wKTsKLSAgICAgICAg
ICAgIG1faml0Lm1vdmUob3AuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBpbnQ1
MlJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AodGhp
cywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcCk7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKG9wLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgY29tcGlsZUlkZW50aXR5KG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTI1MTYsNjggKzI0OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhNaW46CiAg
ICAgY2FzZSBBcml0aE1heDogewotICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQo
KSkgewotICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3AxKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1faml0LmJy
YW5jaDMyKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuIDogTWFjcm9B
c3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSk7Ci0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGlmIChv
cDEuZ3ByKCkgIT0gcmVzdWx0LmdwcigpKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICBvcDFMZXNzLmxp
bmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgRG91YmxlUmVw
VXNlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlz
LCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnBy
KCk7Ci0gICAgICAgICAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigpOwotICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKLSAgICAgICAgCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRo
TWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUdyZWF0ZXJUaGFuLCBvcDFGUFIsIG9wMkZQUik7Ci0gICAgICAgIAotICAgICAgICAgICAg
Ly8gb3AyIGlzIGVhdGhlciB0aGUgbGVzc2VyIG9uZSBvciBvbmUgb2YgdGhlbiBpcyBOYU4KLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMkxlc3MgPSBtX2ppdC5icmFuY2hEb3Vi
bGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVx
dWFsIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCwgb3AxRlBSLCBvcDJG
UFIpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIFVub3JkZXJlZCBjYXNlLiBXZSBkb24ndCBr
bm93IHdoaWNoIG9mIG9wMSwgb3AyIGlzIE5hTi4gTWFudWZhY3R1cmUgTmFOIGJ5IGFkZGluZyAK
LSAgICAgICAgICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBpbnRvIHJlc3VsdC4KLSAg
ICAgICAgICAgIG1faml0LmFkZERvdWJsZShvcDFGUFIsIG9wMkZQUiwgcmVzdWx0RlBSKTsKLSAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIAotICAgICAgICAg
ICAgb3AyTGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9w
MkZQUiwgcmVzdWx0RlBSKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAob3AxRlBSICE9IHJl
c3VsdEZQUikgewotICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMUZQUiwgcmVzdWx0RlBSKTsKLSAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwotICAgICAg
ICAKLSAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHRGUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZHX0NS
QVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9CisgICAgICAgIGNvbXBpbGVBcml0aE1pbk1heChub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkBAIC0yOTI5LDIwICsyODQzLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWxXaXRo
VGhpczogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBHUFJSZWcg
dGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBz
dWJzY3JpcHQodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICBHUFJSZWcgc3Vic2NyaXB0
R1BSID0gc3Vic2NyaXB0LmdwcigpOwotCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
ICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25H
ZXRCeVZhbFdpdGhUaGlzLCByZXN1bHRHUFIsIGJhc2VHUFIsIHRoaXNWYWx1ZUdQUiwgc3Vic2Ny
aXB0R1BSKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLQotICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbFdpdGhU
aGlzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM3MTksMTc3ICszNjIwLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKLSAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAh
aGFzQW55QXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAg
UmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgICAgICBERkdfQVNTRVJU
KG1faml0LmdyYXBoKCksIG5vZGUsIHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gbm9kZS0+
aW5kZXhpbmdUeXBlKCksIHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCksIG5vZGUtPmluZGV4aW5n
VHlwZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAgICAgICBoYXNVbmRlY2lk
ZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICAgICB8fCBoYXNJbnQz
MihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgICAgIHx8IGhhc0RvdWJs
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgICAgIHx8IGhhc0NvbnRp
Z3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGhIaW50ID0gbm9kZS0+dmVjdG9yTGVuZ3RoSGludCgp
OwotICAgICAgICAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aEhpbnQgPj0gbnVtRWxlbWVudHMpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGVtaXRBbGxvY2F0
ZVJhd09iamVjdChyZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFnZUdQUiwgbnVtRWxlbWVudHMs
IHZlY3Rvckxlbmd0aEhpbnQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBBdCB0aGlz
IHBvaW50LCBvbmUgd2F5IG9yIGFub3RoZXIsIHJlc3VsdEdQUiBhbmQgc3RvcmFnZUdQUiBoYXZl
IHBvaW50ZXJzIHRvCi0gICAgICAgICAgICAvLyB0aGUgSlNBcnJheSBhbmQgdGhlIEJ1dHRlcmZs
eSwgcmVzcGVjdGl2ZWx5LgotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIWhhc1Vu
ZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB8fCAhbm9kZS0+bnVtQ2hpbGRyZW4o
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9
IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKLSAg
ICAgICAgICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltu
b2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XTsKLSAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBBTExfQkxBTktf
SU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQ
RVM6IHsKLSAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5k
KHRoaXMsIHVzZSk7Ci0gICAgICAgICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQu
ZnByKCk7Ci0gICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICAgICAg
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVjRG91YmxlUmVhbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIs
IG9wRlBSKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKG9wRlBSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoZG91YmxlKSAqIG9wZXJh
bmRJZHgpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIEdQUlJlZyBvcEdQUiA9IG9wZXJhbmQu
Z3ByKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRleGluZ1R5
cGUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wR1BSKSwgdXNlLCBTcGVjSW50MzJP
bmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIG9wR1BSLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KG9wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVyYW5kSWR4KSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIFl1Y2ssIHdlIHNob3VsZCAqcmVhbGx5KiBoYXZlIGEgd2F5IG9m
IGFsc28gcmV0dXJuaW5nIHRoZSBzdG9yYWdlR1BSLiBCdXQKLSAgICAgICAgICAgIC8vIHRoYXQn
cyB0aGUgbGVhc3Qgb2Ygd2hhdCdzIHdyb25nIHdpdGggdGhpcyBjb2RlLiBXZSByZWFsbHkgc2hv
dWxkbid0IGJlCi0gICAgICAgICAgICAvLyBhbGxvY2F0aW5nIHRoZSBhcnJheSBhZnRlciBoYXZp
bmcgY29tcHV0ZWQgLSBhbmQgcHJvYmFibHkgc3BpbGxlZCB0byB0aGUKLSAgICAgICAgICAgIC8v
IHN0YWNrIC0gYWxsIG9mIHRoZSB0aGluZ3MgdGhhdCB3aWxsIGdvIGludG8gdGhlIGFycmF5LiBU
aGUgc29sdXRpb24gdG8gdGhhdAotICAgICAgICAgICAgLy8gYmlnZ2VyIHByb2JsZW0gd2lsbCBh
bHNvIGxpa2VseSBmaXggdGhlIHJlZHVuZGFuY3kgaW4gcmVsb2FkaW5nIHRoZSBzdG9yYWdlCi0g
ICAgICAgICAgICAvLyBwb2ludGVyIHRoYXQgd2UgY3VycmVudGx5IGhhdmUuCi0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5vZGUtPm51bUNoaWxk
cmVuKCkpIHsKLSAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICBHUFJG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0VtcHR5QXJyYXksIHJlc3VsdC5ncHIoKSwgbV9qaXQuZ3JhcGgoKS5yZWdp
c3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBl
RHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpKTsKLSAgICAgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG5vZGUtPm51
bUNoaWxkcmVuKCk7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2pp
dC52bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7Ci0gICAgICAgIEVuY29k
ZWRKU1ZhbHVlKiBidWZmZXIgPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKLSAgICAgICAgCi0gICAg
ICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1D
aGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gcGVyZm9y
bSB0aGUgc3BlY3VsYXRpb25zIHRoYXQgdGhpcyBub2RlIHByb21pc2VzIHRvIHBlcmZvcm0uIElm
IHdlJ3JlCi0gICAgICAgICAgICAvLyBlbWl0dGluZyBjb2RlIGhlcmUgYW5kIHRoZSBpbmRleGlu
ZyB0eXBlIGlzIG5vdCBhcnJheSBzdG9yYWdlIHRoZW4gdGhlcmUgaXMKLSAgICAgICAgICAgIC8v
IHByb2JhYmx5IHNvbWV0aGluZyBoaWxhcmlvdXMgZ29pbmcgb24gYW5kIHdlJ3JlIGFscmVhZHkg
ZmFpbGluZyBhdCBhbGwgdGhlCi0gICAgICAgICAgICAvLyB0aGluZ3MsIGJ1dCBhdCBsZWFzdCB3
ZSdyZSBnb2luZyB0byBiZSBzb3VuZC4KLSAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3Jh
cGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdOwot
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9VTkRF
Q0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBF
UzogewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlz
LCB1c2UpOwotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAg
ICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7Ci0gICAgICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgICAgIERG
R19UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncygpLCB1c2UsIFNw
ZWNEb3VibGVSZWFsLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYm94RG91Ymxl
KG9wRlBSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0
Y2hHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVy
YW5kLmdwcigpOwotICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRleGluZ1R5
cGUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCi0gICAgICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZSwgU3BlY0ludDMyT25seSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3BHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1
c2UpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBvcEdQUiA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQUiwgYnVmZmVyICsgb3BlcmFuZElkeCk7Ci0g
ICAgICAgICAgICAgICAgb3BlcmFuZC51c2UoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQ1JBU0go
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAgICBj
YXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNhc2UgQUxMX0lOVDMyX0lO
REVYSU5HX1RZUEVTOgotICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIGlmIChzY3Jh
dGNoU2l6ZSkgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0KLSAg
ICAgICAgICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBvZiB0aGUgc2NyYXRjaCBi
dWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgc2NyYXRj
aC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKHNjcmF0
Y2hTaXplKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBHUFJGbHVzaGVk
Q2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9u
KAotICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdC5ncHIoKSwgbV9qaXQuZ3Jh
cGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8dm9pZCo+KGJ1ZmZlciksIHNpemVfdChub2RlLT5udW1DaGlsZHJl
bigpKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0KLSAgICAgICAgaWYgKHNj
cmF0Y2hTaXplKSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLQot
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJl
c3NPZkFjdGl2ZUxlbmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC5z
dG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzY3JhdGNoLmdwcigpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOworICAgICAgICBjb21waWxlTmV3QXJyYXkobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtMzkwOSw0NCArMzY0MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTmV3QXJy
YXlCdWZmZXI6IHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0
LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAg
IEpTRml4ZWRBcnJheSogYXJyYXkgPSBub2RlLT5jYXN0T3BlcmFuZDxKU0ZpeGVkQXJyYXkqPigp
OwotICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IGFycmF5LT5sZW5ndGgoKTsKLSAgICAg
ICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5vZGUtPmluZGV4aW5nVHlwZSgpOwotICAg
ICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJh
eVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVu
Z3RoSGludCA9IG5vZGUtPnZlY3Rvckxlbmd0aEhpbnQoKTsKLSAgICAgICAgICAgIEFTU0VSVCh2
ZWN0b3JMZW5ndGhIaW50ID49IG51bUVsZW1lbnRzKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBz
dG9yYWdlKHRoaXMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdl
LmdwcigpOwotCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVSYXdPYmplY3QocmVzdWx0R1BSLCBt
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nVHlwZSkpLCBzdG9yYWdl
R1BSLCBudW1FbGVtZW50cywgdmVjdG9yTGVuZ3RoSGludCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaW5kZXhpbmdUeXBlICYgSXNB
cnJheSwgaW5kZXhpbmdUeXBlKTsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgbnVtRWxlbWVudHM7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBpbnQ2
NF90IHZhbHVlOwotICAgICAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRo
RG91YmxlKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90
PihhcnJheS0+Z2V0KGluZGV4KS5hc051bWJlcigpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5nZXQoaW5k
ZXgpKTsKLSAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkb3VibGUpID09IHNp
emVvZihKU1ZhbHVlKSwgIiIpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoSW1tNjQo
dmFsdWUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1
ZSkgKiBpbmRleCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
QXJyYXlCdWZmZXIsIHJlc3VsdC5ncHIoKSwgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVy
ZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2Nh
dGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpLCBUcnVzdGVkSW1tUHRyKG5vZGUtPmNlbGxPcGVy
YW5kKCkpLCBzaXplX3QobnVtRWxlbWVudHMpKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKLSAgICAgICAgCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsK
KyAgICAgICAgY29tcGlsZU5ld0FycmF5QnVmZmVyKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIApAQCAtMzk2NywyOSArMzY2MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFRvVGhpczogewotICAgICAg
ICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9
IHRoaXNWYWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwot
ICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3Mo
dGhpc1ZhbHVlR1BSKSkpOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDgoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE92ZXJy
aWRlc1RvVGhpcykpKTsKLSAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHRlbXBHUFIp
OwotICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSiBmdW5jdGlvbjsKLSAgICAgICAgaWYgKG1faml0
LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5pc1N0cmljdE1v
ZGUoKSkKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzU3RyaWN0OwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpczsKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nh
c2VzLCB0aGlzLCBmdW5jdGlvbiwgdGVtcEdQUiwgdGhpc1ZhbHVlR1BSKSk7Ci0KLSAgICAgICAg
anNWYWx1ZVJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZVRvVGhpcyhub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDM5LDI0ICszNzExLDExIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgIG1faml0LmxvYWQ2
NChKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zm
c2V0T2ZWYXJpYWJsZShub2RlLT5zY29wZU9mZnNldCgpKSksIHJlc3VsdEdQUik7Ci0gICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldENsb3N1
cmVWYXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFB1dENsb3N1cmVW
YXI6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKLQotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotCi0gICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVH
UFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlKG5vZGUtPnNjb3BlT2Zmc2V0KCkpKSk7Ci0gICAgICAgIG5vUmVzdWx0
KG5vZGUpOworICAgICAgICBjb21waWxlUHV0Q2xvc3VyZVZhcihub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC00MjEyLDkgKzM4NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrQ2VsbDog
ewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDZWxsLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChjZWxsLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFdlYWtQdHIo
SklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBjZWxsLmdwcigpLCBub2RlLT5jZWxsT3BlcmFuZCgpLT5j
ZWxsKCkpKTsKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVDaGVja0Nl
bGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDI0MywxNCArMzkwMCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIEdldEV4ZWN1dGFibGU6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgZnVuY3Rpb24odGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIFJldXNlLCBmdW5jdGlvbik7Ci0gICAgICAgIEdQUlJlZyBmdW5jdGlvbkdQ
UiA9IGZ1bmN0aW9uLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwotICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZShub2RlLT5jaGlsZDEoKSwgZnVuY3Rpb25H
UFIsIFNwZWNGdW5jdGlvbiwgSlNGdW5jdGlvblR5cGUpOwotICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKGZ1bmN0aW9uR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LnhvclB0cihKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uUG9pc29uOjprZXkoKSksIHJlc3VsdEdQUik7Ci0g
ICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldEV4
ZWN1dGFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MzMx
LDE3ICszOTgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVy
QnlPZmZzZXQ6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHN0b3Jh
Z2UpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigp
OwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAKLSAg
ICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbm9kZS0+c3RvcmFn
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzdG9yYWdlQWNjZXNz
RGF0YS5vZmZzZXQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldEJ5T2Zmc2V0KG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDM1NiwxOSArMzk5Niw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMygpKTsKLQotICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2Uu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotCi0gICAgICAg
IHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAgU3RvcmFnZUFjY2Vz
c0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHN0b3JhZ2VBY2Nlc3NEYXRhLm9m
ZnNldCkpKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZVB1dEJ5
T2Zmc2V0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQ0NzAsMjAgKzQwOTgs
MTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2Fz
ZSBHZXRHbG9iYWxMZXhpY2FsVmFyaWFibGU6CiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICBtX2ppdC5sb2FkNjQo
bm9kZS0+dmFyaWFibGVQb2ludGVyKCksIHJlc3VsdC5ncHIoKSk7Ci0KLSAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBjb21waWxlR2V0R2xvYmFsVmFy
aWFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgUHV0R2xvYmFs
VmFyaWFibGU6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOwotCi0gICAgICAgIG1faml0LnN0b3JlNjQodmFsdWUuZ3ByKCksIG5vZGUtPnZhcmlh
YmxlUG9pbnRlcigpKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGls
ZVB1dEdsb2JhbFZhcmlhYmxlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336748</attachid>
            <date>2018-03-28 19:28:50 -0700</date>
            <delta_ts>2018-03-29 19:18:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184089-20180329112849.patch</filename>
            <type>text/plain</type>
            <size>70917</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
N2E3Y2JlNDNmMjlmZDk3NGE2ZjYzNmRjZTIwNzAzNTljY2ZiMDU4Li40YjVjZTJhNjU5MWIxMmFl
ZTNkZmUzYjkyZjI3NDMzMjA1NDI1YThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxOC0wMy0yOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBNb3JlIGFnZ3Jlc3NpdmUgcmVtb3ZhbCBvZiBkdXBsaWNh
dGUgMzJiaXQgREZHIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4NDA4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggbW9yZSBhZ2dyZXNzaXZlbHkgcmVtb3ZlcyBkdXBsaWNhdGUg
MzJiaXQgREZHIGNvZGUKKyAgICAgICAgYnkgbGV2ZXJhZ2luZyBKU1ZhbHVlUmVncyBhbmQgbWV0
YS1wcm9ncmFtbWVkIGNhbGxPcGVyYXRpb24uCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxXaXRoVGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcml0aE1pbk1heCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVOZXdBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
aGVja0NlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3QXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlVG9UaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUlkZW50aXR5KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6CisKIDIwMTgtMDMtMjggIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnku
Y29tPgogCiAgICAgICAgIE1TVkMgX19mb3JjZWlubGluZSBzbG93cyBkb3duIEpTQyByZWxlYXNl
IGJ1aWxkIGZpdmVmb2xkIGFmdGVyIHIyMjkzOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggNzU2YjcwMTI0ZmE2MTAwNjY0YTZhYjEz
OTJjMzAxYTZjMmVlNGFkNS4uNzU3OTFjYmMwNTM4Y2Y5YWNhYTlhMzAxYmIwOGNiYjM4YWYyMjUz
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKQEAgLTMyNzgsNiArMzI3OCwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JDZWxsV2l0aFN5bWJvbChOb2RlKiBub2RlLCBFZGdlJiBjaGlsZDEsCiAgICAgbm9S
ZXN1bHQobm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbFdp
dGhUaGlzKE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdz
KCk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
KyAgICBKU1ZhbHVlUmVncyB0aGlzVmFsdWVSZWdzID0gdGhpc1ZhbHVlLmpzVmFsdWVSZWdzKCk7
CisgICAgSlNWYWx1ZU9wZXJhbmQgc3Vic2NyaXB0KHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAg
ICBKU1ZhbHVlUmVncyBzdWJzY3JpcHRSZWdzID0gc3Vic2NyaXB0LmpzVmFsdWVSZWdzKCk7CisK
KyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQg
cmVzdWx0KHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxXaXRoVGhpcywgcmVzdWx0UmVn
cywgYmFzZVJlZ3MsIHRoaXNWYWx1ZVJlZ3MsIHN1YnNjcmlwdFJlZ3MpOworICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwor
fQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvck9iamVjdChOb2Rl
KiwgR1BSUmVnIHZhbHVlUmVnLCBHUFJSZWcgcHJvdG90eXBlUmVnLCBHUFJSZWcgc2NyYXRjaFJl
ZywgR1BSUmVnIHNjcmF0Y2gyUmVnLCBHUFJSZWcgc2NyYXRjaDNSZWcpCiB7CiAgICAgLy8gQ2hl
Y2sgdGhhdCBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LgpAQCAtNTUwMiw2ICs1NTIwLDc2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFNxcnQoTm9kZSogbm9kZSkKICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFyaXRoTWluTWF4KE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5iaW5h
cnlVc2VLaW5kKCkpIHsKKyAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3AxKTsKKworICAgICAgICBHUFJS
ZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3MgPSBtX2ppdC5icmFuY2gzMihub2RlLT5vcCgpID09
IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6Okdy
ZWF0ZXJUaGFuLCBvcDFHUFIsIG9wMkdQUik7CisgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBpZiAob3AxR1BSICE9IHJlc3VsdEdQUikgeworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAg
IG9wMUxlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKKworICAgICAgICBpbnQzMlJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIERv
dWJsZVJlcFVzZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEp
OworCisgICAgICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7CisgICAgICAgIEZQUlJlZyBv
cDJGUFIgPSBvcDIuZnByKCk7CisgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnBy
KCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CisKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShub2RlLT5v
cCgpID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBvcDFGUFIsIG9wMkZQUik7CisKKyAgICAgICAg
Ly8gb3AyIGlzIGVhdGhlciB0aGUgbGVzc2VyIG9uZSBvciBvbmUgb2YgdGhlbiBpcyBOYU4KKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AyTGVzcyA9IG1faml0LmJyYW5jaERvdWJsZShu
b2RlLT5vcCgpID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wMUZQUiwg
b3AyRlBSKTsKKworICAgICAgICAvLyBVbm9yZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGlj
aCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVmYWN0dXJlIE5hTiBieSBhZGRpbmcgCisgICAgICAg
IC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBpbnRvIHJlc3VsdC4KKyAgICAgICAgbV9qaXQu
YWRkRG91YmxlKG9wMUZQUiwgb3AyRlBSLCByZXN1bHRGUFIpOworICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIG9wMkxlc3MubGluaygmbV9qaXQpOworICAgICAg
ICBtX2ppdC5tb3ZlRG91YmxlKG9wMkZQUiwgcmVzdWx0RlBSKTsKKworICAgICAgICBpZiAob3Ax
RlBSICE9IHJlc3VsdEZQUikgeworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKworICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2pp
dC5tb3ZlRG91YmxlKG9wMUZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
KworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0RlBSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCks
IG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiAvLyBG
b3Igc21hbGwgcG9zaXRpdmUgaW50ZWdlcnMgLCBpdCBpcyB3b3J0aCBkb2luZyBhIHRpbnkgaW5s
aW5lIGxvb3AgdG8gZXhwb25lbnRpYXRlIHRoZSBiYXNlLgogLy8gRXZlcnkgcmVnaXN0ZXIgaXMg
Y2xvYmJlcmVkIGJ5IHRoaXMgaGVscGVyLgogc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNv
bXBpbGVBcml0aFBvd0ludGVnZXJGYXN0UGF0aChKSVRDb21waWxlciYgYXNzZW1ibGVyLCBGUFJS
ZWcgeE9wZXJhbmQsIEdQUlJlZyB5T3BlcmFuZCwgRlBSUmVnIHJlc3VsdCkKQEAgLTc0NTEsNiAr
NzUzOSwxNjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKiBub2Rl
KQogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5KE5vZGUq
IG5vZGUpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBo
KCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgaWYgKCFnbG9i
YWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG5vZGUt
PmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVy
ZSA9IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBl
KCkpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpID09IG5vZGUtPmluZGV4aW5nVHlwZSgpLCBzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpLCBub2RlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIEFTU0VSVCgKKyAgICAg
ICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAg
ICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8
IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgfHwgaGFz
Q29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisKKyAgICAgICAgdW5zaWdu
ZWQgbnVtRWxlbWVudHMgPSBub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGhIaW50ID0gbm9kZS0+dmVjdG9yTGVuZ3RoSGludCgpOworICAgICAgICBBU1NF
UlQodmVjdG9yTGVuZ3RoSGludCA+PSBudW1FbGVtZW50cyk7CisKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGVtaXRBbGxvY2F0ZVJhd09i
amVjdChyZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFnZUdQUiwgbnVtRWxlbWVudHMsIHZlY3Rv
ckxlbmd0aEhpbnQpOworCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIG9uZSB3YXkgb3IgYW5v
dGhlciwgcmVzdWx0R1BSIGFuZCBzdG9yYWdlR1BSIGhhdmUgcG9pbnRlcnMgdG8KKyAgICAgICAg
Ly8gdGhlIEpTQXJyYXkgYW5kIHRoZSBCdXR0ZXJmbHksIHJlc3BlY3RpdmVseS4KKworICAgICAg
ICBBU1NFUlQoIWhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB8fCAhbm9k
ZS0+bnVtQ2hpbGRyZW4oKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0g
MDsgb3BlcmFuZElkeCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElkeCkgeworICAg
ICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+
Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKKyAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7CisgICAgICAgICAgICAgICAgRlBS
UmVnIG9wRlBSID0gb3BlcmFuZC5mcHIoKTsKKyAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVD
SygKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVjRG91YmxlUmVh
bCwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9w
RlBSLCBvcEZQUikpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKG9wRlBSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoZG91YmxlKSAqIG9wZXJh
bmRJZHgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgY2FzZSBBTExf
Q09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIG9wZXJhbmQodGhpcywgdXNlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzIG9wZXJhbmRSZWdzID0gb3BlcmFuZC5qc1ZhbHVlUmVncygp
OworICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAg
ICAgICBvcGVyYW5kUmVncywgdXNlLCBTcGVjSW50MzJPbmx5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoSWZOb3RJbnQzMihvcGVyYW5kUmVncykpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVZhbHVlKG9wZXJhbmRSZWdzLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVyYW5k
SWR4KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBZdWNrLCB3ZSBzaG91
bGQgKnJlYWxseSogaGF2ZSBhIHdheSBvZiBhbHNvIHJldHVybmluZyB0aGUgc3RvcmFnZUdQUi4g
QnV0CisgICAgICAgIC8vIHRoYXQncyB0aGUgbGVhc3Qgb2Ygd2hhdCdzIHdyb25nIHdpdGggdGhp
cyBjb2RlLiBXZSByZWFsbHkgc2hvdWxkbid0IGJlCisgICAgICAgIC8vIGFsbG9jYXRpbmcgdGhl
IGFycmF5IGFmdGVyIGhhdmluZyBjb21wdXRlZCAtIGFuZCBwcm9iYWJseSBzcGlsbGVkIHRvIHRo
ZQorICAgICAgICAvLyBzdGFjayAtIGFsbCBvZiB0aGUgdGhpbmdzIHRoYXQgd2lsbCBnbyBpbnRv
IHRoZSBhcnJheS4gVGhlIHNvbHV0aW9uIHRvIHRoYXQKKyAgICAgICAgLy8gYmlnZ2VyIHByb2Js
ZW0gd2lsbCBhbHNvIGxpa2VseSBmaXggdGhlIHJlZHVuZGFuY3kgaW4gcmVsb2FkaW5nIHRoZSBz
dG9yYWdlCisgICAgICAgIC8vIHBvaW50ZXIgdGhhdCB3ZSBjdXJyZW50bHkgaGF2ZS4KKworICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIW5vZGUtPm51bUNoaWxkcmVuKCkpIHsKKyAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKKyAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0VtcHR5QXJyYXksIHJlc3VsdC5ncHIoKSwgbV9q
aXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpKTsK
KyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHQuZ3ByKCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IHNj
cmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG5vZGUtPm51bUNoaWxkcmVuKCk7
CisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZtKCktPnNjcmF0Y2hC
dWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0g
c2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpKSA6IG51bGxwdHI7CisKKyAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJ
ZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSWR4KSB7
CisgICAgICAgIC8vIE5lZWQgdG8gcGVyZm9ybSB0aGUgc3BlY3VsYXRpb25zIHRoYXQgdGhpcyBu
b2RlIHByb21pc2VzIHRvIHBlcmZvcm0uIElmIHdlJ3JlCisgICAgICAgIC8vIGVtaXR0aW5nIGNv
ZGUgaGVyZSBhbmQgdGhlIGluZGV4aW5nIHR5cGUgaXMgbm90IGFycmF5IHN0b3JhZ2UgdGhlbiB0
aGVyZSBpcworICAgICAgICAvLyBwcm9iYWJseSBzb21ldGhpbmcgaGlsYXJpb3VzIGdvaW5nIG9u
IGFuZCB3ZSdyZSBhbHJlYWR5IGZhaWxpbmcgYXQgYWxsIHRoZQorICAgICAgICAvLyB0aGluZ3Ms
IGJ1dCBhdCBsZWFzdCB3ZSdyZSBnb2luZyB0byBiZSBzb3VuZC4KKyAgICAgICAgRWRnZSB1c2Ug
PSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3Bl
cmFuZElkeF07CisgICAgICAgIHN3aXRjaCAobm9kZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIGNhc2UgQUxMX1VOREVD
SURFRF9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKKyAgICAgICAg
ICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICBGUFJS
ZWcgb3BGUFIgPSBvcGVyYW5kLmZwcigpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mgc2NyYXRj
aFJlZ3MgPSBzY3JhdGNoLnJlZ3MoKTsKKyAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwgU3BlY0RvdWJsZVJlYWwsCisgICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7CisgICAg
ICAgICAgICBtX2ppdC5ib3hEb3VibGUob3BGUFIsIHNjcmF0Y2hSZWdzKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlVmFsdWUoc2NyYXRjaFJlZ3MsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOworICAg
ICAgICAgICAgb3BlcmFuZC51c2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRo
aXMsIHVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEpTVmFsdWVS
ZWdzIG9wZXJhbmRSZWdzID0gb3BlcmFuZC5qc1ZhbHVlUmVncygpOworICAgICAgICAgICAgaWYg
KGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICAgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kUmVncywgdXNlLCBTcGVjSW50
MzJPbmx5LAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZk5vdEludDMyKG9wZXJh
bmRSZWdzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2ppdC5zdG9yZVZhbHVlKG9w
ZXJhbmRSZWdzLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKKyAgICAgICAgICAgIG9wZXJhbmQudXNl
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgIGlmIChzY3JhdGNoU2l6ZSkgeworICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgICAgICAvLyBUZWxsIEdDIG1hcmsg
cGhhc2UgaG93IG11Y2ggb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGlzIGFjdGl2ZSBkdXJpbmcgY2Fs
bC4KKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJl
c3NPZkFjdGl2ZUxlbmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgIG1faml0LnN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBzY3JhdGNoLmdwcigpKTsKKyAgICB9CisK
KyAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAgICBjYWxsT3BlcmF0
aW9uKAorICAgICAgICBvcGVyYXRpb25OZXdBcnJheSwgcmVzdWx0LmdwcigpLCBtX2ppdC5ncmFw
aCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSksCisgICAgICAg
IHN0YXRpY19jYXN0PHZvaWQqPihidWZmZXIpLCBzaXplX3Qobm9kZS0+bnVtQ2hpbGRyZW4oKSkp
OworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBpZiAoc2NyYXRjaFNpemUpIHsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwg
c2NyYXRjaC5ncHIoKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIHNjcmF0Y2guZ3ByKCkpOworICAgIH0KKworICAgIGNlbGxSZXN1bHQocmVzdWx0Lmdw
cigpLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworfQorCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU3ByZWFkKE5vZGUqIG5vZGUpCiB7CiAgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkKTsKQEAgLTg0NDMsNiArODY5
MSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3RydWN0dXJlQ2hlY2soTm9kZSogbm9k
ZSwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wRwogICAgIH0KIH0KIAordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNoZWNrQ2VsbChOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkQ2VsbCwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbC5ncHIoKSksIG5vZGUt
PmNoaWxkMSgpLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgY2Vs
bC5ncHIoKSwgbm9kZS0+Y2VsbE9wZXJhbmQoKS0+Y2VsbCgpKSk7CisgICAgbm9SZXN1bHQobm9k
ZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2Rl
KiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CkBAIC0x
MDQzOCw3ICsxMDY5MywyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVzb2x2ZVNj
b3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChOb2RlKiBub2RlKQogICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KLSAg
ICAKKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdsb2JhbFZhcmlhYmxlKE5vZGUq
IG5vZGUpCit7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgIG1faml0LmxvYWRWYWx1
ZShub2RlLT52YXJpYWJsZVBvaW50ZXIoKSwgcmVzdWx0UmVncyk7CisgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEdsb2JhbFZhcmlhYmxlKE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVl
LmpzVmFsdWVSZWdzKCk7CisgICAgbV9qaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIG5vZGUtPnZh
cmlhYmxlUG9pbnRlcigpKTsKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldER5bmFtaWNWYXIoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xMDQ2NSw2ICsx
MDczNiwzMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0RHluYW1pY1ZhcihOb2Rl
KiBub2RlKQogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0Q2xvc3VyZVZhcihOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKworICAgIG1faml0LmxvYWRW
YWx1ZShKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZShub2RlLT5zY29wZU9mZnNldCgpKSksIHJlc3VsdFJlZ3MpOworICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRDbG9zdXJlVmFyKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7
CisKKyAgICBtX2ppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGUobm9kZS0+c2Nv
cGVPZmZzZXQoKSkpKTsKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEFjY2Vzc29yQnlWYWwoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTExMjk0LDYgKzEx
NTg5LDM4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkV2l0aFRoaXMoTm9k
ZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5T2Zmc2V0KE5vZGUqIG5vZGUpCit7CisgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIFJldXNlLCBzdG9yYWdlKTsKKworICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3Rv
cmFnZS5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsK
KworICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG5vZGUtPnN0b3Jh
Z2VBY2Nlc3NEYXRhKCk7CisKKyAgICBtX2ppdC5sb2FkVmFsdWUoSklUQ29tcGlsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc3RvcmFnZUFjY2Vzc0RhdGEub2Zm
c2V0KSksIHJlc3VsdFJlZ3MpOworCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2Rl
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5T2Zmc2V0KE5vZGUqIG5v
ZGUpCit7CisgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworCisgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisKKyAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+
Y2hpbGQyKCkpOworCisgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0g
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKKworICAgIG1faml0LnN0b3JlVmFsdWUodmFsdWVS
ZWdzLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKSk7CisKKyAgICBub1Jlc3VsdChub2RlKTsKK30K
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KE5vZGUq
IG5vZGUpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CkBAIC0xMTM4Miw2ICsxMTcwOSwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
RW51bWVyYXRvclBuYW1lKE5vZGUqIG5vZGUpCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEV4ZWN1dGFibGUo
Tm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgZnVu
Y3Rpb24pOworICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUobm9k
ZS0+Y2hpbGQxKCksIGZ1bmN0aW9uR1BSLCBTcGVjRnVuY3Rpb24sIEpTRnVuY3Rpb25UeXBlKTsK
KyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGZ1bmN0aW9uR1BSLCBKU0Z1
bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIHJlc3VsdEdQUik7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICBtX2ppdC54b3JQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoSlNGdW5j
dGlvblBvaXNvbjo6a2V5KCkpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgY2VsbFJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2V0
dGVyKE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKQEAgLTExNDU4LDYgKzExNzk5LDYzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTdHJDYXQoTm9kZSogbm9kZSkKICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheUJ1ZmZl
cihOb2RlKiBub2RlKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIEpT
Rml4ZWRBcnJheSogYXJyYXkgPSBub2RlLT5jYXN0T3BlcmFuZDxKU0ZpeGVkQXJyYXkqPigpOwor
ICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gYXJyYXktPmxlbmd0aCgpOworICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGUgPSBub2RlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBpZiAoIWdsb2Jh
bE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhp
bmdUeXBlKSkgeworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGhIaW50ID0gbm9kZS0+dmVj
dG9yTGVuZ3RoSGludCgpOworICAgICAgICBBU1NFUlQodmVjdG9yTGVuZ3RoSGludCA+PSBudW1F
bGVtZW50cyk7CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigp
OworCisgICAgICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIG1faml0LmdyYXBo
KCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKSksIHN0b3JhZ2VHUFIsIG51bUVs
ZW1lbnRzLCB2ZWN0b3JMZW5ndGhIaW50KTsKKworICAgICAgICBERkdfQVNTRVJUKG1faml0Lmdy
YXBoKCksIG5vZGUsIGluZGV4aW5nVHlwZSAmIElzQXJyYXksIGluZGV4aW5nVHlwZSk7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtRWxlbWVudHM7ICsraW5k
ZXgpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoRG91YmxlKQorICAgICAgICAg
ICAgICAgIHZhbHVlID0gYml0d2lzZV9jYXN0PGludDY0X3Q+KGFycmF5LT5nZXQoaW5kZXgpLmFz
TnVtYmVyKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0gSlNW
YWx1ZTo6ZW5jb2RlKGFycmF5LT5nZXQoaW5kZXgpKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKGRvdWJsZSkgPT0gc2l6ZW9mKEpTVmFsdWUpLCAiIik7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZTY0KEltbTY0KHZhbHVlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXgpKTsKKyNlbHNlCisgICAgICAgICAgICB1bmlv
biB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBoYWx2ZXNbMl07CisgICAgICAgICAgICAgICAg
ZG91YmxlIGRvdWJsZVZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgZW5jb2RlZFZhbHVl
OworICAgICAgICAgICAgfSB1OworICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgp
ID09IEFycmF5V2l0aERvdWJsZSkKKyAgICAgICAgICAgICAgICB1LmRvdWJsZVZhbHVlID0gYXJy
YXktPmdldChpbmRleCkuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB1LmVuY29kZWRWYWx1ZSA9IEpTVmFsdWU6OmVuY29kZShhcnJheS0+Z2V0KGluZGV4KSk7
CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkb3VibGUpID09IHNpemVvZihKU1Zh
bHVlKSwgIiIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihJbW0zMih1LmhhbHZlc1swXSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIGlu
ZGV4KSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEltbTMyKHUuaGFsdmVzWzFdKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXgg
KyBzaXplb2YoaW50MzJfdCkpKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworCisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0LmdwcigpLCBt
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSks
IFRydXN0ZWRJbW1QdHIobm9kZS0+Y2VsbE9wZXJhbmQoKSksIHNpemVfdChudW1FbGVtZW50cykp
OworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBjZWxsUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdp
dGhTaXplKE5vZGUqIG5vZGUpCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBA
IC0xMTUyMCw2ICsxMTkxOCwzNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlw
ZWRBcnJheShOb2RlKiBub2RlKQogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVRvVGhpcyhOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1wKHRoaXMpOwor
CisgICAgSlNWYWx1ZVJlZ3MgdGhpc1ZhbHVlUmVncyA9IHRoaXNWYWx1ZS5qc1ZhbHVlUmVncygp
OworICAgIEpTVmFsdWVSZWdzIHRlbXBSZWdzID0gdGVtcC5yZWdzKCk7CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoSWZOb3RDZWxsKHRoaXNWYWx1ZVJlZ3MpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKAor
ICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGhpc1ZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSkpOworICAg
IG1faml0Lm1vdmVWYWx1ZVJlZ3ModGhpc1ZhbHVlUmVncywgdGVtcFJlZ3MpOworCisgICAgSl9K
SVRPcGVyYXRpb25fRUogZnVuY3Rpb247CisgICAgaWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJs
ZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgZnVu
Y3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNTdHJpY3Q7CisgICAgZWxzZQorICAgICAgICBmdW5jdGlv
biA9IG9wZXJhdGlvblRvVGhpczsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENh
bGwoc2xvd0Nhc2VzLCB0aGlzLCBmdW5jdGlvbiwgdGVtcFJlZ3MsIHRoaXNWYWx1ZVJlZ3MpKTsK
KworICAgIGpzVmFsdWVSZXN1bHQodGVtcFJlZ3MsIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ3JlYXRlVGhpcyhOb2RlKiBub2RlKQogewogICAgIC8vIE5vdGUgdGhh
dCB0aGVyZSBpcyBub3Qgc28gbXVjaCBwcm9maXQgdG8gc3BlY3VsYXRlIGhlcmUuIFRoZSBvbmx5
IHRoaW5ncyB3ZQpAQCAtMTE5NjUsNiArMTIzOTEsNDMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldFByb3RvdHlwZU9mKE5vZGUqIG5vZGUpCiAgICAgfQogfQogCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlSWRlbnRpdHkoTm9kZSogbm9kZSkKK3sKKyAgICBzcGVjdWxhdGUo
bm9kZSwgbm9kZS0+Y2hpbGQxKCkpOworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBjYXNlIERvdWJsZVJlcEFueUludFVzZToK
KyNlbmRpZgorICAgIGNhc2UgRG91YmxlUmVwVXNlOgorICAgIGNhc2UgRG91YmxlUmVwUmVhbFVz
ZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgb3ApOworICAgICAgICBt
X2ppdC5tb3ZlRG91YmxlKG9wLmZwcigpLCBzY3JhdGNoLmZwcigpKTsKKyAgICAgICAgZG91Ymxl
UmVzdWx0KHNjcmF0Y2guZnByKCksIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBjYXNlIEludDUyUmVwVXNlOiB7CisgICAgICAgIFNwZWN1bGF0
ZUludDUyT3BlcmFuZCBvcCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wKTsKKyAgICAgICAgbV9qaXQubW92ZShvcC5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgaW50NTJSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisgICAgZGVmYXVsdDogeworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcCh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJl
dXNlLCBvcCk7CisgICAgICAgIEpTVmFsdWVSZWdzIG9wUmVncyA9IG9wLmpzVmFsdWVSZWdzKCk7
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgICAg
ICBtX2ppdC5tb3ZlVmFsdWVSZWdzKG9wUmVncywgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9
Cit9CisKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCAzZDY1MDM5MDY3Njdh
OThhMjNkYjQxNDFkOGMwNjZmM2EzNGM0ZTEyLi40MjY2NjJiMWFkODRhMzNiMTQzZTgxMzA1Mzll
NGI0YzEwNTBmNWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCkBAIC0xMjgxLDYgKzEyODEsNyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAg
ICAgdm9pZCBjb21waWxlTG9hZFZhbHVlRnJvbU1hcEJ1Y2tldChOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlRXh0cmFjdFZhbHVlRnJvbVdlYWtNYXBHZXQoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUdldFByb3RvdHlwZU9mKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVJZGVudGl0eShOb2RlKik7
CiAgICAgCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNl
T3BlcmFuZFR5cGUsIHR5cGVuYW1lIFByb3BlcnR5T3BlcmFuZFR5cGUsIHR5cGVuYW1lIFZhbHVl
T3BlcmFuZFR5cGUsIHR5cGVuYW1lIFRhZ1R5cGU+CkBAIC0xMzUyLDYgKzEzNTMsNyBAQCBjbGFz
cyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9pZCBjb21waWxlQXJpdGhSYW5kb20oTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUFyaXRoVW5hcnkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRo
U3FydChOb2RlKik7CisgICAgdm9pZCBjb21waWxlQXJpdGhNaW5NYXgoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwogICAgIEpJVENvbXBpbGVyOjpKdW1w
IGp1bXBGb3JUeXBlZEFycmF5T3V0T2ZCb3VuZHMoTm9kZSosIEdQUlJlZyBiYXNlR1BSLCBHUFJS
ZWcgaW5kZXhHUFIpOwpAQCAtMTM2Niw2ICsxMzY4LDkgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQg
ewogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRnZSYgY2hp
bGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlW
YWxGb3JDZWxsV2l0aFN5bWJvbChOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVk
Z2UmIGNoaWxkMyk7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7Cisg
ICAgdm9pZCBjb21waWxlR2V0QnlPZmZzZXQoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVB1dEJ5
T2Zmc2V0KE5vZGUqKTsKICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgaXQgbWVhbnMgdGhh
dCB3ZSB0ZXJtaW5hdGVkIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbi4KICAgICBib29sIGdldEludFR5
cGVkQXJyYXlTdG9yZU9wZXJhbmQoCiAgICAgICAgIEdQUlRlbXBvcmFyeSYgdmFsdWUsCkBAIC0x
MzkxLDYgKzEzOTYsNyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9pZCBjb21waWxl
Q3JlYXRlQ2xvbmVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVSZXN0
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTcHJlYWQoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZU5ld0FycmF5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdBcnJheVdpdGhTcHJlYWQoTm9k
ZSopOwogICAgIHZvaWQgY29tcGlsZUdldFJlc3RMZW5ndGgoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUFycmF5U2xpY2UoTm9kZSopOwpAQCAtMTQwNiw2ICsxNDEyLDcgQEAgY2xhc3MgU3BlY3Vs
YXRpdmVKSVQgewogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUeXBlT2YoTm9k
ZSopOworICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
Q2hlY2tTdHJ1Y3R1cmUoTm9kZSopOwogICAgIHZvaWQgZW1pdFN0cnVjdHVyZUNoZWNrKE5vZGUq
LCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpOwogICAgIHZvaWQgY29tcGlsZVB1dEFj
Y2Vzc29yQnlJZChOb2RlKik7CkBAIC0xNDE5LDggKzE0MjYsMTIgQEAgY2xhc3MgU3BlY3VsYXRp
dmVKSVQgewogICAgIHZvaWQgY29tcGlsZVRvT2JqZWN0T3JDYWxsT2JqZWN0Q29uc3RydWN0b3Io
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZVJlc29sdmVTY29wZShOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChOb2RlKik7CisgICAg
dm9pZCBjb21waWxlR2V0R2xvYmFsVmFyaWFibGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVB1
dEdsb2JhbFZhcmlhYmxlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXREeW5hbWljVmFyKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXREeW5hbWljVmFyKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVHZXRDbG9zdXJlVmFyKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRDbG9zdXJlVmFy
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlRXFQdHIoTm9kZSopOwogICAgIHZvaWQg
Y29tcGlsZURlZmluZURhdGFQcm9wZXJ0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRGVmaW5l
QWNjZXNzb3JQcm9wZXJ0eShOb2RlKik7CkBAIC0xNDM1LDE0ICsxNDQ2LDE3IEBAIGNsYXNzIFNw
ZWN1bGF0aXZlSklUIHsKICAgICB2b2lkIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdl
dEV4ZWN1dGFibGUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEdldHRlcihOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlR2V0U2V0dGVyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxs
ZWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyQ2F0KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVO
ZXdBcnJheUJ1ZmZlcihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3QXJyYXlXaXRoU2l6ZShO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3VHlwZWRBcnJheShOb2RlKik7CisgICAgdm9pZCBj
b21waWxlVG9UaGlzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVUaGlzKE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVOZXdPYmplY3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRvUHJp
bWl0aXZlKE5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IGQ4MWE1ZWY5YjQzNTQ5ZWY0ZTY1MzgzMjdiNDM3
YjY3Mzk4NzZiODEuLmU2Yzg1ZTQ1NDliNzRjM2JhZTEzMTIzNmIzODUyODg2NTNiNzY2Y2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcApAQCAtMjA5NiwzNCArMjA5Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElkZW50aXR5OiB7Ci0g
ICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHN3aXRjaCAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgot
ICAgICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgZG91Ymxl
UmVzdWx0KG9wLmZwcigpLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IAotICAgICAgICBjYXNlIEFueUludFVzZToKLSAgICAg
ICAgY2FzZSBEb3VibGVSZXBBbnlJbnRVc2U6IHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7ICAgCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcCh0aGlzLCBub2RlLT5j
aGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIG9wLCBUYWdXb3JkKTsKLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIFJldXNlLCBvcCwgUGF5bG9hZFdvcmQpOwot
ICAgICAgICAgICAgR1BSUmVnIHNvdXJjZVRhZyA9IG9wLnRhZ0dQUigpOwotICAgICAgICAgICAg
R1BSUmVnIHNvdXJjZVBheWxvYWQgPSBvcC5wYXlsb2FkR1BSKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShzb3VyY2VUYWcsIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHNv
dXJjZVBheWxvYWQsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgY29tcGlsZUlkZW50
aXR5KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTIzNzUsNzIgKzIzNDgsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEFy
aXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6IHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5iaW5h
cnlVc2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMlVzZTogewotICAgICAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7
Ci0KLSAgICAgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgICAgICBH
UFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVz
cyA9IG1faml0LmJyYW5jaDMyKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuIDogTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBvcDFHUFIsIG9wMkdQUik7Ci0gICAg
ICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGlmIChv
cDFHUFIgIT0gcmVzdWx0R1BSKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1f
aml0KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKLSAg
ICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAg
ICAgICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7Ci0gICAgICAgICAgICBGUFJSZWcgb3Ay
RlBSID0gb3AyLmZwcigpOwotICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5m
cHIoKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAg
ICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1faml0LmJy
YW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhh
biA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxRlBSLCBvcDJGUFIpOwot
ICAgICAgICAKLSAgICAgICAgICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBvbmUgb3Ig
b25lIG9mIHRoZW4gaXMgTmFOCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJM
ZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhh
bk9yRXF1YWwsIG9wMUZQUiwgb3AyRlBSKTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBVbm9y
ZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGljaCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVm
YWN0dXJlIE5hTiBieSBhZGRpbmcgCi0gICAgICAgICAgICAvLyBvcDEgKyBvcDIgYW5kIHB1dHRp
bmcgaXQgaW50byByZXN1bHQuCi0gICAgICAgICAgICBtX2ppdC5hZGREb3VibGUob3AxRlBSLCBv
cDJGUFIsIHJlc3VsdEZQUik7Ci0gICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkp
OwotICAgICAgICAKLSAgICAgICAgICAgIG9wMkxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZURvdWJsZShvcDJGUFIsIHJlc3VsdEZQUik7Ci0gICAgICAgIAotICAgICAg
ICAgICAgaWYgKG9wMUZQUiAhPSByZXN1bHRGUFIpIHsKLSAgICAgICAgICAgICAgICBkb25lLmFw
cGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3AxTGVz
cy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDFGUFIs
IHJlc3VsdEZQUik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBvcDFMZXNz
LmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
LSAgICAgICAgCi0gICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0RlBSLCBub2RlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBjb21waWxlQXJpdGhNaW5NYXgobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjg0MywyMCArMjc1MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFs
V2l0aFRoaXM6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1ZhbHVlUmVncygp
OwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwotICAgICAgICBKU1ZhbHVlUmVncyB0aGlzVmFsdWVSZWdzID0gdGhpc1ZhbHVlLmpzVmFsdWVS
ZWdzKCk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHN1YnNjcmlwdCh0aGlzLCBub2RlLT5jaGls
ZDMoKSk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIHN1YnNjcmlwdFJlZ3MgPSBzdWJzY3JpcHQuanNW
YWx1ZVJlZ3MoKTsKLQotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBKU1ZhbHVl
UmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uR2V0QnlWYWxXaXRoVGhpcywgcmVzdWx0UmVncywgYmFzZVJlZ3MsIHRoaXNWYWx1ZVJlZ3Ms
IHN1YnNjcmlwdFJlZ3MpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGNvbXBpbGVHZXRC
eVZhbFdpdGhUaGlzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM1MTEsMTcy
ICszNDA2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKLSAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRp
bWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAg
ICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJl
Z2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBub2RlLT5pbmRleGluZ1R5cGUoKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoCi0gICAgICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxl
bWVudHMgPSBub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2UodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3By
KCk7Ci0KLSAgICAgICAgICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIHN0cnVj
dHVyZSwgc3RvcmFnZUdQUiwgbnVtRWxlbWVudHMsIG51bUVsZW1lbnRzKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgb25lIHdheSBvciBhbm90aGVyLCByZXN1
bHRHUFIgYW5kIHN0b3JhZ2VHUFIgaGF2ZSBwb2ludGVycyB0bwotICAgICAgICAgICAgLy8gdGhl
IEpTQXJyYXkgYW5kIHRoZSBCdXR0ZXJmbHksIHJlc3BlY3RpdmVseS4KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgQVNTRVJUKCFoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkgfHwgIW5vZGUtPm51bUNoaWxkcmVuKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIG9wZXJhbmRJZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsgKytvcGVyYW5kSWR4KSB7Ci0gICAgICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5n
cmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07
Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAg
ICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAg
IGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICAgICAg
Q1JBU0goKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwotICAgICAgICAgICAgICAgICAg
ICBGUFJSZWcgb3BGUFIgPSBvcGVyYW5kLmZwcigpOwotICAgICAgICAgICAgICAgICAgICBERkdf
VFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwg
U3BlY0RvdWJsZVJlYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQ
UikpOwotICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUob3BG
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihkb3VibGUpICog
b3BlcmFuZElkeCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAg
ICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNl
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvcGVyYW5kSWR4ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihvcGVyYW5kLmdwcigp
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBv
cGVyYW5kSWR4ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3Zh
ckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdKTsKLSAgICAgICAg
ICAgICAgICAgICAgR1BSUmVnIG9wVGFnR1BSID0gb3BlcmFuZC50YWdHUFIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgR1BSUmVnIG9wUGF5bG9hZEdQUiA9IG9wZXJhbmQucGF5bG9hZEdQUigpOwot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKG9wVGFnR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVyYW5kSWR4ICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihvcFBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIG9wZXJhbmRJZHggKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gWXVj
aywgd2Ugc2hvdWxkICpyZWFsbHkqIGhhdmUgYSB3YXkgb2YgYWxzbyByZXR1cm5pbmcgdGhlIHN0
b3JhZ2VHUFIuIEJ1dAotICAgICAgICAgICAgLy8gdGhhdCdzIHRoZSBsZWFzdCBvZiB3aGF0J3Mg
d3Jvbmcgd2l0aCB0aGlzIGNvZGUuIFdlIHJlYWxseSBzaG91bGRuJ3QgYmUKLSAgICAgICAgICAg
IC8vIGFsbG9jYXRpbmcgdGhlIGFycmF5IGFmdGVyIGhhdmluZyBjb21wdXRlZCAtIGFuZCBwcm9i
YWJseSBzcGlsbGVkIHRvIHRoZQotICAgICAgICAgICAgLy8gc3RhY2sgLSBhbGwgb2YgdGhlIHRo
aW5ncyB0aGF0IHdpbGwgZ28gaW50byB0aGUgYXJyYXkuIFRoZSBzb2x1dGlvbiB0byB0aGF0Ci0g
ICAgICAgICAgICAvLyBiaWdnZXIgcHJvYmxlbSB3aWxsIGFsc28gbGlrZWx5IGZpeCB0aGUgcmVk
dW5kYW5jeSBpbiByZWxvYWRpbmcgdGhlIHN0b3JhZ2UKLSAgICAgICAgICAgIC8vIHBvaW50ZXIg
dGhhdCB3ZSBjdXJyZW50bHkgaGF2ZS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmICghbm9kZS0+bnVtQ2hpbGRyZW4oKSkgewotICAgICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgb3Bl
cmF0aW9uTmV3RW1wdHlBcnJheSwgcmVzdWx0LmdwcigpLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVy
U3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJp
bmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkpOwotICAgICAgICAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBz
aXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS0+bnVtQ2hp
bGRyZW4oKTsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZt
KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKLSAgICAgICAgRW5jb2RlZEpT
VmFsdWUqIGJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwotICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUtPm51bUNoaWxk
cmVuKCk7ICsrb3BlcmFuZElkeCkgewotICAgICAgICAgICAgLy8gTmVlZCB0byBwZXJmb3JtIHRo
ZSBzcGVjdWxhdGlvbnMgdGhhdCB0aGlzIG5vZGUgcHJvbWlzZXMgdG8gcGVyZm9ybS4gSWYgd2Un
cmUKLSAgICAgICAgICAgIC8vIGVtaXR0aW5nIGNvZGUgaGVyZSBhbmQgdGhlIGluZGV4aW5nIHR5
cGUgaXMgbm90IGFycmF5IHN0b3JhZ2UgdGhlbiB0aGVyZSBpcwotICAgICAgICAgICAgLy8gcHJv
YmFibHkgc29tZXRoaW5nIGhpbGFyaW91cyBnb2luZyBvbiBhbmQgd2UncmUgYWxyZWFkeSBmYWls
aW5nIGF0IGFsbCB0aGUKLSAgICAgICAgICAgIC8vIHRoaW5ncywgYnV0IGF0IGxlYXN0IHdlJ3Jl
IGdvaW5nIHRvIGJlIHNvdW5kLgotICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgp
Lm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURF
RF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7
Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVz
ZSk7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIG9wRlBSID0gb3BlcmFuZC5mcHIoKTsKLSAgICAg
ICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MoKSwgdXNlLCBTcGVjRnVsbFJlYWxOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwg
b3BGUFIsIG9wRlBSKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmVEb3VibGUob3BGUFIsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
YnVmZmVyICsgb3BlcmFuZElkeCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAg
ICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKLSAg
ICAgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyICsgb3BlcmFuZElkeCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIob3BHUFIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciArIG9wZXJh
bmRJZHgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdKTsKLSAgICAgICAgICAgICAgICBHUFJS
ZWcgb3BUYWdHUFIgPSBvcGVyYW5kLnRhZ0dQUigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBv
cFBheWxvYWRHUFIgPSBvcGVyYW5kLnBheWxvYWRHUFIoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKG9wVGFnR1BSLCByZWludGVycHJldF9jYXN0PGNo
YXIqPihidWZmZXIgKyBvcGVyYW5kSWR4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihv
cFBheWxvYWRHUFIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciArIG9wZXJhbmRJZHgp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSk7Ci0gICAgICAgICAgICAgICAgb3BlcmFuZC51c2UoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
Q1JBU0goKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAg
ICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNhc2UgQUxMX0lO
VDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIGlm
IChzY3JhdGNoU2l6ZSkgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
Ci0KLSAgICAgICAgICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBvZiB0aGUgc2Ny
YXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgotICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwg
c2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRy
KHNjcmF0Y2hTaXplKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBHUFJG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBjYWxsT3Bl
cmF0aW9uKAotICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdC5ncHIoKSwgbV9q
aXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCo+KGJ1ZmZlciksIHNpemVfdChub2RlLT5udW1D
aGlsZHJlbigpKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0KLSAgICAgICAg
aWYgKHNjcmF0Y2hTaXplKSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXIt
PmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzY3JhdGNoLmdwcigpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBjb21waWxlTmV3QXJyYXkobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzY5Niw0NSArMzQyNiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
TmV3QXJyYXlCdWZmZXI6IHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0g
ICAgICAgIEpTRml4ZWRBcnJheSogYXJyYXkgPSBub2RlLT5jYXN0T3BlcmFuZDxKU0ZpeGVkQXJy
YXkqPigpOwotICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IGFycmF5LT5sZW5ndGgoKTsK
LSAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5vZGUtPmluZGV4aW5nVHlwZSgp
OwotICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNB
bnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
b3JhZ2UodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2Uu
Z3ByKCk7Ci0KLSAgICAgICAgICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIG1f
aml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKSksIHN0b3JhZ2VH
UFIsIG51bUVsZW1lbnRzLCBudW1FbGVtZW50cyk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bUVsZW1lbnRzOyArK2luZGV4KSB7Ci0gICAgICAgICAg
ICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGhhbHZlc1syXTsKLSAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgICAgICAgICAgICAgICAg
ICBpbnQ2NF90IGVuY29kZWRWYWx1ZTsKLSAgICAgICAgICAgICAgICB9IHU7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkKLSAgICAg
ICAgICAgICAgICAgICAgdS5kb3VibGVWYWx1ZSA9IGFycmF5LT5nZXQoaW5kZXgpLmFzTnVtYmVy
KCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB1LmVuY29kZWRW
YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShhcnJheS0+Z2V0KGluZGV4KSk7Ci0gICAgICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoZG91YmxlKSA9PSBzaXplb2YoSlNWYWx1ZSksICIiKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEltbTMyKHUuaGFsdmVzWzBdKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXgpKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEltbTMyKHUuaGFsdmVzWzFdKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXggKyBz
aXplb2YoaW50MzJfdCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3Vs
dCByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5QnVmZmVyLCByZXN1bHQuZ3ByKCksIG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSwgVHJ1c3RlZEltbVB0cihub2RlLT5jZWxs
T3BlcmFuZCgpKSwgc2l6ZV90KG51bUVsZW1lbnRzKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7Ci0gICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSk7CisgICAgICAgIGNvbXBpbGVOZXdBcnJheUJ1ZmZlcihub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKQEAgLTM3NTUsMzUgKzM0NDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFRvVGhp
czogewotICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRV
c2UpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXBUYWcodGhpcyk7Ci0gICAgICAgIEdQUlJlZyB0aGlzVmFsdWVQYXlsb2FkR1BSID0g
dGhpc1ZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZVRhZ0dQUiA9
IHRoaXNWYWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OwotICAgICAgICBHUFJSZWcgdGVtcFRhZ0dQUiA9IHRlbXBUYWcuZ3ByKCk7Ci0gICAgICAgIAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbCh0aGlzVmFsdWUuanNWYWx1ZVJlZ3Mo
KSkpOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDgoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh0aGlzVmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihPdmVycmlkZXNU
b1RoaXMpKSk7Ci0gICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlUGF5bG9hZEdQUiwgdGVtcEdQ
Uik7Ci0gICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlVGFnR1BSLCB0ZW1wVGFnR1BSKTsKLSAg
ICAgICAgSl9KSVRPcGVyYXRpb25fRUogZnVuY3Rpb247Ci0gICAgICAgIGlmIChtX2ppdC5ncmFw
aCgpLmV4ZWN1dGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNTdHJpY3RNb2RlKCkp
Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpc1N0cmljdDsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXM7Ci0gICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3ModGVtcFRhZ0dQUiwgdGVtcEdQUiksIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZVRhZ0dQUiwg
dGhpc1ZhbHVlUGF5bG9hZEdQUikpKTsKLQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHRlbXBUYWdH
UFIsIHRlbXBHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlVG9UaGlzKG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTM4MjgsMjkgKzM0OTIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAg
Y2FzZSBHZXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRo
aXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BS
ID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJl
c3VsdFBheWxvYWQuZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShub2Rl
LT5zY29wZU9mZnNldCgpKSArIFRhZ09mZnNldCksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShub2RlLT5zY29wZU9mZnNldCgpKSArIFBheWxvYWRPZmZz
ZXQpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdH
UFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlR2V0Q2xvc3VyZVZh
cihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAogICAgIGNhc2UgUHV0Q2xvc3Vy
ZVZhcjogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOwotCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BS
UmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVBh
eWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0KLSAgICAgICAgbV9qaXQuc3RvcmUzMih2
YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGUobm9kZS0+c2NvcGVPZmZzZXQoKSkgKyBUYWdPZmZzZXQp
KTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKG5v
ZGUtPnNjb3BlT2Zmc2V0KCkpICsgUGF5bG9hZE9mZnNldCkpOwotICAgICAgICBub1Jlc3VsdChu
b2RlKTsKKyAgICAgICAgY29tcGlsZVB1dENsb3N1cmVWYXIobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtNDAxOCw5ICszNjY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDaGVja0NlbGw6IHsK
LSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2VsbCwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoY2VsbC5ncHIoKSksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgY2VsbC5ncHIoKSwgbm9kZS0+Y2VsbE9wZXJhbmQoKS0+Y2Vs
bCgpKSk7Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlQ2hlY2tDZWxs
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQwMzcsMTMgKzM2ODIsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBHZXRFeGVjdXRhYmxlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGZ1bmN0aW9uKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBSZXVzZSwgZnVuY3Rpb24pOwotICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIg
PSBmdW5jdGlvbi5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKLSAgICAgICAgc3BlY3VsYXRlQ2VsbFR5cGUobm9kZS0+Y2hpbGQxKCksIGZ1bmN0aW9uR1BS
LCBTcGVjRnVuY3Rpb24sIEpTRnVuY3Rpb25UeXBlKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhmdW5jdGlvbkdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVj
dXRhYmxlKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CisgICAgICAgIGNvbXBpbGVHZXRFeGVjdXRhYmxlKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIApAQCAtNDEwNywyMCArMzc0Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIHN0b3Jh
Z2UpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAg
Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgR1BS
UmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAKLSAgICAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGEoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc3RvcmFnZUFjY2Vz
c0RhdGEub2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBp
bGVHZXRCeU9mZnNldChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAg
LTQxNTAsMjEgKzM3NzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7Ci0gICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0KLSAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIg
PSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVl
LnBheWxvYWRHUFIoKTsKLQotICAgICAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hpbGQyKCkp
OwotCi0gICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG5vZGUt
PnN0b3JhZ2VBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cih2
YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0
cih2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIAot
ICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZVB1dEJ5T2Zmc2V0KG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQyNTEsMjggKzM4NjMsMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBHZXRHbG9iYWxM
ZXhpY2FsVmFyaWFibGU6CiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRU
YWcodGhpcyk7Ci0KLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUtPnZhcmlh
YmxlUG9pbnRlcigpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkLmdwcigpLCBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkp
OwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9h
ZC5ncHIoKSwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotCi0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKKyAgICAgICAgY29t
cGlsZUdldEdsb2JhbFZhcmlhYmxlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIFB1dEdsb2JhbFZhcmlhYmxlOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICAvLyBGSVhNRTogaWYgd2UgaGFwcGVu
IHRvIGhhdmUgYSBzcGFyZSByZWdpc3RlciAtIGFuZCBfT05MWV8gaWYgd2UgaGFwcGVuIHRvIGhh
dmUKLSAgICAgICAgLy8gYSBzcGFyZSByZWdpc3RlciAtIGEgZ29vZCBvcHRpbWl6YXRpb24gd291
bGQgYmUgdG8gcHV0IHRoZSByZWdpc3RlciBwb2ludGVyIGludG8KLSAgICAgICAgLy8gYSByZWdp
c3RlciBhbmQgdGhlbiBkbyBhIHplcm8gb2Zmc2V0IHN0b3JlIGZvbGxvd2VkIGJ5IGEgZm91ci1v
ZmZzZXQgc3RvcmUgKG9yCi0gICAgICAgIC8vIHZpY2UtdmVyc2EgZGVwZW5kaW5nIG9uIGVuZGlh
bm5lc3MpLgotICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBub2RlLT52YXJp
YWJsZVBvaW50ZXIoKS0+dGFnUG9pbnRlcigpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1
ZS5wYXlsb2FkR1BSKCksIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpLT5wYXlsb2FkUG9pbnRlcigp
KTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZVB1dEdsb2JhbFZh
cmlhYmxlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IGU5NmJmNzM5Mjcw
MTlkY2JjY2I1ZjVhNDZlYmM4N2ViYTM3NGYwZGUuLmJhNjhlZmYyN2Q3ZjA0ZTU5M2VjNTYyMmY5
NDliMzU3OWI0MzMzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjIwMiwzMiArMjIwMiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElk
ZW50aXR5OiB7Ci0gICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgRG91
YmxlUmVwVXNlOgotICAgICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6Ci0gICAgICAgIGNhc2Ug
RG91YmxlUmVwQW55SW50VXNlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMsIG9wKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AuZnByKCksIHNj
cmF0Y2guZnByKCkpOwotICAgICAgICAgICAgZG91YmxlUmVzdWx0KHNjcmF0Y2guZnByKCksIG5v
ZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnQ1MlJl
cFVzZTogewotICAgICAgICAgICAgU3BlY3VsYXRlSW50NTJPcGVyYW5kIG9wKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2Us
IG9wKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0g
ICAgICAgICAgICBpbnQ1MlJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcCk7Ci0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKG9wLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgY29tcGlsZUlkZW50aXR5
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI1MTYsNjggKzI0OTEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgIGNh
c2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDogewotICAgICAgICBzd2l0Y2ggKG5vZGUt
PmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwg
b3AxKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3Ax
TGVzcyA9IG1faml0LmJyYW5jaDMyKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBvcDEuZ3ByKCksIG9wMi5ncHIo
KSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAg
ICAgICAgICAgIGlmIChvcDEuZ3ByKCkgIT0gcmVzdWx0LmdwcigpKSB7Ci0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAg
ICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9w
MS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHQuZ3ByKCks
IG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEZQUlJlZyBv
cDFGUFIgPSBvcDEuZnByKCk7Ci0gICAgICAgICAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigp
OwotICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKLSAgICAgICAg
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91
YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBvcDFGUFIsIG9wMkZQUik7Ci0gICAgICAg
IAotICAgICAgICAgICAgLy8gb3AyIGlzIGVhdGhlciB0aGUgbGVzc2VyIG9uZSBvciBvbmUgb2Yg
dGhlbiBpcyBOYU4KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMkxlc3MgPSBt
X2ppdC5icmFuY2hEb3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVh
bCwgb3AxRlBSLCBvcDJGUFIpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIFVub3JkZXJlZCBj
YXNlLiBXZSBkb24ndCBrbm93IHdoaWNoIG9mIG9wMSwgb3AyIGlzIE5hTi4gTWFudWZhY3R1cmUg
TmFOIGJ5IGFkZGluZyAKLSAgICAgICAgICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBp
bnRvIHJlc3VsdC4KLSAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShvcDFGUFIsIG9wMkZQUiwg
cmVzdWx0RlBSKTsKLSAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAg
ICAgIAotICAgICAgICAgICAgb3AyTGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlRG91YmxlKG9wMkZQUiwgcmVzdWx0RlBSKTsKLSAgICAgICAgCi0gICAgICAgICAgICBp
ZiAob3AxRlBSICE9IHJlc3VsdEZQUikgewotICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmso
Jm1faml0KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMUZQUiwgcmVzdWx0
RlBSKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygm
bV9qaXQpOwotICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAg
ICAKLSAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRGUFIsIG5vZGUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGNvbXBpbGVBcml0aE1pbk1h
eChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yOTI5LDIwICsyODQzLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNh
c2UgR2V0QnlWYWxXaXRoVGhpczogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwot
ICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBzdWJzY3JpcHQodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICBH
UFJSZWcgc3Vic2NyaXB0R1BSID0gc3Vic2NyaXB0LmdwcigpOwotCi0gICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25HZXRCeVZhbFdpdGhUaGlzLCByZXN1bHRHUFIsIGJhc2VHUFIsIHRoaXNW
YWx1ZUdQUiwgc3Vic2NyaXB0R1BSKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
LQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBp
bGVHZXRCeVZhbFdpdGhUaGlzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM3
MTksMTc3ICszNjIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5n
QUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkg
ewotICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFw
aCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAg
ICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkgPT0gbm9kZS0+aW5kZXhpbmdUeXBlKCksIHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCks
IG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAg
ICAgICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAg
ICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAg
ICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAg
ICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5vZGUtPm51bUNoaWxk
cmVuKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGhIaW50ID0gbm9kZS0+dmVj
dG9yTGVuZ3RoSGludCgpOwotICAgICAgICAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aEhpbnQgPj0g
bnVtRWxlbWVudHMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAg
ICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFnZUdQ
UiwgbnVtRWxlbWVudHMsIHZlY3Rvckxlbmd0aEhpbnQpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50LCBvbmUgd2F5IG9yIGFub3RoZXIsIHJlc3VsdEdQUiBhbmQg
c3RvcmFnZUdQUiBoYXZlIHBvaW50ZXJzIHRvCi0gICAgICAgICAgICAvLyB0aGUgSlNBcnJheSBh
bmQgdGhlIEJ1dHRlcmZseSwgcmVzcGVjdGl2ZWx5LgotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBBU1NFUlQoIWhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB8fCAhbm9k
ZS0+bnVtQ2hpbGRyZW4oKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29w
ZXJhbmRJZHgpIHsKLSAgICAgICAgICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBoKCkubV92
YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XTsKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgY2FzZSBBTExf
VU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9ET1VC
TEVfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7Ci0gICAgICAgICAgICAgICAgICAgIEZQUlJlZyBv
cEZQUiA9IG9wZXJhbmQuZnByKCk7Ci0gICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNL
KAotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVjRG91Ymxl
UmVhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
RG91YmxlKG9wRlBSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2Yo
ZG91YmxlKSAqIG9wZXJhbmRJZHgpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
IHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIEdQUlJlZyBv
cEdQUiA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihu
b2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERGR19UWVBF
X0NIRUNLKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wR1BSKSwg
dXNlLCBTcGVjSW50MzJPbmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaDY0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIG9wR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KG9wR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVy
YW5kSWR4KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFl1Y2ssIHdlIHNob3VsZCAqcmVhbGx5
KiBoYXZlIGEgd2F5IG9mIGFsc28gcmV0dXJuaW5nIHRoZSBzdG9yYWdlR1BSLiBCdXQKLSAgICAg
ICAgICAgIC8vIHRoYXQncyB0aGUgbGVhc3Qgb2Ygd2hhdCdzIHdyb25nIHdpdGggdGhpcyBjb2Rl
LiBXZSByZWFsbHkgc2hvdWxkbid0IGJlCi0gICAgICAgICAgICAvLyBhbGxvY2F0aW5nIHRoZSBh
cnJheSBhZnRlciBoYXZpbmcgY29tcHV0ZWQgLSBhbmQgcHJvYmFibHkgc3BpbGxlZCB0byB0aGUK
LSAgICAgICAgICAgIC8vIHN0YWNrIC0gYWxsIG9mIHRoZSB0aGluZ3MgdGhhdCB3aWxsIGdvIGlu
dG8gdGhlIGFycmF5LiBUaGUgc29sdXRpb24gdG8gdGhhdAotICAgICAgICAgICAgLy8gYmlnZ2Vy
IHByb2JsZW0gd2lsbCBhbHNvIGxpa2VseSBmaXggdGhlIHJlZHVuZGFuY3kgaW4gcmVsb2FkaW5n
IHRoZSBzdG9yYWdlCi0gICAgICAgICAgICAvLyBwb2ludGVyIHRoYXQgd2UgY3VycmVudGx5IGhh
dmUuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW5vZGUtPm51bUNoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0VtcHR5QXJyYXksIHJlc3VsdC5ncHIoKSwgbV9q
aXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpKTsK
LSAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICBjZWxsUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSAqIG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0
Y2hCdWZmZXIgPSBtX2ppdC52bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7
Ci0gICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzY3JhdGNoQnVmZmVyID8gc3RhdGlj
X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsK
LSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJ
ZHggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKLSAgICAgICAgICAgIC8v
IE5lZWQgdG8gcGVyZm9ybSB0aGUgc3BlY3VsYXRpb25zIHRoYXQgdGhpcyBub2RlIHByb21pc2Vz
IHRvIHBlcmZvcm0uIElmIHdlJ3JlCi0gICAgICAgICAgICAvLyBlbWl0dGluZyBjb2RlIGhlcmUg
YW5kIHRoZSBpbmRleGluZyB0eXBlIGlzIG5vdCBhcnJheSBzdG9yYWdlIHRoZW4gdGhlcmUgaXMK
LSAgICAgICAgICAgIC8vIHByb2JhYmx5IHNvbWV0aGluZyBoaWxhcmlvdXMgZ29pbmcgb24gYW5k
IHdlJ3JlIGFscmVhZHkgZmFpbGluZyBhdCBhbGwgdGhlCi0gICAgICAgICAgICAvLyB0aGluZ3Ms
IGJ1dCBhdCBsZWFzdCB3ZSdyZSBnb2luZyB0byBiZSBzb3VuZC4KLSAgICAgICAgICAgIEVkZ2Ug
dXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSAr
IG9wZXJhbmRJZHhdOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkg
ewotICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgQ1JB
U0goKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJM
RV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3BlcmFuZCh0aGlzLCB1c2UpOwotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOwotICAgICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAg
ICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncygpLCB1c2UsIFNwZWNEb3VibGVSZWFsLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hEb3VibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQuYm94RG91YmxlKG9wRlBSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRo
aXMsIHVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgICAgICBHUFJS
ZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihu
b2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hF
Q0soCi0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZSwgU3Bl
Y0ludDMyT25seSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3BHUFIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTY0KG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3BlcmFuZCh0aGlzLCB1c2UpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBvcEdQUiA9IG9wZXJh
bmQuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQUiwgYnVmZmVyICsg
b3BlcmFuZElkeCk7Ci0gICAgICAgICAgICAgICAgb3BlcmFuZC51c2UoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUo
KSkgewotICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNh
c2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0g
ICAgICAgIGlmIChzY3JhdGNoU2l6ZSkgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7Ci0KLSAgICAgICAgICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBv
ZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgotICAgICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxl
bmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVz
dGVkSW1tUHRyKHNjcmF0Y2hTaXplKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAg
ICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdC5n
cHIoKSwgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5
cGUoKSkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCo+KGJ1ZmZlciksIHNpemVfdChu
b2RlLT5udW1DaGlsZHJlbigpKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0K
LSAgICAgICAgaWYgKHNjcmF0Y2hTaXplKSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0
Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAg
ICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzY3JhdGNoLmdw
cigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBjb21waWxlTmV3QXJyYXko
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzkwOSw0NCArMzY0MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6IHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7Ci0gICAgICAgIEpTRml4ZWRBcnJheSogYXJyYXkgPSBub2RlLT5jYXN0T3BlcmFuZDxK
U0ZpeGVkQXJyYXkqPigpOwotICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IGFycmF5LT5s
ZW5ndGgoKTsKLSAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5vZGUtPmluZGV4
aW5nVHlwZSgpOwotICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgp
ICYmICFoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoSGludCA9IG5vZGUtPnZlY3Rvckxlbmd0aEhpbnQoKTsKLSAgICAg
ICAgICAgIEFTU0VSVCh2ZWN0b3JMZW5ndGhIaW50ID49IG51bUVsZW1lbnRzKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VHUFIgPSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVSYXdPYmpl
Y3QocmVzdWx0R1BSLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5n
VHlwZSkpLCBzdG9yYWdlR1BSLCBudW1FbGVtZW50cywgdmVjdG9yTGVuZ3RoSGludCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaW5k
ZXhpbmdUeXBlICYgSXNBcnJheSwgaW5kZXhpbmdUeXBlKTsKLQotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtRWxlbWVudHM7ICsraW5kZXgpIHsKLSAgICAg
ICAgICAgICAgICBpbnQ2NF90IHZhbHVlOwotICAgICAgICAgICAgICAgIGlmIChpbmRleGluZ1R5
cGUgPT0gQXJyYXlXaXRoRG91YmxlKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdHdp
c2VfY2FzdDxpbnQ2NF90PihhcnJheS0+Z2V0KGluZGV4KS5hc051bWJlcigpKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gSlNWYWx1ZTo6ZW5jb2Rl
KGFycmF5LT5nZXQoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
Zihkb3VibGUpID09IHNpemVvZihKU1ZhbHVlKSwgIiIpOwotICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoSW1tNjQodmFsdWUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBzaXplb2YoSlNWYWx1ZSkgKiBpbmRleCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIEdQUkZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIsIHJlc3VsdC5ncHIoKSwgbV9qaXQuZ3JhcGgoKS5y
ZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpLCBUcnVzdGVkSW1tUHRy
KG5vZGUtPmNlbGxPcGVyYW5kKCkpLCBzaXplX3QobnVtRWxlbWVudHMpKTsKLSAgICAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlKTsKKyAgICAgICAgY29tcGlsZU5ld0FycmF5QnVmZmVyKG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzk2NywyOSArMzY2MSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFRv
VGhpczogewotICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlw
ZWRVc2UpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVn
IHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIg
PSB0ZW1wLmdwcigpOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENl
bGwoSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSkpOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpKTsKLSAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFs
dWVHUFIsIHRlbXBHUFIpOwotICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSiBmdW5jdGlvbjsKLSAg
ICAgICAgaWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9U
aGlzU3RyaWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlv
blRvVGhpczsKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93
UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBmdW5jdGlvbiwgdGVtcEdQUiwgdGhpc1ZhbHVlR1BS
KSk7Ci0KLSAgICAgICAganNWYWx1ZVJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKKyAgICAgICAgY29t
cGlsZVRvVGhpcyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDM5LDI0ICsz
NzExLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogewotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAg
ICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShub2RlLT5zY29wZU9mZnNldCgpKSksIHJlc3Vs
dEdQUik7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAg
Y29tcGlsZUdldENsb3N1cmVWYXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIFB1dENsb3N1cmVWYXI6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotCi0gICAgICAgIG1faml0
LnN0b3JlNjQodmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKG5vZGUtPnNjb3BlT2Zmc2V0KCkpKSk7Ci0g
ICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlUHV0Q2xvc3VyZVZhcihub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MjEyLDkgKzM4NzEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIENoZWNrQ2VsbDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDZWxsLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0
LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBjZWxsLmdwcigpLCBub2RlLT5j
ZWxsT3BlcmFuZCgpLT5jZWxsKCkpKTsKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAg
IGNvbXBpbGVDaGVja0NlbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDI0
MywxNCArMzkwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldEV4ZWN1dGFibGU6IHsKLSAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBmdW5jdGlvbik7Ci0gICAgICAgIEdQ
UlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZShub2RlLT5jaGls
ZDEoKSwgZnVuY3Rpb25HUFIsIFNwZWNGdW5jdGlvbiwgSlNGdW5jdGlvblR5cGUpOwotICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGZ1bmN0aW9uR1BSLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0Lnhv
clB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uUG9pc29uOjprZXkoKSks
IHJlc3VsdEdQUik7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAg
ICAgY29tcGlsZUdldEV4ZWN1dGFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCkBAIC00MzMxLDE3ICszOTgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2Ug
R2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgUmV1c2UsIHN0b3JhZ2UpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIg
PSBzdG9yYWdlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICAKLSAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRh
ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0Lmxv
YWQ2NChKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldEJ5
T2Zmc2V0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDM1Niwx
OSArMzk5Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLQotICAgICAgICBHUFJSZWcgc3RvcmFn
ZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOwotCi0gICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAg
ICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHN0b3Jh
Z2VBY2Nlc3NEYXRhLm9mZnNldCkpKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAg
ICAgY29tcGlsZVB1dEJ5T2Zmc2V0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTQ0NzAsMjAgKzQwOTgsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogCiAgICAgY2FzZSBHZXRHbG9iYWxMZXhpY2FsVmFyaWFibGU6CiAgICAgY2FzZSBHZXRH
bG9iYWxWYXI6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAg
ICBtX2ppdC5sb2FkNjQobm9kZS0+dmFyaWFibGVQb2ludGVyKCksIHJlc3VsdC5ncHIoKSk7Ci0K
LSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBjb21w
aWxlR2V0R2xvYmFsVmFyaWFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGNhc2UgUHV0R2xvYmFsVmFyaWFibGU6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgIG1faml0LnN0b3JlNjQodmFsdWUuZ3By
KCksIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsK
KyAgICAgICAgY29tcGlsZVB1dEdsb2JhbFZhcmlhYmxlKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336832</attachid>
            <date>2018-03-29 19:18:58 -0700</date>
            <delta_ts>2018-04-02 00:51:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184089-20180330111857.patch</filename>
            <type>text/plain</type>
            <size>71031</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMDg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZGIzNGI0MzcwZjE4N2U4YjZhOTk2NjJkZjM1YzYxZTZhMmMzOTYwLi4xN2FlZTI5MjA1MTc0ZGY4
MDJmMDAzZDUyOTU1Mzk0MWYyNGVhZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxOC0wMy0yOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBNb3JlIGFnZ3Jlc3NpdmUgcmVtb3ZhbCBvZiBkdXBsaWNh
dGUgMzJiaXQgREZHIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4NDA4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggbW9yZSBhZ2dyZXNzaXZlbHkgcmVtb3ZlcyBkdXBsaWNhdGUg
MzJiaXQgREZHIGNvZGUKKyAgICAgICAgYnkgbGV2ZXJhZ2luZyBKU1ZhbHVlUmVncyBhbmQgbWV0
YS1wcm9ncmFtbWVkIGNhbGxPcGVyYXRpb24uCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxXaXRoVGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBcml0aE1pbk1heCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVOZXdBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
aGVja0NlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0Q2xvc3VyZVZhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRDbG9zdXJlVmFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3QXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlVG9UaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUlkZW50aXR5KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6CisKIDIwMTgtMDMtMjkgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5j
b20+CiAKICAgICAgICAgQXJyYXlNb2RlIHNob3VsZCBub3QgdHJ5IHRvIGdldCB0aGUgREZHIHRv
IHRoaW5rIGl0IGNhbiBjb252ZXJ0IFR5cGVkQXJyYXlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDc1NmI3MDEyNGZhNjEwMDY2NGE2
YWIxMzkyYzMwMWE2YzJlZTRhZDUuLmQ2NmM0ZjBkMTAyMTQ0ZDg1ODUyYmVjZjM0MmVmYzBkMTM3
YTIyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCkBAIC0zMjc4LDYgKzMyNzgsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2woTm9kZSogbm9kZSwgRWRnZSYgY2hpbGQxLAogICAg
IG5vUmVzdWx0KG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxXaXRoVGhpcyhOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1ZhbHVl
UmVncygpOworICAgIEpTVmFsdWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CisgICAgSlNWYWx1ZVJlZ3MgdGhpc1ZhbHVlUmVncyA9IHRoaXNWYWx1ZS5qc1ZhbHVlUmVn
cygpOworICAgIEpTVmFsdWVPcGVyYW5kIHN1YnNjcmlwdCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7
CisgICAgSlNWYWx1ZVJlZ3Mgc3Vic2NyaXB0UmVncyA9IHN1YnNjcmlwdC5qc1ZhbHVlUmVncygp
OworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJl
Z3MoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsV2l0aFRoaXMsIHJlc3Vs
dFJlZ3MsIGJhc2VSZWdzLCB0aGlzVmFsdWVSZWdzLCBzdWJzY3JpcHRSZWdzKTsKKyAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOworCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2Rl
KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3Qo
Tm9kZSosIEdQUlJlZyB2YWx1ZVJlZywgR1BSUmVnIHByb3RvdHlwZVJlZywgR1BSUmVnIHNjcmF0
Y2hSZWcsIEdQUlJlZyBzY3JhdGNoMlJlZywgR1BSUmVnIHNjcmF0Y2gzUmVnKQogewogICAgIC8v
IENoZWNrIHRoYXQgcHJvdG90eXBlIGlzIGFuIG9iamVjdC4KQEAgLTU1MDIsNiArNTUyMCw3NiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTcXJ0KE5vZGUqIG5vZGUpCiAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aE1pbk1heChOb2RlKiBub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7CisKKyAgICAgICAg
R1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoMzIobm9kZS0+b3Ao
KSA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiA6IE1hY3JvQXNzZW1ibGVy
OjpHcmVhdGVyVGhhbiwgb3AxR1BSLCBvcDJHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKG9wMUdQUiAhPSByZXN1bHRHUFIpIHsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAg
ICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BS
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgaW50MzJS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBEb3VibGVSZXBVc2U6IHsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxKTsKKworICAgICAgICBGUFJSZWcgb3AxRlBSID0gb3AxLmZwcigpOworICAgICAgICBGUFJS
ZWcgb3AyRlBSID0gb3AyLmZwcigpOworICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0
LmZwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMUxlc3MgPSBtX2ppdC5icmFuY2hEb3VibGUobm9k
ZS0+b3AoKSA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbiA6IE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxRlBSLCBvcDJGUFIpOworCisgICAg
ICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBvbmUgb3Igb25lIG9mIHRoZW4gaXMgTmFO
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMkxlc3MgPSBtX2ppdC5icmFuY2hEb3Vi
bGUobm9kZS0+b3AoKSA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWwgOiBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsLCBvcDFG
UFIsIG9wMkZQUik7CisKKyAgICAgICAgLy8gVW5vcmRlcmVkIGNhc2UuIFdlIGRvbid0IGtub3cg
d2hpY2ggb2Ygb3AxLCBvcDIgaXMgTmFOLiBNYW51ZmFjdHVyZSBOYU4gYnkgYWRkaW5nIAorICAg
ICAgICAvLyBvcDEgKyBvcDIgYW5kIHB1dHRpbmcgaXQgaW50byByZXN1bHQuCisgICAgICAgIG1f
aml0LmFkZERvdWJsZShvcDFGUFIsIG9wMkZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgZG9uZS5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBvcDJMZXNzLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgbV9qaXQubW92ZURvdWJsZShvcDJGUFIsIHJlc3VsdEZQUik7CisKKyAgICAgICAgaWYg
KG9wMUZQUiAhPSByZXN1bHRGUFIpIHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CisKKyAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAg
bV9qaXQubW92ZURvdWJsZShvcDFGUFIsIHJlc3VsdEZQUik7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgb3AxTGVzcy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdEZQUiwgbm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFw
aCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwog
Ly8gRm9yIHNtYWxsIHBvc2l0aXZlIGludGVnZXJzICwgaXQgaXMgd29ydGggZG9pbmcgYSB0aW55
IGlubGluZSBsb29wIHRvIGV4cG9uZW50aWF0ZSB0aGUgYmFzZS4KIC8vIEV2ZXJ5IHJlZ2lzdGVy
IGlzIGNsb2JiZXJlZCBieSB0aGlzIGhlbHBlci4KIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBjb21waWxlQXJpdGhQb3dJbnRlZ2VyRmFzdFBhdGgoSklUQ29tcGlsZXImIGFzc2VtYmxlciwg
RlBSUmVnIHhPcGVyYW5kLCBHUFJSZWcgeU9wZXJhbmQsIEZQUlJlZyByZXN1bHQpCkBAIC03NDUx
LDYgKzc1MzksMTcwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSog
bm9kZSkKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheShO
b2RlKiBub2RlKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5n
cmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIGlmICgh
Z2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShu
b2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1
Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSk7CisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBub2RlLT5pbmRleGluZ1R5cGUoKSwgc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSwgbm9kZS0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICBBU1NFUlQoCisg
ICAgICAgICAgICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAg
ICAgICAgIHx8IGhhc0ludDMyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAgICAgICAg
ICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8
IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworCisgICAgICAgIHVu
c2lnbmVkIG51bUVsZW1lbnRzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoSGludCA9IG5vZGUtPnZlY3Rvckxlbmd0aEhpbnQoKTsKKyAgICAgICAg
QVNTRVJUKHZlY3Rvckxlbmd0aEhpbnQgPj0gbnVtRWxlbWVudHMpOworCisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMp
OworCisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBlbWl0QWxsb2NhdGVS
YXdPYmplY3QocmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHN0b3JhZ2VHUFIsIG51bUVsZW1lbnRzLCB2
ZWN0b3JMZW5ndGhIaW50KTsKKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBvbmUgd2F5IG9y
IGFub3RoZXIsIHJlc3VsdEdQUiBhbmQgc3RvcmFnZUdQUiBoYXZlIHBvaW50ZXJzIHRvCisgICAg
ICAgIC8vIHRoZSBKU0FycmF5IGFuZCB0aGUgQnV0dGVyZmx5LCByZXNwZWN0aXZlbHkuCisKKyAg
ICAgICAgQVNTRVJUKCFoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgfHwg
IW5vZGUtPm51bUNoaWxkcmVuKCkpOworCisgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElk
eCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsK
KyAgICAgICAgICAgIEVkZ2UgdXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25v
ZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdOworICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdf
VFlQRVM6CisgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Cisg
ICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOworICAgICAgICAgICAgICAg
IEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7CisgICAgICAgICAgICAgICAgREZHX1RZUEVf
Q0hFQ0soCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwgU3BlY0RvdWJs
ZVJlYWwsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVk
LCBvcEZQUiwgb3BGUFIpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShvcEZQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKGRvdWJsZSkgKiBv
cGVyYW5kSWR4KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyBvcGVyYW5kUmVncyA9IG9wZXJhbmQuanNWYWx1ZVJl
Z3MoKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzSW50MzIobm9kZS0+aW5kZXhpbmdUeXBlKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmFuZFJlZ3MsIHVzZSwgU3BlY0ludDMyT25seSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaElmTm90SW50MzIob3BlcmFuZFJlZ3MpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVWYWx1ZShvcGVyYW5kUmVncywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogb3Bl
cmFuZElkeCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gWXVjaywgd2Ug
c2hvdWxkICpyZWFsbHkqIGhhdmUgYSB3YXkgb2YgYWxzbyByZXR1cm5pbmcgdGhlIHN0b3JhZ2VH
UFIuIEJ1dAorICAgICAgICAvLyB0aGF0J3MgdGhlIGxlYXN0IG9mIHdoYXQncyB3cm9uZyB3aXRo
IHRoaXMgY29kZS4gV2UgcmVhbGx5IHNob3VsZG4ndCBiZQorICAgICAgICAvLyBhbGxvY2F0aW5n
IHRoZSBhcnJheSBhZnRlciBoYXZpbmcgY29tcHV0ZWQgLSBhbmQgcHJvYmFibHkgc3BpbGxlZCB0
byB0aGUKKyAgICAgICAgLy8gc3RhY2sgLSBhbGwgb2YgdGhlIHRoaW5ncyB0aGF0IHdpbGwgZ28g
aW50byB0aGUgYXJyYXkuIFRoZSBzb2x1dGlvbiB0byB0aGF0CisgICAgICAgIC8vIGJpZ2dlciBw
cm9ibGVtIHdpbGwgYWxzbyBsaWtlbHkgZml4IHRoZSByZWR1bmRhbmN5IGluIHJlbG9hZGluZyB0
aGUgc3RvcmFnZQorICAgICAgICAvLyBwb2ludGVyIHRoYXQgd2UgY3VycmVudGx5IGhhdmUuCisK
KyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFub2RlLT5udW1DaGlsZHJlbigpKSB7CisgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCByZXN1bHQuZ3ByKCks
IG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkp
KSk7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVf
dCBzY3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBub2RlLT5udW1DaGlsZHJl
bigpOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC52bSgpLT5zY3Jh
dGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZl
ciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hC
dWZmZXItPmRhdGFCdWZmZXIoKSkgOiBudWxscHRyOworCisgICAgZm9yICh1bnNpZ25lZCBvcGVy
YW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZElk
eCkgeworICAgICAgICAvLyBOZWVkIHRvIHBlcmZvcm0gdGhlIHNwZWN1bGF0aW9ucyB0aGF0IHRo
aXMgbm9kZSBwcm9taXNlcyB0byBwZXJmb3JtLiBJZiB3ZSdyZQorICAgICAgICAvLyBlbWl0dGlu
ZyBjb2RlIGhlcmUgYW5kIHRoZSBpbmRleGluZyB0eXBlIGlzIG5vdCBhcnJheSBzdG9yYWdlIHRo
ZW4gdGhlcmUgaXMKKyAgICAgICAgLy8gcHJvYmFibHkgc29tZXRoaW5nIGhpbGFyaW91cyBnb2lu
ZyBvbiBhbmQgd2UncmUgYWxyZWFkeSBmYWlsaW5nIGF0IGFsbCB0aGUKKyAgICAgICAgLy8gdGhp
bmdzLCBidXQgYXQgbGVhc3Qgd2UncmUgZ29pbmcgdG8gYmUgc291bmQuCisgICAgICAgIEVkZ2Ug
dXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSAr
IG9wZXJhbmRJZHhdOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBjYXNlIEFMTF9V
TkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogeworICAg
ICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7CisgICAg
ICAgICAgICBGUFJSZWcgb3BGUFIgPSBvcGVyYW5kLmZwcigpOworICAgICAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVjRG91Ymxl
UmVhbCwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3VibGUoCisgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBvcEZQUiwg
b3BGUFIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgSlNWYWx1ZVJlZ3NUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHNjcmF0Y2hSZWdz
ID0gc2NyYXRjaC5yZWdzKCk7CisgICAgICAgICAgICBtX2ppdC5ib3hEb3VibGUob3BGUFIsIHNj
cmF0Y2hSZWdzKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlVmFsdWUoc2NyYXRjaFJlZ3MsIGJ1
ZmZlciArIG9wZXJhbmRJZHgpOworI2Vsc2UKKyAgICAgICAgICAgIG1faml0LnN0b3JlRG91Ymxl
KG9wRlBSLCBUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIG9wZXJhbmRJZHgpKTsKKyNlbmRpZgorICAg
ICAgICAgICAgb3BlcmFuZC51c2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRo
aXMsIHVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIEpTVmFsdWVS
ZWdzIG9wZXJhbmRSZWdzID0gb3BlcmFuZC5qc1ZhbHVlUmVncygpOworICAgICAgICAgICAgaWYg
KGhhc0ludDMyKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICAgICAgICAgIERGR19U
WVBFX0NIRUNLKAorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kUmVncywgdXNlLCBTcGVjSW50
MzJPbmx5LAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZk5vdEludDMyKG9wZXJh
bmRSZWdzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2ppdC5zdG9yZVZhbHVlKG9w
ZXJhbmRSZWdzLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKKyAgICAgICAgICAgIG9wZXJhbmQudXNl
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgIGlmIChzY3JhdGNoU2l6ZSkgeworICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgICAgICAvLyBUZWxsIEdDIG1hcmsg
cGhhc2UgaG93IG11Y2ggb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGlzIGFjdGl2ZSBkdXJpbmcgY2Fs
bC4KKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJl
c3NPZkFjdGl2ZUxlbmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgIG1faml0LnN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBzY3JhdGNoLmdwcigpKTsKKyAgICB9CisK
KyAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAgICBjYWxsT3BlcmF0
aW9uKAorICAgICAgICBvcGVyYXRpb25OZXdBcnJheSwgcmVzdWx0LmdwcigpLCBtX2ppdC5ncmFw
aCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSksCisgICAgICAg
IHN0YXRpY19jYXN0PHZvaWQqPihidWZmZXIpLCBzaXplX3Qobm9kZS0+bnVtQ2hpbGRyZW4oKSkp
OworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBpZiAoc2NyYXRjaFNpemUpIHsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwg
c2NyYXRjaC5ncHIoKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIHNjcmF0Y2guZ3ByKCkpOworICAgIH0KKworICAgIGNlbGxSZXN1bHQocmVzdWx0Lmdw
cigpLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworfQorCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTmV3QXJyYXlXaXRoU3ByZWFkKE5vZGUqIG5vZGUpCiB7CiAgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkKTsKQEAgLTg0NDMsNiArODY5
NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3RydWN0dXJlQ2hlY2soTm9kZSogbm9k
ZSwgR1BSUmVnIGNlbGxHUFIsIEdQUlJlZyB0ZW1wRwogICAgIH0KIH0KIAordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNoZWNrQ2VsbChOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkQ2VsbCwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbC5ncHIoKSksIG5vZGUt
PmNoaWxkMSgpLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgY2Vs
bC5ncHIoKSwgbm9kZS0+Y2VsbE9wZXJhbmQoKS0+Y2VsbCgpKSk7CisgICAgbm9SZXN1bHQobm9k
ZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDaGVja1N0cnVjdHVyZShOb2Rl
KiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CkBAIC0x
MDQzOCw3ICsxMDY5NywyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVzb2x2ZVNj
b3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChOb2RlKiBub2RlKQogICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KLSAg
ICAKKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdsb2JhbFZhcmlhYmxlKE5vZGUq
IG5vZGUpCit7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgIG1faml0LmxvYWRWYWx1
ZShub2RlLT52YXJpYWJsZVBvaW50ZXIoKSwgcmVzdWx0UmVncyk7CisgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEdsb2JhbFZhcmlhYmxlKE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVl
LmpzVmFsdWVSZWdzKCk7CisgICAgbV9qaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIG5vZGUtPnZh
cmlhYmxlUG9pbnRlcigpKTsKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldER5bmFtaWNWYXIoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xMDQ2NSw2ICsx
MDc0MCwzMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0RHluYW1pY1ZhcihOb2Rl
KiBub2RlKQogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0Q2xvc3VyZVZhcihOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKworICAgIG1faml0LmxvYWRW
YWx1ZShKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZShub2RlLT5zY29wZU9mZnNldCgpKSksIHJlc3VsdFJlZ3MpOworICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRDbG9zdXJlVmFyKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7
CisKKyAgICBtX2ppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGUobm9kZS0+c2Nv
cGVPZmZzZXQoKSkpKTsKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEFjY2Vzc29yQnlWYWwoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTExMjk0LDYgKzEx
NTkzLDM4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkV2l0aFRoaXMoTm9k
ZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5T2Zmc2V0KE5vZGUqIG5vZGUpCit7CisgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIFJldXNlLCBzdG9yYWdlKTsKKworICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3Rv
cmFnZS5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsK
KworICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG5vZGUtPnN0b3Jh
Z2VBY2Nlc3NEYXRhKCk7CisKKyAgICBtX2ppdC5sb2FkVmFsdWUoSklUQ29tcGlsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc3RvcmFnZUFjY2Vzc0RhdGEub2Zm
c2V0KSksIHJlc3VsdFJlZ3MpOworCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2Rl
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5T2Zmc2V0KE5vZGUqIG5v
ZGUpCit7CisgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworCisgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgIEpTVmFsdWVSZWdzIHZhbHVl
UmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisKKyAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+
Y2hpbGQyKCkpOworCisgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0g
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKKworICAgIG1faml0LnN0b3JlVmFsdWUodmFsdWVS
ZWdzLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKSk7CisKKyAgICBub1Jlc3VsdChub2RlKTsKK30K
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KE5vZGUq
IG5vZGUpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CkBAIC0xMTM4Miw2ICsxMTcxMywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
RW51bWVyYXRvclBuYW1lKE5vZGUqIG5vZGUpCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEV4ZWN1dGFibGUo
Tm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgZnVu
Y3Rpb24pOworICAgIEdQUlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOworICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUobm9k
ZS0+Y2hpbGQxKCksIGZ1bmN0aW9uR1BSLCBTcGVjRnVuY3Rpb24sIEpTRnVuY3Rpb25UeXBlKTsK
KyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGZ1bmN0aW9uR1BSLCBKU0Z1
bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIHJlc3VsdEdQUik7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICBtX2ppdC54b3JQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoSlNGdW5j
dGlvblBvaXNvbjo6a2V5KCkpLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgY2VsbFJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2V0
dGVyKE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKQEAgLTExNDU4LDYgKzExODAzLDYzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTdHJDYXQoTm9kZSogbm9kZSkKICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheUJ1ZmZl
cihOb2RlKiBub2RlKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIEpT
Rml4ZWRBcnJheSogYXJyYXkgPSBub2RlLT5jYXN0T3BlcmFuZDxKU0ZpeGVkQXJyYXkqPigpOwor
ICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gYXJyYXktPmxlbmd0aCgpOworICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGUgPSBub2RlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBpZiAoIWdsb2Jh
bE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhp
bmdUeXBlKSkgeworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGhIaW50ID0gbm9kZS0+dmVj
dG9yTGVuZ3RoSGludCgpOworICAgICAgICBBU1NFUlQodmVjdG9yTGVuZ3RoSGludCA+PSBudW1F
bGVtZW50cyk7CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigp
OworCisgICAgICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIG1faml0LmdyYXBo
KCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKSksIHN0b3JhZ2VHUFIsIG51bUVs
ZW1lbnRzLCB2ZWN0b3JMZW5ndGhIaW50KTsKKworICAgICAgICBERkdfQVNTRVJUKG1faml0Lmdy
YXBoKCksIG5vZGUsIGluZGV4aW5nVHlwZSAmIElzQXJyYXksIGluZGV4aW5nVHlwZSk7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtRWxlbWVudHM7ICsraW5k
ZXgpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gQXJyYXlXaXRoRG91YmxlKQorICAgICAgICAg
ICAgICAgIHZhbHVlID0gYml0d2lzZV9jYXN0PGludDY0X3Q+KGFycmF5LT5nZXQoaW5kZXgpLmFz
TnVtYmVyKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0gSlNW
YWx1ZTo6ZW5jb2RlKGFycmF5LT5nZXQoaW5kZXgpKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKGRvdWJsZSkgPT0gc2l6ZW9mKEpTVmFsdWUpLCAiIik7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZTY0KEltbTY0KHZhbHVlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXgpKTsKKyNlbHNlCisgICAgICAgICAgICB1bmlv
biB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBoYWx2ZXNbMl07CisgICAgICAgICAgICAgICAg
ZG91YmxlIGRvdWJsZVZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgZW5jb2RlZFZhbHVl
OworICAgICAgICAgICAgfSB1OworICAgICAgICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgp
ID09IEFycmF5V2l0aERvdWJsZSkKKyAgICAgICAgICAgICAgICB1LmRvdWJsZVZhbHVlID0gYXJy
YXktPmdldChpbmRleCkuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB1LmVuY29kZWRWYWx1ZSA9IEpTVmFsdWU6OmVuY29kZShhcnJheS0+Z2V0KGluZGV4KSk7
CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihkb3VibGUpID09IHNpemVvZihKU1Zh
bHVlKSwgIiIpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihJbW0zMih1LmhhbHZlc1swXSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIGlu
ZGV4KSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEltbTMyKHUuaGFsdmVzWzFdKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXgg
KyBzaXplb2YoaW50MzJfdCkpKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworCisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciwgcmVzdWx0LmdwcigpLCBt
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSks
IFRydXN0ZWRJbW1QdHIobm9kZS0+Y2VsbE9wZXJhbmQoKSksIHNpemVfdChudW1FbGVtZW50cykp
OworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBjZWxsUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdBcnJheVdp
dGhTaXplKE5vZGUqIG5vZGUpCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBA
IC0xMTUyMCw2ICsxMTkyMiwzNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlw
ZWRBcnJheShOb2RlKiBub2RlKQogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVRvVGhpcyhOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1wKHRoaXMpOwor
CisgICAgSlNWYWx1ZVJlZ3MgdGhpc1ZhbHVlUmVncyA9IHRoaXNWYWx1ZS5qc1ZhbHVlUmVncygp
OworICAgIEpTVmFsdWVSZWdzIHRlbXBSZWdzID0gdGVtcC5yZWdzKCk7CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoSWZOb3RDZWxsKHRoaXNWYWx1ZVJlZ3MpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKAor
ICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGhpc1ZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzVG9UaGlzKSkpOworICAg
IG1faml0Lm1vdmVWYWx1ZVJlZ3ModGhpc1ZhbHVlUmVncywgdGVtcFJlZ3MpOworCisgICAgSl9K
SVRPcGVyYXRpb25fRUogZnVuY3Rpb247CisgICAgaWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJs
ZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgZnVu
Y3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNTdHJpY3Q7CisgICAgZWxzZQorICAgICAgICBmdW5jdGlv
biA9IG9wZXJhdGlvblRvVGhpczsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENh
bGwoc2xvd0Nhc2VzLCB0aGlzLCBmdW5jdGlvbiwgdGVtcFJlZ3MsIHRoaXNWYWx1ZVJlZ3MpKTsK
KworICAgIGpzVmFsdWVSZXN1bHQodGVtcFJlZ3MsIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ3JlYXRlVGhpcyhOb2RlKiBub2RlKQogewogICAgIC8vIE5vdGUgdGhh
dCB0aGVyZSBpcyBub3Qgc28gbXVjaCBwcm9maXQgdG8gc3BlY3VsYXRlIGhlcmUuIFRoZSBvbmx5
IHRoaW5ncyB3ZQpAQCAtMTE5NjUsNiArMTIzOTUsNDMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldFByb3RvdHlwZU9mKE5vZGUqIG5vZGUpCiAgICAgfQogfQogCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlSWRlbnRpdHkoTm9kZSogbm9kZSkKK3sKKyAgICBzcGVjdWxhdGUo
bm9kZSwgbm9kZS0+Y2hpbGQxKCkpOworICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBjYXNlIERvdWJsZVJlcEFueUludFVzZToK
KyNlbmRpZgorICAgIGNhc2UgRG91YmxlUmVwVXNlOgorICAgIGNhc2UgRG91YmxlUmVwUmVhbFVz
ZTogeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgb3ApOworICAgICAgICBt
X2ppdC5tb3ZlRG91YmxlKG9wLmZwcigpLCBzY3JhdGNoLmZwcigpKTsKKyAgICAgICAgZG91Ymxl
UmVzdWx0KHNjcmF0Y2guZnByKCksIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBjYXNlIEludDUyUmVwVXNlOiB7CisgICAgICAgIFNwZWN1bGF0
ZUludDUyT3BlcmFuZCBvcCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wKTsKKyAgICAgICAgbV9qaXQubW92ZShvcC5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgaW50NTJSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisgICAgZGVmYXVsdDogeworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcCh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJl
dXNlLCBvcCk7CisgICAgICAgIEpTVmFsdWVSZWdzIG9wUmVncyA9IG9wLmpzVmFsdWVSZWdzKCk7
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgICAg
ICBtX2ppdC5tb3ZlVmFsdWVSZWdzKG9wUmVncywgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9
Cit9CisKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCAzZDY1MDM5MDY3Njdh
OThhMjNkYjQxNDFkOGMwNjZmM2EzNGM0ZTEyLi40MjY2NjJiMWFkODRhMzNiMTQzZTgxMzA1Mzll
NGI0YzEwNTBmNWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCkBAIC0xMjgxLDYgKzEyODEsNyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAg
ICAgdm9pZCBjb21waWxlTG9hZFZhbHVlRnJvbU1hcEJ1Y2tldChOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlRXh0cmFjdFZhbHVlRnJvbVdlYWtNYXBHZXQoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUdldFByb3RvdHlwZU9mKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVJZGVudGl0eShOb2RlKik7
CiAgICAgCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNl
T3BlcmFuZFR5cGUsIHR5cGVuYW1lIFByb3BlcnR5T3BlcmFuZFR5cGUsIHR5cGVuYW1lIFZhbHVl
T3BlcmFuZFR5cGUsIHR5cGVuYW1lIFRhZ1R5cGU+CkBAIC0xMzUyLDYgKzEzNTMsNyBAQCBjbGFz
cyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9pZCBjb21waWxlQXJpdGhSYW5kb20oTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUFyaXRoVW5hcnkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRo
U3FydChOb2RlKik7CisgICAgdm9pZCBjb21waWxlQXJpdGhNaW5NYXgoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwogICAgIEpJVENvbXBpbGVyOjpKdW1w
IGp1bXBGb3JUeXBlZEFycmF5T3V0T2ZCb3VuZHMoTm9kZSosIEdQUlJlZyBiYXNlR1BSLCBHUFJS
ZWcgaW5kZXhHUFIpOwpAQCAtMTM2Niw2ICsxMzY4LDkgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQg
ewogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRnZSYgY2hp
bGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlW
YWxGb3JDZWxsV2l0aFN5bWJvbChOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVk
Z2UmIGNoaWxkMyk7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7Cisg
ICAgdm9pZCBjb21waWxlR2V0QnlPZmZzZXQoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVB1dEJ5
T2Zmc2V0KE5vZGUqKTsKICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFsc2UgaXQgbWVhbnMgdGhh
dCB3ZSB0ZXJtaW5hdGVkIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbi4KICAgICBib29sIGdldEludFR5
cGVkQXJyYXlTdG9yZU9wZXJhbmQoCiAgICAgICAgIEdQUlRlbXBvcmFyeSYgdmFsdWUsCkBAIC0x
MzkxLDYgKzEzOTYsNyBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9pZCBjb21waWxl
Q3JlYXRlQ2xvbmVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVSZXN0
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTcHJlYWQoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZU5ld0FycmF5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdBcnJheVdpdGhTcHJlYWQoTm9k
ZSopOwogICAgIHZvaWQgY29tcGlsZUdldFJlc3RMZW5ndGgoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUFycmF5U2xpY2UoTm9kZSopOwpAQCAtMTQwNiw2ICsxNDEyLDcgQEAgY2xhc3MgU3BlY3Vs
YXRpdmVKSVQgewogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUeXBlT2YoTm9k
ZSopOworICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
Q2hlY2tTdHJ1Y3R1cmUoTm9kZSopOwogICAgIHZvaWQgZW1pdFN0cnVjdHVyZUNoZWNrKE5vZGUq
LCBHUFJSZWcgY2VsbEdQUiwgR1BSUmVnIHRlbXBHUFIpOwogICAgIHZvaWQgY29tcGlsZVB1dEFj
Y2Vzc29yQnlJZChOb2RlKik7CkBAIC0xNDE5LDggKzE0MjYsMTIgQEAgY2xhc3MgU3BlY3VsYXRp
dmVKSVQgewogICAgIHZvaWQgY29tcGlsZVRvT2JqZWN0T3JDYWxsT2JqZWN0Q29uc3RydWN0b3Io
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZVJlc29sdmVTY29wZShOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChOb2RlKik7CisgICAg
dm9pZCBjb21waWxlR2V0R2xvYmFsVmFyaWFibGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVB1
dEdsb2JhbFZhcmlhYmxlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXREeW5hbWljVmFyKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXREeW5hbWljVmFyKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVHZXRDbG9zdXJlVmFyKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRDbG9zdXJlVmFy
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlRXFQdHIoTm9kZSopOwogICAgIHZvaWQg
Y29tcGlsZURlZmluZURhdGFQcm9wZXJ0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlRGVmaW5l
QWNjZXNzb3JQcm9wZXJ0eShOb2RlKik7CkBAIC0xNDM1LDE0ICsxNDQ2LDE3IEBAIGNsYXNzIFNw
ZWN1bGF0aXZlSklUIHsKICAgICB2b2lkIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdl
dEV4ZWN1dGFibGUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEdldHRlcihOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlR2V0U2V0dGVyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRDYWxs
ZWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyQ2F0KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVO
ZXdBcnJheUJ1ZmZlcihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3QXJyYXlXaXRoU2l6ZShO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3VHlwZWRBcnJheShOb2RlKik7CisgICAgdm9pZCBj
b21waWxlVG9UaGlzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVUaGlzKE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVOZXdPYmplY3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRvUHJp
bWl0aXZlKE5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IGQ4MWE1ZWY5YjQzNTQ5ZWY0ZTY1MzgzMjdiNDM3
YjY3Mzk4NzZiODEuLmU2Yzg1ZTQ1NDliNzRjM2JhZTEzMTIzNmIzODUyODg2NTNiNzY2Y2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcApAQCAtMjA5NiwzNCArMjA5Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElkZW50aXR5OiB7Ci0g
ICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHN3aXRjaCAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgot
ICAgICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgZG91Ymxl
UmVzdWx0KG9wLmZwcigpLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IAotICAgICAgICBjYXNlIEFueUludFVzZToKLSAgICAg
ICAgY2FzZSBEb3VibGVSZXBBbnlJbnRVc2U6IHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7ICAgCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcCh0aGlzLCBub2RlLT5j
aGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIG9wLCBUYWdXb3JkKTsKLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIFJldXNlLCBvcCwgUGF5bG9hZFdvcmQpOwot
ICAgICAgICAgICAgR1BSUmVnIHNvdXJjZVRhZyA9IG9wLnRhZ0dQUigpOwotICAgICAgICAgICAg
R1BSUmVnIHNvdXJjZVBheWxvYWQgPSBvcC5wYXlsb2FkR1BSKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShzb3VyY2VUYWcsIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHNv
dXJjZVBheWxvYWQsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgY29tcGlsZUlkZW50
aXR5KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTIzNzUsNzIgKzIzNDgsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEFy
aXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6IHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5iaW5h
cnlVc2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMlVzZTogewotICAgICAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7
Ci0KLSAgICAgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgICAgICBH
UFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVz
cyA9IG1faml0LmJyYW5jaDMyKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuIDogTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBvcDFHUFIsIG9wMkdQUik7Ci0gICAg
ICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGlmIChv
cDFHUFIgIT0gcmVzdWx0R1BSKSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmsoJm1f
aml0KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BSKTsKLSAg
ICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAgICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAg
ICAgICAgIEZQUlJlZyBvcDFGUFIgPSBvcDEuZnByKCk7Ci0gICAgICAgICAgICBGUFJSZWcgb3Ay
RlBSID0gb3AyLmZwcigpOwotICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5m
cHIoKTsKLQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAg
ICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3AxTGVzcyA9IG1faml0LmJy
YW5jaERvdWJsZShvcCA9PSBBcml0aE1pbiA/IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhh
biA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbiwgb3AxRlBSLCBvcDJGUFIpOwot
ICAgICAgICAKLSAgICAgICAgICAgIC8vIG9wMiBpcyBlYXRoZXIgdGhlIGxlc3NlciBvbmUgb3Ig
b25lIG9mIHRoZW4gaXMgTmFOCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDJM
ZXNzID0gbV9qaXQuYnJhbmNoRG91YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA6IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhh
bk9yRXF1YWwsIG9wMUZQUiwgb3AyRlBSKTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBVbm9y
ZGVyZWQgY2FzZS4gV2UgZG9uJ3Qga25vdyB3aGljaCBvZiBvcDEsIG9wMiBpcyBOYU4uIE1hbnVm
YWN0dXJlIE5hTiBieSBhZGRpbmcgCi0gICAgICAgICAgICAvLyBvcDEgKyBvcDIgYW5kIHB1dHRp
bmcgaXQgaW50byByZXN1bHQuCi0gICAgICAgICAgICBtX2ppdC5hZGREb3VibGUob3AxRlBSLCBv
cDJGUFIsIHJlc3VsdEZQUik7Ci0gICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkp
OwotICAgICAgICAKLSAgICAgICAgICAgIG9wMkxlc3MubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZURvdWJsZShvcDJGUFIsIHJlc3VsdEZQUik7Ci0gICAgICAgIAotICAgICAg
ICAgICAgaWYgKG9wMUZQUiAhPSByZXN1bHRGUFIpIHsKLSAgICAgICAgICAgICAgICBkb25lLmFw
cGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb3AxTGVz
cy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDFGUFIs
IHJlc3VsdEZQUik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBvcDFMZXNz
LmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
LSAgICAgICAgCi0gICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0RlBSLCBub2RlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBjb21waWxlQXJpdGhNaW5NYXgobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjg0MywyMCArMjc1MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFs
V2l0aFRoaXM6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1ZhbHVlUmVncygp
OwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwotICAgICAgICBKU1ZhbHVlUmVncyB0aGlzVmFsdWVSZWdzID0gdGhpc1ZhbHVlLmpzVmFsdWVS
ZWdzKCk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHN1YnNjcmlwdCh0aGlzLCBub2RlLT5jaGls
ZDMoKSk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIHN1YnNjcmlwdFJlZ3MgPSBzdWJzY3JpcHQuanNW
YWx1ZVJlZ3MoKTsKLQotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBKU1ZhbHVl
UmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uR2V0QnlWYWxXaXRoVGhpcywgcmVzdWx0UmVncywgYmFzZVJlZ3MsIHRoaXNWYWx1ZVJlZ3Ms
IHN1YnNjcmlwdFJlZ3MpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGNvbXBpbGVHZXRC
eVZhbFdpdGhUaGlzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM1MTEsMTcy
ICszNDA2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKLSAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRp
bWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAg
ICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLnJl
Z2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBub2RlLT5pbmRleGluZ1R5cGUoKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoCi0gICAgICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxl
bWVudHMgPSBub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2UodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3By
KCk7Ci0KLSAgICAgICAgICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIHN0cnVj
dHVyZSwgc3RvcmFnZUdQUiwgbnVtRWxlbWVudHMsIG51bUVsZW1lbnRzKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgb25lIHdheSBvciBhbm90aGVyLCByZXN1
bHRHUFIgYW5kIHN0b3JhZ2VHUFIgaGF2ZSBwb2ludGVycyB0bwotICAgICAgICAgICAgLy8gdGhl
IEpTQXJyYXkgYW5kIHRoZSBCdXR0ZXJmbHksIHJlc3BlY3RpdmVseS4KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgQVNTRVJUKCFoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkgfHwgIW5vZGUtPm51bUNoaWxkcmVuKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIG9wZXJhbmRJZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsgKytvcGVyYW5kSWR4KSB7Ci0gICAgICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5n
cmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07
Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAgICAg
ICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAg
IGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICAgICAg
Q1JBU0goKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2UpOwotICAgICAgICAgICAgICAgICAg
ICBGUFJSZWcgb3BGUFIgPSBvcGVyYW5kLmZwcigpOwotICAgICAgICAgICAgICAgICAgICBERkdf
VFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKCksIHVzZSwg
U3BlY0RvdWJsZVJlYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hEb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIG9wRlBSLCBvcEZQ
UikpOwotICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUob3BG
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihkb3VibGUpICog
b3BlcmFuZElkeCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAg
ICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNl
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvcGVyYW5kSWR4ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihvcGVyYW5kLmdwcigp
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBv
cGVyYW5kSWR4ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3Zh
ckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdKTsKLSAgICAgICAg
ICAgICAgICAgICAgR1BSUmVnIG9wVGFnR1BSID0gb3BlcmFuZC50YWdHUFIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgR1BSUmVnIG9wUGF5bG9hZEdQUiA9IG9wZXJhbmQucGF5bG9hZEdQUigpOwot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKG9wVGFnR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVyYW5kSWR4ICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmUzMihvcFBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIG9wZXJhbmRJZHggKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gWXVj
aywgd2Ugc2hvdWxkICpyZWFsbHkqIGhhdmUgYSB3YXkgb2YgYWxzbyByZXR1cm5pbmcgdGhlIHN0
b3JhZ2VHUFIuIEJ1dAotICAgICAgICAgICAgLy8gdGhhdCdzIHRoZSBsZWFzdCBvZiB3aGF0J3Mg
d3Jvbmcgd2l0aCB0aGlzIGNvZGUuIFdlIHJlYWxseSBzaG91bGRuJ3QgYmUKLSAgICAgICAgICAg
IC8vIGFsbG9jYXRpbmcgdGhlIGFycmF5IGFmdGVyIGhhdmluZyBjb21wdXRlZCAtIGFuZCBwcm9i
YWJseSBzcGlsbGVkIHRvIHRoZQotICAgICAgICAgICAgLy8gc3RhY2sgLSBhbGwgb2YgdGhlIHRo
aW5ncyB0aGF0IHdpbGwgZ28gaW50byB0aGUgYXJyYXkuIFRoZSBzb2x1dGlvbiB0byB0aGF0Ci0g
ICAgICAgICAgICAvLyBiaWdnZXIgcHJvYmxlbSB3aWxsIGFsc28gbGlrZWx5IGZpeCB0aGUgcmVk
dW5kYW5jeSBpbiByZWxvYWRpbmcgdGhlIHN0b3JhZ2UKLSAgICAgICAgICAgIC8vIHBvaW50ZXIg
dGhhdCB3ZSBjdXJyZW50bHkgaGF2ZS4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmICghbm9kZS0+bnVtQ2hpbGRyZW4oKSkgewotICAgICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgb3Bl
cmF0aW9uTmV3RW1wdHlBcnJheSwgcmVzdWx0LmdwcigpLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVy
U3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJp
bmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkpOwotICAgICAgICAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBz
aXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogbm9kZS0+bnVtQ2hp
bGRyZW4oKTsKLSAgICAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZt
KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKLSAgICAgICAgRW5jb2RlZEpT
VmFsdWUqIGJ1ZmZlciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwotICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUtPm51bUNoaWxk
cmVuKCk7ICsrb3BlcmFuZElkeCkgewotICAgICAgICAgICAgLy8gTmVlZCB0byBwZXJmb3JtIHRo
ZSBzcGVjdWxhdGlvbnMgdGhhdCB0aGlzIG5vZGUgcHJvbWlzZXMgdG8gcGVyZm9ybS4gSWYgd2Un
cmUKLSAgICAgICAgICAgIC8vIGVtaXR0aW5nIGNvZGUgaGVyZSBhbmQgdGhlIGluZGV4aW5nIHR5
cGUgaXMgbm90IGFycmF5IHN0b3JhZ2UgdGhlbiB0aGVyZSBpcwotICAgICAgICAgICAgLy8gcHJv
YmFibHkgc29tZXRoaW5nIGhpbGFyaW91cyBnb2luZyBvbiBhbmQgd2UncmUgYWxyZWFkeSBmYWls
aW5nIGF0IGFsbCB0aGUKLSAgICAgICAgICAgIC8vIHRoaW5ncywgYnV0IGF0IGxlYXN0IHdlJ3Jl
IGdvaW5nIHRvIGJlIHNvdW5kLgotICAgICAgICAgICAgRWRnZSB1c2UgPSBtX2ppdC5ncmFwaCgp
Lm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgb3BlcmFuZElkeF07Ci0gICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURF
RF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7
Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVz
ZSk7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIG9wRlBSID0gb3BlcmFuZC5mcHIoKTsKLSAgICAg
ICAgICAgICAgICBERkdfVFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MoKSwgdXNlLCBTcGVjRnVsbFJlYWxOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwg
b3BGUFIsIG9wRlBSKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmVEb3VibGUob3BGUFIsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
YnVmZmVyICsgb3BlcmFuZElkeCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAg
ICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wZXJhbmQodGhpcywgdXNlKTsKLSAg
ICAgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyICsgb3BlcmFuZElkeCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIob3BHUFIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciArIG9wZXJh
bmRJZHgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W25vZGUtPmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdKTsKLSAgICAgICAgICAgICAgICBHUFJS
ZWcgb3BUYWdHUFIgPSBvcGVyYW5kLnRhZ0dQUigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBv
cFBheWxvYWRHUFIgPSBvcGVyYW5kLnBheWxvYWRHUFIoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKG9wVGFnR1BSLCByZWludGVycHJldF9jYXN0PGNo
YXIqPihidWZmZXIgKyBvcGVyYW5kSWR4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihv
cFBheWxvYWRHUFIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciArIG9wZXJhbmRJZHgp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSk7Ci0gICAgICAgICAgICAgICAgb3BlcmFuZC51c2UoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
Q1JBU0goKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkgewotICAg
ICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNhc2UgQUxMX0lO
VDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIGlm
IChzY3JhdGNoU2l6ZSkgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
Ci0KLSAgICAgICAgICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBvZiB0aGUgc2Ny
YXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgotICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwg
c2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRy
KHNjcmF0Y2hTaXplKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBHUFJG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBjYWxsT3Bl
cmF0aW9uKAotICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdC5ncHIoKSwgbV9q
aXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpLAot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCo+KGJ1ZmZlciksIHNpemVfdChub2RlLT5udW1D
aGlsZHJlbigpKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0KLSAgICAgICAg
aWYgKHNjcmF0Y2hTaXplKSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXIt
PmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzY3JhdGNoLmdwcigpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBjb21waWxlTmV3QXJyYXkobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzY5Niw0NSArMzQyNiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
TmV3QXJyYXlCdWZmZXI6IHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0g
ICAgICAgIEpTRml4ZWRBcnJheSogYXJyYXkgPSBub2RlLT5jYXN0T3BlcmFuZDxKU0ZpeGVkQXJy
YXkqPigpOwotICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IGFycmF5LT5sZW5ndGgoKTsK
LSAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5vZGUtPmluZGV4aW5nVHlwZSgp
OwotICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNB
bnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
b3JhZ2UodGhpcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2Uu
Z3ByKCk7Ci0KLSAgICAgICAgICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIG1f
aml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKSksIHN0b3JhZ2VH
UFIsIG51bUVsZW1lbnRzLCBudW1FbGVtZW50cyk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bUVsZW1lbnRzOyArK2luZGV4KSB7Ci0gICAgICAgICAg
ICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGhhbHZlc1syXTsKLSAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgICAgICAgICAgICAgICAg
ICBpbnQ2NF90IGVuY29kZWRWYWx1ZTsKLSAgICAgICAgICAgICAgICB9IHU7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkKLSAgICAg
ICAgICAgICAgICAgICAgdS5kb3VibGVWYWx1ZSA9IGFycmF5LT5nZXQoaW5kZXgpLmFzTnVtYmVy
KCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB1LmVuY29kZWRW
YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShhcnJheS0+Z2V0KGluZGV4KSk7Ci0gICAgICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoZG91YmxlKSA9PSBzaXplb2YoSlNWYWx1ZSksICIiKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEltbTMyKHUuaGFsdmVzWzBdKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXgpKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEltbTMyKHUuaGFsdmVzWzFdKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogaW5kZXggKyBz
aXplb2YoaW50MzJfdCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3Vs
dCByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk5ld0FycmF5QnVmZmVyLCByZXN1bHQuZ3ByKCksIG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSwgVHJ1c3RlZEltbVB0cihub2RlLT5jZWxs
T3BlcmFuZCgpKSwgc2l6ZV90KG51bUVsZW1lbnRzKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7Ci0gICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSk7CisgICAgICAgIGNvbXBpbGVOZXdBcnJheUJ1ZmZlcihub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKQEAgLTM3NTUsMzUgKzM0NDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFRvVGhp
czogewotICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRV
c2UpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXBUYWcodGhpcyk7Ci0gICAgICAgIEdQUlJlZyB0aGlzVmFsdWVQYXlsb2FkR1BSID0g
dGhpc1ZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZVRhZ0dQUiA9
IHRoaXNWYWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OwotICAgICAgICBHUFJSZWcgdGVtcFRhZ0dQUiA9IHRlbXBUYWcuZ3ByKCk7Ci0gICAgICAgIAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbCh0aGlzVmFsdWUuanNWYWx1ZVJlZ3Mo
KSkpOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDgoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh0aGlzVmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihPdmVycmlkZXNU
b1RoaXMpKSk7Ci0gICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlUGF5bG9hZEdQUiwgdGVtcEdQ
Uik7Ci0gICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlVGFnR1BSLCB0ZW1wVGFnR1BSKTsKLSAg
ICAgICAgSl9KSVRPcGVyYXRpb25fRUogZnVuY3Rpb247Ci0gICAgICAgIGlmIChtX2ppdC5ncmFw
aCgpLmV4ZWN1dGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNTdHJpY3RNb2RlKCkp
Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpc1N0cmljdDsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXM7Ci0gICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3ModGVtcFRhZ0dQUiwgdGVtcEdQUiksIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZVRhZ0dQUiwg
dGhpc1ZhbHVlUGF5bG9hZEdQUikpKTsKLQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHRlbXBUYWdH
UFIsIHRlbXBHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlVG9UaGlzKG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTM4MjgsMjkgKzM0OTIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAg
Y2FzZSBHZXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRo
aXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BS
ID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJl
c3VsdFBheWxvYWQuZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShub2Rl
LT5zY29wZU9mZnNldCgpKSArIFRhZ09mZnNldCksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShub2RlLT5zY29wZU9mZnNldCgpKSArIFBheWxvYWRPZmZz
ZXQpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdH
UFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlR2V0Q2xvc3VyZVZh
cihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAogICAgIGNhc2UgUHV0Q2xvc3Vy
ZVZhcjogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOwotCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgR1BS
UmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVBh
eWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0KLSAgICAgICAgbV9qaXQuc3RvcmUzMih2
YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGUobm9kZS0+c2NvcGVPZmZzZXQoKSkgKyBUYWdPZmZzZXQp
KTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKG5v
ZGUtPnNjb3BlT2Zmc2V0KCkpICsgUGF5bG9hZE9mZnNldCkpOwotICAgICAgICBub1Jlc3VsdChu
b2RlKTsKKyAgICAgICAgY29tcGlsZVB1dENsb3N1cmVWYXIobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtNDAxOCw5ICszNjY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDaGVja0NlbGw6IHsK
LSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2VsbCwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoY2VsbC5ncHIoKSksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgY2VsbC5ncHIoKSwgbm9kZS0+Y2VsbE9wZXJhbmQoKS0+Y2Vs
bCgpKSk7Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlQ2hlY2tDZWxs
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQwMzcsMTMgKzM2ODIsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBHZXRFeGVjdXRhYmxlOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGZ1bmN0aW9uKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBSZXVzZSwgZnVuY3Rpb24pOwotICAgICAgICBHUFJSZWcgZnVuY3Rpb25HUFIg
PSBmdW5jdGlvbi5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKLSAgICAgICAgc3BlY3VsYXRlQ2VsbFR5cGUobm9kZS0+Y2hpbGQxKCksIGZ1bmN0aW9uR1BS
LCBTcGVjRnVuY3Rpb24sIEpTRnVuY3Rpb25UeXBlKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhmdW5jdGlvbkdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVj
dXRhYmxlKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CisgICAgICAgIGNvbXBpbGVHZXRFeGVjdXRhYmxlKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIApAQCAtNDEwNywyMCArMzc0Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIHN0b3Jh
Z2UpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAg
Ci0gICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgR1BS
UmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAKLSAgICAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGEoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc3RvcmFnZUFjY2Vz
c0RhdGEub2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBp
bGVHZXRCeU9mZnNldChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAg
LTQxNTAsMjEgKzM3NzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7Ci0gICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0KLSAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIg
PSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVl
LnBheWxvYWRHUFIoKTsKLQotICAgICAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hpbGQyKCkp
OwotCi0gICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG5vZGUt
PnN0b3JhZ2VBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cih2
YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0
cih2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIAot
ICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZVB1dEJ5T2Zmc2V0KG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQyNTEsMjggKzM4NjMsMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBHZXRHbG9iYWxM
ZXhpY2FsVmFyaWFibGU6CiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRU
YWcodGhpcyk7Ci0KLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUtPnZhcmlh
YmxlUG9pbnRlcigpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkLmdwcigpLCBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkp
OwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9h
ZC5ncHIoKSwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotCi0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKKyAgICAgICAgY29t
cGlsZUdldEdsb2JhbFZhcmlhYmxlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIFB1dEdsb2JhbFZhcmlhYmxlOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICAvLyBGSVhNRTogaWYgd2UgaGFwcGVu
IHRvIGhhdmUgYSBzcGFyZSByZWdpc3RlciAtIGFuZCBfT05MWV8gaWYgd2UgaGFwcGVuIHRvIGhh
dmUKLSAgICAgICAgLy8gYSBzcGFyZSByZWdpc3RlciAtIGEgZ29vZCBvcHRpbWl6YXRpb24gd291
bGQgYmUgdG8gcHV0IHRoZSByZWdpc3RlciBwb2ludGVyIGludG8KLSAgICAgICAgLy8gYSByZWdp
c3RlciBhbmQgdGhlbiBkbyBhIHplcm8gb2Zmc2V0IHN0b3JlIGZvbGxvd2VkIGJ5IGEgZm91ci1v
ZmZzZXQgc3RvcmUgKG9yCi0gICAgICAgIC8vIHZpY2UtdmVyc2EgZGVwZW5kaW5nIG9uIGVuZGlh
bm5lc3MpLgotICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBub2RlLT52YXJp
YWJsZVBvaW50ZXIoKS0+dGFnUG9pbnRlcigpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1
ZS5wYXlsb2FkR1BSKCksIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpLT5wYXlsb2FkUG9pbnRlcigp
KTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZVB1dEdsb2JhbFZh
cmlhYmxlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IGU5NmJmNzM5Mjcw
MTlkY2JjY2I1ZjVhNDZlYmM4N2ViYTM3NGYwZGUuLmJhNjhlZmYyN2Q3ZjA0ZTU5M2VjNTYyMmY5
NDliMzU3OWI0MzMzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjIwMiwzMiArMjIwMiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElk
ZW50aXR5OiB7Ci0gICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgRG91
YmxlUmVwVXNlOgotICAgICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6Ci0gICAgICAgIGNhc2Ug
RG91YmxlUmVwQW55SW50VXNlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMsIG9wKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AuZnByKCksIHNj
cmF0Y2guZnByKCkpOwotICAgICAgICAgICAgZG91YmxlUmVzdWx0KHNjcmF0Y2guZnByKCksIG5v
ZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnQ1MlJl
cFVzZTogewotICAgICAgICAgICAgU3BlY3VsYXRlSW50NTJPcGVyYW5kIG9wKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2Us
IG9wKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0g
ICAgICAgICAgICBpbnQ1MlJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcCk7Ci0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKG9wLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgY29tcGlsZUlkZW50aXR5
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI1MTYsNjggKzI0OTEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgIGNh
c2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDogewotICAgICAgICBzd2l0Y2ggKG5vZGUt
PmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwg
b3AxKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3Ax
TGVzcyA9IG1faml0LmJyYW5jaDMyKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuIDogTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCBvcDEuZ3ByKCksIG9wMi5ncHIo
KSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAg
ICAgICAgICAgIGlmIChvcDEuZ3ByKCkgIT0gcmVzdWx0LmdwcigpKSB7Ci0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAg
ICAgICBvcDFMZXNzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9w
MS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHQuZ3ByKCks
IG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEZQUlJlZyBv
cDFGUFIgPSBvcDEuZnByKCk7Ci0gICAgICAgICAgICBGUFJSZWcgb3AyRlBSID0gb3AyLmZwcigp
OwotICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKLSAgICAgICAg
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKLSAgICAgICAgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvcDFMZXNzID0gbV9qaXQuYnJhbmNoRG91
YmxlKG9wID09IEFyaXRoTWluID8gTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuIDogTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuLCBvcDFGUFIsIG9wMkZQUik7Ci0gICAgICAg
IAotICAgICAgICAgICAgLy8gb3AyIGlzIGVhdGhlciB0aGUgbGVzc2VyIG9uZSBvciBvbmUgb2Yg
dGhlbiBpcyBOYU4KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wMkxlc3MgPSBt
X2ppdC5icmFuY2hEb3VibGUob3AgPT0gQXJpdGhNaW4gPyBNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsIDogTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVh
bCwgb3AxRlBSLCBvcDJGUFIpOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIFVub3JkZXJlZCBj
YXNlLiBXZSBkb24ndCBrbm93IHdoaWNoIG9mIG9wMSwgb3AyIGlzIE5hTi4gTWFudWZhY3R1cmUg
TmFOIGJ5IGFkZGluZyAKLSAgICAgICAgICAgIC8vIG9wMSArIG9wMiBhbmQgcHV0dGluZyBpdCBp
bnRvIHJlc3VsdC4KLSAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShvcDFGUFIsIG9wMkZQUiwg
cmVzdWx0RlBSKTsKLSAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAg
ICAgIAotICAgICAgICAgICAgb3AyTGVzcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlRG91YmxlKG9wMkZQUiwgcmVzdWx0RlBSKTsKLSAgICAgICAgCi0gICAgICAgICAgICBp
ZiAob3AxRlBSICE9IHJlc3VsdEZQUikgewotICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBvcDFMZXNzLmxpbmso
Jm1faml0KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMUZQUiwgcmVzdWx0
RlBSKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG9wMUxlc3MubGluaygm
bV9qaXQpOwotICAgICAgICAKLSAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAg
ICAKLSAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRGUFIsIG5vZGUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGNvbXBpbGVBcml0aE1pbk1h
eChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yOTI5LDIwICsyODQzLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNh
c2UgR2V0QnlWYWxXaXRoVGhpczogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwot
ICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBzdWJzY3JpcHQodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICBH
UFJSZWcgc3Vic2NyaXB0R1BSID0gc3Vic2NyaXB0LmdwcigpOwotCi0gICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25HZXRCeVZhbFdpdGhUaGlzLCByZXN1bHRHUFIsIGJhc2VHUFIsIHRoaXNW
YWx1ZUdQUiwgc3Vic2NyaXB0R1BSKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
LQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBp
bGVHZXRCeVZhbFdpdGhUaGlzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM3
MTksMTc3ICszNjIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheTogewotICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5n
QUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG5vZGUtPmluZGV4aW5nVHlwZSgpKSkg
ewotICAgICAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVyZSBzdHJ1Y3R1cmUgPSBtX2ppdC5ncmFw
aCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAg
ICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkgPT0gbm9kZS0+aW5kZXhpbmdUeXBlKCksIHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCks
IG5vZGUtPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAg
ICAgICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAg
ICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAg
ICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAg
ICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG5vZGUtPm51bUNoaWxk
cmVuKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGhIaW50ID0gbm9kZS0+dmVj
dG9yTGVuZ3RoSGludCgpOwotICAgICAgICAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aEhpbnQgPj0g
bnVtRWxlbWVudHMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAg
ICAgIGVtaXRBbGxvY2F0ZVJhd09iamVjdChyZXN1bHRHUFIsIHN0cnVjdHVyZSwgc3RvcmFnZUdQ
UiwgbnVtRWxlbWVudHMsIHZlY3Rvckxlbmd0aEhpbnQpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50LCBvbmUgd2F5IG9yIGFub3RoZXIsIHJlc3VsdEdQUiBhbmQg
c3RvcmFnZUdQUiBoYXZlIHBvaW50ZXJzIHRvCi0gICAgICAgICAgICAvLyB0aGUgSlNBcnJheSBh
bmQgdGhlIEJ1dHRlcmZseSwgcmVzcGVjdGl2ZWx5LgotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBBU1NFUlQoIWhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB8fCAhbm9k
ZS0+bnVtQ2hpbGRyZW4oKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29w
ZXJhbmRJZHgpIHsKLSAgICAgICAgICAgICAgICBFZGdlIHVzZSA9IG1faml0LmdyYXBoKCkubV92
YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4XTsKLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgY2FzZSBBTExf
VU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9ET1VC
TEVfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcGVyYW5kKHRoaXMsIHVzZSk7Ci0gICAgICAgICAgICAgICAgICAgIEZQUlJlZyBv
cEZQUiA9IG9wZXJhbmQuZnByKCk7Ci0gICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNL
KAotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoKSwgdXNlLCBTcGVjRG91Ymxl
UmVhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
RG91YmxlKG9wRlBSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2Yo
ZG91YmxlKSAqIG9wZXJhbmRJZHgpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
IHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCB1c2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIEdQUlJlZyBv
cEdQUiA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihu
b2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERGR19UWVBF
X0NIRUNLKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wR1BSKSwg
dXNlLCBTcGVjSW50MzJPbmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaDY0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIG9wR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KG9wR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVy
YW5kSWR4KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFl1Y2ssIHdlIHNob3VsZCAqcmVhbGx5
KiBoYXZlIGEgd2F5IG9mIGFsc28gcmV0dXJuaW5nIHRoZSBzdG9yYWdlR1BSLiBCdXQKLSAgICAg
ICAgICAgIC8vIHRoYXQncyB0aGUgbGVhc3Qgb2Ygd2hhdCdzIHdyb25nIHdpdGggdGhpcyBjb2Rl
LiBXZSByZWFsbHkgc2hvdWxkbid0IGJlCi0gICAgICAgICAgICAvLyBhbGxvY2F0aW5nIHRoZSBh
cnJheSBhZnRlciBoYXZpbmcgY29tcHV0ZWQgLSBhbmQgcHJvYmFibHkgc3BpbGxlZCB0byB0aGUK
LSAgICAgICAgICAgIC8vIHN0YWNrIC0gYWxsIG9mIHRoZSB0aGluZ3MgdGhhdCB3aWxsIGdvIGlu
dG8gdGhlIGFycmF5LiBUaGUgc29sdXRpb24gdG8gdGhhdAotICAgICAgICAgICAgLy8gYmlnZ2Vy
IHByb2JsZW0gd2lsbCBhbHNvIGxpa2VseSBmaXggdGhlIHJlZHVuZGFuY3kgaW4gcmVsb2FkaW5n
IHRoZSBzdG9yYWdlCi0gICAgICAgICAgICAvLyBwb2ludGVyIHRoYXQgd2UgY3VycmVudGx5IGhh
dmUuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW5vZGUtPm51bUNoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0VtcHR5QXJyYXksIHJlc3VsdC5ncHIoKSwgbV9q
aXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpKTsK
LSAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICBjZWxsUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSAqIG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0
Y2hCdWZmZXIgPSBtX2ppdC52bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7
Ci0gICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzY3JhdGNoQnVmZmVyID8gc3RhdGlj
X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsK
LSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJ
ZHggPCBub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKLSAgICAgICAgICAgIC8v
IE5lZWQgdG8gcGVyZm9ybSB0aGUgc3BlY3VsYXRpb25zIHRoYXQgdGhpcyBub2RlIHByb21pc2Vz
IHRvIHBlcmZvcm0uIElmIHdlJ3JlCi0gICAgICAgICAgICAvLyBlbWl0dGluZyBjb2RlIGhlcmUg
YW5kIHRoZSBpbmRleGluZyB0eXBlIGlzIG5vdCBhcnJheSBzdG9yYWdlIHRoZW4gdGhlcmUgaXMK
LSAgICAgICAgICAgIC8vIHByb2JhYmx5IHNvbWV0aGluZyBoaWxhcmlvdXMgZ29pbmcgb24gYW5k
IHdlJ3JlIGFscmVhZHkgZmFpbGluZyBhdCBhbGwgdGhlCi0gICAgICAgICAgICAvLyB0aGluZ3Ms
IGJ1dCBhdCBsZWFzdCB3ZSdyZSBnb2luZyB0byBiZSBzb3VuZC4KLSAgICAgICAgICAgIEVkZ2Ug
dXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSAr
IG9wZXJhbmRJZHhdOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUoKSkg
ewotICAgICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgQ1JB
U0goKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJM
RV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3BlcmFuZCh0aGlzLCB1c2UpOwotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOwotICAgICAgICAgICAgICAgIEZQUlJlZyBvcEZQUiA9IG9wZXJhbmQuZnByKCk7
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAg
ICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncygpLCB1c2UsIFNwZWNEb3VibGVSZWFsLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hEb3VibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgb3BGUFIsIG9wRlBSKSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQuYm94RG91YmxlKG9wRlBSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRo
aXMsIHVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgICAgICBHUFJS
ZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAgICAgIGlmIChoYXNJbnQzMihu
b2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgREZHX1RZUEVfQ0hF
Q0soCi0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhvcEdQUiksIHVzZSwgU3Bl
Y0ludDMyT25seSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgb3BHUFIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTY0KG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3BlcmFuZCh0aGlzLCB1c2UpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBvcEdQUiA9IG9wZXJh
bmQuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQUiwgYnVmZmVyICsg
b3BlcmFuZElkeCk7Ci0gICAgICAgICAgICAgICAgb3BlcmFuZC51c2UoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLT5pbmRleGluZ1R5cGUo
KSkgewotICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNh
c2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0g
ICAgICAgIGlmIChzY3JhdGNoU2l6ZSkgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7Ci0KLSAgICAgICAgICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBv
ZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgotICAgICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxl
bmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVz
dGVkSW1tUHRyKHNjcmF0Y2hTaXplKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIAotICAgICAg
ICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXksIHJlc3VsdC5n
cHIoKSwgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5
cGUoKSkpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCo+KGJ1ZmZlciksIHNpemVfdChu
b2RlLT5udW1DaGlsZHJlbigpKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0K
LSAgICAgICAgaWYgKHNjcmF0Y2hTaXplKSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0
Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgpKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAg
ICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBzY3JhdGNoLmdw
cigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBjb21waWxlTmV3QXJyYXko
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzkwOSw0NCArMzY0MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6IHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7Ci0gICAgICAgIEpTRml4ZWRBcnJheSogYXJyYXkgPSBub2RlLT5jYXN0T3BlcmFuZDxK
U0ZpeGVkQXJyYXkqPigpOwotICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IGFycmF5LT5s
ZW5ndGgoKTsKLSAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5vZGUtPmluZGV4
aW5nVHlwZSgpOwotICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgp
ICYmICFoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKSkgewotICAgICAgICAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoSGludCA9IG5vZGUtPnZlY3Rvckxlbmd0aEhpbnQoKTsKLSAgICAg
ICAgICAgIEFTU0VSVCh2ZWN0b3JMZW5ndGhIaW50ID49IG51bUVsZW1lbnRzKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VHUFIgPSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAgICAgICBlbWl0QWxsb2NhdGVSYXdPYmpl
Y3QocmVzdWx0R1BSLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5n
VHlwZSkpLCBzdG9yYWdlR1BSLCBudW1FbGVtZW50cywgdmVjdG9yTGVuZ3RoSGludCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgaW5k
ZXhpbmdUeXBlICYgSXNBcnJheSwgaW5kZXhpbmdUeXBlKTsKLQotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtRWxlbWVudHM7ICsraW5kZXgpIHsKLSAgICAg
ICAgICAgICAgICBpbnQ2NF90IHZhbHVlOwotICAgICAgICAgICAgICAgIGlmIChpbmRleGluZ1R5
cGUgPT0gQXJyYXlXaXRoRG91YmxlKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdHdp
c2VfY2FzdDxpbnQ2NF90PihhcnJheS0+Z2V0KGluZGV4KS5hc051bWJlcigpKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gSlNWYWx1ZTo6ZW5jb2Rl
KGFycmF5LT5nZXQoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
Zihkb3VibGUpID09IHNpemVvZihKU1ZhbHVlKSwgIiIpOwotICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoSW1tNjQodmFsdWUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBzaXplb2YoSlNWYWx1ZSkgKiBpbmRleCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIEdQUkZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIsIHJlc3VsdC5ncHIoKSwgbV9qaXQuZ3JhcGgoKS5y
ZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpLCBUcnVzdGVkSW1tUHRy
KG5vZGUtPmNlbGxPcGVyYW5kKCkpLCBzaXplX3QobnVtRWxlbWVudHMpKTsKLSAgICAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgCi0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlKTsKKyAgICAgICAgY29tcGlsZU5ld0FycmF5QnVmZmVyKG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzk2NywyOSArMzY2MSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFRv
VGhpczogewotICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlw
ZWRVc2UpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVn
IHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIg
PSB0ZW1wLmdwcigpOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENl
bGwoSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSkpOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKE92ZXJyaWRlc1RvVGhpcykpKTsKLSAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFs
dWVHUFIsIHRlbXBHUFIpOwotICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSiBmdW5jdGlvbjsKLSAg
ICAgICAgaWYgKG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9U
aGlzU3RyaWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlv
blRvVGhpczsKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93
UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBmdW5jdGlvbiwgdGVtcEdQUiwgdGhpc1ZhbHVlR1BS
KSk7Ci0KLSAgICAgICAganNWYWx1ZVJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKKyAgICAgICAgY29t
cGlsZVRvVGhpcyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDM5LDI0ICsz
NzExLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogewotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAg
ICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0xleGljYWxF
bnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShub2RlLT5zY29wZU9mZnNldCgpKSksIHJlc3Vs
dEdQUik7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAg
Y29tcGlsZUdldENsb3N1cmVWYXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIFB1dENsb3N1cmVWYXI6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotCi0gICAgICAgIG1faml0
LnN0b3JlNjQodmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKG5vZGUtPnNjb3BlT2Zmc2V0KCkpKSk7Ci0g
ICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlUHV0Q2xvc3VyZVZhcihub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MjEyLDkgKzM4NzEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIENoZWNrQ2VsbDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDZWxsLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0
LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBjZWxsLmdwcigpLCBub2RlLT5j
ZWxsT3BlcmFuZCgpLT5jZWxsKCkpKTsKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAg
IGNvbXBpbGVDaGVja0NlbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDI0
MywxNCArMzkwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldEV4ZWN1dGFibGU6IHsKLSAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBmdW5jdGlvbik7Ci0gICAgICAgIEdQ
UlJlZyBmdW5jdGlvbkdQUiA9IGZ1bmN0aW9uLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBzcGVjdWxhdGVDZWxsVHlwZShub2RlLT5jaGls
ZDEoKSwgZnVuY3Rpb25HUFIsIFNwZWNGdW5jdGlvbiwgSlNGdW5jdGlvblR5cGUpOwotICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGZ1bmN0aW9uR1BSLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0Lnhv
clB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uUG9pc29uOjprZXkoKSks
IHJlc3VsdEdQUik7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAg
ICAgY29tcGlsZUdldEV4ZWN1dGFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCkBAIC00MzMxLDE3ICszOTgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2Ug
R2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgUmV1c2UsIHN0b3JhZ2UpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIg
PSBzdG9yYWdlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICAKLSAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRh
ID0gbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0Lmxv
YWQ2NChKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldEJ5
T2Zmc2V0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDM1Niwx
OSArMzk5Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKLSAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLQotICAgICAgICBHUFJSZWcgc3RvcmFn
ZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdw
cigpOwotCi0gICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAg
ICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHN0b3Jh
Z2VBY2Nlc3NEYXRhLm9mZnNldCkpKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAg
ICAgY29tcGlsZVB1dEJ5T2Zmc2V0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTQ0NzAsMjAgKzQwOTgsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogCiAgICAgY2FzZSBHZXRHbG9iYWxMZXhpY2FsVmFyaWFibGU6CiAgICAgY2FzZSBHZXRH
bG9iYWxWYXI6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAg
ICBtX2ppdC5sb2FkNjQobm9kZS0+dmFyaWFibGVQb2ludGVyKCksIHJlc3VsdC5ncHIoKSk7Ci0K
LSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBjb21w
aWxlR2V0R2xvYmFsVmFyaWFibGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGNhc2UgUHV0R2xvYmFsVmFyaWFibGU6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgIG1faml0LnN0b3JlNjQodmFsdWUuZ3By
KCksIG5vZGUtPnZhcmlhYmxlUG9pbnRlcigpKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsK
KyAgICAgICAgY29tcGlsZVB1dEdsb2JhbFZhcmlhYmxlKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>