<?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>161727</bug_id>
          
          <creation_ts>2016-09-07 18:36:18 -0700</creation_ts>
          <short_desc>Add support for WASM calls</short_desc>
          <delta_ts>2016-10-21 09:05:30 -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>JavaScriptCore</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>159775</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1227468</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-09-07 18:36:18 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242573</commentid>
    <comment_count>1</comment_count>
      <attachid>292246</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-20 13:47:28 -0700</bug_when>
    <thetext>Created attachment 292246
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242574</commentid>
    <comment_count>2</comment_count>
      <attachid>292246</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-20 13:49:56 -0700</bug_when>
    <thetext>Comment on attachment 292246
Patch

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

&gt; Source/JavaScriptCore/wasm/WASMB3IRGenerator.cpp:219
&gt; +    // m_unlinkedCalls is a mapping from a function&apos;s index to a list of callsites that need to be linked.

I changed this to: // m_unlikedCalls is list of each call site and the function index whose address it should be patched with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242636</commentid>
    <comment_count>3</comment_count>
      <attachid>292246</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2016-10-20 15:54:13 -0700</bug_when>
    <thetext>Comment on attachment 292246
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        have been compiled by the time current function has started compilation we don&apos;t know what

How about ... by the time *the* current function ...?

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        address we need to call to.  For each callsite in the compiling function WASM remembers what

Comma after &quot;function&quot;?

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        each functions callsites are linked to the appropriate entrypoint.

Hoe about &apos;... *is* linked ...&apos;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242729</commentid>
    <comment_count>4</comment_count>
      <attachid>292307</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-20 18:47:15 -0700</bug_when>
    <thetext>Created attachment 292307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242740</commentid>
    <comment_count>5</comment_count>
      <attachid>292307</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-20 19:17:07 -0700</bug_when>
    <thetext>Comment on attachment 292307
Patch

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

Looks sensible.

&gt; Source/JavaScriptCore/wasm/WASMCallingConvention.h:53
&gt; +        : m_gpRegisterArguments(gpRegisterArguments)
&gt; +        , m_fpRegisterArguments(fpRegisterArguments)

I think we would normally say m_gprArgs and m_fprArgs.

&gt; Source/JavaScriptCore/wasm/WASMCallingConvention.h:59
&gt; +    B3::ValueRep marshallArgumentImpl(Vector&lt;Reg&gt; registerArguments, B3::Type type, size_t&amp; count, size_t&amp; stackOffset) const

regArgs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242899</commentid>
    <comment_count>6</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-21 09:05:30 -0700</bug_when>
    <thetext>Committed r207671: &lt;http://trac.webkit.org/changeset/207671&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292246</attachid>
            <date>2016-10-20 13:47:28 -0700</date>
            <delta_ts>2016-10-20 18:47:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161727-20161020134350.patch</filename>
            <type>text/plain</type>
            <size>32614</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDUyNDQ2MWY2YzQ5MzI5ZWE1MGQ3Y2FlNjc3ZTVjZGI5MjFjZWE1Li4wMTY2MjRhYWViMDBjZDhl
ODM5OWNlNWVlZTJhMzU1OGUyYjVlYmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxNi0xMC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgV0FTTSBjYWxscworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzI3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFdBU00g
Y2FsbHMuIFNpbmNlIG1vc3Qgb2YgdGhlIHdvcmsgZm9yIHRoaXMgd2FzIGFscmVhZHkgZG9uZSB3
aGVuIHdlIGFkZGVkCisgICAgICAgIFdBU00gTWVtb3J5LCB0aGlzIGlzIG1vc3RseSBqdXN0IGNs
ZWFudXAgd29yay4gIFRoZSBtYWluIGludGVyZXN0aW5nIHBhcnQgb2YgdGhpcyBwYXRjaCBpcwor
ICAgICAgICBob3cgd2UgbGluayBjYWxscyB0byBvdGhlciBXQVNNIGZ1bmN0aW9ucyBpbiB0aGUg
c2FtZSBtb2R1bGUuIFNpbmNlIGEgV0FTTSBjYWxsZWUgbWF5IG5vdAorICAgICAgICBoYXZlIGJl
ZW4gY29tcGlsZWQgYnkgdGhlIHRpbWUgY3VycmVudCBmdW5jdGlvbiBoYXMgc3RhcnRlZCBjb21w
aWxhdGlvbiB3ZSBkb24ndCBrbm93IHdoYXQKKyAgICAgICAgYWRkcmVzcyB3ZSBuZWVkIHRvIGNh
bGwgdG8uICBGb3IgZWFjaCBjYWxsc2l0ZSBpbiB0aGUgY29tcGlsaW5nIGZ1bmN0aW9uIFdBU00g
cmVtZW1iZXJzIHdoYXQKKyAgICAgICAgdGhlIENvZGVMb2NhdGlvbkNhbGwgYW5kIHRoZSB0YXJn
ZXQgZnVuY3Rpb24gaW5kZXguIE9uY2UgYWxsIFdBU00gZnVuY3Rpb25zIGFyZSBjb21waWxlZCwK
KyAgICAgICAgZWFjaCBmdW5jdGlvbnMgY2FsbHNpdGVzIGFyZSBsaW5rZWQgdG8gdGhlIGFwcHJv
cHJpYXRlIGVudHJ5cG9pbnQuCisKKyAgICAgICAgKiB0ZXN0V0FTTS5jcHA6CisgICAgICAgIChy
dW5XQVNNVGVzdHMpOgorICAgICAgICAqIHdhc20vV0FTTUIzSVJHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpXQVNNOjpjcmVhdGVKU1dyYXBwZXIpOgorICAgICAgICAoSlNDOjpXQVNNOjpw
YXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV0FTTUIzSVJHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKiB3YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5oOgorICAgICAgICAoSlNDOjpXQVNN
OjpDYWxsaW5nQ29udmVudGlvbjo6bG9hZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OldBU006
OkNhbGxpbmdDb252ZW50aW9uOjpzZXR1cENhbGwpOgorICAgICAgICAoSlNDOjpXQVNNOjpDYWxs
aW5nQ29udmVudGlvbjo6aXRlcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNRm9y
bWF0Lmg6CisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKEpT
Qzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKToKKyAgICAg
ICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQmxvY2spOgorICAg
ICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9u
KToKKyAgICAgICAgKiB3YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpX
QVNNOjpNb2R1bGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNtL1dBU01PcHMuaDoKKyAg
ICAgICAgKiB3YXNtL1dBU01QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V0FTTTo6UGFyc2VyOjpw
YXJzZVZhclVJbnQzMik6CisgICAgICAgIChKU0M6OldBU006OlBhcnNlcjo6cGFyc2VWYXJVSW50
NjQpOgorICAgICAgICAqIHdhc20vV0FTTVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXQVNNOjpQ
bGFuOjpQbGFuKToKKwogMjAxNi0xMC0xOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4KIAogICAgICAgICBbRE9NSklUXSBOb3QgZW1pdCBleGNlcHRpb24gY2FzZSBpZiBp
dCBpcyBub3QgbmVjZXNzYXJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDZjMTdjYzY0NmIzOWJmNmNiMGE4ODU1ZTQ3MjI2M2E4
Y2I2MmI2YzkuLjM1NzZjM2ZhOWFlNmJmMzUwYTk2Y2YyZTE2YzdlNTExYWM4MzQzZGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTYtMTAtMjAgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFdBU00gY2FsbHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTcyNworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IGRlY29k
ZVVJbnQ2NC4gQWxzbywgYWRkZWQgV1RGOjpMRUJEZWNvZGVyIG5hbWVzcGFjZS4KKworICAgICAg
ICAqIHd0Zi9MRUJEZWNvZGVyLmg6CisgICAgICAgIChXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJ
bnQpOgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50MzIpOgorICAgICAgICAo
V1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50NjQpOgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVy
OjpkZWNvZGVJbnQzMik6CisgICAgICAgIChkZWNvZGVVSW50MzIpOiBEZWxldGVkLgorICAgICAg
ICAoZGVjb2RlSW50MzIpOiBEZWxldGVkLgorCiAyMDE2LTEwLTE3ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBET01SZWN0L0RPTVJl
Y3RSZWFkT25seQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXQVNNLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V0FTTS5jcHAKaW5kZXggMmMzYzlmYWI2YjMw
YmRmZjlkOTMxZDRhMmE3YWM0ODY5MDlhZWFmNS4uZGZjZTczM2ZiYmVkOWMwYjI4MmRiZjY4Yzdl
MjNkZTEzZWM4OWMyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RXQVNN
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdBU00uY3BwCkBAIC0xMzUsNyAr
MTM1LDcgQEAgU3RhdGljTG9jayBjcmFzaExvY2s7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2
ZWN0b3IgPSBWZWN0b3I8dWludDhfdD4gaW5pdDsgXAogICAgICAgICBzaXplX3Qgb2Zmc2V0ID0g
c3RhcnRPZmZzZXQ7IFwKICAgICAgICAgdWludDMyX3QgcmVzdWx0OyBcCi0gICAgICAgIGJvb2wg
c3RhdHVzID0gZGVjb2RlVUludDMyKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCksIG9mZnNl
dCwgcmVzdWx0KTsgXAorICAgICAgICBib29sIHN0YXR1cyA9IFdURjo6TEVCRGVjb2Rlcjo6ZGVj
b2RlVUludDMyKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCksIG9mZnNldCwgcmVzdWx0KTsg
XAogICAgICAgICBDSEVDS19FUShzdGF0dXMsIGV4cGVjdGVkU3RhdHVzKTsgXAogICAgICAgICBp
ZiAoZXhwZWN0ZWRTdGF0dXMpIHsgXAogICAgICAgICAgICAgQ0hFQ0tfRVEocmVzdWx0LCBleHBl
Y3RlZFJlc3VsdCk7IFwKQEAgLTE4Myw3ICsxODMsNyBAQCBTdGF0aWNMb2NrIGNyYXNoTG9jazsK
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IFZlY3Rvcjx1aW50OF90PiBpbml0OyBc
CiAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdGFydE9mZnNldDsgXAogICAgICAgICBpbnQzMl90
IHJlc3VsdDsgXAotICAgICAgICBib29sIHN0YXR1cyA9IGRlY29kZUludDMyKHZlY3Rvci5kYXRh
KCksIHZlY3Rvci5zaXplKCksIG9mZnNldCwgcmVzdWx0KTsgXAorICAgICAgICBib29sIHN0YXR1
cyA9IFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlSW50MzIodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNp
emUoKSwgb2Zmc2V0LCByZXN1bHQpOyBcCiAgICAgICAgIENIRUNLX0VRKHN0YXR1cywgZXhwZWN0
ZWRTdGF0dXMpOyBcCiAgICAgICAgIGlmIChleHBlY3RlZFN0YXR1cykgeyBcCiAgICAgICAgICAg
ICBpbnQzMl90IGV4cGVjdGVkID0gZXhwZWN0ZWRSZXN1bHQ7IFwKQEAgLTI0NCw2ICsyNDQsMTAx
IEBAIHN0YXRpYyB2b2lkIHJ1bldBU01UZXN0cygpCiB7CiAgICAgewogICAgICAgICAvLyBHZW5l
cmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1lbW9y
eSAxKQorICAgICAgICAvLyAgICAgKGZ1bmMgJGZhYyAoZXhwb3J0ICJmYWMiKSAocGFyYW0gaTY0
KSAocmVzdWx0IGk2NCkKKyAgICAgICAgLy8gICAgICAoaWYgKGk2NC5lcXogKGdldF9sb2NhbCAw
KSkKKyAgICAgICAgLy8gICAgICAgKHJldHVybiAoaTY0LmNvbnN0IDEpKQorICAgICAgICAvLyAg
ICAgICApCisgICAgICAgIC8vICAgICAgKHJldHVybiAoaTY0Lm11bCAoZ2V0X2xvY2FsIDApIChj
YWxsICRmYWMgKGk2NC5zdWIgKGdldF9sb2NhbCAwKSAoaTY0LmNvbnN0IDEpKSkpKQorICAgICAg
ICAvLyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4
NDAsCisgICAgICAgICAgICAweDAxLCAweDAyLCAweDAxLCAweDAyLCAweDAzLCAweDgyLCAweDgw
LCAweDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLCAweDgwLAor
ICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4NywgMHg4
MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg2NiwgMHg2MSwgMHg2MywKKyAgICAg
ICAgICAgIDB4MDAsIDB4MDAsIDB4MGEsIDB4OWUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4
MDEsIDB4OTgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsCisgICAgICAgICAg
ICAweDAwLCAweDExLCAweDAwLCAweDY4LCAweDAzLCAweDAwLCAweDExLCAweDAxLCAweDA5LCAw
eDBmLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDExLCAweDAxLAorICAgICAgICAgICAgMHg1
YywgMHgxNiwgMHgwMCwgMHg1ZCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBs
YW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0g
MSB8fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZh
aWxlZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDAp
IH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5q
c0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpIH0pLCAyKTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsg
Ym94KDQpIH0pLCAyNCk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJv
bToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQorICAg
ICAgICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiZG91YmxlIikgKHBhcmFtIGk2NCkgKHJlc3VsdCBp
NjQpIChyZXR1cm4gKGNhbGwgMSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkpKSkKKyAgICAg
ICAgLy8gICAgIChmdW5jICRzdW0gKHBhcmFtIGk2NCkgKHBhcmFtIGk2NCkgKHJlc3VsdCBpNjQp
IChyZXR1cm4gKGk2NC5hZGQgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDEpKSkpCisgICAgICAg
IC8vICAgICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAg
ICAweDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAw
eDhjLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDQwLAorICAgICAgICAgICAgMHgw
MSwgMHgwMiwgMHgwMSwgMHgwMiwgMHg0MCwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMSwgMHgwMiwg
MHgwMywgMHg4MywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwKKyAgICAgICAgICAgIDB4MDIsIDB4
MDAsIDB4MDEsIDB4MDUsIDB4ODMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAs
IDB4MDEsIDB4MDcsIDB4OGEsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDAwLCAw
eDAxLCAweDA2LCAweDY0LCAweDZmLCAweDc1LCAweDYyLCAweDZjLCAweDY1LCAweDAwLCAweDAw
LCAweDBhLCAweDljLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMiwg
MHg4OSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgw
MCwgMHgxNiwgMHgwMSwgMHgwOSwKKyAgICAgICAgICAgIDB4MGYsIDB4ODgsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NWIsIDB4MDksIDB4
MGYKKyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAg
ICBpZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0WzBdIHx8ICFwbGFu
LnJlc3VsdFsxXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNv
bXBpbGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgwKSB9
KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNF
bnRyeVBvaW50LCB7IGJveCgxMDApLCBib3goMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VR
KGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94
KDE1KSB9KSwgMTYpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRb
MF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZv
a2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAw
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5
UG9pbnQsIHsgYm94KDEpIH0pLCAyKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVy
YXRlZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5
IDEpCisgICAgICAgIC8vICAgICAoZnVuYyAkaWQgKHBhcmFtICR2YWx1ZSBpMzIpIChyZXN1bHQg
aTMyKSAocmV0dXJuIChnZXRfbG9jYWwgJHZhbHVlKSkpCisgICAgICAgIC8vICAgICAoZnVuYyAo
ZXhwb3J0ICJpZC1jYWxsIikgKHBhcmFtICR2YWx1ZSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJu
IChjYWxsICRpZCAoZ2V0X2xvY2FsICR2YWx1ZSkpKSkKKyAgICAgICAgLy8gICAgICkKKyAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4
NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAs
IDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAw
eDAxLCAweDAzLCAweDgzLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDAwLCAweDAw
LCAweDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwg
MHgwMSwgMHgwMSwgMHgwNywgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
NywgMHg2OSwgMHg2NCwKKyAgICAgICAgICAgIDB4MmQsIDB4NjMsIDB4NjEsIDB4NmMsIDB4NmMs
IDB4MDAsIDB4MDEsIDB4MGEsIDB4OTcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4
ODUsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAw
LCAweDA5LCAweDBmLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAw
eDAwLAorICAgICAgICAgICAgMHgxNiwgMHgwMCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisg
ICAgICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5z
aXplKCkgIT0gMiB8fCAhcGxhbi5yZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7CisgICAg
ICAgICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7
CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlz
IGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3Vs
dFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAx
MDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50
cnlQb2ludCwgeyBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50Pigq
cGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBD
SEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3go
MTAwKSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0
WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIC8vIEdlbmVyYXRlZCBmcm9tOgogICAgICAgICAvLyAobW9kdWxlCiAgICAgICAgIC8vICAo
bWVtb3J5IDEpCiAgICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJh
bSAkaSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggNjg2NTUxY2E0ZmUy
MjliNmYyMmExODZmNjllNDdjNjVhODlhNjI3Mi4uYWZhNTFhZmQyMmEzNmJjOWVhNGQxYjgzYzY0
YzFjNDc4YmE5NjQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01C
M0lSR2VuZXJhdG9yLmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IFZlY3RvcjxWYXJpYWJsZSosIDE+IFJlc3VsdExpc3Q7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBF
eHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVy
YXRvcihNZW1vcnkqLCBQcm9jZWR1cmUmKTsKKyAgICBCM0lSR2VuZXJhdG9yKE1lbW9yeSosIFBy
b2NlZHVyZSYsIFZlY3RvcjxVbmxpbmtlZExvY2F0aW9uSW5mbz4mIHVubGlua2VkQ2FsbHMpOwog
CiAgICAgdm9pZCBhZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7CiAgICAgdm9pZCBh
ZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CkBAIC0xOTgsNiArMTk4LDggQEAgcHVibGljOgogICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEJyYW5jaChDb250cm9sRGF0YSYsIEV4cHJlc3Np
b25UeXBlIGNvbmRpdGlvbiwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJldHVyblZhbHVlcyk7CiAg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbERhdGEmLCBFeHByZXNz
aW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKIAorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhbGwodW5zaWduZWQgY2FsbGVlSW5kZXgsIGNvbnN0IEZ1bmN0aW9uSW5mb3JtYXRpb24m
LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsK
KwogICAgIGJvb2wgaXNDb250aW51YXRpb25SZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAogICAg
IHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbFR5cGU+JiBjb250cm9sU3RhY2ssIGNvbnN0
IEV4cHJlc3Npb25MaXN0JiBleHByZXNzaW9uU3RhY2spOwpAQCAtMjE0LDEzICsyMTYsMTYgQEAg
cHJpdmF0ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAgICBCYXNpY0Jsb2NrKiBtX2N1cnJl
bnRCbG9jazsKICAgICBWZWN0b3I8VmFyaWFibGUqPiBtX2xvY2FsczsKKyAgICAvLyBtX3VubGlu
a2VkQ2FsbHMgaXMgYSBtYXBwaW5nIGZyb20gYSBmdW5jdGlvbidzIGluZGV4IHRvIGEgbGlzdCBv
ZiBjYWxsc2l0ZXMgdGhhdCBuZWVkIHRvIGJlIGxpbmtlZC4KKyAgICBWZWN0b3I8VW5saW5rZWRM
b2NhdGlvbkluZm8+JiBtX3VubGlua2VkQ2FsbHM7CiAgICAgR1BSUmVnIG1fbWVtb3J5QmFzZUdQ
UjsKICAgICBHUFJSZWcgbV9tZW1vcnlTaXplR1BSOwogfTsKIAotQjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcihNZW1vcnkqIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUpCitCM0lSR2Vu
ZXJhdG9yOjpCM0lSR2VuZXJhdG9yKE1lbW9yeSogbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVy
ZSwgVmVjdG9yPFVubGlua2VkTG9jYXRpb25JbmZvPiYgdW5saW5rZWRDYWxscykKICAgICA6IG1f
bWVtb3J5KG1lbW9yeSkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCisgICAgLCBtX3VubGlua2Vk
Q2FsbHModW5saW5rZWRDYWxscykKIHsKICAgICBtX2N1cnJlbnRCbG9jayA9IG1fcHJvYy5hZGRC
bG9jaygpOwogCkBAIC0yMzEsMTMgKzIzNiwxMyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJh
dG9yKE1lbW9yeSogbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSkKICAgICAgICAgbV9tZW1v
cnlTaXplR1BSID0gbV9tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0u
c2l6ZVJlZ2lzdGVyOwogICAgICAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8m
IGluZm8gOiBtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVycykKICAgICAg
ICAgICAgIG1fcHJvYy5waW5SZWdpc3RlcihpbmZvLnNpemVSZWdpc3Rlcik7Ci0gICAgfQogCi0g
ICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgcGlubmVkR1BSLCB1bnNpZ25lZCkgewotICAgICAgICBBU1NFUlRfVU5VU0VE
KHBpbm5lZEdQUiwgbV9tZW1vcnlTaXplR1BSID09IHBpbm5lZEdQUik7Ci0gICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCB1bndpbmQgdGhlIHN0YWNrIGFuZCB0aHJvdyBhIEpTIGV4Y2VwdGlv
bi4gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMzUxCi0g
ICAgICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgfSk7CisgICAgICAgIG1fcHJvYy5zZXRXYXNt
Qm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5l
ZEdQUiwgdW5zaWduZWQpIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocGlubmVkR1BSLCBt
X21lbW9yeVNpemVHUFIgPT0gcGlubmVkR1BSKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1bndpbmQgdGhlIHN0YWNrIGFuZCB0aHJvdyBhIEpTIGV4Y2VwdGlvbi4gU2VlOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMzUxCisgICAgICAgICAg
ICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICB9KTsKKyAgICB9CiB9CiAKIHZvaWQgQjNJUkdl
bmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkKQEAgLTI1MSw3ICsy
NTYsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlw
ZT4mIHR5cGVzKQogewogICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKICAgICBtX2xvY2Fs
cy5ncm93KHR5cGVzLnNpemUoKSk7Ci0gICAganNjQ2FsbGluZ0NvbnZlbnRpb24oKS5pdGVyYXRl
KHR5cGVzLCBtX3Byb2MsIG1fY3VycmVudEJsb2NrLCBPcmlnaW4oKSwKKyAgICBqc2NDYWxsaW5n
Q29udmVudGlvbigpLmxvYWRBcmd1bWVudHModHlwZXMsIG1fcHJvYywgbV9jdXJyZW50QmxvY2ss
IE9yaWdpbigpLAogICAgICAgICBbJl0gKEV4cHJlc3Npb25UeXBlIGFyZ3VtZW50LCB1bnNpZ25l
ZCBpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZSogYXJndW1lbnRWYXJpYWJsZSA9IG1fcHJvYy5h
ZGRWYXJpYWJsZShhcmd1bWVudC0+dHlwZSgpKTsKICAgICAgICAgICAgIG1fbG9jYWxzW2ldID0g
YXJndW1lbnRWYXJpYWJsZTsKQEAgLTU2MSw2ICs1NjYsMzIgQEAgYm9vbCBCM0lSR2VuZXJhdG9y
OjplbmRCbG9jayhDb250cm9sRGF0YSYgZGF0YSwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25T
dGFjaykKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRDYWxs
KHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8s
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7
CisgICAgQVNTRVJUKGluZm8uc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpID09IGFyZ3Muc2l6
ZSgpKTsKKworICAgIFR5cGUgcmV0dXJuVHlwZSA9IGluZm8uc2lnbmF0dXJlLT5yZXR1cm5UeXBl
OworCisgICAgbV91bmxpbmtlZENhbGxzLmdyb3cobV91bmxpbmtlZENhbGxzLnNpemUoKSArIDEp
OworICAgIFVubGlua2VkTG9jYXRpb25JbmZvKiBjYWxsU2l0ZUxpbmtMb2NhdGlvbiA9ICZtX3Vu
bGlua2VkQ2FsbHMubGFzdCgpOworICAgIHJlc3VsdCA9IGpzY0NhbGxpbmdDb252ZW50aW9uKCku
c2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIE9yaWdpbigpLCBhcmdzLCB0b0IzVHlw
ZShyZXR1cm5UeXBlKSwKKyAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQp
IHsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworCisg
ICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAg
ICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisKKyAg
ICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgICAgICpjYWxsU2l0ZUxpbmtMb2NhdGlvbiA9IHsgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKGNhbGwpLCBmdW5jdGlvbkluZGV4IH07CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
IGJvb2wgQjNJUkdlbmVyYXRvcjo6aXNDb250aW51YXRpb25SZWFjaGFibGUoQ29udHJvbERhdGEm
IGRhdGEpCiB7CiAgICAgLy8gSWYgbm90aGluZyB0YXJnZXRzIHRoZSBjb250aW51YXRpb24gb2Yg
dGhlIGN1cnJlbnQgYmxvY2sgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGNyZWF0ZQpAQCAtNjQyLDE4
ICs2NzMsMjcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYXRlSlNX
cmFwcGVyKFZNJiB2bSwgY29uc3QgU2lnbmF0dXJlKiBzaWcKIAogICAgIC8vIEdldCBvdXIgYXJn
dW1lbnRzLgogICAgIFZlY3RvcjxWYWx1ZSo+IGFyZ3VtZW50czsKLSAgICBqc2NDYWxsaW5nQ29u
dmVudGlvbigpLml0ZXJhdGUoc2lnbmF0dXJlLT5hcmd1bWVudHMsIHByb2MsIGJsb2NrLCBPcmln
aW4oKSwgWyZdIChWYWx1ZSogYXJndW1lbnQsIHVuc2lnbmVkKSB7CisgICAganNjQ2FsbGluZ0Nv
bnZlbnRpb24oKS5sb2FkQXJndW1lbnRzKHNpZ25hdHVyZS0+YXJndW1lbnRzLCBwcm9jLCBibG9j
aywgT3JpZ2luKCksIFsmXSAoVmFsdWUqIGFyZ3VtZW50LCB1bnNpZ25lZCkgewogICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsKICAgICB9KTsKIAogICAgIC8vIE1vdmUgdGhlIGFy
Z3VtZW50cyBpbnRvIHBsYWNlLgotICAgIFZhbHVlKiByZXN1bHQgPSBqc2NDYWxsaW5nQ29udmVu
dGlvbigpLnNldHVwQ2FsbChwcm9jLCBibG9jaywgT3JpZ2luKCksIG1haW5GdW5jdGlvbiwgYXJn
dW1lbnRzLCB0b0IzVHlwZShzaWduYXR1cmUtPnJldHVyblR5cGUpLCBbJl0gKFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCkgeworICAgIFZhbHVlKiByZXN1bHQgPSBqc2NDYWxsaW5nQ29udmVu
dGlvbigpLnNldHVwQ2FsbChwcm9jLCBibG9jaywgT3JpZ2luKCksIGFyZ3VtZW50cywgdG9CM1R5
cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKSwgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQpIHsKICAgICAgICAgaWYgKG1lbW9yeSkgewogICAgICAgICAgICAgQVNTRVJUKHNpemVzLnNp
emUoKSA9PSBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgpKTsK
ICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGJhc2VNZW1v
cnksIFZhbHVlUmVwOjpyZWcobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5iYXNlTWVtb3J5UG9p
bnRlcikpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplcy5zaXpl
KCk7ICsraSkKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRW
YWx1ZShzaXplc1tpXSwgVmFsdWVSZXA6OnJlZyhtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNp
emVSZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKSkpOwogICAgICAgICB9CisKKyAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
ayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobWFpbkZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKICAgICB9KTsKIAogICAgIC8vIFJl
dHVybiB0aGUgcmVzdWx0LCBpZiBuZWVkZWQuCkBAIC02NjUsMTEgKzcwNSwxMyBAQCBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhdGVKU1dyYXBwZXIoVk0mIHZtLCBjb25z
dCBTaWduYXR1cmUqIHNpZwogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9u
Pih2bSwgcHJvYyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiBw
YXJzZUFuZENvbXBpbGUoVk0mIHZtLCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZSwgTWVtb3J5KiBt
ZW1vcnksIEZ1bmN0aW9uSW5mb3JtYXRpb24gaW5mbywgdW5zaWduZWQgb3B0TGV2ZWwpCitzdGQ6
OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwg
VmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UsIE1lbW9yeSogbWVtb3J5LCBGdW5jdGlvbkluZm9ybWF0
aW9uIGluZm8sIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVuY3Rpb25zLCB1
bnNpZ25lZCBvcHRMZXZlbCkKIHsKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8
RnVuY3Rpb25Db21waWxhdGlvbj4oKTsKKwogICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7Ci0gICAg
QjNJUkdlbmVyYXRvciBjb250ZXh0KG1lbW9yeSwgcHJvY2VkdXJlKTsKLSAgICBGdW5jdGlvblBh
cnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgc291cmNlLCBpbmZvKTsKKyAgICBC
M0lSR2VuZXJhdG9yIGNvbnRleHQobWVtb3J5LCBwcm9jZWR1cmUsIHJlc3VsdC0+dW5saW5rZWRD
YWxscyk7CisgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQs
IHNvdXJjZSwgaW5mbywgZnVuY3Rpb25zKTsKICAgICBpZiAoIXBhcnNlci5wYXJzZSgpKQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC02NzksNyArNzIxLDYgQEAg
c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYg
dm0sIFZlY3Rvcjx1aW50OF90PiYgc28KICAgICBmaXhTU0EocHJvY2VkdXJlKTsKICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiUG9zdCBTU0E6ICIsIHByb2NlZHVyZSk7Ci0gICAg
YXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0aW9uQ29tcGlsYXRpb24+KCk7CiAK
ICAgICByZXN1bHQtPmNvZGUgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2bSwgcHJv
Y2VkdXJlLCBvcHRMZXZlbCk7CiAgICAgcmVzdWx0LT5qc0VudHJ5UG9pbnQgPSBjcmVhdGVKU1dy
YXBwZXIodm0sIGluZm8uc2lnbmF0dXJlLCByZXN1bHQtPmNvZGUtPmNvZGUoKSwgbWVtb3J5KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01CM0lSR2VuZXJhdG9y
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQjNJUkdlbmVyYXRvci5oCmluZGV4
IGY4MjgyZDBjOTU1YzI2ZjdlN2MwMTI0NTc5N2I5OTE2ZDRkYjkwNDguLmRmYmM4M2YyMTI2Zjky
YzdiYjY5OTIzYTllNzQ3NzQxM2NmNWU5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTUIzSVJHZW5lcmF0b3IuaApAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdBU00gewogCiBjbGFzcyBNZW1vcnk7CiAKLXN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBWZWN0b3I8dWludDhfdD4m
LCBNZW1vcnkqLCBGdW5jdGlvbkluZm9ybWF0aW9uLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwor
c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYs
IFZlY3Rvcjx1aW50OF90PiYsIE1lbW9yeSosIEZ1bmN0aW9uSW5mb3JtYXRpb24sIGNvbnN0IFZl
Y3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTUNhbGxpbmdDb252ZW50aW9uLmgKaW5kZXggNjEzNWY3MzcwNWFlOWI2YmEwMDA0
OWY0YzIwNjRlZDllYTdlNTBiMS4uMmRiZjQwZjliZWUxMTc4ZGNkYjdmNWRjZTY4NjEyN2MzZjQ4
YTg1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUNhbGxpbmdD
b252ZW50aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUNhbGxpbmdD
b252ZW50aW9uLmgKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBpdGVyYXRlKGNvbnN0IFZlY3RvcjxUeXBl
PiYgYXJndW1lbnRUeXBlcywgQjM6OlByb2NlZHVyZSYgcHJvYywgQjM6OkJhc2ljQmxvY2sqIGJs
b2NrLCBCMzo6T3JpZ2luIG9yaWdpbiwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAg
ICB2b2lkIGxvYWRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudFR5cGVzLCBC
Mzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6QmFzaWNCbG9jayogYmxvY2ssIEIzOjpPcmlnaW4gb3Jp
Z2luLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAogICAgIHsKICAgICAgICAgdW5zaWdu
ZWQgY3VycmVudE9mZnNldCA9IGhlYWRlclNpemU7CiAgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQ
b2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50
ZXIsIG9yaWdpbik7CkBAIC03NCw4ICs3NCw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0K
IAorICAgIC8vIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgcGFjaHBvaW50RnVuY3RvciBzZXRzIHRo
ZSBnZW5lcmF0b3IgZm9yIHRoZSBjYWxsIG9wZXJhdGlvbi4KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgotICAgIEIzOjpWYWx1ZSogc2V0dXBDYWxsKEIzOjpQcm9jZWR1cmUmIHByb2Ms
IEIzOjpCYXNpY0Jsb2NrKiBibG9jaywgQjM6Ok9yaWdpbiBvcmlnaW4sIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciB0YXJnZXQsIGNvbnN0IFZlY3RvcjxCMzo6VmFsdWUqPiYgYXJndW1lbnRzLCBCMzo6
VHlwZSByZXR1cm5UeXBlLCBjb25zdCBGdW5jdG9yJiBwYXRjaHBvaW50RnVuY3RvcikgY29uc3QK
KyAgICBCMzo6VmFsdWUqIHNldHVwQ2FsbChCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6QmFzaWNC
bG9jayogYmxvY2ssIEIzOjpPcmlnaW4gb3JpZ2luLCBjb25zdCBWZWN0b3I8QjM6OlZhbHVlKj4m
IGFyZ3VtZW50cywgQjM6OlR5cGUgcmV0dXJuVHlwZSwgY29uc3QgRnVuY3RvciYgcGF0Y2hwb2lu
dEZ1bmN0b3IpIGNvbnN0CiAgICAgewogICAgICAgICBzaXplX3Qgc3RhY2tBcmd1bWVudENvdW50
ID0gYXJndW1lbnRzLnNpemUoKSA8IG1fcmVnaXN0ZXJBcmd1bWVudHMuc2l6ZSgpID8gMCA6IGFy
Z3VtZW50cy5zaXplKCkgLSBtX3JlZ2lzdGVyQXJndW1lbnRzLnNpemUoKTsKICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gaGVhZGVyU2l6ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKQEAg
LTkzLDE2ICs5NCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZh
bHVlPihwcm9jLCByZXR1cm5UeXBlLCBvcmlnaW4pOworICAgICAgICBwYXRjaHBvaW50LT5jbG9i
YmVyRWFybHkoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9y
SlNDYWxsKCkpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRWZWN0b3IoY29uc3RyYWluZWRB
cmd1bWVudHMpOwogICAgICAgICBwYXRjaHBvaW50RnVuY3RvcihwYXRjaHBvaW50KTsKLSAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0KLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIodGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKIAogICAgICAgICBpZiAocmV0dXJu
VHlwZSA9PSBCMzo6Vm9pZCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oCmluZGV4IDFlMTA4MTBkM2ZmNmVlMGE4NzY0YjMy
YjM2ZTgwNTZkZDM0NWE2YzMuLjBjMDZjMGI4OGE4MGNhNmI0YTQ3ZjI4MDcxZTdlYjcxZWJmY2E0
OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmgKQEAgLTQ2LDYgKzQ2
LDcgQEAKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJCM1R5cGUuaCIK
KyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTEyNyw3ICsxMjgsMTMgQEAgc3RydWN0
IEZ1bmN0aW9uSW5mb3JtYXRpb24gewogICAgIHNpemVfdCBlbmQ7CiB9OwogCitzdHJ1Y3QgVW5s
aW5rZWRMb2NhdGlvbkluZm8geworICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbExvY2F0aW9uOwor
ICAgIHNpemVfdCBmdW5jdGlvbkluZGV4OworfTsKKwogc3RydWN0IEZ1bmN0aW9uQ29tcGlsYXRp
b24geworICAgIFZlY3RvcjxVbmxpbmtlZExvY2F0aW9uSW5mbz4gdW5saW5rZWRDYWxsczsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBjb2RlOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxCMzo6Q29tcGlsYXRpb24+IGpzRW50cnlQb2ludDsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCmluZGV4IDQ0NzFhMmNmNTcxNzgx
ODI1OTUyNDJkMDM5NGY0NzY5ZTc5ZTNiYzcuLjQ1MmUyOGI1Njk5MmI1ZGFiYzc3MDk2M2Q1YWQ4
NDc0MDA2YzZiNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01G
dW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5j
dGlvblBhcnNlci5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHR5cGVu
YW1lIENvbnRleHQ6OkV4cHJlc3Npb25UeXBlIEV4cHJlc3Npb25UeXBlOwogICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ29udGV4dDo6Q29udHJvbFR5cGUgQ29udHJvbFR5cGU7CiAKLSAgICBGdW5jdGlv
blBhcnNlcihDb250ZXh0JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIsIGNv
bnN0IEZ1bmN0aW9uSW5mb3JtYXRpb24mKTsKKyAgICBGdW5jdGlvblBhcnNlcihDb250ZXh0Jiwg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2VCdWZmZXIsIGNvbnN0IEZ1bmN0aW9uSW5mb3Jt
YXRpb24mLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucyk7CiAK
ICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSgpOwogCkBAIC02MCwxNCArNjAsMTYg
QEAgcHJpdmF0ZToKICAgICBWZWN0b3I8RXhwcmVzc2lvblR5cGUsIDE+IG1fZXhwcmVzc2lvblN0
YWNrOwogICAgIFZlY3RvcjxDb250cm9sVHlwZT4gbV9jb250cm9sU3RhY2s7CiAgICAgY29uc3Qg
U2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKKyAgICBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1h
dGlvbj4mIG1fZnVuY3Rpb25zOwogICAgIHVuc2lnbmVkIG1fdW5yZWFjaGFibGVCbG9ja3MgeyAw
IH07CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotRnVuY3Rpb25QYXJzZXI8Q29u
dGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvKQorRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9ybWF0
aW9uJiBpbmZvLCBjb25zdCBWZWN0b3I8RnVuY3Rpb25JbmZvcm1hdGlvbj4mIGZ1bmN0aW9ucykK
ICAgICA6IFBhcnNlcihzb3VyY2VCdWZmZXIsIGluZm8uc3RhcnQsIGluZm8uZW5kKQogICAgICwg
bV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpZ25hdHVyZSgqaW5mby5zaWduYXR1cmUpCisg
ICAgLCBtX2Z1bmN0aW9ucyhmdW5jdGlvbnMpCiB7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2dMbigiUGFyc2luZyBmdW5jdGlvbiBzdGFydGluZyBhdDogIiwgaW5mby5zdGFydCwg
IiBlbmRpbmcgYXQ6ICIsIGluZm8uZW5kKTsKQEAgLTEwMSw4ICsxMDMsMTEgQEAgYm9vbCBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VCbG9jaygpCiB7CiAgICAgd2hpbGUgKHRydWUpIHsK
ICAgICAgICAgdWludDhfdCBvcDsKLSAgICAgICAgaWYgKCFwYXJzZVVJbnQ3KG9wKSB8fCAhaXNW
YWxpZE9wVHlwZShvcCkpCisgICAgICAgIGlmICghcGFyc2VVSW50NyhvcCkgfHwgIWlzVmFsaWRP
cFR5cGUob3ApKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBX
VEY6OmRhdGFMb2dMbigiYXR0ZW1wdGVkIHRvIGRlY29kZSBpbnZhbGlkIG9wOiAiLCBSYXdQb2lu
dGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wKSksICIgYXQgb2Zmc2V0OiAiLCBSYXdQb2lu
dGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fb2Zmc2V0KSkpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CiAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAg
ICAgIGRhdGFMb2dMbigicHJvY2Vzc2luZyBvcCAoIiwgbV91bnJlYWNoYWJsZUJsb2NrcywgIik6
ICIsICBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wKSksICIgYXQgb2Zmc2V0
OiAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fb2Zmc2V0KSkpOwpAQCAt
MTkzLDYgKzE5OCwxNCBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJl
c3Npb24oT3BUeXBlIG9wKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBjYXNl
IE9wVHlwZTo6STY0Q29uc3Q6IHsKKyAgICAgICAgdWludDY0X3QgY29uc3RhbnQ7CisgICAgICAg
IGlmICghcGFyc2VWYXJVSW50NjQoY29uc3RhbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBlbmQobV9jb250ZXh0LmFkZENvbnN0YW50
KEk2NCwgY29uc3RhbnQpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgY2Fz
ZSBPcFR5cGU6OkdldExvY2FsOiB7CiAgICAgICAgIHVpbnQzMl90IGluZGV4OwogICAgICAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KSkKQEAgLTIxMyw2ICsyMjYsMzAgQEAgYm9vbCBGdW5j
dGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBvcCkKICAgICAgICAg
cmV0dXJuIG1fY29udGV4dC5zZXRMb2NhbChpbmRleCwgdmFsdWUpOwogICAgIH0KIAorICAgIGNh
c2UgT3BUeXBlOjpDYWxsOiB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAg
ICAgIGlmICghcGFyc2VWYXJVSW50MzIoZnVuY3Rpb25JbmRleCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPj0gbV9mdW5jdGlvbnMuc2l6
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNvbnN0IEZ1bmN0aW9u
SW5mb3JtYXRpb24mIGluZm8gPSBtX2Z1bmN0aW9uc1tmdW5jdGlvbkluZGV4XTsKKworICAgICAg
ICBWZWN0b3I8RXhwcmVzc2lvblR5cGU+IGFyZ3M7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpbmZvLnNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgYXJncy5hcHBlbmQobV9leHByZXNzaW9uU3RhY2sudGFrZUxhc3QoKSk7CisKKyAgICAgICAg
RXhwcmVzc2lvblR5cGUgcmVzdWx0ID0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9uOworICAgICAg
ICBpZiAoIW1fY29udGV4dC5hZGRDYWxsKGZ1bmN0aW9uSW5kZXgsIGluZm8sIGFyZ3MsIHJlc3Vs
dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBD
b250ZXh0OjplbXB0eUV4cHJlc3Npb24pCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5h
cHBlbmQocmVzdWx0KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBjYXNl
IE9wVHlwZTo6QmxvY2s6IHsKICAgICAgICAgVHlwZSBpbmxpbmVTaWduYXR1cmU7CiAgICAgICAg
IGlmICghcGFyc2VWYWx1ZVR5cGUoaW5saW5lU2lnbmF0dXJlKSkKQEAgLTI4MSwxMiArMzE4LDEy
IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUg
b3ApCiAgICAgY2FzZSBPcFR5cGU6OkJyVGFibGU6CiAgICAgY2FzZSBPcFR5cGU6Ok5vcDoKICAg
ICBjYXNlIE9wVHlwZTo6RHJvcDoKLSAgICBjYXNlIE9wVHlwZTo6STY0Q29uc3Q6CiAgICAgY2Fz
ZSBPcFR5cGU6OkYzMkNvbnN0OgogICAgIGNhc2UgT3BUeXBlOjpGNjRDb25zdDoKICAgICBjYXNl
IE9wVHlwZTo6VGVlTG9jYWw6CiAgICAgY2FzZSBPcFR5cGU6OkdldEdsb2JhbDoKICAgICBjYXNl
IE9wVHlwZTo6U2V0R2xvYmFsOgorICAgIGNhc2UgT3BUeXBlOjpDYWxsSW5kaXJlY3Q6CiAgICAg
ICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkLgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVs
ZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2Vy
LmNwcAppbmRleCBkY2RlNzRjYzFhNTE0YjMzMGM4ZmYxZDc2ZGU3M2ViMTFjZjE0MzJmLi4wZTc5
NmJmODM5YWVhYzYxYjY1Yjc2YWEyNjIyZTNkMmUxMTEzNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcApAQCAtODIsNyArODIsNyBAQCBi
b29sIE1vZHVsZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGNhbiByZWFkIHVwIHRvIHRoZSBzZWN0aW9u
J3Mgc2l6ZS4KLSAgICAgICAgICAgIGlmIChtX29mZnNldCArIHNlY3Rpb25OYW1lTGVuZ3RoICsg
bWF4TEVCQnl0ZUxlbmd0aCA+PSBtX3NvdXJjZUxlbmd0aCkKKyAgICAgICAgICAgIGlmIChtX29m
ZnNldCArIHNlY3Rpb25OYW1lTGVuZ3RoICsgV1RGOjpMRUJEZWNvZGVyOjptYXgzMkJpdExFQkJ5
dGVMZW5ndGggPj0gbV9zb3VyY2VMZW5ndGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGFueSBjdXN0b20gc2VjdGlvbnMg
eWV0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU9wcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU9wcy5oCmluZGV4IDZkMzQ4OGNmNDk4MDQz
M2U5MDRiYWUwMDU0NDQ4MzdjYWQwMDJlNGEuLjY2ZjcyODk0YjVmOGJiYjIwZjhiOGUwMTc3ZDEy
OGRjNzcxYWJjNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01P
cHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNT3BzLmgKQEAgLTQyLDcg
KzQyLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXQVNNIHsKICAgICBtYWNybyhTZXRM
b2NhbCwgMHgxNSwgT29wcykgXAogICAgIG1hY3JvKFRlZUxvY2FsLCAweDE5LCBPb3BzKSBcCiAg
ICAgbWFjcm8oR2V0R2xvYmFsLCAweGJiLCBPb3BzKSBcCi0gICAgbWFjcm8oU2V0R2xvYmFsLCAw
eGJjLCBPb3BzKQorICAgIG1hY3JvKFNldEdsb2JhbCwgMHhiYywgT29wcykgXAorICAgIG1hY3Jv
KENhbGwsIDB4MTYsIE9vcHMpIFwKKyAgICBtYWNybyhDYWxsSW5kaXJlY3QsIDB4MTcsIE9vcHMp
CiAKICNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9DT05UUk9MX0ZMT1dfT1AobWFjcm8pIFwKICAgICBt
YWNybyhVbnJlYWNoYWJsZSwgMHgwLCBPb3BzKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNUGFyc2VyLmgKaW5kZXggNTM2OWI2ZjhkYWI1YmMwNjY1MTE5YmNjNTA1MGY1Yzc1M2MzNDFi
My4uMWI3OTE4NmY1ZWQ3YTU5YTk2ZDYwMjNlNTVhYzA0YzBmNWZlYzI4YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaApAQCAtNDYsNyArNDYsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MSh1aW50OF90JiByZXN1
bHQpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDcodWludDhfdCYgcmVz
dWx0KTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVJbnQzMih1aW50MzJfdCYg
cmVzdWx0KTsKLSAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQzMih1aW50
MzJfdCYgcmVzdWx0KSB7IHJldHVybiBkZWNvZGVVSW50MzIobV9zb3VyY2UuZGF0YSgpLCBtX3Nv
dXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7IH0KKyAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBwYXJzZVZhclVJbnQzMih1aW50MzJfdCYgcmVzdWx0KSB7IHJldHVybiBXVEY6OkxFQkRl
Y29kZXI6OmRlY29kZVVJbnQzMihtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlTGVuZ3RoLCBtX29m
ZnNldCwgcmVzdWx0KTsgfQorICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUlu
dDY0KHVpbnQ2NF90JiByZXN1bHQpIHsgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUlu
dDY0KG1fc291cmNlLmRhdGEoKSwgbV9zb3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOyB9
CiAKIAogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFsdWVUeXBlKFR5cGUmIHJl
c3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxhbi5jcHAKaW5kZXggYTA4Mzcz
ODU4NGQ1NjY5MjZhMjUyMmRiOTFjZDZjOTRmOGU2YTYwYi4uYmEyOThmZjU1MTFmYzVmN2NiMDVj
N2MzY2Q4MjViNjIzNjQxYzQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QbGFu
LmNwcApAQCAtNTQsOCArNTQsMTYgQEAgUGxhbjo6UGxhbihWTSYgdm0sIFZlY3Rvcjx1aW50OF90
PiBzb3VyY2UpCiAgICAgZm9yIChjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiBpbmZvIDogbW9k
dWxlUGFyc2VyLmZ1bmN0aW9uSW5mb3JtYXRpb24oKSkgewogICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2dMbigiUHJvY2Vzc2luZyBmdW5jaW9uIHN0YXJ0aW5nIGF0OiAi
LCBpbmZvLnN0YXJ0LCAiIGFuZCBlbmRpbmcgYXQ6ICIsIGluZm8uZW5kKTsKLSAgICAgICAgcmVz
dWx0LmFwcGVuZChwYXJzZUFuZENvbXBpbGUodm0sIHNvdXJjZSwgbW9kdWxlUGFyc2VyLm1lbW9y
eSgpLmdldCgpLCBpbmZvKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocGFyc2VBbmRDb21waWxl
KHZtLCBzb3VyY2UsIG1vZHVsZVBhcnNlci5tZW1vcnkoKS5nZXQoKSwgaW5mbywgbW9kdWxlUGFy
c2VyLmZ1bmN0aW9uSW5mb3JtYXRpb24oKSkpOwogICAgIH0KKworICAgIC8vIFBhdGNoIHRoZSBj
YWxsIHNpdGVzIGZvciBlYWNoIGZ1bmN0aW9uLgorICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEZ1
bmN0aW9uQ29tcGlsYXRpb24+JiBmdW5jdGlvblB0ciA6IHJlc3VsdCkgeworICAgICAgICBGdW5j
dGlvbkNvbXBpbGF0aW9uKiBmdW5jdGlvbiA9IGZ1bmN0aW9uUHRyLmdldCgpOworICAgICAgICBm
b3IgKGF1dG8mIGNhbGwgOiBmdW5jdGlvbi0+dW5saW5rZWRDYWxscykKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWwocmVzdWx0W2NhbGwuZnVuY3Rpb25JbmRleF0tPmNvZGUtPmNvZGUoKSkpOworICAgIH0K
KwogICAgIG1lbW9yeSA9IFdURk1vdmUobW9kdWxlUGFyc2VyLm1lbW9yeSgpKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvTEVCRGVjb2Rlci5oIGIvU291cmNlL1dURi93dGYvTEVC
RGVjb2Rlci5oCmluZGV4IDM2ZGNjYTJkYjBjNDZhZmJlMzFjOGMxMDg4Y2UzYThhY2UyMTFiYzMu
LjE2NTBhMjNiZWZmYmVkMjNkOTlkZDgyMmE5ZDNkMGE2ZDNkYjI0ZmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0xFQkRlY29kZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVy
LmgKQEAgLTMyLDE0ICszMiwxNSBAQAogLy8gU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93
aWtpL0xFQjEyOCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKIC8vIExFQiBmb3JtYXQu
CiAKLWNvbnN0IHNpemVfdCBtYXhMRUJCeXRlTGVuZ3RoID0gNTsKK25hbWVzcGFjZSBXVEYgeyBu
YW1lc3BhY2UgTEVCRGVjb2RlciB7CiAKLWlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBk
ZWNvZGVVSW50MzIoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYg
b2Zmc2V0LCB1aW50MzJfdCYgcmVzdWx0KQordGVtcGxhdGU8c2l6ZV90IG1heEJ5dGVMZW5ndGgs
IHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlVUludChj
b25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQsIFQmIHJl
c3VsdCkKIHsKICAgICBBU1NFUlQobGVuZ3RoID4gb2Zmc2V0KTsKICAgICByZXN1bHQgPSAwOwog
ICAgIHVuc2lnbmVkIHNoaWZ0ID0gMDsKLSAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWluKG1heExF
QkJ5dGVMZW5ndGgsIGxlbmd0aCAtIG9mZnNldCAtIDEpOworICAgIHNpemVfdCBsYXN0ID0gc3Rk
OjptaW4obWF4Qnl0ZUxlbmd0aCwgbGVuZ3RoIC0gb2Zmc2V0IC0gMSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgdHJ1ZTsgKytpKSB7CiAgICAgICAgIHVpbnQ4X3QgYnl0ZSA9IGJ5dGVzW29m
ZnNldCsrXTsKICAgICAgICAgcmVzdWx0IHw9IChieXRlICYgMHg3ZikgPDwgc2hpZnQ7CkBAIC01
MywxMiArNTQsMjUgQEAgaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZVVJbnQz
Mihjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorY29uc3Qgc2l6ZV90IG1heDMyQml0TEVCQnl0ZUxlbmd0aCA9IDU7Citjb25zdCBzaXpl
X3QgbWF4NjRCaXRMRUJCeXRlTGVuZ3RoID0gMTA7CisKK2lubGluZSBib29sIFdBUk5fVU5VU0VE
X1JFVFVSTiBkZWNvZGVVSW50MzIoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgs
IHNpemVfdCYgb2Zmc2V0LCB1aW50MzJfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVV
SW50PG1heDMyQml0TEVCQnl0ZUxlbmd0aCwgdWludDMyX3Q+KGJ5dGVzLCBsZW5ndGgsIG9mZnNl
dCwgcmVzdWx0KTsKK30KKworaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZVVJ
bnQ2NChjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90JiBvZmZzZXQs
IHVpbnQ2NF90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZVVJbnQ8bWF4NjRCaXRMRUJC
eXRlTGVuZ3RoLCB1aW50NjRfdD4oYnl0ZXMsIGxlbmd0aCwgb2Zmc2V0LCByZXN1bHQpOworfQor
CiBpbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlSW50MzIoY29uc3QgdWludDhf
dCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgb2Zmc2V0LCBpbnQzMl90JiByZXN1bHQp
CiB7CiAgICAgQVNTRVJUKGxlbmd0aCA+IG9mZnNldCk7CiAgICAgcmVzdWx0ID0gMDsKICAgICB1
bnNpZ25lZCBzaGlmdCA9IDA7Ci0gICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhMRUJCeXRl
TGVuZ3RoLCBsZW5ndGggLSBvZmZzZXQgLSAxKTsKKyAgICBzaXplX3QgbGFzdCA9IHN0ZDo6bWlu
KG1heDMyQml0TEVCQnl0ZUxlbmd0aCwgbGVuZ3RoIC0gb2Zmc2V0IC0gMSk7CiAgICAgdWludDhf
dCBieXRlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHRydWU7ICsraSkgewogICAgICAgICBi
eXRlID0gYnl0ZXNbb2Zmc2V0KytdOwpAQCAtNzQsMyArODgsNSBAQCBpbmxpbmUgYm9vbCBXQVJO
X1VOVVNFRF9SRVRVUk4gZGVjb2RlSW50MzIoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBs
ZW5ndGgsCiAgICAgICAgIHJlc3VsdCB8PSAoKC0xdSkgPDwgc2hpZnQpOwogICAgIHJldHVybiB0
cnVlOwogfQorCit9IH0gLy8gV1RGOjpMRUJEZWNvZGVyCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0No
YW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGNhODMxYjNlYTBmZTc0ZTQwOTZhY2Q3
ZTExMGI0NjYzZWVhYmMxMzQuLmUyMTA5NmJhYmQ5ZjNmYTVhNWE4NDA1ZTIxZWQzZmZjNGVlYjQ2
MmMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMTAtMjAgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFdBU00gY2FsbHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTcyNworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtZW1iZXJzIG9m
IHRoZSBDYWxsIGNhdGVnb3J5IHRvIHRoZSBXQVNNT3BzIHNwZWNpYWwgZ3JvdXAuCisKKyAgICAg
ICAgKiB3YXNtL2dlbmVyYXRlLXdhc21vcHMtaGVhZGVyLmpzOgorCiAyMDE2LTEwLTE4ICBDYWl0
bGluIFBvdHRlciAgPGNhaXRwQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0pTQ10gRVM2IE1ldGhv
ZCBmdW5jdGlvbnMgc2hvdWxkIG5vdCBoYXZlIHByb3RvdHlwZQpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy93YXNtL2dlbmVyYXRlLXdhc21vcHMtaGVhZGVyLmpzIGIvSlNUZXN0cy93YXNtL2dlbmVyYXRl
LXdhc21vcHMtaGVhZGVyLmpzCmluZGV4IDczODViYmYxNjE5NDhkY2IyYzBiOTM3OTAxOTBhY2Q2
Nzg0ZjM4ZWEuLmI5YTQyNTI5ZmU1MGZhNDY4Yzg0ZTJiN2EyMTE4M2JmYzA2NGVmOTQgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvd2FzbS9nZW5lcmF0ZS13YXNtb3BzLWhlYWRlci5qcworKysgYi9KU1Rl
c3RzL3dhc20vZ2VuZXJhdGUtd2FzbW9wcy1oZWFkZXIuanMKQEAgLTI5LDcgKzI5LDcgQEAgZnVu
Y3Rpb24qIG9wY29kZU1hY3JvaXplcihmaWx0ZXIpIHsKIAogY29uc3QgZGVmaW5lcyA9IFsKICAg
ICAiI2RlZmluZSBGT1JfRUFDSF9XQVNNX1NQRUNJQUxfT1AobWFjcm8pIiwKLSAgICAuLi5vcGNv
ZGVNYWNyb2l6ZXIob3AgPT4gb3AuY2F0ZWdvcnkgPT09ICJzcGVjaWFsIiksCisgICAgLi4ub3Bj
b2RlTWFjcm9pemVyKG9wID0+IG9wLmNhdGVnb3J5ID09PSAic3BlY2lhbCIgfHwgb3AuY2F0ZWdv
cnkgPT09ICJjYWxsIiksCiAgICAgIlxuXG4jZGVmaW5lIEZPUl9FQUNIX1dBU01fQ09OVFJPTF9G
TE9XX09QKG1hY3JvKSIsCiAgICAgLi4ub3Bjb2RlTWFjcm9pemVyKG9wID0+IG9wLmNhdGVnb3J5
ID09PSAiY29udHJvbCIpLAogICAgICJcblxuI2RlZmluZSBGT1JfRUFDSF9XQVNNX1VOQVJZX09Q
KG1hY3JvKSIsCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292307</attachid>
            <date>2016-10-20 18:47:15 -0700</date>
            <delta_ts>2016-10-20 19:17:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161727-20161020184337.patch</filename>
            <type>text/plain</type>
            <size>42704</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDUyNDQ2MWY2YzQ5MzI5ZWE1MGQ3Y2FlNjc3ZTVjZGI5MjFjZWE1Li5hYTk0MTExN2EwOWU3ZWM4
ZTE1ODNhNWYzNjRlYWJmOTUyODQxZmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAxNi0xMC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgV0FTTSBjYWxscworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzI3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFdBU00g
Y2FsbHMuIFNpbmNlIG1vc3Qgb2YgdGhlIHdvcmsgZm9yIHRoaXMgd2FzIGFscmVhZHkgZG9uZSB3
aGVuIHdlIGFkZGVkCisgICAgICAgIFdBU00gTWVtb3J5LCB0aGlzIGlzIG1vc3RseSBqdXN0IGNs
ZWFudXAgd29yay4gIFRoZSBtYWluIGludGVyZXN0aW5nIHBhcnQgb2YgdGhpcyBwYXRjaCBpcwor
ICAgICAgICBob3cgd2UgbGluayBjYWxscyB0byBvdGhlciBXQVNNIGZ1bmN0aW9ucyBpbiB0aGUg
c2FtZSBtb2R1bGUuIFNpbmNlIGEgV0FTTSBjYWxsZWUgbWF5IG5vdAorICAgICAgICBoYXZlIGJl
ZW4gY29tcGlsZWQgYnkgdGhlIHRpbWUgY3VycmVudCBmdW5jdGlvbiBoYXMgc3RhcnRlZCBjb21w
aWxhdGlvbiB3ZSBkb24ndCBrbm93IHdoYXQKKyAgICAgICAgYWRkcmVzcyB3ZSBuZWVkIHRvIGNh
bGwgdG8uICBGb3IgZWFjaCBjYWxsc2l0ZSBpbiB0aGUgY29tcGlsaW5nIGZ1bmN0aW9uIFdBU00g
cmVtZW1iZXJzCisgICAgICAgIHRoZSBDb2RlTG9jYXRpb25DYWxsIGFuZCB0aGUgdGFyZ2V0IGZ1
bmN0aW9uIGluZGV4LiBPbmNlIGFsbCBXQVNNIGZ1bmN0aW9ucyBhcmUgY29tcGlsZWQsCisgICAg
ICAgIGVhY2ggY2FsbHNpdGUgaXMgbGlua2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBlbnRyeXBvaW50
LgorCisgICAgICAgICogdGVzdFdBU00uY3BwOgorICAgICAgICAocnVuV0FTTVRlc3RzKToKKyAg
ICAgICAgKiB3YXNtL1dBU01CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V0FTTTo6
Y3JlYXRlSlNXcmFwcGVyKToKKyAgICAgICAgKEpTQzo6V0FTTTo6cGFyc2VBbmRDb21waWxlKToK
KyAgICAgICAgKiB3YXNtL1dBU01CM0lSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XQVNN
Q2FsbGluZ0NvbnZlbnRpb24uY3BwOgorICAgICAgICAoSlNDOjpXQVNNOjpqc2NDYWxsaW5nQ29u
dmVudGlvbik6CisgICAgICAgIChKU0M6OldBU006Ondhc21DYWxsaW5nQ29udmVudGlvbik6Cisg
ICAgICAgICogd2FzbS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAgICAgKEpTQzo6V0FT
TTo6Q2FsbGluZ0NvbnZlbnRpb246OkNhbGxpbmdDb252ZW50aW9uKToKKyAgICAgICAgKEpTQzo6
V0FTTTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNoYWxsQXJndW1lbnRJbXBsKToKKyAgICAgICAg
KEpTQzo6V0FTTTo6Q2FsbGluZ0NvbnZlbnRpb246Om1hcnNoYWxsQXJndW1lbnQpOgorICAgICAg
ICAoSlNDOjpXQVNNOjpDYWxsaW5nQ29udmVudGlvbjo6bG9hZEFyZ3VtZW50cyk6CisgICAgICAg
IChKU0M6OldBU006OkNhbGxpbmdDb252ZW50aW9uOjpzZXR1cENhbGwpOgorICAgICAgICAoSlND
OjpXQVNNOjpDYWxsaW5nQ29udmVudGlvbjo6aXRlcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICog
d2FzbS9XQVNNRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaDoK
KyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFy
c2VyKToKKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNl
QmxvY2spOgorICAgICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VFeHByZXNzaW9uKToKKyAgICAgICAgKiB3YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpXQVNNOjpNb2R1bGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiB3YXNtL1dB
U01PcHMuaDoKKyAgICAgICAgKiB3YXNtL1dBU01QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V0FT
TTo6UGFyc2VyOjpwYXJzZVZhclVJbnQzMik6CisgICAgICAgIChKU0M6OldBU006OlBhcnNlcjo6
cGFyc2VWYXJVSW50NjQpOgorICAgICAgICAqIHdhc20vV0FTTVBsYW4uY3BwOgorICAgICAgICAo
SlNDOjpXQVNNOjpQbGFuOjpQbGFuKToKKwogMjAxNi0xMC0xOCAgWXVzdWtlIFN1enVraSAgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbRE9NSklUXSBOb3QgZW1pdCBleGNlcHRp
b24gY2FzZSBpZiBpdCBpcyBub3QgbmVjZXNzYXJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDZjMTdjYzY0NmIzOWJmNmNiMGE4
ODU1ZTQ3MjI2M2E4Y2I2MmI2YzkuLjM1NzZjM2ZhOWFlNmJmMzUwYTk2Y2YyZTE2YzdlNTExYWM4
MzQzZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTYtMTAtMjAgIEtlaXRoIE1pbGxlciAgPGtl
aXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFdBU00gY2Fs
bHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTcy
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IGEgbmV3IGRlY29kZVVJbnQ2NC4gQWxzbywgYWRkZWQgV1RGOjpMRUJEZWNvZGVyIG5hbWVzcGFj
ZS4KKworICAgICAgICAqIHd0Zi9MRUJEZWNvZGVyLmg6CisgICAgICAgIChXVEY6OkxFQkRlY29k
ZXI6OmRlY29kZVVJbnQpOgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50MzIp
OgorICAgICAgICAoV1RGOjpMRUJEZWNvZGVyOjpkZWNvZGVVSW50NjQpOgorICAgICAgICAoV1RG
OjpMRUJEZWNvZGVyOjpkZWNvZGVJbnQzMik6CisgICAgICAgIChkZWNvZGVVSW50MzIpOiBEZWxl
dGVkLgorICAgICAgICAoZGVjb2RlSW50MzIpOiBEZWxldGVkLgorCiAyMDE2LTEwLTE3ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBE
T01SZWN0L0RPTVJlY3RSZWFkT25seQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RXQVNNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0V0FTTS5jcHAKaW5kZXgg
MmMzYzlmYWI2YjMwYmRmZjlkOTMxZDRhMmE3YWM0ODY5MDlhZWFmNS4uMDU3NmVjNGE1YWU1Njgx
MWZlZTA3ZDliY2EzNGQ2YTQyMjI2OWE5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RXQVNNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFdBU00uY3Bw
CkBAIC0xMzUsNyArMTM1LDcgQEAgU3RhdGljTG9jayBjcmFzaExvY2s7CiAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiB2ZWN0b3IgPSBWZWN0b3I8dWludDhfdD4gaW5pdDsgXAogICAgICAgICBzaXpl
X3Qgb2Zmc2V0ID0gc3RhcnRPZmZzZXQ7IFwKICAgICAgICAgdWludDMyX3QgcmVzdWx0OyBcCi0g
ICAgICAgIGJvb2wgc3RhdHVzID0gZGVjb2RlVUludDMyKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5z
aXplKCksIG9mZnNldCwgcmVzdWx0KTsgXAorICAgICAgICBib29sIHN0YXR1cyA9IFdURjo6TEVC
RGVjb2Rlcjo6ZGVjb2RlVUludDMyKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCksIG9mZnNl
dCwgcmVzdWx0KTsgXAogICAgICAgICBDSEVDS19FUShzdGF0dXMsIGV4cGVjdGVkU3RhdHVzKTsg
XAogICAgICAgICBpZiAoZXhwZWN0ZWRTdGF0dXMpIHsgXAogICAgICAgICAgICAgQ0hFQ0tfRVEo
cmVzdWx0LCBleHBlY3RlZFJlc3VsdCk7IFwKQEAgLTE4Myw3ICsxODMsNyBAQCBTdGF0aWNMb2Nr
IGNyYXNoTG9jazsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IFZlY3Rvcjx1aW50
OF90PiBpbml0OyBcCiAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdGFydE9mZnNldDsgXAogICAg
ICAgICBpbnQzMl90IHJlc3VsdDsgXAotICAgICAgICBib29sIHN0YXR1cyA9IGRlY29kZUludDMy
KHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCksIG9mZnNldCwgcmVzdWx0KTsgXAorICAgICAg
ICBib29sIHN0YXR1cyA9IFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlSW50MzIodmVjdG9yLmRhdGEo
KSwgdmVjdG9yLnNpemUoKSwgb2Zmc2V0LCByZXN1bHQpOyBcCiAgICAgICAgIENIRUNLX0VRKHN0
YXR1cywgZXhwZWN0ZWRTdGF0dXMpOyBcCiAgICAgICAgIGlmIChleHBlY3RlZFN0YXR1cykgeyBc
CiAgICAgICAgICAgICBpbnQzMl90IGV4cGVjdGVkID0gZXhwZWN0ZWRSZXN1bHQ7IFwKQEAgLTI0
NCw2ICsyNDQsMTM2IEBAIHN0YXRpYyB2b2lkIHJ1bldBU01UZXN0cygpCiB7CiAgICAgewogICAg
ICAgICAvLyBHZW5lcmF0ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAv
LyAgICAgKG1lbW9yeSAxKQorICAgICAgICAvLyAgICAgKGZ1bmMgJHN1bTEyIChwYXJhbSBpMzIp
IChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBp
MzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJhbSBpMzIpIChwYXJh
bSBpMzIpIChwYXJhbSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChpMzIuYWRkIChnZXRfbG9j
YWwgMCkgKGkzMi5hZGQgKGdldF9sb2NhbCAxKSAoaTMyLmFkZCAoZ2V0X2xvY2FsIDIpIChpMzIu
YWRkIChnZXRfbG9jYWwgMykgKGkzMi5hZGQgKGdldF9sb2NhbCA0KSAoaTMyLmFkZCAoZ2V0X2xv
Y2FsIDUpIChpMzIuYWRkIChnZXRfbG9jYWwgNikgKGkzMi5hZGQgKGdldF9sb2NhbCA3KSAoaTMy
LmFkZCAoZ2V0X2xvY2FsIDgpIChpMzIuYWRkIChnZXRfbG9jYWwgOSkgKGkzMi5hZGQgKGdldF9s
b2NhbCAxMCkgKGdldF9sb2NhbCAxMSkpKSkpKSkpKSkpKSkpCisgICAgICAgIC8vICAgICAoZnVu
YyAoZXhwb3J0ICJtdWx0MTIiKSAocGFyYW0gaTMyKSAocmVzdWx0IGkzMikgKHJldHVybiAoY2Fs
bCAkc3VtMTIgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9s
b2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xv
Y2FsIDApIChnZXRfbG9jYWwgMCkgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDApIChnZXRfbG9j
YWwgMCkpKSkKKyAgICAgICAgLy8gICAgICkKKworICAgICAgICBWZWN0b3I8dWludDhfdD4gdmVj
dG9yID0geworICAgICAgICAgICAgMHgwMCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwYywgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMSwgMHg5NiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgMHg0
MCwKKyAgICAgICAgICAgIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEs
IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4NDAsCisg
ICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAzLCAweDgzLCAweDgwLCAweDgw
LCAweDgwLCAweDAwLCAweDAyLCAweDAwLCAweDAxLCAweDA1LCAweDgzLCAweDgwLAorICAgICAg
ICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4YSwgMHg4
MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNiwgMHg2ZCwgMHg3NSwKKyAgICAgICAgICAg
IDB4NmMsIDB4NzQsIDB4MzEsIDB4MzIsIDB4MDAsIDB4MDEsIDB4MGEsIDB4Y2UsIDB4ODAsIDB4
ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4YTYsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDgw
LCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAxLCAweDE0LCAweDAyLCAweDE0LCAw
eDAzLCAweDE0LCAweDA0LCAweDE0LCAweDA1LCAweDE0LAorICAgICAgICAgICAgMHgwNiwgMHgx
NCwgMHgwNywgMHgxNCwgMHgwOCwgMHgxNCwgMHgwOSwgMHgxNCwgMHgwYSwgMHgxNCwgMHgwYiwg
MHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwKKyAgICAgICAgICAgIDB4NDAsIDB4NDAsIDB4
NDAsIDB4NDAsIDB4NDAsIDB4NDAsIDB4MDksIDB4MGYsIDB4OWQsIDB4ODAsIDB4ODAsIDB4ODAs
IDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsCisgICAgICAgICAgICAweDE0LCAweDAwLCAweDE0LCAw
eDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDE0
LCAweDAwLCAweDE0LCAweDAwLAorICAgICAgICAgICAgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwg
MHgxNCwgMHgwMCwgMHgxNiwgMHgwMCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAg
IFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkg
IT0gMiB8fCAhcGxhbi5yZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7CisgICAgICAgICAg
ICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7CisgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRvZXNu
J3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+
anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMjAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzFdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpIH0pLCAxMik7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFu
LnJlc3VsdFswXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDIpLCBib3goMyksIGJveCg0
KSwgYm94KDUpLCBib3goNiksIGJveCg3KSwgYm94KDgpLCBib3goOSksIGJveCgxMCksIGJveCgx
MSksIGJveCgxMikgfSksIDc4KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4u
cmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpLCBib3goMiksIGJveCgzKSwgYm94KDQp
LCBib3goNSksIGJveCg2KSwgYm94KDcpLCBib3goOCksIGJveCg5KSwgYm94KDEwKSwgYm94KDEx
KSwgYm94KDEwMCkgfSksIDE2Nik7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0
ZWQgZnJvbToKKyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1lbW9yeSAx
KQorICAgICAgICAvLyAgICAgKGZ1bmMgJGZhYyAoZXhwb3J0ICJmYWMiKSAocGFyYW0gaTY0KSAo
cmVzdWx0IGk2NCkKKyAgICAgICAgLy8gICAgICAoaWYgKGk2NC5lcXogKGdldF9sb2NhbCAwKSkK
KyAgICAgICAgLy8gICAgICAgKHJldHVybiAoaTY0LmNvbnN0IDEpKQorICAgICAgICAvLyAgICAg
ICApCisgICAgICAgIC8vICAgICAgKHJldHVybiAoaTY0Lm11bCAoZ2V0X2xvY2FsIDApIChjYWxs
ICRmYWMgKGk2NC5zdWIgKGdldF9sb2NhbCAwKSAoaTY0LmNvbnN0IDEpKSkpKQorICAgICAgICAv
LyAgICAgICkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rv
ciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMsIDB4NmQsIDB4MGMsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4NDAs
CisgICAgICAgICAgICAweDAxLCAweDAyLCAweDAxLCAweDAyLCAweDAzLCAweDgyLCAweDgwLCAw
eDgwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDgzLCAweDgwLCAweDgwLAorICAg
ICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwNywgMHg4NywgMHg4MCwg
MHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg2NiwgMHg2MSwgMHg2MywKKyAgICAgICAg
ICAgIDB4MDAsIDB4MDAsIDB4MGEsIDB4OWUsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEs
IDB4OTgsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTQsCisgICAgICAgICAgICAw
eDAwLCAweDExLCAweDAwLCAweDY4LCAweDAzLCAweDAwLCAweDExLCAweDAxLCAweDA5LCAweDBm
LCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDExLCAweDAxLAorICAgICAgICAgICAgMHg1Yywg
MHgxNiwgMHgwMCwgMHg1ZCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAgICAgIFBsYW4g
cGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXplKCkgIT0gMSB8
fCAhcGxhbi5yZXN1bHRbMF0pIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTW9kdWxlIGZhaWxl
ZCB0byBjb21waWxlIGNvcnJlY3RseS4iKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBUZXN0IHRoaXMgZG9lc24ndCBjcmFzaC4KKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDApIH0p
LCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0Vu
dHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4o
KnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94KDIpIH0pLCAyKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9pbnQsIHsgYm94
KDQpIH0pLCAyNCk7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBHZW5lcmF0ZWQgZnJvbToK
KyAgICAgICAgLy8gICAgKG1vZHVsZQorICAgICAgICAvLyAgICAgKG1lbW9yeSAxKQorICAgICAg
ICAvLyAgICAgKGZ1bmMgKGV4cG9ydCAiZG91YmxlIikgKHBhcmFtIGk2NCkgKHJlc3VsdCBpNjQp
IChyZXR1cm4gKGNhbGwgMSAoZ2V0X2xvY2FsIDApIChnZXRfbG9jYWwgMCkpKSkKKyAgICAgICAg
Ly8gICAgIChmdW5jICRzdW0gKHBhcmFtIGk2NCkgKHBhcmFtIGk2NCkgKHJlc3VsdCBpNjQpIChy
ZXR1cm4gKGk2NC5hZGQgKGdldF9sb2NhbCAwKSAoZ2V0X2xvY2FsIDEpKSkpCisgICAgICAgIC8v
ICAgICApCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3IgPSB7CisgICAgICAgICAgICAw
eDAwLCAweDYxLCAweDczLCAweDZkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDhj
LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDQwLAorICAgICAgICAgICAgMHgwMSwg
MHgwMiwgMHgwMSwgMHgwMiwgMHg0MCwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMSwgMHgwMiwgMHgw
MywgMHg4MywgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwKKyAgICAgICAgICAgIDB4MDIsIDB4MDAs
IDB4MDEsIDB4MDUsIDB4ODMsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4
MDEsIDB4MDcsIDB4OGEsIDB4ODAsIDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDAwLCAweDAx
LCAweDA2LCAweDY0LCAweDZmLCAweDc1LCAweDYyLCAweDZjLCAweDY1LCAweDAwLCAweDAwLCAw
eDBhLCAweDljLCAweDgwLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHgwMCwgMHgwMiwgMHg4
OSwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxNCwgMHgwMCwg
MHgxNiwgMHgwMSwgMHgwOSwKKyAgICAgICAgICAgIDB4MGYsIDB4ODgsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NWIsIDB4MDksIDB4MGYK
KyAgICAgICAgfTsKKworICAgICAgICBQbGFuIHBsYW4oKnZtLCB2ZWN0b3IpOworICAgICAgICBp
ZiAocGxhbi5yZXN1bHQuc2l6ZSgpICE9IDIgfHwgIXBsYW4ucmVzdWx0WzBdIHx8ICFwbGFuLnJl
c3VsdFsxXSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb2R1bGUgZmFpbGVkIHRvIGNvbXBp
bGUgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFRlc3QgdGhpcyBkb2Vzbid0IGNyYXNoLgorICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQb2ludCwgeyBib3goMCksIGJveCgwKSB9KSwg
MCk7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRy
eVBvaW50LCB7IGJveCgxMDApLCBib3goMCkgfSksIDEwMCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxKSwgYm94KDE1
KSB9KSwgMTYpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0t
PmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVDS19FUShpbnZva2U8
aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAwKSB9KSwgMjAwKTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBdLT5qc0VudHJ5UG9p
bnQsIHsgYm94KDEpIH0pLCAyKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEdlbmVyYXRl
ZCBmcm9tOgorICAgICAgICAvLyAgICAobW9kdWxlCisgICAgICAgIC8vICAgICAobWVtb3J5IDEp
CisgICAgICAgIC8vICAgICAoZnVuYyAkaWQgKHBhcmFtICR2YWx1ZSBpMzIpIChyZXN1bHQgaTMy
KSAocmV0dXJuIChnZXRfbG9jYWwgJHZhbHVlKSkpCisgICAgICAgIC8vICAgICAoZnVuYyAoZXhw
b3J0ICJpZC1jYWxsIikgKHBhcmFtICR2YWx1ZSBpMzIpIChyZXN1bHQgaTMyKSAocmV0dXJuIChj
YWxsICRpZCAoZ2V0X2xvY2FsICR2YWx1ZSkpKSkKKyAgICAgICAgLy8gICAgICkKKyAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHZlY3RvciA9IHsKKyAgICAgICAgICAgIDB4MDAsIDB4NjEsIDB4NzMs
IDB4NmQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4ODAsIDB4ODAsIDB4
ODAsIDB4MDAsIDB4MDEsIDB4NDAsCisgICAgICAgICAgICAweDAxLCAweDAxLCAweDAxLCAweDAx
LCAweDAzLCAweDgzLCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAw
eDA1LCAweDgzLCAweDgwLAorICAgICAgICAgICAgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgw
MSwgMHgwMSwgMHgwNywgMHg4YiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwNywg
MHg2OSwgMHg2NCwKKyAgICAgICAgICAgIDB4MmQsIDB4NjMsIDB4NjEsIDB4NmMsIDB4NmMsIDB4
MDAsIDB4MDEsIDB4MGEsIDB4OTcsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4ODUs
IDB4ODAsCisgICAgICAgICAgICAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAw
eDA5LCAweDBmLCAweDg3LCAweDgwLCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDE0LCAweDAw
LAorICAgICAgICAgICAgMHgxNiwgMHgwMCwgMHgwOSwgMHgwZgorICAgICAgICB9OworCisgICAg
ICAgIFBsYW4gcGxhbigqdm0sIHZlY3Rvcik7CisgICAgICAgIGlmIChwbGFuLnJlc3VsdC5zaXpl
KCkgIT0gMiB8fCAhcGxhbi5yZXN1bHRbMF0gfHwgIXBsYW4ucmVzdWx0WzFdKSB7CisgICAgICAg
ICAgICBkYXRhTG9nTG4oIk1vZHVsZSBmYWlsZWQgdG8gY29tcGlsZSBjb3JyZWN0bHkuIik7Cisg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGVzdCB0aGlzIGRv
ZXNuJ3QgY3Jhc2guCisgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpwbGFuLnJlc3VsdFsx
XS0+anNFbnRyeVBvaW50LCB7IGJveCgwKSB9KSwgMCk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQ+KCpwbGFuLnJlc3VsdFsxXS0+anNFbnRyeVBvaW50LCB7IGJveCgxMDApIH0pLCAxMDAp
OworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMV0tPmpzRW50cnlQ
b2ludCwgeyBib3goMSkgfSksIDEpOworICAgICAgICBDSEVDS19FUShpbnZva2U8aW50PigqcGxh
bi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMCkgfSksIDApOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50PigqcGxhbi5yZXN1bHRbMF0tPmpzRW50cnlQb2ludCwgeyBib3goMTAw
KSB9KSwgMTAwKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKnBsYW4ucmVzdWx0WzBd
LT5qc0VudHJ5UG9pbnQsIHsgYm94KDEpIH0pLCAxKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IC8vIEdlbmVyYXRlZCBmcm9tOgogICAgICAgICAvLyAobW9kdWxlCiAgICAgICAgIC8vICAobWVt
b3J5IDEpCiAgICAgICAgIC8vICAoZnVuYyAoZXhwb3J0ICJpMzJfbG9hZDhfcyIpIChwYXJhbSAk
aSBpMzIpIChwYXJhbSAkcHRyIGkzMikgKHJlc3VsdCBpMzIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQjNJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNQjNJUkdlbmVyYXRvci5jcHAKaW5kZXggNjg2NTUxY2E0ZmUyMjli
NmYyMmExODZmNjllNDdjNjVhODlhNjI3Mi4uYjRhODAwYzhhNGZmZTlmNTNlYTg4YjQ2MjJkMWZj
Y2Y0YWVkNGUzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUIz
SVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01CM0lS
R2VuZXJhdG9yLmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZl
Y3RvcjxWYXJpYWJsZSosIDE+IFJlc3VsdExpc3Q7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHBy
ZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVyYXRv
cihNZW1vcnkqLCBQcm9jZWR1cmUmKTsKKyAgICBCM0lSR2VuZXJhdG9yKE1lbW9yeSosIFByb2Nl
ZHVyZSYsIFZlY3RvcjxVbmxpbmtlZENhbGw+JiB1bmxpbmtlZENhbGxzKTsKIAogICAgIHZvaWQg
YWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYpOwogICAgIHZvaWQgYWRkTG9jYWwoVHlw
ZSwgdWludDMyX3QpOwpAQCAtMTk4LDYgKzE5OCw4IEBAIHB1YmxpYzoKICAgICBib29sIFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRCcmFuY2goQ29udHJvbERhdGEmLCBFeHByZXNzaW9uVHlwZSBjb25k
aXRpb24sIGNvbnN0IEV4cHJlc3Npb25MaXN0JiByZXR1cm5WYWx1ZXMpOwogICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGVuZEJsb2NrKENvbnRyb2xEYXRhJiwgRXhwcmVzc2lvbkxpc3QmIGV4
cHJlc3Npb25TdGFjayk7CiAKKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVu
c2lnbmVkIGNhbGxlZUluZGV4LCBjb25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJiwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CisKICAgICBib29s
IGlzQ29udGludWF0aW9uUmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKICAgICB2b2lkIGR1bXAo
Y29uc3QgVmVjdG9yPENvbnRyb2xUeXBlPiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9u
TGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKQEAgLTIxNCwxMyArMjE2LDE2IEBAIHByaXZhdGU6CiAg
ICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAg
ICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7CisgICAgLy8gbV91bmxpa2VkQ2FsbHMgaXMg
bGlzdCBvZiBlYWNoIGNhbGwgc2l0ZSBhbmQgdGhlIGZ1bmN0aW9uIGluZGV4IHdob3NlIGFkZHJl
c3MgaXQgc2hvdWxkIGJlIHBhdGNoZWQgd2l0aC4KKyAgICBWZWN0b3I8VW5saW5rZWRDYWxsPiYg
bV91bmxpbmtlZENhbGxzOwogICAgIEdQUlJlZyBtX21lbW9yeUJhc2VHUFI7CiAgICAgR1BSUmVn
IG1fbWVtb3J5U2l6ZUdQUjsKIH07CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVt
b3J5KiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJlKQorQjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcihNZW1vcnkqIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxp
bmtlZENhbGw+JiB1bmxpbmtlZENhbGxzKQogICAgIDogbV9tZW1vcnkobWVtb3J5KQogICAgICwg
bV9wcm9jKHByb2NlZHVyZSkKKyAgICAsIG1fdW5saW5rZWRDYWxscyh1bmxpbmtlZENhbGxzKQog
ewogICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJsb2NrKCk7CiAKQEAgLTIzMSwxMyAr
MjM2LDEzIEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW1vcnksIFBy
b2NlZHVyZSYgcHJvY2VkdXJlKQogICAgICAgICBtX21lbW9yeVNpemVHUFIgPSBtX21lbW9yeS0+
cGlubmVkUmVnaXN0ZXJzKCkuc2l6ZVJlZ2lzdGVyc1swXS5zaXplUmVnaXN0ZXI7CiAgICAgICAg
IGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyYgaW5mbyA6IG1fbWVtb3J5LT5waW5u
ZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzKQogICAgICAgICAgICAgbV9wcm9jLnBpblJlZ2lz
dGVyKGluZm8uc2l6ZVJlZ2lzdGVyKTsKLSAgICB9CiAKLSAgICBtX3Byb2Muc2V0V2FzbUJvdW5k
c0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIs
IHVuc2lnbmVkKSB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocGlubmVkR1BSLCBtX21lbW9yeVNp
emVHUFIgPT0gcGlubmVkR1BSKTsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVud2lu
ZCB0aGUgc3RhY2sgYW5kIHRocm93IGEgSlMgZXhjZXB0aW9uLiBTZWU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMzNTEKLSAgICAgICAgaml0LmJyZWFrcG9pbnQo
KTsKLSAgICB9KTsKKyAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcihb
PV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSLCB1bnNpZ25lZCkgeworICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5u
ZWRHUFIpOworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVud2luZCB0aGUgc3Rh
Y2sgYW5kIHRocm93IGEgSlMgZXhjZXB0aW9uLiBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjMzNTEKKyAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7Cisg
ICAgICAgIH0pOworICAgIH0KIH0KIAogdm9pZCBCM0lSR2VuZXJhdG9yOjphZGRMb2NhbChUeXBl
IHR5cGUsIHVpbnQzMl90IGNvdW50KQpAQCAtMjUxLDcgKzI1Niw3IEBAIHZvaWQgQjNJUkdlbmVy
YXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgdHlwZXMpCiB7CiAgICAgQVNT
RVJUKCFtX2xvY2Fscy5zaXplKCkpOwogICAgIG1fbG9jYWxzLmdyb3codHlwZXMuc2l6ZSgpKTsK
LSAgICBqc2NDYWxsaW5nQ29udmVudGlvbigpLml0ZXJhdGUodHlwZXMsIG1fcHJvYywgbV9jdXJy
ZW50QmxvY2ssIE9yaWdpbigpLAorICAgIHdhc21DYWxsaW5nQ29udmVudGlvbigpLmxvYWRBcmd1
bWVudHModHlwZXMsIG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIE9yaWdpbigpLAogICAgICAgICBb
Jl0gKEV4cHJlc3Npb25UeXBlIGFyZ3VtZW50LCB1bnNpZ25lZCBpKSB7CiAgICAgICAgICAgICBW
YXJpYWJsZSogYXJndW1lbnRWYXJpYWJsZSA9IG1fcHJvYy5hZGRWYXJpYWJsZShhcmd1bWVudC0+
dHlwZSgpKTsKICAgICAgICAgICAgIG1fbG9jYWxzW2ldID0gYXJndW1lbnRWYXJpYWJsZTsKQEAg
LTU2MSw2ICs1NjYsMzIgQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjplbmRCbG9jayhDb250cm9sRGF0
YSYgZGF0YSwgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjaykKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXgsIGNvbnN0IEZ1bmN0aW9uSW5mb3JtYXRpb24mIGluZm8sIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgQVNTRVJUKGluZm8uc2ln
bmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpID09IGFyZ3Muc2l6ZSgpKTsKKworICAgIFR5cGUgcmV0
dXJuVHlwZSA9IGluZm8uc2lnbmF0dXJlLT5yZXR1cm5UeXBlOworCisgICAgc2l6ZV90IGNhbGxJ
bmRleCA9IG1fdW5saW5rZWRDYWxscy5zaXplKCk7CisgICAgbV91bmxpbmtlZENhbGxzLmdyb3co
Y2FsbEluZGV4ICsgMSk7CisgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0
dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIE9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShy
ZXR1cm5UeXBlKSwKKyAgICAgICAgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsK
KyAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNQaW5uZWQgPSB0cnVlOworCisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgICAgIG1fdW5saW5rZWRDYWxsc1tjYWxsSW5kZXhdID0geyBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoY2FsbCksIGZ1bmN0aW9uSW5kZXggfTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogYm9vbCBCM0lSR2VuZXJhdG9yOjppc0NvbnRpbnVhdGlvblJlYWNoYWJsZShDb250cm9sRGF0
YSYgZGF0YSkKIHsKICAgICAvLyBJZiBub3RoaW5nIHRhcmdldHMgdGhlIGNvbnRpbnVhdGlvbiBv
ZiB0aGUgY3VycmVudCBibG9jayB0aGVuIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlCkBAIC02NDIs
MTggKzY3MywyNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhdGVK
U1dyYXBwZXIoVk0mIHZtLCBjb25zdCBTaWduYXR1cmUqIHNpZwogCiAgICAgLy8gR2V0IG91ciBh
cmd1bWVudHMuCiAgICAgVmVjdG9yPFZhbHVlKj4gYXJndW1lbnRzOwotICAgIGpzY0NhbGxpbmdD
b252ZW50aW9uKCkuaXRlcmF0ZShzaWduYXR1cmUtPmFyZ3VtZW50cywgcHJvYywgYmxvY2ssIE9y
aWdpbigpLCBbJl0gKFZhbHVlKiBhcmd1bWVudCwgdW5zaWduZWQpIHsKKyAgICBqc2NDYWxsaW5n
Q29udmVudGlvbigpLmxvYWRBcmd1bWVudHMoc2lnbmF0dXJlLT5hcmd1bWVudHMsIHByb2MsIGJs
b2NrLCBPcmlnaW4oKSwgWyZdIChWYWx1ZSogYXJndW1lbnQsIHVuc2lnbmVkKSB7CiAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQpOwogICAgIH0pOwogCiAgICAgLy8gTW92ZSB0aGUg
YXJndW1lbnRzIGludG8gcGxhY2UuCi0gICAgVmFsdWUqIHJlc3VsdCA9IGpzY0NhbGxpbmdDb252
ZW50aW9uKCkuc2V0dXBDYWxsKHByb2MsIGJsb2NrLCBPcmlnaW4oKSwgbWFpbkZ1bmN0aW9uLCBh
cmd1bWVudHMsIHRvQjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSksIFsmXSAoUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50KSB7CisgICAgVmFsdWUqIHJlc3VsdCA9IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnNldHVwQ2FsbChwcm9jLCBibG9jaywgT3JpZ2luKCksIGFyZ3VtZW50cywgdG9C
M1R5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKSwgWyZdIChQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQpIHsKICAgICAgICAgaWYgKG1lbW9yeSkgewogICAgICAgICAgICAgQVNTRVJUKHNpemVz
LnNpemUoKSA9PSBtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMuc2l6ZSgp
KTsKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGJhc2VN
ZW1vcnksIFZhbHVlUmVwOjpyZWcobWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5iYXNlTWVtb3J5
UG9pbnRlcikpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplcy5z
aXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWlu
ZWRWYWx1ZShzaXplc1tpXSwgVmFsdWVSZXA6OnJlZyhtZW1vcnktPnBpbm5lZFJlZ2lzdGVycygp
LnNpemVSZWdpc3RlcnNbaV0uc2l6ZVJlZ2lzdGVyKSkpOwogICAgICAgICB9CisKKyAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobWFpbkZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKICAgICB9KTsKIAogICAgIC8v
IFJldHVybiB0aGUgcmVzdWx0LCBpZiBuZWVkZWQuCkBAIC02NjUsMTEgKzcwNSwxMyBAQCBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhdGVKU1dyYXBwZXIoVk0mIHZtLCBj
b25zdCBTaWduYXR1cmUqIHNpZwogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0
aW9uPih2bSwgcHJvYyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9u
PiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZSwgTWVtb3J5
KiBtZW1vcnksIEZ1bmN0aW9uSW5mb3JtYXRpb24gaW5mbywgdW5zaWduZWQgb3B0TGV2ZWwpCitz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2
bSwgVmVjdG9yPHVpbnQ4X3Q+JiBzb3VyY2UsIE1lbW9yeSogbWVtb3J5LCBGdW5jdGlvbkluZm9y
bWF0aW9uIGluZm8sIGNvbnN0IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYgZnVuY3Rpb25z
LCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlx
dWU8RnVuY3Rpb25Db21waWxhdGlvbj4oKTsKKwogICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7Ci0g
ICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KG1lbW9yeSwgcHJvY2VkdXJlKTsKLSAgICBGdW5jdGlv
blBhcnNlcjxCM0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgc291cmNlLCBpbmZvKTsKKyAg
ICBCM0lSR2VuZXJhdG9yIGNvbnRleHQobWVtb3J5LCBwcm9jZWR1cmUsIHJlc3VsdC0+dW5saW5r
ZWRDYWxscyk7CisgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRl
eHQsIHNvdXJjZSwgaW5mbywgZnVuY3Rpb25zKTsKICAgICBpZiAoIXBhcnNlci5wYXJzZSgpKQog
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC02NzksNyArNzIxLDYg
QEAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShW
TSYgdm0sIFZlY3Rvcjx1aW50OF90PiYgc28KICAgICBmaXhTU0EocHJvY2VkdXJlKTsKICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiUG9zdCBTU0E6ICIsIHByb2NlZHVyZSk7Ci0g
ICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0aW9uQ29tcGlsYXRpb24+KCk7
CiAKICAgICByZXN1bHQtPmNvZGUgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2bSwg
cHJvY2VkdXJlLCBvcHRMZXZlbCk7CiAgICAgcmVzdWx0LT5qc0VudHJ5UG9pbnQgPSBjcmVhdGVK
U1dyYXBwZXIodm0sIGluZm8uc2lnbmF0dXJlLCByZXN1bHQtPmNvZGUtPmNvZGUoKSwgbWVtb3J5
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01CM0lSR2VuZXJh
dG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQjNJUkdlbmVyYXRvci5oCmlu
ZGV4IGY4MjgyZDBjOTU1YzI2ZjdlN2MwMTI0NTc5N2I5OTE2ZDRkYjkwNDguLmRmYmM4M2YyMTI2
ZjkyYzdiYjY5OTIzYTllNzQ3NzQxM2NmNWU5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTUIzSVJHZW5lcmF0b3IuaApAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdBU00gewogCiBjbGFzcyBNZW1vcnk7CiAKLXN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mLCBWZWN0b3I8dWludDhf
dD4mLCBNZW1vcnkqLCBGdW5jdGlvbkluZm9ybWF0aW9uLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEp
Oworc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcnNlQW5kQ29tcGlsZShW
TSYsIFZlY3Rvcjx1aW50OF90PiYsIE1lbW9yeSosIEZ1bmN0aW9uSW5mb3JtYXRpb24sIGNvbnN0
IFZlY3RvcjxGdW5jdGlvbkluZm9ybWF0aW9uPiYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNQ2FsbGluZ0NvbnZlbnRpb24uY3BwCmluZGV4IDkxNGFlY2NmOTBkMzhi
MzNiMTlhNTg1NzE1YjZlYjkzN2FjYzAzODMuLjdhY2JiYzI3ODBlNTU3NjEzNmYxOTBkYTEzOTJj
NGVmMzQ2NGQ1YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01D
YWxsaW5nQ29udmVudGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TUNhbGxpbmdDb252ZW50aW9uLmNwcApAQCAtMzcsMTIgKzM3LDMxIEBAIGNvbnN0IEpTQ0NhbGxp
bmdDb252ZW50aW9uJiBqc2NDYWxsaW5nQ29udmVudGlvbigpCiAgICAgc3RhdGljIExhenlOZXZl
ckRlc3Ryb3llZDxKU0NDYWxsaW5nQ29udmVudGlvbj4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRp
b247CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY0pTQ0NhbGxpbmdDb252ZW50aW9u
RmxhZzsKICAgICBzdGQ6OmNhbGxfb25jZShzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbkZsYWcs
IFtdICgpIHsKLSAgICAgICAgc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb24uY29uc3RydWN0KFZl
Y3RvcjxHUFJSZWc+KCksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAg
ICAgICBzdGF0aWNKU0NDYWxsaW5nQ29udmVudGlvbi5jb25zdHJ1Y3QoVmVjdG9yPFJlZz4oKSwg
VmVjdG9yPFJlZz4oKSwgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAg
fSk7CiAKICAgICByZXR1cm4gc3RhdGljSlNDQ2FsbGluZ0NvbnZlbnRpb247CiB9CiAKK2NvbnN0
IFdBU01DYWxsaW5nQ29udmVudGlvbiYgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkKK3sKKyAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEpTQ0NhbGxpbmdDb252ZW50aW9uPiBzdGF0aWNXQVNN
Q2FsbGluZ0NvbnZlbnRpb247CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHN0YXRpY1dBU01D
YWxsaW5nQ29udmVudGlvbkZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGljV0FTTUNhbGxp
bmdDb252ZW50aW9uRmxhZywgW10gKCkgeworICAgICAgICBWZWN0b3I8UmVnPiBncHJBcmd1bWVu
dFJlZ2lzdGVycyhHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3Rl
cnM7ICsraSkKKyAgICAgICAgICAgIGdwckFyZ3VtZW50UmVnaXN0ZXJzW2ldID0gR1BSSW5mbzo6
dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOworCisgICAgICAgIFZlY3RvcjxSZWc+IGZwckFyZ3VtZW50
UmVnaXN0ZXJzKEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVy
czsgKytpKQorICAgICAgICAgICAgZnByQXJndW1lbnRSZWdpc3RlcnNbaV0gPSBGUFJJbmZvOjp0
b0FyZ3VtZW50UmVnaXN0ZXIoaSk7CisKKyAgICAgICAgc3RhdGljV0FTTUNhbGxpbmdDb252ZW50
aW9uLmNvbnN0cnVjdChXVEZNb3ZlKGdwckFyZ3VtZW50UmVnaXN0ZXJzKSwgV1RGTW92ZShmcHJB
cmd1bWVudFJlZ2lzdGVycyksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwor
ICAgIH0pOworCisgICAgcmV0dXJuIHN0YXRpY1dBU01DYWxsaW5nQ29udmVudGlvbjsKK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OldBU00KIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQ2FsbGluZ0NvbnZlbnRp
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5o
CmluZGV4IDYxMzVmNzM3MDVhZTliNmJhMDAwNDlmNGMyMDY0ZWQ5ZWE3ZTUwYjEuLjVjMGViZWI5
MjUwOWQwMDA0Y2I3ZTQ4YTJmYzViNGM3OTVlMjhiNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01DYWxsaW5nQ29udmVudGlvbi5oCkBAIC00OCw2MSArNDgsOTEg
QEAgdHlwZWRlZiB1bnNpZ25lZCAoKk5leHRPZmZzZXQpKHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQs
IEIzOjpUeXBlIHR5cGUpOwogdGVtcGxhdGU8dW5zaWduZWQgaGVhZGVyU2l6ZSwgTmV4dE9mZnNl
dCB1cGRhdGVPZmZzZXQ+CiBjbGFzcyBDYWxsaW5nQ29udmVudGlvbiB7CiBwdWJsaWM6Ci0gICAg
Q2FsbGluZ0NvbnZlbnRpb24oVmVjdG9yPEdQUlJlZz4mJiByZWdpc3RlckFyZ3VtZW50cywgUmVn
aXN0ZXJTZXQmJiBjYWxsZWVTYXZlUmVnaXN0ZXJzKQotICAgICAgICA6IG1fcmVnaXN0ZXJBcmd1
bWVudHMocmVnaXN0ZXJBcmd1bWVudHMpCisgICAgQ2FsbGluZ0NvbnZlbnRpb24oVmVjdG9yPFJl
Zz4mJiBncFJlZ2lzdGVyQXJndW1lbnRzLCBWZWN0b3I8UmVnPiYmIGZwUmVnaXN0ZXJBcmd1bWVu
dHMsIFJlZ2lzdGVyU2V0JiYgY2FsbGVlU2F2ZVJlZ2lzdGVycykKKyAgICAgICAgOiBtX2dwUmVn
aXN0ZXJBcmd1bWVudHMoZ3BSZWdpc3RlckFyZ3VtZW50cykKKyAgICAgICAgLCBtX2ZwUmVnaXN0
ZXJBcmd1bWVudHMoZnBSZWdpc3RlckFyZ3VtZW50cykKICAgICAgICAgLCBtX2NhbGxlZVNhdmVS
ZWdpc3RlcnMoY2FsbGVlU2F2ZVJlZ2lzdGVycykKICAgICB7CiAgICAgfQogCitwcml2YXRlOgor
ICAgIEIzOjpWYWx1ZVJlcCBtYXJzaGFsbEFyZ3VtZW50SW1wbChWZWN0b3I8UmVnPiByZWdpc3Rl
ckFyZ3VtZW50cywgQjM6OlR5cGUgdHlwZSwgc2l6ZV90JiBjb3VudCwgc2l6ZV90JiBzdGFja09m
ZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IHJlZ2lzdGVyQXJndW1lbnRz
LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBCMzo6VmFsdWVSZXA6OnJlZyhyZWdpc3RlckFy
Z3VtZW50c1tjb3VudCsrXSk7CisKKyAgICAgICAgY291bnQrKzsKKyAgICAgICAgQjM6OlZhbHVl
UmVwIHJlc3VsdCA9IEIzOjpWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChzdGFja09mZnNldCk7Cisg
ICAgICAgIHN0YWNrT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KHN0YWNrT2Zmc2V0LCB0eXBlKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBCMzo6VmFsdWVSZXAgbWFyc2hhbGxB
cmd1bWVudChCMzo6VHlwZSB0eXBlLCBzaXplX3QmIGdwQXJndW1lbnRDb3VudCwgc2l6ZV90JiBm
cEFyZ3VtZW50Q291bnQsIHNpemVfdCYgc3RhY2tPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBCMzo6SW50MzI6CisgICAgICAgIGNhc2Ug
QjM6OkludDY0OgorICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWxsQXJndW1lbnRJbXBsKG1fZ3BS
ZWdpc3RlckFyZ3VtZW50cywgdHlwZSwgZ3BBcmd1bWVudENvdW50LCBzdGFja09mZnNldCk7Cisg
ICAgICAgIGNhc2UgQjM6OkZsb2F0OgorICAgICAgICBjYXNlIEIzOjpEb3VibGU6CisgICAgICAg
ICAgICByZXR1cm4gbWFyc2hhbGxBcmd1bWVudEltcGwobV9mcFJlZ2lzdGVyQXJndW1lbnRzLCB0
eXBlLCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBWb2lkOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKK3B1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgotICAgIHZvaWQgaXRlcmF0ZShjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3VtZW50VHlwZXMs
IEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpCYXNpY0Jsb2NrKiBibG9jaywgQjM6Ok9yaWdpbiBv
cmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgdm9pZCBsb2FkQXJndW1l
bnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRUeXBlcywgQjM6OlByb2NlZHVyZSYgcHJv
YywgQjM6OkJhc2ljQmxvY2sqIGJsb2NrLCBCMzo6T3JpZ2luIG9yaWdpbiwgY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikgY29uc3QKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQg
PSBoZWFkZXJTaXplOwogICAgICAgICBCMzo6VmFsdWUqIGZyYW1lUG9pbnRlciA9IGJsb2NrLT5h
cHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBvcmlnaW4pOwogCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudFR5cGVzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHNpemVfdCBncEFyZ3VtZW50Q291bnQgPSAwOworICAgICAgICBzaXplX3Qg
ZnBBcmd1bWVudENvdW50ID0gMDsKKyAgICAgICAgc2l6ZV90IHN0YWNrT2Zmc2V0ID0gaGVhZGVy
U2l6ZTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50VHlwZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEIzOjpUeXBlIHR5cGUgPSB0b0IzVHlwZShhcmd1bWVu
dFR5cGVzW2ldKTsKICAgICAgICAgICAgIEIzOjpWYWx1ZSogYXJndW1lbnQ7Ci0gICAgICAgICAg
ICBpZiAoaSA8IG1fcmVnaXN0ZXJBcmd1bWVudHMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIGFy
Z3VtZW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgb3Jp
Z2luLCBtX3JlZ2lzdGVyQXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgQjM6OlZhbHVlUmVwIHJlcCA9IG1hcnNoYWxsQXJndW1lbnQodHlwZSwgZ3BBcmd1bWVu
dENvdW50LCBmcEFyZ3VtZW50Q291bnQsIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChy
ZXAuaXNSZWcoKSkgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gYmxvY2stPmFwcGVuZE5l
dzxCMzo6QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgb3JpZ2luLCByZXAucmVnKCkpOworICAgICAg
ICAgICAgICAgIGlmICh0eXBlID09IEIzOjpJbnQzMikKKyAgICAgICAgICAgICAgICAgICAgYXJn
dW1lbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OlRydW5jLCBvcmln
aW4sIGFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSG93IGRvIEkgZ2V0IGEg
ZmxvYXQgZnJvbSBhIEZQUj8gV2UgZG9uJ3Qgc3VwcG9ydCBmbG9hdGluZyBwb2ludHMgeWV0IHNv
IGl0J3Mgbm90IGEgYmlnIGRlYWwuLi4geWV0LgorICAgICAgICAgICAgICAgIC8vIHNlZTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzc3MAorICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVwLmlzU3RhY2tBcmd1bWVudCgpKTsK
ICAgICAgICAgICAgICAgICBCMzo6VmFsdWUqIGFkZHJlc3MgPSBibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4ocHJvYywgQjM6OkFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsCi0gICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2lu
LCBjdXJyZW50T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBibG9jay0+YXBw
ZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4ocHJvYywgQjM6OkxvYWQsIHRvQjNUeXBlKGFyZ3VtZW50
VHlwZXNbaV0pLCBvcmlnaW4sIGFkZHJlc3MpOwotICAgICAgICAgICAgICAgIGN1cnJlbnRPZmZz
ZXQgPSB1cGRhdGVPZmZzZXQoY3VycmVudE9mZnNldCwgdG9CM1R5cGUoYXJndW1lbnRUeXBlc1tp
XSkpOworICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFs
dWU+KHByb2MsIG9yaWdpbiwgcmVwLm9mZnNldEZyb21TUCgpKSk7CisgICAgICAgICAgICAgICAg
YXJndW1lbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4ocHJvYywgQjM6Okxv
YWQsIHR5cGUsIG9yaWdpbiwgYWRkcmVzcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBm
dW5jdG9yKGFyZ3VtZW50LCBpKTsKICAgICAgICAgfQogICAgIH0KIAorICAgIC8vIEl0J3MgZXhw
ZWN0ZWQgdGhhdCB0aGUgcGFjaHBvaW50RnVuY3RvciBzZXRzIHRoZSBnZW5lcmF0b3IgZm9yIHRo
ZSBjYWxsIG9wZXJhdGlvbi4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIEIz
OjpWYWx1ZSogc2V0dXBDYWxsKEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpCYXNpY0Jsb2NrKiBi
bG9jaywgQjM6Ok9yaWdpbiBvcmlnaW4sIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQsIGNv
bnN0IFZlY3RvcjxCMzo6VmFsdWUqPiYgYXJndW1lbnRzLCBCMzo6VHlwZSByZXR1cm5UeXBlLCBj
b25zdCBGdW5jdG9yJiBwYXRjaHBvaW50RnVuY3RvcikgY29uc3QKKyAgICBCMzo6VmFsdWUqIHNl
dHVwQ2FsbChCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6QmFzaWNCbG9jayogYmxvY2ssIEIzOjpP
cmlnaW4gb3JpZ2luLCBjb25zdCBWZWN0b3I8QjM6OlZhbHVlKj4mIGFyZ3VtZW50cywgQjM6OlR5
cGUgcmV0dXJuVHlwZSwgY29uc3QgRnVuY3RvciYgcGF0Y2hwb2ludEZ1bmN0b3IpIGNvbnN0CiAg
ICAgewotICAgICAgICBzaXplX3Qgc3RhY2tBcmd1bWVudENvdW50ID0gYXJndW1lbnRzLnNpemUo
KSA8IG1fcmVnaXN0ZXJBcmd1bWVudHMuc2l6ZSgpID8gMCA6IGFyZ3VtZW50cy5zaXplKCkgLSBt
X3JlZ2lzdGVyQXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gaGVh
ZGVyU2l6ZSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKyAgICAgICAgc2l6ZV90IGdwQXJn
dW1lbnRDb3VudCA9IDA7CisgICAgICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOworICAg
ICAgICBzaXplX3Qgc3RhY2tPZmZzZXQgPSBoZWFkZXJTaXplIC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpOwogCi0gICAgICAgIHByb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZUluQnl0ZXMoV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgaGVhZGVyU2l6ZSAr
IChzdGFja0FyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgICAgICBWZWN0
b3I8QjM6OkNvbnN0cmFpbmVkVmFsdWU+IGNvbnN0cmFpbmVkQXJndW1lbnRzOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBCMzo6VmFsdWVSZXAgcmVwOwotICAgICAgICAgICAgaWYgKGkgPCBtX3JlZ2lzdGVyQXJn
dW1lbnRzLnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXAgPSBCMzo6VmFsdWVSZXA6OnJlZyht
X3JlZ2lzdGVyQXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICByZXAgPSBCMzo6VmFsdWVSZXA6OnN0YWNrQXJndW1lbnQob2Zmc2V0KTsKLSAgICAgICAgICAg
IGNvbnN0cmFpbmVkQXJndW1lbnRzLmFwcGVuZChCMzo6Q29uc3RyYWluZWRWYWx1ZShhcmd1bWVu
dHNbaV0sIHJlcCkpOwotICAgICAgICAgICAgb2Zmc2V0ID0gdXBkYXRlT2Zmc2V0KG9mZnNldCwg
YXJndW1lbnRzW2ldLT50eXBlKCkpOworICAgICAgICBmb3IgKEIzOjpWYWx1ZSogYXJndW1lbnQg
OiBhcmd1bWVudHMpIHsKKyAgICAgICAgICAgIEIzOjpWYWx1ZVJlcCByZXAgPSBtYXJzaGFsbEFy
Z3VtZW50KGFyZ3VtZW50LT50eXBlKCksIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50
LCBzdGFja09mZnNldCk7CisgICAgICAgICAgICBjb25zdHJhaW5lZEFyZ3VtZW50cy5hcHBlbmQo
QjM6OkNvbnN0cmFpbmVkVmFsdWUoYXJndW1lbnQsIHJlcCkpOwogICAgICAgICB9CiAKKyAgICAg
ICAgcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplSW5CeXRlcyhXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzdGFja09mZnNldCkpOworCiAgICAgICAgIEIz
OjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRj
aHBvaW50VmFsdWU+KHByb2MsIHJldHVyblR5cGUsIG9yaWdpbik7CisgICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXJFYXJseShSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwor
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdp
c3RlcnNGb3JKU0NhbGwoKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFZlY3Rvcihjb25z
dHJhaW5lZEFyZ3VtZW50cyk7CiAgICAgICAgIHBhdGNocG9pbnRGdW5jdG9yKHBhdGNocG9pbnQp
OwotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLQotICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cih0YXJnZXQuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwogCiAgICAgICAgIGlm
IChyZXR1cm5UeXBlID09IEIzOjpWb2lkKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC0xMTEsNyArMTQxLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKICAg
ICB9CiAKLSAgICBjb25zdCBWZWN0b3I8R1BSUmVnPiBtX3JlZ2lzdGVyQXJndW1lbnRzOworICAg
IGNvbnN0IFZlY3RvcjxSZWc+IG1fZ3BSZWdpc3RlckFyZ3VtZW50czsKKyAgICBjb25zdCBWZWN0
b3I8UmVnPiBtX2ZwUmVnaXN0ZXJBcmd1bWVudHM7CiAgICAgY29uc3QgUmVnaXN0ZXJTZXQgbV9j
YWxsZWVTYXZlUmVnaXN0ZXJzOwogICAgIGNvbnN0IFJlZ2lzdGVyU2V0IG1fY2FsbGVyU2F2ZVJl
Z2lzdGVyczsKIH07CkBAIC0xMjQsNyArMTU1LDEwIEBAIGlubGluZSB1bnNpZ25lZCBuZXh0SlND
T2Zmc2V0KHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQsIEIzOjpUeXBlKQogY29uc3RleHByIHVuc2ln
bmVkIGpzY0hlYWRlclNpemUgPSBFeGVjU3RhdGU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNp
emVvZihSZWdpc3Rlcik7CiB0eXBlZGVmIENhbGxpbmdDb252ZW50aW9uPGpzY0hlYWRlclNpemUs
IG5leHRKU0NPZmZzZXQ+IEpTQ0NhbGxpbmdDb252ZW50aW9uOwogCit0eXBlZGVmIEpTQ0NhbGxp
bmdDb252ZW50aW9uIFdBU01DYWxsaW5nQ29udmVudGlvbjsKKwogY29uc3QgSlNDQ2FsbGluZ0Nv
bnZlbnRpb24mIGpzY0NhbGxpbmdDb252ZW50aW9uKCk7Citjb25zdCBXQVNNQ2FsbGluZ0NvbnZl
bnRpb24mIHdhc21DYWxsaW5nQ29udmVudGlvbigpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V0FTTQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmgKaW5kZXggMWUxMDgx
MGQzZmY2ZWUwYTg3NjRiMzJiMzZlODA1NmRkMzQ1YTZjMy4uYWM0NmZmMzVhZGZhYjIwNmZjOGYy
ZDcwNGFlNTQ3NTllMGVkYWNlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3Jt
YXQuaApAQCAtNDYsNiArNDYsNyBAQAogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2lu
Y2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTI3LDcg
KzEyOCwxMyBAQCBzdHJ1Y3QgRnVuY3Rpb25JbmZvcm1hdGlvbiB7CiAgICAgc2l6ZV90IGVuZDsK
IH07CiAKK3N0cnVjdCBVbmxpbmtlZENhbGwgeworICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbExv
Y2F0aW9uOworICAgIHNpemVfdCBmdW5jdGlvbkluZGV4OworfTsKKwogc3RydWN0IEZ1bmN0aW9u
Q29tcGlsYXRpb24geworICAgIFZlY3RvcjxVbmxpbmtlZENhbGw+IHVubGlua2VkQ2FsbHM7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4gY29kZTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBqc0VudHJ5UG9pbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaAppbmRleCA0NDcxYTJjZjU3MTc4
MTgyNTk1MjQyZDAzOTRmNDc2OWU3OWUzYmM3Li40NTJlMjhiNTY5OTJiNWRhYmM3NzA5NjNkNWFk
ODQ3NDAwNmM2Yjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
RnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVu
Y3Rpb25QYXJzZXIuaApAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiB0eXBl
bmFtZSBDb250ZXh0OjpFeHByZXNzaW9uVHlwZSBFeHByZXNzaW9uVHlwZTsKICAgICB0eXBlZGVm
IHR5cGVuYW1lIENvbnRleHQ6OkNvbnRyb2xUeXBlIENvbnRyb2xUeXBlOwogCi0gICAgRnVuY3Rp
b25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBj
b25zdCBGdW5jdGlvbkluZm9ybWF0aW9uJik7CisgICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc291cmNlQnVmZmVyLCBjb25zdCBGdW5jdGlvbkluZm9y
bWF0aW9uJiwgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMpOwog
CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIApAQCAtNjAsMTQgKzYwLDE2
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlLCAxPiBtX2V4cHJlc3Npb25T
dGFjazsKICAgICBWZWN0b3I8Q29udHJvbFR5cGU+IG1fY29udHJvbFN0YWNrOwogICAgIGNvbnN0
IFNpZ25hdHVyZSYgbV9zaWduYXR1cmU7CisgICAgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3Jt
YXRpb24+JiBtX2Z1bmN0aW9uczsKICAgICB1bnNpZ25lZCBtX3VucmVhY2hhYmxlQmxvY2tzIHsg
MCB9OwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29udGV4dD4KLUZ1bmN0aW9uUGFyc2VyPENv
bnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIHNvdXJjZUJ1ZmZlciwgY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbykKK0Z1
bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBWZWN0b3I8dWludDhfdD4mIHNvdXJjZUJ1ZmZlciwgY29uc3QgRnVuY3Rpb25JbmZvcm1h
dGlvbiYgaW5mbywgY29uc3QgVmVjdG9yPEZ1bmN0aW9uSW5mb3JtYXRpb24+JiBmdW5jdGlvbnMp
CiAgICAgOiBQYXJzZXIoc291cmNlQnVmZmVyLCBpbmZvLnN0YXJ0LCBpbmZvLmVuZCkKICAgICAs
IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaWduYXR1cmUoKmluZm8uc2lnbmF0dXJlKQor
ICAgICwgbV9mdW5jdGlvbnMoZnVuY3Rpb25zKQogewogICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICBkYXRhTG9nTG4oIlBhcnNpbmcgZnVuY3Rpb24gc3RhcnRpbmcgYXQ6ICIsIGluZm8uc3RhcnQs
ICIgZW5kaW5nIGF0OiAiLCBpbmZvLmVuZCk7CkBAIC0xMDEsOCArMTAzLDExIEBAIGJvb2wgRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlQmxvY2soKQogewogICAgIHdoaWxlICh0cnVlKSB7
CiAgICAgICAgIHVpbnQ4X3Qgb3A7Ci0gICAgICAgIGlmICghcGFyc2VVSW50NyhvcCkgfHwgIWlz
VmFsaWRPcFR5cGUob3ApKQorICAgICAgICBpZiAoIXBhcnNlVUludDcob3ApIHx8ICFpc1ZhbGlk
T3BUeXBlKG9wKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
V1RGOjpkYXRhTG9nTG4oImF0dGVtcHRlZCB0byBkZWNvZGUgaW52YWxpZCBvcDogIiwgUmF3UG9p
bnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihvcCkpLCAiIGF0IG9mZnNldDogIiwgUmF3UG9p
bnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX29mZnNldCkpKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAg
ICAgICBkYXRhTG9nTG4oInByb2Nlc3Npbmcgb3AgKCIsIG1fdW5yZWFjaGFibGVCbG9ja3MsICIp
OiAiLCAgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihvcCkpLCAiIGF0IG9mZnNl
dDogIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX29mZnNldCkpKTsKQEAg
LTE5Myw2ICsxOTgsMTQgQEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHBy
ZXNzaW9uKE9wVHlwZSBvcCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgY2Fz
ZSBPcFR5cGU6Okk2NENvbnN0OiB7CisgICAgICAgIHVpbnQ2NF90IGNvbnN0YW50OworICAgICAg
ICBpZiAoIXBhcnNlVmFyVUludDY0KGNvbnN0YW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKG1fY29udGV4dC5hZGRDb25zdGFu
dChJNjQsIGNvbnN0YW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGNh
c2UgT3BUeXBlOjpHZXRMb2NhbDogewogICAgICAgICB1aW50MzJfdCBpbmRleDsKICAgICAgICAg
aWYgKCFwYXJzZVZhclVJbnQzMihpbmRleCkpCkBAIC0yMTMsNiArMjI2LDMwIEBAIGJvb2wgRnVu
Y3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbihPcFR5cGUgb3ApCiAgICAgICAg
IHJldHVybiBtX2NvbnRleHQuc2V0TG9jYWwoaW5kZXgsIHZhbHVlKTsKICAgICB9CiAKKyAgICBj
YXNlIE9wVHlwZTo6Q2FsbDogeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OworICAg
ICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uSW5kZXgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGlmIChmdW5jdGlvbkluZGV4ID49IG1fZnVuY3Rpb25zLnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjb25zdCBGdW5jdGlv
bkluZm9ybWF0aW9uJiBpbmZvID0gbV9mdW5jdGlvbnNbZnVuY3Rpb25JbmRleF07CisKKyAgICAg
ICAgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiBhcmdzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5mby5zaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKG1fZXhwcmVzc2lvblN0YWNrLnRha2VMYXN0KCkpOworCisgICAgICAg
IEV4cHJlc3Npb25UeXBlIHJlc3VsdCA9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbjsKKyAgICAg
ICAgaWYgKCFtX2NvbnRleHQuYWRkQ2FsbChmdW5jdGlvbkluZGV4LCBpbmZvLCBhcmdzLCByZXN1
bHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChyZXN1bHQgIT0g
Q29udGV4dDo6ZW1wdHlFeHByZXNzaW9uKQorICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2su
YXBwZW5kKHJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgY2Fz
ZSBPcFR5cGU6OkJsb2NrOiB7CiAgICAgICAgIFR5cGUgaW5saW5lU2lnbmF0dXJlOwogICAgICAg
ICBpZiAoIXBhcnNlVmFsdWVUeXBlKGlubGluZVNpZ25hdHVyZSkpCkBAIC0yODEsMTIgKzMxOCwx
MiBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24oT3BUeXBl
IG9wKQogICAgIGNhc2UgT3BUeXBlOjpCclRhYmxlOgogICAgIGNhc2UgT3BUeXBlOjpOb3A6CiAg
ICAgY2FzZSBPcFR5cGU6OkRyb3A6Ci0gICAgY2FzZSBPcFR5cGU6Okk2NENvbnN0OgogICAgIGNh
c2UgT3BUeXBlOjpGMzJDb25zdDoKICAgICBjYXNlIE9wVHlwZTo6RjY0Q29uc3Q6CiAgICAgY2Fz
ZSBPcFR5cGU6OlRlZUxvY2FsOgogICAgIGNhc2UgT3BUeXBlOjpHZXRHbG9iYWw6CiAgICAgY2Fz
ZSBPcFR5cGU6OlNldEdsb2JhbDoKKyAgICBjYXNlIE9wVHlwZTo6Q2FsbEluZGlyZWN0OgogICAg
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1
bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNl
ci5jcHAKaW5kZXggZGNkZTc0Y2MxYTUxNGIzMzBjOGZmMWQ3NmRlNzNlYjExY2YxNDMyZi4uMGU3
OTZiZjgzOWFlYWM2MWI2NWI3NmFhMjYyMmUzZDJlMTExMzQwZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAg
Ym9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gcmVhZCB1cCB0byB0aGUgc2VjdGlv
bidzIHNpemUuCi0gICAgICAgICAgICBpZiAobV9vZmZzZXQgKyBzZWN0aW9uTmFtZUxlbmd0aCAr
IG1heExFQkJ5dGVMZW5ndGggPj0gbV9zb3VyY2VMZW5ndGgpCisgICAgICAgICAgICBpZiAobV9v
ZmZzZXQgKyBzZWN0aW9uTmFtZUxlbmd0aCArIFdURjo6TEVCRGVjb2Rlcjo6bWF4MzJCaXRMRUJC
eXRlTGVuZ3RoID49IG1fc291cmNlTGVuZ3RoKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBhbnkgY3VzdG9tIHNlY3Rpb25z
IHlldC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01PcHMuaAppbmRleCA2ZDM0ODhjZjQ5ODA0
MzNlOTA0YmFlMDA1NDQ0ODM3Y2FkMDAyZTRhLi42NmY3Mjg5NGI1ZjhiYmIyMGY4YjhlMDE3N2Qx
MjhkYzc3MWFiYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
T3BzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU9wcy5oCkBAIC00Miw3
ICs0Miw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV0FTTSB7CiAgICAgbWFjcm8oU2V0
TG9jYWwsIDB4MTUsIE9vcHMpIFwKICAgICBtYWNybyhUZWVMb2NhbCwgMHgxOSwgT29wcykgXAog
ICAgIG1hY3JvKEdldEdsb2JhbCwgMHhiYiwgT29wcykgXAotICAgIG1hY3JvKFNldEdsb2JhbCwg
MHhiYywgT29wcykKKyAgICBtYWNybyhTZXRHbG9iYWwsIDB4YmMsIE9vcHMpIFwKKyAgICBtYWNy
byhDYWxsLCAweDE2LCBPb3BzKSBcCisgICAgbWFjcm8oQ2FsbEluZGlyZWN0LCAweDE3LCBPb3Bz
KQogCiAjZGVmaW5lIEZPUl9FQUNIX1dBU01fQ09OVFJPTF9GTE9XX09QKG1hY3JvKSBcCiAgICAg
bWFjcm8oVW5yZWFjaGFibGUsIDB4MCwgT29wcykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTVBhcnNlci5oCmluZGV4IDUzNjliNmY4ZGFiNWJjMDY2NTExOWJjYzUwNTBmNWM3NTNjMzQx
YjMuLjFiNzkxODZmNWVkN2E1OWE5NmQ2MDIzZTU1YWMwNGMwZjVmZWMyOGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNUGFyc2VyLmgKQEAgLTQ2LDcgKzQ2LDggQEAgcHJvdGVjdGVk
OgogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUludDEodWludDhfdCYgcmVz
dWx0KTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVVJbnQ3KHVpbnQ4X3QmIHJl
c3VsdCk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVSW50MzIodWludDMyX3Qm
IHJlc3VsdCk7Ci0gICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VWYXJVSW50MzIodWlu
dDMyX3QmIHJlc3VsdCkgeyByZXR1cm4gZGVjb2RlVUludDMyKG1fc291cmNlLmRhdGEoKSwgbV9z
b3VyY2VMZW5ndGgsIG1fb2Zmc2V0LCByZXN1bHQpOyB9CisgICAgYm9vbCBXQVJOX1VOVVNFRF9S
RVRVUk4gcGFyc2VWYXJVSW50MzIodWludDMyX3QmIHJlc3VsdCkgeyByZXR1cm4gV1RGOjpMRUJE
ZWNvZGVyOjpkZWNvZGVVSW50MzIobV9zb3VyY2UuZGF0YSgpLCBtX3NvdXJjZUxlbmd0aCwgbV9v
ZmZzZXQsIHJlc3VsdCk7IH0KKyAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJ
bnQ2NCh1aW50NjRfdCYgcmVzdWx0KSB7IHJldHVybiBXVEY6OkxFQkRlY29kZXI6OmRlY29kZVVJ
bnQ2NChtX3NvdXJjZS5kYXRhKCksIG1fc291cmNlTGVuZ3RoLCBtX29mZnNldCwgcmVzdWx0KTsg
fQogCiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhbHVlVHlwZShUeXBlJiBy
ZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBsYW4u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVBsYW4uY3BwCmluZGV4IGEwODM3
Mzg1ODRkNTY2OTI2YTI1MjJkYjkxY2Q2Yzk0ZjhlNmE2MGIuLmJhMjk4ZmY1NTExZmM1ZjdjYjA1
YzdjM2NkODI1YjYyMzY0MWM0OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01QbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUGxh
bi5jcHAKQEAgLTU0LDggKzU0LDE2IEBAIFBsYW46OlBsYW4oVk0mIHZtLCBWZWN0b3I8dWludDhf
dD4gc291cmNlKQogICAgIGZvciAoY29uc3QgRnVuY3Rpb25JbmZvcm1hdGlvbiYgaW5mbyA6IG1v
ZHVsZVBhcnNlci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpIHsKICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nTG4oIlByb2Nlc3NpbmcgZnVuY2lvbiBzdGFydGluZyBhdDog
IiwgaW5mby5zdGFydCwgIiBhbmQgZW5kaW5nIGF0OiAiLCBpbmZvLmVuZCk7Ci0gICAgICAgIHJl
c3VsdC5hcHBlbmQocGFyc2VBbmRDb21waWxlKHZtLCBzb3VyY2UsIG1vZHVsZVBhcnNlci5tZW1v
cnkoKS5nZXQoKSwgaW5mbykpOworICAgICAgICByZXN1bHQuYXBwZW5kKHBhcnNlQW5kQ29tcGls
ZSh2bSwgc291cmNlLCBtb2R1bGVQYXJzZXIubWVtb3J5KCkuZ2V0KCksIGluZm8sIG1vZHVsZVBh
cnNlci5mdW5jdGlvbkluZm9ybWF0aW9uKCkpKTsKICAgICB9CisKKyAgICAvLyBQYXRjaCB0aGUg
Y2FsbCBzaXRlcyBmb3IgZWFjaCBmdW5jdGlvbi4KKyAgICBmb3IgKHN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvbXBpbGF0aW9uPiYgZnVuY3Rpb25QdHIgOiByZXN1bHQpIHsKKyAgICAgICAgRnVu
Y3Rpb25Db21waWxhdGlvbiogZnVuY3Rpb24gPSBmdW5jdGlvblB0ci5nZXQoKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBjYWxsIDogZnVuY3Rpb24tPnVubGlua2VkQ2FsbHMpCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsKHJlc3VsdFtjYWxsLmZ1bmN0aW9uSW5kZXhdLT5jb2RlLT5jb2RlKCkpKTsKKyAgICB9
CisKICAgICBtZW1vcnkgPSBXVEZNb3ZlKG1vZHVsZVBhcnNlci5tZW1vcnkoKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0xFQkRlY29kZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0xF
QkRlY29kZXIuaAppbmRleCAzNmRjY2EyZGIwYzQ2YWZiZTMxYzhjMTA4OGNlM2E4YWNlMjExYmMz
Li4xNjUwYTIzYmVmZmJlZDIzZDk5ZGQ4MjJhOWQzZDBhNmQzZGIyNGZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9MRUJEZWNvZGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvTEVCRGVjb2Rl
ci5oCkBAIC0zMiwxNCArMzIsMTUgQEAKIC8vIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcv
d2lraS9MRUIxMjggZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAvLyBMRUIgZm9ybWF0
LgogCi1jb25zdCBzaXplX3QgbWF4TEVCQnl0ZUxlbmd0aCA9IDU7CituYW1lc3BhY2UgV1RGIHsg
bmFtZXNwYWNlIExFQkRlY29kZXIgewogCi1pbmxpbmUgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4g
ZGVjb2RlVUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3Qm
IG9mZnNldCwgdWludDMyX3QmIHJlc3VsdCkKK3RlbXBsYXRlPHNpemVfdCBtYXhCeXRlTGVuZ3Ro
LCB0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZVVJbnQo
Y29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgb2Zmc2V0LCBUJiBy
ZXN1bHQpCiB7CiAgICAgQVNTRVJUKGxlbmd0aCA+IG9mZnNldCk7CiAgICAgcmVzdWx0ID0gMDsK
ICAgICB1bnNpZ25lZCBzaGlmdCA9IDA7Ci0gICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1pbihtYXhM
RUJCeXRlTGVuZ3RoLCBsZW5ndGggLSBvZmZzZXQgLSAxKTsKKyAgICBzaXplX3QgbGFzdCA9IHN0
ZDo6bWluKG1heEJ5dGVMZW5ndGgsIGxlbmd0aCAtIG9mZnNldCAtIDEpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IHRydWU7ICsraSkgewogICAgICAgICB1aW50OF90IGJ5dGUgPSBieXRlc1tv
ZmZzZXQrK107CiAgICAgICAgIHJlc3VsdCB8PSAoYnl0ZSAmIDB4N2YpIDw8IHNoaWZ0OwpAQCAt
NTMsMTIgKzU0LDI1IEBAIGlubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVVSW50
MzIoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK2NvbnN0IHNpemVfdCBtYXgzMkJpdExFQkJ5dGVMZW5ndGggPSA1OworY29uc3Qgc2l6
ZV90IG1heDY0Qml0TEVCQnl0ZUxlbmd0aCA9IDEwOworCitpbmxpbmUgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gZGVjb2RlVUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3Ro
LCBzaXplX3QmIG9mZnNldCwgdWludDMyX3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2Rl
VUludDxtYXgzMkJpdExFQkJ5dGVMZW5ndGgsIHVpbnQzMl90PihieXRlcywgbGVuZ3RoLCBvZmZz
ZXQsIHJlc3VsdCk7Cit9CisKK2lubGluZSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVV
SW50NjQoY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgb2Zmc2V0
LCB1aW50NjRfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVVSW50PG1heDY0Qml0TEVC
Qnl0ZUxlbmd0aCwgdWludDY0X3Q+KGJ5dGVzLCBsZW5ndGgsIG9mZnNldCwgcmVzdWx0KTsKK30K
KwogaW5saW5lIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUludDMyKGNvbnN0IHVpbnQ4
X3QqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIG9mZnNldCwgaW50MzJfdCYgcmVzdWx0
KQogewogICAgIEFTU0VSVChsZW5ndGggPiBvZmZzZXQpOwogICAgIHJlc3VsdCA9IDA7CiAgICAg
dW5zaWduZWQgc2hpZnQgPSAwOwotICAgIHNpemVfdCBsYXN0ID0gc3RkOjptaW4obWF4TEVCQnl0
ZUxlbmd0aCwgbGVuZ3RoIC0gb2Zmc2V0IC0gMSk7CisgICAgc2l6ZV90IGxhc3QgPSBzdGQ6Om1p
bihtYXgzMkJpdExFQkJ5dGVMZW5ndGgsIGxlbmd0aCAtIG9mZnNldCAtIDEpOwogICAgIHVpbnQ4
X3QgYnl0ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyB0cnVlOyArK2kpIHsKICAgICAgICAg
Ynl0ZSA9IGJ5dGVzW29mZnNldCsrXTsKQEAgLTc0LDMgKzg4LDUgQEAgaW5saW5lIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGRlY29kZUludDMyKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3Qg
bGVuZ3RoLAogICAgICAgICByZXN1bHQgfD0gKCgtMXUpIDw8IHNoaWZ0KTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KKworfSB9IC8vIFdURjo6TEVCRGVjb2RlcgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9D
aGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBjYTgzMWIzZWEwZmU3NGU0MDk2YWNk
N2UxMTBiNDY2M2VlYWJjMTM0Li5lMjEwOTZiYWJkOWYzZmE1YTVhODQwNWUyMWVkM2ZmYzRlZWI0
NjJjIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDE2LTEwLTIwICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxs
ZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBXQVNNIGNhbGxzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3MjcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbWVtYmVycyBv
ZiB0aGUgQ2FsbCBjYXRlZ29yeSB0byB0aGUgV0FTTU9wcyBzcGVjaWFsIGdyb3VwLgorCisgICAg
ICAgICogd2FzbS9nZW5lcmF0ZS13YXNtb3BzLWhlYWRlci5qczoKKwogMjAxNi0xMC0xOCAgQ2Fp
dGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtKU0NdIEVTNiBNZXRo
b2QgZnVuY3Rpb25zIHNob3VsZCBub3QgaGF2ZSBwcm90b3R5cGUKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9nZW5lcmF0ZS13YXNtb3BzLWhlYWRlci5qcyBiL0pTVGVzdHMvd2FzbS9nZW5lcmF0
ZS13YXNtb3BzLWhlYWRlci5qcwppbmRleCA3Mzg1YmJmMTYxOTQ4ZGNiMmMwYjkzNzkwMTkwYWNk
Njc4NGYzOGVhLi5iOWE0MjUyOWZlNTBmYTQ2OGM4NGUyYjdhMjExODNiZmMwNjRlZjk0IDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3dhc20vZ2VuZXJhdGUtd2FzbW9wcy1oZWFkZXIuanMKKysrIGIvSlNU
ZXN0cy93YXNtL2dlbmVyYXRlLXdhc21vcHMtaGVhZGVyLmpzCkBAIC0yOSw3ICsyOSw3IEBAIGZ1
bmN0aW9uKiBvcGNvZGVNYWNyb2l6ZXIoZmlsdGVyKSB7CiAKIGNvbnN0IGRlZmluZXMgPSBbCiAg
ICAgIiNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9TUEVDSUFMX09QKG1hY3JvKSIsCi0gICAgLi4ub3Bj
b2RlTWFjcm9pemVyKG9wID0+IG9wLmNhdGVnb3J5ID09PSAic3BlY2lhbCIpLAorICAgIC4uLm9w
Y29kZU1hY3JvaXplcihvcCA9PiBvcC5jYXRlZ29yeSA9PT0gInNwZWNpYWwiIHx8IG9wLmNhdGVn
b3J5ID09PSAiY2FsbCIpLAogICAgICJcblxuI2RlZmluZSBGT1JfRUFDSF9XQVNNX0NPTlRST0xf
RkxPV19PUChtYWNybykiLAogICAgIC4uLm9wY29kZU1hY3JvaXplcihvcCA9PiBvcC5jYXRlZ29y
eSA9PT0gImNvbnRyb2wiKSwKICAgICAiXG5cbiNkZWZpbmUgRk9SX0VBQ0hfV0FTTV9VTkFSWV9P
UChtYWNybykiLAo=
</data>
<flag name="review"
          id="315392"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>