<?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>208599</bug_id>
          
          <creation_ts>2020-03-04 13:47:07 -0800</creation_ts>
          <short_desc>Lay initial groundwork for new PDF loading model</short_desc>
          <delta_ts>2020-03-04 21:27:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1625755</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-04 13:47:07 -0800</bug_when>
    <thetext>Lay initial groundwork for new PDF loading model</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625766</commentid>
    <comment_count>1</comment_count>
      <attachid>392478</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-04 14:08:44 -0800</bug_when>
    <thetext>Created attachment 392478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625771</commentid>
    <comment_count>2</comment_count>
      <attachid>392478</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-04 14:14:59 -0800</bug_when>
    <thetext>Comment on attachment 392478
Patch

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

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:41
&gt; +// For now, disable new PDF APIs by default even on platforms where otherwise enabled.

FIXME: Enable this?

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:126
&gt; +    void getResourceBytesAtPosition(size_t count, off_t position, WTF::Function&lt;void(const uint8_t*, size_t count)&gt;&amp;&amp; completionHandler);

Will it be only called once?  CompletionHandler?

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:328
&gt; +        WTF::Function&lt;void(const uint8_t*, size_t count)&gt; completionHandler;

WTF:: is unnecessary.
CompletionHandler?

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:585
&gt; +    , m_pdfThread(Thread::create(&quot;PDF document thread&quot;, [protectedThis = makeRef(*this), this] { threadEntry(); }))

This looks like a ref cycle to me.

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:714
&gt; +    unsigned long long dataLength = m_data ? (unsigned long long)CFDataGetLength(m_data.get()) : 0;

static_cast

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1184
&gt; +        if ((unsigned long long)CFDataGetLength(m_data.get()) &gt;= request.position + request.count) {

If this case is needed, could it be static_cast&lt;uint64_t&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625803</commentid>
    <comment_count>3</comment_count>
      <attachid>392493</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-04 15:15:33 -0800</bug_when>
    <thetext>Created attachment 392493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625808</commentid>
    <comment_count>4</comment_count>
      <attachid>392493</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-04 15:22:25 -0800</bug_when>
    <thetext>Comment on attachment 392493
Patch

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

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:328
&gt; +        size_t count;

It could prevent use of uninitialized memory to give these default initializers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625830</commentid>
    <comment_count>5</comment_count>
      <attachid>392500</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-04 15:58:57 -0800</bug_when>
    <thetext>Created attachment 392500
PFL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625832</commentid>
    <comment_count>6</comment_count>
      <attachid>392501</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-04 16:00:19 -0800</bug_when>
    <thetext>Created attachment 392501
PFL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625845</commentid>
    <comment_count>7</comment_count>
      <attachid>392508</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-03-04 16:42:42 -0800</bug_when>
    <thetext>Created attachment 392508
PFL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625933</commentid>
    <comment_count>8</comment_count>
      <attachid>392508</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-04 21:26:19 -0800</bug_when>
    <thetext>Comment on attachment 392508
PFL

Clearing flags on attachment: 392508

Committed r257900: &lt;https://trac.webkit.org/changeset/257900&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625934</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-04 21:26:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625935</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-04 21:27:39 -0800</bug_when>
    <thetext>&lt;rdar://problem/60071098&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392478</attachid>
            <date>2020-03-04 14:08:44 -0800</date>
            <delta_ts>2020-03-04 15:15:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>pat</filename>
            <type>text/plain</type>
            <size>17776</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggN2Q4MDQyOTE0OTIuLmM5YWI2MzAzY2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIw
LTAzLTA0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBMYXkg
aW5pdGlhbCBncm91bmR3b3JrIGZvciBuZXcgUERGIGxvYWRpbmcgbW9kZWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODU5OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtSGF2ZS5o
OgorCiAyMDIwLTAzLTAzICBKaXRlbiBNZWh0YSAgPGptZWh0YUBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRvcHQgSFRUUCBBbHRlcm5hdGl2ZSBTZXJ2aWNlcyBTdG9yYWdlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2
ZS5oCmluZGV4IDc0YjVhMDNkZTIwLi4zMDdjYjRiYmRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1IYXZlLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgK
QEAgLTYwMiwzICs2MDIsNyBAQAogI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNjAwKSB8fCAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYg
X19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTQwMDAwKQogI2RlZmluZSBIQVZF
X1dFQlAgMQogI2VuZGlmCisKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDEwMTYwMCkKKyNkZWZpbmUgSEFWRV9JTkNSRU1FTlRBTF9QREZf
QVBJUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmE3NmNiNDg2OGYuLjk4MzQzODU1YTYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIwLTAzLTA0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29u
QGFwcGxlLmNvbT4KKworICAgICAgICBMYXkgaW5pdGlhbCBncm91bmR3b3JrIGZvciBuZXcgUERG
IGxvYWRpbmcgbW9kZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwODU5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZpcnN0IHBpZWNlIG9mIGFkb3B0aW5nIHNvbWUgbmV3IHBsYXRmb3JtIFBERiBBUElz
LgorICAgICAgICBEaXNhYmxlZCBieSBkZWZhdWx0IGV2ZW4gb24gcGxhdGZvcm1zIHRoYXQgc3Vw
cG9ydCBpdC4KKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlIGZvciBzaGlwcGluZyBjb25maWdz
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktp
dDo6UERGUGx1Z2luOjpQREZQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpkYXRhUHJvdmlkZXJH
ZXRCeXRlc0F0UG9zaXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OmRhdGFQcm92aWRl
ckdldEJ5dGVSYW5nZXNDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OmRhdGFQcm92aWRlclJl
bGVhc2VJbmZvQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnRocmVhZEVu
dHJ5KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp1bmNvbmRpdGlvbmFsQ29tcGxldGVS
YW5nZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmdldFJlc291cmNlQnl0
ZXNBdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjphZG9wdEJhY2tncm91
bmRUaHJlYWREb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGRmRG9jdW1l
bnREaWRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjppbnN0YWxsUERGRG9jdW1l
bnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjphdHRlbXB0VG9VbmxvY2tQREYpOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKToKKyAgICAgICAgKFdl
YktpdDo6UERGUGx1Z2luOjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6UERG
UGx1Z2luOjpzYXZlVG9QREYpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om9wZW5XaXRo
TmF0aXZlQXBwbGljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNvdW50Rmlu
ZE1hdGNoZXMpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om5leHRNYXRjaEZvclN0cmlu
Zyk6CisKIDIwMjAtMDMtMDMgIEppdGVuIE1laHRhICA8am1laHRhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZG9wdCBIVFRQIEFsdGVybmF0aXZlIFNlcnZpY2VzIFN0b3JhZ2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAppbmRleCAwNzJhMWMw
M2UxNS4uOGU1ZjQyZjc4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLmgKQEAgLTM2LDYgKzM2LDEyIEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9GaW5kT3B0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisv
LyBGb3Igbm93LCBkaXNhYmxlIG5ldyBQREYgQVBJcyBieSBkZWZhdWx0IGV2ZW4gb24gcGxhdGZv
cm1zIHdoZXJlIG90aGVyd2lzZSBlbmFibGVkLgorI2lmZGVmIEhBVkVfSU5DUkVNRU5UQUxfUERG
X0FQSVMKKyN1bmRlZiBIQVZFX0lOQ1JFTUVOVEFMX1BERl9BUElTCisjZW5kaWYKIAogdHlwZWRl
ZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7CiB0eXBlZGVmIHN0
cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU09iamVjdFJlZjsKQEAgLTExNiw2ICsxMjIsMTAgQEAgcHVi
bGljOgogICAgIFBERlBsdWdpbkFubm90YXRpb24qIGFjdGl2ZUFubm90YXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2FjdGl2ZUFubm90YXRpb24uZ2V0KCk7IH0KICAgICBXZWJDb3JlOjpBWE9iamVj
dENhY2hlKiBheE9iamVjdENhY2hlKCkgY29uc3Q7CiAKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BE
Rl9BUElTKQorICAgIHZvaWQgZ2V0UmVzb3VyY2VCeXRlc0F0UG9zaXRpb24oc2l6ZV90IGNvdW50
LCBvZmZfdCBwb3NpdGlvbiwgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QgY291bnQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IFBERlBsdWdpbihXZWJGcmFtZSYpOwogCkBAIC0yMjUsNiArMjM1LDcgQEAgcHJp
dmF0ZToKICAgICBSZWY8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29y
ZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOwogICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJD
b3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7CiAgICAgdm9pZCBwZGZEb2N1bWVudERpZExvYWQo
KTsKKyAgICB2b2lkIGluc3RhbGxQREZEb2N1bWVudCgpOwogICAgIHZvaWQgYWRkQXJjaGl2ZVJl
c291cmNlKCk7CiAgICAgdm9pZCBjYWxjdWxhdGVTaXplcygpOwogICAgIHZvaWQgcnVuU2NyaXB0
c0luUERGRG9jdW1lbnQoKTsKQEAgLTI0MSw5ICsyNTIsNiBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBjcmVhdGVQYXNzd29yZEVudHJ5Rm9ybSgpOwogCi0gICAgUmV0YWluUHRyPFBERkRvY3VtZW50
PiBwZGZEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KLSAgICB2b2lk
IHNldFBERkRvY3VtZW50KFJldGFpblB0cjxQREZEb2N1bWVudD4gZG9jdW1lbnQpIHsgbV9wZGZE
b2N1bWVudCA9IGRvY3VtZW50OyB9Ci0KICAgICBXZWJDb3JlOjpJbnRTaXplIHBkZkRvY3VtZW50
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGRmRG9jdW1lbnRTaXplOyB9CiAgICAgdm9pZCBzZXRQ
REZEb2N1bWVudFNpemUoV2ViQ29yZTo6SW50U2l6ZSBzaXplKSB7IG1fcGRmRG9jdW1lbnRTaXpl
ID0gc2l6ZTsgfQogCkBAIC0zMDIsMTEgKzMxMCwyOSBAQCBwcml2YXRlOgogICAgIFJldGFpblB0
cjxDRk11dGFibGVEYXRhUmVmPiBtX2RhdGE7CiAKICAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+
IG1fcGRmRG9jdW1lbnQ7CisKKyAgICBib29sIG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcgeyBm
YWxzZSB9OwogICAgIHVuc2lnbmVkIG1fZmlyc3RQYWdlSGVpZ2h0IHsgMCB9OwogICAgIFdlYkNv
cmU6OkludFNpemUgbV9wZGZEb2N1bWVudFNpemU7IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdh
cHMuCiAKICAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX2hvcml6b250YWxTY3JvbGxi
YXI7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsK
KworI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCisgICAgdm9pZCB0aHJlYWRFbnRyeSgp
OworICAgIHZvaWQgYWRvcHRCYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQoKTsKKworICAgIHN0cnVj
dCBCeXRlUmFuZ2VSZXF1ZXN0IHsKKyAgICAgICAgb2ZmX3QgcG9zaXRpb247CisgICAgICAgIHNp
emVfdCBjb3VudDsKKyAgICAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QgY291bnQpPiBjb21wbGV0aW9uSGFuZGxlcjsKKyAgICB9OworICAgIHZvaWQgdW5jb25k
aXRpb25hbENvbXBsZXRlUmFuZ2VSZXF1ZXN0KEJ5dGVSYW5nZVJlcXVlc3QmKTsKKworICAgIFJl
dGFpblB0cjxQREZEb2N1bWVudD4gbV9iYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQ7CisgICAgUmVm
PFRocmVhZD4gbV9wZGZUaHJlYWQ7CisgICAgVmVjdG9yPEJ5dGVSYW5nZVJlcXVlc3Q+IG1fb3V0
c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0czsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5tbQppbmRleCA2NzgzOWY1MzcyYi4uMjkwYzExMWRmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQpAQCAtODcsNiArODcs
MTMgQEAKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW1wb3J0IDxw
YWwvc3BpL21hYy9OU01lbnVTUEkuaD4KICNpbXBvcnQgPHd0Zi9VVUlELmg+CisjaW1wb3J0IDx3
dGYvV1RGU2VtYXBob3JlLmg+CisKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorQGlu
dGVyZmFjZSBQREZEb2N1bWVudCAoKQorLShpbnN0YW5jZXR5cGUpIGluaXRXaXRoUHJvdmlkZXI6
KENHRGF0YVByb3ZpZGVyUmVmKWRhdGFQcm92aWRlcjsKK0BlbmQKKyNlbmRpZgogCiAvLyBTZXQg
b3ZlcmZsb3c6IGhpZGRlbiBvbiB0aGUgYW5ub3RhdGlvbiBjb250YWluZXIgc28gPGlucHV0PiBl
bGVtZW50cyBzY3JvbGxlZCBvdXQgb2YgdmlldyBkb24ndCBzaG93CiAvLyBzY3JvbGxiYXJzIG9u
IHRoZSBib2R5LiBXZSBjYW4ndCBhZGQgYW5ub3RhdGlvbnMgZGlyZWN0bHkgdG8gdGhlIGJvZHks
IGJlY2F1c2Ugb3ZlcmZsb3c6IGhpZGRlbiBvbiB0aGUgYm9keQpAQCAtNTc0LDYgKzU4MSw5IEBA
IGlubGluZSBQREZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSYgZnJhbWUpCiAgICAgLCBtX3Nj
cm9sbENvcm5lckxheWVyKGFkb3B0TlMoW1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9j
XSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSkpCiAgICAgLCBtX3BkZkxheWVyQ29udHJvbGxlcihh
ZG9wdE5TKFtbcGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MoKSBhbGxvY10gaW5pdF0pKQogICAgICwg
bV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZShhZG9wdE5TKFtbV0tQREZMYXllckNvbnRyb2xs
ZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhpc10pKQorI2lmIEhBVkUoSU5D
UkVNRU5UQUxfUERGX0FQSVMpCisgICAgLCBtX3BkZlRocmVhZChUaHJlYWQ6OmNyZWF0ZSgiUERG
IGRvY3VtZW50IHRocmVhZCIsIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHRoaXNd
IHsgdGhyZWFkRW50cnkoKTsgfSkpCisjZW5kaWYKIHsKICAgICBtX3BkZkxheWVyQ29udHJvbGxl
ci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCk7CiAg
ICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFyZW50TGF5ZXIgPSBtX2NvbnRlbnRMYXll
ci5nZXQoKTsKQEAgLTYwOCw2ICs2MTgsMTI1IEBAIFBERlBsdWdpbjo6flBERlBsdWdpbigpCiB7
CiB9CiAKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorc3RhdGljIHNpemVfdCBkYXRh
UHJvdmlkZXJHZXRCeXRlc0F0UG9zaXRpb25DYWxsYmFjayh2b2lkKiBpbmZvLCB2b2lkKiBidWZm
ZXIsIG9mZl90IHBvc2l0aW9uLCBzaXplX3QgY291bnQpCit7CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisKKyAgICBSZWY8UERGUGx1Z2luPiBwbHVnaW4gPSAqKChQREZQbHVnaW4qKWlu
Zm8pOworICAgIFdURjo6U2VtYXBob3JlIGRhdGFTZW1hcGhvcmUgeyAwIH07CisgICAgc2l6ZV90
IGJ5dGVzUHJvdmlkZWQgPSAwOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwbHVn
aW4gPSBXVEZNb3ZlKHBsdWdpbiksIHBvc2l0aW9uLCBjb3VudCwgYnVmZmVyLCAmZGF0YVNlbWFw
aG9yZSwgJmJ5dGVzUHJvdmlkZWRdIHsKKyAgICAgICAgcGx1Z2luLT5nZXRSZXNvdXJjZUJ5dGVz
QXRQb3NpdGlvbihjb3VudCwgcG9zaXRpb24sIFtjb3VudCwgYnVmZmVyLCAmZGF0YVNlbWFwaG9y
ZSwgJmJ5dGVzUHJvdmlkZWRdKGNvbnN0IHVpbnQ4X3QqIGJ5dGVzLCBzaXplX3QgYnl0ZXNDb3Vu
dCkgeworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjb3VudCwgYnl0ZXNDb3VudCA8PSBjb3Vu
dCk7CisgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBieXRlcywgYnl0ZXNDb3VudCk7CisgICAg
ICAgICAgICBieXRlc1Byb3ZpZGVkID0gYnl0ZXNDb3VudDsKKyAgICAgICAgICAgIGRhdGFTZW1h
cGhvcmUuc2lnbmFsKCk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgZGF0YVNlbWFwaG9y
ZS53YWl0KCk7CisgICAgcmV0dXJuIGJ5dGVzUHJvdmlkZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGRh
dGFQcm92aWRlckdldEJ5dGVSYW5nZXNDYWxsYmFjayh2b2lkKiBpbmZvLCBDRk11dGFibGVBcnJh
eVJlZiBidWZmZXJzLCBjb25zdCBDRlJhbmdlKiByYW5nZXMsIHNpemVfdCBjb3VudCkKK3sKKyAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIFJlZjxQREZQbHVnaW4+IHBsdWdpbiA9
ICooKFBERlBsdWdpbiopaW5mbyk7CisgICAgV1RGOjpTZW1hcGhvcmUgZGF0YVNlbWFwaG9yZSB7
IDAgfTsKKyAgICBWZWN0b3I8UmV0YWluUHRyPENGRGF0YVJlZj4+IGRhdGFSZXN1bHRzKGNvdW50
KTsKKworICAgIC8vIEZJWE1FOiBPbmNlIHdlIHN1cHBvcnQgcmFuZ2UgcmVxdWVzdHMsIG1ha2Ug
YSBzaW5nbGUgcmVxdWVzdCBmb3IgYWxsIHJhbmdlcyBpbnN0ZWFkIG9mIDxjb3VudD4gaW5kaXZp
ZHVhbCByZXF1ZXN0cy4KKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3BsdWdpbiA9IFdU
Rk1vdmUocGx1Z2luKSwgJmRhdGFSZXN1bHRzLCByYW5nZXMsIGNvdW50LCAmZGF0YVNlbWFwaG9y
ZV0geworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAg
ICAgICAgIHBsdWdpbi0+Z2V0UmVzb3VyY2VCeXRlc0F0UG9zaXRpb24ocmFuZ2VzW2ldLmxlbmd0
aCwgcmFuZ2VzW2ldLmxvY2F0aW9uLCBbaSwgJmRhdGFSZXN1bHRzLCAmZGF0YVNlbWFwaG9yZV0o
Y29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc0NvdW50KSB7CisgICAgICAgICAgICAg
ICAgZGF0YVJlc3VsdHNbaV0gPSBhZG9wdENGKENGRGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBieXRlcywgYnl0ZXNDb3VudCkpOworICAgICAgICAgICAgICAgIGRhdGFTZW1hcGhvcmUu
c2lnbmFsKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBkYXRhU2VtYXBob3JlLndh
aXQoKTsKKworICAgIGZvciAoYXV0byYgcmVzdWx0IDogZGF0YVJlc3VsdHMpIHsKKyAgICAgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXN1bHQgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAwKSk7CisgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShi
dWZmZXJzLCByZXN1bHQuZ2V0KCkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZGF0YVByb3Zp
ZGVyUmVsZWFzZUluZm9DYWxsYmFjayh2b2lkKiBpbmZvKQoreworICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOworICAgIGFkb3B0UmVmKChQREZQbHVnaW4qKWluZm8pOworfQorCit2b2lkIFBE
RlBsdWdpbjo6dGhyZWFkRW50cnkoKQoreworICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0QWNjZXNz
UmFuZ2VzQ2FsbGJhY2tzIGRhdGFQcm92aWRlckNhbGxiYWNrcyB7CisgICAgICAgIDAsCisgICAg
ICAgIGRhdGFQcm92aWRlckdldEJ5dGVzQXRQb3NpdGlvbkNhbGxiYWNrLAorICAgICAgICBkYXRh
UHJvdmlkZXJHZXRCeXRlUmFuZ2VzQ2FsbGJhY2ssCisgICAgICAgIGRhdGFQcm92aWRlclJlbGVh
c2VJbmZvQ2FsbGJhY2ssCisgICAgfTsKKworICAgIC8vIEJhbGFuY2VkIGJ5IGEgZGVyZWYgaW5z
aWRlIG9mIHRoZSBkYXRhUHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxiYWNrCisgICAgcmVmKCk7CisK
KyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVNdWx0aVJhbmdlRGlyZWN0QWNjZXNzKHRoaXMsIGtDR0RhdGFQ
cm92aWRlckluZGV0ZXJtaW5hdGVTaXplLCAmZGF0YVByb3ZpZGVyQ2FsbGJhY2tzKSk7CisgICAg
Q0dEYXRhUHJvdmlkZXJTZXRQcm9wZXJ0eShkYXRhUHJvdmlkZXIuZ2V0KCksIGtDR0RhdGFQcm92
aWRlckhhc0hpZ2hMYXRlbmN5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgbV9iYWNrZ3JvdW5kVGhy
ZWFkRG9jdW1lbnQgPSBhZG9wdE5TKFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0
aFByb3ZpZGVyOmRhdGFQcm92aWRlci5nZXQoKV0pOworCisgICAgY2FsbE9uTWFpblRocmVhZChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIGFkb3B0QmFj
a2dyb3VuZFRocmVhZERvY3VtZW50KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp1
bmNvbmRpdGlvbmFsQ29tcGxldGVSYW5nZVJlcXVlc3QoQnl0ZVJhbmdlUmVxdWVzdCYgcmVxdWVz
dCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgZnVsbFNpemUgPSBtX2RhdGEgPyAodW5zaWdu
ZWQgbG9uZyBsb25nKUNGRGF0YUdldExlbmd0aChtX2RhdGEuZ2V0KCkpIDogMDsKKyAgICBpZiAo
KHVuc2lnbmVkIGxvbmcgbG9uZylyZXF1ZXN0LnBvc2l0aW9uID49IGZ1bGxTaXplKSB7CisgICAg
ICAgIHJlcXVlc3QuY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgMCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBhdXRvIGNvdW50ID0gcmVxdWVzdC5wb3NpdGlvbiArIHJlcXVlc3Qu
Y291bnQgPiBmdWxsU2l6ZSA/IGZ1bGxTaXplIC0gcmVxdWVzdC5wb3NpdGlvbiA6IHJlcXVlc3Qu
Y291bnQ7CisgICAgcmVxdWVzdC5jb21wbGV0aW9uSGFuZGxlcihDRkRhdGFHZXRCeXRlUHRyKG1f
ZGF0YS5nZXQoKSkgKyByZXF1ZXN0LnBvc2l0aW9uLCBjb3VudCk7Cit9CisKK3ZvaWQgUERGUGx1
Z2luOjpnZXRSZXNvdXJjZUJ5dGVzQXRQb3NpdGlvbihzaXplX3QgY291bnQsIG9mZl90IHBvc2l0
aW9uLCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBkYXRhTGVuZ3RoID0gbV9kYXRhID8gKHVuc2lnbmVkIGxvbmcgbG9uZylD
RkRhdGFHZXRMZW5ndGgobV9kYXRhLmdldCgpKSA6IDA7CisgICAgaWYgKG1fZGF0YSAmJiBkYXRh
TGVuZ3RoID49IHBvc2l0aW9uICsgY291bnQpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q0ZEYXRhR2V0Qnl0ZVB0cihtX2RhdGEuZ2V0KCkpICsgcG9zaXRpb24sIGNvdW50KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEJ5dGVSYW5nZVJlcXVlc3QgcmVxdWVzdCA9IHsgcG9z
aXRpb24sIGNvdW50LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSB9OworICAgIGlmIChtX2Rv
Y3VtZW50RmluaXNoZWRMb2FkaW5nKSB7CisgICAgICAgIHVuY29uZGl0aW9uYWxDb21wbGV0ZVJh
bmdlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fb3V0
c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5hcHBlbmQoV1RGTW92ZShyZXF1ZXN0KSk7Cit9CisK
K3ZvaWQgUERGUGx1Z2luOjphZG9wdEJhY2tncm91bmRUaHJlYWREb2N1bWVudCgpCit7CisgICAg
QVNTRVJUKCFtX3BkZkRvY3VtZW50KTsKKyAgICBBU1NFUlQobV9iYWNrZ3JvdW5kVGhyZWFkRG9j
dW1lbnQpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbV9wZGZEb2N1bWVudCA9
IFdURk1vdmUobV9iYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQpOworCisgICAgaW5zdGFsbFBERkRv
Y3VtZW50KCk7Cit9CisjZW5kaWYgLy8gSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKwogUGx1
Z2luSW5mbyBQREZQbHVnaW46OnBsdWdpbkluZm8oKQogewogICAgIFBsdWdpbkluZm8gaW5mbzsK
QEAgLTk0NCwxNSArMTA3MywyOSBAQCB2b2lkIFBERlBsdWdpbjo6Y29udmVydFBvc3RTY3JpcHRE
YXRhSWZOZWVkZWQoKQogdm9pZCBQREZQbHVnaW46OnBkZkRvY3VtZW50RGlkTG9hZCgpCiB7CiAg
ICAgYWRkQXJjaGl2ZVJlc291cmNlKCk7Ci0gICAgCi0gICAgUmV0YWluUHRyPFBERkRvY3VtZW50
PiBkb2N1bWVudCA9IGFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRo
RGF0YTpyYXdEYXRhKCldKTsKIAotICAgIHNldFBERkRvY3VtZW50KGRvY3VtZW50KTsKKyAgICBt
X2RvY3VtZW50RmluaXNoZWRMb2FkaW5nID0gdHJ1ZTsKKworI2lmIEhBVkUoSU5DUkVNRU5UQUxf
UERGX0FQSVMpCisgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IGFsbCBkYXRhIGZvciB0aGUg
ZG9jdW1lbnQsIGFuZCB0aGVyZWZvcmUgd2Uga25vdyBob3cgdG8gYW5zd2VyIGFueSBvdXRzdGFu
ZGluZyByYW5nZSByZXF1ZXN0cy4KKyAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX291dHN0YW5k
aW5nQnl0ZVJhbmdlUmVxdWVzdHMpCisgICAgICAgIHVuY29uZGl0aW9uYWxDb21wbGV0ZVJhbmdl
UmVxdWVzdChyZXF1ZXN0KTsKKyAgICBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMuY2xl
YXIoKTsKKyNlbHNlCisgICAgbV9wZGZEb2N1bWVudCA9IGFkb3B0TlMoW1twZGZEb2N1bWVudENs
YXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0YTpyYXdEYXRhKCldKTsKKyAgICBpbnN0YWxsUERGRG9j
dW1lbnQoKTsKKyNlbmRpZgorfQorCit2b2lkIFBERlBsdWdpbjo6aW5zdGFsbFBERkRvY3VtZW50
KCkKK3sKKyAgICBBU1NFUlQobV9wZGZEb2N1bWVudCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIAogICAgIHVwZGF0ZVBhZ2VBbmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKIAogICAgIFtt
X3BkZkxheWVyQ29udHJvbGxlciBzZXRGcmFtZVNpemU6c2l6ZSgpXTsKLSAgICBtX3BkZkxheWVy
Q29udHJvbGxlci5nZXQoKS5kb2N1bWVudCA9IGRvY3VtZW50LmdldCgpOworICAgIG1fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpLmRvY3VtZW50ID0gbV9wZGZEb2N1bWVudC5nZXQoKTsKIAogICAg
IGlmIChoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCiAgICAgICAgIHBsdWdpblZpZXcoKS0+c2V0
UGFnZVNjYWxlRmFjdG9yKFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3Jd
LCBJbnRQb2ludCgpKTsKQEAgLTk2NCw3ICsxMTA3LDcgQEAgdm9pZCBQREZQbHVnaW46OnBkZkRv
Y3VtZW50RGlkTG9hZCgpCiAKICAgICBydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOwogCi0gICAg
aWYgKFtkb2N1bWVudCBpc0xvY2tlZF0pCisgICAgaWYgKFttX3BkZkRvY3VtZW50IGlzTG9ja2Vk
XSkKICAgICAgICAgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0oKTsKIAogICAgIGlmIChbbV9wZGZM
YXllckNvbnRyb2xsZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRVUkxGcmFnbWVu
dDopXSkgewpAQCAtMTAzMyw2ICsxMTc2LDE5IEBAIHZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJl
YW1EaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKICAgICAgICAg
bV9kYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKIAogICAgIENGRGF0
YUFwcGVuZEJ5dGVzKG1fZGF0YS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+
KGJ5dGVzKSwgbGVuZ3RoKTsKKworI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCisgICAg
c2l6ZV90IGluZGV4ID0gMDsKKyAgICB3aGlsZSAoaW5kZXggPCBtX291dHN0YW5kaW5nQnl0ZVJh
bmdlUmVxdWVzdHMuc2l6ZSgpKSB7CisgICAgICAgIGF1dG8mIHJlcXVlc3QgPSBtX291dHN0YW5k
aW5nQnl0ZVJhbmdlUmVxdWVzdHNbaW5kZXhdOworICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcg
bG9uZylDRkRhdGFHZXRMZW5ndGgobV9kYXRhLmdldCgpKSA+PSByZXF1ZXN0LnBvc2l0aW9uICsg
cmVxdWVzdC5jb3VudCkgeworICAgICAgICAgICAgcmVxdWVzdC5jb21wbGV0aW9uSGFuZGxlcihD
RkRhdGFHZXRCeXRlUHRyKG1fZGF0YS5nZXQoKSkgKyByZXF1ZXN0LnBvc2l0aW9uLCByZXF1ZXN0
LmNvdW50KTsKKyAgICAgICAgICAgIG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5yZW1v
dmUoaW5kZXgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgKytp
bmRleDsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURp
ZEZpbmlzaExvYWRpbmcoKQpAQCAtMTA3NCw3ICsxMjMwLDcgQEAgdm9pZCBQREZQbHVnaW46OmF0
dGVtcHRUb1VubG9ja1BERihjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQogewogICAgIFttX3BkZkxh
eWVyQ29udHJvbGxlciBhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dvcmQ6cGFzc3dvcmRdOwogCi0g
ICAgaWYgKCFbcGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0pIHsKKyAgICBpZiAoIVttX3BkZkRvY3Vt
ZW50IGlzTG9ja2VkXSkgewogICAgICAgICBtX3Bhc3N3b3JkRmllbGQgPSBudWxscHRyOwogCiAg
ICAgICAgIGNhbGN1bGF0ZVNpemVzKCk7CkBAIC0xMDk5LDcgKzEyNTUsNyBAQCB2b2lkIFBERlBs
dWdpbjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpCiAKIHZvaWQgUERGUGx1Z2lu
OjpjYWxjdWxhdGVTaXplcygpCiB7Ci0gICAgaWYgKFtwZGZEb2N1bWVudCgpIGlzTG9ja2VkXSkg
eworICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pIHsKICAgICAgICAgbV9maXJzdFBh
Z2VIZWlnaHQgPSAwOwogICAgICAgICBzZXRQREZEb2N1bWVudFNpemUoSW50U2l6ZSgwLCAwKSk7
CiAgICAgICAgIHJldHVybjsKQEAgLTE0MTgsNyArMTU3NCw3IEBAIGJvb2wgUERGUGx1Z2luOjpo
YW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQogICAgIGlmIChtX3Nj
cm9sbENvcm5lckxheWVyICYmIEludFJlY3QobV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKS5mcmFt
ZSkuY29udGFpbnMobW91c2VQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChbcGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0pCisgICAgaWYgKFttX3BkZkRvY3VtZW50IGlz
TG9ja2VkXSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gUmlnaHQtY2xpY2tzIGFu
ZCBDb250cm9sLWNsaWNrcyBhbHdheXMgY2FsbCBoYW5kbGVDb250ZXh0TWVudUV2ZW50IGFzIHdl
bGwuCkBAIC0xNzEzLDcgKzE4NjksNyBAQCB2b2lkIFBERlBsdWdpbjo6c2F2ZVRvUERGKCkKIHsK
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IG5vdGlmeSB0aGUgdXNlciB0aGF0IHRo
ZXkgY2FuJ3Qgc2F2ZSBiZWZvcmUgdGhlIGRvY3VtZW50IGlzIGZpbmlzaGVkIGxvYWRpbmcuCiAg
ICAgLy8gUERGVmlld0NvbnRyb2xsZXIgZG9lcyBhbiBOU0JlZXAoKSwgYnV0IHRoYXQgc2VlbXMg
aW5zdWZmaWNpZW50LgotICAgIGlmICghcGRmRG9jdW1lbnQoKSkKKyAgICBpZiAoIW1fZG9jdW1l
bnRGaW5pc2hlZExvYWRpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5TRGF0YSAqZGF0YSA9
IGxpdmVEYXRhKCk7CkBAIC0xNzI1LDcgKzE4ODEsNyBAQCB2b2lkIFBERlBsdWdpbjo6b3Blbldp
dGhOYXRpdmVBcHBsaWNhdGlvbigpCiAgICAgaWYgKCFtX3RlbXBvcmFyeVBERlVVSUQpIHsKICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBub3RpZnkgdGhlIHVzZXIgdGhhdCB0
aGV5IGNhbid0IHNhdmUgYmVmb3JlIHRoZSBkb2N1bWVudCBpcyBmaW5pc2hlZCBsb2FkaW5nLgog
ICAgICAgICAvLyBQREZWaWV3Q29udHJvbGxlciBkb2VzIGFuIE5TQmVlcCgpLCBidXQgdGhhdCBz
ZWVtcyBpbnN1ZmZpY2llbnQuCi0gICAgICAgIGlmICghcGRmRG9jdW1lbnQoKSkKKyAgICAgICAg
aWYgKCFtX2RvY3VtZW50RmluaXNoZWRMb2FkaW5nKQogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7CkBAIC0xODEwLDcgKzE5NjYsNyBAQCB1
bnNpZ25lZCBQREZQbHVnaW46OmNvdW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQs
IFdlYkNvcmU6OkZpbmRPcHRpb25zCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgTlNTdHJpbmdD
b21wYXJlT3B0aW9ucyBuc09wdGlvbnMgPSBvcHRpb25zLmNvbnRhaW5zKFdlYkNvcmU6OkNhc2VJ
bnNlbnNpdGl2ZSkgPyBOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaCA6IDA7Ci0gICAgcmV0dXJuIFtb
cGRmRG9jdW1lbnQoKSBmaW5kU3RyaW5nOnRhcmdldCB3aXRoT3B0aW9uczpuc09wdGlvbnNdIGNv
dW50XTsKKyAgICByZXR1cm4gW1ttX3BkZkRvY3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0IHdpdGhP
cHRpb25zOm5zT3B0aW9uc10gY291bnRdOwogfQogCiBQREZTZWxlY3Rpb24gKlBERlBsdWdpbjo6
bmV4dE1hdGNoRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBCT09MIHNlYXJjaEZvcndh
cmQsIEJPT0wgY2FzZVNlbnNpdGl2ZSwgQk9PTCB3cmFwU2VhcmNoLCBQREZTZWxlY3Rpb24gKmlu
aXRpYWxTZWxlY3Rpb24sIEJPT0wgc3RhcnRJblNlbGVjdGlvbikKQEAgLTE4MjQsOCArMTk4MCw2
IEBAIFBERlNlbGVjdGlvbiAqUERGUGx1Z2luOjpuZXh0TWF0Y2hGb3JTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIEJPT0wgc2VhcmNoRm9yCiAgICAgaWYgKCFjYXNlU2Vuc2l0aXZlKQogICAg
ICAgICBvcHRpb25zIHw9IE5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoOwogCi0gICAgUERGRG9jdW1l
bnQgKmRvY3VtZW50ID0gcGRmRG9jdW1lbnQoKS5nZXQoKTsKLQogICAgIFJldGFpblB0cjxQREZT
ZWxlY3Rpb24+IHNlbGVjdGlvbkZvckluaXRpYWxTZWFyY2ggPSBhZG9wdE5TKFtpbml0aWFsU2Vs
ZWN0aW9uIGNvcHldKTsKICAgICBpZiAoc3RhcnRJblNlbGVjdGlvbikgewogICAgICAgICAvLyBJ
bml0aWFsbHkgd2Ugd2FudCB0byBpbmNsdWRlIHRoZSBzZWxlY3RlZCB0ZXh0IGluIHRoZSBzZWFy
Y2guIFNvIHdlIG11c3QgbW9kaWZ5IHRoZSBzdGFydGluZyBzZWFyY2gKQEAgLTE4NDEsMTUgKzE5
OTUsMTUgQEAgUERGU2VsZWN0aW9uICpQREZQbHVnaW46Om5leHRNYXRjaEZvclN0cmluZyhjb25z
dCBTdHJpbmcmIHRhcmdldCwgQk9PTCBzZWFyY2hGb3IKICAgICAgICAgfQogICAgIH0KIAotICAg
IFBERlNlbGVjdGlvbiAqZm91bmRTZWxlY3Rpb24gPSBbZG9jdW1lbnQgZmluZFN0cmluZzp0YXJn
ZXQgZnJvbVNlbGVjdGlvbjpzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoLmdldCgpIHdpdGhPcHRp
b25zOm9wdGlvbnNdOworICAgIFBERlNlbGVjdGlvbiAqZm91bmRTZWxlY3Rpb24gPSBbbV9wZGZE
b2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCBmcm9tU2VsZWN0aW9uOnNlbGVjdGlvbkZvckluaXRp
YWxTZWFyY2guZ2V0KCkgd2l0aE9wdGlvbnM6b3B0aW9uc107CiAKICAgICAvLyBJZiB3ZSBmaXJz
dCBzZWFyY2hlZCBpbiB0aGUgc2VsZWN0aW9uLCBhbmQgd2UgZm91bmQgdGhlIHNlbGVjdGlvbiwg
c2VhcmNoIGFnYWluIGZyb20ganVzdCBwYXN0IHRoZSBzZWxlY3Rpb24uCiAgICAgaWYgKHN0YXJ0
SW5TZWxlY3Rpb24gJiYgW2ZvdW5kU2VsZWN0aW9uIGlzRXF1YWw6aW5pdGlhbFNlbGVjdGlvbl0p
Ci0gICAgICAgIGZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0IGZy
b21TZWxlY3Rpb246aW5pdGlhbFNlbGVjdGlvbiB3aXRoT3B0aW9uczpvcHRpb25zXTsKKyAgICAg
ICAgZm91bmRTZWxlY3Rpb24gPSBbbV9wZGZEb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCBmcm9t
U2VsZWN0aW9uOmluaXRpYWxTZWxlY3Rpb24gd2l0aE9wdGlvbnM6b3B0aW9uc107CiAKICAgICBp
ZiAoIWZvdW5kU2VsZWN0aW9uICYmIHdyYXBTZWFyY2gpIHsKLSAgICAgICAgYXV0byBlbXB0eVNl
bGVjdGlvbiA9IGFkb3B0TlMoW1twZGZTZWxlY3Rpb25DbGFzcygpIGFsbG9jXSBpbml0V2l0aERv
Y3VtZW50OmRvY3VtZW50XSk7Ci0gICAgICAgIGZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZp
bmRTdHJpbmc6dGFyZ2V0IGZyb21TZWxlY3Rpb246ZW1wdHlTZWxlY3Rpb24uZ2V0KCkgd2l0aE9w
dGlvbnM6b3B0aW9uc107CisgICAgICAgIGF1dG8gZW1wdHlTZWxlY3Rpb24gPSBhZG9wdE5TKFtb
cGRmU2VsZWN0aW9uQ2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEb2N1bWVudDptX3BkZkRvY3VtZW50
LmdldCgpXSk7CisgICAgICAgIGZvdW5kU2VsZWN0aW9uID0gW21fcGRmRG9jdW1lbnQgZmluZFN0
cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjplbXB0eVNlbGVjdGlvbi5nZXQoKSB3aXRoT3B0aW9u
czpvcHRpb25zXTsKICAgICB9CiAKICAgICByZXR1cm4gZm91bmRTZWxlY3Rpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392493</attachid>
            <date>2020-03-04 15:15:33 -0800</date>
            <delta_ts>2020-03-04 16:00:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19333</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggN2Q4MDQyOTE0OTIuLmM5YWI2MzAzY2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIw
LTAzLTA0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBMYXkg
aW5pdGlhbCBncm91bmR3b3JrIGZvciBuZXcgUERGIGxvYWRpbmcgbW9kZWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODU5OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtSGF2ZS5o
OgorCiAyMDIwLTAzLTAzICBKaXRlbiBNZWh0YSAgPGptZWh0YUBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRvcHQgSFRUUCBBbHRlcm5hdGl2ZSBTZXJ2aWNlcyBTdG9yYWdlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2
ZS5oCmluZGV4IDc0YjVhMDNkZTIwLi4zMDdjYjRiYmRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1IYXZlLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgK
QEAgLTYwMiwzICs2MDIsNyBAQAogI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNjAwKSB8fCAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYg
X19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTQwMDAwKQogI2RlZmluZSBIQVZF
X1dFQlAgMQogI2VuZGlmCisKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDEwMTYwMCkKKyNkZWZpbmUgSEFWRV9JTkNSRU1FTlRBTF9QREZf
QVBJUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmE3NmNiNDg2OGYuLjk4MzQzODU1YTYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIwLTAzLTA0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29u
QGFwcGxlLmNvbT4KKworICAgICAgICBMYXkgaW5pdGlhbCBncm91bmR3b3JrIGZvciBuZXcgUERG
IGxvYWRpbmcgbW9kZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwODU5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEZpcnN0IHBpZWNlIG9mIGFkb3B0aW5nIHNvbWUgbmV3IHBsYXRmb3JtIFBERiBBUElz
LgorICAgICAgICBEaXNhYmxlZCBieSBkZWZhdWx0IGV2ZW4gb24gcGxhdGZvcm1zIHRoYXQgc3Vw
cG9ydCBpdC4KKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlIGZvciBzaGlwcGluZyBjb25maWdz
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktp
dDo6UERGUGx1Z2luOjpQREZQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpkYXRhUHJvdmlkZXJH
ZXRCeXRlc0F0UG9zaXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OmRhdGFQcm92aWRl
ckdldEJ5dGVSYW5nZXNDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OmRhdGFQcm92aWRlclJl
bGVhc2VJbmZvQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnRocmVhZEVu
dHJ5KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp1bmNvbmRpdGlvbmFsQ29tcGxldGVS
YW5nZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmdldFJlc291cmNlQnl0
ZXNBdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjphZG9wdEJhY2tncm91
bmRUaHJlYWREb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGRmRG9jdW1l
bnREaWRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjppbnN0YWxsUERGRG9jdW1l
bnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjphdHRlbXB0VG9VbmxvY2tQREYpOgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKToKKyAgICAgICAgKFdl
YktpdDo6UERGUGx1Z2luOjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6UERG
UGx1Z2luOjpzYXZlVG9QREYpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om9wZW5XaXRo
TmF0aXZlQXBwbGljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNvdW50Rmlu
ZE1hdGNoZXMpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om5leHRNYXRjaEZvclN0cmlu
Zyk6CisKIDIwMjAtMDMtMDMgIEppdGVuIE1laHRhICA8am1laHRhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZG9wdCBIVFRQIEFsdGVybmF0aXZlIFNlcnZpY2VzIFN0b3JhZ2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaAppbmRleCAwNzJhMWMw
M2UxNS4uOGJmZGQ0ODViMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLmgKQEAgLTM2LDYgKzM2LDEzIEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9GaW5kT3B0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisv
LyBGb3Igbm93LCBkaXNhYmxlIG5ldyBQREYgQVBJcyBieSBkZWZhdWx0IGV2ZW4gb24gcGxhdGZv
cm1zIHdoZXJlIG90aGVyd2lzZSBlbmFibGVkLgorLy8gRklYTUU6IEVuYWJsZSB0aGlzIHdoZW4g
cmVhZHkuCisjaWZkZWYgSEFWRV9JTkNSRU1FTlRBTF9QREZfQVBJUworI3VuZGVmIEhBVkVfSU5D
UkVNRU5UQUxfUERGX0FQSVMKKyNlbmRpZgogCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVK
U0NvbnRleHQqIEpTQ29udGV4dFJlZjsKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpT
T2JqZWN0UmVmOwpAQCAtMTE2LDYgKzEyMywxMCBAQCBwdWJsaWM6CiAgICAgUERGUGx1Z2luQW5u
b3RhdGlvbiogYWN0aXZlQW5ub3RhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlQW5ub3Rh
dGlvbi5nZXQoKTsgfQogICAgIFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUo
KSBjb25zdDsKIAorI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCisgICAgdm9pZCBnZXRS
ZXNvdXJjZUJ5dGVzQXRQb3NpdGlvbihzaXplX3QgY291bnQsIG9mZl90IHBvc2l0aW9uLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QgY291bnQpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFBERlBsdWdp
bihXZWJGcmFtZSYpOwogCkBAIC0yMjUsNiArMjM2LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8V2Vi
Q29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50
YXRpb24pOwogICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmll
bnRhdGlvbik7CiAgICAgdm9pZCBwZGZEb2N1bWVudERpZExvYWQoKTsKKyAgICB2b2lkIGluc3Rh
bGxQREZEb2N1bWVudCgpOwogICAgIHZvaWQgYWRkQXJjaGl2ZVJlc291cmNlKCk7CiAgICAgdm9p
ZCBjYWxjdWxhdGVTaXplcygpOwogICAgIHZvaWQgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsK
QEAgLTI0MSw5ICsyNTMsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjcmVhdGVQYXNzd29yZEVu
dHJ5Rm9ybSgpOwogCi0gICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KLSAgICB2b2lkIHNldFBERkRvY3VtZW50KFJl
dGFpblB0cjxQREZEb2N1bWVudD4gZG9jdW1lbnQpIHsgbV9wZGZEb2N1bWVudCA9IGRvY3VtZW50
OyB9Ci0KICAgICBXZWJDb3JlOjpJbnRTaXplIHBkZkRvY3VtZW50U2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGRmRG9jdW1lbnRTaXplOyB9CiAgICAgdm9pZCBzZXRQREZEb2N1bWVudFNpemUoV2Vi
Q29yZTo6SW50U2l6ZSBzaXplKSB7IG1fcGRmRG9jdW1lbnRTaXplID0gc2l6ZTsgfQogCkBAIC0z
MDIsMTEgKzMxMSwzMCBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVm
PiBtX2RhdGE7CiAKICAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7CisK
KyAgICBib29sIG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcgeyBmYWxzZSB9OwogICAgIHVuc2ln
bmVkIG1fZmlyc3RQYWdlSGVpZ2h0IHsgMCB9OwogICAgIFdlYkNvcmU6OkludFNpemUgbV9wZGZE
b2N1bWVudFNpemU7IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCiAKICAgICBSZWZQdHI8
V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX2hvcml6b250YWxTY3JvbGxiYXI7CiAgICAgUmVmUHRyPFdl
YkNvcmU6OlNjcm9sbGJhcj4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKworI2lmIEhBVkUoSU5DUkVN
RU5UQUxfUERGX0FQSVMpCisgICAgdm9pZCB0aHJlYWRFbnRyeShSZWY8UERGUGx1Z2luPiYmKTsK
KyAgICB2b2lkIGFkb3B0QmFja2dyb3VuZFRocmVhZERvY3VtZW50KCk7CisKKyAgICBzdHJ1Y3Qg
Qnl0ZVJhbmdlUmVxdWVzdCB7CisgICAgICAgIG9mZl90IHBvc2l0aW9uOworICAgICAgICBzaXpl
X3QgY291bnQ7CisgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgdWludDhfdCos
IHNpemVfdCBjb3VudCk+IGNvbXBsZXRpb25IYW5kbGVyOworICAgIH07CisgICAgdm9pZCB1bmNv
bmRpdGlvbmFsQ29tcGxldGVSYW5nZVJlcXVlc3QoQnl0ZVJhbmdlUmVxdWVzdCYpOworICAgIHZv
aWQgdW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3RhbmRpbmdSYW5nZVJlcXVlc3RzKCk7CisKKyAg
ICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fYmFja2dyb3VuZFRocmVhZERvY3VtZW50OworICAg
IFJlZlB0cjxUaHJlYWQ+IG1fcGRmVGhyZWFkOworICAgIFZlY3RvcjxCeXRlUmFuZ2VSZXF1ZXN0
PiBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHM7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4ubW0KaW5kZXggNjc4MzlmNTM3MmIuLjZlNDBhOTQxNzU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KQEAgLTg3
LDYgKzg3LDEzIEBACiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2lt
cG9ydCA8cGFsL3NwaS9tYWMvTlNNZW51U1BJLmg+CiAjaW1wb3J0IDx3dGYvVVVJRC5oPgorI2lt
cG9ydCA8d3RmL1dURlNlbWFwaG9yZS5oPgorCisjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJ
UykKK0BpbnRlcmZhY2UgUERGRG9jdW1lbnQgKCkKKy0oaW5zdGFuY2V0eXBlKSBpbml0V2l0aFBy
b3ZpZGVyOihDR0RhdGFQcm92aWRlclJlZilkYXRhUHJvdmlkZXI7CitAZW5kCisjZW5kaWYKIAog
Ly8gU2V0IG92ZXJmbG93OiBoaWRkZW4gb24gdGhlIGFubm90YXRpb24gY29udGFpbmVyIHNvIDxp
bnB1dD4gZWxlbWVudHMgc2Nyb2xsZWQgb3V0IG9mIHZpZXcgZG9uJ3Qgc2hvdwogLy8gc2Nyb2xs
YmFycyBvbiB0aGUgYm9keS4gV2UgY2FuJ3QgYWRkIGFubm90YXRpb25zIGRpcmVjdGx5IHRvIHRo
ZSBib2R5LCBiZWNhdXNlIG92ZXJmbG93OiBoaWRkZW4gb24gdGhlIGJvZHkKQEAgLTU3NCw2ICs1
ODEsOSBAQCBpbmxpbmUgUERGUGx1Z2luOjpQREZQbHVnaW4oV2ViRnJhbWUmIGZyYW1lKQogICAg
ICwgbV9zY3JvbGxDb3JuZXJMYXllcihhZG9wdE5TKFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXll
ciBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhpc10pKQogICAgICwgbV9wZGZMYXllckNvbnRy
b2xsZXIoYWRvcHROUyhbW3BkZkxheWVyQ29udHJvbGxlckNsYXNzKCkgYWxsb2NdIGluaXRdKSkK
ICAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dLUERGTGF5ZXJD
b250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKSkKKyNpZiBI
QVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorICAgICwgbV9wZGZUaHJlYWQoVGhyZWFkOjpjcmVh
dGUoIlBERiBkb2N1bWVudCB0aHJlYWQiLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCB0aGlzXSAoKSBtdXRhYmxlIHsgdGhyZWFkRW50cnkoV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSk7
IH0pKQorI2VuZGlmCiB7CiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVsZWdhdGUg
PSBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpOwogICAgIG1fcGRmTGF5ZXJDb250
cm9sbGVyLmdldCgpLnBhcmVudExheWVyID0gbV9jb250ZW50TGF5ZXIuZ2V0KCk7CkBAIC02MDgs
NiArNjE4LDE0NSBAQCBQREZQbHVnaW46On5QREZQbHVnaW4oKQogewogfQogCisjaWYgSEFWRShJ
TkNSRU1FTlRBTF9QREZfQVBJUykKK3N0YXRpYyBzaXplX3QgZGF0YVByb3ZpZGVyR2V0Qnl0ZXNB
dFBvc2l0aW9uQ2FsbGJhY2sodm9pZCogaW5mbywgdm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlv
biwgc2l6ZV90IGNvdW50KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAg
UmVmPFBERlBsdWdpbj4gcGx1Z2luID0gKigoUERGUGx1Z2luKilpbmZvKTsKKyAgICBXVEY6OlNl
bWFwaG9yZSBkYXRhU2VtYXBob3JlIHsgMCB9OworICAgIHNpemVfdCBieXRlc1Byb3ZpZGVkID0g
MDsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcGx1Z2luID0gV1RGTW92ZShwbHVn
aW4pLCBwb3NpdGlvbiwgY291bnQsIGJ1ZmZlciwgJmRhdGFTZW1hcGhvcmUsICZieXRlc1Byb3Zp
ZGVkXSB7CisgICAgICAgIHBsdWdpbi0+Z2V0UmVzb3VyY2VCeXRlc0F0UG9zaXRpb24oY291bnQs
IHBvc2l0aW9uLCBbY291bnQsIGJ1ZmZlciwgJmRhdGFTZW1hcGhvcmUsICZieXRlc1Byb3ZpZGVk
XShjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IGJ5dGVzQ291bnQpIHsKKyAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoY291bnQsIGJ5dGVzQ291bnQgPD0gY291bnQpOworICAgICAgICAgICAg
bWVtY3B5KGJ1ZmZlciwgYnl0ZXMsIGJ5dGVzQ291bnQpOworICAgICAgICAgICAgYnl0ZXNQcm92
aWRlZCA9IGJ5dGVzQ291bnQ7CisgICAgICAgICAgICBkYXRhU2VtYXBob3JlLnNpZ25hbCgpOwor
ICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRhdGFTZW1hcGhvcmUud2FpdCgpOworICAgIHJl
dHVybiBieXRlc1Byb3ZpZGVkOworfQorCitzdGF0aWMgdm9pZCBkYXRhUHJvdmlkZXJHZXRCeXRl
UmFuZ2VzQ2FsbGJhY2sodm9pZCogaW5mbywgQ0ZNdXRhYmxlQXJyYXlSZWYgYnVmZmVycywgY29u
c3QgQ0ZSYW5nZSogcmFuZ2VzLCBzaXplX3QgY291bnQpCit7CisgICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisKKyAgICBSZWY8UERGUGx1Z2luPiBwbHVnaW4gPSAqKChQREZQbHVnaW4qKWlu
Zm8pOworICAgIFdURjo6U2VtYXBob3JlIGRhdGFTZW1hcGhvcmUgeyAwIH07CisgICAgVmVjdG9y
PFJldGFpblB0cjxDRkRhdGFSZWY+PiBkYXRhUmVzdWx0cyhjb3VudCk7CisKKyAgICAvLyBGSVhN
RTogT25jZSB3ZSBzdXBwb3J0IHJhbmdlIHJlcXVlc3RzLCBtYWtlIGEgc2luZ2xlIHJlcXVlc3Qg
Zm9yIGFsbCByYW5nZXMgaW5zdGVhZCBvZiA8Y291bnQ+IGluZGl2aWR1YWwgcmVxdWVzdHMuCisg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwbHVnaW4gPSBXVEZNb3ZlKHBsdWdpbiksICZk
YXRhUmVzdWx0cywgcmFuZ2VzLCBjb3VudCwgJmRhdGFTZW1hcGhvcmVdIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBwbHVnaW4tPmdl
dFJlc291cmNlQnl0ZXNBdFBvc2l0aW9uKHJhbmdlc1tpXS5sZW5ndGgsIHJhbmdlc1tpXS5sb2Nh
dGlvbiwgW2ksICZkYXRhUmVzdWx0cywgJmRhdGFTZW1hcGhvcmVdKGNvbnN0IHVpbnQ4X3QqIGJ5
dGVzLCBzaXplX3QgYnl0ZXNDb3VudCkgeworICAgICAgICAgICAgICAgIGRhdGFSZXN1bHRzW2ld
ID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYnl0ZXMsIGJ5dGVz
Q291bnQpKTsKKyAgICAgICAgICAgICAgICBkYXRhU2VtYXBob3JlLnNpZ25hbCgpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKKyAgICAgICAgZGF0YVNlbWFwaG9yZS53YWl0KCk7CisKKyAgICBmb3Ig
KGF1dG8mIHJlc3VsdCA6IGRhdGFSZXN1bHRzKSB7CisgICAgICAgIGlmICghcmVzdWx0KQorICAg
ICAgICAgICAgcmVzdWx0ID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgMCwgMCkpOworICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYnVmZmVycywgcmVzdWx0Lmdl
dCgpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRhdGFQcm92aWRlclJlbGVhc2VJbmZvQ2Fs
bGJhY2sodm9pZCogaW5mbykKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBh
ZG9wdFJlZigoUERGUGx1Z2luKilpbmZvKTsKK30KKwordm9pZCBQREZQbHVnaW46OnRocmVhZEVu
dHJ5KFJlZjxQREZQbHVnaW4+JiYgcHJvdGVjdGVkUGx1Z2luKQoreworICAgIENHRGF0YVByb3Zp
ZGVyRGlyZWN0QWNjZXNzUmFuZ2VzQ2FsbGJhY2tzIGRhdGFQcm92aWRlckNhbGxiYWNrcyB7Cisg
ICAgICAgIDAsCisgICAgICAgIGRhdGFQcm92aWRlckdldEJ5dGVzQXRQb3NpdGlvbkNhbGxiYWNr
LAorICAgICAgICBkYXRhUHJvdmlkZXJHZXRCeXRlUmFuZ2VzQ2FsbGJhY2ssCisgICAgICAgIGRh
dGFQcm92aWRlclJlbGVhc2VJbmZvQ2FsbGJhY2ssCisgICAgfTsKKworICAgIC8vIEJhbGFuY2Vk
IGJ5IGEgZGVyZWYgaW5zaWRlIG9mIHRoZSBkYXRhUHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxiYWNr
CisgICAgcmVmKCk7CisKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92
aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVNdWx0aVJhbmdlRGlyZWN0QWNjZXNz
KHRoaXMsIGtDR0RhdGFQcm92aWRlckluZGV0ZXJtaW5hdGVTaXplLCAmZGF0YVByb3ZpZGVyQ2Fs
bGJhY2tzKSk7CisgICAgQ0dEYXRhUHJvdmlkZXJTZXRQcm9wZXJ0eShkYXRhUHJvdmlkZXIuZ2V0
KCksIGtDR0RhdGFQcm92aWRlckhhc0hpZ2hMYXRlbmN5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAg
bV9iYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQgPSBhZG9wdE5TKFtbcGRmRG9jdW1lbnRDbGFzcygp
IGFsbG9jXSBpbml0V2l0aFByb3ZpZGVyOmRhdGFQcm92aWRlci5nZXQoKV0pOworCisgICAgLy8g
VGhlIG1haW4gdGhyZWFkIGRpc3BhdGNoIGJlbG93IHJlbW92ZXMgdGhlIGxhc3QgcmVmZXJlbmNl
IHRvIHRoZSBQREYgdGhyZWFkLgorICAgIC8vIEl0IG11c3QgYmUgdGhlIGxhc3QgY29kZSBleGVj
dXRlZCBpbiB0aGlzIGZ1bmN0aW9uLgorICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3Rl
Y3RlZFBsdWdpbiA9IFdURk1vdmUocHJvdGVjdGVkUGx1Z2luKV0geworICAgICAgICBhZG9wdEJh
Y2tncm91bmRUaHJlYWREb2N1bWVudCgpOworICAgIH0pOworfQorCit2b2lkIFBERlBsdWdpbjo6
dW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3RhbmRpbmdSYW5nZVJlcXVlc3RzKCkKK3sKKyAgICBm
b3IgKGF1dG8mIHJlcXVlc3QgOiBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMpCisgICAg
ICAgIHVuY29uZGl0aW9uYWxDb21wbGV0ZVJhbmdlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICBtX291
dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMuY2xlYXIoKTsKK30KKwordm9pZCBQREZQbHVnaW46
OnVuY29uZGl0aW9uYWxDb21wbGV0ZVJhbmdlUmVxdWVzdChCeXRlUmFuZ2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIHVpbnQ2NF90IGZ1bGxTaXplID0gbV9kYXRhID8gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KENGRGF0YUdldExlbmd0aChtX2RhdGEuZ2V0KCkpKSA6IDA7CisgICAgaWYgKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihyZXF1ZXN0LnBvc2l0aW9uKSA+PSBmdWxsU2l6ZSkgeworICAgICAg
ICByZXF1ZXN0LmNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIDApOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgYXV0byBjb3VudCA9IHJlcXVlc3QucG9zaXRpb24gKyByZXF1ZXN0LmNv
dW50ID4gZnVsbFNpemUgPyBmdWxsU2l6ZSAtIHJlcXVlc3QucG9zaXRpb24gOiByZXF1ZXN0LmNv
dW50OworICAgIHJlcXVlc3QuY29tcGxldGlvbkhhbmRsZXIoQ0ZEYXRhR2V0Qnl0ZVB0cihtX2Rh
dGEuZ2V0KCkpICsgcmVxdWVzdC5wb3NpdGlvbiwgY291bnQpOworfQorCit2b2lkIFBERlBsdWdp
bjo6Z2V0UmVzb3VyY2VCeXRlc0F0UG9zaXRpb24oc2l6ZV90IGNvdW50LCBvZmZfdCBwb3NpdGlv
biwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCB1aW50OF90Kiwgc2l6ZV90KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgdWlu
dDY0X3QgZGF0YUxlbmd0aCA9IG1fZGF0YSA/IHN0YXRpY19jYXN0PHVpbnQ2NF90PihDRkRhdGFH
ZXRMZW5ndGgobV9kYXRhLmdldCgpKSkgOiAwOworICAgIGlmIChtX2RhdGEgJiYgZGF0YUxlbmd0
aCA+PSBwb3NpdGlvbiArIGNvdW50KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENGRGF0
YUdldEJ5dGVQdHIobV9kYXRhLmdldCgpKSArIHBvc2l0aW9uLCBjb3VudCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBCeXRlUmFuZ2VSZXF1ZXN0IHJlcXVlc3QgPSB7IHBvc2l0aW9u
LCBjb3VudCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikgfTsKKyAgICBpZiAobV9kb2N1bWVu
dEZpbmlzaGVkTG9hZGluZykgeworICAgICAgICB1bmNvbmRpdGlvbmFsQ29tcGxldGVSYW5nZVJl
cXVlc3QocmVxdWVzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX291dHN0YW5k
aW5nQnl0ZVJhbmdlUmVxdWVzdHMuYXBwZW5kKFdURk1vdmUocmVxdWVzdCkpOworfQorCit2b2lk
IFBERlBsdWdpbjo6YWRvcHRCYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQoKQoreworICAgIEFTU0VS
VCghbV9wZGZEb2N1bWVudCk7CisgICAgQVNTRVJUKG1fYmFja2dyb3VuZFRocmVhZERvY3VtZW50
KTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV9wZGZEb2N1bWVudCA9IFdU
Rk1vdmUobV9iYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQpOworCisgICAgLy8gSWYgdGhlIHBsdWdp
biB3YXMgbWFudWFsbHkgZGVzdHJveWVkLCB0aGUgbV9wZGZUaHJlYWQgbWlnaHQgYWxyZWFkeSBi
ZSBnb25lLgorICAgIGlmIChtX3BkZlRocmVhZCkgeworICAgICAgICBtX3BkZlRocmVhZC0+d2Fp
dEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgbV9wZGZUaHJlYWQgPSBudWxscHRyOworICAgIH0K
KworICAgIC8vIElmIHRoZSBwbHVnaW4gaXMgYmVpbmcgZGVzdHJveWVkLCBubyBwb2ludCBpbiBk
b2luZyBhbnkgbW9yZSBQREYgd29yaworICAgIGlmIChtX2lzQmVpbmdEZXN0cm95ZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGluc3RhbGxQREZEb2N1bWVudCgpOworfQorI2VuZGlmIC8vIEhB
VkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCisKIFBsdWdpbkluZm8gUERGUGx1Z2luOjpwbHVnaW5J
bmZvKCkKIHsKICAgICBQbHVnaW5JbmZvIGluZm87CkBAIC05NDQsMTUgKzEwOTMsMjcgQEAgdm9p
ZCBQREZQbHVnaW46OmNvbnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVkKCkKIHZvaWQgUERGUGx1
Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQogewogICAgIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwot
ICAgIAotICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gZG9jdW1lbnQgPSBhZG9wdE5TKFtbcGRm
RG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6cmF3RGF0YSgpXSk7CiAKLSAgICBz
ZXRQREZEb2N1bWVudChkb2N1bWVudCk7CisgICAgbV9kb2N1bWVudEZpbmlzaGVkTG9hZGluZyA9
IHRydWU7CisKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorICAgIC8vIEF0IHRoaXMg
cG9pbnQgd2Uga25vdyBhbGwgZGF0YSBmb3IgdGhlIGRvY3VtZW50LCBhbmQgdGhlcmVmb3JlIHdl
IGtub3cgaG93IHRvIGFuc3dlciBhbnkgb3V0c3RhbmRpbmcgcmFuZ2UgcmVxdWVzdHMuCisgICAg
dW5jb25kaXRpb25hbENvbXBsZXRlT3V0c3RhbmRpbmdSYW5nZVJlcXVlc3RzKCk7CisjZWxzZQor
ICAgIG1fcGRmRG9jdW1lbnQgPSBhZG9wdE5TKFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9jXSBp
bml0V2l0aERhdGE6cmF3RGF0YSgpXSk7CisgICAgaW5zdGFsbFBERkRvY3VtZW50KCk7CisjZW5k
aWYKK30KKwordm9pZCBQREZQbHVnaW46Omluc3RhbGxQREZEb2N1bWVudCgpCit7CisgICAgQVNT
RVJUKG1fcGRmRG9jdW1lbnQpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICB1
cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7CiAKICAgICBbbV9wZGZMYXllckNvbnRy
b2xsZXIgc2V0RnJhbWVTaXplOnNpemUoKV07Ci0gICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0
KCkuZG9jdW1lbnQgPSBkb2N1bWVudC5nZXQoKTsKKyAgICBtX3BkZkxheWVyQ29udHJvbGxlci5n
ZXQoKS5kb2N1bWVudCA9IG1fcGRmRG9jdW1lbnQuZ2V0KCk7CiAKICAgICBpZiAoaGFuZGxlc1Bh
Z2VTY2FsZUZhY3RvcigpKQogICAgICAgICBwbHVnaW5WaWV3KCktPnNldFBhZ2VTY2FsZUZhY3Rv
cihbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXSwgSW50UG9pbnQoKSk7
CkBAIC05NjQsNyArMTEyNSw3IEBAIHZvaWQgUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQo
KQogCiAgICAgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKIAotICAgIGlmIChbZG9jdW1lbnQg
aXNMb2NrZWRdKQorICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pCiAgICAgICAgIGNy
ZWF0ZVBhc3N3b3JkRW50cnlGb3JtKCk7CiAKICAgICBpZiAoW21fcGRmTGF5ZXJDb250cm9sbGVy
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0VVJMRnJhZ21lbnQ6KV0pIHsKQEAgLTEw
MzMsNiArMTE5NCwxOSBAQCB2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZURh
dGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCiAgICAgICAgIG1fZGF0YSA9IGFkb3B0
Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CiAKICAgICBDRkRhdGFBcHBlbmRCeXRlcyht
X2RhdGEuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0
aCk7CisKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorICAgIHNpemVfdCBpbmRleCA9
IDA7CisgICAgd2hpbGUgKGluZGV4IDwgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnNp
emUoKSkgeworICAgICAgICBhdXRvJiByZXF1ZXN0ID0gbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJl
cXVlc3RzW2luZGV4XTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihDRkRhdGFH
ZXRMZW5ndGgobV9kYXRhLmdldCgpKSkgPj0gcmVxdWVzdC5wb3NpdGlvbiArIHJlcXVlc3QuY291
bnQpIHsKKyAgICAgICAgICAgIHJlcXVlc3QuY29tcGxldGlvbkhhbmRsZXIoQ0ZEYXRhR2V0Qnl0
ZVB0cihtX2RhdGEuZ2V0KCkpICsgcmVxdWVzdC5wb3NpdGlvbiwgcmVxdWVzdC5jb3VudCk7Cisg
ICAgICAgICAgICBtX291dHN0YW5kaW5nQnl0ZVJhbmdlUmVxdWVzdHMucmVtb3ZlKGluZGV4KTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgICsraW5kZXg7CisgICAg
fQorI2VuZGlmCiB9CiAKIHZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGaW5pc2hMb2Fk
aW5nKCkKQEAgLTEwNDMsNyArMTIxNyw4IEBAIHZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1E
aWRGaW5pc2hMb2FkaW5nKCkKIAogdm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZhaWwo
Ym9vbCkKIHsKLSAgICBtX2RhdGEuY2xlYXIoKTsKKyAgICBtX2RhdGEgPSBudWxscHRyOworICAg
IHVuY29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpOwogfQogCiB2
b2lkIFBERlBsdWdpbjo6cnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKQpAQCAtMTA3NCw3ICsxMjQ5
LDcgQEAgdm9pZCBQREZQbHVnaW46OmF0dGVtcHRUb1VubG9ja1BERihjb25zdCBTdHJpbmcmIHBh
c3N3b3JkKQogewogICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBhdHRlbXB0VG9VbmxvY2tXaXRo
UGFzc3dvcmQ6cGFzc3dvcmRdOwogCi0gICAgaWYgKCFbcGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0p
IHsKKyAgICBpZiAoIVttX3BkZkRvY3VtZW50IGlzTG9ja2VkXSkgewogICAgICAgICBtX3Bhc3N3
b3JkRmllbGQgPSBudWxscHRyOwogCiAgICAgICAgIGNhbGN1bGF0ZVNpemVzKCk7CkBAIC0xMDk5
LDcgKzEyNzQsNyBAQCB2b2lkIFBERlBsdWdpbjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQo
ZmxvYXQpCiAKIHZvaWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiB7Ci0gICAgaWYgKFtw
ZGZEb2N1bWVudCgpIGlzTG9ja2VkXSkgeworICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xvY2tl
ZF0pIHsKICAgICAgICAgbV9maXJzdFBhZ2VIZWlnaHQgPSAwOwogICAgICAgICBzZXRQREZEb2N1
bWVudFNpemUoSW50U2l6ZSgwLCAwKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTExMjksNiArMTMw
NCwxNiBAQCB2b2lkIFBERlBsdWdpbjo6d2lsbERldGFjaFJlbmRlcmVyKCkKIAogdm9pZCBQREZQ
bHVnaW46OmRlc3Ryb3koKQogeworICAgIG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcgPSB0cnVl
OworCisgICAgLy8gQnkgY2xlYXJpbmcgb3V0IHRoZSByZXNvdXJjZSBkYXRhIGFuZCBoYW5kbGlu
ZyBhbGwgb3V0c3RhbmRpbmcgcmFuZ2UgcmVxdWVzdHMsCisgICAgLy8gd2UgY2FuIGZvcmNlIHRo
ZSBQREZUaHJlYWQgdG8gY29tcGxldGUgcXVpY2tseQorICAgIGlmIChtX3BkZlRocmVhZCkgewor
ICAgICAgICBtX2RhdGEgPSBudWxscHRyOworICAgICAgICB1bmNvbmRpdGlvbmFsQ29tcGxldGVP
dXRzdGFuZGluZ1JhbmdlUmVxdWVzdHMoKTsKKyAgICAgICAgbV9wZGZUaHJlYWQtPndhaXRGb3JD
b21wbGV0aW9uKCk7CisgICAgfQorCiAgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVs
ZWdhdGUgPSAwOwogCiAgICAgaWYgKHdlYkZyYW1lKCkpIHsKQEAgLTE0MTgsNyArMTYwMyw3IEBA
IGJvb2wgUERGUGx1Z2luOjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2
ZW50KQogICAgIGlmIChtX3Njcm9sbENvcm5lckxheWVyICYmIEludFJlY3QobV9zY3JvbGxDb3Ju
ZXJMYXllci5nZXQoKS5mcmFtZSkuY29udGFpbnMobW91c2VQb3NpdGlvbikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChbcGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0pCisgICAgaWYg
KFttX3BkZkRvY3VtZW50IGlzTG9ja2VkXSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ly8gUmlnaHQtY2xpY2tzIGFuZCBDb250cm9sLWNsaWNrcyBhbHdheXMgY2FsbCBoYW5kbGVDb250
ZXh0TWVudUV2ZW50IGFzIHdlbGwuCkBAIC0xNzEzLDcgKzE4OTgsNyBAQCB2b2lkIFBERlBsdWdp
bjo6c2F2ZVRvUERGKCkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IG5vdGlm
eSB0aGUgdXNlciB0aGF0IHRoZXkgY2FuJ3Qgc2F2ZSBiZWZvcmUgdGhlIGRvY3VtZW50IGlzIGZp
bmlzaGVkIGxvYWRpbmcuCiAgICAgLy8gUERGVmlld0NvbnRyb2xsZXIgZG9lcyBhbiBOU0JlZXAo
KSwgYnV0IHRoYXQgc2VlbXMgaW5zdWZmaWNpZW50LgotICAgIGlmICghcGRmRG9jdW1lbnQoKSkK
KyAgICBpZiAoIW1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7CkBAIC0xNzI1LDcgKzE5MTAsNyBAQCB2b2lk
IFBERlBsdWdpbjo6b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbigpCiAgICAgaWYgKCFtX3RlbXBv
cmFyeVBERlVVSUQpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBub3Rp
ZnkgdGhlIHVzZXIgdGhhdCB0aGV5IGNhbid0IHNhdmUgYmVmb3JlIHRoZSBkb2N1bWVudCBpcyBm
aW5pc2hlZCBsb2FkaW5nLgogICAgICAgICAvLyBQREZWaWV3Q29udHJvbGxlciBkb2VzIGFuIE5T
QmVlcCgpLCBidXQgdGhhdCBzZWVtcyBpbnN1ZmZpY2llbnQuCi0gICAgICAgIGlmICghcGRmRG9j
dW1lbnQoKSkKKyAgICAgICAgaWYgKCFtX2RvY3VtZW50RmluaXNoZWRMb2FkaW5nKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7CkBAIC0x
ODEwLDcgKzE5OTUsNyBAQCB1bnNpZ25lZCBQREZQbHVnaW46OmNvdW50RmluZE1hdGNoZXMoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIFdlYkNvcmU6OkZpbmRPcHRpb25zCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgTlNTdHJpbmdDb21wYXJlT3B0aW9ucyBuc09wdGlvbnMgPSBvcHRpb25zLmNvbnRh
aW5zKFdlYkNvcmU6OkNhc2VJbnNlbnNpdGl2ZSkgPyBOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaCA6
IDA7Ci0gICAgcmV0dXJuIFtbcGRmRG9jdW1lbnQoKSBmaW5kU3RyaW5nOnRhcmdldCB3aXRoT3B0
aW9uczpuc09wdGlvbnNdIGNvdW50XTsKKyAgICByZXR1cm4gW1ttX3BkZkRvY3VtZW50IGZpbmRT
dHJpbmc6dGFyZ2V0IHdpdGhPcHRpb25zOm5zT3B0aW9uc10gY291bnRdOwogfQogCiBQREZTZWxl
Y3Rpb24gKlBERlBsdWdpbjo6bmV4dE1hdGNoRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBCT09MIHNlYXJjaEZvcndhcmQsIEJPT0wgY2FzZVNlbnNpdGl2ZSwgQk9PTCB3cmFwU2VhcmNo
LCBQREZTZWxlY3Rpb24gKmluaXRpYWxTZWxlY3Rpb24sIEJPT0wgc3RhcnRJblNlbGVjdGlvbikK
QEAgLTE4MjQsOCArMjAwOSw2IEBAIFBERlNlbGVjdGlvbiAqUERGUGx1Z2luOjpuZXh0TWF0Y2hG
b3JTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEJPT0wgc2VhcmNoRm9yCiAgICAgaWYgKCFj
YXNlU2Vuc2l0aXZlKQogICAgICAgICBvcHRpb25zIHw9IE5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNo
OwogCi0gICAgUERGRG9jdW1lbnQgKmRvY3VtZW50ID0gcGRmRG9jdW1lbnQoKS5nZXQoKTsKLQog
ICAgIFJldGFpblB0cjxQREZTZWxlY3Rpb24+IHNlbGVjdGlvbkZvckluaXRpYWxTZWFyY2ggPSBh
ZG9wdE5TKFtpbml0aWFsU2VsZWN0aW9uIGNvcHldKTsKICAgICBpZiAoc3RhcnRJblNlbGVjdGlv
bikgewogICAgICAgICAvLyBJbml0aWFsbHkgd2Ugd2FudCB0byBpbmNsdWRlIHRoZSBzZWxlY3Rl
ZCB0ZXh0IGluIHRoZSBzZWFyY2guIFNvIHdlIG11c3QgbW9kaWZ5IHRoZSBzdGFydGluZyBzZWFy
Y2gKQEAgLTE4NDEsMTUgKzIwMjQsMTUgQEAgUERGU2VsZWN0aW9uICpQREZQbHVnaW46Om5leHRN
YXRjaEZvclN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgQk9PTCBzZWFyY2hGb3IKICAgICAg
ICAgfQogICAgIH0KIAotICAgIFBERlNlbGVjdGlvbiAqZm91bmRTZWxlY3Rpb24gPSBbZG9jdW1l
bnQgZmluZFN0cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjpzZWxlY3Rpb25Gb3JJbml0aWFsU2Vh
cmNoLmdldCgpIHdpdGhPcHRpb25zOm9wdGlvbnNdOworICAgIFBERlNlbGVjdGlvbiAqZm91bmRT
ZWxlY3Rpb24gPSBbbV9wZGZEb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCBmcm9tU2VsZWN0aW9u
OnNlbGVjdGlvbkZvckluaXRpYWxTZWFyY2guZ2V0KCkgd2l0aE9wdGlvbnM6b3B0aW9uc107CiAK
ICAgICAvLyBJZiB3ZSBmaXJzdCBzZWFyY2hlZCBpbiB0aGUgc2VsZWN0aW9uLCBhbmQgd2UgZm91
bmQgdGhlIHNlbGVjdGlvbiwgc2VhcmNoIGFnYWluIGZyb20ganVzdCBwYXN0IHRoZSBzZWxlY3Rp
b24uCiAgICAgaWYgKHN0YXJ0SW5TZWxlY3Rpb24gJiYgW2ZvdW5kU2VsZWN0aW9uIGlzRXF1YWw6
aW5pdGlhbFNlbGVjdGlvbl0pCi0gICAgICAgIGZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZp
bmRTdHJpbmc6dGFyZ2V0IGZyb21TZWxlY3Rpb246aW5pdGlhbFNlbGVjdGlvbiB3aXRoT3B0aW9u
czpvcHRpb25zXTsKKyAgICAgICAgZm91bmRTZWxlY3Rpb24gPSBbbV9wZGZEb2N1bWVudCBmaW5k
U3RyaW5nOnRhcmdldCBmcm9tU2VsZWN0aW9uOmluaXRpYWxTZWxlY3Rpb24gd2l0aE9wdGlvbnM6
b3B0aW9uc107CiAKICAgICBpZiAoIWZvdW5kU2VsZWN0aW9uICYmIHdyYXBTZWFyY2gpIHsKLSAg
ICAgICAgYXV0byBlbXB0eVNlbGVjdGlvbiA9IGFkb3B0TlMoW1twZGZTZWxlY3Rpb25DbGFzcygp
IGFsbG9jXSBpbml0V2l0aERvY3VtZW50OmRvY3VtZW50XSk7Ci0gICAgICAgIGZvdW5kU2VsZWN0
aW9uID0gW2RvY3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0IGZyb21TZWxlY3Rpb246ZW1wdHlTZWxl
Y3Rpb24uZ2V0KCkgd2l0aE9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIGF1dG8gZW1wdHlTZWxl
Y3Rpb24gPSBhZG9wdE5TKFtbcGRmU2VsZWN0aW9uQ2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEb2N1
bWVudDptX3BkZkRvY3VtZW50LmdldCgpXSk7CisgICAgICAgIGZvdW5kU2VsZWN0aW9uID0gW21f
cGRmRG9jdW1lbnQgZmluZFN0cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjplbXB0eVNlbGVjdGlv
bi5nZXQoKSB3aXRoT3B0aW9uczpvcHRpb25zXTsKICAgICB9CiAKICAgICByZXR1cm4gZm91bmRT
ZWxlY3Rpb247Cg==
</data>
<flag name="review"
          id="407902"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392500</attachid>
            <date>2020-03-04 15:58:57 -0800</date>
            <delta_ts>2020-03-04 16:00:19 -0800</delta_ts>
            <desc>PFL</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19331</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggN2Q4MDQyOTE0OTIuLjA4ZWE4NzJjYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIw
LTAzLTA0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBMYXkg
aW5pdGlhbCBncm91bmR3b3JrIGZvciBuZXcgUERGIGxvYWRpbmcgbW9kZWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODU5OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1IYXZl
Lmg6CisKIDIwMjAtMDMtMDMgIEppdGVuIE1laHRhICA8am1laHRhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZG9wdCBIVFRQIEFsdGVybmF0aXZlIFNlcnZpY2VzIFN0b3JhZ2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1I
YXZlLmgKaW5kZXggNzRiNWEwM2RlMjAuLjMwN2NiNGJiZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUu
aApAQCAtNjAyLDMgKzYwMiw3IEBACiAjaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE2MDApIHx8IChQTEFURk9STShJT1NfRkFNSUxZKSAm
JiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAwMDApCiAjZGVmaW5lIEhB
VkVfV0VCUCAxCiAjZW5kaWYKKworI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNjAwKQorI2RlZmluZSBIQVZFX0lOQ1JFTUVOVEFMX1BE
Rl9BUElTIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmYTc2Y2I0ODY4Zi4uMTRlMjgwZjE1YjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjAtMDMtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgorCisgICAgICAgIExheSBpbml0aWFsIGdyb3VuZHdvcmsgZm9yIG5ldyBQ
REYgbG9hZGluZyBtb2RlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA4NTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4K
KworICAgICAgICBGaXJzdCBwaWVjZSBvZiBhZG9wdGluZyBzb21lIG5ldyBwbGF0Zm9ybSBQREYg
QVBJcy4KKyAgICAgICAgRGlzYWJsZWQgYnkgZGVmYXVsdCBldmVuIG9uIHBsYXRmb3JtcyB0aGF0
IHN1cHBvcnQgaXQuCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZSBmb3Igc2hpcHBpbmcgY29u
Zmlncy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6ZGF0YVByb3Zp
ZGVyR2V0Qnl0ZXNBdFBvc2l0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpkYXRhUHJv
dmlkZXJHZXRCeXRlUmFuZ2VzQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpkYXRhUHJvdmlk
ZXJSZWxlYXNlSW5mb0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp0aHJl
YWRFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBs
ZXRlUmFuZ2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpnZXRSZXNvdXJj
ZUJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YWRvcHRCYWNr
Z3JvdW5kVGhyZWFkRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBkZkRv
Y3VtZW50RGlkTG9hZCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aW5zdGFsbFBERkRv
Y3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNl
aXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YXR0ZW1wdFRvVW5sb2NrUERG
KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcyk6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6c2F2ZVRvUERGKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpvcGVu
V2l0aE5hdGl2ZUFwcGxpY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb3Vu
dEZpbmRNYXRjaGVzKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpuZXh0TWF0Y2hGb3JT
dHJpbmcpOgorCiAyMDIwLTAzLTAzICBKaXRlbiBNZWh0YSAgPGptZWh0YUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRvcHQgSFRUUCBBbHRlcm5hdGl2ZSBTZXJ2aWNlcyBTdG9yYWdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKaW5kZXggMDcy
YTFjMDNlMTUuLmMzMmYwZWVkMmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCkBAIC0zNiw2ICszNiwxMyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvRmluZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KworLy8gRm9yIG5vdywgZGlzYWJsZSBuZXcgUERGIEFQSXMgYnkgZGVmYXVsdCBldmVuIG9uIHBs
YXRmb3JtcyB3aGVyZSBvdGhlcndpc2UgZW5hYmxlZC4KKy8vIEZJWE1FOiBFbmFibGUgdGhpcyB3
aGVuIHJlYWR5LgorI2lmZGVmIEhBVkVfSU5DUkVNRU5UQUxfUERGX0FQSVMKKyN1bmRlZiBIQVZF
X0lOQ1JFTUVOVEFMX1BERl9BUElTCisjZW5kaWYKIAogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3Bh
cXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7CiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1ZhbHVl
KiBKU09iamVjdFJlZjsKQEAgLTExNiw2ICsxMjMsMTAgQEAgcHVibGljOgogICAgIFBERlBsdWdp
bkFubm90YXRpb24qIGFjdGl2ZUFubm90YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUFu
bm90YXRpb24uZ2V0KCk7IH0KICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlKiBheE9iamVjdENh
Y2hlKCkgY29uc3Q7CiAKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorICAgIHZvaWQg
Z2V0UmVzb3VyY2VCeXRlc0F0UG9zaXRpb24oc2l6ZV90IGNvdW50LCBvZmZfdCBwb3NpdGlvbiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCB1aW50OF90Kiwgc2l6ZV90IGNvdW50KT4mJik7
CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQREZQbHVnaW4oV2ViRnJhbWUmKTsK
IApAQCAtMjI1LDYgKzIzNiw3IEBAIHByaXZhdGU6CiAgICAgUmVmPFdlYkNvcmU6OlNjcm9sbGJh
cj4gY3JlYXRlU2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsKICAgICB2
b2lkIGRlc3Ryb3lTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOwogICAg
IHZvaWQgcGRmRG9jdW1lbnREaWRMb2FkKCk7CisgICAgdm9pZCBpbnN0YWxsUERGRG9jdW1lbnQo
KTsKICAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwogICAgIHZvaWQgY2FsY3VsYXRlU2l6
ZXMoKTsKICAgICB2b2lkIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CkBAIC0yNDEsOSArMjUz
LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0oKTsKIAot
ICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X3BkZkRvY3VtZW50OyB9Ci0gICAgdm9pZCBzZXRQREZEb2N1bWVudChSZXRhaW5QdHI8UERGRG9j
dW1lbnQ+IGRvY3VtZW50KSB7IG1fcGRmRG9jdW1lbnQgPSBkb2N1bWVudDsgfQotCiAgICAgV2Vi
Q29yZTo6SW50U2l6ZSBwZGZEb2N1bWVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX3BkZkRvY3Vt
ZW50U2l6ZTsgfQogICAgIHZvaWQgc2V0UERGRG9jdW1lbnRTaXplKFdlYkNvcmU6OkludFNpemUg
c2l6ZSkgeyBtX3BkZkRvY3VtZW50U2l6ZSA9IHNpemU7IH0KIApAQCAtMzAyLDExICszMTEsMzAg
QEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRhOwogCiAg
ICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OworCisgICAgYm9vbCBtX2Rv
Y3VtZW50RmluaXNoZWRMb2FkaW5nIHsgZmFsc2UgfTsKICAgICB1bnNpZ25lZCBtX2ZpcnN0UGFn
ZUhlaWdodCB7IDAgfTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGRmRG9jdW1lbnRTaXplOyAv
LyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBzLgogCiAgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9s
bGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxi
YXI+IG1fdmVydGljYWxTY3JvbGxiYXI7CisKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElT
KQorICAgIHZvaWQgdGhyZWFkRW50cnkoUmVmPFBERlBsdWdpbj4mJik7CisgICAgdm9pZCBhZG9w
dEJhY2tncm91bmRUaHJlYWREb2N1bWVudCgpOworCisgICAgc3RydWN0IEJ5dGVSYW5nZVJlcXVl
c3QgeworICAgICAgICBvZmZfdCBwb3NpdGlvbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90IGNvdW50
IHsgMCB9OworICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QgY291bnQpPiBjb21wbGV0aW9uSGFuZGxlcjsKKyAgICB9OworICAgIHZvaWQgdW5jb25k
aXRpb25hbENvbXBsZXRlUmFuZ2VSZXF1ZXN0KEJ5dGVSYW5nZVJlcXVlc3QmKTsKKyAgICB2b2lk
IHVuY29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpOworCisgICAg
UmV0YWluUHRyPFBERkRvY3VtZW50PiBtX2JhY2tncm91bmRUaHJlYWREb2N1bWVudDsKKyAgICBS
ZWZQdHI8VGhyZWFkPiBtX3BkZlRocmVhZDsKKyAgICBWZWN0b3I8Qnl0ZVJhbmdlUmVxdWVzdD4g
bV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luLm1tCmluZGV4IDY3ODM5ZjUzNzJiLi42ZTQwYTk0MTc1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBAIC04Nyw2
ICs4NywxMyBAQAogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbXBv
cnQgPHBhbC9zcGkvbWFjL05TTWVudVNQSS5oPgogI2ltcG9ydCA8d3RmL1VVSUQuaD4KKyNpbXBv
cnQgPHd0Zi9XVEZTZW1hcGhvcmUuaD4KKworI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMp
CitAaW50ZXJmYWNlIFBERkRvY3VtZW50ICgpCistKGluc3RhbmNldHlwZSkgaW5pdFdpdGhQcm92
aWRlcjooQ0dEYXRhUHJvdmlkZXJSZWYpZGF0YVByb3ZpZGVyOworQGVuZAorI2VuZGlmCiAKIC8v
IFNldCBvdmVyZmxvdzogaGlkZGVuIG9uIHRoZSBhbm5vdGF0aW9uIGNvbnRhaW5lciBzbyA8aW5w
dXQ+IGVsZW1lbnRzIHNjcm9sbGVkIG91dCBvZiB2aWV3IGRvbid0IHNob3cKIC8vIHNjcm9sbGJh
cnMgb24gdGhlIGJvZHkuIFdlIGNhbid0IGFkZCBhbm5vdGF0aW9ucyBkaXJlY3RseSB0byB0aGUg
Ym9keSwgYmVjYXVzZSBvdmVyZmxvdzogaGlkZGVuIG9uIHRoZSBib2R5CkBAIC01NzQsNiArNTgx
LDkgQEAgaW5saW5lIFBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lJiBmcmFtZSkKICAgICAs
IG1fc2Nyb2xsQ29ybmVyTGF5ZXIoYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIg
YWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKSkKICAgICAsIG1fcGRmTGF5ZXJDb250cm9s
bGVyKGFkb3B0TlMoW1twZGZMYXllckNvbnRyb2xsZXJDbGFzcygpIGFsbG9jXSBpbml0XSkpCiAg
ICAgLCBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlKGFkb3B0TlMoW1tXS1BERkxheWVyQ29u
dHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSkpCisjaWYgSEFW
RShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICAsIG1fcGRmVGhyZWFkKFRocmVhZDo6Y3JlYXRl
KCJQREYgZG9jdW1lbnQgdGhyZWFkIiwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
dGhpc10gKCkgbXV0YWJsZSB7IHRocmVhZEVudHJ5KFdURk1vdmUocHJvdGVjdGVkVGhpcykpOyB9
KSkKKyNlbmRpZgogewogICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0g
bV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKTsKICAgICBtX3BkZkxheWVyQ29udHJv
bGxlci5nZXQoKS5wYXJlbnRMYXllciA9IG1fY29udGVudExheWVyLmdldCgpOwpAQCAtNjA4LDYg
KzYxOCwxNDUgQEAgUERGUGx1Z2luOjp+UERGUGx1Z2luKCkKIHsKIH0KIAorI2lmIEhBVkUoSU5D
UkVNRU5UQUxfUERGX0FQSVMpCitzdGF0aWMgc2l6ZV90IGRhdGFQcm92aWRlckdldEJ5dGVzQXRQ
b3NpdGlvbkNhbGxiYWNrKHZvaWQqIGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24s
IHNpemVfdCBjb3VudCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIFJl
ZjxQREZQbHVnaW4+IHBsdWdpbiA9ICooKFBERlBsdWdpbiopaW5mbyk7CisgICAgV1RGOjpTZW1h
cGhvcmUgZGF0YVNlbWFwaG9yZSB7IDAgfTsKKyAgICBzaXplX3QgYnl0ZXNQcm92aWRlZCA9IDA7
CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3BsdWdpbiA9IFdURk1vdmUocGx1Z2lu
KSwgcG9zaXRpb24sIGNvdW50LCBidWZmZXIsICZkYXRhU2VtYXBob3JlLCAmYnl0ZXNQcm92aWRl
ZF0geworICAgICAgICBwbHVnaW4tPmdldFJlc291cmNlQnl0ZXNBdFBvc2l0aW9uKGNvdW50LCBw
b3NpdGlvbiwgW2NvdW50LCBidWZmZXIsICZkYXRhU2VtYXBob3JlLCAmYnl0ZXNQcm92aWRlZF0o
Y29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc0NvdW50KSB7CisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGNvdW50LCBieXRlc0NvdW50IDw9IGNvdW50KTsKKyAgICAgICAgICAgIG1l
bWNweShidWZmZXIsIGJ5dGVzLCBieXRlc0NvdW50KTsKKyAgICAgICAgICAgIGJ5dGVzUHJvdmlk
ZWQgPSBieXRlc0NvdW50OworICAgICAgICAgICAgZGF0YVNlbWFwaG9yZS5zaWduYWwoKTsKKyAg
ICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkYXRhU2VtYXBob3JlLndhaXQoKTsKKyAgICByZXR1
cm4gYnl0ZXNQcm92aWRlZDsKK30KKworc3RhdGljIHZvaWQgZGF0YVByb3ZpZGVyR2V0Qnl0ZVJh
bmdlc0NhbGxiYWNrKHZvaWQqIGluZm8sIENGTXV0YWJsZUFycmF5UmVmIGJ1ZmZlcnMsIGNvbnN0
IENGUmFuZ2UqIHJhbmdlcywgc2l6ZV90IGNvdW50KQoreworICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOworCisgICAgUmVmPFBERlBsdWdpbj4gcGx1Z2luID0gKigoUERGUGx1Z2luKilpbmZv
KTsKKyAgICBXVEY6OlNlbWFwaG9yZSBkYXRhU2VtYXBob3JlIHsgMCB9OworICAgIFZlY3RvcjxS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGF0YVJlc3VsdHMoY291bnQpOworCisgICAgLy8gRklYTUU6
IE9uY2Ugd2Ugc3VwcG9ydCByYW5nZSByZXF1ZXN0cywgbWFrZSBhIHNpbmdsZSByZXF1ZXN0IGZv
ciBhbGwgcmFuZ2VzIGluc3RlYWQgb2YgPGNvdW50PiBpbmRpdmlkdWFsIHJlcXVlc3RzLgorICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcGx1Z2luID0gV1RGTW92ZShwbHVnaW4pLCAmZGF0
YVJlc3VsdHMsIHJhbmdlcywgY291bnQsICZkYXRhU2VtYXBob3JlXSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgcGx1Z2luLT5nZXRS
ZXNvdXJjZUJ5dGVzQXRQb3NpdGlvbihyYW5nZXNbaV0ubGVuZ3RoLCByYW5nZXNbaV0ubG9jYXRp
b24sIFtpLCAmZGF0YVJlc3VsdHMsICZkYXRhU2VtYXBob3JlXShjb25zdCB1aW50OF90KiBieXRl
cywgc2l6ZV90IGJ5dGVzQ291bnQpIHsKKyAgICAgICAgICAgICAgICBkYXRhUmVzdWx0c1tpXSA9
IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJ5dGVzLCBieXRlc0Nv
dW50KSk7CisgICAgICAgICAgICAgICAgZGF0YVNlbWFwaG9yZS5zaWduYWwoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCisgICAgICAgIGRhdGFTZW1hcGhvcmUud2FpdCgpOworCisgICAgZm9yIChh
dXRvJiByZXN1bHQgOiBkYXRhUmVzdWx0cykgeworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IDAsIDApKTsKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGJ1ZmZlcnMsIHJlc3VsdC5nZXQo
KSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkYXRhUHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxi
YWNrKHZvaWQqIGluZm8pCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgYWRv
cHRSZWYoKFBERlBsdWdpbiopaW5mbyk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp0aHJlYWRFbnRy
eShSZWY8UERGUGx1Z2luPiYmIHByb3RlY3RlZFBsdWdpbikKK3sKKyAgICBDR0RhdGFQcm92aWRl
ckRpcmVjdEFjY2Vzc1Jhbmdlc0NhbGxiYWNrcyBkYXRhUHJvdmlkZXJDYWxsYmFja3MgeworICAg
ICAgICAwLAorICAgICAgICBkYXRhUHJvdmlkZXJHZXRCeXRlc0F0UG9zaXRpb25DYWxsYmFjaywK
KyAgICAgICAgZGF0YVByb3ZpZGVyR2V0Qnl0ZVJhbmdlc0NhbGxiYWNrLAorICAgICAgICBkYXRh
UHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxiYWNrLAorICAgIH07CisKKyAgICAvLyBCYWxhbmNlZCBi
eSBhIGRlcmVmIGluc2lkZSBvZiB0aGUgZGF0YVByb3ZpZGVyUmVsZWFzZUluZm9DYWxsYmFjawor
ICAgIHJlZigpOworCisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlk
ZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlTXVsdGlSYW5nZURpcmVjdEFjY2Vzcyh0
aGlzLCBrQ0dEYXRhUHJvdmlkZXJJbmRldGVybWluYXRlU2l6ZSwgJmRhdGFQcm92aWRlckNhbGxi
YWNrcykpOworICAgIENHRGF0YVByb3ZpZGVyU2V0UHJvcGVydHkoZGF0YVByb3ZpZGVyLmdldCgp
LCBrQ0dEYXRhUHJvdmlkZXJIYXNIaWdoTGF0ZW5jeSwga0NGQm9vbGVhblRydWUpOworICAgIG1f
YmFja2dyb3VuZFRocmVhZERvY3VtZW50ID0gYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xhc3MoKSBh
bGxvY10gaW5pdFdpdGhQcm92aWRlcjpkYXRhUHJvdmlkZXIuZ2V0KCldKTsKKworICAgIC8vIFRo
ZSBtYWluIHRocmVhZCBkaXNwYXRjaCBiZWxvdyByZW1vdmVzIHRoZSBsYXN0IHJlZmVyZW5jZSB0
byB0aGUgUERGIHRocmVhZC4KKyAgICAvLyBJdCBtdXN0IGJlIHRoZSBsYXN0IGNvZGUgZXhlY3V0
ZWQgaW4gdGhpcyBmdW5jdGlvbi4KKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0
ZWRQbHVnaW4gPSBXVEZNb3ZlKHByb3RlY3RlZFBsdWdpbildIHsKKyAgICAgICAgYWRvcHRCYWNr
Z3JvdW5kVGhyZWFkRG9jdW1lbnQoKTsKKyAgICB9KTsKK30KKwordm9pZCBQREZQbHVnaW46OnVu
Y29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpCit7CisgICAgZm9y
IChhdXRvJiByZXF1ZXN0IDogbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzKQorICAgICAg
ICB1bmNvbmRpdGlvbmFsQ29tcGxldGVSYW5nZVJlcXVlc3QocmVxdWVzdCk7CisgICAgbV9vdXRz
dGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLmNsZWFyKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp1
bmNvbmRpdGlvbmFsQ29tcGxldGVSYW5nZVJlcXVlc3QoQnl0ZVJhbmdlUmVxdWVzdCYgcmVxdWVz
dCkKK3sKKyAgICB1aW50NjRfdCBmdWxsU2l6ZSA9IG1fZGF0YSA/IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihDRkRhdGFHZXRMZW5ndGgobV9kYXRhLmdldCgpKSkgOiAwOworICAgIGlmIChzdGF0aWNf
Y2FzdDx1aW50NjRfdD4ocmVxdWVzdC5wb3NpdGlvbikgPj0gZnVsbFNpemUpIHsKKyAgICAgICAg
cmVxdWVzdC5jb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCAwKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGF1dG8gY291bnQgPSByZXF1ZXN0LnBvc2l0aW9uICsgcmVxdWVzdC5jb3Vu
dCA+IGZ1bGxTaXplID8gZnVsbFNpemUgLSByZXF1ZXN0LnBvc2l0aW9uIDogcmVxdWVzdC5jb3Vu
dDsKKyAgICByZXF1ZXN0LmNvbXBsZXRpb25IYW5kbGVyKENGRGF0YUdldEJ5dGVQdHIobV9kYXRh
LmdldCgpKSArIHJlcXVlc3QucG9zaXRpb24sIGNvdW50KTsKK30KKwordm9pZCBQREZQbHVnaW46
OmdldFJlc291cmNlQnl0ZXNBdFBvc2l0aW9uKHNpemVfdCBjb3VudCwgb2ZmX3QgcG9zaXRpb24s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHVpbnQ2
NF90IGRhdGFMZW5ndGggPSBtX2RhdGEgPyBzdGF0aWNfY2FzdDx1aW50NjRfdD4oQ0ZEYXRhR2V0
TGVuZ3RoKG1fZGF0YS5nZXQoKSkpIDogMDsKKyAgICBpZiAobV9kYXRhICYmIGRhdGFMZW5ndGgg
Pj0gcG9zaXRpb24gKyBjb3VudCkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDRkRhdGFH
ZXRCeXRlUHRyKG1fZGF0YS5nZXQoKSkgKyBwb3NpdGlvbiwgY291bnQpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQnl0ZVJhbmdlUmVxdWVzdCByZXF1ZXN0ID0geyBwb3NpdGlvbiwg
Y291bnQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpIH07CisgICAgaWYgKG1fZG9jdW1lbnRG
aW5pc2hlZExvYWRpbmcpIHsKKyAgICAgICAgdW5jb25kaXRpb25hbENvbXBsZXRlUmFuZ2VSZXF1
ZXN0KHJlcXVlc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vdXRzdGFuZGlu
Z0J5dGVSYW5nZVJlcXVlc3RzLmFwcGVuZChXVEZNb3ZlKHJlcXVlc3QpKTsKK30KKwordm9pZCBQ
REZQbHVnaW46OmFkb3B0QmFja2dyb3VuZFRocmVhZERvY3VtZW50KCkKK3sKKyAgICBBU1NFUlQo
IW1fcGRmRG9jdW1lbnQpOworICAgIEFTU0VSVChtX2JhY2tncm91bmRUaHJlYWREb2N1bWVudCk7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIG1fcGRmRG9jdW1lbnQgPSBXVEZN
b3ZlKG1fYmFja2dyb3VuZFRocmVhZERvY3VtZW50KTsKKworICAgIC8vIElmIHRoZSBwbHVnaW4g
d2FzIG1hbnVhbGx5IGRlc3Ryb3llZCwgdGhlIG1fcGRmVGhyZWFkIG1pZ2h0IGFscmVhZHkgYmUg
Z29uZS4KKyAgICBpZiAobV9wZGZUaHJlYWQpIHsKKyAgICAgICAgbV9wZGZUaHJlYWQtPndhaXRG
b3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fcGRmVGhyZWFkID0gbnVsbHB0cjsKKyAgICB9CisK
KyAgICAvLyBJZiB0aGUgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZCwgbm8gcG9pbnQgaW4gZG9p
bmcgYW55IG1vcmUgUERGIHdvcmsKKyAgICBpZiAobV9pc0JlaW5nRGVzdHJveWVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbnN0YWxsUERGRG9jdW1lbnQoKTsKK30KKyNlbmRpZiAvLyBIQVZF
KElOQ1JFTUVOVEFMX1BERl9BUElTKQorCiBQbHVnaW5JbmZvIFBERlBsdWdpbjo6cGx1Z2luSW5m
bygpCiB7CiAgICAgUGx1Z2luSW5mbyBpbmZvOwpAQCAtOTQ0LDE1ICsxMDkzLDI3IEBAIHZvaWQg
UERGUGx1Z2luOjpjb252ZXJ0UG9zdFNjcmlwdERhdGFJZk5lZWRlZCgpCiB2b2lkIFBERlBsdWdp
bjo6cGRmRG9jdW1lbnREaWRMb2FkKCkKIHsKICAgICBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKLSAg
ICAKLSAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IGRvY3VtZW50ID0gYWRvcHROUyhbW3BkZkRv
Y3VtZW50Q2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEYXRhOnJhd0RhdGEoKV0pOwogCi0gICAgc2V0
UERGRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcgPSB0
cnVlOworCisjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICAvLyBBdCB0aGlzIHBv
aW50IHdlIGtub3cgYWxsIGRhdGEgZm9yIHRoZSBkb2N1bWVudCwgYW5kIHRoZXJlZm9yZSB3ZSBr
bm93IGhvdyB0byBhbnN3ZXIgYW55IG91dHN0YW5kaW5nIHJhbmdlIHJlcXVlc3RzLgorICAgIHVu
Y29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpOworI2Vsc2UKKyAg
ICBtX3BkZkRvY3VtZW50ID0gYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxvY10gaW5p
dFdpdGhEYXRhOnJhd0RhdGEoKV0pOworICAgIGluc3RhbGxQREZEb2N1bWVudCgpOworI2VuZGlm
Cit9CisKK3ZvaWQgUERGUGx1Z2luOjppbnN0YWxsUERGRG9jdW1lbnQoKQoreworICAgIEFTU0VS
VChtX3BkZkRvY3VtZW50KTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgdXBk
YXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOwogCiAgICAgW21fcGRmTGF5ZXJDb250cm9s
bGVyIHNldEZyYW1lU2l6ZTpzaXplKCldOwotICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgp
LmRvY3VtZW50ID0gZG9jdW1lbnQuZ2V0KCk7CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0
KCkuZG9jdW1lbnQgPSBtX3BkZkRvY3VtZW50LmdldCgpOwogCiAgICAgaWYgKGhhbmRsZXNQYWdl
U2NhbGVGYWN0b3IoKSkKICAgICAgICAgcGx1Z2luVmlldygpLT5zZXRQYWdlU2NhbGVGYWN0b3Io
W21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0sIEludFBvaW50KCkpOwpA
QCAtOTY0LDcgKzExMjUsNyBAQCB2b2lkIFBERlBsdWdpbjo6cGRmRG9jdW1lbnREaWRMb2FkKCkK
IAogICAgIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CiAKLSAgICBpZiAoW2RvY3VtZW50IGlz
TG9ja2VkXSkKKyAgICBpZiAoW21fcGRmRG9jdW1lbnQgaXNMb2NrZWRdKQogICAgICAgICBjcmVh
dGVQYXNzd29yZEVudHJ5Rm9ybSgpOwogCiAgICAgaWYgKFttX3BkZkxheWVyQ29udHJvbGxlciBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldFVSTEZyYWdtZW50OildKSB7CkBAIC0xMDMz
LDYgKzExOTQsMTkgQEAgdm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRh
KGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICAgICBtX2RhdGEgPSBhZG9wdENG
KENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwogCiAgICAgQ0ZEYXRhQXBwZW5kQnl0ZXMobV9k
YXRhLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgp
OworCisjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICBzaXplX3QgaW5kZXggPSAw
OworICAgIHdoaWxlIChpbmRleCA8IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5zaXpl
KCkpIHsKKyAgICAgICAgYXV0byYgcmVxdWVzdCA9IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1
ZXN0c1tpbmRleF07CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQ0ZEYXRhR2V0
TGVuZ3RoKG1fZGF0YS5nZXQoKSkpID49IHJlcXVlc3QucG9zaXRpb24gKyByZXF1ZXN0LmNvdW50
KSB7CisgICAgICAgICAgICByZXF1ZXN0LmNvbXBsZXRpb25IYW5kbGVyKENGRGF0YUdldEJ5dGVQ
dHIobV9kYXRhLmdldCgpKSArIHJlcXVlc3QucG9zaXRpb24sIHJlcXVlc3QuY291bnQpOworICAg
ICAgICAgICAgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnJlbW92ZShpbmRleCk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICArK2luZGV4OworICAgIH0K
KyNlbmRpZgogfQogCiB2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGlu
ZygpCkBAIC0xMDQzLDcgKzEyMTcsOCBAQCB2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlk
RmluaXNoTG9hZGluZygpCiAKIHZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJv
b2wpCiB7Ci0gICAgbV9kYXRhLmNsZWFyKCk7CisgICAgbV9kYXRhID0gbnVsbHB0cjsKKyAgICB1
bmNvbmRpdGlvbmFsQ29tcGxldGVPdXRzdGFuZGluZ1JhbmdlUmVxdWVzdHMoKTsKIH0KIAogdm9p
ZCBQREZQbHVnaW46OnJ1blNjcmlwdHNJblBERkRvY3VtZW50KCkKQEAgLTEwNzQsNyArMTI0OSw3
IEBAIHZvaWQgUERGUGx1Z2luOjphdHRlbXB0VG9VbmxvY2tQREYoY29uc3QgU3RyaW5nJiBwYXNz
d29yZCkKIHsKICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgYXR0ZW1wdFRvVW5sb2NrV2l0aFBh
c3N3b3JkOnBhc3N3b3JkXTsKIAotICAgIGlmICghW3BkZkRvY3VtZW50KCkgaXNMb2NrZWRdKSB7
CisgICAgaWYgKCFbbV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pIHsKICAgICAgICAgbV9wYXNzd29y
ZEZpZWxkID0gbnVsbHB0cjsKIAogICAgICAgICBjYWxjdWxhdGVTaXplcygpOwpAQCAtMTA5OSw3
ICsxMjc0LDcgQEAgdm9pZCBQREZQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZs
b2F0KQogCiB2b2lkIFBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMoKQogewotICAgIGlmIChbcGRm
RG9jdW1lbnQoKSBpc0xvY2tlZF0pIHsKKyAgICBpZiAoW21fcGRmRG9jdW1lbnQgaXNMb2NrZWRd
KSB7CiAgICAgICAgIG1fZmlyc3RQYWdlSGVpZ2h0ID0gMDsKICAgICAgICAgc2V0UERGRG9jdW1l
bnRTaXplKEludFNpemUoMCwgMCkpOwogICAgICAgICByZXR1cm47CkBAIC0xMTI5LDYgKzEzMDQs
MTYgQEAgdm9pZCBQREZQbHVnaW46OndpbGxEZXRhY2hSZW5kZXJlcigpCiAKIHZvaWQgUERGUGx1
Z2luOjpkZXN0cm95KCkKIHsKKyAgICBtX2RvY3VtZW50RmluaXNoZWRMb2FkaW5nID0gdHJ1ZTsK
KworICAgIC8vIEJ5IGNsZWFyaW5nIG91dCB0aGUgcmVzb3VyY2UgZGF0YSBhbmQgaGFuZGxpbmcg
YWxsIG91dHN0YW5kaW5nIHJhbmdlIHJlcXVlc3RzLAorICAgIC8vIHdlIGNhbiBmb3JjZSB0aGUg
UERGVGhyZWFkIHRvIGNvbXBsZXRlIHF1aWNrbHkKKyAgICBpZiAobV9wZGZUaHJlYWQpIHsKKyAg
ICAgICAgbV9kYXRhID0gbnVsbHB0cjsKKyAgICAgICAgdW5jb25kaXRpb25hbENvbXBsZXRlT3V0
c3RhbmRpbmdSYW5nZVJlcXVlc3RzKCk7CisgICAgICAgIG1fcGRmVGhyZWFkLT53YWl0Rm9yQ29t
cGxldGlvbigpOworICAgIH0KKwogICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVn
YXRlID0gMDsKIAogICAgIGlmICh3ZWJGcmFtZSgpKSB7CkBAIC0xNDE4LDcgKzE2MDMsNyBAQCBi
b29sIFBERlBsdWdpbjo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVu
dCkKICAgICBpZiAobV9zY3JvbGxDb3JuZXJMYXllciAmJiBJbnRSZWN0KG1fc2Nyb2xsQ29ybmVy
TGF5ZXIuZ2V0KCkuZnJhbWUpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoW3BkZkRvY3VtZW50KCkgaXNMb2NrZWRdKQorICAgIGlmIChb
bV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IFJpZ2h0LWNsaWNrcyBhbmQgQ29udHJvbC1jbGlja3MgYWx3YXlzIGNhbGwgaGFuZGxlQ29udGV4
dE1lbnVFdmVudCBhcyB3ZWxsLgpAQCAtMTcxMyw3ICsxODk4LDcgQEAgdm9pZCBQREZQbHVnaW46
OnNhdmVUb1BERigpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBub3RpZnkg
dGhlIHVzZXIgdGhhdCB0aGV5IGNhbid0IHNhdmUgYmVmb3JlIHRoZSBkb2N1bWVudCBpcyBmaW5p
c2hlZCBsb2FkaW5nLgogICAgIC8vIFBERlZpZXdDb250cm9sbGVyIGRvZXMgYW4gTlNCZWVwKCks
IGJ1dCB0aGF0IHNlZW1zIGluc3VmZmljaWVudC4KLSAgICBpZiAoIXBkZkRvY3VtZW50KCkpCisg
ICAgaWYgKCFtX2RvY3VtZW50RmluaXNoZWRMb2FkaW5nKQogICAgICAgICByZXR1cm47CiAKICAg
ICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOwpAQCAtMTcyNSw3ICsxOTEwLDcgQEAgdm9pZCBQ
REZQbHVnaW46Om9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24oKQogICAgIGlmICghbV90ZW1wb3Jh
cnlQREZVVUlEKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgbm90aWZ5
IHRoZSB1c2VyIHRoYXQgdGhleSBjYW4ndCBzYXZlIGJlZm9yZSB0aGUgZG9jdW1lbnQgaXMgZmlu
aXNoZWQgbG9hZGluZy4KICAgICAgICAgLy8gUERGVmlld0NvbnRyb2xsZXIgZG9lcyBhbiBOU0Jl
ZXAoKSwgYnV0IHRoYXQgc2VlbXMgaW5zdWZmaWNpZW50LgotICAgICAgICBpZiAoIXBkZkRvY3Vt
ZW50KCkpCisgICAgICAgIGlmICghbV9kb2N1bWVudEZpbmlzaGVkTG9hZGluZykKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOwpAQCAtMTgx
MCw3ICsxOTk1LDcgQEAgdW5zaWduZWQgUERGUGx1Z2luOjpjb3VudEZpbmRNYXRjaGVzKGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBXZWJDb3JlOjpGaW5kT3B0aW9ucwogICAgICAgICByZXR1cm4gMDsK
IAogICAgIE5TU3RyaW5nQ29tcGFyZU9wdGlvbnMgbnNPcHRpb25zID0gb3B0aW9ucy5jb250YWlu
cyhXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmUpID8gTlNDYXNlSW5zZW5zaXRpdmVTZWFyY2ggOiAw
OwotICAgIHJldHVybiBbW3BkZkRvY3VtZW50KCkgZmluZFN0cmluZzp0YXJnZXQgd2l0aE9wdGlv
bnM6bnNPcHRpb25zXSBjb3VudF07CisgICAgcmV0dXJuIFtbbV9wZGZEb2N1bWVudCBmaW5kU3Ry
aW5nOnRhcmdldCB3aXRoT3B0aW9uczpuc09wdGlvbnNdIGNvdW50XTsKIH0KIAogUERGU2VsZWN0
aW9uICpQREZQbHVnaW46Om5leHRNYXRjaEZvclN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwg
Qk9PTCBzZWFyY2hGb3J3YXJkLCBCT09MIGNhc2VTZW5zaXRpdmUsIEJPT0wgd3JhcFNlYXJjaCwg
UERGU2VsZWN0aW9uICppbml0aWFsU2VsZWN0aW9uLCBCT09MIHN0YXJ0SW5TZWxlY3Rpb24pCkBA
IC0xODI0LDggKzIwMDksNiBAQCBQREZTZWxlY3Rpb24gKlBERlBsdWdpbjo6bmV4dE1hdGNoRm9y
U3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBCT09MIHNlYXJjaEZvcgogICAgIGlmICghY2Fz
ZVNlbnNpdGl2ZSkKICAgICAgICAgb3B0aW9ucyB8PSBOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaDsK
IAotICAgIFBERkRvY3VtZW50ICpkb2N1bWVudCA9IHBkZkRvY3VtZW50KCkuZ2V0KCk7Ci0KICAg
ICBSZXRhaW5QdHI8UERGU2VsZWN0aW9uPiBzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoID0gYWRv
cHROUyhbaW5pdGlhbFNlbGVjdGlvbiBjb3B5XSk7CiAgICAgaWYgKHN0YXJ0SW5TZWxlY3Rpb24p
IHsKICAgICAgICAgLy8gSW5pdGlhbGx5IHdlIHdhbnQgdG8gaW5jbHVkZSB0aGUgc2VsZWN0ZWQg
dGV4dCBpbiB0aGUgc2VhcmNoLiBTbyB3ZSBtdXN0IG1vZGlmeSB0aGUgc3RhcnRpbmcgc2VhcmNo
CkBAIC0xODQxLDE1ICsyMDI0LDE1IEBAIFBERlNlbGVjdGlvbiAqUERGUGx1Z2luOjpuZXh0TWF0
Y2hGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEJPT0wgc2VhcmNoRm9yCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBQREZTZWxlY3Rpb24gKmZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50
IGZpbmRTdHJpbmc6dGFyZ2V0IGZyb21TZWxlY3Rpb246c2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJj
aC5nZXQoKSB3aXRoT3B0aW9uczpvcHRpb25zXTsKKyAgICBQREZTZWxlY3Rpb24gKmZvdW5kU2Vs
ZWN0aW9uID0gW21fcGRmRG9jdW1lbnQgZmluZFN0cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjpz
ZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoLmdldCgpIHdpdGhPcHRpb25zOm9wdGlvbnNdOwogCiAg
ICAgLy8gSWYgd2UgZmlyc3Qgc2VhcmNoZWQgaW4gdGhlIHNlbGVjdGlvbiwgYW5kIHdlIGZvdW5k
IHRoZSBzZWxlY3Rpb24sIHNlYXJjaCBhZ2FpbiBmcm9tIGp1c3QgcGFzdCB0aGUgc2VsZWN0aW9u
LgogICAgIGlmIChzdGFydEluU2VsZWN0aW9uICYmIFtmb3VuZFNlbGVjdGlvbiBpc0VxdWFsOmlu
aXRpYWxTZWxlY3Rpb25dKQotICAgICAgICBmb3VuZFNlbGVjdGlvbiA9IFtkb2N1bWVudCBmaW5k
U3RyaW5nOnRhcmdldCBmcm9tU2VsZWN0aW9uOmluaXRpYWxTZWxlY3Rpb24gd2l0aE9wdGlvbnM6
b3B0aW9uc107CisgICAgICAgIGZvdW5kU2VsZWN0aW9uID0gW21fcGRmRG9jdW1lbnQgZmluZFN0
cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjppbml0aWFsU2VsZWN0aW9uIHdpdGhPcHRpb25zOm9w
dGlvbnNdOwogCiAgICAgaWYgKCFmb3VuZFNlbGVjdGlvbiAmJiB3cmFwU2VhcmNoKSB7Ci0gICAg
ICAgIGF1dG8gZW1wdHlTZWxlY3Rpb24gPSBhZG9wdE5TKFtbcGRmU2VsZWN0aW9uQ2xhc3MoKSBh
bGxvY10gaW5pdFdpdGhEb2N1bWVudDpkb2N1bWVudF0pOwotICAgICAgICBmb3VuZFNlbGVjdGlv
biA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCBmcm9tU2VsZWN0aW9uOmVtcHR5U2VsZWN0
aW9uLmdldCgpIHdpdGhPcHRpb25zOm9wdGlvbnNdOworICAgICAgICBhdXRvIGVtcHR5U2VsZWN0
aW9uID0gYWRvcHROUyhbW3BkZlNlbGVjdGlvbkNsYXNzKCkgYWxsb2NdIGluaXRXaXRoRG9jdW1l
bnQ6bV9wZGZEb2N1bWVudC5nZXQoKV0pOworICAgICAgICBmb3VuZFNlbGVjdGlvbiA9IFttX3Bk
ZkRvY3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0IGZyb21TZWxlY3Rpb246ZW1wdHlTZWxlY3Rpb24u
Z2V0KCkgd2l0aE9wdGlvbnM6b3B0aW9uc107CiAgICAgfQogCiAgICAgcmV0dXJuIGZvdW5kU2Vs
ZWN0aW9uOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392501</attachid>
            <date>2020-03-04 16:00:19 -0800</date>
            <delta_ts>2020-03-04 16:42:42 -0800</delta_ts>
            <desc>PFL</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19418</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggN2Q4MDQyOTE0OTIuLjA4ZWE4NzJjYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIw
LTAzLTA0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBMYXkg
aW5pdGlhbCBncm91bmR3b3JrIGZvciBuZXcgUERGIGxvYWRpbmcgbW9kZWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODU5OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1IYXZl
Lmg6CisKIDIwMjAtMDMtMDMgIEppdGVuIE1laHRhICA8am1laHRhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZG9wdCBIVFRQIEFsdGVybmF0aXZlIFNlcnZpY2VzIFN0b3JhZ2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1I
YXZlLmgKaW5kZXggNzRiNWEwM2RlMjAuLjMwN2NiNGJiZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUu
aApAQCAtNjAyLDMgKzYwMiw3IEBACiAjaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE2MDApIHx8IChQTEFURk9STShJT1NfRkFNSUxZKSAm
JiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAwMDApCiAjZGVmaW5lIEhB
VkVfV0VCUCAxCiAjZW5kaWYKKworI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNjAwKQorI2RlZmluZSBIQVZFX0lOQ1JFTUVOVEFMX1BE
Rl9BUElTIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmYTc2Y2I0ODY4Zi4uMTRlMjgwZjE1YjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjAtMDMtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgorCisgICAgICAgIExheSBpbml0aWFsIGdyb3VuZHdvcmsgZm9yIG5ldyBQ
REYgbG9hZGluZyBtb2RlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA4NTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4K
KworICAgICAgICBGaXJzdCBwaWVjZSBvZiBhZG9wdGluZyBzb21lIG5ldyBwbGF0Zm9ybSBQREYg
QVBJcy4KKyAgICAgICAgRGlzYWJsZWQgYnkgZGVmYXVsdCBldmVuIG9uIHBsYXRmb3JtcyB0aGF0
IHN1cHBvcnQgaXQuCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZSBmb3Igc2hpcHBpbmcgY29u
Zmlncy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6ZGF0YVByb3Zp
ZGVyR2V0Qnl0ZXNBdFBvc2l0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpkYXRhUHJv
dmlkZXJHZXRCeXRlUmFuZ2VzQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpkYXRhUHJvdmlk
ZXJSZWxlYXNlSW5mb0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp0aHJl
YWRFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBs
ZXRlUmFuZ2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpnZXRSZXNvdXJj
ZUJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YWRvcHRCYWNr
Z3JvdW5kVGhyZWFkRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBkZkRv
Y3VtZW50RGlkTG9hZCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aW5zdGFsbFBERkRv
Y3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNl
aXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YXR0ZW1wdFRvVW5sb2NrUERG
KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcyk6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6c2F2ZVRvUERGKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpvcGVu
V2l0aE5hdGl2ZUFwcGxpY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb3Vu
dEZpbmRNYXRjaGVzKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpuZXh0TWF0Y2hGb3JT
dHJpbmcpOgorCiAyMDIwLTAzLTAzICBKaXRlbiBNZWh0YSAgPGptZWh0YUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRvcHQgSFRUUCBBbHRlcm5hdGl2ZSBTZXJ2aWNlcyBTdG9yYWdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKaW5kZXggMDcy
YTFjMDNlMTUuLmMzMmYwZWVkMmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCkBAIC0zNiw2ICszNiwxMyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvRmluZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KworLy8gRm9yIG5vdywgZGlzYWJsZSBuZXcgUERGIEFQSXMgYnkgZGVmYXVsdCBldmVuIG9uIHBs
YXRmb3JtcyB3aGVyZSBvdGhlcndpc2UgZW5hYmxlZC4KKy8vIEZJWE1FOiBFbmFibGUgdGhpcyB3
aGVuIHJlYWR5LgorLy8jaWZkZWYgSEFWRV9JTkNSRU1FTlRBTF9QREZfQVBJUworLy8jdW5kZWYg
SEFWRV9JTkNSRU1FTlRBTF9QREZfQVBJUworLy8jZW5kaWYKIAogdHlwZWRlZiBjb25zdCBzdHJ1
Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7CiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVK
U1ZhbHVlKiBKU09iamVjdFJlZjsKQEAgLTExNiw2ICsxMjMsMTAgQEAgcHVibGljOgogICAgIFBE
RlBsdWdpbkFubm90YXRpb24qIGFjdGl2ZUFubm90YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Fj
dGl2ZUFubm90YXRpb24uZ2V0KCk7IH0KICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlKiBheE9i
amVjdENhY2hlKCkgY29uc3Q7CiAKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorICAg
IHZvaWQgZ2V0UmVzb3VyY2VCeXRlc0F0UG9zaXRpb24oc2l6ZV90IGNvdW50LCBvZmZfdCBwb3Np
dGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCB1aW50OF90Kiwgc2l6ZV90IGNvdW50
KT4mJik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQREZQbHVnaW4oV2ViRnJh
bWUmKTsKIApAQCAtMjI1LDYgKzIzNiw3IEBAIHByaXZhdGU6CiAgICAgUmVmPFdlYkNvcmU6OlNj
cm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsK
ICAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24p
OwogICAgIHZvaWQgcGRmRG9jdW1lbnREaWRMb2FkKCk7CisgICAgdm9pZCBpbnN0YWxsUERGRG9j
dW1lbnQoKTsKICAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwogICAgIHZvaWQgY2FsY3Vs
YXRlU2l6ZXMoKTsKICAgICB2b2lkIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CkBAIC0yNDEs
OSArMjUzLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0o
KTsKIAotICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BkZkRvY3VtZW50OyB9Ci0gICAgdm9pZCBzZXRQREZEb2N1bWVudChSZXRhaW5QdHI8
UERGRG9jdW1lbnQ+IGRvY3VtZW50KSB7IG1fcGRmRG9jdW1lbnQgPSBkb2N1bWVudDsgfQotCiAg
ICAgV2ViQ29yZTo6SW50U2l6ZSBwZGZEb2N1bWVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX3Bk
ZkRvY3VtZW50U2l6ZTsgfQogICAgIHZvaWQgc2V0UERGRG9jdW1lbnRTaXplKFdlYkNvcmU6Oklu
dFNpemUgc2l6ZSkgeyBtX3BkZkRvY3VtZW50U2l6ZSA9IHNpemU7IH0KIApAQCAtMzAyLDExICsz
MTEsMzAgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRh
OwogCiAgICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OworCisgICAgYm9v
bCBtX2RvY3VtZW50RmluaXNoZWRMb2FkaW5nIHsgZmFsc2UgfTsKICAgICB1bnNpZ25lZCBtX2Zp
cnN0UGFnZUhlaWdodCB7IDAgfTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGRmRG9jdW1lbnRT
aXplOyAvLyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBzLgogCiAgICAgUmVmUHRyPFdlYkNvcmU6
OlNjcm9sbGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwogICAgIFJlZlB0cjxXZWJDb3JlOjpT
Y3JvbGxiYXI+IG1fdmVydGljYWxTY3JvbGxiYXI7CisKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BE
Rl9BUElTKQorICAgIHZvaWQgdGhyZWFkRW50cnkoUmVmPFBERlBsdWdpbj4mJik7CisgICAgdm9p
ZCBhZG9wdEJhY2tncm91bmRUaHJlYWREb2N1bWVudCgpOworCisgICAgc3RydWN0IEJ5dGVSYW5n
ZVJlcXVlc3QgeworICAgICAgICBvZmZfdCBwb3NpdGlvbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90
IGNvdW50IHsgMCB9OworICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IHVpbnQ4
X3QqLCBzaXplX3QgY291bnQpPiBjb21wbGV0aW9uSGFuZGxlcjsKKyAgICB9OworICAgIHZvaWQg
dW5jb25kaXRpb25hbENvbXBsZXRlUmFuZ2VSZXF1ZXN0KEJ5dGVSYW5nZVJlcXVlc3QmKTsKKyAg
ICB2b2lkIHVuY29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpOwor
CisgICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBtX2JhY2tncm91bmRUaHJlYWREb2N1bWVudDsK
KyAgICBSZWZQdHI8VGhyZWFkPiBtX3BkZlRocmVhZDsKKyAgICBWZWN0b3I8Qnl0ZVJhbmdlUmVx
dWVzdD4gbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzOworI2VuZGlmCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvUERGUGx1Z2luLm1tCmluZGV4IDY3ODM5ZjUzNzJiLi40MzEwMWNjZjM1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBA
IC04Nyw2ICs4NywxMyBAQAogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4K
ICNpbXBvcnQgPHBhbC9zcGkvbWFjL05TTWVudVNQSS5oPgogI2ltcG9ydCA8d3RmL1VVSUQuaD4K
KyNpbXBvcnQgPHd0Zi9XVEZTZW1hcGhvcmUuaD4KKworI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERG
X0FQSVMpCitAaW50ZXJmYWNlIFBERkRvY3VtZW50ICgpCistKGluc3RhbmNldHlwZSkgaW5pdFdp
dGhQcm92aWRlcjooQ0dEYXRhUHJvdmlkZXJSZWYpZGF0YVByb3ZpZGVyOworQGVuZAorI2VuZGlm
CiAKIC8vIFNldCBvdmVyZmxvdzogaGlkZGVuIG9uIHRoZSBhbm5vdGF0aW9uIGNvbnRhaW5lciBz
byA8aW5wdXQ+IGVsZW1lbnRzIHNjcm9sbGVkIG91dCBvZiB2aWV3IGRvbid0IHNob3cKIC8vIHNj
cm9sbGJhcnMgb24gdGhlIGJvZHkuIFdlIGNhbid0IGFkZCBhbm5vdGF0aW9ucyBkaXJlY3RseSB0
byB0aGUgYm9keSwgYmVjYXVzZSBvdmVyZmxvdzogaGlkZGVuIG9uIHRoZSBib2R5CkBAIC01NzQs
NiArNTgxLDkgQEAgaW5saW5lIFBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lJiBmcmFtZSkK
ICAgICAsIG1fc2Nyb2xsQ29ybmVyTGF5ZXIoYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFy
TGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKSkKICAgICAsIG1fcGRmTGF5ZXJD
b250cm9sbGVyKGFkb3B0TlMoW1twZGZMYXllckNvbnRyb2xsZXJDbGFzcygpIGFsbG9jXSBpbml0
XSkpCiAgICAgLCBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlKGFkb3B0TlMoW1tXS1BERkxh
eWVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSkpCisj
aWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICAsIG1fcGRmVGhyZWFkKFRocmVhZDo6
Y3JlYXRlKCJQREYgZG9jdW1lbnQgdGhyZWFkIiwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgdGhpc10gKCkgbXV0YWJsZSB7IHRocmVhZEVudHJ5KFdURk1vdmUocHJvdGVjdGVkVGhp
cykpOyB9KSkKKyNlbmRpZgogewogICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVn
YXRlID0gbV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKTsKICAgICBtX3BkZkxheWVy
Q29udHJvbGxlci5nZXQoKS5wYXJlbnRMYXllciA9IG1fY29udGVudExheWVyLmdldCgpOwpAQCAt
NjA4LDYgKzYxOCwxNDUgQEAgUERGUGx1Z2luOjp+UERGUGx1Z2luKCkKIHsKIH0KIAorI2lmIEhB
VkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCitzdGF0aWMgc2l6ZV90IGRhdGFQcm92aWRlckdldEJ5
dGVzQXRQb3NpdGlvbkNhbGxiYWNrKHZvaWQqIGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9z
aXRpb24sIHNpemVfdCBjb3VudCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKwor
ICAgIFJlZjxQREZQbHVnaW4+IHBsdWdpbiA9ICooKFBERlBsdWdpbiopaW5mbyk7CisgICAgV1RG
OjpTZW1hcGhvcmUgZGF0YVNlbWFwaG9yZSB7IDAgfTsKKyAgICBzaXplX3QgYnl0ZXNQcm92aWRl
ZCA9IDA7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3BsdWdpbiA9IFdURk1vdmUo
cGx1Z2luKSwgcG9zaXRpb24sIGNvdW50LCBidWZmZXIsICZkYXRhU2VtYXBob3JlLCAmYnl0ZXNQ
cm92aWRlZF0geworICAgICAgICBwbHVnaW4tPmdldFJlc291cmNlQnl0ZXNBdFBvc2l0aW9uKGNv
dW50LCBwb3NpdGlvbiwgW2NvdW50LCBidWZmZXIsICZkYXRhU2VtYXBob3JlLCAmYnl0ZXNQcm92
aWRlZF0oY29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc0NvdW50KSB7CisgICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGNvdW50LCBieXRlc0NvdW50IDw9IGNvdW50KTsKKyAgICAgICAg
ICAgIG1lbWNweShidWZmZXIsIGJ5dGVzLCBieXRlc0NvdW50KTsKKyAgICAgICAgICAgIGJ5dGVz
UHJvdmlkZWQgPSBieXRlc0NvdW50OworICAgICAgICAgICAgZGF0YVNlbWFwaG9yZS5zaWduYWwo
KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkYXRhU2VtYXBob3JlLndhaXQoKTsKKyAg
ICByZXR1cm4gYnl0ZXNQcm92aWRlZDsKK30KKworc3RhdGljIHZvaWQgZGF0YVByb3ZpZGVyR2V0
Qnl0ZVJhbmdlc0NhbGxiYWNrKHZvaWQqIGluZm8sIENGTXV0YWJsZUFycmF5UmVmIGJ1ZmZlcnMs
IGNvbnN0IENGUmFuZ2UqIHJhbmdlcywgc2l6ZV90IGNvdW50KQoreworICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOworCisgICAgUmVmPFBERlBsdWdpbj4gcGx1Z2luID0gKigoUERGUGx1Z2lu
KilpbmZvKTsKKyAgICBXVEY6OlNlbWFwaG9yZSBkYXRhU2VtYXBob3JlIHsgMCB9OworICAgIFZl
Y3RvcjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGF0YVJlc3VsdHMoY291bnQpOworCisgICAgLy8g
RklYTUU6IE9uY2Ugd2Ugc3VwcG9ydCByYW5nZSByZXF1ZXN0cywgbWFrZSBhIHNpbmdsZSByZXF1
ZXN0IGZvciBhbGwgcmFuZ2VzIGluc3RlYWQgb2YgPGNvdW50PiBpbmRpdmlkdWFsIHJlcXVlc3Rz
LgorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcGx1Z2luID0gV1RGTW92ZShwbHVnaW4p
LCAmZGF0YVJlc3VsdHMsIHJhbmdlcywgY291bnQsICZkYXRhU2VtYXBob3JlXSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgcGx1Z2lu
LT5nZXRSZXNvdXJjZUJ5dGVzQXRQb3NpdGlvbihyYW5nZXNbaV0ubGVuZ3RoLCByYW5nZXNbaV0u
bG9jYXRpb24sIFtpLCAmZGF0YVJlc3VsdHMsICZkYXRhU2VtYXBob3JlXShjb25zdCB1aW50OF90
KiBieXRlcywgc2l6ZV90IGJ5dGVzQ291bnQpIHsKKyAgICAgICAgICAgICAgICBkYXRhUmVzdWx0
c1tpXSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJ5dGVzLCBi
eXRlc0NvdW50KSk7CisgICAgICAgICAgICAgICAgZGF0YVNlbWFwaG9yZS5zaWduYWwoKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGRhdGFTZW1hcGhvcmUud2FpdCgpOworCisgICAg
Zm9yIChhdXRvJiByZXN1bHQgOiBkYXRhUmVzdWx0cykgeworICAgICAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgICAgIHJlc3VsdCA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDAsIDApKTsKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGJ1ZmZlcnMsIHJlc3Vs
dC5nZXQoKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkYXRhUHJvdmlkZXJSZWxlYXNlSW5m
b0NhbGxiYWNrKHZvaWQqIGluZm8pCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Cisg
ICAgYWRvcHRSZWYoKFBERlBsdWdpbiopaW5mbyk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp0aHJl
YWRFbnRyeShSZWY8UERGUGx1Z2luPiYmIHByb3RlY3RlZFBsdWdpbikKK3sKKyAgICBDR0RhdGFQ
cm92aWRlckRpcmVjdEFjY2Vzc1Jhbmdlc0NhbGxiYWNrcyBkYXRhUHJvdmlkZXJDYWxsYmFja3Mg
eworICAgICAgICAwLAorICAgICAgICBkYXRhUHJvdmlkZXJHZXRCeXRlc0F0UG9zaXRpb25DYWxs
YmFjaywKKyAgICAgICAgZGF0YVByb3ZpZGVyR2V0Qnl0ZVJhbmdlc0NhbGxiYWNrLAorICAgICAg
ICBkYXRhUHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxiYWNrLAorICAgIH07CisKKyAgICAvLyBCYWxh
bmNlZCBieSBhIGRlcmVmIGluc2lkZSBvZiB0aGUgZGF0YVByb3ZpZGVyUmVsZWFzZUluZm9DYWxs
YmFjaworICAgIHJlZigpOworCisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRh
UHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlTXVsdGlSYW5nZURpcmVjdEFj
Y2Vzcyh0aGlzLCBrQ0dEYXRhUHJvdmlkZXJJbmRldGVybWluYXRlU2l6ZSwgJmRhdGFQcm92aWRl
ckNhbGxiYWNrcykpOworICAgIENHRGF0YVByb3ZpZGVyU2V0UHJvcGVydHkoZGF0YVByb3ZpZGVy
LmdldCgpLCBrQ0dEYXRhUHJvdmlkZXJIYXNIaWdoTGF0ZW5jeSwga0NGQm9vbGVhblRydWUpOwor
ICAgIG1fYmFja2dyb3VuZFRocmVhZERvY3VtZW50ID0gYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xh
c3MoKSBhbGxvY10gaW5pdFdpdGhQcm92aWRlcjpkYXRhUHJvdmlkZXIuZ2V0KCldKTsKKworICAg
IC8vIFRoZSBtYWluIHRocmVhZCBkaXNwYXRjaCBiZWxvdyByZW1vdmVzIHRoZSBsYXN0IHJlZmVy
ZW5jZSB0byB0aGUgUERGIHRocmVhZC4KKyAgICAvLyBJdCBtdXN0IGJlIHRoZSBsYXN0IGNvZGUg
ZXhlY3V0ZWQgaW4gdGhpcyBmdW5jdGlvbi4KKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBw
cm90ZWN0ZWRQbHVnaW4gPSBXVEZNb3ZlKHByb3RlY3RlZFBsdWdpbildIHsKKyAgICAgICAgYWRv
cHRCYWNrZ3JvdW5kVGhyZWFkRG9jdW1lbnQoKTsKKyAgICB9KTsKK30KKwordm9pZCBQREZQbHVn
aW46OnVuY29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpCit7Cisg
ICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzKQor
ICAgICAgICB1bmNvbmRpdGlvbmFsQ29tcGxldGVSYW5nZVJlcXVlc3QocmVxdWVzdCk7CisgICAg
bV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLmNsZWFyKCk7Cit9CisKK3ZvaWQgUERGUGx1
Z2luOjp1bmNvbmRpdGlvbmFsQ29tcGxldGVSYW5nZVJlcXVlc3QoQnl0ZVJhbmdlUmVxdWVzdCYg
cmVxdWVzdCkKK3sKKyAgICB1aW50NjRfdCBmdWxsU2l6ZSA9IG1fZGF0YSA/IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihDRkRhdGFHZXRMZW5ndGgobV9kYXRhLmdldCgpKSkgOiAwOworICAgIGlmIChz
dGF0aWNfY2FzdDx1aW50NjRfdD4ocmVxdWVzdC5wb3NpdGlvbikgPj0gZnVsbFNpemUpIHsKKyAg
ICAgICAgcmVxdWVzdC5jb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCAwKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGF1dG8gY291bnQgPSByZXF1ZXN0LnBvc2l0aW9uICsgcmVxdWVz
dC5jb3VudCA+IGZ1bGxTaXplID8gZnVsbFNpemUgLSByZXF1ZXN0LnBvc2l0aW9uIDogcmVxdWVz
dC5jb3VudDsKKyAgICByZXF1ZXN0LmNvbXBsZXRpb25IYW5kbGVyKENGRGF0YUdldEJ5dGVQdHIo
bV9kYXRhLmdldCgpKSArIHJlcXVlc3QucG9zaXRpb24sIGNvdW50KTsKK30KKwordm9pZCBQREZQ
bHVnaW46OmdldFJlc291cmNlQnl0ZXNBdFBvc2l0aW9uKHNpemVfdCBjb3VudCwgb2ZmX3QgcG9z
aXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IHVpbnQ2NF90IGRhdGFMZW5ndGggPSBtX2RhdGEgPyBzdGF0aWNfY2FzdDx1aW50NjRfdD4oQ0ZE
YXRhR2V0TGVuZ3RoKG1fZGF0YS5nZXQoKSkpIDogMDsKKyAgICBpZiAobV9kYXRhICYmIGRhdGFM
ZW5ndGggPj0gcG9zaXRpb24gKyBjb3VudCkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
RkRhdGFHZXRCeXRlUHRyKG1fZGF0YS5nZXQoKSkgKyBwb3NpdGlvbiwgY291bnQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQnl0ZVJhbmdlUmVxdWVzdCByZXF1ZXN0ID0geyBwb3Np
dGlvbiwgY291bnQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpIH07CisgICAgaWYgKG1fZG9j
dW1lbnRGaW5pc2hlZExvYWRpbmcpIHsKKyAgICAgICAgdW5jb25kaXRpb25hbENvbXBsZXRlUmFu
Z2VSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vdXRz
dGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLmFwcGVuZChXVEZNb3ZlKHJlcXVlc3QpKTsKK30KKwor
dm9pZCBQREZQbHVnaW46OmFkb3B0QmFja2dyb3VuZFRocmVhZERvY3VtZW50KCkKK3sKKyAgICBB
U1NFUlQoIW1fcGRmRG9jdW1lbnQpOworICAgIEFTU0VSVChtX2JhY2tncm91bmRUaHJlYWREb2N1
bWVudCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIG1fcGRmRG9jdW1lbnQg
PSBXVEZNb3ZlKG1fYmFja2dyb3VuZFRocmVhZERvY3VtZW50KTsKKworICAgIC8vIElmIHRoZSBw
bHVnaW4gd2FzIG1hbnVhbGx5IGRlc3Ryb3llZCwgdGhlIG1fcGRmVGhyZWFkIG1pZ2h0IGFscmVh
ZHkgYmUgZ29uZS4KKyAgICBpZiAobV9wZGZUaHJlYWQpIHsKKyAgICAgICAgbV9wZGZUaHJlYWQt
PndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fcGRmVGhyZWFkID0gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICAvLyBJZiB0aGUgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZCwgbm8gcG9pbnQg
aW4gZG9pbmcgYW55IG1vcmUgUERGIHdvcmsKKyAgICBpZiAobV9pc0JlaW5nRGVzdHJveWVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbnN0YWxsUERGRG9jdW1lbnQoKTsKK30KKyNlbmRpZiAv
LyBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorCiBQbHVnaW5JbmZvIFBERlBsdWdpbjo6cGx1
Z2luSW5mbygpCiB7CiAgICAgUGx1Z2luSW5mbyBpbmZvOwpAQCAtOTQ0LDE1ICsxMDkzLDI3IEBA
IHZvaWQgUERGUGx1Z2luOjpjb252ZXJ0UG9zdFNjcmlwdERhdGFJZk5lZWRlZCgpCiB2b2lkIFBE
RlBsdWdpbjo6cGRmRG9jdW1lbnREaWRMb2FkKCkKIHsKICAgICBhZGRBcmNoaXZlUmVzb3VyY2Uo
KTsKLSAgICAKLSAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IGRvY3VtZW50ID0gYWRvcHROUyhb
W3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEYXRhOnJhd0RhdGEoKV0pOwogCi0g
ICAgc2V0UERGRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIG1fZG9jdW1lbnRGaW5pc2hlZExvYWRp
bmcgPSB0cnVlOworCisjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICAvLyBBdCB0
aGlzIHBvaW50IHdlIGtub3cgYWxsIGRhdGEgZm9yIHRoZSBkb2N1bWVudCwgYW5kIHRoZXJlZm9y
ZSB3ZSBrbm93IGhvdyB0byBhbnN3ZXIgYW55IG91dHN0YW5kaW5nIHJhbmdlIHJlcXVlc3RzLgor
ICAgIHVuY29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpOworI2Vs
c2UKKyAgICBtX3BkZkRvY3VtZW50ID0gYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxv
Y10gaW5pdFdpdGhEYXRhOnJhd0RhdGEoKV0pOworICAgIGluc3RhbGxQREZEb2N1bWVudCgpOwor
I2VuZGlmCit9CisKK3ZvaWQgUERGUGx1Z2luOjppbnN0YWxsUERGRG9jdW1lbnQoKQoreworICAg
IEFTU0VSVChtX3BkZkRvY3VtZW50KTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAg
ICAgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOwogCiAgICAgW21fcGRmTGF5ZXJD
b250cm9sbGVyIHNldEZyYW1lU2l6ZTpzaXplKCldOwotICAgIG1fcGRmTGF5ZXJDb250cm9sbGVy
LmdldCgpLmRvY3VtZW50ID0gZG9jdW1lbnQuZ2V0KCk7CisgICAgbV9wZGZMYXllckNvbnRyb2xs
ZXIuZ2V0KCkuZG9jdW1lbnQgPSBtX3BkZkRvY3VtZW50LmdldCgpOwogCiAgICAgaWYgKGhhbmRs
ZXNQYWdlU2NhbGVGYWN0b3IoKSkKICAgICAgICAgcGx1Z2luVmlldygpLT5zZXRQYWdlU2NhbGVG
YWN0b3IoW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0sIEludFBvaW50
KCkpOwpAQCAtOTY0LDcgKzExMjUsNyBAQCB2b2lkIFBERlBsdWdpbjo6cGRmRG9jdW1lbnREaWRM
b2FkKCkKIAogICAgIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CiAKLSAgICBpZiAoW2RvY3Vt
ZW50IGlzTG9ja2VkXSkKKyAgICBpZiAoW21fcGRmRG9jdW1lbnQgaXNMb2NrZWRdKQogICAgICAg
ICBjcmVhdGVQYXNzd29yZEVudHJ5Rm9ybSgpOwogCiAgICAgaWYgKFttX3BkZkxheWVyQ29udHJv
bGxlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldFVSTEZyYWdtZW50OildKSB7CkBA
IC0xMDMzLDYgKzExOTQsMTkgQEAgdm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2Vp
dmVEYXRhKGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICAgICBtX2RhdGEgPSBh
ZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwogCiAgICAgQ0ZEYXRhQXBwZW5kQnl0
ZXMobV9kYXRhLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnl0ZXMpLCBs
ZW5ndGgpOworCisjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICBzaXplX3QgaW5k
ZXggPSAwOworICAgIHdoaWxlIChpbmRleCA8IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0
cy5zaXplKCkpIHsKKyAgICAgICAgYXV0byYgcmVxdWVzdCA9IG1fb3V0c3RhbmRpbmdCeXRlUmFu
Z2VSZXF1ZXN0c1tpbmRleF07CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQ0ZE
YXRhR2V0TGVuZ3RoKG1fZGF0YS5nZXQoKSkpID49IHJlcXVlc3QucG9zaXRpb24gKyByZXF1ZXN0
LmNvdW50KSB7CisgICAgICAgICAgICByZXF1ZXN0LmNvbXBsZXRpb25IYW5kbGVyKENGRGF0YUdl
dEJ5dGVQdHIobV9kYXRhLmdldCgpKSArIHJlcXVlc3QucG9zaXRpb24sIHJlcXVlc3QuY291bnQp
OworICAgICAgICAgICAgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnJlbW92ZShpbmRl
eCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICArK2luZGV4Owor
ICAgIH0KKyNlbmRpZgogfQogCiB2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkRmluaXNo
TG9hZGluZygpCkBAIC0xMDQzLDcgKzEyMTcsMTAgQEAgdm9pZCBQREZQbHVnaW46Om1hbnVhbFN0
cmVhbURpZEZpbmlzaExvYWRpbmcoKQogCiB2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlk
RmFpbChib29sKQogewotICAgIG1fZGF0YS5jbGVhcigpOworICAgIG1fZGF0YSA9IG51bGxwdHI7
CisjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICB1bmNvbmRpdGlvbmFsQ29tcGxl
dGVPdXRzdGFuZGluZ1JhbmdlUmVxdWVzdHMoKTsKKyNlbmRpZgogfQogCiB2b2lkIFBERlBsdWdp
bjo6cnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKQpAQCAtMTA3NCw3ICsxMjUxLDcgQEAgdm9pZCBQ
REZQbHVnaW46OmF0dGVtcHRUb1VubG9ja1BERihjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQogewog
ICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dvcmQ6cGFz
c3dvcmRdOwogCi0gICAgaWYgKCFbcGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0pIHsKKyAgICBpZiAo
IVttX3BkZkRvY3VtZW50IGlzTG9ja2VkXSkgewogICAgICAgICBtX3Bhc3N3b3JkRmllbGQgPSBu
dWxscHRyOwogCiAgICAgICAgIGNhbGN1bGF0ZVNpemVzKCk7CkBAIC0xMDk5LDcgKzEyNzYsNyBA
QCB2b2lkIFBERlBsdWdpbjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpCiAKIHZv
aWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiB7Ci0gICAgaWYgKFtwZGZEb2N1bWVudCgp
IGlzTG9ja2VkXSkgeworICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pIHsKICAgICAg
ICAgbV9maXJzdFBhZ2VIZWlnaHQgPSAwOwogICAgICAgICBzZXRQREZEb2N1bWVudFNpemUoSW50
U2l6ZSgwLCAwKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTExMjksNiArMTMwNiwxOCBAQCB2b2lk
IFBERlBsdWdpbjo6d2lsbERldGFjaFJlbmRlcmVyKCkKIAogdm9pZCBQREZQbHVnaW46OmRlc3Ry
b3koKQogeworICAgIG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcgPSB0cnVlOworCisjaWYgSEFW
RShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICAvLyBCeSBjbGVhcmluZyBvdXQgdGhlIHJlc291
cmNlIGRhdGEgYW5kIGhhbmRsaW5nIGFsbCBvdXRzdGFuZGluZyByYW5nZSByZXF1ZXN0cywKKyAg
ICAvLyB3ZSBjYW4gZm9yY2UgdGhlIFBERlRocmVhZCB0byBjb21wbGV0ZSBxdWlja2x5CisgICAg
aWYgKG1fcGRmVGhyZWFkKSB7CisgICAgICAgIG1fZGF0YSA9IG51bGxwdHI7CisgICAgICAgIHVu
Y29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpOworICAgICAgICBt
X3BkZlRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICB9CisjZW5kaWYKKwogICAgIG1f
cGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0gMDsKIAogICAgIGlmICh3ZWJGcmFt
ZSgpKSB7CkBAIC0xNDE4LDcgKzE2MDcsNyBAQCBib29sIFBERlBsdWdpbjo6aGFuZGxlTW91c2VF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKICAgICBpZiAobV9zY3JvbGxDb3JuZXJM
YXllciAmJiBJbnRSZWN0KG1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkuZnJhbWUpLmNvbnRhaW5z
KG1vdXNlUG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoW3BkZkRv
Y3VtZW50KCkgaXNMb2NrZWRdKQorICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFJpZ2h0LWNsaWNrcyBhbmQgQ29udHJvbC1j
bGlja3MgYWx3YXlzIGNhbGwgaGFuZGxlQ29udGV4dE1lbnVFdmVudCBhcyB3ZWxsLgpAQCAtMTcx
Myw3ICsxOTAyLDcgQEAgdm9pZCBQREZQbHVnaW46OnNhdmVUb1BERigpCiB7CiAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBwcm9iYWJseSBub3RpZnkgdGhlIHVzZXIgdGhhdCB0aGV5IGNhbid0IHNh
dmUgYmVmb3JlIHRoZSBkb2N1bWVudCBpcyBmaW5pc2hlZCBsb2FkaW5nLgogICAgIC8vIFBERlZp
ZXdDb250cm9sbGVyIGRvZXMgYW4gTlNCZWVwKCksIGJ1dCB0aGF0IHNlZW1zIGluc3VmZmljaWVu
dC4KLSAgICBpZiAoIXBkZkRvY3VtZW50KCkpCisgICAgaWYgKCFtX2RvY3VtZW50RmluaXNoZWRM
b2FkaW5nKQogICAgICAgICByZXR1cm47CiAKICAgICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgp
OwpAQCAtMTcyNSw3ICsxOTE0LDcgQEAgdm9pZCBQREZQbHVnaW46Om9wZW5XaXRoTmF0aXZlQXBw
bGljYXRpb24oKQogICAgIGlmICghbV90ZW1wb3JhcnlQREZVVUlEKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcHJvYmFibHkgbm90aWZ5IHRoZSB1c2VyIHRoYXQgdGhleSBjYW4ndCBz
YXZlIGJlZm9yZSB0aGUgZG9jdW1lbnQgaXMgZmluaXNoZWQgbG9hZGluZy4KICAgICAgICAgLy8g
UERGVmlld0NvbnRyb2xsZXIgZG9lcyBhbiBOU0JlZXAoKSwgYnV0IHRoYXQgc2VlbXMgaW5zdWZm
aWNpZW50LgotICAgICAgICBpZiAoIXBkZkRvY3VtZW50KCkpCisgICAgICAgIGlmICghbV9kb2N1
bWVudEZpbmlzaGVkTG9hZGluZykKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBOU0Rh
dGEgKmRhdGEgPSBsaXZlRGF0YSgpOwpAQCAtMTgxMCw3ICsxOTk5LDcgQEAgdW5zaWduZWQgUERG
UGx1Z2luOjpjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBXZWJDb3JlOjpG
aW5kT3B0aW9ucwogICAgICAgICByZXR1cm4gMDsKIAogICAgIE5TU3RyaW5nQ29tcGFyZU9wdGlv
bnMgbnNPcHRpb25zID0gb3B0aW9ucy5jb250YWlucyhXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmUp
ID8gTlNDYXNlSW5zZW5zaXRpdmVTZWFyY2ggOiAwOwotICAgIHJldHVybiBbW3BkZkRvY3VtZW50
KCkgZmluZFN0cmluZzp0YXJnZXQgd2l0aE9wdGlvbnM6bnNPcHRpb25zXSBjb3VudF07CisgICAg
cmV0dXJuIFtbbV9wZGZEb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCB3aXRoT3B0aW9uczpuc09w
dGlvbnNdIGNvdW50XTsKIH0KIAogUERGU2VsZWN0aW9uICpQREZQbHVnaW46Om5leHRNYXRjaEZv
clN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgQk9PTCBzZWFyY2hGb3J3YXJkLCBCT09MIGNh
c2VTZW5zaXRpdmUsIEJPT0wgd3JhcFNlYXJjaCwgUERGU2VsZWN0aW9uICppbml0aWFsU2VsZWN0
aW9uLCBCT09MIHN0YXJ0SW5TZWxlY3Rpb24pCkBAIC0xODI0LDggKzIwMTMsNiBAQCBQREZTZWxl
Y3Rpb24gKlBERlBsdWdpbjo6bmV4dE1hdGNoRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBCT09MIHNlYXJjaEZvcgogICAgIGlmICghY2FzZVNlbnNpdGl2ZSkKICAgICAgICAgb3B0aW9u
cyB8PSBOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaDsKIAotICAgIFBERkRvY3VtZW50ICpkb2N1bWVu
dCA9IHBkZkRvY3VtZW50KCkuZ2V0KCk7Ci0KICAgICBSZXRhaW5QdHI8UERGU2VsZWN0aW9uPiBz
ZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoID0gYWRvcHROUyhbaW5pdGlhbFNlbGVjdGlvbiBjb3B5
XSk7CiAgICAgaWYgKHN0YXJ0SW5TZWxlY3Rpb24pIHsKICAgICAgICAgLy8gSW5pdGlhbGx5IHdl
IHdhbnQgdG8gaW5jbHVkZSB0aGUgc2VsZWN0ZWQgdGV4dCBpbiB0aGUgc2VhcmNoLiBTbyB3ZSBt
dXN0IG1vZGlmeSB0aGUgc3RhcnRpbmcgc2VhcmNoCkBAIC0xODQxLDE1ICsyMDI4LDE1IEBAIFBE
RlNlbGVjdGlvbiAqUERGUGx1Z2luOjpuZXh0TWF0Y2hGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIEJPT0wgc2VhcmNoRm9yCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBQREZTZWxlY3Rp
b24gKmZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0IGZyb21TZWxl
Y3Rpb246c2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaC5nZXQoKSB3aXRoT3B0aW9uczpvcHRpb25z
XTsKKyAgICBQREZTZWxlY3Rpb24gKmZvdW5kU2VsZWN0aW9uID0gW21fcGRmRG9jdW1lbnQgZmlu
ZFN0cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjpzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoLmdl
dCgpIHdpdGhPcHRpb25zOm9wdGlvbnNdOwogCiAgICAgLy8gSWYgd2UgZmlyc3Qgc2VhcmNoZWQg
aW4gdGhlIHNlbGVjdGlvbiwgYW5kIHdlIGZvdW5kIHRoZSBzZWxlY3Rpb24sIHNlYXJjaCBhZ2Fp
biBmcm9tIGp1c3QgcGFzdCB0aGUgc2VsZWN0aW9uLgogICAgIGlmIChzdGFydEluU2VsZWN0aW9u
ICYmIFtmb3VuZFNlbGVjdGlvbiBpc0VxdWFsOmluaXRpYWxTZWxlY3Rpb25dKQotICAgICAgICBm
b3VuZFNlbGVjdGlvbiA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCBmcm9tU2VsZWN0aW9u
OmluaXRpYWxTZWxlY3Rpb24gd2l0aE9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIGZvdW5kU2Vs
ZWN0aW9uID0gW21fcGRmRG9jdW1lbnQgZmluZFN0cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjpp
bml0aWFsU2VsZWN0aW9uIHdpdGhPcHRpb25zOm9wdGlvbnNdOwogCiAgICAgaWYgKCFmb3VuZFNl
bGVjdGlvbiAmJiB3cmFwU2VhcmNoKSB7Ci0gICAgICAgIGF1dG8gZW1wdHlTZWxlY3Rpb24gPSBh
ZG9wdE5TKFtbcGRmU2VsZWN0aW9uQ2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEb2N1bWVudDpkb2N1
bWVudF0pOwotICAgICAgICBmb3VuZFNlbGVjdGlvbiA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnRh
cmdldCBmcm9tU2VsZWN0aW9uOmVtcHR5U2VsZWN0aW9uLmdldCgpIHdpdGhPcHRpb25zOm9wdGlv
bnNdOworICAgICAgICBhdXRvIGVtcHR5U2VsZWN0aW9uID0gYWRvcHROUyhbW3BkZlNlbGVjdGlv
bkNsYXNzKCkgYWxsb2NdIGluaXRXaXRoRG9jdW1lbnQ6bV9wZGZEb2N1bWVudC5nZXQoKV0pOwor
ICAgICAgICBmb3VuZFNlbGVjdGlvbiA9IFttX3BkZkRvY3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0
IGZyb21TZWxlY3Rpb246ZW1wdHlTZWxlY3Rpb24uZ2V0KCkgd2l0aE9wdGlvbnM6b3B0aW9uc107
CiAgICAgfQogCiAgICAgcmV0dXJuIGZvdW5kU2VsZWN0aW9uOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392508</attachid>
            <date>2020-03-04 16:42:42 -0800</date>
            <delta_ts>2020-03-04 21:26:19 -0800</delta_ts>
            <desc>PFL</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19412</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggN2Q4MDQyOTE0OTIuLjA4ZWE4NzJjYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIw
LTAzLTA0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBMYXkg
aW5pdGlhbCBncm91bmR3b3JrIGZvciBuZXcgUERGIGxvYWRpbmcgbW9kZWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODU5OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1IYXZl
Lmg6CisKIDIwMjAtMDMtMDMgIEppdGVuIE1laHRhICA8am1laHRhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZG9wdCBIVFRQIEFsdGVybmF0aXZlIFNlcnZpY2VzIFN0b3JhZ2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1I
YXZlLmgKaW5kZXggNzRiNWEwM2RlMjAuLjMwN2NiNGJiZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUu
aApAQCAtNjAyLDMgKzYwMiw3IEBACiAjaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE2MDApIHx8IChQTEFURk9STShJT1NfRkFNSUxZKSAm
JiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAwMDApCiAjZGVmaW5lIEhB
VkVfV0VCUCAxCiAjZW5kaWYKKworI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNjAwKQorI2RlZmluZSBIQVZFX0lOQ1JFTUVOVEFMX1BE
Rl9BUElTIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmYTc2Y2I0ODY4Zi4uMTRlMjgwZjE1YjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjAtMDMtMDQgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgorCisgICAgICAgIExheSBpbml0aWFsIGdyb3VuZHdvcmsgZm9yIG5ldyBQ
REYgbG9hZGluZyBtb2RlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA4NTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4K
KworICAgICAgICBGaXJzdCBwaWVjZSBvZiBhZG9wdGluZyBzb21lIG5ldyBwbGF0Zm9ybSBQREYg
QVBJcy4KKyAgICAgICAgRGlzYWJsZWQgYnkgZGVmYXVsdCBldmVuIG9uIHBsYXRmb3JtcyB0aGF0
IHN1cHBvcnQgaXQuCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZSBmb3Igc2hpcHBpbmcgY29u
Zmlncy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6UERGUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6ZGF0YVByb3Zp
ZGVyR2V0Qnl0ZXNBdFBvc2l0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpkYXRhUHJv
dmlkZXJHZXRCeXRlUmFuZ2VzQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpkYXRhUHJvdmlk
ZXJSZWxlYXNlSW5mb0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp0aHJl
YWRFbnRyeSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dW5jb25kaXRpb25hbENvbXBs
ZXRlUmFuZ2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpnZXRSZXNvdXJj
ZUJ5dGVzQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YWRvcHRCYWNr
Z3JvdW5kVGhyZWFkRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBkZkRv
Y3VtZW50RGlkTG9hZCk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aW5zdGFsbFBERkRv
Y3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNl
aXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6YXR0ZW1wdFRvVW5sb2NrUERG
KToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcyk6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6c2F2ZVRvUERGKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpvcGVu
V2l0aE5hdGl2ZUFwcGxpY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb3Vu
dEZpbmRNYXRjaGVzKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpuZXh0TWF0Y2hGb3JT
dHJpbmcpOgorCiAyMDIwLTAzLTAzICBKaXRlbiBNZWh0YSAgPGptZWh0YUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRvcHQgSFRUUCBBbHRlcm5hdGl2ZSBTZXJ2aWNlcyBTdG9yYWdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKaW5kZXggMDcy
YTFjMDNlMTUuLmMzMmYwZWVkMmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCkBAIC0zNiw2ICszNiwxMyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvRmluZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KworLy8gRm9yIG5vdywgZGlzYWJsZSBuZXcgUERGIEFQSXMgYnkgZGVmYXVsdCBldmVuIG9uIHBs
YXRmb3JtcyB3aGVyZSBvdGhlcndpc2UgZW5hYmxlZC4KKy8vIEZJWE1FOiBFbmFibGUgdGhpcyB3
aGVuIHJlYWR5LgorI2lmZGVmIEhBVkVfSU5DUkVNRU5UQUxfUERGX0FQSVMKKyN1bmRlZiBIQVZF
X0lOQ1JFTUVOVEFMX1BERl9BUElTCisjZW5kaWYKIAogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3Bh
cXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7CiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1ZhbHVl
KiBKU09iamVjdFJlZjsKQEAgLTExNiw2ICsxMjMsMTAgQEAgcHVibGljOgogICAgIFBERlBsdWdp
bkFubm90YXRpb24qIGFjdGl2ZUFubm90YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUFu
bm90YXRpb24uZ2V0KCk7IH0KICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlKiBheE9iamVjdENh
Y2hlKCkgY29uc3Q7CiAKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQorICAgIHZvaWQg
Z2V0UmVzb3VyY2VCeXRlc0F0UG9zaXRpb24oc2l6ZV90IGNvdW50LCBvZmZfdCBwb3NpdGlvbiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCB1aW50OF90Kiwgc2l6ZV90IGNvdW50KT4mJik7
CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQREZQbHVnaW4oV2ViRnJhbWUmKTsK
IApAQCAtMjI1LDYgKzIzNiw3IEBAIHByaXZhdGU6CiAgICAgUmVmPFdlYkNvcmU6OlNjcm9sbGJh
cj4gY3JlYXRlU2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsKICAgICB2
b2lkIGRlc3Ryb3lTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOwogICAg
IHZvaWQgcGRmRG9jdW1lbnREaWRMb2FkKCk7CisgICAgdm9pZCBpbnN0YWxsUERGRG9jdW1lbnQo
KTsKICAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwogICAgIHZvaWQgY2FsY3VsYXRlU2l6
ZXMoKTsKICAgICB2b2lkIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CkBAIC0yNDEsOSArMjUz
LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0oKTsKIAot
ICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X3BkZkRvY3VtZW50OyB9Ci0gICAgdm9pZCBzZXRQREZEb2N1bWVudChSZXRhaW5QdHI8UERGRG9j
dW1lbnQ+IGRvY3VtZW50KSB7IG1fcGRmRG9jdW1lbnQgPSBkb2N1bWVudDsgfQotCiAgICAgV2Vi
Q29yZTo6SW50U2l6ZSBwZGZEb2N1bWVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX3BkZkRvY3Vt
ZW50U2l6ZTsgfQogICAgIHZvaWQgc2V0UERGRG9jdW1lbnRTaXplKFdlYkNvcmU6OkludFNpemUg
c2l6ZSkgeyBtX3BkZkRvY3VtZW50U2l6ZSA9IHNpemU7IH0KIApAQCAtMzAyLDExICszMTEsMzAg
QEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRhOwogCiAg
ICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OworCisgICAgYm9vbCBtX2Rv
Y3VtZW50RmluaXNoZWRMb2FkaW5nIHsgZmFsc2UgfTsKICAgICB1bnNpZ25lZCBtX2ZpcnN0UGFn
ZUhlaWdodCB7IDAgfTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGRmRG9jdW1lbnRTaXplOyAv
LyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBzLgogCiAgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9s
bGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxi
YXI+IG1fdmVydGljYWxTY3JvbGxiYXI7CisKKyNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElT
KQorICAgIHZvaWQgdGhyZWFkRW50cnkoUmVmPFBERlBsdWdpbj4mJik7CisgICAgdm9pZCBhZG9w
dEJhY2tncm91bmRUaHJlYWREb2N1bWVudCgpOworCisgICAgc3RydWN0IEJ5dGVSYW5nZVJlcXVl
c3QgeworICAgICAgICBvZmZfdCBwb3NpdGlvbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90IGNvdW50
IHsgMCB9OworICAgICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IHVpbnQ4X3QqLCBz
aXplX3QgY291bnQpPiBjb21wbGV0aW9uSGFuZGxlcjsKKyAgICB9OworICAgIHZvaWQgdW5jb25k
aXRpb25hbENvbXBsZXRlUmFuZ2VSZXF1ZXN0KEJ5dGVSYW5nZVJlcXVlc3QmKTsKKyAgICB2b2lk
IHVuY29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpOworCisgICAg
UmV0YWluUHRyPFBERkRvY3VtZW50PiBtX2JhY2tncm91bmRUaHJlYWREb2N1bWVudDsKKyAgICBS
ZWZQdHI8VGhyZWFkPiBtX3BkZlRocmVhZDsKKyAgICBWZWN0b3I8Qnl0ZVJhbmdlUmVxdWVzdD4g
bV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luLm1tCmluZGV4IDY3ODM5ZjUzNzJiLi40MzEwMWNjZjM1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBAIC04Nyw2
ICs4NywxMyBAQAogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbXBv
cnQgPHBhbC9zcGkvbWFjL05TTWVudVNQSS5oPgogI2ltcG9ydCA8d3RmL1VVSUQuaD4KKyNpbXBv
cnQgPHd0Zi9XVEZTZW1hcGhvcmUuaD4KKworI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMp
CitAaW50ZXJmYWNlIFBERkRvY3VtZW50ICgpCistKGluc3RhbmNldHlwZSkgaW5pdFdpdGhQcm92
aWRlcjooQ0dEYXRhUHJvdmlkZXJSZWYpZGF0YVByb3ZpZGVyOworQGVuZAorI2VuZGlmCiAKIC8v
IFNldCBvdmVyZmxvdzogaGlkZGVuIG9uIHRoZSBhbm5vdGF0aW9uIGNvbnRhaW5lciBzbyA8aW5w
dXQ+IGVsZW1lbnRzIHNjcm9sbGVkIG91dCBvZiB2aWV3IGRvbid0IHNob3cKIC8vIHNjcm9sbGJh
cnMgb24gdGhlIGJvZHkuIFdlIGNhbid0IGFkZCBhbm5vdGF0aW9ucyBkaXJlY3RseSB0byB0aGUg
Ym9keSwgYmVjYXVzZSBvdmVyZmxvdzogaGlkZGVuIG9uIHRoZSBib2R5CkBAIC01NzQsNiArNTgx
LDkgQEAgaW5saW5lIFBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lJiBmcmFtZSkKICAgICAs
IG1fc2Nyb2xsQ29ybmVyTGF5ZXIoYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIg
YWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKSkKICAgICAsIG1fcGRmTGF5ZXJDb250cm9s
bGVyKGFkb3B0TlMoW1twZGZMYXllckNvbnRyb2xsZXJDbGFzcygpIGFsbG9jXSBpbml0XSkpCiAg
ICAgLCBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlKGFkb3B0TlMoW1tXS1BERkxheWVyQ29u
dHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSkpCisjaWYgSEFW
RShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICAsIG1fcGRmVGhyZWFkKFRocmVhZDo6Y3JlYXRl
KCJQREYgZG9jdW1lbnQgdGhyZWFkIiwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
dGhpc10gKCkgbXV0YWJsZSB7IHRocmVhZEVudHJ5KFdURk1vdmUocHJvdGVjdGVkVGhpcykpOyB9
KSkKKyNlbmRpZgogewogICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0g
bV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKTsKICAgICBtX3BkZkxheWVyQ29udHJv
bGxlci5nZXQoKS5wYXJlbnRMYXllciA9IG1fY29udGVudExheWVyLmdldCgpOwpAQCAtNjA4LDYg
KzYxOCwxNDUgQEAgUERGUGx1Z2luOjp+UERGUGx1Z2luKCkKIHsKIH0KIAorI2lmIEhBVkUoSU5D
UkVNRU5UQUxfUERGX0FQSVMpCitzdGF0aWMgc2l6ZV90IGRhdGFQcm92aWRlckdldEJ5dGVzQXRQ
b3NpdGlvbkNhbGxiYWNrKHZvaWQqIGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24s
IHNpemVfdCBjb3VudCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIFJl
ZjxQREZQbHVnaW4+IHBsdWdpbiA9ICooKFBERlBsdWdpbiopaW5mbyk7CisgICAgV1RGOjpTZW1h
cGhvcmUgZGF0YVNlbWFwaG9yZSB7IDAgfTsKKyAgICBzaXplX3QgYnl0ZXNQcm92aWRlZCA9IDA7
CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3BsdWdpbiA9IFdURk1vdmUocGx1Z2lu
KSwgcG9zaXRpb24sIGNvdW50LCBidWZmZXIsICZkYXRhU2VtYXBob3JlLCAmYnl0ZXNQcm92aWRl
ZF0geworICAgICAgICBwbHVnaW4tPmdldFJlc291cmNlQnl0ZXNBdFBvc2l0aW9uKGNvdW50LCBw
b3NpdGlvbiwgW2NvdW50LCBidWZmZXIsICZkYXRhU2VtYXBob3JlLCAmYnl0ZXNQcm92aWRlZF0o
Y29uc3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBieXRlc0NvdW50KSB7CisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGNvdW50LCBieXRlc0NvdW50IDw9IGNvdW50KTsKKyAgICAgICAgICAgIG1l
bWNweShidWZmZXIsIGJ5dGVzLCBieXRlc0NvdW50KTsKKyAgICAgICAgICAgIGJ5dGVzUHJvdmlk
ZWQgPSBieXRlc0NvdW50OworICAgICAgICAgICAgZGF0YVNlbWFwaG9yZS5zaWduYWwoKTsKKyAg
ICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkYXRhU2VtYXBob3JlLndhaXQoKTsKKyAgICByZXR1
cm4gYnl0ZXNQcm92aWRlZDsKK30KKworc3RhdGljIHZvaWQgZGF0YVByb3ZpZGVyR2V0Qnl0ZVJh
bmdlc0NhbGxiYWNrKHZvaWQqIGluZm8sIENGTXV0YWJsZUFycmF5UmVmIGJ1ZmZlcnMsIGNvbnN0
IENGUmFuZ2UqIHJhbmdlcywgc2l6ZV90IGNvdW50KQoreworICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOworCisgICAgUmVmPFBERlBsdWdpbj4gcGx1Z2luID0gKigoUERGUGx1Z2luKilpbmZv
KTsKKyAgICBXVEY6OlNlbWFwaG9yZSBkYXRhU2VtYXBob3JlIHsgMCB9OworICAgIFZlY3RvcjxS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGF0YVJlc3VsdHMoY291bnQpOworCisgICAgLy8gRklYTUU6
IE9uY2Ugd2Ugc3VwcG9ydCByYW5nZSByZXF1ZXN0cywgbWFrZSBhIHNpbmdsZSByZXF1ZXN0IGZv
ciBhbGwgcmFuZ2VzIGluc3RlYWQgb2YgPGNvdW50PiBpbmRpdmlkdWFsIHJlcXVlc3RzLgorICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcGx1Z2luID0gV1RGTW92ZShwbHVnaW4pLCAmZGF0
YVJlc3VsdHMsIHJhbmdlcywgY291bnQsICZkYXRhU2VtYXBob3JlXSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgcGx1Z2luLT5nZXRS
ZXNvdXJjZUJ5dGVzQXRQb3NpdGlvbihyYW5nZXNbaV0ubGVuZ3RoLCByYW5nZXNbaV0ubG9jYXRp
b24sIFtpLCAmZGF0YVJlc3VsdHMsICZkYXRhU2VtYXBob3JlXShjb25zdCB1aW50OF90KiBieXRl
cywgc2l6ZV90IGJ5dGVzQ291bnQpIHsKKyAgICAgICAgICAgICAgICBkYXRhUmVzdWx0c1tpXSA9
IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJ5dGVzLCBieXRlc0Nv
dW50KSk7CisgICAgICAgICAgICAgICAgZGF0YVNlbWFwaG9yZS5zaWduYWwoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCisgICAgICAgIGRhdGFTZW1hcGhvcmUud2FpdCgpOworCisgICAgZm9yIChh
dXRvJiByZXN1bHQgOiBkYXRhUmVzdWx0cykgeworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IDAsIDApKTsKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGJ1ZmZlcnMsIHJlc3VsdC5nZXQo
KSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkYXRhUHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxi
YWNrKHZvaWQqIGluZm8pCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgYWRv
cHRSZWYoKFBERlBsdWdpbiopaW5mbyk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp0aHJlYWRFbnRy
eShSZWY8UERGUGx1Z2luPiYmIHByb3RlY3RlZFBsdWdpbikKK3sKKyAgICBDR0RhdGFQcm92aWRl
ckRpcmVjdEFjY2Vzc1Jhbmdlc0NhbGxiYWNrcyBkYXRhUHJvdmlkZXJDYWxsYmFja3MgeworICAg
ICAgICAwLAorICAgICAgICBkYXRhUHJvdmlkZXJHZXRCeXRlc0F0UG9zaXRpb25DYWxsYmFjaywK
KyAgICAgICAgZGF0YVByb3ZpZGVyR2V0Qnl0ZVJhbmdlc0NhbGxiYWNrLAorICAgICAgICBkYXRh
UHJvdmlkZXJSZWxlYXNlSW5mb0NhbGxiYWNrLAorICAgIH07CisKKyAgICAvLyBCYWxhbmNlZCBi
eSBhIGRlcmVmIGluc2lkZSBvZiB0aGUgZGF0YVByb3ZpZGVyUmVsZWFzZUluZm9DYWxsYmFjawor
ICAgIHJlZigpOworCisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlk
ZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlTXVsdGlSYW5nZURpcmVjdEFjY2Vzcyh0
aGlzLCBrQ0dEYXRhUHJvdmlkZXJJbmRldGVybWluYXRlU2l6ZSwgJmRhdGFQcm92aWRlckNhbGxi
YWNrcykpOworICAgIENHRGF0YVByb3ZpZGVyU2V0UHJvcGVydHkoZGF0YVByb3ZpZGVyLmdldCgp
LCBrQ0dEYXRhUHJvdmlkZXJIYXNIaWdoTGF0ZW5jeSwga0NGQm9vbGVhblRydWUpOworICAgIG1f
YmFja2dyb3VuZFRocmVhZERvY3VtZW50ID0gYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xhc3MoKSBh
bGxvY10gaW5pdFdpdGhQcm92aWRlcjpkYXRhUHJvdmlkZXIuZ2V0KCldKTsKKworICAgIC8vIFRo
ZSBtYWluIHRocmVhZCBkaXNwYXRjaCBiZWxvdyByZW1vdmVzIHRoZSBsYXN0IHJlZmVyZW5jZSB0
byB0aGUgUERGIHRocmVhZC4KKyAgICAvLyBJdCBtdXN0IGJlIHRoZSBsYXN0IGNvZGUgZXhlY3V0
ZWQgaW4gdGhpcyBmdW5jdGlvbi4KKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0
ZWRQbHVnaW4gPSBXVEZNb3ZlKHByb3RlY3RlZFBsdWdpbildIHsKKyAgICAgICAgYWRvcHRCYWNr
Z3JvdW5kVGhyZWFkRG9jdW1lbnQoKTsKKyAgICB9KTsKK30KKwordm9pZCBQREZQbHVnaW46OnVu
Y29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpCit7CisgICAgZm9y
IChhdXRvJiByZXF1ZXN0IDogbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzKQorICAgICAg
ICB1bmNvbmRpdGlvbmFsQ29tcGxldGVSYW5nZVJlcXVlc3QocmVxdWVzdCk7CisgICAgbV9vdXRz
dGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLmNsZWFyKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp1
bmNvbmRpdGlvbmFsQ29tcGxldGVSYW5nZVJlcXVlc3QoQnl0ZVJhbmdlUmVxdWVzdCYgcmVxdWVz
dCkKK3sKKyAgICB1aW50NjRfdCBmdWxsU2l6ZSA9IG1fZGF0YSA/IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihDRkRhdGFHZXRMZW5ndGgobV9kYXRhLmdldCgpKSkgOiAwOworICAgIGlmIChzdGF0aWNf
Y2FzdDx1aW50NjRfdD4ocmVxdWVzdC5wb3NpdGlvbikgPj0gZnVsbFNpemUpIHsKKyAgICAgICAg
cmVxdWVzdC5jb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCAwKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGF1dG8gY291bnQgPSByZXF1ZXN0LnBvc2l0aW9uICsgcmVxdWVzdC5jb3Vu
dCA+IGZ1bGxTaXplID8gZnVsbFNpemUgLSByZXF1ZXN0LnBvc2l0aW9uIDogcmVxdWVzdC5jb3Vu
dDsKKyAgICByZXF1ZXN0LmNvbXBsZXRpb25IYW5kbGVyKENGRGF0YUdldEJ5dGVQdHIobV9kYXRh
LmdldCgpKSArIHJlcXVlc3QucG9zaXRpb24sIGNvdW50KTsKK30KKwordm9pZCBQREZQbHVnaW46
OmdldFJlc291cmNlQnl0ZXNBdFBvc2l0aW9uKHNpemVfdCBjb3VudCwgb2ZmX3QgcG9zaXRpb24s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgdWludDhfdCosIHNpemVfdCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHVpbnQ2
NF90IGRhdGFMZW5ndGggPSBtX2RhdGEgPyBzdGF0aWNfY2FzdDx1aW50NjRfdD4oQ0ZEYXRhR2V0
TGVuZ3RoKG1fZGF0YS5nZXQoKSkpIDogMDsKKyAgICBpZiAobV9kYXRhICYmIGRhdGFMZW5ndGgg
Pj0gcG9zaXRpb24gKyBjb3VudCkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDRkRhdGFH
ZXRCeXRlUHRyKG1fZGF0YS5nZXQoKSkgKyBwb3NpdGlvbiwgY291bnQpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQnl0ZVJhbmdlUmVxdWVzdCByZXF1ZXN0ID0geyBwb3NpdGlvbiwg
Y291bnQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpIH07CisgICAgaWYgKG1fZG9jdW1lbnRG
aW5pc2hlZExvYWRpbmcpIHsKKyAgICAgICAgdW5jb25kaXRpb25hbENvbXBsZXRlUmFuZ2VSZXF1
ZXN0KHJlcXVlc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vdXRzdGFuZGlu
Z0J5dGVSYW5nZVJlcXVlc3RzLmFwcGVuZChXVEZNb3ZlKHJlcXVlc3QpKTsKK30KKwordm9pZCBQ
REZQbHVnaW46OmFkb3B0QmFja2dyb3VuZFRocmVhZERvY3VtZW50KCkKK3sKKyAgICBBU1NFUlQo
IW1fcGRmRG9jdW1lbnQpOworICAgIEFTU0VSVChtX2JhY2tncm91bmRUaHJlYWREb2N1bWVudCk7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIG1fcGRmRG9jdW1lbnQgPSBXVEZN
b3ZlKG1fYmFja2dyb3VuZFRocmVhZERvY3VtZW50KTsKKworICAgIC8vIElmIHRoZSBwbHVnaW4g
d2FzIG1hbnVhbGx5IGRlc3Ryb3llZCwgdGhlIG1fcGRmVGhyZWFkIG1pZ2h0IGFscmVhZHkgYmUg
Z29uZS4KKyAgICBpZiAobV9wZGZUaHJlYWQpIHsKKyAgICAgICAgbV9wZGZUaHJlYWQtPndhaXRG
b3JDb21wbGV0aW9uKCk7CisgICAgICAgIG1fcGRmVGhyZWFkID0gbnVsbHB0cjsKKyAgICB9CisK
KyAgICAvLyBJZiB0aGUgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZCwgbm8gcG9pbnQgaW4gZG9p
bmcgYW55IG1vcmUgUERGIHdvcmsKKyAgICBpZiAobV9pc0JlaW5nRGVzdHJveWVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbnN0YWxsUERGRG9jdW1lbnQoKTsKK30KKyNlbmRpZiAvLyBIQVZF
KElOQ1JFTUVOVEFMX1BERl9BUElTKQorCiBQbHVnaW5JbmZvIFBERlBsdWdpbjo6cGx1Z2luSW5m
bygpCiB7CiAgICAgUGx1Z2luSW5mbyBpbmZvOwpAQCAtOTQ0LDE1ICsxMDkzLDI3IEBAIHZvaWQg
UERGUGx1Z2luOjpjb252ZXJ0UG9zdFNjcmlwdERhdGFJZk5lZWRlZCgpCiB2b2lkIFBERlBsdWdp
bjo6cGRmRG9jdW1lbnREaWRMb2FkKCkKIHsKICAgICBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKLSAg
ICAKLSAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IGRvY3VtZW50ID0gYWRvcHROUyhbW3BkZkRv
Y3VtZW50Q2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEYXRhOnJhd0RhdGEoKV0pOwogCi0gICAgc2V0
UERGRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcgPSB0
cnVlOworCisjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICAvLyBBdCB0aGlzIHBv
aW50IHdlIGtub3cgYWxsIGRhdGEgZm9yIHRoZSBkb2N1bWVudCwgYW5kIHRoZXJlZm9yZSB3ZSBr
bm93IGhvdyB0byBhbnN3ZXIgYW55IG91dHN0YW5kaW5nIHJhbmdlIHJlcXVlc3RzLgorICAgIHVu
Y29uZGl0aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpOworI2Vsc2UKKyAg
ICBtX3BkZkRvY3VtZW50ID0gYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxvY10gaW5p
dFdpdGhEYXRhOnJhd0RhdGEoKV0pOworICAgIGluc3RhbGxQREZEb2N1bWVudCgpOworI2VuZGlm
Cit9CisKK3ZvaWQgUERGUGx1Z2luOjppbnN0YWxsUERGRG9jdW1lbnQoKQoreworICAgIEFTU0VS
VChtX3BkZkRvY3VtZW50KTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgdXBk
YXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOwogCiAgICAgW21fcGRmTGF5ZXJDb250cm9s
bGVyIHNldEZyYW1lU2l6ZTpzaXplKCldOwotICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgp
LmRvY3VtZW50ID0gZG9jdW1lbnQuZ2V0KCk7CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0
KCkuZG9jdW1lbnQgPSBtX3BkZkRvY3VtZW50LmdldCgpOwogCiAgICAgaWYgKGhhbmRsZXNQYWdl
U2NhbGVGYWN0b3IoKSkKICAgICAgICAgcGx1Z2luVmlldygpLT5zZXRQYWdlU2NhbGVGYWN0b3Io
W21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0sIEludFBvaW50KCkpOwpA
QCAtOTY0LDcgKzExMjUsNyBAQCB2b2lkIFBERlBsdWdpbjo6cGRmRG9jdW1lbnREaWRMb2FkKCkK
IAogICAgIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CiAKLSAgICBpZiAoW2RvY3VtZW50IGlz
TG9ja2VkXSkKKyAgICBpZiAoW21fcGRmRG9jdW1lbnQgaXNMb2NrZWRdKQogICAgICAgICBjcmVh
dGVQYXNzd29yZEVudHJ5Rm9ybSgpOwogCiAgICAgaWYgKFttX3BkZkxheWVyQ29udHJvbGxlciBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldFVSTEZyYWdtZW50OildKSB7CkBAIC0xMDMz
LDYgKzExOTQsMTkgQEAgdm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRh
KGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQogICAgICAgICBtX2RhdGEgPSBhZG9wdENG
KENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwogCiAgICAgQ0ZEYXRhQXBwZW5kQnl0ZXMobV9k
YXRhLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgp
OworCisjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICBzaXplX3QgaW5kZXggPSAw
OworICAgIHdoaWxlIChpbmRleCA8IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1ZXN0cy5zaXpl
KCkpIHsKKyAgICAgICAgYXV0byYgcmVxdWVzdCA9IG1fb3V0c3RhbmRpbmdCeXRlUmFuZ2VSZXF1
ZXN0c1tpbmRleF07CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oQ0ZEYXRhR2V0
TGVuZ3RoKG1fZGF0YS5nZXQoKSkpID49IHJlcXVlc3QucG9zaXRpb24gKyByZXF1ZXN0LmNvdW50
KSB7CisgICAgICAgICAgICByZXF1ZXN0LmNvbXBsZXRpb25IYW5kbGVyKENGRGF0YUdldEJ5dGVQ
dHIobV9kYXRhLmdldCgpKSArIHJlcXVlc3QucG9zaXRpb24sIHJlcXVlc3QuY291bnQpOworICAg
ICAgICAgICAgbV9vdXRzdGFuZGluZ0J5dGVSYW5nZVJlcXVlc3RzLnJlbW92ZShpbmRleCk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICArK2luZGV4OworICAgIH0K
KyNlbmRpZgogfQogCiB2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGlu
ZygpCkBAIC0xMDQzLDcgKzEyMTcsMTAgQEAgdm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURp
ZEZpbmlzaExvYWRpbmcoKQogCiB2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkRmFpbChi
b29sKQogewotICAgIG1fZGF0YS5jbGVhcigpOworICAgIG1fZGF0YSA9IG51bGxwdHI7CisjaWYg
SEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKKyAgICB1bmNvbmRpdGlvbmFsQ29tcGxldGVPdXRz
dGFuZGluZ1JhbmdlUmVxdWVzdHMoKTsKKyNlbmRpZgogfQogCiB2b2lkIFBERlBsdWdpbjo6cnVu
U2NyaXB0c0luUERGRG9jdW1lbnQoKQpAQCAtMTA3NCw3ICsxMjUxLDcgQEAgdm9pZCBQREZQbHVn
aW46OmF0dGVtcHRUb1VubG9ja1BERihjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQogewogICAgIFtt
X3BkZkxheWVyQ29udHJvbGxlciBhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dvcmQ6cGFzc3dvcmRd
OwogCi0gICAgaWYgKCFbcGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0pIHsKKyAgICBpZiAoIVttX3Bk
ZkRvY3VtZW50IGlzTG9ja2VkXSkgewogICAgICAgICBtX3Bhc3N3b3JkRmllbGQgPSBudWxscHRy
OwogCiAgICAgICAgIGNhbGN1bGF0ZVNpemVzKCk7CkBAIC0xMDk5LDcgKzEyNzYsNyBAQCB2b2lk
IFBERlBsdWdpbjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpCiAKIHZvaWQgUERG
UGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCiB7Ci0gICAgaWYgKFtwZGZEb2N1bWVudCgpIGlzTG9j
a2VkXSkgeworICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pIHsKICAgICAgICAgbV9m
aXJzdFBhZ2VIZWlnaHQgPSAwOwogICAgICAgICBzZXRQREZEb2N1bWVudFNpemUoSW50U2l6ZSgw
LCAwKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTExMjksNiArMTMwNiwxOCBAQCB2b2lkIFBERlBs
dWdpbjo6d2lsbERldGFjaFJlbmRlcmVyKCkKIAogdm9pZCBQREZQbHVnaW46OmRlc3Ryb3koKQog
eworICAgIG1fZG9jdW1lbnRGaW5pc2hlZExvYWRpbmcgPSB0cnVlOworCisjaWYgSEFWRShJTkNS
RU1FTlRBTF9QREZfQVBJUykKKyAgICAvLyBCeSBjbGVhcmluZyBvdXQgdGhlIHJlc291cmNlIGRh
dGEgYW5kIGhhbmRsaW5nIGFsbCBvdXRzdGFuZGluZyByYW5nZSByZXF1ZXN0cywKKyAgICAvLyB3
ZSBjYW4gZm9yY2UgdGhlIFBERlRocmVhZCB0byBjb21wbGV0ZSBxdWlja2x5CisgICAgaWYgKG1f
cGRmVGhyZWFkKSB7CisgICAgICAgIG1fZGF0YSA9IG51bGxwdHI7CisgICAgICAgIHVuY29uZGl0
aW9uYWxDb21wbGV0ZU91dHN0YW5kaW5nUmFuZ2VSZXF1ZXN0cygpOworICAgICAgICBtX3BkZlRo
cmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICB9CisjZW5kaWYKKwogICAgIG1fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0gMDsKIAogICAgIGlmICh3ZWJGcmFtZSgpKSB7
CkBAIC0xNDE4LDcgKzE2MDcsNyBAQCBib29sIFBERlBsdWdpbjo6aGFuZGxlTW91c2VFdmVudChj
b25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKICAgICBpZiAobV9zY3JvbGxDb3JuZXJMYXllciAm
JiBJbnRSZWN0KG1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkuZnJhbWUpLmNvbnRhaW5zKG1vdXNl
UG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoW3BkZkRvY3VtZW50
KCkgaXNMb2NrZWRdKQorICAgIGlmIChbbV9wZGZEb2N1bWVudCBpc0xvY2tlZF0pCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIFJpZ2h0LWNsaWNrcyBhbmQgQ29udHJvbC1jbGlja3Mg
YWx3YXlzIGNhbGwgaGFuZGxlQ29udGV4dE1lbnVFdmVudCBhcyB3ZWxsLgpAQCAtMTcxMyw3ICsx
OTAyLDcgQEAgdm9pZCBQREZQbHVnaW46OnNhdmVUb1BERigpCiB7CiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBwcm9iYWJseSBub3RpZnkgdGhlIHVzZXIgdGhhdCB0aGV5IGNhbid0IHNhdmUgYmVm
b3JlIHRoZSBkb2N1bWVudCBpcyBmaW5pc2hlZCBsb2FkaW5nLgogICAgIC8vIFBERlZpZXdDb250
cm9sbGVyIGRvZXMgYW4gTlNCZWVwKCksIGJ1dCB0aGF0IHNlZW1zIGluc3VmZmljaWVudC4KLSAg
ICBpZiAoIXBkZkRvY3VtZW50KCkpCisgICAgaWYgKCFtX2RvY3VtZW50RmluaXNoZWRMb2FkaW5n
KQogICAgICAgICByZXR1cm47CiAKICAgICBOU0RhdGEgKmRhdGEgPSBsaXZlRGF0YSgpOwpAQCAt
MTcyNSw3ICsxOTE0LDcgQEAgdm9pZCBQREZQbHVnaW46Om9wZW5XaXRoTmF0aXZlQXBwbGljYXRp
b24oKQogICAgIGlmICghbV90ZW1wb3JhcnlQREZVVUlEKSB7CiAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcHJvYmFibHkgbm90aWZ5IHRoZSB1c2VyIHRoYXQgdGhleSBjYW4ndCBzYXZlIGJl
Zm9yZSB0aGUgZG9jdW1lbnQgaXMgZmluaXNoZWQgbG9hZGluZy4KICAgICAgICAgLy8gUERGVmll
d0NvbnRyb2xsZXIgZG9lcyBhbiBOU0JlZXAoKSwgYnV0IHRoYXQgc2VlbXMgaW5zdWZmaWNpZW50
LgotICAgICAgICBpZiAoIXBkZkRvY3VtZW50KCkpCisgICAgICAgIGlmICghbV9kb2N1bWVudEZp
bmlzaGVkTG9hZGluZykKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBOU0RhdGEgKmRh
dGEgPSBsaXZlRGF0YSgpOwpAQCAtMTgxMCw3ICsxOTk5LDcgQEAgdW5zaWduZWQgUERGUGx1Z2lu
Ojpjb3VudEZpbmRNYXRjaGVzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBXZWJDb3JlOjpGaW5kT3B0
aW9ucwogICAgICAgICByZXR1cm4gMDsKIAogICAgIE5TU3RyaW5nQ29tcGFyZU9wdGlvbnMgbnNP
cHRpb25zID0gb3B0aW9ucy5jb250YWlucyhXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmUpID8gTlND
YXNlSW5zZW5zaXRpdmVTZWFyY2ggOiAwOwotICAgIHJldHVybiBbW3BkZkRvY3VtZW50KCkgZmlu
ZFN0cmluZzp0YXJnZXQgd2l0aE9wdGlvbnM6bnNPcHRpb25zXSBjb3VudF07CisgICAgcmV0dXJu
IFtbbV9wZGZEb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCB3aXRoT3B0aW9uczpuc09wdGlvbnNd
IGNvdW50XTsKIH0KIAogUERGU2VsZWN0aW9uICpQREZQbHVnaW46Om5leHRNYXRjaEZvclN0cmlu
Zyhjb25zdCBTdHJpbmcmIHRhcmdldCwgQk9PTCBzZWFyY2hGb3J3YXJkLCBCT09MIGNhc2VTZW5z
aXRpdmUsIEJPT0wgd3JhcFNlYXJjaCwgUERGU2VsZWN0aW9uICppbml0aWFsU2VsZWN0aW9uLCBC
T09MIHN0YXJ0SW5TZWxlY3Rpb24pCkBAIC0xODI0LDggKzIwMTMsNiBAQCBQREZTZWxlY3Rpb24g
KlBERlBsdWdpbjo6bmV4dE1hdGNoRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBCT09M
IHNlYXJjaEZvcgogICAgIGlmICghY2FzZVNlbnNpdGl2ZSkKICAgICAgICAgb3B0aW9ucyB8PSBO
U0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaDsKIAotICAgIFBERkRvY3VtZW50ICpkb2N1bWVudCA9IHBk
ZkRvY3VtZW50KCkuZ2V0KCk7Ci0KICAgICBSZXRhaW5QdHI8UERGU2VsZWN0aW9uPiBzZWxlY3Rp
b25Gb3JJbml0aWFsU2VhcmNoID0gYWRvcHROUyhbaW5pdGlhbFNlbGVjdGlvbiBjb3B5XSk7CiAg
ICAgaWYgKHN0YXJ0SW5TZWxlY3Rpb24pIHsKICAgICAgICAgLy8gSW5pdGlhbGx5IHdlIHdhbnQg
dG8gaW5jbHVkZSB0aGUgc2VsZWN0ZWQgdGV4dCBpbiB0aGUgc2VhcmNoLiBTbyB3ZSBtdXN0IG1v
ZGlmeSB0aGUgc3RhcnRpbmcgc2VhcmNoCkBAIC0xODQxLDE1ICsyMDI4LDE1IEBAIFBERlNlbGVj
dGlvbiAqUERGUGx1Z2luOjpuZXh0TWF0Y2hGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQs
IEJPT0wgc2VhcmNoRm9yCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBQREZTZWxlY3Rpb24gKmZv
dW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0IGZyb21TZWxlY3Rpb246
c2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaC5nZXQoKSB3aXRoT3B0aW9uczpvcHRpb25zXTsKKyAg
ICBQREZTZWxlY3Rpb24gKmZvdW5kU2VsZWN0aW9uID0gW21fcGRmRG9jdW1lbnQgZmluZFN0cmlu
Zzp0YXJnZXQgZnJvbVNlbGVjdGlvbjpzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoLmdldCgpIHdp
dGhPcHRpb25zOm9wdGlvbnNdOwogCiAgICAgLy8gSWYgd2UgZmlyc3Qgc2VhcmNoZWQgaW4gdGhl
IHNlbGVjdGlvbiwgYW5kIHdlIGZvdW5kIHRoZSBzZWxlY3Rpb24sIHNlYXJjaCBhZ2FpbiBmcm9t
IGp1c3QgcGFzdCB0aGUgc2VsZWN0aW9uLgogICAgIGlmIChzdGFydEluU2VsZWN0aW9uICYmIFtm
b3VuZFNlbGVjdGlvbiBpc0VxdWFsOmluaXRpYWxTZWxlY3Rpb25dKQotICAgICAgICBmb3VuZFNl
bGVjdGlvbiA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCBmcm9tU2VsZWN0aW9uOmluaXRp
YWxTZWxlY3Rpb24gd2l0aE9wdGlvbnM6b3B0aW9uc107CisgICAgICAgIGZvdW5kU2VsZWN0aW9u
ID0gW21fcGRmRG9jdW1lbnQgZmluZFN0cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjppbml0aWFs
U2VsZWN0aW9uIHdpdGhPcHRpb25zOm9wdGlvbnNdOwogCiAgICAgaWYgKCFmb3VuZFNlbGVjdGlv
biAmJiB3cmFwU2VhcmNoKSB7Ci0gICAgICAgIGF1dG8gZW1wdHlTZWxlY3Rpb24gPSBhZG9wdE5T
KFtbcGRmU2VsZWN0aW9uQ2xhc3MoKSBhbGxvY10gaW5pdFdpdGhEb2N1bWVudDpkb2N1bWVudF0p
OwotICAgICAgICBmb3VuZFNlbGVjdGlvbiA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCBm
cm9tU2VsZWN0aW9uOmVtcHR5U2VsZWN0aW9uLmdldCgpIHdpdGhPcHRpb25zOm9wdGlvbnNdOwor
ICAgICAgICBhdXRvIGVtcHR5U2VsZWN0aW9uID0gYWRvcHROUyhbW3BkZlNlbGVjdGlvbkNsYXNz
KCkgYWxsb2NdIGluaXRXaXRoRG9jdW1lbnQ6bV9wZGZEb2N1bWVudC5nZXQoKV0pOworICAgICAg
ICBmb3VuZFNlbGVjdGlvbiA9IFttX3BkZkRvY3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0IGZyb21T
ZWxlY3Rpb246ZW1wdHlTZWxlY3Rpb24uZ2V0KCkgd2l0aE9wdGlvbnM6b3B0aW9uc107CiAgICAg
fQogCiAgICAgcmV0dXJuIGZvdW5kU2VsZWN0aW9uOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>