<?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>25425</bug_id>
          
          <creation_ts>2009-04-27 09:17:11 -0700</creation_ts>
          <short_desc>DOM attribute getter/setter functions should use const AtomicString&amp; type</short_desc>
          <delta_ts>2018-12-15 15:03:25 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>27273</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>arv</cc>
    
    <cc>cdumez</cc>
    
    <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>118987</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-27 09:17:11 -0700</bug_when>
    <thetext>It’s more efficient for the DOM binding if DOM getter/setter functions use const AtomicString&amp; for their results and arguments. Existing code uses String for results and const String&amp; for arguments. The former results in unnecessary reference counting churn and re-lookup in the atomic string hash table. The latter can result in unnecessary memory allocation when the string in question is already present in the atomic string hash table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118988</commentid>
    <comment_count>1</comment_count>
      <attachid>29820</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-27 09:17:44 -0700</bug_when>
    <thetext>Created attachment 29820
patch with some work on this and other minor style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127283</commentid>
    <comment_count>2</comment_count>
      <attachid>31632</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-21 22:30:36 -0700</bug_when>
    <thetext>Created attachment 31632
patch for part 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127324</commentid>
    <comment_count>3</comment_count>
      <attachid>31632</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-22 01:21:05 -0700</bug_when>
    <thetext>Comment on attachment 31632
patch for part 1

Clear review flag since this is landed and there is more work to do. (Sorry, bdash.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127352</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-22 08:07:31 -0700</bug_when>
    <thetext>I&apos;ll take care of the V8 bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127366</commentid>
    <comment_count>5</comment_count>
      <attachid>31652</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-22 09:33:28 -0700</bug_when>
    <thetext>Created attachment 31652
patch for part 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127536</commentid>
    <comment_count>6</comment_count>
      <attachid>31652</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-22 18:06:18 -0700</bug_when>
    <thetext>Comment on attachment 31652
patch for part 2

Clear review flag since this is landed and there is more work to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131616</commentid>
    <comment_count>7</comment_count>
      <attachid>32722</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-14 11:19:37 -0700</bug_when>
    <thetext>Created attachment 32722
patch that does this for eight classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131646</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-14 12:58:23 -0700</bug_when>
    <thetext>Can you hold off landing this for a bit -- let me catch up w/V8 bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131696</commentid>
    <comment_count>9</comment_count>
      <attachid>32722</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-14 15:09:25 -0700</bug_when>
    <thetext>Comment on attachment 32722
patch that does this for eight classes

LGTM :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131697</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-14 15:09:54 -0700</bug_when>
    <thetext>V8 side landed as http://trac.webkit.org/changeset/45874, so we&apos;re good to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140652</commentid>
    <comment_count>11</comment_count>
      <attachid>32722</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-16 22:03:22 -0700</bug_when>
    <thetext>Comment on attachment 32722
patch that does this for eight classes

Landed as http://trac.webkit.org/changeset/45893</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140654</commentid>
    <comment_count>12</comment_count>
      <attachid>34947</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-16 22:05:26 -0700</bug_when>
    <thetext>Created attachment 34947
patch that does this for four more classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140682</commentid>
    <comment_count>13</comment_count>
      <attachid>34947</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-17 00:13:23 -0700</bug_when>
    <thetext>Comment on attachment 34947
patch that does this for four more classes

Landed as http://trac.webkit.org/changeset/47352</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199700</commentid>
    <comment_count>14</comment_count>
      <attachid>50715</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-15 09:45:15 -0700</bug_when>
    <thetext>Created attachment 50715
More of this type of thing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488312</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-12-15 15:03:25 -0800</bug_when>
    <thetext>I don’t think we need this bug any more. We’ve done lots more of this type of work over the years.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29820</attachid>
            <date>2009-04-27 09:17:44 -0700</date>
            <delta_ts>2009-07-14 11:19:37 -0700</delta_ts>
            <desc>patch with some work on this and other minor style issues</desc>
            <filename>PrivacyPatch.txt</filename>
            <type>text/plain</type>
            <size>238231</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC05OTgsMyArOTk4LDQgQEAgX3drU2V0VXBGb250Q2FjaGUK
IF93a1NpZ25hbENGUmVhZFN0cmVhbUVuZAogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRXJyb3IKIF93
a1NpZ25hbENGUmVhZFN0cmVhbUhhc0J5dGVzCitfX1pON1dlYkNvcmUxN0hUTUxQbHVnSW5FbGVt
ZW50MTFnZXROUE9iamVjdEV2CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDM3LDkgKzQzNyw5IEBAIHB1Ymxp
YzoKICAgICAvLyBTZXR0aW5nIHRoZSBCYXNlRWxlbWVudFVSTCB3aWxsIGNoYW5nZSB0aGUgYmFz
ZVVSTC4KICAgICB2b2lkIHNldEJhc2VFbGVtZW50VVJMKGNvbnN0IEtVUkwmKTsKIAotICAgIGNv
bnN0IFN0cmluZyYgYmFzZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVRhcmdldDsgfQor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYmFzZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFz
ZVRhcmdldDsgfQogICAgIC8vIFNldHRpbmcgdGhlIEJhc2VFbGVtZW50VGFyZ2V0IHdpbGwgY2hh
bmdlIHRoZSBiYXNlVGFyZ2V0LgotICAgIHZvaWQgc2V0QmFzZUVsZW1lbnRUYXJnZXQoY29uc3Qg
U3RyaW5nJiBiYXNlVGFyZ2V0KSB7IG1fYmFzZVRhcmdldCA9IGJhc2VUYXJnZXQ7IH0KKyAgICB2
b2lkIHNldEJhc2VFbGVtZW50VGFyZ2V0KGNvbnN0IEF0b21pY1N0cmluZyYgYmFzZVRhcmdldCkg
eyBtX2Jhc2VUYXJnZXQgPSBiYXNlVGFyZ2V0OyB9CiAKICAgICBLVVJMIGNvbXBsZXRlVVJMKGNv
bnN0IFN0cmluZyYpIGNvbnN0OwogCkBAIC04MTQsNyArODE0LDcgQEAgcHJpdmF0ZToKICAgICAv
LyB0YWtlcyBwcmVjZWRlbmNlLgogICAgIFN0cmluZyBtX2RvY3VtZW50VVJJOwogCi0gICAgU3Ry
aW5nIG1fYmFzZVRhcmdldDsKKyAgICBBdG9taWNTdHJpbmcgbV9iYXNlVGFyZ2V0OwogCiAgICAg
UmVmUHRyPERvY3VtZW50VHlwZT4gbV9kb2NUeXBlOwogICAgIG11dGFibGUgUmVmUHRyPERPTUlt
cGxlbWVudGF0aW9uPiBtX2ltcGxlbWVudGF0aW9uOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw5ICsyMzQsOSBAQCBib29s
IFN0eWxlQ2hhbmdlOjpjdXJyZW50bHlIYXNTdHlsZShjb25zCiAgICAgcmV0dXJuIGVxdWFsSWdu
b3JpbmdDYXNlKHZhbHVlLT5jc3NUZXh0KCksIHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCkp
OwogfQogCi1zdGF0aWMgU3RyaW5nJiBzdHlsZVNwYW5DbGFzc1N0cmluZygpCitzdGF0aWMgY29u
c3QgQXRvbWljU3RyaW5nJiBzdHlsZVNwYW5DbGFzc1N0cmluZygpCiB7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIHN0eWxlU3BhbkNsYXNzU3RyaW5nLCAoKEFwcGxlU3R5bGVTcGFu
Q2xhc3MpKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHN0eWxlU3Bh
bkNsYXNzU3RyaW5nLCAoKEFwcGxlU3R5bGVTcGFuQ2xhc3MpKSk7CiAgICAgcmV0dXJuIHN0eWxl
U3BhbkNsYXNzU3RyaW5nOwogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkocmV2
aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBI
VE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBIVE1MQW5jaG9yRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkKLSAgICAsIG1fY29vcmRzKDApCiAgICAgLCBtX2Nvb3Jkc0xlbigwKQogICAg
ICwgbV9sYXN0U2l6ZSgtMSwgLTEpCiAgICAgLCBtX3NoYXBlKFVua25vd24pCkBAIC00NiwxMiAr
NDUsNyBAQCBIVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChjb25zdCBRCiAgICAgQVNT
RVJUKGhhc1RhZ05hbWUoYXJlYVRhZykpOwogfQogCi1IVE1MQXJlYUVsZW1lbnQ6On5IVE1MQXJl
YUVsZW1lbnQoKQotewotICAgIGRlbGV0ZSBbXSBtX2Nvb3JkczsKLX0KLQotdm9pZCBIVE1MQXJl
YUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3Zv
aWQgSFRNTEFyZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUq
IGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBzaGFwZUF0dHIpIHsKICAgICAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJkZWZhdWx0IikpCkBAIC02Mywy
MiArNTcsMjEgQEAgdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAg
ICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicmVjdCIpKQog
ICAgICAgICAgICAgbV9zaGFwZSA9IFJlY3Q7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gY29vcmRzQXR0cikgewotICAgICAgICBkZWxldGUgW10gbV9jb29yZHM7Ci0gICAgICAgIG1f
Y29vcmRzID0gbmV3Q29vcmRzQXJyYXkoYXR0ci0+dmFsdWUoKS5zdHJpbmcoKSwgbV9jb29yZHNM
ZW4pOworICAgICAgICBtX2Nvb3Jkcy5zZXQobmV3Q29vcmRzQXJyYXkoYXR0ci0+dmFsdWUoKS5z
dHJpbmcoKSwgbV9jb29yZHNMZW4pKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBh
bHRBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBhY2Nlc3NrZXlBdHRyKSB7CiAgICAgICAgIC8vIERv
IG5vdGhpbmcuCiAgICAgfSBlbHNlCiAgICAgICAgIEhUTUxBbmNob3JFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAotYm9vbCBIVE1MQXJlYUVsZW1lbnQ6Om1hcE1vdXNl
RXZlbnQoaW50IHgsIGludCB5LCBjb25zdCBJbnRTaXplJiBzaXplLCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQpCitib29sIEhUTUxBcmVhRWxlbWVudDo6bWFwTW91c2VFdmVudChjb25zdCBJbnRQb2lu
dCYgZXZlbnRQb2ludCwgY29uc3QgSW50U2l6ZSYgbWFwU2l6ZSwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0KQogewotICAgIGlmIChtX2xhc3RTaXplICE9IHNpemUpIHsKLSAgICAgICAgbV9yZWdpb24u
c2V0KG5ldyBQYXRoKGdldFJlZ2lvbihzaXplKSkpOwotICAgICAgICBtX2xhc3RTaXplID0gc2l6
ZTsKKyAgICBpZiAobV9sYXN0U2l6ZSAhPSBtYXBTaXplKSB7CisgICAgICAgIG1fcmVnaW9uLnNl
dChuZXcgUGF0aChnZXRSZWdpb24obWFwU2l6ZSkpKTsKKyAgICAgICAgbV9sYXN0U2l6ZSA9IG1h
cFNpemU7CiAgICAgfQogCi0gICAgaWYgKCFtX3JlZ2lvbi0+Y29udGFpbnMoSW50UG9pbnQoeCwg
eSkpKQorICAgIGlmICghbV9yZWdpb24tPmNvbnRhaW5zKGV2ZW50UG9pbnQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmVzdWx0LnNldElubmVyTm9kZSh0aGlzKTsKQEAgLTE5
OCw3ICsxOTEsNyBAQCBib29sIEhUTUxBcmVhRWxlbWVudDo6bm9IcmVmKCkgY29uc3QKIAogdm9p
ZCBIVE1MQXJlYUVsZW1lbnQ6OnNldE5vSHJlZihib29sIG5vSHJlZikKIHsKLSAgICBzZXRBdHRy
aWJ1dGUobm9ocmVmQXR0ciwgbm9IcmVmID8gIiIgOiAwKTsKKyAgICBzZXRBdHRyaWJ1dGUobm9o
cmVmQXR0ciwgbm9IcmVmID8gZW1wdHlBdG9tIDogbnVsbEF0b20pOwogfQogCiBjb25zdCBBdG9t
aWNTdHJpbmcmIEhUTUxBcmVhRWxlbWVudDo6c2hhcGUoKSBjb25zdApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxBcmVhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuaAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgSFRNTEFyZWFF
bGVtZW50X2gKIAogI2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW50
U2l6ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTM0LDE4ICszNCwxMCBAQCBjbGFzcyBQYXRoOwogY2xhc3MgSFRNTEFyZWFFbGVt
ZW50IDogcHVibGljIEhUTUxBbmNob3JFbGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1MQXJlYUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxBcmVhRWxl
bWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKICAgICBib29sIGlzRGVmYXVsdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUgPT0gRGVmYXVsdDsgfQotCi0gICAgYm9vbCBtYXBNb3Vz
ZUV2ZW50KGludCB4LCBpbnQgeSwgY29uc3QgSW50U2l6ZSYsIEhpdFRlc3RSZXN1bHQmKTsKLQot
ICAgIHZpcnR1YWwgSW50UmVjdCBnZXRSZWN0KFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIGJv
b2wgbWFwTW91c2VFdmVudChjb25zdCBJbnRQb2ludCYgZXZlbnRQb2ludCwgY29uc3QgSW50U2l6
ZSYgbWFwU2l6ZSwgSGl0VGVzdFJlc3VsdCYpOworICAgIEludFJlY3QgZ2V0UmVjdChSZW5kZXJP
YmplY3QqKSBjb25zdDsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWNjZXNzS2V5KCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRBY2Nlc3NLZXkoY29uc3QgQXRvbWljU3RyaW5nJik7CkBAIC02NSwx
NyArNTcsMjIgQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhcGUoKSBjb25z
dDsKICAgICB2b2lkIHNldFNoYXBlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCi0gICAgdmlydHVh
bCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIFN0cmluZyB0YXJnZXQo
KSBjb25zdDsKICAgICB2b2lkIHNldFRhcmdldChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3Vz
YWJsZSgpIGNvbnN0OworCiAgICAgZW51bSBTaGFwZSB7IERlZmF1bHQsIFBvbHksIFJlY3QsIENp
cmNsZSwgVW5rbm93biB9OwogICAgIFBhdGggZ2V0UmVnaW9uKGNvbnN0IEludFNpemUmKSBjb25z
dDsKIAogICAgIE93blB0cjxQYXRoPiBtX3JlZ2lvbjsKLSAgICBMZW5ndGgqIG1fY29vcmRzOwor
ICAgIE93bkFycmF5UHRyPExlbmd0aD4gbV9jb29yZHM7CiAgICAgaW50IG1fY29vcmRzTGVuOwog
ICAgIEludFNpemUgbV9sYXN0U2l6ZTsKICAgICBTaGFwZSBtX3NoYXBlOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEF1ZGlvRWxlbWVudC5oCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXVk
aW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxNSArMzIsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBIVE1MQXVkaW9FbGVtZW50IDogcHVibGljIEhUTUxNZWRpYUVsZW1lbnQK
LXsKK2NsYXNzIEhUTUxBdWRpb0VsZW1lbnQgOiBwdWJsaWMgSFRNTE1lZGlhRWxlbWVudCB7CiBw
dWJsaWM6CiAgICAgSFRNTEF1ZGlvRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKLSAgICAKKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDU7IH0KIH07CiAKIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCisKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCUkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MQlJFbGVtZW50LmNwcAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTEJSRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEwICszNiw2IEBA
IEhUTUxCUkVsZW1lbnQ6OkhUTUxCUkVsZW1lbnQoY29uc3QgUXVhbGkKICAgICBBU1NFUlQoaGFz
VGFnTmFtZShiclRhZykpOwogfQogCi1IVE1MQlJFbGVtZW50Ojp+SFRNTEJSRWxlbWVudCgpCi17
Ci19Ci0KIGJvb2wgSFRNTEJSRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBp
ZiAoYXR0ck5hbWUgPT0gY2xlYXJBdHRyKSB7CkBAIC03NCwxMiArNzAsMTIgQEAgUmVuZGVyT2Jq
ZWN0KiBIVE1MQlJFbGVtZW50OjpjcmVhdGVSZW5kZQogICAgICByZXR1cm4gbmV3IChhcmVuYSkg
UmVuZGVyQlIodGhpcyk7CiB9CiAKLVN0cmluZyBIVE1MQlJFbGVtZW50OjpjbGVhcigpIGNvbnN0
Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxCUkVsZW1lbnQ6OmNsZWFyKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKGNsZWFyQXR0cik7CiB9CiAKLXZvaWQgSFRNTEJSRWxlbWVu
dDo6c2V0Q2xlYXIoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEJSRWxlbWVudDo6c2V0
Q2xlYXIoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoY2xl
YXJBdHRyLCB2YWx1ZSk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEJSRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQlJFbGVtZW50LmgJKHJldmlzaW9uIDQyODkz
KQorKysgV2ViQ29yZS9odG1sL0hUTUxCUkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTks
NiArMTksNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNp
Zm5kZWYgSFRNTEJSRWxlbWVudF9oCiAjZGVmaW5lIEhUTUxCUkVsZW1lbnRfaAogCkBAIC0yOCwy
MiArMjksMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTdHJpbmc7CiAKLWNsYXNz
IEhUTUxCUkVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKK2NsYXNzIEhUTUxCUkVsZW1l
bnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxCUkVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxCUkVsZW1lbnQoKTsKLSAg
ICAKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xlYXIoKSBjb25zdDsKKyAgICB2b2lkIHNl
dENsZWFyKGNvbnN0IEF0b21pY1N0cmluZyYpOworCitwcml2YXRlOiAgICAKICAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNGb3JiaWRkZW47IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOworICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICAKLSAgICB2aXJ0
dWFsIFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHls
ZSopOwotCi0gICAgU3RyaW5nIGNsZWFyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDbGVhcihjb25z
dCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxCYXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxCYXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hU
TUxCYXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC00MCwyNSArNDAsMTggQEAgSFRNTEJhc2VFbGVtZW50OjpIVE1M
QmFzZUVsZW1lbnQoY29uc3QgUQogICAgIEFTU0VSVChoYXNUYWdOYW1lKGJhc2VUYWcpKTsKIH0K
IAotSFRNTEJhc2VFbGVtZW50Ojp+SFRNTEJhc2VFbGVtZW50KCkKLXsKLX0KLQogdm9pZCBIVE1M
QmFzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikK
IHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpID09IGhyZWZBdHRyKSB7Ci0gICAgICAgIG1faHJlZiA9
IHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpOworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaHJlZkF0
dHIgfHwgYXR0ci0+bmFtZSgpID09IHRhcmdldEF0dHIpCiAgICAgICAgIHByb2Nlc3MoKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0YXJnZXRBdHRyKSB7Ci0gICAgICAgIG1fdGFy
Z2V0ID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgcHJvY2VzcygpOwotICAgIH0gZWxzZQorICAg
IGVsc2UKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwog
fQogCiB2b2lkIEhUTUxCYXNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAg
IEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOworCiAgICAgcHJvY2VzcygpOwog
fQogCkBAIC02Niw4ICs1OSw4IEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50OjpyZW1vdmVkRnJvbURv
Y3VtZW4KIHsKICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogCi0gICAg
Ly8gU2luY2UgdGhlIGRvY3VtZW50IGRvZXNuJ3QgaGF2ZSBhIGJhc2UgZWxlbWVudC4uLgotICAg
IC8vIChUaGlzIHdpbGwgYnJlYWsgaW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUgYmFzZSBlbGVtZW50
cywgYnV0IHRoYXQncyBub3QgdmFsaWQgYW55d2F5ICg/KSkKKyAgICAvLyBSZXZlcnNlIHRoaW5n
cyB3ZSBkaWQgaW4gdGhlIHByb2Nlc3MgZnVuY3Rpb24uCisgICAgLy8gSXMgdGhpcyByaWdodCB3
aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBiYXNlIGVsZW1lbnRzPwogICAgIGRvY3VtZW50KCktPnNl
dEJhc2VFbGVtZW50VVJMKEtVUkwoKSk7CiAgICAgZG9jdW1lbnQoKS0+c2V0QmFzZUVsZW1lbnRU
YXJnZXQoU3RyaW5nKCkpOwogfQpAQCAtNzcsMjEgKzcwLDM1IEBAIHZvaWQgSFRNTEJhc2VFbGVt
ZW50Ojpwcm9jZXNzKCkKICAgICBpZiAoIWluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCFtX2hyZWYuaXNFbXB0eSgpKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRCYXNl
RWxlbWVudFVSTChLVVJMKGRvY3VtZW50KCktPnVybCgpLCBtX2hyZWYpKTsKKyAgICAvLyBJcyB0
aGlzIHJpZ2h0IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGJhc2UgZWxlbWVudHM/CisKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGhyZWYgPSBnZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOworICAgIGlm
ICghaHJlZi5pc0VtcHR5KCkpCisgICAgICAgIGRvY3VtZW50KCktPnNldEJhc2VFbGVtZW50VVJM
KEtVUkwoZG9jdW1lbnQoKS0+dXJsKCksIGhyZWYpKTsKIAotICAgIGlmICghbV90YXJnZXQuaXNF
bXB0eSgpKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRCYXNlRWxlbWVudFRhcmdldChtX3Rhcmdl
dCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0YXJnZXQgPSBnZXRBdHRyaWJ1dGUodGFyZ2V0
QXR0cik7CisgICAgaWYgKCF0YXJnZXQuaXNFbXB0eSgpKQorICAgICAgICBkb2N1bWVudCgpLT5z
ZXRCYXNlRWxlbWVudFRhcmdldCh0YXJnZXQpOwogCi0gICAgLy8gIyMjIHNob3VsZCBjaGFuZ2lu
ZyBhIGRvY3VtZW50J3MgYmFzZSBVUkwgZHluYW1pY2FsbHkgYXV0b21hdGljYWxseSB1cGRhdGUg
YWxsIGltYWdlcywgc3R5bGVzaGVldHMgZXRjPworICAgIC8vIEZJWE1FOiBTaG91bGQgY2hhbmdp
bmcgYSBkb2N1bWVudCdzIGJhc2UgVVJMIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGFsbCBpbWFnZXMs
IHN0eWxlc2hlZXRzIGV0Yz8KIH0KIAotdm9pZCBIVE1MQmFzZUVsZW1lbnQ6OnNldEhyZWYoY29u
c3QgU3RyaW5nICZ2YWx1ZSkKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEJhc2VFbGVtZW50Ojpo
cmVmKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKK30KKwor
dm9pZCBIVE1MQmFzZUVsZW1lbnQ6OnNldEhyZWYoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkK
IHsKICAgICBzZXRBdHRyaWJ1dGUoaHJlZkF0dHIsIHZhbHVlKTsKIH0KIAotdm9pZCBIVE1MQmFz
ZUVsZW1lbnQ6OnNldFRhcmdldChjb25zdCBTdHJpbmcgJnZhbHVlKQorU3RyaW5nIEhUTUxCYXNl
RWxlbWVudDo6dGFyZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRhcmdl
dEF0dHIpOworfQorCit2b2lkIEhUTUxCYXNlRWxlbWVudDo6c2V0VGFyZ2V0KGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHRhcmdldEF0dHIsIHZhbHVlKTsK
IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmgJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxCYXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
ICAqCiAgKi8KKwogI2lmbmRlZiBIVE1MQmFzZUVsZW1lbnRfaAogI2RlZmluZSBIVE1MQmFzZUVs
ZW1lbnRfaAogCkBAIC0yNiwzMCArMjcsMjUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBIVE1MQmFzZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKK2NsYXNzIEhUTUxC
YXNlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTEJhc2VF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgIH5IVE1MQmFzZUVs
ZW1lbnQoKTsKIAorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHJlZigpIGNvbnN0OworICAgIHZp
cnR1YWwgU3RyaW5nIHRhcmdldCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRIcmVmKGNvbnN0IEF0
b21pY1N0cmluZyYpOworICAgIHZvaWQgc2V0VGFyZ2V0KGNvbnN0IEF0b21pY1N0cmluZyYpOwor
Citwcml2YXRlOgogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQogICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAgU3RyaW5nIGhyZWYoKSBjb25z
dCB7IHJldHVybiBtX2hyZWY7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB0YXJnZXQoKSBjb25zdCB7
IHJldHVybiBtX3RhcmdldDsgfQotCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1
bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAKICAgICB2
b2lkIHByb2Nlc3MoKTsKLSAgICAKLSAgICB2b2lkIHNldEhyZWYoY29uc3QgU3RyaW5nJik7Ci0g
ICAgdm9pZCBzZXRUYXJnZXQoY29uc3QgU3RyaW5nJik7Ci0KLXByb3RlY3RlZDoKLSAgICBTdHJp
bmcgbV9ocmVmOwotICAgIFN0cmluZyBtX3RhcmdldDsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEJhc2VGb250RWxlbWVudC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysg
V2ViQ29yZS9odG1sL0hUTUxCYXNlRm9udEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0xOSw4ICsxOSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICov
CisKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MQmFzZUZvbnRFbGVtZW50Lmgi
CisKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzMs
MjIgKzM1LDIyIEBAIEhUTUxCYXNlRm9udEVsZW1lbnQ6OkhUTUxCYXNlRm9udEVsZW1lbnQKICAg
ICBBU1NFUlQoaGFzVGFnTmFtZShiYXNlZm9udFRhZykpOwogfQogCi1TdHJpbmcgSFRNTEJhc2VG
b250RWxlbWVudDo6Y29sb3IoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MQmFzZUZv
bnRFbGVtZW50Ojpjb2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjb2xv
ckF0dHIpOwogfQogCi12b2lkIEhUTUxCYXNlRm9udEVsZW1lbnQ6OnNldENvbG9yKGNvbnN0IFN0
cmluZyAmdmFsdWUpCit2b2lkIEhUTUxCYXNlRm9udEVsZW1lbnQ6OnNldENvbG9yKGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGNvbG9yQXR0ciwgdmFsdWUp
OwogfQogCi1TdHJpbmcgSFRNTEJhc2VGb250RWxlbWVudDo6ZmFjZSgpIGNvbnN0Citjb25zdCBB
dG9taWNTdHJpbmcmIEhUTUxCYXNlRm9udEVsZW1lbnQ6OmZhY2UoKSBjb25zdAogewogICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoZmFjZUF0dHIpOwogfQogCi12b2lkIEhUTUxCYXNlRm9udEVsZW1l
bnQ6OnNldEZhY2UoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEJhc2VGb250RWxlbWVu
dDo6c2V0RmFjZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0
ZShmYWNlQXR0ciwgdmFsdWUpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCYXNlRm9udEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJhc2VGb250RWxlbWVudC5o
CShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDYgKzE5LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgogICoKICAqLworCiAjaWZuZGVmIEhUTUxCYXNlRm9udEVsZW1lbnRfaAogI2Rl
ZmluZSBIVE1MQmFzZUZvbnRFbGVtZW50X2gKIApAQCAtMjYsMjIgKzI3LDIyIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTEJhc2VGb250RWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudAoteworY2xhc3MgSFRNTEJhc2VGb250RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVu
dCB7CiBwdWJsaWM6Ci0gICAgSFRNTEJhc2VGb250RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqIGRvYyk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICBIVE1MQmFzZUZv
bnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgU3RyaW5n
IGNvbG9yKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb2xvcihjb25zdCBTdHJpbmcgJik7CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBjb2xvcigpIGNvbnN0OworICAgIHZvaWQgc2V0Q29sb3IoY29u
c3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgZmFjZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0RmFjZShjb25zdCBTdHJpbmcgJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYWNlKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRGYWNlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgaW50
IHNpemUoKSBjb25zdDsKICAgICB2b2lkIHNldFNpemUoaW50KTsKKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBU
YWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MQmxvY2txdW90ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
QmxvY2txdW90ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MQmxvY2txdW90ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMTksNiArMTksNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CiAgKgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MQmxvY2txdW90
ZUVsZW1lbnQuaCIKIApAQCAtMjgsMjIgKzI5LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEJsb2NrcXVvdGVFbGVtZW50OjpIVE1M
QmxvY2txdW90ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKK0hUTUxCbG9ja3F1b3RlRWxl
bWVudDo6SFRNTEJsb2NrcXVvdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpKTsKIH0KIAotSFRNTEJs
b2NrcXVvdGVFbGVtZW50Ojp+SFRNTEJsb2NrcXVvdGVFbGVtZW50KCkKLXsKLX0KLQotU3RyaW5n
IEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6Y2l0ZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcm
IEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6Y2l0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShjaXRlQXR0cik7CiB9CiAKLXZvaWQgSFRNTEJsb2NrcXVvdGVFbGVtZW50OjpzZXRD
aXRlKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6c2V0
Q2l0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShjaXRl
QXR0ciwgdmFsdWUpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCbG9ja3F1b3RlRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuaAko
cmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJsb2NrcXVvdGVFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBIVE1MQmxvY2txdW90ZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGlj
OgogICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKLSAgICB+SFRNTEJsb2NrcXVvdGVFbGVtZW50KCk7CiAKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGNpdGUoKSBjb25zdDsKKyAgICB2b2lkIHNldENpdGUoY29uc3QgQXRvbWljU3RyaW5n
Jik7CisKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVt
ZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KICAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KLSAgICAKLSAgICBTdHJpbmcgY2l0
ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2l0ZShjb25zdCBTdHJpbmcmKTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lv
biA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIFNpbW9uIEhhdXNtYW5u
IChoYXVzbWFubkBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4Miw2MiArMTgyLDYyIEBAIGJvb2wgSFRNTEJvZHlFbGVt
ZW50Ojppc1VSTEF0dHJpYnV0ZShBdHQKICAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IGJhY2tn
cm91bmRBdHRyOwogfQogCi1TdHJpbmcgSFRNTEJvZHlFbGVtZW50OjphTGluaygpIGNvbnN0Citj
b25zdCBBdG9taWNTdHJpbmcmIEhUTUxCb2R5RWxlbWVudDo6YUxpbmsoKSBjb25zdAogewogICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpbmtBdHRyKTsKIH0KIAotdm9pZCBIVE1MQm9keUVsZW1l
bnQ6OnNldEFMaW5rKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEhUTUxCb2R5RWxlbWVudDo6
c2V0QUxpbmsoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUo
YWxpbmtBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MQm9keUVsZW1lbnQ6OmJhY2tncm91
bmQoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MQm9keUVsZW1lbnQ6OmJhY2tncm91
bmQoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpOwog
fQogCi12b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0QmFja2dyb3VuZChjb25zdCBTdHJpbmcmIHZh
bHVlKQordm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldEJhY2tncm91bmQoY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIsIHZhbHVlKTsK
IH0KIAotU3RyaW5nIEhUTUxCb2R5RWxlbWVudDo6YmdDb2xvcigpIGNvbnN0Citjb25zdCBBdG9t
aWNTdHJpbmcmIEhUTUxCb2R5RWxlbWVudDo6YmdDb2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShiZ2NvbG9yQXR0cik7CiB9CiAKLXZvaWQgSFRNTEJvZHlFbGVtZW50Ojpz
ZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0
QmdDb2xvcihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShi
Z2NvbG9yQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTEJvZHlFbGVtZW50OjpsaW5rKCkg
Y29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEJvZHlFbGVtZW50OjpsaW5rKCkgY29uc3QK
IHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGxpbmtBdHRyKTsKIH0KIAotdm9pZCBIVE1MQm9k
eUVsZW1lbnQ6OnNldExpbmsoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTEJvZHlFbGVt
ZW50OjpzZXRMaW5rKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmli
dXRlKGxpbmtBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MQm9keUVsZW1lbnQ6OnRleHQo
KSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MQm9keUVsZW1lbnQ6OnRleHQoKSBjb25z
dAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGV4dEF0dHIpOwogfQogCi12b2lkIEhUTUxC
b2R5RWxlbWVudDo6c2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MQm9keUVs
ZW1lbnQ6OnNldFRleHQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRy
aWJ1dGUodGV4dEF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxCb2R5RWxlbWVudDo6dkxp
bmsoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MQm9keUVsZW1lbnQ6OnZMaW5rKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZsaW5rQXR0cik7CiB9CiAKLXZvaWQg
SFRNTEJvZHlFbGVtZW50OjpzZXRWTGluayhjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1M
Qm9keUVsZW1lbnQ6OnNldFZMaW5rKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAg
c2V0QXR0cmlidXRlKHZsaW5rQXR0ciwgdmFsdWUpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxCb2R5RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1l
bnQuaAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBT
aW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAy
MDA5IEFwcGxlIEluYy4gQUxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMzAsMTIgKzI4LDI1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTEJv
ZHlFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17CitjbGFzcyBIVE1MQm9keUVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxCb2R5RWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICB+SFRNTEJvZHlFbGVtZW50KCk7Cisg
ICAgdmlydHVhbCB+SFRNTEJvZHlFbGVtZW50KCk7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGFMaW5rKCkgY29uc3Q7CisgICAgdm9pZCBzZXRBTGluayhjb25zdCBBdG9taWNTdHJpbmcmKTsK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGJhY2tncm91bmQoKSBjb25zdDsKKyAgICB2b2lkIHNl
dEJhY2tncm91bmQoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBiZ0NvbG9yKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCZ0NvbG9yKGNvbnN0IEF0b21pY1N0cmlu
ZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbGluaygpIGNvbnN0OworICAgIHZvaWQgc2V0
TGluayhjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRleHQo
KSBjb25zdDsKKyAgICB2b2lkIHNldFRleHQoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiB2TGluaygpIGNvbnN0OworICAgIHZvaWQgc2V0VkxpbmsoY29uc3Qg
QXRvbWljU3RyaW5nJik7CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVu
ZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KICAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDEwOyB9CiAgICAgCkBA
IC00OCwxOSArNTksNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0
cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCi0gICAgU3RyaW5nIGFMaW5rKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRBTGluayhjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgYmFja2dyb3VuZCgp
IGNvbnN0OwotICAgIHZvaWQgc2V0QmFja2dyb3VuZChjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJp
bmcgYmdDb2xvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0QmdDb2xvcihjb25zdCBTdHJpbmcmKTsK
LSAgICBTdHJpbmcgbGluaygpIGNvbnN0OwotICAgIHZvaWQgc2V0TGluayhjb25zdCBTdHJpbmcm
KTsKLSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJp
bmcmKTsKLSAgICBTdHJpbmcgdkxpbmsoKSBjb25zdDsKLSAgICB2b2lkIHNldFZMaW5rKGNvbnN0
IFN0cmluZyYpOwotCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsTGVmdCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCBzY3JvbGxMZWZ0KTsKICAgICAKQEAgLTcxLDgg
KzY5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CiAg
ICAgCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFz
aFNldDxLVVJMPiYpIGNvbnN0OwotICAgIAotcHJvdGVjdGVkOgorCiAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX2xpbmtEZWNsOwogfTsKIApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEJ1dHRvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1M
QnV0dG9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0Nyw2IEBAIEhUTUxC
dXR0b25FbGVtZW50OjpIVE1MQnV0dG9uRWxlbWVudChjb24KICAgICBBU1NFUlQoaGFzVGFnTmFt
ZShidXR0b25UYWcpKTsKIH0KIAotSFRNTEJ1dHRvbkVsZW1lbnQ6On5IVE1MQnV0dG9uRWxlbWVu
dCgpCi17Ci19Ci0KIFJlbmRlck9iamVjdCogSFRNTEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQogewogICAgIHJldHVybiBuZXcg
KGFyZW5hKSBSZW5kZXJCdXR0b24odGhpcyk7CkBAIC0xNzIsMjIgKzE2OCwyMiBAQCB2b2lkIEhU
TUxCdXR0b25FbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oCiAgICAgZGlzcGF0Y2hTaW11bGF0ZWRD
bGljaygwLCBzZW5kVG9BbnlFbGVtZW50KTsKIH0KIAotU3RyaW5nIEhUTUxCdXR0b25FbGVtZW50
OjphY2Nlc3NLZXkoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MQnV0dG9uRWxlbWVu
dDo6YWNjZXNzS2V5KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFjY2Vzc2tl
eUF0dHIpOwogfQogCi12b2lkIEhUTUxCdXR0b25FbGVtZW50OjpzZXRBY2Nlc3NLZXkoY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEJ1dHRvbkVsZW1lbnQ6OnNldEFjY2Vzc0tleShjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRy
LCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MQnV0dG9uRWxlbWVudDo6dmFsdWUoKSBjb25zdAor
Y29uc3QgQXRvbWljU3RyaW5nJiBIVE1MQnV0dG9uRWxlbWVudDo6dmFsdWUoKSBjb25zdAogewog
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKIH0KIAotdm9pZCBIVE1MQnV0dG9u
RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEJ1dHRvbkVs
ZW1lbnQ6OnNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0
cmlidXRlKHZhbHVlQXR0ciwgdmFsdWUpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCdXR0
b25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50
LmgJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSwxMCArMzEsMTggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgSFRNTEJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxl
bWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTEJ1dHRvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwotICAgIHZpcnR1YWwgfkhUTUxC
dXR0b25FbGVtZW50KCk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgp
IGNvbnN0OwogICAgICAgICAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjY2Vzc0tleSgpIGNv
bnN0OworICAgIHZvaWQgc2V0QWNjZXNzS2V5KGNvbnN0IEF0b21pY1N0cmluZyYpOworCisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VmFsdWUoY29u
c3QgQXRvbWljU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBSZW5kZXJP
YmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKQEAg
LTUxLDE1ICs1OSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5TdGFydFNlbGVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBTdHJpbmcgYWNjZXNzS2V5KCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRBY2Nlc3NLZXkoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJp
bmcgdmFsdWUoKSBjb25zdDsKLSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgCi1wcml2YXRlOgogICAgIGVudW0gVHlwZSB7IFNVQk1JVCwgUkVTRVQsIEJVVFRPTiB9Owog
CiAgICAgVHlwZSBtX3R5cGU7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERMaXN0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxETGlzdEVsZW1lbnQuY3BwCShyZXZp
c2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRExpc3RFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8qKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICoKQEAgLTE4LDYgKzE4LDcgQEAKICAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSFRNTERMaXN0RWxlbWVudC5oIgogCkBAIC0yNyw4ICsyOCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTERMaXN0RWxl
bWVudDo6SFRNTERMaXN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorSFRNTERMaXN0RWxl
bWVudDo6SFRNTERMaXN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKIHsK
ICAgICBBU1NFUlQoaGFzVGFnTmFtZShkbFRhZykpOwogfQpAQCAtNDAsNyArNDEsNyBAQCBib29s
IEhUTUxETGlzdEVsZW1lbnQ6OmNvbXBhY3QoKSBjb25zdAogCiB2b2lkIEhUTUxETGlzdEVsZW1l
bnQ6OnNldENvbXBhY3QoYm9vbCBiKQogewotICAgIHNldEF0dHJpYnV0ZShjb21wYWN0QXR0ciwg
YiA/ICIiIDogMCk7CisgICAgc2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyLCBiID8gZW1wdHlBdG9t
IDogbnVsbEF0b20pOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERpcmVjdG9yeUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRGlyZWN0b3J5RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxEaXJlY3RvcnlFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8qKgorLyoKICAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICoKQEAgLTE4LDYgKzE4
LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLworCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTERpcmVjdG9yeUVsZW1lbnQuaCIKIApAQCAtNDAs
NyArNDEsNyBAQCBib29sIEhUTUxEaXJlY3RvcnlFbGVtZW50Ojpjb21wYWN0KCkgY29uCiAKIHZv
aWQgSFRNTERpcmVjdG9yeUVsZW1lbnQ6OnNldENvbXBhY3QoYm9vbCBiKQogewotICAgIHNldEF0
dHJpYnV0ZShjb21wYWN0QXR0ciwgYiA/ICIiIDogMCk7CisgICAgc2V0QXR0cmlidXRlKGNvbXBh
Y3RBdHRyLCBiID8gZW1wdHlBdG9tIDogbnVsbEF0b20pOwogfQogCiB9CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTERpdkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
RGl2RWxlbWVudC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxEaXZF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDYgQEAgSFRNTERpdkVsZW1l
bnQ6OkhUTUxEaXZFbGVtZW50KGNvbnN0IFF1YQogICAgIEFTU0VSVChoYXNUYWdOYW1lKGRpdlRh
ZykpOwogfQogCi1IVE1MRGl2RWxlbWVudDo6fkhUTUxEaXZFbGVtZW50KCkKLXsKLX0KLQogYm9v
bCBIVE1MRGl2RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ck5h
bWUgPT0gYWxpZ25BdHRyKSB7CkBAIC02NSwxMiArNjEsMTIgQEAgdm9pZCBIVE1MRGl2RWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dAogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CiB9CiAKLVN0cmluZyBIVE1MRGl2RWxlbWVudDo6YWxpZ24oKSBjb25z
dAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRGl2RWxlbWVudDo6YWxpZ24oKSBjb25zdAogewog
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKIH0KIAotdm9pZCBIVE1MRGl2RWxl
bWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTERpdkVsZW1lbnQ6
OnNldEFsaWduKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRl
KGFsaWduQXR0ciwgdmFsdWUpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEaXZFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEaXZFbGVtZW50LmgJKHJldmlzaW9u
IDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxEaXZFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDE2ICsyOSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MRGl2RWxl
bWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTERpdkVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxEaXZFbGVtZW50KCk7
CiAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFsaWduKCkgY29uc3Q7CisgICAgdm9pZCBzZXRB
bGlnbihjb25zdCBBdG9taWNTdHJpbmcmKTsKKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1
aXJlZDsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsg
fQogCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTUzLDE4ICs1MywxNCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
dXNpbmcgc3RkOjptaW47CiB1c2luZyBzdGQ6Om1heDsKIAotSFRNTEVsZW1lbnQ6OkhUTUxFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi0gICAgOiBT
dHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykKLXsKLX0KLQotSFRNTEVsZW1lbnQ6On5IVE1MRWxl
bWVudCgpCitIVE1MRWxlbWVudDo6SFRNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkKIHsKIH0KIAogU3RyaW5nIEhUTUxFbGVtZW50Ojpub2RlTmFtZSgpIGNvbnN0CiB7
Ci0gICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhbiBhdG9taWNzdHJpbmcgbG9v
a3VwIGJhc2VkIG9mZiB1cHBlcmNhc2UgY2hhcnMgdGhhdCBkb2VzIG5vdCBoYXZlIHRvIGNvcHkK
KyAgICAvLyBGSVhNRTogV291bGQgYmUgbmljZSB0byBoYXZlIGFuIEF0b21pY1N0cmluZyBsb29r
dXAgYmFzZWQgb2ZmIHVwcGVyY2FzZSBjaGFycyB0aGF0IGRvZXMgbm90IGhhdmUgdG8gY29weQog
ICAgIC8vIHRoZSBzdHJpbmcgb24gYSBoaXQgaW4gdGhlIGhhc2guCiAgICAgaWYgKGRvY3VtZW50
KCktPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiB0YWdRTmFtZSgpLmxvY2FsTmFt
ZSgpLnN0cmluZygpLnVwcGVyKCk7CkBAIC02NzYsMTMgKzY3MiwxMiBAQCB2b2lkIEhUTUxFbGVt
ZW50OjpzZXRDb250ZW50RWRpdGFibGUoTWFwCiAgICAgfQogfQogCi12b2lkIEhUTUxFbGVtZW50
OjpzZXRDb250ZW50RWRpdGFibGUoY29uc3QgU3RyaW5nICZlbmFibGVkKQordm9pZCBIVE1MRWxl
bWVudDo6c2V0Q29udGVudEVkaXRhYmxlKGNvbnN0IFN0cmluZyYgZW5hYmxlZCkKIHsKICAgICBp
ZiAoZW5hYmxlZCA9PSAiaW5oZXJpdCIpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAg
ICAgICAgcmVtb3ZlQXR0cmlidXRlKGNvbnRlbnRlZGl0YWJsZUF0dHIsIGVjKTsKLSAgICB9Ci0g
ICAgZWxzZQorICAgIH0gZWxzZQogICAgICAgICBzZXRBdHRyaWJ1dGUoY29udGVudGVkaXRhYmxl
QXR0ciwgZW5hYmxlZC5pc0VtcHR5KCkgPyAidHJ1ZSIgOiBlbmFibGVkKTsKIH0KIApAQCAtNzA0
LDEyICs2OTksMTIgQEAgdm9pZCBIVE1MRWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgcwog
ICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKDAsIHRydWUpOwogfQogCi1TdHJpbmcgSFRN
TEVsZW1lbnQ6OmlkKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEVsZW1lbnQ6Omlk
KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGlkQXR0cik7CiB9CiAKLXZvaWQg
SFRNTEVsZW1lbnQ6OnNldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEhUTUxFbGVtZW50
OjpzZXRJZChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShp
ZEF0dHIsIHZhbHVlKTsKIH0KQEAgLTcxOSwzNyArNzE0LDM3IEBAIFN0cmluZyBIVE1MRWxlbWVu
dDo6dGl0bGUoKSBjb25zdAogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKIH0K
IAotdm9pZCBIVE1MRWxlbWVudDo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQg
SFRNTEVsZW1lbnQ6OnNldFRpdGxlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAg
c2V0QXR0cmlidXRlKHRpdGxlQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTEVsZW1lbnQ6
OmxhbmcoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRWxlbWVudDo6bGFuZygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShsYW5nQXR0cik7CiB9CiAKLXZvaWQgSFRN
TEVsZW1lbnQ6OnNldExhbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTEVsZW1lbnQ6
OnNldExhbmcoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUo
bGFuZ0F0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxFbGVtZW50OjpkaXIoKSBjb25zdAor
Y29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRWxlbWVudDo6ZGlyKCkgY29uc3QKIHsKICAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKGRpckF0dHIpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpzZXREaXIo
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNldERpcihjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShkaXJBdHRyLCB2YWx1ZSk7CiB9
CiAKLVN0cmluZyBIVE1MRWxlbWVudDo6Y2xhc3NOYW1lKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0
cmluZyYgSFRNTEVsZW1lbnQ6OmNsYXNzTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShjbGFzc0F0dHIpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpzZXRDbGFzc05hbWUo
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNldENsYXNzTmFtZShjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShjbGFzc0F0dHIsIHZh
bHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM2LDI3
ICszNiwxOSBAQCBlbnVtIEhUTUxUYWdTdGF0dXMgeyBUYWdTdGF0dXNPcHRpb25hbCwgCiBjbGFz
cyBIVE1MRWxlbWVudCA6IHB1YmxpYyBTdHlsZWRFbGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1M
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwotICAgIHZp
cnR1YWwgfkhUTUxFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCiAgICAg
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY2hpbGRyZW4oKTsKICAgICAKLSAgICBTdHJpbmcg
aWQoKSBjb25zdDsKLSAgICB2b2lkIHNldElkKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgaWQoKSBjb25zdDsKKyAgICB2b2lkIHNldElkKGNvbnN0IEF0b21pY1N0cmlu
ZyYpOwogICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUaXRs
ZShjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgbGFuZygpIGNvbnN0OwotICAgIHZvaWQgc2V0
TGFuZyhjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgZGlyKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXREaXIoY29uc3QgU3RyaW5nJik7Ci0gICAgU3RyaW5nIGNsYXNzTmFtZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0VGl0bGUoY29u
c3QgQXRvbWljU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsYW5nKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRMYW5nKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgZGlyKCkgY29uc3Q7CisgICAgdm9pZCBzZXREaXIoY29uc3QgQXRvbWljU3RyaW5n
Jik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUoKSBjb25zdDsKKyAgICB2b2lk
IHNldENsYXNzTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHNob3J0IHRh
YkluZGV4KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUYWJJbmRleChpbnQpOwogCkBAIC03MiwxMiAr
NjQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0QWRqYWNlbnRIVE1MKGNvbnN0IFN0cmlu
ZyYgd2hlcmUsIGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQg
aW5zZXJ0QWRqYWNlbnRUZXh0KGNvbnN0IFN0cmluZyYgd2hlcmUsIGNvbnN0IFN0cmluZyYgdGV4
dCwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBT
dHJpbmcgY29udGVudEVkaXRhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRFZGl0YWJsZShNYXBwZWRBdHRyaWJ1dGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVu
dEVkaXRhYmxlKGNvbnN0IFN0cmluZyYpOworCisgICAgU3RyaW5nIGNvbnRlbnRFZGl0YWJsZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudEVkaXRhYmxlKGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgdm9pZCBjbGljaygpOwogCkBAIC04NywxNCArNzgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2Vk
KE5vZGUqIG5ld0NoaWxkKTsgLy8gRXJyb3ItY2hlY2tpbmcgZHVyaW5nIHBhcnNpbmcgdGhhdCBj
aGVja3MgdGhlIERURAogCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBEVEQg
Zm9yIGEgZ2l2ZW4gY2hpbGQgbm9kZS4KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3Qg
Tm9kZSopOwotICAgIHN0YXRpYyBib29sIGluRWl0aGVyVGFnTGlzdChjb25zdCBOb2RlKik7Ci0g
ICAgc3RhdGljIGJvb2wgaW5JbmxpbmVUYWdMaXN0KGNvbnN0IE5vZGUqKTsKLSAgICBzdGF0aWMg
Ym9vbCBpbkJsb2NrVGFnTGlzdChjb25zdCBOb2RlKik7Ci0gICAgc3RhdGljIGJvb2wgaXNSZWNv
Z25pemVkVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAKICAgICBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0oKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsRm9ybSgpOyB9CkBAIC0x
MDMsMTEgKzg2LDI4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhZGRIVE1MQWxpZ25tZW50
VG9TdHlsZWRFbGVtZW50KFN0eWxlZEVsZW1lbnQqLCBNYXBwZWRBdHRyaWJ1dGUqKTsKIAogcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAgdmly
dHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHJlbmRlcmVy
SXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVj
ayB0aGUgRFREIGZvciBhIGdpdmVuIGNoaWxkIG5vZGUuCisgICAgdmlydHVhbCBib29sIGNoZWNr
RFREKGNvbnN0IE5vZGUqKTsKKworICAgIHN0YXRpYyBib29sIGluRWl0aGVyVGFnTGlzdChjb25z
dCBOb2RlKik7CisgICAgc3RhdGljIGJvb2wgaW5JbmxpbmVUYWdMaXN0KGNvbnN0IE5vZGUqKTsK
KyAgICBzdGF0aWMgYm9vbCBpbkJsb2NrVGFnTGlzdChjb25zdCBOb2RlKik7CisgICAgc3RhdGlj
IGJvb2wgaXNSZWNvZ25pemVkVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJik7CisKICAgICB2
b2lkIGFkZEhUTUxBbGlnbm1lbnQoTWFwcGVkQXR0cmlidXRlKik7CiAKIHByaXZhdGU6CisgICAg
dmlydHVhbCBib29sIGlzSFRNTEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIEhUTUxGb3JtRWxl
bWVudCogdmlydHVhbEZvcm0oKSBjb25zdDsKKwogICAgIE5vZGUqIGluc2VydEFkamFjZW50KGNv
bnN0IFN0cmluZyYgd2hlcmUsIE5vZGUqIG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCBzZXRDb250ZW50RWRpdGFibGUoTWFwcGVkQXR0cmlidXRlKik7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCShyZXZpc2lv
biA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsMTAgKzQ3LDYgQEAgSFRNTEVtYmVkRWxlbWVudDo6SFRNTEVtYmVkRWxlbWVu
dChjb25zdAogICAgIEFTU0VSVChoYXNUYWdOYW1lKGVtYmVkVGFnKSk7CiB9CiAKLUhUTUxFbWJl
ZEVsZW1lbnQ6On5IVE1MRW1iZWRFbGVtZW50KCkKLXsKLX0KLQogc3RhdGljIGlubGluZSBSZW5k
ZXJXaWRnZXQqIGZpbmRXaWRnZXRSZW5kZXJlcihjb25zdCBOb2RlKiBuKSAKIHsKICAgICBpZiAo
IW4tPnJlbmRlcmVyKCkpCkBAIC0yMjgsMjIgKzIyNCwyMiBAQCBjb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MRW1iZWRFbGVtZW50OjppCiAgICAgcmV0dXJuIHNyY0F0dHI7CiB9CiAKLVN0cmluZyBI
VE1MRW1iZWRFbGVtZW50OjpzcmMoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRW1i
ZWRFbGVtZW50OjpzcmMoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc3JjQXR0
cik7CiB9CiAKLXZvaWQgSFRNTEVtYmVkRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYgdmFs
dWUpCit2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnNldFNyYyhjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKQogewogICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBI
VE1MRW1iZWRFbGVtZW50Ojp0eXBlKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEVt
YmVkRWxlbWVudDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBl
QXR0cik7CiB9CiAKLXZvaWQgSFRNTEVtYmVkRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcm
IHZhbHVlKQordm9pZCBIVE1MRW1iZWRFbGVtZW50OjpzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7CiB9CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MRW1iZWRFbGVtZW50LmgJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1s
L0hUTUxFbWJlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCw4ICszMCwxNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MRW1iZWRFbGVtZW50IDogcHVibGljIEhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxFbWJlZEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxFbWJlZEVsZW1lbnQoKTsKIAor
ICAgIHZvaWQgc2V0TmVlZFdpZGdldFVwZGF0ZShib29sIG5lZWRXaWRnZXRVcGRhdGUpIHsgbV9u
ZWVkV2lkZ2V0VXBkYXRlID0gbmVlZFdpZGdldFVwZGF0ZTsgfQorCisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBzcmMoKSBjb25zdDsKKyAgICB2b2lkIHNldFNyYyhjb25zdCBBdG9taWNTdHJpbmcm
KTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OworICAgIHZvaWQgc2V0
VHlwZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3Ji
aWRkZW47IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KIApAQCAtNTAsMTkgKzU4LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpIGNvbnN0OwogCiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVdpZGdldCgpOwotICAgIHZvaWQgc2V0TmVlZFdpZGdldFVwZGF0ZShib29s
IG5lZWRXaWRnZXRVcGRhdGUpIHsgbV9uZWVkV2lkZ2V0VXBkYXRlID0gbmVlZFdpZGdldFVwZGF0
ZTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGlu
Z3MoKSBjb25zdDsKIAotICAgIFN0cmluZyBzcmMoKSBjb25zdDsKLSAgICB2b2lkIHNldFNyYyhj
b25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRU
eXBlKGNvbnN0IFN0cmluZyYpOwotCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0
cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCi1wcml2YXRlOgogICAgIGJv
b2wgbV9uZWVkV2lkZ2V0VXBkYXRlOwogfTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb250
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5j
cHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCBib29sIEhUTUxGb250RWxlbWVudDo6
Y3NzVmFsdWVGcm9tRm9udFNpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSFRNTEZvbnRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lk
IEhUTUxGb250RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBh
dHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gc2l6ZUF0dHIpIHsKICAgICAgICAgaW50
IHNpemU7CkBAIC0xNDMsMzIgKzE0MywzMiBAQCB2b2lkIEhUTUxGb250RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1CiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKIH0KIAotU3RyaW5nIEhUTUxGb250RWxlbWVudDo6Y29sb3IoKSBjb25zdAorY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MRm9udEVsZW1lbnQ6OmNvbG9yKCkgY29uc3QKIHsKICAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKGNvbG9yQXR0cik7CiB9CiAKLXZvaWQgSFRNTEZvbnRFbGVtZW50Ojpz
ZXRDb2xvcihjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MRm9udEVsZW1lbnQ6OnNldENv
bG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGNvbG9y
QXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTEZvbnRFbGVtZW50OjpmYWNlKCkgY29uc3QK
K2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEZvbnRFbGVtZW50OjpmYWNlKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKGZhY2VBdHRyKTsKIH0KIAotdm9pZCBIVE1MRm9udEVsZW1l
bnQ6OnNldEZhY2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTEZvbnRFbGVtZW50Ojpz
ZXRGYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGZh
Y2VBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MRm9udEVsZW1lbnQ6OnNpemUoKSBjb25z
dAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRm9udEVsZW1lbnQ6OnNpemUoKSBjb25zdAogewog
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc2l6ZUF0dHIpOwogfQogCi12b2lkIEhUTUxGb250RWxl
bWVudDo6c2V0U2l6ZShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MRm9udEVsZW1lbnQ6
OnNldFNpemUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUo
c2l6ZUF0dHIsIHZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmgJKHJldmlzaW9u
IDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOSw2ICsxOSw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAg
Ki8KKwogI2lmbmRlZiBIVE1MRm9udEVsZW1lbnRfaAogI2RlZmluZSBIVE1MRm9udEVsZW1lbnRf
aAogCkBAIC0zMCwyMiArMzEsMjMgQEAgY2xhc3MgSFRNTEZvbnRFbGVtZW50IDogcHVibGljIEhU
TUxFbGVtZQogcHVibGljOgogICAgIEhUTUxGb250RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKICAgICAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbG9yKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRDb2xvcihjb25zdCBBdG9taWNTdHJpbmcmKTsKKworICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgZmFjZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RmFjZShjb25zdCBBdG9t
aWNTdHJpbmcmKTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2l6ZSgpIGNvbnN0OworICAg
IHZvaWQgc2V0U2l6ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKworICAgIHN0YXRpYyBib29sIGNz
c1ZhbHVlRnJvbUZvbnRTaXplTnVtYmVyKGNvbnN0IFN0cmluZyYsIGludCYpOworCitwcml2YXRl
OgogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiAxOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25z
dCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICBT
dHJpbmcgY29sb3IoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbG9yKGNvbnN0IFN0cmluZyYpOwot
Ci0gICAgU3RyaW5nIGZhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldEZhY2UoY29uc3QgU3RyaW5n
Jik7Ci0KLSAgICBTdHJpbmcgc2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBT
dHJpbmcmKTsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBjc3NWYWx1ZUZyb21Gb250U2l6ZU51bWJl
cihjb25zdCBTdHJpbmcmLCBpbnQmKTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTM3LDkgKzM3LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAog
aW5saW5lIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyogSFRNTEZvcm1Db2xsZWN0aW9u
Ojpmb3JtQ29sbGVjdGlvbkluZm8oSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogewotICAgIGlmICgh
Zm9ybS0+Y29sbGVjdGlvbkluZm8pCi0gICAgICAgIGZvcm0tPmNvbGxlY3Rpb25JbmZvID0gbmV3
IENvbGxlY3Rpb25JbmZvOwotICAgIHJldHVybiBmb3JtLT5jb2xsZWN0aW9uSW5mbzsKKyAgICBp
ZiAoIWZvcm0tPm1fY29sbGVjdGlvbkluZm8pCisgICAgICAgIGZvcm0tPm1fY29sbGVjdGlvbklu
Zm8uc2V0KG5ldyBDb2xsZWN0aW9uSW5mbyk7CisgICAgcmV0dXJuIGZvcm0tPm1fY29sbGVjdGlv
bkluZm8uZ2V0KCk7CiB9CiAKIEhUTUxGb3JtQ29sbGVjdGlvbjo6SFRNTEZvcm1Db2xsZWN0aW9u
KFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtKQpAQCAtNzcsNyArNzcsNyBAQCBOb2Rl
KiBIVE1MRm9ybUNvbGxlY3Rpb246Oml0ZW0odW5zaWduZWQgCiAgICAgICAgIGluZm8oKS0+ZWxl
bWVudHNBcnJheVBvc2l0aW9uID0gMDsKICAgICB9CiAKLSAgICBWZWN0b3I8SFRNTEZvcm1Db250
cm9sRWxlbWVudCo+JiBsID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYmFzZSgpKS0+
Zm9ybUVsZW1lbnRzOworICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4m
IGwgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihiYXNlKCkpLT5mb3JtQ29udHJvbEVs
ZW1lbnRzKCk7CiAgICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gaW5mbygpLT5wb3NpdGlvbjsK
ICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmZvKCktPmVsZW1lbnRzQXJyYXlQb3NpdGlv
bjsgaSA8IGwuc2l6ZSgpOyBpKyspIHsKQEAgLTg4LDcgKzg4LDYgQEAgTm9kZSogSFRNTEZvcm1D
b2xsZWN0aW9uOjppdGVtKHVuc2lnbmVkIAogICAgICAgICAgICAgICAgIGluZm8oKS0+ZWxlbWVu
dHNBcnJheVBvc2l0aW9uID0gaTsKICAgICAgICAgICAgICAgICByZXR1cm4gbFtpXTsKICAgICAg
ICAgICAgIH0KLQogICAgICAgICAgICAgY3VycmVudEluZGV4Kys7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMDcsOCArMTA2LDggQEAgRWxlbWVudCogSFRNTEZvcm1Db2xsZWN0aW9uOjpnZXROYW1l
ZEZvcgogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxl
bWVudCo+KGJhc2UoKSk7CiAKICAgICBib29sIGZvdW5kSW5wdXRFbGVtZW50cyA9IGZhbHNlOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtLT5mb3JtRWxlbWVudHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZSA9IGZvcm0tPmZvcm1FbGVt
ZW50c1tpXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+Zm9ybUNvbnRyb2xF
bGVtZW50cygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
IGUgPSBmb3JtLT5mb3JtQ29udHJvbEVsZW1lbnRzKClbaV07CiAgICAgICAgIGlmIChlLT5pc0Vu
dW1lcmF0YWJsZSgpICYmIGUtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgewogICAg
ICAgICAgICAgZm91bmRJbnB1dEVsZW1lbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICghZHVw
bGljYXRlTnVtYmVyKQpAQCAtMTE4LDggKzExNyw4IEBAIEVsZW1lbnQqIEhUTUxGb3JtQ29sbGVj
dGlvbjo6Z2V0TmFtZWRGb3IKICAgICB9CiAKICAgICBpZiAoIWZvdW5kSW5wdXRFbGVtZW50cykg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybS0+aW1nRWxlbWVudHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGUgPSBmb3JtLT5pbWdF
bGVtZW50c1tpXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPm1faW1h
Z2VFbGVtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCog
ZSA9IGZvcm0tPm1faW1hZ2VFbGVtZW50c1tpXTsKICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRy
aWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpIHsKICAgICAgICAgICAgICAgICBpZiAoIWR1cGxpY2F0
ZU51bWJlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7CkBAIC0xODcsOCArMTg2LDgg
QEAgdm9pZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogCiAgICAgSFRNTEZv
cm1FbGVtZW50KiBmID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4oYmFzZSgpKTsKIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5mb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZSA9IGYtPmZvcm1FbGVtZW50c1tp
XTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+Zm9ybUNvbnRyb2xFbGVtZW50cygp
LnNpemUoKTsgKytpKSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGUgPSBmLT5m
b3JtQ29udHJvbEVsZW1lbnRzKClbaV07CiAgICAgICAgIGlmIChlLT5pc0VudW1lcmF0YWJsZSgp
KSB7CiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0
dHJpYnV0ZShpZEF0dHIpOwogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0
clZhbCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CkBAIC0yMTUsOCArMjE0LDggQEAgdm9p
ZCBIVE1MRm9ybUNvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmltZ0VsZW1lbnRzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGUgPSBmLT5pbWdFbGVtZW50c1tpXTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+bV9pbWFnZUVsZW1lbnRzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGUgPSBmLT5tX2ltYWdlRWxlbWVudHNbaV07
CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRl
KGlkQXR0cik7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlLT5n
ZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkg
JiYgIWZvdW5kSW5wdXRFbGVtZW50cy5jb250YWlucyhpZEF0dHJWYWwuaW1wbCgpKSkgewpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDI4OTMp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NCwxMiArMTc0LDEyIEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGlz
YWJsZWQoKSAKIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXREaXNhYmxlZChib29s
IGIpCiB7Ci0gICAgc2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwgYiA/ICIiIDogMCk7CisgICAg
c2V0QXR0cmlidXRlKGRpc2FibGVkQXR0ciwgYiA/IGVtcHR5QXRvbSA6IG51bGxBdG9tKTsKIH0K
IAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRSZWFkT25seShib29sIGIpCiB7Ci0g
ICAgc2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0ciwgYiA/ICIiIDogMCk7CisgICAgc2V0QXR0cmli
dXRlKHJlYWRvbmx5QXR0ciwgYiA/IGVtcHR5QXRvbSA6IG51bGxBdG9tKTsKIH0KIAogYm9vbCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdXRvZm9jdXMoKSBjb25zdApAQCAtMTg5LDcgKzE4OSw3
IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXV0b2ZvY3VzKCkKIAogdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRBdXRvZm9jdXMoYm9vbCBiKQogewotICAgIHNldEF0dHJp
YnV0ZShhdXRvZm9jdXNBdHRyLCBiID8gImF1dG9mb2N1cyIgOiAwKTsKKyAgICBzZXRBdHRyaWJ1
dGUoYXV0b2ZvY3VzQXR0ciwgYiA/ICJhdXRvZm9jdXMiIDogbnVsbEF0b20pOwogfQogCiB2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCArNzMs
OCBAQCBzdGF0aWMgaW50NjRfdCBnZW5lcmF0ZUZvcm1EYXRhSWRlbnRpZmllCiAgICAgcmV0dXJu
ICsrbmV4dElkZW50aWZpZXI7CiB9CiAKLUhUTUxGb3JtRWxlbWVudDo6SFRNTEZvcm1FbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1M
RWxlbWVudCh0YWdOYW1lLCBkb2MpCi0gICAgLCBtX2VsZW1lbnRBbGlhc2VzKDApCi0gICAgLCBj
b2xsZWN0aW9uSW5mbygwKQorSFRNTEZvcm1FbGVtZW50OjpIVE1MRm9ybUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX2F1dG9jb21wbGV0ZSh0cnVlKQogICAg
ICwgbV9pbnN1Ym1pdChmYWxzZSkKICAgICAsIG1fZG9pbmdzdWJtaXQoZmFsc2UpCkBAIC05Miwy
MyArOTAsMTAgQEAgSFRNTEZvcm1FbGVtZW50Ojp+SFRNTEZvcm1FbGVtZW50KCkKICAgICBpZiAo
IW1fYXV0b2NvbXBsZXRlKQogICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyRm9yRG9jdW1l
bnRBY3RpdmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwogCi0gICAgZGVsZXRlIG1fZWxlbWVudEFsaWFz
ZXM7Ci0gICAgZGVsZXRlIGNvbGxlY3Rpb25JbmZvOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgZm9ybUVsZW1lbnRzW2ld
LT5mb3JtRGVzdHJveWVkKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGltZ0VsZW1l
bnRzLnNpemUoKTsgKytpKQotICAgICAgICBpbWdFbGVtZW50c1tpXS0+bV9mb3JtID0gMDsKLX0K
LQotYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1Xb3VsZEhhdmVTZWN1cmVTdWJtaXNzaW9uKGNv
bnN0IFN0cmluZyYgdXJsKQotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1
cmwpLnByb3RvY29sSXMoImh0dHBzIik7Ci19Ci0KLXZvaWQgSFRNTEZvcm1FbGVtZW50OjphdHRh
Y2goKQotewotICAgIEhUTUxFbGVtZW50OjphdHRhY2goKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9mb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZm9ybUVsZW1l
bnRzW2ldLT5mb3JtRGVzdHJveWVkKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
aW1hZ2VFbGVtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9pbWFnZUVsZW1lbnRzW2ldLT5t
X2Zvcm0gPSAwOwogfQogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChS
ZW5kZXJTdHlsZSogc3R5bGUpCkBAIC0xNjQsMTIgKzE0OSwxMCBAQCB2b2lkIEhUTUxGb3JtRWxl
bWVudDo6aGFuZGxlTG9jYWxFdmVudHMoCiAKIHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6bGVu
Z3RoKCkgY29uc3QKIHsKLSAgICBpbnQgbGVuID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICBpZiAoZm9ybUVsZW1lbnRz
W2ldLT5pc0VudW1lcmF0YWJsZSgpKQotICAgICAgICAgICAgKytsZW47Ci0KLSAgICByZXR1cm4g
bGVuOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICBsZW5ndGggKz0gbV9mb3Jt
RWxlbWVudHNbaV0tPmlzRW51bWVyYXRhYmxlKCk7CisgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAog
Tm9kZSogSFRNTEZvcm1FbGVtZW50OjppdGVtKHVuc2lnbmVkIGluZGV4KQpAQCAtMTgwLDkgKzE2
Myw5IEBAIE5vZGUqIEhUTUxGb3JtRWxlbWVudDo6aXRlbSh1bnNpZ25lZCBpbmQKIHZvaWQgSFRN
TEZvcm1FbGVtZW50OjpzdWJtaXRDbGljayhFdmVudCogZXZlbnQpCiB7CiAgICAgYm9vbCBzdWJt
aXRGb3VuZCA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVu
dHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGZvcm1FbGVtZW50c1tpXS0+aGFzTG9jYWxO
YW1lKGlucHV0VGFnKSkgewotICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudHNbaV0pOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Zvcm1FbGVtZW50cy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAobV9mb3JtRWxlbWVudHNbaV0tPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKKyAg
ICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4obV9mb3JtRWxlbWVudHNbaV0pOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQt
PmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAg
ICAgICAgICAgICAgICBzdWJtaXRGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZWxlbWVu
dC0+ZGlzcGF0Y2hTaW11bGF0ZWRDbGljayhldmVudCk7CkBAIC0yMDksOCArMTkyLDggQEAgUGFz
c1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50OjpjcgogCiAgICAgUmVmUHRyPEZvcm1E
YXRhPiByZXN1bHQgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtRWxlbWVudHNbaV07CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBtX2Zvcm1FbGVtZW50c1tpXTsKICAgICAgICAg
Rm9ybURhdGFMaXN0IGxpc3QoZW5jb2RpbmcpOwogCiAgICAgICAgIGlmICghY29udHJvbC0+ZGlz
YWJsZWQoKSAmJiBjb250cm9sLT5hcHBlbmRGb3JtRGF0YShsaXN0LCBtX2Zvcm1EYXRhQnVpbGRl
ci5pc011bHRpUGFydEZvcm0oKSkpIHsKQEAgLTI4Niw3ICsyNjksNyBAQCBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBIVE1MRm9ybUVsZW1lbnQ6OmNyCiAKIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojppc01h
aWx0b0Zvcm0oKSBjb25zdAogewotICAgIHJldHVybiBwcm90b2NvbElzKG1fdXJsLCAibWFpbHRv
Iik7CisgICAgcmV0dXJuIHByb3RvY29sSXMoZ2V0QXR0cmlidXRlKGFjdGlvbkF0dHIpLCAibWFp
bHRvIik7CiB9CiAKIGJvb2wgSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KEV2ZW50KiBl
dmVudCkKQEAgLTM1MCw4ICszMzMsOCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KEV2
ZW50KiBldmVuCiAgICAgCiAgICAgVmVjdG9yPHBhaXI8U3RyaW5nLCBTdHJpbmc+ID4gZm9ybVZh
bHVlczsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9IGZvcm1F
bGVtZW50c1tpXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mb3JtRWxlbWVudHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9
IG1fZm9ybUVsZW1lbnRzW2ldOwogICAgICAgICBpZiAoY29udHJvbC0+aGFzTG9jYWxOYW1lKGlu
cHV0VGFnKSkgewogICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oY29udHJvbCk7CiAgICAgICAgICAgICBpZiAoaW5wdXQt
PmlzVGV4dEZpZWxkKCkpIHsKQEAgLTM3Myw4ICszNTYsOSBAQCB2b2lkIEhUTUxGb3JtRWxlbWVu
dDo6c3VibWl0KEV2ZW50KiBldmVuCiAgICAgaWYgKG5lZWRCdXR0b25BY3RpdmF0aW9uICYmIGZp
cnN0U3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbikKICAgICAgICAgZmlyc3RTdWNjZXNzZnVsU3VibWl0
QnV0dG9uLT5zZXRBY3RpdmF0ZWRTdWJtaXQodHJ1ZSk7CiAgICAgCi0gICAgaWYgKG1fdXJsLmlz
RW1wdHkoKSkKLSAgICAgICAgbV91cmwgPSBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKKyAg
ICBTdHJpbmcgdXJsID0gcGFyc2VVUkwoZ2V0QXR0cmlidXRlKGFjdGlvbkF0dHIpKTsKKyAgICBp
ZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgdXJsID0gZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5n
KCk7CiAKICAgICBpZiAobV9mb3JtRGF0YUJ1aWxkZXIuaXNQb3N0TWV0aG9kKCkpIHsKICAgICAg
ICAgaWYgKG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpICYmIGlzTWFpbHRvRm9y
bSgpKSB7CkBAIC0zODcsMTkgKzM3MSwxOSBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0
KEV2ZW50KiBldmVuCiAKICAgICAgICAgICAgIGlmIChpc01haWx0b0Zvcm0oKSkgewogICAgICAg
ICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGZvcm0gZGF0YSBpbnRvIGEgc3RyaW5nIHRoYXQgd2Ug
cHV0IGludG8gdGhlIFVSTC4KLSAgICAgICAgICAgICAgICBLVVJMIHVybCA9IGRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKG1fdXJsKTsKLSAgICAgICAgICAgICAgICB0cmFuc2Zlck1haWx0b1Bvc3RG
b3JtRGF0YVRvVVJMKGRhdGEsIHVybCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCkp
OwotICAgICAgICAgICAgICAgIG1fdXJsID0gdXJsLnN0cmluZygpOworICAgICAgICAgICAgICAg
IEtVUkwgY29tcGxldGVkVVJMID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKTsKKyAgICAg
ICAgICAgICAgICB0cmFuc2Zlck1haWx0b1Bvc3RGb3JtRGF0YVRvVVJMKGRhdGEsIGNvbXBsZXRl
ZFVSTCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCkpOworICAgICAgICAgICAgICAg
IHVybCA9IGNvbXBsZXRlZFVSTC5zdHJpbmcoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwgbV91cmwsIGRhdGEucmVsZWFz
ZSgpLCBtX3RhcmdldCwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIFN0cmluZygp
LCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgZXZlbnQsIGZvcm1TdGF0ZS5yZWxl
YXNlKCkpOworICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJtaXRGb3JtKCJQT1NUIiwg
dXJsLCBkYXRhLnJlbGVhc2UoKSwgZ2V0QXR0cmlidXRlKHRhcmdldEF0dHIpLCBtX2Zvcm1EYXRh
QnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgU3RyaW5nKCksIGxvY2tIaXN0b3J5LCBsb2NrQmFja0Zv
cndhcmRMaXN0LCBldmVudCwgZm9ybVN0YXRlLnJlbGVhc2UoKSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYm91bmRhcnkgPSBtX2Zvcm1EYXRhQnVpbGRlci5n
ZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7Ci0gICAgICAgICAgICBmcmFtZS0+bG9hZGVy
KCktPnN1Ym1pdEZvcm0oIlBPU1QiLCBtX3VybCwgY3JlYXRlRm9ybURhdGEoYm91bmRhcnkuZGF0
YSgpKSwgbV90YXJnZXQsIG1fZm9ybURhdGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpLCBib3VuZGFy
eS5kYXRhKCksIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCBldmVudCwgZm9ybVN0
YXRlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0o
IlBPU1QiLCB1cmwsIGNyZWF0ZUZvcm1EYXRhKGJvdW5kYXJ5LmRhdGEoKSksIGdldEF0dHJpYnV0
ZSh0YXJnZXRBdHRyKSwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCksIGJvdW5kYXJ5
LmRhdGEoKSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIGV2ZW50LCBmb3JtU3Rh
dGUucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fZm9ybURh
dGFCdWlsZGVyLnNldElzTXVsdGlQYXJ0Rm9ybShmYWxzZSk7Ci0gICAgICAgIGZyYW1lLT5sb2Fk
ZXIoKS0+c3VibWl0Rm9ybSgiR0VUIiwgbV91cmwsIGNyZWF0ZUZvcm1EYXRhKENTdHJpbmcoKSks
IG1fdGFyZ2V0LCBTdHJpbmcoKSwgU3RyaW5nKCksIGxvY2tIaXN0b3J5LCBsb2NrQmFja0Zvcndh
cmRMaXN0LCBldmVudCwgZm9ybVN0YXRlLnJlbGVhc2UoKSk7CisgICAgICAgIGZyYW1lLT5sb2Fk
ZXIoKS0+c3VibWl0Rm9ybSgiR0VUIiwgdXJsLCBjcmVhdGVGb3JtRGF0YShDU3RyaW5nKCkpLCBn
ZXRBdHRyaWJ1dGUodGFyZ2V0QXR0ciksIFN0cmluZygpLCBTdHJpbmcoKSwgbG9ja0hpc3Rvcnks
IGxvY2tCYWNrRm9yd2FyZExpc3QsIGV2ZW50LCBmb3JtU3RhdGUucmVsZWFzZSgpKTsKICAgICB9
CiAKICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0
QnV0dG9uKQpAQCAtNDE2LDM1ICs0MDAsMjcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlc2V0
KCkKIAogICAgIG1faW5yZXNldCA9IHRydWU7CiAKLSAgICAvLyAjIyMgRE9NMiBsYWJlbHMgdGhp
cyBldmVudCBhcyBub3QgY2FuY2VsYWJsZSwgaG93ZXZlcgotICAgIC8vIGNvbW1vbiBicm93c2Vy
cyggc2ljayEgKSBhbGxvdyBpdCBiZSBjYW5jZWxsZWQuCi0gICAgaWYgKCAhZGlzcGF0Y2hFdmVu
dChldmVudE5hbWVzKCkucmVzZXRFdmVudCx0cnVlLCB0cnVlKSApIHsKKyAgICAvLyBET00yIGxh
YmVscyB0aGlzIGV2ZW50IGFzIG5vdCBjYW5jZWxhYmxlLCBob3dldmVyIGNvbW1vbiBicm93c2Vy
cyBhbGxvdyBpdCB0byBiZSBjYW5jZWxsZWQuCisgICAgaWYgKCFkaXNwYXRjaEV2ZW50KGV2ZW50
TmFtZXMoKS5yZXNldEV2ZW50LCB0cnVlLCB0cnVlKSkgewogICAgICAgICBtX2lucmVzZXQgPSBm
YWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGZvcm1FbGVtZW50c1tpXS0+
cmVzZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mb3JtRWxlbWVudHMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fZm9ybUVsZW1lbnRzW2ldLT5yZXNldCgpOwogCiAgICAgbV9p
bnJlc2V0ID0gZmFsc2U7CiB9CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBhY3Rpb25BdHRyKQotICAgICAgICBtX3VybCA9IHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpOwot
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0YXJnZXRBdHRyKQotICAgICAgICBtX3Rhcmdl
dCA9IGF0dHItPnZhbHVlKCk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1ldGhvZEF0
dHIpCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBtZXRob2RBdHRyKQogICAgICAgICBtX2Zvcm1E
YXRhQnVpbGRlci5wYXJzZU1ldGhvZFR5cGUoYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGVuY3R5cGVBdHRyKQogICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5w
YXJzZUVuY29kaW5nVHlwZShhdHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gYWNjZXB0X2NoYXJzZXRBdHRyKQotICAgICAgICAvLyBzcGFjZSBzZXBhcmF0ZWQgbGlz
dCBvZiBjaGFyc2V0cyB0aGUgc2VydmVyCi0gICAgICAgIC8vIGFjY2VwdHMgLSBzZWUgcmZjMjA0
NQorICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhY2NlcHRfY2hhcnNldEF0dHIpIHsKKyAg
ICAgICAgLy8gc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcnNldHMgdGhlIHNlcnZlciBhY2Nl
cHRzIC0gc2VlIHJmYzIwNDUKICAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuc2V0QWNjZXB0Q2hh
cnNldChhdHRyLT52YWx1ZSgpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0
QXR0cikgewotICAgICAgICAvLyBpZ25vcmUgdGhpcyBvbmUgZm9yIHRoZSBtb21lbnQuLi4KICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhdXRvY29tcGxldGVBdHRyKSB7CiAgICAgICAg
IG1fYXV0b2NvbXBsZXRlID0gIWVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJvZmYi
KTsKICAgICAgICAgaWYgKCFtX2F1dG9jb21wbGV0ZSkKQEAgLTQ3MCwxMSArNDQ2LDEyIEBAIHZv
aWQgSFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKIHRlbXBsYXRlPGNsYXNzIFQs
IHNpemVfdCBuPiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVmVjdG9yKFZlY3RvcjxUKiwgbj4gJiB2
ZWMsIFQqIGl0ZW0pCiB7CiAgICAgc2l6ZV90IHNpemUgPSB2ZWMuc2l6ZSgpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpICE9IHNpemU7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAh
PSBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKHZlY1tpXSA9PSBpdGVtKSB7CiAgICAgICAgICAg
ICB2ZWMucmVtb3ZlKGkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICB9CiB9
CiAKIHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleChIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBlKQpAQCAtNDk0LDIwICs0NzEsMjAgQEAgdW5zaWduZWQgSFRNTEZvcm1F
bGVtZW50Ojpmb3JtRWxlbWVudEluZAogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgfQog
ICAgIH0KLSAgICByZXR1cm4gZm9ybUVsZW1lbnRzLnNpemUoKTsKKyAgICByZXR1cm4gbV9mb3Jt
RWxlbWVudHMuc2l6ZSgpOwogfQogCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVnaXN0ZXJGb3Jt
RWxlbWVudChIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBlKQogewogICAgIGRvY3VtZW50KCktPmNo
ZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24oZSk7CiAgICAgbV9jaGVja2VkUmFkaW9C
dXR0b25zLmFkZEJ1dHRvbihlKTsKLSAgICBmb3JtRWxlbWVudHMuaW5zZXJ0KGZvcm1FbGVtZW50
SW5kZXgoZSksIGUpOworICAgIG1fZm9ybUVsZW1lbnRzLmluc2VydChmb3JtRWxlbWVudEluZGV4
KGUpLCBlKTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUZvcm1FbGVtZW50KEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIGUpCiB7CiAgICAgbV9jaGVja2VkUmFkaW9CdXR0b25zLnJl
bW92ZUJ1dHRvbihlKTsKLSAgICByZW1vdmVGcm9tVmVjdG9yKGZvcm1FbGVtZW50cywgZSk7Cisg
ICAgcmVtb3ZlRnJvbVZlY3RvcihtX2Zvcm1FbGVtZW50cywgZSk7CiB9CiAKIGJvb2wgSFRNTEZv
cm1FbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CkBAIC01MTcs
MTIgKzQ5NCwxMiBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0CiAK
IHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZWdpc3RlckltZ0VsZW1lbnQoSFRNTEltYWdlRWxlbWVu
dCogZSkKIHsKLSAgICBpbWdFbGVtZW50cy5hcHBlbmQoZSk7CisgICAgbV9pbWFnZUVsZW1lbnRz
LmFwcGVuZChlKTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlbW92ZUltZ0VsZW1lbnQo
SFRNTEltYWdlRWxlbWVudCogZSkKIHsKLSAgICByZW1vdmVGcm9tVmVjdG9yKGltZ0VsZW1lbnRz
LCBlKTsKKyAgICByZW1vdmVGcm9tVmVjdG9yKG1faW1hZ2VFbGVtZW50cywgZSk7CiB9CiAKIFBh
c3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudHMoKQpAQCAt
NTMwLDQyICs1MDcsNDIgQEAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTEZvcm1FbGVt
ZQogICAgIHJldHVybiBIVE1MRm9ybUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzKTsKIH0KIAotU3Ry
aW5nIEhUTUxGb3JtRWxlbWVudDo6bmFtZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhU
TUxGb3JtRWxlbWVudDo6bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShu
YW1lQXR0cik7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXROYW1lKGNvbnN0IFN0cmlu
ZyAmdmFsdWUpCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0TmFtZShjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShuYW1lQXR0ciwgdmFsdWUpOwogfQogCi12
b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0QWNjZXB0Q2hhcnNldChjb25zdCBTdHJpbmcgJnZhbHVl
KQordm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnNldEFjY2VwdENoYXJzZXQoY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoYWNjZXB0X2NoYXJzZXRBdHRyLCB2YWx1
ZSk7CiB9CiAKLVN0cmluZyBIVE1MRm9ybUVsZW1lbnQ6OmFjdGlvbigpIGNvbnN0Citjb25zdCBB
dG9taWNTdHJpbmcmIEhUTUxGb3JtRWxlbWVudDo6YWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKGFjdGlvbkF0dHIpOwogfQogCi12b2lkIEhUTUxGb3JtRWxlbWVudDo6
c2V0QWN0aW9uKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0
QWN0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGFj
dGlvbkF0dHIsIHZhbHVlKTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnNldEVuY3R5cGUo
Y29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRFbmN0eXBlKGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGVuY3R5cGVBdHRy
LCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MRm9ybUVsZW1lbnQ6Om1ldGhvZCgpIGNvbnN0Citj
b25zdCBBdG9taWNTdHJpbmcmIEhUTUxGb3JtRWxlbWVudDo6bWV0aG9kKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKG1ldGhvZEF0dHIpOwogfQogCi12b2lkIEhUTUxGb3JtRWxl
bWVudDo6c2V0TWV0aG9kKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxGb3JtRWxlbWVu
dDo6c2V0TWV0aG9kKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmli
dXRlKG1ldGhvZEF0dHIsIHZhbHVlKTsKIH0KQEAgLTU3NSw3ICs1NTIsNyBAQCBTdHJpbmcgSFRN
TEZvcm1FbGVtZW50Ojp0YXJnZXQoKSBjb25zdAogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFy
Z2V0QXR0cik7CiB9CiAKLXZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRUYXJnZXQoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRUYXJnZXQoY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUodGFyZ2V0QXR0ciwgdmFsdWUpOwog
fQpAQCAtNTkyLDcgKzU2OSw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjphZGRFbGVtZW50QWxp
YXMoSFQKICAgICBpZiAoYWxpYXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYg
KCFtX2VsZW1lbnRBbGlhc2VzKQotICAgICAgICBtX2VsZW1lbnRBbGlhc2VzID0gbmV3IEFsaWFz
TWFwOworICAgICAgICBtX2VsZW1lbnRBbGlhc2VzLnNldChuZXcgQWxpYXNNYXApOwogICAgIG1f
ZWxlbWVudEFsaWFzZXMtPnNldChhbGlhcy5pbXBsKCksIGVsZW1lbnQpOwogfQogCkBAIC02MDUs
NyArNTgyLDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmdldE5hbWVkRWxlbWVudHMoYwogICAg
IGlmIChhbGlhc0VsZW0gPSBlbGVtZW50Rm9yQWxpYXMobmFtZSkpIHsKICAgICAgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgbmFtZWRJdGVt
cy5zaXplKCk7IG4rKykgewotICAgICAgICAgICAgaWYgKG5hbWVkSXRlbXNbbl0gPT0gYWxpYXNF
bGVtLmdldCgpKSB7CisgICAgICAgICAgICBpZiAobmFtZWRJdGVtc1tuXSA9PSBhbGlhc0VsZW0p
IHsKICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CkBAIC02MjMsOCArNjAwLDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6
OmRvY3VtZW50RGlkQmVjb21lQQogewogICAgIEFTU0VSVCghbV9hdXRvY29tcGxldGUpOwogICAg
IAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIGZvcm1FbGVtZW50c1tpXS0+cmVzZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9mb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZm9ybUVsZW1l
bnRzW2ldLT5yZXNldCgpOwogfQogCiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6d2lsbE1vdmVUb05l
d093bmVyRG9jdW1lbnQoKQpAQCAtNjM1LDcgKzYxMiw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50
Ojp3aWxsTW92ZVRvTmV3T3duZXIKIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmRpZE1vdmVUb05l
d093bmVyRG9jdW1lbnQoKQogewotICAgIGlmKG1fYXV0b2NvbXBsZXRlKQorICAgIGlmICghbV9h
dXRvY29tcGxldGUpCiAgICAgICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyRm9yRG9jdW1lbnRBY3Rp
dmF0aW9uQ2FsbGJhY2tzKHRoaXMpOwogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCShy
ZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkZvcm1EYXRhQnVpbGRlci5oIgog
I2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0K
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ2LDMy
ICs0NSwyMSBAQCBwdWJsaWM6CiAgICAgSFRNTEZvcm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkhUTUxGb3JtRWxlbWVudCgpOwogCi0gICAg
dmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4g
VGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDM7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFs
IGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwotICAgIHZpcnR1YWwgdm9pZCBp
bnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3Vt
ZW50KCk7Ci0gCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50KiwgYm9v
bCB1c2VDYXB0dXJlKTsKLSAgICAgCiAgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gZWxl
bWVudHMoKTsKKwogICAgIHZvaWQgZ2V0TmFtZWRFbGVtZW50cyhjb25zdCBBdG9taWNTdHJpbmcm
LCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mKTsKLSAgICAKKwogICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0OwogICAgIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwogCi0gICAgU3RyaW5nIGVu
Y3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKTsg
fQotICAgIHZvaWQgc2V0RW5jdHlwZShjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGVuY3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGlu
Z1R5cGUoKTsgfQorICAgIHZvaWQgc2V0RW5jdHlwZShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAot
ICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmVu
Y29kaW5nVHlwZSgpOyB9Ci0gICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KSB7IHNldEVuY3R5cGUodmFsdWUpOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBlbmNvZGlu
ZygpIGNvbnN0IHsgcmV0dXJuIGVuY3R5cGUoKTsgfQorICAgIHZvaWQgc2V0RW5jb2RpbmcoY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyBzZXRFbmN0eXBlKHZhbHVlKTsgfQogCiAgICAgYm9v
bCBhdXRvQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2F1dG9jb21wbGV0ZTsgfQogCi0gICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCiAg
ICAgdm9pZCByZWdpc3RlckZvcm1FbGVtZW50KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKICAg
ICB2b2lkIHJlbW92ZUZvcm1FbGVtZW50KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKICAgICB2
b2lkIHJlZ2lzdGVySW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50Kik7CkBAIC04OCw2NiArNzYs
NzEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGVtb3RlZChib29sIGRlbW90ZWQpIHsgbV9kZW1v
dGVkID0gZGVtb3RlZDsgfQogICAgIGJvb2wgaXNEZW1vdGVkKCkgY29uc3QgeyByZXR1cm4gbV9k
ZW1vdGVkOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikg
Y29uc3Q7Ci0gICAgCiAgICAgdm9pZCBzdWJtaXRDbGljayhFdmVudCopOwotICAgIGJvb2wgZm9y
bVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24oY29uc3QgU3RyaW5nJiB1cmwpOwogCi0gICAgU3Ry
aW5nIG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXROYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYpOwogCi0gICAgU3RyaW5nIGFjY2VwdENoYXJzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2Zvcm1EYXRhQnVpbGRlci5hY2NlcHRDaGFyc2V0KCk7IH0KLSAgICB2b2lkIHNldEFj
Y2VwdENoYXJzZXQoY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nl
cHRDaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtRGF0YUJ1aWxkZXIuYWNjZXB0Q2hhcnNl
dCgpOyB9CisgICAgdm9pZCBzZXRBY2NlcHRDaGFyc2V0KGNvbnN0IEF0b21pY1N0cmluZyYpOwog
Ci0gICAgU3RyaW5nIGFjdGlvbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWN0aW9uKGNvbnN0IFN0
cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWN0aW9uKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRBY3Rpb24oY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgbWV0aG9kKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRNZXRob2QoY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBtZXRob2QoKSBjb25zdDsKKyAgICB2b2lkIHNldE1ldGhvZChjb25zdCBBdG9t
aWNTdHJpbmcmKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIHRhcmdldCgpIGNvbnN0OwotICAgIHZv
aWQgc2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYpOwotICAgIAotICAgIFBhc3NSZWZQdHI8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4gZWxlbWVudEZvckFsaWFzKGNvbnN0IEF0b21pY1N0cmluZyYpOwot
ICAgIHZvaWQgYWRkRWxlbWVudEFsaWFzKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqLCBjb25zdCBB
dG9taWNTdHJpbmcmIGFsaWFzKTsKLQotICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byBiZSBw
cml2YXRlIGFmdGVyIGdldHRpbmcgcmlkIG9mIGFsbCB0aGUgY2xpZW50cy4KLSAgICBWZWN0b3I8
SFRNTEZvcm1Db250cm9sRWxlbWVudCo+IGZvcm1FbGVtZW50czsKKyAgICB2b2lkIHNldFRhcmdl
dChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIENoZWNrZWRSYWRpb0J1dHRvbnMmIGNoZWNr
ZWRSYWRpb0J1dHRvbnMoKSB7IHJldHVybiBtX2NoZWNrZWRSYWRpb0J1dHRvbnM7IH0KLSAgICAK
LSAgICB2aXJ0dWFsIHZvaWQgZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUoKTsKIAotcHJvdGVjdGVk
OgorICAgIGNvbnN0IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGZvcm1Db250cm9s
RWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1FbGVtZW50czsgfQorCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBIVE1MRm9ybUNvbGxlY3Rpb247CisKKyAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1
aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsg
fQorCisgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlZEZyb21Eb2N1bWVudCgpOworIAorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVMb2NhbEV2
ZW50cyhFdmVudCosIGJvb2wgdXNlQ2FwdHVyZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNV
UkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CisgICAgCiAgICAgdmlydHVhbCB2b2lkIHdp
bGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZE1vdmVUb05l
d093bmVyRG9jdW1lbnQoKTsKIAotcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZG9jdW1lbnRE
aWRCZWNvbWVBY3RpdmUoKTsKKworICAgIFBhc3NSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4gZWxlbWVudEZvckFsaWFzKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHZvaWQgYWRkRWxl
bWVudEFsaWFzKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIGFs
aWFzKTsKKwogICAgIGJvb2wgaXNNYWlsdG9Gb3JtKCkgY29uc3Q7CiAgICAgVGV4dEVuY29kaW5n
IGRhdGFFbmNvZGluZygpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZUZv
cm1EYXRhKGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5KTsKICAgICB1bnNpZ25lZCBmb3JtRWxlbWVu
dEluZGV4KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKIAotICAgIGZyaWVuZCBjbGFzcyBIVE1M
Rm9ybUNvbGxlY3Rpb247Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEF0b21pY1N0cmlu
Z0ltcGw+LCBSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiBBbGlhc01hcDsKIAorICAg
IFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4gbV9mb3JtRWxlbWVudHM7CiAgICAgRm9y
bURhdGFCdWlsZGVyIG1fZm9ybURhdGFCdWlsZGVyOwotICAgIEFsaWFzTWFwKiBtX2VsZW1lbnRB
bGlhc2VzOwotICAgIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbyogY29sbGVjdGlvbklu
Zm87Ci0KKyAgICBPd25QdHI8QWxpYXNNYXA+IG1fZWxlbWVudEFsaWFzZXM7CisgICAgT3duUHRy
PEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5mbz4gbV9jb2xsZWN0aW9uSW5mbzsKICAgICBD
aGVja2VkUmFkaW9CdXR0b25zIG1fY2hlY2tlZFJhZGlvQnV0dG9uczsKLSAgICAKLSAgICBWZWN0
b3I8SFRNTEltYWdlRWxlbWVudCo+IGltZ0VsZW1lbnRzOwotICAgIFN0cmluZyBtX3VybDsKLSAg
ICBTdHJpbmcgbV90YXJnZXQ7CisgICAgVmVjdG9yPEhUTUxJbWFnZUVsZW1lbnQqPiBtX2ltYWdl
RWxlbWVudHM7CisgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKICAgICBib29sIG1fYXV0b2NvbXBs
ZXRlIDogMTsKICAgICBib29sIG1faW5zdWJtaXQgOiAxOwogICAgIGJvb2wgbV9kb2luZ3N1Ym1p
dCA6IDE7CiAgICAgYm9vbCBtX2lucmVzZXQgOiAxOwogICAgIGJvb2wgbV9tYWxmb3JtZWQgOiAx
OwogICAgIGJvb2wgbV9kZW1vdGVkIDogMTsKLSAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNw
cAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgSFRNTEZyYW1lRWxlbWVudDo6SFRNTEZy
YW1lRWxlbWVudChjb25zdAogYm9vbCBIVE1MRnJhbWVFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKikKIHsKICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSwgZnJhbWVzIHJlbmRl
ciBldmVuIHdoZW4gZGlzcGxheTogbm9uZSBpcyBzZXQuCi0gICAgcmV0dXJuIGlzVVJMQWxsb3dl
ZChtX1VSTCk7CisgICAgcmV0dXJuIGlzVVJMQWxsb3dlZCgpOwogfQogCiBSZW5kZXJPYmplY3Qq
IEhUTUxGcmFtZUVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVu
ZGVyU3R5bGUqKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZp
c2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDEyICs1NSwxMiBAQCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6SFRN
TEZyYW1lRWxlbWVudEJhCiB7CiB9CiAKLWJvb2wgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmlzVVJM
QWxsb3dlZChjb25zdCBBdG9taWNTdHJpbmcmIFVSTFN0cmluZykgY29uc3QKK2Jvb2wgSFRNTEZy
YW1lRWxlbWVudEJhc2U6OmlzVVJMQWxsb3dlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKFVSTFN0cmlu
Zy5pc0VtcHR5KCkpCisgICAgaWYgKG1fVVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBjb25zdCBLVVJMJiBjb21wbGV0ZVVSTCA9IGRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKFVSTFN0cmluZyk7CisgICAgY29uc3QgS1VSTCYgY29tcGxldGVVUkwgPSBkb2N1bWVudCgp
LT5jb21wbGV0ZVVSTChtX1VSTCk7CiAKICAgICAvLyBEb24ndCBhbGxvdyBtb3JlIHRoYW4gMjAw
IHRvdGFsIGZyYW1lcyBpbiBhIHNldC4gVGhpcyBzZWVtcwogICAgIC8vIGxpa2UgYSByZWFzb25h
YmxlIHVwcGVyIGJvdW5kLCBhbmQgb3RoZXJ3aXNlIG11dHVhbGx5IHJlY3Vyc2l2ZQpAQCAtOTIs
NyArOTIsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpvcGVuVVJMKCkKIHsKICAgICBB
U1NFUlQoIW1fZnJhbWVOYW1lLmlzRW1wdHkoKSk7CiAKLSAgICBpZiAoIWlzVVJMQWxsb3dlZCht
X1VSTCkpCisgICAgaWYgKCFpc1VSTEFsbG93ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKG1fVVJMLmlzRW1wdHkoKSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEhUTUxGcmFtZUVs
ZW1lbnRCYXNlOjpvcGVuVVJMKCkKIAogICAgIHBhcmVudEZyYW1lLT5sb2FkZXIoKS0+cmVxdWVz
dEZyYW1lKHRoaXMsIG1fVVJMLCBtX2ZyYW1lTmFtZSk7CiAgICAgaWYgKGNvbnRlbnRGcmFtZSgp
KQotICAgICAgICBjb250ZW50RnJhbWUoKS0+c2V0SW5WaWV3U291cmNlTW9kZSh2aWV3U291cmNl
TW9kZSgpKTsKKyAgICAgICAgY29udGVudEZyYW1lKCktPnNldEluVmlld1NvdXJjZU1vZGUobV92
aWV3U291cmNlKTsKIH0KIAogdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQg
SFRNTEZyYW1lRWxlbWVudEJhc2U6OnBhcnNlTWFwcGVkQXQKICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSB2aWV3c291cmNlQXR0cikgewogICAgICAgICBtX3ZpZXdTb3VyY2UgPSAhYXR0
ci0+aXNOdWxsKCk7CiAgICAgICAgIGlmIChjb250ZW50RnJhbWUoKSkKLSAgICAgICAgICAgIGNv
bnRlbnRGcmFtZSgpLT5zZXRJblZpZXdTb3VyY2VNb2RlKHZpZXdTb3VyY2VNb2RlKCkpOworICAg
ICAgICAgICAgY29udGVudEZyYW1lKCktPnNldEluVmlld1NvdXJjZU1vZGUobV92aWV3U291cmNl
KTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKSB7CiAgICAgICAg
IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgY3JlYXRl
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb25iZWZvcmV1bmxvYWRBdHRyKSB7CkBAIC0xOTcsMTggKzE5NywxMyBAQCB2
b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjphdHRhY2goKQogICAgICAgICAgICAgcmVuZGVyUGFy
dC0+c2V0V2lkZ2V0KGZyYW1lLT52aWV3KCkpOwogfQogCi1LVVJMIEhUTUxGcmFtZUVsZW1lbnRC
YXNlOjpsb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNyYygpOwotfQotCi12b2lkIEhU
TUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRMb2NhdGlvbihjb25zdCBTdHJpbmcmIHN0cikKK3ZvaWQg
SFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldExvY2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUpCiB7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsK
LSAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPm5lZWRzQWNyb2JhdEZyYW1lUmVsb2FkaW5n
UXVpcmsoKSAmJiBtX1VSTCA9PSBzdHIpCisgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT5u
ZWVkc0Fjcm9iYXRGcmFtZVJlbG9hZGluZ1F1aXJrKCkgJiYgbV9VUkwgPT0gdmFsdWUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fVVJMID0gQXRvbWljU3RyaW5nKHN0cik7CisgICAgbV9VUkwg
PSB2YWx1ZTsKIAogICAgIGlmIChpbkRvY3VtZW50KCkpCiAgICAgICAgIG9wZW5VUkwoKTsKQEAg
LTIzMSw2NyArMjI2LDY3IEBAIGJvb2wgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmlzVVJMQXR0cmli
dXQKICAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IHNyY0F0dHI7CiB9CiAKLVN0cmluZyBIVE1M
RnJhbWVFbGVtZW50QmFzZTo6ZnJhbWVCb3JkZXIoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5n
JiBIVE1MRnJhbWVFbGVtZW50QmFzZTo6ZnJhbWVCb3JkZXIoKSBjb25zdAogewogICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoZnJhbWVib3JkZXJBdHRyKTsKIH0KIAotdm9pZCBIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6c2V0RnJhbWVCb3JkZXIoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEZy
YW1lRWxlbWVudEJhc2U6OnNldEZyYW1lQm9yZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
CiB7CiAgICAgc2V0QXR0cmlidXRlKGZyYW1lYm9yZGVyQXR0ciwgdmFsdWUpOwogfQogCi1TdHJp
bmcgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmxvbmdEZXNjKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0
cmluZyYgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmxvbmdEZXNjKCkgY29uc3QKIHsKICAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKGxvbmdkZXNjQXR0cik7CiB9CiAKLXZvaWQgSFRNTEZyYW1lRWxlbWVu
dEJhc2U6OnNldExvbmdEZXNjKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxGcmFtZUVs
ZW1lbnRCYXNlOjpzZXRMb25nRGVzYyhjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAg
IHNldEF0dHJpYnV0ZShsb25nZGVzY0F0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxGcmFt
ZUVsZW1lbnRCYXNlOjptYXJnaW5IZWlnaHQoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MRnJhbWVFbGVtZW50QmFzZTo6bWFyZ2luSGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKG1hcmdpbmhlaWdodEF0dHIpOwogfQogCi12b2lkIEhUTUxGcmFtZUVsZW1l
bnRCYXNlOjpzZXRNYXJnaW5IZWlnaHQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEZy
YW1lRWxlbWVudEJhc2U6OnNldE1hcmdpbkhlaWdodChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
KQogewogICAgIHNldEF0dHJpYnV0ZShtYXJnaW5oZWlnaHRBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0
cmluZyBIVE1MRnJhbWVFbGVtZW50QmFzZTo6bWFyZ2luV2lkdGgoKSBjb25zdAorY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MRnJhbWVFbGVtZW50QmFzZTo6bWFyZ2luV2lkdGgoKSBjb25zdAogewog
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWFyZ2lud2lkdGhBdHRyKTsKIH0KIAotdm9pZCBIVE1M
RnJhbWVFbGVtZW50QmFzZTo6c2V0TWFyZ2luV2lkdGgoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3Zv
aWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OnNldE1hcmdpbldpZHRoKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKG1hcmdpbndpZHRoQXR0ciwgdmFsdWUpOwog
fQogCi1TdHJpbmcgSFRNTEZyYW1lRWxlbWVudEJhc2U6Om5hbWUoKSBjb25zdAorY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MRnJhbWVFbGVtZW50QmFzZTo6bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiB9CiAKLXZvaWQgSFRNTEZyYW1lRWxlbWVudEJh
c2U6OnNldE5hbWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTEZyYW1lRWxlbWVudEJh
c2U6OnNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1
dGUobmFtZUF0dHIsIHZhbHVlKTsKIH0KIAogdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0
Tm9SZXNpemUoYm9vbCBub1Jlc2l6ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGUobm9yZXNpemVBdHRy
LCBub1Jlc2l6ZSA/ICIiIDogMCk7CisgICAgc2V0QXR0cmlidXRlKG5vcmVzaXplQXR0ciwgbm9S
ZXNpemUgPyBlbXB0eUF0b20gOiBudWxsQXRvbSk7CiB9CiAKLVN0cmluZyBIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6c2Nyb2xsaW5nKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEZyYW1l
RWxlbWVudEJhc2U6OnNjcm9sbGluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShzY3JvbGxpbmdBdHRyKTsKIH0KIAotdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0U2Ny
b2xsaW5nKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpz
ZXRTY3JvbGxpbmcoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1
dGUoc2Nyb2xsaW5nQXR0ciwgdmFsdWUpOwogfQpAQCAtMzAxLDcgKzI5Niw3IEBAIEtVUkwgSFRN
TEZyYW1lRWxlbWVudEJhc2U6OnNyYygpIGNvbnN0CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPmNv
bXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9CiAKLXZvaWQgSFRNTEZyYW1lRWxl
bWVudEJhc2U6OnNldFNyYyhjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6c2V0U3JjKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0
cmlidXRlKHNyY0F0dHIsIHZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVF
bGVtZW50QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
QmFzZS5oCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2MCArMzEsNjEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBIVE1MRnJhbWVFbGVtZW50QmFzZSA6IHB1YmxpYyBIVE1MRnJhbWVPd25l
ckVsZW1lbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1
bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBib29sIGNhbkxhenlBdHRhY2goKSB7
IHJldHVybiBmYWxzZTsgfQotCi0gICAgS1VSTCBsb2NhdGlvbigpIGNvbnN0OwotICAgIHZvaWQg
c2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2Fi
bGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7Ci0gICAgCi0gICAg
dmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OworICAgIEtVUkwg
bG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBzcmMoKTsgfQorICAgIHZvaWQgc2V0TG9jYXRpb24o
Y29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIFNjcm9sbGJhck1vZGUgc2Nyb2xs
aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nOyB9CiAgICAgCiAgICAgaW50IGdl
dE1hcmdpbldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5XaWR0aDsgfQogICAgIGludCBn
ZXRNYXJnaW5IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbkhlaWdodDsgfQogCi0gICAg
U3RyaW5nIGZyYW1lQm9yZGVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGcmFtZUJvcmRlcihjb25z
dCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lQm9yZGVyKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRGcmFtZUJvcmRlcihjb25zdCBBdG9taWNTdHJpbmcmKTsKIAotICAgIFN0
cmluZyBsb25nRGVzYygpIGNvbnN0OwotICAgIHZvaWQgc2V0TG9uZ0Rlc2MoY29uc3QgU3RyaW5n
Jik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb25nRGVzYygpIGNvbnN0OworICAgIHZvaWQg
c2V0TG9uZ0Rlc2MoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgbWFyZ2luSGVp
Z2h0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRNYXJnaW5IZWlnaHQoY29uc3QgU3RyaW5nJik7Cisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJnaW5IZWlnaHQoKSBjb25zdDsKKyAgICB2b2lkIHNl
dE1hcmdpbkhlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAotICAgIFN0cmluZyBtYXJnaW5X
aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWFyZ2luV2lkdGgoY29uc3QgU3RyaW5nJik7Cisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJnaW5XaWR0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0
TWFyZ2luV2lkdGgoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
Jik7CiAKICAgICBib29sIG5vUmVzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub1Jlc2l6ZTsgfQog
ICAgIHZvaWQgc2V0Tm9SZXNpemUoYm9vbCk7CiAKLSAgICBTdHJpbmcgc2Nyb2xsaW5nKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRTY3JvbGxpbmcoY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBzY3JvbGxpbmcoKSBjb25zdDsKKyAgICB2b2lkIHNldFNjcm9sbGluZyhjb25z
dCBBdG9taWNTdHJpbmcmKTsKIAogICAgIEtVUkwgc3JjKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRT
cmMoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRTcmMoY29uc3QgQXRvbWljU3RyaW5nJik7
CiAKICAgICBpbnQgd2lkdGgoKSBjb25zdDsKICAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CiAKLSAg
ICBib29sIHZpZXdTb3VyY2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV92aWV3U291cmNlOyB9Ci0K
IHByb3RlY3RlZDoKICAgICBIVE1MRnJhbWVFbGVtZW50QmFzZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKIAotICAgIGJvb2wgaXNVUkxBbGxvd2VkKGNvbnN0IEF0b21pY1N0cmlu
ZyYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUqKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKCk7CisKKyAgICBib29sIGlzVVJMQWxsb3dlZCgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIHZpcnR1YWwgYm9vbCBjYW5MYXp5QXR0YWNoKCkgeyByZXR1cm4gZmFsc2U7IH0KKwor
ICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBz
ZXRGb2N1cyhib29sKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0
cmlidXRlKikgY29uc3Q7CisKICAgICB2b2lkIHNldE5hbWVBbmRPcGVuVVJMKCk7CiAgICAgdm9p
ZCBvcGVuVVJMKCk7CiAKQEAgLTk4LDcgKzk5LDEwIEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9t
YXJnaW5XaWR0aDsKICAgICBpbnQgbV9tYXJnaW5IZWlnaHQ7CiAKK3Byb3RlY3RlZDoKICAgICBi
b29sIG1fbm9SZXNpemU7CisKK3ByaXZhdGU6CiAgICAgYm9vbCBtX3ZpZXdTb3VyY2U7CiAKICAg
ICBib29sIG1fc2hvdWxkT3BlblVSTEFmdGVyQXR0YWNoOwpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxJRnJhbWVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElGcmFt
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1l
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBIVE1MSUZy
YW1lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogCiBib29sIEhUTUxJRnJhbWVFbGVtZW50Ojpy
ZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICByZXR1cm4gaXNVUkxB
bGxvd2VkKG1fVVJMKSAmJiBzdHlsZS0+ZGlzcGxheSgpICE9IE5PTkU7CisgICAgcmV0dXJuIGlz
VVJMQWxsb3dlZCgpICYmIHN0eWxlLT5kaXNwbGF5KCkgIT0gTk9ORTsKIH0KIAogUmVuZGVyT2Jq
ZWN0KiBIVE1MSUZyYW1lRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5h
LCBSZW5kZXJTdHlsZSopCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExJRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5
MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw3ICsxLDcgQEAKLS8qKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEwNSwx
MiArMTA1LDEyIEBAIHZvaWQgSFRNTExJRWxlbWVudDo6YXR0YWNoKCkKICAgICB9CiB9CiAKLVN0
cmluZyBIVE1MTElFbGVtZW50Ojp0eXBlKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRN
TExJRWxlbWVudDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBl
QXR0cik7CiB9CiAKLXZvaWQgSFRNTExJRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcmIHZh
bHVlKQordm9pZCBIVE1MTElFbGVtZW50OjpzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7CiB9CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTExJRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
TElFbGVtZW50LmgJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxMSUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTMwLDYgKzMxLDEzIEBAIGNsYXNzIEhUTUxMSUVsZW1lbnQgOiBwdWJsaWMgSFRN
TEVsZW1lbnQKIHB1YmxpYzoKICAgICBIVE1MTElFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYpOworCisgICAgaW50IHZhbHVlKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRWYWx1ZShpbnQpOworCitwcml2YXRlOgogICAgIHZpcnR1YWwg
SFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1
c09wdGlvbmFsOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAzOyB9CiAKQEAgLTM4LDEzICs0Niw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2goKTsKIAotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNv
bnN0IFN0cmluZyYpOwotCi0gICAgaW50IHZhbHVlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWYWx1
ZShpbnQpOwotCi1wcml2YXRlOgogICAgIGludCBtX3JlcXVlc3RlZFZhbHVlOwogfTsKIApJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSwyMiArMTQx
LDIyIEBAIHZvaWQgSFRNTExhYmVsRWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGIKICAgICAgICAg
ZWxlbWVudC0+YWNjZXNzS2V5QWN0aW9uKHNlbmRUb0FueUVsZW1lbnQpOwogfQogCi1TdHJpbmcg
SFRNTExhYmVsRWxlbWVudDo6YWNjZXNzS2V5KCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYg
SFRNTExhYmVsRWxlbWVudDo6YWNjZXNzS2V5KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKGFjY2Vzc2tleUF0dHIpOwogfQogCi12b2lkIEhUTUxMYWJlbEVsZW1lbnQ6OnNldEFj
Y2Vzc0tleShjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MTGFiZWxFbGVtZW50OjpzZXRB
Y2Nlc3NLZXkoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUo
YWNjZXNza2V5QXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTExhYmVsRWxlbWVudDo6aHRt
bEZvcigpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxMYWJlbEVsZW1lbnQ6Omh0bWxG
b3IoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoZm9yQXR0cik7CiB9CiAKLXZv
aWQgSFRNTExhYmVsRWxlbWVudDo6c2V0SHRtbEZvcihjb25zdCBTdHJpbmcgJnZhbHVlKQordm9p
ZCBIVE1MTGFiZWxFbGVtZW50OjpzZXRIdG1sRm9yKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
CiB7CiAgICAgc2V0QXR0cmlidXRlKGZvckF0dHIsIHZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MTGFiZWxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxM
YWJlbEVsZW1lbnQuaAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExhYmVs
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChD
KSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkg
QW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAg
RGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsMzAgKzMzLDI4IEBAIHB1Ymxp
YzoKICAgICBIVE1MTGFiZWxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogICAgIHZpcnR1YWwgfkhUTUxMYWJlbEVsZW1lbnQoKTsKIAotICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQorICAgIEhUTUxFbGVtZW50KiBjb3JyZXNw
b25kaW5nQ29udHJvbCgpOwogCi0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nlc3NLZXkoKSBjb25zdDsKKyAgICB2b2lkIHNl
dEFjY2Vzc0tleShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAorICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaHRtbEZvcigpIGNvbnN0OworICAgIHZvaWQgc2V0SHRtbEZvcihjb25zdCBBdG9taWNTdHJp
bmcmKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7CiAKICAg
ICAvLyBPdmVycmlkZGVuIHRvIHVwZGF0ZSB0aGUgaG92ZXIvYWN0aXZlIHN0YXRlIG9mIHRoZSBj
b3JyZXNwb25kaW5nIGNvbnRyb2wuCi0gICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShib29sID0g
dHJ1ZSwgYm9vbCBwYXVzZSA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZChi
b29sID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShib29sLCBib29sIHBhdXNl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZChib29sKTsKIAogICAgIC8vIE92ZXJyaWRk
ZW4gdG8gZWl0aGVyIGNsaWNrKCkgb3IgZm9jdXMoKSB0aGUgY29ycmVzcG9uZGluZyBjb250cm9s
LgogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAKLSAgICBI
VE1MRWxlbWVudCogY29ycmVzcG9uZGluZ0NvbnRyb2woKTsKLQotICAgIFN0cmluZyBhY2Nlc3NL
ZXkoKSBjb25zdDsKLSAgICB2b2lkIHNldEFjY2Vzc0tleShjb25zdCBTdHJpbmcmKTsKLQotICAg
IFN0cmluZyBodG1sRm9yKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIdG1sRm9yKGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgdm9pZCBmb2N1cyhib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbiA9IHRy
dWUpOworICAgIHZpcnR1YWwgdm9pZCBmb2N1cyhib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlv
bik7CiAKLSBwcml2YXRlOgogICAgIFN0cmluZyBtX2Zvcm1FbGVtZW50SUQ7CiB9OwogCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55
cG9wLmNvbSkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMiwxNiArMzIsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MTGVnZW5kRWxlbWVudDo6
SFRNTExlZ2VuZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQg
KmRvYywgSFRNTEZvcm1FbGVtZW50ICpmKQotICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0
YWdOYW1lLCBkb2MsIGYpCitIVE1MTGVnZW5kRWxlbWVudDo6SFRNTExlZ2VuZEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVs
ZW1lbnQqIGZvcm0pCisgICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50LCBmb3JtKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGxlZ2VuZFRhZykpOwogfQogCi1I
VE1MTGVnZW5kRWxlbWVudDo6fkhUTUxMZWdlbmRFbGVtZW50KCkKLXsKLX0KLQogYm9vbCBIVE1M
TGVnZW5kRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogewogICAgIHJldHVybiBIVE1MRWxl
bWVudDo6aXNGb2N1c2FibGUoKTsKQEAgLTUzLDMwICs0OSwzMCBAQCBjb25zdCBBdG9taWNTdHJp
bmcmIEhUTUxMZWdlbmRFbGVtZW50Ojp0CiAgICAgcmV0dXJuIGxlZ2VuZDsKIH0KIAotU3RyaW5n
IEhUTUxMZWdlbmRFbGVtZW50OjphY2Nlc3NLZXkoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5n
JiBIVE1MTGVnZW5kRWxlbWVudDo6YWNjZXNzS2V5KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIpOwogfQogCi12b2lkIEhUTUxMZWdlbmRFbGVtZW50Ojpz
ZXRBY2Nlc3NLZXkoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTExlZ2VuZEVsZW1lbnQ6
OnNldEFjY2Vzc0tleShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJp
YnV0ZShhY2Nlc3NrZXlBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MTGVnZW5kRWxlbWVu
dDo6YWxpZ24oKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MTGVnZW5kRWxlbWVudDo6
YWxpZ24oKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKIH0K
IAotdm9pZCBIVE1MTGVnZW5kRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkK
K3ZvaWQgSFRNTExlZ2VuZEVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwogfQogCi1FbGVtZW50
ICpIVE1MTGVnZW5kRWxlbWVudDo6Zm9ybUVsZW1lbnQoKQorSFRNTEZvcm1Db250cm9sRWxlbWVu
dCogSFRNTExlZ2VuZEVsZW1lbnQ6OmZvcm1FbGVtZW50KCkKIHsKICAgICAvLyBDaGVjayBpZiB0
aGVyZSdzIGEgZmllbGRzZXQgYmVsb25naW5nIHRvIHRoaXMgbGVnZW5kLgotICAgIE5vZGUgKmZp
ZWxkc2V0ID0gcGFyZW50Tm9kZSgpOworICAgIE5vZGUqIGZpZWxkc2V0ID0gcGFyZW50Tm9kZSgp
OwogICAgIHdoaWxlIChmaWVsZHNldCAmJiAhZmllbGRzZXQtPmhhc1RhZ05hbWUoZmllbGRzZXRU
YWcpKQogICAgICAgICBmaWVsZHNldCA9IGZpZWxkc2V0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYg
KCFmaWVsZHNldCkKQEAgLTg0LDEyICs4MCwxMSBAQCBFbGVtZW50ICpIVE1MTGVnZW5kRWxlbWVu
dDo6Zm9ybUVsZW1lbnQoCiAKICAgICAvLyBGaW5kIGZpcnN0IGZvcm0gZWxlbWVudCBpbnNpZGUg
dGhlIGZpZWxkc2V0LgogICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgY2FyZSBhYm91dCB0YWJpbmRl
eD8KLSAgICBOb2RlICpub2RlID0gZmllbGRzZXQ7Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZS0+
dHJhdmVyc2VOZXh0Tm9kZShmaWVsZHNldCkpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZmll
bGRzZXQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGZpZWxkc2V0KSkgewog
ICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBIVE1MRWxl
bWVudCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KG5vZGUpOworICAgICAg
ICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5v
ZGUpOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNMb2NhbE5hbWUobGVnZW5kVGFnKSAm
JiBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtZW50OworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwOCw3ICsx
MDMsNyBAQCB2b2lkIEhUTUxMZWdlbmRFbGVtZW50Ojpmb2N1cyhib29sKQogCiB2b2lkIEhUTUxM
ZWdlbmRFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KQogewot
ICAgIGlmIChFbGVtZW50ICplbGVtZW50ID0gZm9ybUVsZW1lbnQoKSkKKyAgICBpZiAoSFRNTEZv
cm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IGZvcm1FbGVtZW50KCkpCiAgICAgICAgIGVsZW1l
bnQtPmFjY2Vzc0tleUFjdGlvbihzZW5kVG9BbnlFbGVtZW50KTsKIH0KICAgICAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MTGVnZW5kRWxlbWVudC5oCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MTGVnZW5kRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDI0ICszMSwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBIVE1MTGVnZW5kRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
IHsKIHB1YmxpYzoKICAgICBIVE1MTGVnZW5kRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7Ci0gICAgdmlydHVhbCB+SFRNTExlZ2Vu
ZEVsZW1lbnQoKTsKIAorICAgIC8vIFRoZSBmaXJzdCBmb3JtIGVsZW1lbnQgaW4gdGhlIGxlZ2Vu
ZCdzIGZpZWxkc2V0IAorICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGZvcm1FbGVtZW50KCk7
CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjY2Vzc0tleSgpIGNvbnN0OworICAgIHZvaWQg
c2V0QWNjZXNzS2V5KGNvbnN0IEF0b21pY1N0cmluZyYpOworCisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhbGlnbigpIGNvbnN0OworICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgQXRvbWljU3RyaW5n
Jik7CisKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7Ci0KLSAgICAvKioK
LSAgICAgKiBUaGUgZmlyc3QgZm9ybSBlbGVtZW50IGluIHRoZSBsZWdlbmQncyBmaWVsZHNldCAK
LSAgICAgKi8KLSAgICBFbGVtZW50KiBmb3JtRWxlbWVudCgpOwotCi0gICAgU3RyaW5nIGFjY2Vz
c0tleSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWNjZXNzS2V5KGNvbnN0IFN0cmluZyAmKTsKLQot
ICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5n
ICYpOwotICAgIAotICAgIHZvaWQgZm9jdXMoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24g
PSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXMoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxl
Y3Rpb24pOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5j
cHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJIVE1MTGlua0VsZW1l
bnQuaCIKIAogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQu
aCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiRE5TLmgiCiAj
aW5jbHVkZSAiRG9jTG9hZGVyLmgiCkBAIC00MiwxMCArNDMsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxMaW5rRWxlbWVudDo6SFRN
TExpbmtFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lLCBEb2N1bWVudCAqZG9jLCBi
b29sIGNyZWF0ZWRCeVBhcnNlcikKLSAgICA6IEhUTUxFbGVtZW50KHFOYW1lLCBkb2MpCi0gICAg
LCBtX2NhY2hlZFNoZWV0KDApCi0gICAgLCBtX2Rpc2FibGVkU3RhdGUoMCkKK0hUTUxMaW5rRWxl
bWVudDo6SFRNTExpbmtFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIERvY3VtZW50
KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCisgICAgOiBIVE1MRWxlbWVudChuYW1l
LCBkb2N1bWVudCkKKyAgICAsIG1fZGlzYWJsZWRTdGF0ZShEaXNhYmxlZFN0YXRlVW5zZXQpCiAg
ICAgLCBtX2xvYWRpbmcoZmFsc2UpCiAgICAgLCBtX2FsdGVybmF0ZShmYWxzZSkKICAgICAsIG1f
aXNTdHlsZVNoZWV0KGZhbHNlKQpAQCAtNjUsNDIgKzY1LDQ0IEBAIEhUTUxMaW5rRWxlbWVudDo6
fkhUTUxMaW5rRWxlbWVudCgpCiAgICAgfQogfQogCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0
RGlzYWJsZWRTdGF0ZShib29sIF9kaXNhYmxlZCkKK3ZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRE
aXNhYmxlZFN0YXRlKERpc2FibGVkU3RhdGUgZGlzYWJsZWRTdGF0ZSkKIHsKLSAgICBpbnQgb2xk
RGlzYWJsZWRTdGF0ZSA9IG1fZGlzYWJsZWRTdGF0ZTsKLSAgICBtX2Rpc2FibGVkU3RhdGUgPSBf
ZGlzYWJsZWQgPyAyIDogMTsKLSAgICBpZiAob2xkRGlzYWJsZWRTdGF0ZSAhPSBtX2Rpc2FibGVk
U3RhdGUpIHsKLSAgICAgICAgLy8gSWYgd2UgY2hhbmdlIHRoZSBkaXNhYmxlZCBzdGF0ZSB3aGls
ZSB0aGUgc2hlZXQgaXMgc3RpbGwgbG9hZGluZywgdGhlbiB3ZSBoYXZlIHRvCi0gICAgICAgIC8v
IHBlcmZvcm0gdGhyZWUgY2hlY2tzOgotICAgICAgICBpZiAoaXNMb2FkaW5nKCkpIHsKLSAgICAg
ICAgICAgIC8vIENoZWNrICMxOiBJZiB0aGUgc2hlZXQgYmVjb21lcyBkaXNhYmxlZCB3aGlsZSBp
dCB3YXMgbG9hZGluZywgYW5kIGlmIGl0IHdhcyBlaXRoZXIKLSAgICAgICAgICAgIC8vIGEgbWFp
biBzaGVldCBvciBhIHNoZWV0IHRoYXQgd2FzIHByZXZpb3VzbHkgZW5hYmxlZCB2aWEgc2NyaXB0
LCB0aGVuIHdlIG5lZWQKLSAgICAgICAgICAgIC8vIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0
IG9mIHBlbmRpbmcgc2hlZXRzLgotICAgICAgICAgICAgaWYgKG1fZGlzYWJsZWRTdGF0ZSA9PSAy
ICYmICghbV9hbHRlcm5hdGUgfHwgb2xkRGlzYWJsZWRTdGF0ZSA9PSAxKSkKLSAgICAgICAgICAg
ICAgICBkb2N1bWVudCgpLT5yZW1vdmVQZW5kaW5nU2hlZXQoKTsKKyAgICBpZiAobV9kaXNhYmxl
ZFN0YXRlID09IGRpc2FibGVkU3RhdGUpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAg
Ly8gQ2hlY2sgIzI6IEFuIGFsdGVybmF0ZSBzaGVldCBiZWNvbWVzIGVuYWJsZWQgd2hpbGUgaXQg
aXMgc3RpbGwgbG9hZGluZy4KLSAgICAgICAgICAgIGlmIChtX2FsdGVybmF0ZSAmJiBtX2Rpc2Fi
bGVkU3RhdGUgPT0gMSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hl
ZXQoKTsKKyAgICBEaXNhYmxlZFN0YXRlIG9sZERpc2FibGVkU3RhdGUgPSBzdGF0aWNfY2FzdDxE
aXNhYmxlZFN0YXRlPihtX2Rpc2FibGVkU3RhdGUpOworICAgIG1fZGlzYWJsZWRTdGF0ZSA9IGRp
c2FibGVkU3RhdGU7CiAKLSAgICAgICAgICAgIC8vIENoZWNrICMzOiBBIG1haW4gc2hlZXQgYmVj
b21lcyBlbmFibGVkIHdoaWxlIGl0IHdhcyBzdGlsbCBsb2FkaW5nIGFuZAotICAgICAgICAgICAg
Ly8gYWZ0ZXIgaXQgd2FzIGRpc2FibGVkIHZpYSBzY3JpcHQuICBJdCB0YWtlcyByZWFsbHkgdGVy
cmlibGUgY29kZSB0byBtYWtlIHRoaXMKLSAgICAgICAgICAgIC8vIGhhcHBlbiAoYSBkb3VibGUg
dG9nZ2xlIGZvciBubyByZWFzb24gZXNzZW50aWFsbHkpLiAgVGhpcyBoYXBwZW5zIG9uCi0gICAg
ICAgICAgICAvLyB2aXJ0dWFscGxhc3RpYy5uZXQsIHdoaWNoIG1hbmFnZXMgdG8gZG8gYWJvdXQg
MTIgZW5hYmxlL2Rpc2FibGVzIG9uIG9ubHkgMwotICAgICAgICAgICAgLy8gc2hlZXRzLiA6KQot
ICAgICAgICAgICAgaWYgKCFtX2FsdGVybmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gMSAmJiBv
bGREaXNhYmxlZFN0YXRlID09IDIpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkUGVu
ZGluZ1NoZWV0KCk7CisgICAgLy8gSWYgd2UgY2hhbmdlIHRoZSBkaXNhYmxlZCBzdGF0ZSB3aGls
ZSB0aGUgc2hlZXQgaXMgc3RpbGwgbG9hZGluZywgdGhlbiB3ZSBoYXZlIHRvCisgICAgLy8gcGVy
Zm9ybSB0aHJlZSBjaGVja3M6CisgICAgaWYgKGlzTG9hZGluZygpKSB7CisgICAgICAgIC8vIENo
ZWNrICMxOiBJZiB0aGUgc2hlZXQgYmVjb21lcyBkaXNhYmxlZCB3aGlsZSBpdCB3YXMgbG9hZGlu
ZywgYW5kIGlmIGl0IHdhcyBlaXRoZXIKKyAgICAgICAgLy8gYSBtYWluIHNoZWV0IG9yIGEgc2hl
ZXQgdGhhdCB3YXMgcHJldmlvdXNseSBlbmFibGVkIHZpYSBzY3JpcHQsIHRoZW4gd2UgbmVlZAor
ICAgICAgICAvLyB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBwZW5kaW5nIHNoZWV0cy4K
KyAgICAgICAgaWYgKG1fZGlzYWJsZWRTdGF0ZSA9PSBEaXNhYmxlZFN0YXRlRGlzYWJsZWQgJiYg
KCFtX2FsdGVybmF0ZSB8fCBvbGREaXNhYmxlZFN0YXRlID09IERpc2FibGVkU3RhdGVFbmFibGVk
VmlhU2NyaXB0KSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZVBlbmRpbmdTaGVldCgp
OwogCi0gICAgICAgICAgICAvLyBJZiB0aGUgc2hlZXQgaXMgYWxyZWFkeSBsb2FkaW5nIGp1c3Qg
YmFpbC4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICAvLyBDaGVjayAj
MjogQW4gYWx0ZXJuYXRlIHNoZWV0IGJlY29tZXMgZW5hYmxlZCB3aGlsZSBpdCBpcyBzdGlsbCBs
b2FkaW5nLgorICAgICAgICBpZiAobV9hbHRlcm5hdGUgJiYgbV9kaXNhYmxlZFN0YXRlID09IERp
c2FibGVkU3RhdGVFbmFibGVkVmlhU2NyaXB0KQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRk
UGVuZGluZ1NoZWV0KCk7CisKKyAgICAgICAgLy8gQ2hlY2sgIzM6IEEgbWFpbiBzaGVldCBiZWNv
bWVzIGVuYWJsZWQgd2hpbGUgaXQgd2FzIHN0aWxsIGxvYWRpbmcgYW5kCisgICAgICAgIC8vIGFm
dGVyIGl0IHdhcyBkaXNhYmxlZCB2aWEgc2NyaXB0LiAgSXQgdGFrZXMgcmVhbGx5IHRlcnJpYmxl
IGNvZGUgdG8gbWFrZSB0aGlzCisgICAgICAgIC8vIGhhcHBlbiAoYSBkb3VibGUgdG9nZ2xlIGZv
ciBubyByZWFzb24gZXNzZW50aWFsbHkpLiAgVGhpcyBoYXBwZW5zIG9uCisgICAgICAgIC8vIHZp
cnR1YWxwbGFzdGljLm5ldCwgd2hpY2ggbWFuYWdlcyB0byBkbyBhYm91dCAxMiBlbmFibGUvZGlz
YWJsZXMgb24gb25seSAzCisgICAgICAgIC8vIHNoZWV0cy4gOikKKyAgICAgICAgaWYgKCFtX2Fs
dGVybmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gRGlzYWJsZWRTdGF0ZUVuYWJsZWRWaWFTY3Jp
cHQgJiYgb2xkRGlzYWJsZWRTdGF0ZSA9PSBEaXNhYmxlZFN0YXRlRGlzYWJsZWQpCisgICAgICAg
ICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKIAotICAgICAgICAvLyBMb2FkIHRo
ZSBzaGVldCwgc2luY2UgaXQncyBuZXZlciBiZWVuIGxvYWRlZCBiZWZvcmUuCi0gICAgICAgIGlm
ICghbV9zaGVldCAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gMSkKLSAgICAgICAgICAgIHByb2Nlc3Mo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVTZWxl
Y3RvcigpOyAvLyBVcGRhdGUgdGhlIHN0eWxlIHNlbGVjdG9yLgorICAgICAgICAvLyBJZiB0aGUg
c2hlZXQgaXMgYWxyZWFkeSBsb2FkaW5nIGp1c3QgYmFpbC4KKyAgICAgICAgcmV0dXJuOwogICAg
IH0KKworICAgIC8vIExvYWQgdGhlIHNoZWV0LCBzaW5jZSBpdCdzIG5ldmVyIGJlZW4gbG9hZGVk
IGJlZm9yZS4KKyAgICBpZiAoIW1fc2hlZXQgJiYgbV9kaXNhYmxlZFN0YXRlID09IERpc2FibGVk
U3RhdGVFbmFibGVkVmlhU2NyaXB0KQorICAgICAgICBwcm9jZXNzKCk7CisgICAgZWxzZQorICAg
ICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7IC8vIFVwZGF0ZSB0aGUgc3R5
bGUgc2VsZWN0b3IuCiB9CiAKIFN0eWxlU2hlZXQqIEhUTUxMaW5rRWxlbWVudDo6c2hlZXQoKSBj
b25zdApAQCAtMTExLDE5ICsxMTMsMjcgQEAgU3R5bGVTaGVldCogSFRNTExpbmtFbGVtZW50Ojpz
aGVldCgpIGNvbgogdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHJlbEF0dHIp
IHsKLSAgICAgICAgdG9rZW5pemVSZWxBdHRyaWJ1dGUoYXR0ci0+dmFsdWUoKSwgbV9pc1N0eWxl
U2hlZXQsIG1fYWx0ZXJuYXRlLCBtX2lzSWNvbiwgbV9pc0ROU1ByZWZldGNoKTsKKyAgICAgICAg
Ym9vbCBpc1N0eWxlU2hlZXQ7CisgICAgICAgIGJvb2wgaXNBbHRlcm5hdGU7CisgICAgICAgIGJv
b2wgaXNJY29uOworICAgICAgICBib29sIGlzRE5TUHJlZmV0Y2g7CisgICAgICAgIHRva2VuaXpl
UmVsQXR0cmlidXRlKGF0dHItPnZhbHVlKCksIGlzU3R5bGVTaGVldCwgaXNBbHRlcm5hdGUsIGlz
SWNvbiwgaXNETlNQcmVmZXRjaCk7CisgICAgICAgIG1faXNTdHlsZVNoZWV0ID0gaXNTdHlsZVNo
ZWV0OworICAgICAgICBtX2FsdGVybmF0ZSA9IGlzQWx0ZXJuYXRlOworICAgICAgICBtX2lzSWNv
biA9IGlzSWNvbjsKKyAgICAgICAgbV9pc0ROU1ByZWZldGNoID0gaXNETlNQcmVmZXRjaDsKICAg
ICAgICAgcHJvY2VzcygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhyZWZBdHRy
KSB7CiAgICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwoYXR0
ci0+dmFsdWUoKSkpOwogICAgICAgICBwcm9jZXNzKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gdHlwZUF0dHIpIHsKLSAgICAgICAgbV90eXBlID0gYXR0ci0+dmFsdWUoKTsKKyAg
ICAgICAgbV90eXBlID0gYXR0ci0+dmFsdWUoKS5zdHJpbmcoKS5sb3dlcigpOwogICAgICAgICBw
cm9jZXNzKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWVkaWFBdHRyKSB7CiAg
ICAgICAgIG1fbWVkaWEgPSBhdHRyLT52YWx1ZSgpLnN0cmluZygpLmxvd2VyKCk7CiAgICAgICAg
IHByb2Nlc3MoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIp
IHsKLSAgICAgICAgc2V0RGlzYWJsZWRTdGF0ZSghYXR0ci0+aXNOdWxsKCkpOworICAgICAgICBz
ZXREaXNhYmxlZFN0YXRlKGF0dHItPmlzTnVsbCgpID8gRGlzYWJsZWRTdGF0ZUVuYWJsZWRWaWFT
Y3JpcHQgOiBEaXNhYmxlZFN0YXRlRGlzYWJsZWQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyICYmIG1fc2hlZXQpCiAgICAgICAgICAgICBtX3No
ZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKQEAgLTE2OSw3ICsxNzksNyBAQCB2b2lkIEhU
TUxMaW5rRWxlbWVudDo6cHJvY2VzcygpCiAgICAgaWYgKCFpbkRvY3VtZW50KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFN0cmluZyB0eXBlID0gbV90eXBlLmxvd2VyKCk7CisgICAgU3RyaW5n
IHR5cGUgPSBtX3R5cGU7CiAKICAgICAvLyBJRSBleHRlbnNpb246IGxvY2F0aW9uIG9mIHNtYWxs
IGljb24gZm9yIGxvY2F0aW9uYmFyIC8gYm9va21hcmtzCiAgICAgLy8gV2UnbGwgcmVjb3JkIHRo
aXMgVVJMIHBlciBkb2N1bWVudCwgZXZlbiBpZiB3ZSBsYXRlciBvbmx5IHVzZSBpdCBpbiB0b3Ag
bGV2ZWwgZnJhbWVzCkBAIC0xODEsNyArMTkxLDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnBy
b2Nlc3MoKQogCiAgICAgLy8gU3R5bGVzaGVldAogICAgIC8vIFRoaXMgd2FzIGJ1Z2d5IGFuZCB3
b3VsZCBpbmNvcnJlY3RseSBtYXRjaCA8bGluayByZWw9ImFsdGVybmF0ZSI+LCB3aGljaCBoYXMg
YSBkaWZmZXJlbnQgc3BlY2lmaWVkIG1lYW5pbmcuIC1kd2gKLSAgICBpZiAobV9kaXNhYmxlZFN0
YXRlICE9IDIgJiYgbV9pc1N0eWxlU2hlZXQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBtX3Vy
bC5pc1ZhbGlkKCkpIHsKKyAgICBpZiAobV9kaXNhYmxlZFN0YXRlICE9IERpc2FibGVkU3RhdGVE
aXNhYmxlZCAmJiBtX2lzU3R5bGVTaGVldCAmJiBkb2N1bWVudCgpLT5mcmFtZSgpICYmIG1fdXJs
LmlzVmFsaWQoKSkgewogICAgICAgICAvLyBubyBuZWVkIHRvIGxvYWQgc3R5bGUgc2hlZXRzIHdo
aWNoIGFyZW4ndCBmb3IgdGhlIHNjcmVlbiBvdXRwdXQKICAgICAgICAgLy8gIyMjIHRoZXJlIG1h
eSBiZSBpbiBzb21lIHNpdHVhdGlvbnMgZS5nLiBmb3IgYW4gZWRpdG9yIG9yIHNjcmlwdCB0byBt
YW5pcHVsYXRlCiAgICAgICAgIC8vIGFsc28sIGRvbid0IGxvYWQgc3R5bGUgc2hlZXRzIGZvciBz
dGFuZGFsb25lIGRvY3VtZW50cwpAQCAtMjg1LDcgKzI5NSw3IEBAIGJvb2wgSFRNTExpbmtFbGVt
ZW50OjpzaGVldExvYWRlZCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEhUTUxMaW5r
RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlICphdHRyKSBjb25zdAorYm9vbCBIVE1M
TGlua0VsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKIHsKICAg
ICByZXR1cm4gYXR0ci0+bmFtZSgpID09IGhyZWZBdHRyOwogfQpAQCAtMzAwLDEyICszMTAsMTIg
QEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldERpc2FibGVkKGJvb2wgZAogICAgIHNldEF0dHJp
YnV0ZShkaXNhYmxlZEF0dHIsIGRpc2FibGVkID8gIiIgOiAwKTsKIH0KIAotU3RyaW5nIEhUTUxM
aW5rRWxlbWVudDo6Y2hhcnNldCgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxMaW5r
RWxlbWVudDo6Y2hhcnNldCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjaGFy
c2V0QXR0cik7CiB9CiAKLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRDaGFyc2V0KGNvbnN0IFN0
cmluZyYgdmFsdWUpCit2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0Q2hhcnNldChjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShjaGFyc2V0QXR0ciwgdmFsdWUp
OwogfQpAQCAtMzE1LDQ3ICszMjUsNDcgQEAgS1VSTCBIVE1MTGlua0VsZW1lbnQ6OmhyZWYoKSBj
b25zdAogICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoaHJl
ZkF0dHIpKTsKIH0KIAotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldEhyZWYoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3ZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRIcmVmKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGhyZWZBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0
cmluZyBIVE1MTGlua0VsZW1lbnQ6OmhyZWZsYW5nKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmlu
ZyYgSFRNTExpbmtFbGVtZW50OjpocmVmbGFuZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShocmVmbGFuZ0F0dHIpOwogfQogCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0SHJl
ZmxhbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRIcmVm
bGFuZyhjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShocmVm
bGFuZ0F0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6bWVkaWEoKSBj
b25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MTGlua0VsZW1lbnQ6Om1lZGlhKCkgY29uc3QK
IHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1lZGlhQXR0cik7CiB9CiAKLXZvaWQgSFRNTExp
bmtFbGVtZW50OjpzZXRNZWRpYShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MTGlua0Vs
ZW1lbnQ6OnNldE1lZGlhKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0
cmlidXRlKG1lZGlhQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50Ojpy
ZWwoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MTGlua0VsZW1lbnQ6OnJlbCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShyZWxBdHRyKTsKIH0KIAotdm9pZCBIVE1M
TGlua0VsZW1lbnQ6OnNldFJlbChjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MTGlua0Vs
ZW1lbnQ6OnNldFJlbChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJp
YnV0ZShyZWxBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MTGlua0VsZW1lbnQ6OnJldigp
IGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxMaW5rRWxlbWVudDo6cmV2KCkgY29uc3QK
IHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHJldkF0dHIpOwogfQogCi12b2lkIEhUTUxMaW5r
RWxlbWVudDo6c2V0UmV2KGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEhUTUxMaW5rRWxlbWVu
dDo6c2V0UmV2KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRl
KHJldkF0dHIsIHZhbHVlKTsKIH0KQEAgLTM2NSwxNyArMzc1LDE3IEBAIFN0cmluZyBIVE1MTGlu
a0VsZW1lbnQ6OnRhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0YXJnZXRB
dHRyKTsKIH0KIAotdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldFRhcmdldChjb25zdCBTdHJpbmcm
IHZhbHVlKQordm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldFRhcmdldChjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZSh0YXJnZXRBdHRyLCB2YWx1ZSk7CiB9CiAK
LVN0cmluZyBIVE1MTGlua0VsZW1lbnQ6OnR5cGUoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5n
JiBIVE1MTGlua0VsZW1lbnQ6OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUodHlwZUF0dHIpOwogfQogCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0VHlwZShjb25zdCBT
dHJpbmcmIHZhbHVlKQordm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldFR5cGUoY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKIH0K
QEAgLTM5NSw4ICs0MDUsOCBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6YWRkU3VicmVzb3VyY2VB
dHRyCiAgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgaHJlZigpKTsKICAgICAKICAgICAvLyBX
YWxrIHRoZSBVUkxzIGxpbmtlZCBieSB0aGUgbGlua2VkLXRvIHN0eWxlc2hlZXQuCi0gICAgaWYg
KFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjb25zdF9jYXN0PEhUTUxMaW5rRWxlbWVudCo+KHRo
aXMpLT5zaGVldCgpKQotICAgICAgICBzdHlsZVNoZWV0LT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJM
cyh1cmxzKTsKKyAgICBpZiAobV9zaGVldCkKKyAgICAgICAgbV9zaGVldC0+YWRkU3VicmVzb3Vy
Y2VTdHlsZVVSTHModXJscyk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHJl
dmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIzLDcgKzIzLDYgQEAKICNpZm5kZWYgSFRNTExpbmtFbGVtZW50X2gKICNkZWZpbmUgSFRNTExp
bmtFbGVtZW50X2gKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKQEAgLTM2LDQxICszNSw0OSBAQCBjbGFzcyBLVVJMOwog
Y2xhc3MgSFRNTExpbmtFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgQ2FjaGVk
UmVzb3VyY2VDbGllbnQgewogcHVibGljOgogICAgIEhUTUxMaW5rRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7Ci0gICAgfkhUTUxM
aW5rRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVt
ZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmlydHVhbCBp
bnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB+SFRNTExp
bmtFbGVtZW50KCk7CiAKICAgICBib29sIGRpc2FibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRE
aXNhYmxlZChib29sKTsKIAotICAgIFN0cmluZyBjaGFyc2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRDaGFyc2V0KGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2hhcnNl
dCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q2hhcnNldChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAog
ICAgIEtVUkwgaHJlZigpIGNvbnN0OwotICAgIHZvaWQgc2V0SHJlZihjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHNldEhyZWYoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgaHJl
ZmxhbmcoKSBjb25zdDsKLSAgICB2b2lkIHNldEhyZWZsYW5nKGNvbnN0IFN0cmluZyYpOworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgaHJlZmxhbmcoKSBjb25zdDsKKyAgICB2b2lkIHNldEhyZWZs
YW5nKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCi0gICAgU3RyaW5nIG1lZGlhKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRNZWRpYShjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG1lZGlhKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNZWRpYShjb25zdCBBdG9taWNTdHJpbmcmKTsK
IAotICAgIFN0cmluZyByZWwoKSBjb25zdDsKLSAgICB2b2lkIHNldFJlbChjb25zdCBTdHJpbmcm
KTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHJlbCgpIGNvbnN0OworICAgIHZvaWQgc2V0UmVs
KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCi0gICAgU3RyaW5nIHJldigpIGNvbnN0OwotICAgIHZv
aWQgc2V0UmV2KGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcmV2KCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRSZXYoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICB2aXJ0
dWFsIFN0cmluZyB0YXJnZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhcmdldChjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHNldFRhcmdldChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAotICAgIFN0
cmluZyB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VHlwZShjb25z
dCBBdG9taWNTdHJpbmcmKTsKIAogICAgIFN0eWxlU2hlZXQqIHNoZWV0KCkgY29uc3Q7CiAKLSAg
ICAvLyBvdmVybG9hZCBmcm9tIEhUTUxFbGVtZW50CisgICAgYm9vbCBpc0Rpc2FibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IERpc2FibGVkU3RhdGVEaXNhYmxlZDsgfQor
ICAgIGJvb2wgaXNFbmFibGVkVmlhU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0
YXRlID09IERpc2FibGVkU3RhdGVFbmFibGVkVmlhU2NyaXB0OyB9CisgICAgYm9vbCBpc0ljb24o
KSBjb25zdCB7IHJldHVybiBtX2lzSWNvbjsgfQorCisgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25z
dDsKKworICAgIHN0YXRpYyB2b2lkIHRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUsIGJvb2wmIHN0eWxlc2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYgaWNv
biwgYm9vbCYgZG5zUHJlZmV0Y2gpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRl
bjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQor
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSop
OwogCiAgICAgdm9pZCBwcm9jZXNzKCk7CkBAIC03OSwzOSArODYsMzEgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAKICAgICAvLyBmcm9tIENhY2hl
ZFJlc291cmNlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3Qg
U3RyaW5nICZ1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29uc3QgQ2FjaGVkQ1NTU3R5bGVT
aGVldCogc2hlZXQpOwotICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hh
cnNldCwgY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCopOwogICAgIHZpcnR1YWwgYm9vbCBzaGVl
dExvYWRlZCgpOwogCi0gICAgYm9vbCBpc0FsdGVybmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlz
YWJsZWRTdGF0ZSA9PSAwICYmIG1fYWx0ZXJuYXRlOyB9Ci0gICAgYm9vbCBpc0Rpc2FibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IDI7IH0KLSAgICBib29sIGlzRW5hYmxl
ZFZpYVNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZSA9PSAxOyB9Ci0gICAg
Ym9vbCBpc0ljb24oKSBjb25zdCB7IHJldHVybiBtX2lzSWNvbjsgfQotICAgIAotICAgIGludCBk
aXNhYmxlZFN0YXRlKCkgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlOyB9Ci0gICAgdm9pZCBzZXRE
aXNhYmxlZFN0YXRlKGJvb2wgX2Rpc2FibGVkKTsKKyAgICBib29sIGlzQWx0ZXJuYXRlKCkgY29u
c3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IERpc2FibGVkU3RhdGVVbnNldCAmJiBtX2Fs
dGVybmF0ZTsgfQogCi0gICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSop
IGNvbnN0OwotICAgIAotICAgIHN0YXRpYyB2b2lkIHRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUsIGJvb2wmIHN0eWxlc2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwg
Ym9vbCYgaWNvbiwgYm9vbCYgZG5zUHJlZmV0Y2gpOworICAgIGVudW0gRGlzYWJsZWRTdGF0ZSB7
IERpc2FibGVkU3RhdGVVbnNldCwgRGlzYWJsZWRTdGF0ZUVuYWJsZWRWaWFTY3JpcHQsIERpc2Fi
bGVkU3RhdGVEaXNhYmxlZCB9OworICAgIHZvaWQgc2V0RGlzYWJsZWRTdGF0ZShEaXNhYmxlZFN0
YXRlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25z
dDsgICAgCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0
SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdD
aGlsZHJlbigpOwogCi1wcm90ZWN0ZWQ6CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
Q1NTU3R5bGVTaGVldD4gbV9jYWNoZWRTaGVldDsKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
bV9zaGVldDsKICAgICBLVVJMIG1fdXJsOwogICAgIFN0cmluZyBtX3R5cGU7CiAgICAgU3RyaW5n
IG1fbWVkaWE7Ci0gICAgaW50IG1fZGlzYWJsZWRTdGF0ZTsgLy8gMD11bnNldChkZWZhdWx0KSwg
MT1lbmFibGVkIHZpYSBzY3JpcHQsIDI9ZGlzYWJsZWQKLSAgICBib29sIG1fbG9hZGluZzsKLSAg
ICBib29sIG1fYWx0ZXJuYXRlOwotICAgIGJvb2wgbV9pc1N0eWxlU2hlZXQ7Ci0gICAgYm9vbCBt
X2lzSWNvbjsKLSAgICBib29sIG1faXNETlNQcmVmZXRjaDsKLSAgICBib29sIG1fY3JlYXRlZEJ5
UGFyc2VyOworICAgIHVuc2lnbmVkIG1fZGlzYWJsZWRTdGF0ZSA6IDI7CisgICAgYm9vbCBtX2xv
YWRpbmcgOiAxOworICAgIGJvb2wgbV9hbHRlcm5hdGUgOiAxOworICAgIGJvb2wgbV9pc1N0eWxl
U2hlZXQgOiAxOworICAgIGJvb2wgbV9pc0ljb24gOiAxOworICAgIGJvb2wgbV9pc0ROU1ByZWZl
dGNoIDogMTsKKyAgICBib29sIG1fY3JlYXRlZEJ5UGFyc2VyIDogMTsKIH07CiAKIH0gLy9uYW1l
c3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gNDI4OTMpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwyMSAr
NTEsMjIgQEAgYm9vbCBIVE1MTWFwRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9kZQogICAgICAg
ICB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShzY3JpcHRUYWcpOyAvLyBleHRlbnNpb25zCiB9CiAK
LWJvb2wgSFRNTE1hcEVsZW1lbnQ6Om1hcE1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBjb25zdCBJ
bnRTaXplJiBzaXplLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCitib29sIEhUTUxNYXBFbGVtZW50
OjptYXBNb3VzZUV2ZW50KGNvbnN0IEludFBvaW50JiBldmVudFBvaW50LCBjb25zdCBJbnRTaXpl
JiBtYXBTaXplLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiB7CiAgICAgSFRNTEFyZWFFbGVtZW50
KiBkZWZhdWx0QXJlYSA9IDA7Ci0gICAgTm9kZSAqbm9kZSA9IHRoaXM7CisKKyAgICBOb2RlKiBu
b2RlID0gdGhpczsKICAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRo
aXMpKSkgewogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShhcmVhVGFnKSkgewogICAgICAg
ICAgICAgSFRNTEFyZWFFbGVtZW50KiBhcmVhRWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVt
ZW50Kj4obm9kZSk7CiAgICAgICAgICAgICBpZiAoYXJlYUVsdC0+aXNEZWZhdWx0KCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIWRlZmF1bHRBcmVhKQogICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0QXJlYSA9IGFyZWFFbHQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGFyZWFFbHQtPm1hcE1v
dXNlRXZlbnQoeCwgeSwgc2l6ZSwgcmVzdWx0KSkKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJl
YUVsdC0+bWFwTW91c2VFdmVudChldmVudFBvaW50LCBtYXBTaXplLCByZXN1bHQpKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaWYg
KGRlZmF1bHRBcmVhKSB7CiAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoZGVmYXVsdEFyZWEp
OwogICAgICAgICByZXN1bHQuc2V0VVJMRWxlbWVudChkZWZhdWx0QXJlYSk7CkBAIC05OSwxMiAr
MTAwLDEyIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxNYXBFbGVtZW4KICAgICBy
ZXR1cm4gSFRNTENvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBIVE1MQ29sbGVjdGlvbjo6TWFwQXJl
YXMpOwogfQogCi1TdHJpbmcgSFRNTE1hcEVsZW1lbnQ6Om5hbWUoKSBjb25zdAorY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MTWFwRWxlbWVudDo6bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShuYW1lQXR0cik7CiB9CiAKLXZvaWQgSFRNTE1hcEVsZW1lbnQ6OnNldE5hbWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTE1hcEVsZW1lbnQ6OnNldE5hbWUoY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVl
KTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5oCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNv
cmUvaHRtbC9IVE1MTWFwRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNywzMCArMjcsMjkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBJbnRTaXplOwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIAogY2xhc3MgSFRNTE1hcEVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxNYXBFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgIH5IVE1MTWFwRWxlbWVudCgpOwotCi0g
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDE7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSop
OworICAgIHZpcnR1YWwgfkhUTUxNYXBFbGVtZW50KCk7CiAKICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIGJvb2wgbWFw
TW91c2VFdmVudChpbnQgeCwgaW50IHksIGNvbnN0IEludFNpemUmLCBIaXRUZXN0UmVzdWx0Jik7
CisgICAgYm9vbCBtYXBNb3VzZUV2ZW50KGNvbnN0IEludFBvaW50JiBldmVudFBvaW50LCBjb25z
dCBJbnRTaXplJiBtYXBTaXplLCBIaXRUZXN0UmVzdWx0Jik7CiAKICAgICBQYXNzUmVmUHRyPEhU
TUxDb2xsZWN0aW9uPiBhcmVhcygpOwogCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKLSAgICB2
b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KCkgY29uc3Q7CisgICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiBwcml2
YXRlOgorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0
IE5vZGUqKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUqKTsKKwogICAgIEF0b21pY1N0cmluZyBtX25hbWU7CiB9OwogCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEzLDQxICszMTMsMjUgQEAg
S1VSTCBIVE1MTWVkaWFFbGVtZW50OjpzcmMoKSBjb25zdAogICAgIHJldHVybiBkb2N1bWVudCgp
LT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0cikpOwogfQogCi12b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnNldFNyYyhjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c2V0U3JjKGNvbnN0IEF0b21pY1N0cmluZyYgdXJsKQogewogICAgIHNldEF0dHJpYnV0ZShz
cmNBdHRyLCB1cmwpOwogfQogCi1TdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6Y3VycmVudFNyYygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY3VycmVudFNyYzsKLX0KLQotSFRNTE1lZGlhRWxlbWVu
dDo6TmV0d29ya1N0YXRlIEhUTUxNZWRpYUVsZW1lbnQ6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fbmV0d29ya1N0YXRlOwotfQotCiBTdHJpbmcgSFRNTE1lZGlhRWxlbWVu
dDo6Y2FuUGxheVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKIHsKLSAgICBNZWRp
YVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnQgPSBNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBl
KENvbnRlbnRUeXBlKG1pbWVUeXBlKSk7Ci0gICAgU3RyaW5nIGNhblBsYXk7Ci0KICAgICAvLyA0
LjguMTAuMwotICAgIHN3aXRjaCAoc3VwcG9ydCkKLSAgICB7CisgICAgc3dpdGNoIChNZWRpYVBs
YXllcjo6c3VwcG9ydHNUeXBlKG1pbWVUeXBlKSkgewogICAgICAgICBjYXNlIE1lZGlhUGxheWVy
OjpJc05vdFN1cHBvcnRlZDoKLSAgICAgICAgICAgIGNhblBsYXkgPSAibm8iOwotICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gIm5vIjsKICAgICAgICAgY2FzZSBNZWRpYVBs
YXllcjo6TWF5QmVTdXBwb3J0ZWQ6Ci0gICAgICAgICAgICBjYW5QbGF5ID0gIm1heWJlIjsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuICJtYXliZSI7CiAgICAgICAgIGNh
c2UgTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkOgotICAgICAgICAgICAgY2FuUGxheSA9ICJwcm9i
YWJseSI7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiAicHJvYmFibHki
OwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gY2FuUGxheTsKKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50
Ojpsb2FkKEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNDIwLDggKzQwNCw4IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6bG9hZEludGVybmFsKCkKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0
TWVkaWFSZXNvdXJjZSgpCiB7CiAgICAgLy8gMSAtIElmIHRoZSBtZWRpYSBlbGVtZW50IGhhcyBu
ZWl0aGVyIGEgc3JjIGF0dHJpYnV0ZSBub3IgYW55IHNvdXJjZSBlbGVtZW50IGNoaWxkcmVuLCBy
dW4gdGhlc2Ugc3Vic3RlcHMKLSAgICBTdHJpbmcgbWVkaWFTcmMgPSBnZXRBdHRyaWJ1dGUoc3Jj
QXR0cik7Ci0gICAgaWYgKCFtZWRpYVNyYyAmJiAhaGF2ZVBvdGVudGlhbFNvdXJjZUNoaWxkKCkp
IHsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhU3JjID0gZ2V0QXR0cmlidXRlKHNyY0F0
dHIpOworICAgIGlmIChtZWRpYVNyYy5pc051bGwoKSAmJiAhaGF2ZVBvdGVudGlhbFNvdXJjZUNo
aWxkKCkpIHsKICAgICAgICAgbV9sb2FkU3RhdGUgPSBXYWl0aW5nRm9yU291cmNlOwogCiAgICAg
ICAgIC8vIDEgLSAgU2V0IHRoZSBuZXR3b3JrU3RhdGUgdG8gTkVUV09SS19OT19TT1VSQ0UKQEAg
LTQ0Niw5ICs0MzAsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3Vy
CiAgICAgLy8gNSAtIElmIHRoZSBtZWRpYSBlbGVtZW50IGhhcyBhIHNyYyBhdHRyaWJ1dGUsIHRo
ZW4gcnVuIHRoZXNlIHN1YnN0ZXBzCiAgICAgQ29udGVudFR5cGUgY29udGVudFR5cGUoIiIpOwog
ICAgIGlmICghbWVkaWFTcmMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1lZGlhU3JjID0gZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwobWVkaWFTcmMpLnN0cmluZygpOwogICAgICAgICBtX2xvYWRTdGF0
ZSA9IExvYWRpbmdGcm9tU3JjQXR0cjsKLSAgICAgICAgbG9hZFJlc291cmNlKG1lZGlhU3JjLCBj
b250ZW50VHlwZSk7CisgICAgICAgIGxvYWRSZXNvdXJjZShkb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChtZWRpYVNyYyksIGNvbnRlbnRUeXBlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NDYwLDE5ICs0NDMsMTggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291
cgogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkTmV4dFNvdXJjZUNoaWxkKCkKIHsKICAgICBD
b250ZW50VHlwZSBjb250ZW50VHlwZSgiIik7Ci0gICAgU3RyaW5nIG1lZGlhU3JjOwogCi0gICAg
bWVkaWFTcmMgPSBuZXh0U291cmNlQ2hpbGQoJmNvbnRlbnRUeXBlKTsKKyAgICBTdHJpbmcgbWVk
aWFTcmMgPSBuZXh0U291cmNlQ2hpbGQoJmNvbnRlbnRUeXBlKTsKICAgICBpZiAobWVkaWFTcmMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIG5vbmVTdXBwb3J0ZWQoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIG1fbG9hZFN0YXRlID0gTG9hZGluZ0Zyb21Tb3VyY2VFbGVtZW50OwotICAg
IGxvYWRSZXNvdXJjZShtZWRpYVNyYywgY29udGVudFR5cGUpOworICAgIGxvYWRSZXNvdXJjZShL
VVJMKEtVUkwoKSwgbWVkaWFTcmMpLCBjb250ZW50VHlwZSk7CiB9CiAKLXZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6bG9hZFJlc291cmNlKFN0cmluZyB1cmwsIENvbnRlbnRUeXBlJiBjb250ZW50VHlw
ZSkKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKGNvbnN0IEtVUkwmIHVybCwg
Q29udGVudFR5cGUmIGNvbnRlbnRUeXBlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
KCktPmZyYW1lKCk7CiAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lID8gZnJhbWUtPmxv
YWRlcigpIDogMDsKQEAgLTU0OCw4ICs1MzAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om5v
bmVTdXBwb3J0ZWQoKQogCiAgICAgLy8gQWJvcnQgdGhlc2Ugc3RlcHMuIFVudGlsIHRoZSBsb2Fk
KCkgbWV0aG9kIGlzIGludm9rZWQsIHRoZSBlbGVtZW50IHdvbid0IGF0dGVtcHQgdG8gbG9hZCBh
bm90aGVyIHJlc291cmNlLgogICAgIAotICAgIGlmIChpc1ZpZGVvKCkpCi0gICAgICAgIHN0YXRp
Y19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPih0aGlzKS0+dXBkYXRlUG9zdGVySW1hZ2UoKTsKKyAg
ICB1cGRhdGVQb3N0ZXJJbWFnZSgpOwogICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICByZW5k
ZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogfQpAQCAtNjEyLDggKzU5Myw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6c2V0TmV0d29ya1N0YXRlKE0KICAgICAgICAgZWxzZSBpZiAoc3Rh
dGUgPT0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yKQogICAgICAgICAgICAgbm9uZVN1cHBvcnRl
ZCgpOwogCi0gICAgICAgIGlmIChpc1ZpZGVvKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MVmlkZW9FbGVtZW50Kj4odGhpcyktPnVwZGF0ZVBvc3RlckltYWdlKCk7CisgICAgICAgIHVw
ZGF0ZVBvc3RlckltYWdlKCk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTcyMCw4ICs3
MDAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkCiAgICAgICAg
IGlmIChpc1BvdGVudGlhbGx5UGxheWluZykKICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZl
bnROYW1lcygpLnBsYXlpbmdFdmVudCk7CiAKLSAgICAgICAgaWYgKGlzVmlkZW8oKSkKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPih0aGlzKS0+dXBkYXRlUG9zdGVy
SW1hZ2UoKTsKKyAgICAgICAgdXBkYXRlUG9zdGVySW1hZ2UoKTsKICAgICB9CiAKICAgICBpZiAo
bV9yZWFkeVN0YXRlID09IEhBVkVfRU5PVUdIX0RBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX0VOT1VH
SF9EQVRBKSB7CkBAIC03MzksOCArNzE4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRS
ZWFkeVN0YXRlKE1lZAogICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkucGxh
eWluZ0V2ZW50KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpc1ZpZGVvKCkpCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4odGhpcyktPnVwZGF0ZVBvc3Rlcklt
YWdlKCk7CisgICAgICAgIHVwZGF0ZVBvc3RlckltYWdlKCk7CiAgICAgfQogCiAgICAgdXBkYXRl
UGxheVN0YXRlKCk7CkBAIC0xMTIwLDkgKzEwOTgsOCBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6
OmhhdmVQb3RlbnRpYWxTb3VyCiAgICAgcmV0dXJuICFuZXh0VXJsLmlzRW1wdHkoKTsKIH0KIAot
U3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6Om5leHRTb3VyY2VDaGlsZChDb250ZW50VHlwZSAqY29u
dGVudFR5cGUpCitLVVJMIEhUTUxNZWRpYUVsZW1lbnQ6Om5leHRTb3VyY2VDaGlsZChDb250ZW50
VHlwZSogY29udGVudFR5cGUpCiB7Ci0gICAgU3RyaW5nIG1lZGlhU3JjOwogICAgIGJvb2wgbG9v
a2luZ0ZvclByZXZpb3VzTm9kZSA9IG1fY3VycmVudFNvdXJjZU5vZGU7CiAKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygp
KSB7CkBAIC0xMTUzLDE1ICsxMTMwLDExIEBAIFN0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpuZXh0
U291cmNlQ2hpbGQKICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkKICAgICAgICAgICAgICAg
ICAqY29udGVudFR5cGUgPSB0eXBlOwogICAgICAgICB9Ci0gICAgICAgIG1lZGlhU3JjID0gc291
cmNlLT5zcmMoKS5zdHJpbmcoKTsKICAgICAgICAgbV9jdXJyZW50U291cmNlTm9kZSA9IG5vZGU7
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gc291cmNlLT5zcmMoKTsKICAgICB9CiAK
LSAgICBpZiAoIW1lZGlhU3JjLmlzRW1wdHkoKSkKLSAgICAgICAgbWVkaWFTcmMgPSBkb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChtZWRpYVNyYykuc3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gbWVkaWFT
cmM7CisgICAgcmV0dXJuIEtVUkwoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRp
YVBsYXllclRpbWVDaGFuZ2VkKE1lZGlhUGxheWVyKikKQEAgLTE0NzAsNyArMTQ0MywxMiBAQCBi
b29sIEhUTUxNZWRpYUVsZW1lbnQ6OnByb2Nlc3NpbmdVc2VyR2VzCiAgICAgcmV0dXJuIGxvYWRl
ciA/IGxvYWRlci0+dXNlckdlc3R1cmVIaW50KCkgOiB0cnVlOwogfQogCit2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnVwZGF0ZVBvc3RlckltYWdlKCkKK3sKK30KKwogI2lmIEVOQUJMRShQTFVHSU5f
UFJPWFlfRk9SX1ZJREVPKQorCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRlbGl2ZXJOb3RpZmlj
YXRpb24oTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNhdGlvblR5cGUgbm90aWZpY2F0aW9uKQogewog
ICAgIGlmIChub3RpZmljYXRpb24gPT0gTWVkaWFQbGF5ZXJOb3RpZmljYXRpb25QbGF5UGF1c2VC
dXR0b25QcmVzc2VkKSB7CkBAIC0xNDg5LDE5ICsxNDY3LDEyIEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0TWVkaWFQbGF5ZXJQcm8KICAgICAgICAgbV9wbGF5ZXItPnNldE1lZGlhUGxheWVy
UHJveHkocHJveHkpOwogfQogCi1TdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6aW5pdGlhbFVSTCgp
CitLVVJMIEhUTUxNZWRpYUVsZW1lbnQ6OmluaXRpYWxVUkwoKQogewotICAgIFN0cmluZyBpbml0
aWFsU3JjID0gbWVkaWFTcmMgPSBnZXRBdHRyaWJ1dGUoc3JjQXR0cik7Ci0gICAgCi0gICAgaWYg
KGluaXRpYWxTcmMuaXNFbXB0eSgpKQotICAgICAgICBpbml0aWFsU3JjID0gbmV4dFNvdXJjZUNo
aWxkKCk7Ci0KLSAgICBpZiAoIWluaXRpYWxTcmMuaXNFbXB0eSgpKQotICAgICAgICBpbml0aWFs
U3JjID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaW5pdGlhbFNyYykuc3RyaW5nKCk7Ci0KLSAg
ICBtX2N1cnJlbnRTcmMgPSBpbml0aWFsU3JjOwotCi0gICAgcmV0dXJuIGluaXRpYWxTcmM7Cisg
ICAgbV9jdXJyZW50U3JjID0gc3JjKCk7CisgICAgaWYgKG1fY3VycmVudFNyYy5pc0VtcHR5KCkp
CisgICAgICAgIG1fY3VycmVudFNyYyA9IG5leHRTb3VyY2VDaGlsZCgpOworICAgIHJldHVybiBt
X2N1cnJlbnRTcmM7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZmluaXNoUGFyc2luZ0No
aWxkcmVuKCkKQEAgLTE1MTQsNiArMTQ4NSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Zmlu
aXNoUGFyc2luZ0NoaWwKICAgICBpZiAobV9uZWVkV2lkZ2V0VXBkYXRlICYmIHJlbmRlcmVyKCkp
CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihyZW5kZXJlcigpKS0+dXBk
YXRlV2lkZ2V0KHRydWUpOwogfQorCiAjZW5kaWYKIAogfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDQzICs0OCwyNyBAQCBwdWJsaWM6CiAgICAgSFRNTE1l
ZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFs
IH5IVE1MTWVkaWFFbGVtZW50KCk7CiAKLSAgICBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5l
d0NoaWxkKTsKLSAgICAKLSAgICB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiwgYm9v
bCBwcmVzZXJ2ZURlY2xzKTsKLSAgICB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqKTsKLQotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0
eWxlKik7Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFu
Z2UpOwotICAgIAogICAgIE1lZGlhUGxheWVyKiBwbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Bs
YXllci5nZXQoKTsgfQotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgCisKICAgICB2b2lkIHNjaGVkdWxlTG9hZCgpOwotICAgIAotICAg
IHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0gICAgCi0gICAgLy8g
UGF1c2VzIHBsYXliYWNrIHdpdGhvdXQgY2hhbmdpbmcgYW55IHN0YXRlcyBvciBnZW5lcmF0aW5n
IGV2ZW50cwotICAgIHZvaWQgc2V0UGF1c2VkSW50ZXJuYWwoYm9vbCk7Ci0gICAgCisKICAgICBi
b29sIGluQWN0aXZlRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2luQWN0aXZlRG9jdW1lbnQ7
IH0KLSAgICAKKwogLy8gRE9NIEFQSQogLy8gZXJyb3Igc3RhdGUKICAgICBQYXNzUmVmUHRyPE1l
ZGlhRXJyb3I+IGVycm9yKCkgY29uc3Q7CiAKIC8vIG5ldHdvcmsgc3RhdGUKICAgICBLVVJMIHNy
YygpIGNvbnN0OwotICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyYpOwotICAgIFN0cmluZyBj
dXJyZW50U3JjKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTcmMoY29uc3QgQXRvbWljU3RyaW5nJik7
CisKKyAgICBjb25zdCBLVVJMJiBjdXJyZW50U3JjKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
U3JjOyB9CiAKICAgICBlbnVtIE5ldHdvcmtTdGF0ZSB7IE5FVFdPUktfRU1QVFksIE5FVFdPUktf
SURMRSwgTkVUV09SS19MT0FESU5HLCBORVRXT1JLX0xPQURFRCwgTkVUV09SS19OT19TT1VSQ0Ug
fTsKLSAgICBOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7CisgICAgTmV0d29ya1N0
YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV0d29ya1N0YXRlOyB9CisKICAg
ICBib29sIGF1dG9idWZmZXIoKSBjb25zdDsgICAgCiAgICAgdm9pZCBzZXRBdXRvYnVmZmVyKGJv
b2wpOwogCkBAIC0xMzEsMjMgKzExNSwxNiBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoUExVR0lO
X1BST1hZX0ZPUl9WSURFTykKICAgICB2b2lkIHNldE5lZWRXaWRnZXRVcGRhdGUoYm9vbCBuZWVk
V2lkZ2V0VXBkYXRlKSB7IG1fbmVlZFdpZGdldFVwZGF0ZSA9IG5lZWRXaWRnZXRVcGRhdGU7IH0K
LSAgICB2b2lkIGRlbGl2ZXJOb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcm94eU5vdGlmaWNhdGlv
blR5cGUgbm90aWZpY2F0aW9uKTsKLSAgICB2b2lkIHNldE1lZGlhUGxheWVyUHJveHkoV2ViTWVk
aWFQbGF5ZXJQcm94eSogcHJveHkpOwotICAgIFN0cmluZyBpbml0aWFsVVJMKCk7CisgICAgdm9p
ZCBkZWxpdmVyTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJveHlOb3RpZmljYXRpb25UeXBlKTsK
KyAgICB2b2lkIHNldE1lZGlhUGxheWVyUHJveHkoV2ViTWVkaWFQbGF5ZXJQcm94eSopOworICAg
IEtVUkwgaW5pdGlhbFVSTCgpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgZmxvYXQgZ2V0VGltZU9mZnNldEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgZmxvYXQgdmFsdWVPbkVycm9yKSBjb25zdDsKLSAg
ICB2b2lkIHNldFRpbWVPZmZzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGZsb2F0
IHZhbHVlKTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZG9jdW1lbnRXaWxsQmVjb21lSW5hY3Rp
dmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9jdW1lbnREaWRCZWNvbWVBY3RpdmUoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgbWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKLSAgICAKLSAgICB2b2lkIHNldFJl
YWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpOwotICAgIHZvaWQgc2V0TmV0d29ya1N0
YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUpOwotICAgIAorICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKik7CisgICAgdmlydHVhbCB2b2lk
IGF0dGFjaCgpOworCiBwcml2YXRlOiAvLyBNZWRpYVBsYXllck9ic2VydmVyCiAgICAgdmlydHVh
bCB2b2lkIG1lZGlhUGxheWVyTmV0d29ya1N0YXRlQ2hhbmdlZChNZWRpYVBsYXllciopOwogICAg
IHZpcnR1YWwgdm9pZCBtZWRpYVBsYXllclJlYWR5U3RhdGVDaGFuZ2VkKE1lZGlhUGxheWVyKik7
CkBAIC0xNjAsNiArMTM3LDM1IEBAIHByaXZhdGU6IC8vIE1lZGlhUGxheWVyT2JzZXJ2ZXIKICAg
ICB2aXJ0dWFsIHZvaWQgbWVkaWFQbGF5ZXJTYXdVbnN1cHBvcnRlZFRyYWNrcyhNZWRpYVBsYXll
ciopOwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBu
ZXdDaGlsZCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmli
dXRlKiwgYm9vbCBwcmVzZXJ2ZURlY2xzKTsKKworICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklz
TmVlZGVkKFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVu
dCgpOworICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVBvc3RlckltYWdlKCk7CisKKyAgICAvLyBQYXVzZXMgcGxheWJhY2sgd2l0aG91dCBj
aGFuZ2luZyBhbnkgc3RhdGVzIG9yIGdlbmVyYXRpbmcgZXZlbnRzCisgICAgdm9pZCBzZXRQYXVz
ZWRJbnRlcm5hbChib29sKTsKKyAgICAKKyAgICBmbG9hdCBnZXRUaW1lT2Zmc2V0QXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBmbG9hdCB2YWx1ZU9uRXJyb3IpIGNvbnN0OworICAgIHZv
aWQgc2V0VGltZU9mZnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgZmxvYXQgdmFs
dWUpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVudFdpbGxCZWNvbWVJbmFjdGl2ZSgp
OworICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVudERpZEJlY29tZUFjdGl2ZSgpOworICAgIHZpcnR1
YWwgdm9pZCBtZWRpYVZvbHVtZURpZENoYW5nZSgpOworICAgIAorICAgIHZvaWQgc2V0UmVhZHlT
dGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSk7CisgICAgdm9pZCBzZXROZXR3b3JrU3RhdGUo
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CisgICAgCiAgICAgdm9pZCBsb2FkVGltZXJGaXJl
ZChUaW1lcjxIVE1MTWVkaWFFbGVtZW50PiopOwogICAgIHZvaWQgYXN5bmNFdmVudFRpbWVyRmly
ZWQoVGltZXI8SFRNTE1lZGlhRWxlbWVudD4qKTsKICAgICB2b2lkIHByb2dyZXNzRXZlbnRUaW1l
ckZpcmVkKFRpbWVyPEhUTUxNZWRpYUVsZW1lbnQ+Kik7CkBAIC0xNzgsMTAgKzE4NCwxMCBAQCBw
cml2YXRlOgogICAgIAogICAgIC8vIGxvYWRpbmcKICAgICB2b2lkIHNlbGVjdE1lZGlhUmVzb3Vy
Y2UoKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShTdHJpbmcgdXJsLCBDb250ZW50VHlwZSYgY29u
dGVudFR5cGUpOworICAgIHZvaWQgbG9hZFJlc291cmNlKGNvbnN0IEtVUkwmLCBDb250ZW50VHlw
ZSYpOwogICAgIHZvaWQgbG9hZE5leHRTb3VyY2VDaGlsZCgpOwogICAgIHZvaWQgdXNlckNhbmNl
bGxlZExvYWQoKTsKLSAgICBTdHJpbmcgbmV4dFNvdXJjZUNoaWxkKENvbnRlbnRUeXBlKiBjb250
ZW50VHlwZSA9IDApOworICAgIEtVUkwgbmV4dFNvdXJjZUNoaWxkKENvbnRlbnRUeXBlKiA9IDAp
OwogICAgIGJvb2wgaGF2ZVBvdGVudGlhbFNvdXJjZUNoaWxkKCk7CiAgICAgdm9pZCBub25lU3Vw
cG9ydGVkKCk7CiAgICAgdm9pZCBtZWRpYUVuZ2luZUVycm9yKFBhc3NSZWZQdHI8TWVkaWFFcnJv
cj4gZXJyKTsKQEAgLTIwNCwxNSArMjEwLDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBwYXVzZWRG
b3JVc2VySW50ZXJhY3Rpb24oKSBjb25zdDsKIAogICAgIC8vIFJlc3RyaWN0aW9ucyB0byBjaGFu
Z2UgZGVmYXVsdCBiZWhhdmlvcnMuIFRoaXMgaXMgYSBlZmZlY3RpdmVseSBhIGNvbXBpbGUgdGlt
ZSBjaG9pY2UgYXQgdGhlIG1vbWVudAotICAgIC8vICBiZWNhdXNlIHRoZXJlIGFyZSBubyBhY2Nl
c3NvciBtZXRob2RzLgotICAgIGVudW0gQmVoYXZpb3JSZXN0cmljdGlvbnMgCi0gICAgeyAKKyAg
ICAvLyBiZWNhdXNlIHRoZXJlIGFyZSBubyBhY2Nlc3NvciBtZXRob2RzLgorICAgIGVudW0gQmVo
YXZpb3JSZXN0cmljdGlvbnMgeyAKICAgICAgICAgTm9SZXN0cmljdGlvbnMgPSAwLAogICAgICAg
ICBSZXF1aXJlVXNlckdlc3R1cmVGb3JMb2FkUmVzdHJpY3Rpb24gPSAxIDw8IDAsCiAgICAgICAg
IFJlcXVpcmVVc2VyR2VzdHVyZUZvclJhdGVDaGFuZ2VSZXN0cmljdGlvbiA9IDEgPDwgMSwKICAg
ICB9OwogCi1wcm90ZWN0ZWQ6CiAgICAgVGltZXI8SFRNTE1lZGlhRWxlbWVudD4gbV9sb2FkVGlt
ZXI7CiAgICAgVGltZXI8SFRNTE1lZGlhRWxlbWVudD4gbV9hc3luY0V2ZW50VGltZXI7CiAgICAg
VGltZXI8SFRNTE1lZGlhRWxlbWVudD4gbV9wcm9ncmVzc0V2ZW50VGltZXI7CkBAIC0yMjQsNyAr
MjI4LDcgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IG1fZGVmYXVsdFBsYXliYWNrUmF0ZTsKICAg
ICBOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3Rh
dGU7Ci0gICAgU3RyaW5nIG1fY3VycmVudFNyYzsKKyAgICBLVVJMIG1fY3VycmVudFNyYzsKICAg
ICAKICAgICBSZWZQdHI8TWVkaWFFcnJvcj4gbV9lcnJvcjsKIApAQCAtMjg0LDQgKzI4OCw1IEBA
IHByb3RlY3RlZDoKIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCisKICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxNZXRhRWxlbWVudC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hU
TUxNZXRhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICszNSw2IEBAIEhUTUxN
ZXRhRWxlbWVudDo6SFRNTE1ldGFFbGVtZW50KGNvbnN0IFEKICAgICBBU1NFUlQoaGFzVGFnTmFt
ZShtZXRhVGFnKSk7CiB9CiAKLUhUTUxNZXRhRWxlbWVudDo6fkhUTUxNZXRhRWxlbWVudCgpCi17
Ci19Ci0KIHZvaWQgSFRNTE1ldGFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBodHRwX2VxdWl2QXR0
cikgewpAQCAtNjcsNDIgKzYzLDQyIEBAIHZvaWQgSFRNTE1ldGFFbGVtZW50Ojpwcm9jZXNzKCkK
ICAgICAgICAgZG9jdW1lbnQoKS0+cHJvY2Vzc0h0dHBFcXVpdihtX2VxdWl2LCBtX2NvbnRlbnQp
OwogfQogCi1TdHJpbmcgSFRNTE1ldGFFbGVtZW50Ojpjb250ZW50KCkgY29uc3QKK2NvbnN0IEF0
b21pY1N0cmluZyYgSFRNTE1ldGFFbGVtZW50Ojpjb250ZW50KCkgY29uc3QKIHsKICAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKGNvbnRlbnRBdHRyKTsKIH0KIAotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6
OnNldENvbnRlbnQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTE1ldGFFbGVtZW50Ojpz
ZXRDb250ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRl
KGNvbnRlbnRBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6Omh0dHBF
cXVpdigpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxNZXRhRWxlbWVudDo6aHR0cEVx
dWl2KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGh0dHBfZXF1aXZBdHRyKTsK
IH0KIAotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldEh0dHBFcXVpdihjb25zdCBTdHJpbmcmIHZh
bHVlKQordm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldEh0dHBFcXVpdihjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShodHRwX2VxdWl2QXR0ciwgdmFsdWUpOwog
fQogCi1TdHJpbmcgSFRNTE1ldGFFbGVtZW50OjpuYW1lKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0
cmluZyYgSFRNTE1ldGFFbGVtZW50OjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKG5hbWVBdHRyKTsKIH0KIAotdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnNldE5hbWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTE1ldGFFbGVtZW50OjpzZXROYW1lKGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKG5hbWVBdHRyLCB2YWx1ZSk7
CiB9CiAKLVN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6OnNjaGVtZSgpIGNvbnN0Citjb25zdCBBdG9t
aWNTdHJpbmcmIEhUTUxNZXRhRWxlbWVudDo6c2NoZW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKHNjaGVtZUF0dHIpOwogfQogCi12b2lkIEhUTUxNZXRhRWxlbWVudDo6c2V0
U2NoZW1lKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxNZXRhRWxlbWVudDo6c2V0U2No
ZW1lKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHNjaGVt
ZUF0dHIsIHZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmgJKHJldmlzaW9uIDQy
ODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsMTIgKzI2LDIzIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTE1ldGFFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50
Ci17CitjbGFzcyBIVE1MTWV0YUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGlj
OgogICAgIEhUTUxNZXRhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
LSAgICB+SFRNTE1ldGFFbGVtZW50KCk7CiAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbnRl
bnQoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnQoY29uc3QgQXRvbWljU3RyaW5nJik7CisK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGh0dHBFcXVpdigpIGNvbnN0OworICAgIHZvaWQgc2V0
SHR0cEVxdWl2KGNvbnN0IEF0b21pY1N0cmluZyYpOworCisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpOwor
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzY2hlbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNj
aGVtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3Ji
aWRkZW47IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KIApAQCAtNDIsMjEgKzUxLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBwcm9jZXNzKCk7CiAK
LSAgICBTdHJpbmcgY29udGVudCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGVudChjb25zdCBT
dHJpbmcmKTsKLQotICAgIFN0cmluZyBodHRwRXF1aXYoKSBjb25zdDsKLSAgICB2b2lkIHNldEh0
dHBFcXVpdihjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHNjaGVtZSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0U2NoZW1lKGNvbnN0IFN0cmluZyYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
U3RyaW5nIG1fZXF1aXY7Ci0gICAgU3RyaW5nIG1fY29udGVudDsKKyAgICBBdG9taWNTdHJpbmcg
bV9lcXVpdjsKKyAgICBBdG9taWNTdHJpbmcgbV9jb250ZW50OwogfTsKIAogfSAvL25hbWVzcGFj
ZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNb2RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTE1vZEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNv
cmUvaHRtbC9IVE1MTW9kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBA
QAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZv
ciBLREUuCi0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBr
ZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw2ICsxOSw3IEBACiAgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KKwogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxNb2RFbGVtZW50LmgiCiAKQEAgLTMwLDI3ICsyOSwy
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LUhUTUxNb2RFbGVtZW50OjpIVE1MTW9kRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorSFRN
TE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KQogewogfQogCi1TdHJpbmcgSFRNTE1vZEVsZW1lbnQ6OmNpdGUoKSBjb25zdAorY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MTW9kRWxlbWVudDo6Y2l0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShjaXRlQXR0cik7CiB9CiAKLXZvaWQgSFRNTE1vZEVsZW1lbnQ6OnNldENpdGUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTE1vZEVsZW1lbnQ6OnNldENpdGUoY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoY2l0ZUF0dHIsIHZhbHVl
KTsKIH0KIAotU3RyaW5nIEhUTUxNb2RFbGVtZW50OjpkYXRlVGltZSgpIGNvbnN0Citjb25zdCBB
dG9taWNTdHJpbmcmIEhUTUxNb2RFbGVtZW50OjpkYXRlVGltZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShkYXRldGltZUF0dHIpOwogfQogCi12b2lkIEhUTUxNb2RFbGVtZW50
OjpzZXREYXRlVGltZShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MTW9kRWxlbWVudDo6
c2V0RGF0ZVRpbWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1
dGUoZGF0ZXRpbWVBdHRyLCB2YWx1ZSk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1vZEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1vZEVsZW1lbnQuaAkocmV2
aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1vZEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9N
IGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21h
bm4gPGhhdXNtYW5uQGtkZS5vcmc+CkBAIC0yMSw2ICsxOSw3IEBACiAgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lmbmRlZiBIVE1MTW9kRWxlbWVudF9oCiAjZGVm
aW5lIEhUTUxNb2RFbGVtZW50X2gKIApAQCAtMzAsMTkgKzI5LDE5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgU3RyaW5nOwogCi1jbGFzcyBIVE1MTW9kRWxlbWVudCA6IHB1YmxpYyBI
VE1MRWxlbWVudAoteworY2xhc3MgSFRNTE1vZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQg
ewogcHVibGljOgogICAgIEhUTUxNb2RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwogCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNp
dGUoKSBjb25zdDsKKyAgICB2b2lkIHNldENpdGUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAg
ICBTdHJpbmcgY2l0ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2l0ZShjb25zdCBTdHJpbmcmKTsK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGRhdGVUaW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRE
YXRlVGltZShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAotICAgIFN0cmluZyBkYXRlVGltZSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0RGF0ZVRpbWUoY29uc3QgU3RyaW5nJik7Citwcml2YXRlOgorICAg
IHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiAxOyB9CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTE9MaXN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPTGlz
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MT0xpc3RF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTIgKzg3LDEyIEBAIHZvaWQgSFRNTE9M
aXN0RWxlbWVudDo6c2V0U3RhcnQoaW50IHN0YXIKICAgICBzZXRBdHRyaWJ1dGUoc3RhcnRBdHRy
LCBTdHJpbmc6Om51bWJlcihzdGFydCkpOwogfQogCi1TdHJpbmcgSFRNTE9MaXN0RWxlbWVudDo6
dHlwZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxPTGlzdEVsZW1lbnQ6OnR5cGUo
KSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogfQogCi12b2lk
IEhUTUxPTGlzdEVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRN
TE9MaXN0RWxlbWVudDo6c2V0VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAg
IHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxPTGlzdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxl
bWVudC5oCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI3ICsyNiwyNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEhUTUxPTGlzdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKLXsKK2Ns
YXNzIEhUTUxPTGlzdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgogICAg
IEhUTUxPTGlzdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAg
ICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShj
b25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KICAg
ICBib29sIGNvbXBhY3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CiAKICAg
ICBpbnQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CiAgICAgdm9pZCBzZXRTdGFy
dChpbnQpOwogCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUoY29u
c3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiBwcml2YXRlOgorICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiA1OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisKICAgICBpbnQgbV9zdGFydDsK
IH07CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gNDI4OTMp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFTdGVpbkBn
bXguZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01NCwxMCArNTQsNiBAQCBIVE1MT2JqZWN0RWxl
bWVudDo6SFRNTE9iamVjdEVsZW1lbnQoY29uCiAgICAgQVNTRVJUKGhhc1RhZ05hbWUob2JqZWN0
VGFnKSk7CiB9CiAKLUhUTUxPYmplY3RFbGVtZW50Ojp+SFRNTE9iamVjdEVsZW1lbnQoKQotewot
fQotCiBSZW5kZXJXaWRnZXQqIEhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0Jp
bmRpbmdzKCkgY29uc3QKIHsKICAgICBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCA9IChyZW5k
ZXJlcigpICYmIHJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpID8gc3RhdGljX2Nhc3Q8UmVuZGVyV2lk
Z2V0Kj4ocmVuZGVyZXIoKSkgOiAwOwpAQCAtNzAsMzAgKzY2LDMwIEBAIFJlbmRlcldpZGdldCog
SFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlclcKIAogdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewotICAgIFN0cmluZyB2
YWwgPSBhdHRyLT52YWx1ZSgpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsID0gYXR0ci0+
dmFsdWUoKTsKICAgICBpbnQgcG9zOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIp
IHsKLSAgICAgICAgbV9zZXJ2aWNlVHlwZSA9IHZhbC5sb3dlcigpOworICAgICAgICBtX3NlcnZp
Y2VUeXBlID0gdmFsLnN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgIHBvcyA9IG1fc2VydmljZVR5
cGUuZmluZCgiOyIpOwogICAgICAgICBpZiAocG9zICE9IC0xKQotICAgICAgICAgIG1fc2Vydmlj
ZVR5cGUgPSBtX3NlcnZpY2VUeXBlLmxlZnQocG9zKTsKKyAgICAgICAgICAgIG1fc2VydmljZVR5
cGUgPSBtX3NlcnZpY2VUeXBlLmxlZnQocG9zKTsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0g
ICAgICAgICAgbV9uZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbmVlZFdp
ZGdldFVwZGF0ZSA9IHRydWU7CiAgICAgICAgIGlmICghaXNJbWFnZVR5cGUoKSAmJiBtX2ltYWdl
TG9hZGVyKQotICAgICAgICAgIG1faW1hZ2VMb2FkZXIuY2xlYXIoKTsKKyAgICAgICAgICAgIG1f
aW1hZ2VMb2FkZXIuY2xlYXIoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBkYXRh
QXR0cikgewogICAgICAgICBtX3VybCA9IHBhcnNlVVJMKHZhbCk7CiAgICAgICAgIGlmIChyZW5k
ZXJlcigpKQotICAgICAgICAgIG1fbmVlZFdpZGdldFVwZGF0ZSA9IHRydWU7CisgICAgICAgICAg
ICBtX25lZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwogICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiBp
c0ltYWdlVHlwZSgpKSB7Ci0gICAgICAgICAgaWYgKCFtX2ltYWdlTG9hZGVyKQotICAgICAgICAg
ICAgICBtX2ltYWdlTG9hZGVyLnNldChuZXcgSFRNTEltYWdlTG9hZGVyKHRoaXMpKTsKLSAgICAg
ICAgICBtX2ltYWdlTG9hZGVyLT51cGRhdGVGcm9tRWxlbWVudElnbm9yaW5nUHJldmlvdXNFcnJv
cigpOworICAgICAgICAgICAgaWYgKCFtX2ltYWdlTG9hZGVyKQorICAgICAgICAgICAgICAgIG1f
aW1hZ2VMb2FkZXIuc2V0KG5ldyBIVE1MSW1hZ2VMb2FkZXIodGhpcykpOworICAgICAgICAgICAg
bV9pbWFnZUxvYWRlci0+dXBkYXRlRnJvbUVsZW1lbnRJZ25vcmluZ1ByZXZpb3VzRXJyb3IoKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNsYXNzaWRBdHRyKSB7
CiAgICAgICAgIG1fY2xhc3NJZCA9IHZhbDsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAg
ICAgICAgbV9uZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fbmVlZFdpZGdl
dFVwZGF0ZSA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0
cikgewogICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5sb2Fk
RXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CkBAIC0xMTIsNyArMTA4LDcgQEAg
dm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICAgICAgZG9j
dW1lbnQtPmFkZEV4dHJhTmFtZWRJdGVtKG5ld0lkKTsKICAgICAgICAgfQogICAgICAgICBtX2lk
ID0gbmV3SWQ7Ci0gICAgICAgIC8vIGFsc28gY2FsbCBzdXBlcmNsYXNzCisgICAgICAgIC8vIGFs
c28gY2FsbCBiYXNlIGNsYXNzCiAgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKICAgICB9IGVsc2UKICAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwpAQCAtMzA1LDUyICszMDEsNTIgQEAgdm9pZCBI
VE1MT2JqZWN0RWxlbWVudDo6dXBkYXRlRG9jTmFtZWRJdAogICAgIG1fZG9jTmFtZWRJdGVtID0g
aXNOYW1lZEl0ZW07CiB9CiAKLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6Y29kZSgpIGNvbnN0
Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxPYmplY3RFbGVtZW50Ojpjb2RlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNvZGVBdHRyKTsKIH0KIAotdm9pZCBIVE1MT2JqZWN0
RWxlbWVudDo6c2V0Q29kZShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MT2JqZWN0RWxl
bWVudDo6c2V0Q29kZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJp
YnV0ZShjb2RlQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OmFy
Y2hpdmUoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MT2JqZWN0RWxlbWVudDo6YXJj
aGl2ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhcmNoaXZlQXR0cik7CiB9
CiAKLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldEFyY2hpdmUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3ZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldEFyY2hpdmUoY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0dHIsIHZhbHVlKTsKIH0KIAot
U3RyaW5nIEhUTUxPYmplY3RFbGVtZW50Ojpib3JkZXIoKSBjb25zdAorY29uc3QgQXRvbWljU3Ry
aW5nJiBIVE1MT2JqZWN0RWxlbWVudDo6Ym9yZGVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGJvcmRlckF0dHIpOwogfQogCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRC
b3JkZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldEJv
cmRlcihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShib3Jk
ZXJBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6Y29kZUJhc2Uo
KSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MT2JqZWN0RWxlbWVudDo6Y29kZUJhc2Uo
KSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyKTsKIH0KIAot
dm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0Q29kZUJhc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3ZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnNldENvZGVCYXNlKGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGNvZGViYXNlQXR0ciwgdmFsdWUpOwogfQogCi1T
dHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OmNvZGVUeXBlKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0
cmluZyYgSFRNTE9iamVjdEVsZW1lbnQ6OmNvZGVUeXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKGNvZGV0eXBlQXR0cik7CiB9CiAKLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6
OnNldENvZGVUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEhUTUxPYmplY3RFbGVtZW50
OjpzZXRDb2RlVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJp
YnV0ZShjb2RldHlwZUF0dHIsIHZhbHVlKTsKIH0KQEAgLTM2MCw3ICszNTYsNyBAQCBLVVJMIEhU
TUxPYmplY3RFbGVtZW50OjpkYXRhKCkgY29uc3QKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwoZ2V0QXR0cmlidXRlKGRhdGFBdHRyKSk7CiB9CiAKLXZvaWQgSFRNTE9iamVjdEVs
ZW1lbnQ6OnNldERhdGEoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTE9iamVjdEVsZW1l
bnQ6OnNldERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1
dGUoZGF0YUF0dHIsIHZhbHVlKTsKIH0KQEAgLTM4NSwzMiArMzgxLDMyIEBAIHZvaWQgSFRNTE9i
amVjdEVsZW1lbnQ6OnNldEhzcGFjZShpbnQgdmEKICAgICBzZXRBdHRyaWJ1dGUoaHNwYWNlQXR0
ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KIAotU3RyaW5nIEhUTUxPYmplY3RFbGVtZW50
OjpzdGFuZGJ5KCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTE9iamVjdEVsZW1lbnQ6
OnN0YW5kYnkoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc3RhbmRieUF0dHIp
OwogfQogCi12b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRTdGFuZGJ5KGNvbnN0IFN0cmluZyYg
dmFsdWUpCit2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpzZXRTdGFuZGJ5KGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHN0YW5kYnlBdHRyLCB2YWx1ZSk7CiB9
CiAKLVN0cmluZyBIVE1MT2JqZWN0RWxlbWVudDo6dHlwZSgpIGNvbnN0Citjb25zdCBBdG9taWNT
dHJpbmcmIEhUTUxPYmplY3RFbGVtZW50Ojp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKHR5cGVBdHRyKTsKIH0KIAotdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0VHlw
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6c2V0VHlwZShj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZSh0eXBlQXR0ciwg
dmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTE9iamVjdEVsZW1lbnQ6OnVzZU1hcCgpIGNvbnN0Citj
b25zdCBBdG9taWNTdHJpbmcmIEhUTUxPYmplY3RFbGVtZW50Ojp1c2VNYXAoKSBjb25zdAogewog
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodXNlbWFwQXR0cik7CiB9CiAKLXZvaWQgSFRNTE9iamVj
dEVsZW1lbnQ6OnNldFVzZU1hcChjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MT2JqZWN0
RWxlbWVudDo6c2V0VXNlTWFwKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0
QXR0cmlidXRlKHVzZW1hcEF0dHIsIHZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxl
bWVudC5oCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDUxICszMiwyOCBAQCBjbGFz
cyBLVVJMOwogY2xhc3MgSFRNTE9iamVjdEVsZW1lbnQgOiBwdWJsaWMgSFRNTFBsdWdJbkltYWdl
RWxlbWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTE9iamVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwotICAgIH5IVE1MT2JqZWN0
RWxlbWVudCgpOwogCi0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biA1OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0gICAgdmlydHVhbCBib29s
IGNhbkxhenlBdHRhY2goKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCByZW5k
ZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwot
ICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0
eWxlKFN0eWxlQ2hhbmdlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wg
Y2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFm
dGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwotCi0gICAgdmlydHVhbCBi
b29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgaW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlV2lkZ2V0KCk7CiAgICAgdm9pZCBzZXROZWVkV2lkZ2V0VXBkYXRl
KGJvb2wgbmVlZFdpZGdldFVwZGF0ZSkgeyBtX25lZWRXaWRnZXRVcGRhdGUgPSBuZWVkV2lkZ2V0
VXBkYXRlOyB9CiAKICAgICB2b2lkIHJlbmRlckZhbGxiYWNrQ29udGVudCgpOwogCi0gICAgdmly
dHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdDsKLQot
ICAgIFN0cmluZyBhcmNoaXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBcmNoaXZlKGNvbnN0IFN0
cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJjaGl2ZSgpIGNvbnN0OworICAgIHZv
aWQgc2V0QXJjaGl2ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAotICAgIFN0cmluZyBib3JkZXIo
KSBjb25zdDsKLSAgICB2b2lkIHNldEJvcmRlcihjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGJvcmRlcigpIGNvbnN0OworICAgIHZvaWQgc2V0Qm9yZGVyKGNvbnN0IEF0
b21pY1N0cmluZyYpOwogCi0gICAgU3RyaW5nIGNvZGUoKSBjb25zdDsKLSAgICB2b2lkIHNldENv
ZGUoY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb2RlKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRDb2RlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgIAotICAgIFN0cmlu
ZyBjb2RlQmFzZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29kZUJhc2UoY29uc3QgU3RyaW5nJik7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb2RlQmFzZSgpIGNvbnN0OworICAgIHZvaWQgc2V0
Q29kZUJhc2UoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgY29kZVR5cGUoKSBj
b25zdDsKLSAgICB2b2lkIHNldENvZGVUeXBlKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgY29kZVR5cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldENvZGVUeXBlKGNvbnN0
IEF0b21pY1N0cmluZyYpOwogICAgIAogICAgIEtVUkwgZGF0YSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0RGF0YShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldERhdGEoY29uc3QgQXRvbWljU3Ry
aW5nJik7CiAKICAgICBib29sIGRlY2xhcmUoKSBjb25zdDsKICAgICB2b2lkIHNldERlY2xhcmUo
Ym9vbCk7CkBAIC04NCwzMSArNjEsNTQgQEAgcHVibGljOgogICAgIGludCBoc3BhY2UoKSBjb25z
dDsKICAgICB2b2lkIHNldEhzcGFjZShpbnQpOwogCi0gICAgU3RyaW5nIHN0YW5kYnkoKSBjb25z
dDsKLSAgICB2b2lkIHNldFN0YW5kYnkoY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBzdGFuZGJ5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdGFuZGJ5KGNvbnN0IEF0b21p
Y1N0cmluZyYpOwogCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFR5cGUo
Y29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCi0gICAgU3RyaW5nIHVzZU1h
cCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VXNlTWFwKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdXNlTWFwKCkgY29uc3Q7CisgICAgdm9pZCBzZXRVc2VNYXAoY29uc3Qg
QXRvbWljU3RyaW5nJik7CiAKICAgICBpbnQgdnNwYWNlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRW
c3BhY2UoaW50KTsKIAogICAgIGJvb2wgaXNEb2NOYW1lZEl0ZW0oKSBjb25zdCB7IHJldHVybiBt
X2RvY05hbWVkSXRlbTsgfQogCi0gICAgY29uc3QgU3RyaW5nJiBjbGFzc0lkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGFzc0lkOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc0lkKCkgY29u
c3QgeyByZXR1cm4gbV9jbGFzc0lkOyB9CiAKICAgICBib29sIGNvbnRhaW5zSmF2YUFwcGxldCgp
IGNvbnN0OwogCitwcml2YXRlOgorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gNTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSopOworCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworICAgIHZpcnR1
YWwgYm9vbCBjYW5MYXp5QXR0YWNoKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisgICAgdmly
dHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBy
ZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CisgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdl
ZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBO
b2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKKworICAgIHZp
cnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpIGNvbnN0Owor
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVdpZGdldCgpOworCisgICAgdmlydHVhbCBSZW5kZXJX
aWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdDsKKwogICAgIHZpcnR1YWwg
dm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25z
dDsKIAotcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZURvY05hbWVkSXRlbSgpOwogCiAgICAgQXRv
bWljU3RyaW5nIG1faWQ7Ci0gICAgU3RyaW5nIG1fY2xhc3NJZDsKKyAgICBBdG9taWNTdHJpbmcg
bV9jbGFzc0lkOwogICAgIGJvb2wgbV9kb2NOYW1lZEl0ZW0gOiAxOwogICAgIGJvb2wgbV9uZWVk
V2lkZ2V0VXBkYXRlIDogMTsKICAgICBib29sIG1fdXNlRmFsbGJhY2tDb250ZW50IDogMTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysg
V2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDYsMTIgKzEwNiwxMiBAQCB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnJlY2FsY1NlbGVjdE9w
CiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oc2VsZWN0KS0+c2V0UmVj
YWxjTGlzdEl0ZW1zKCk7CiB9CiAKLVN0cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50OjpsYWJlbCgp
IGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmxhYmVsKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGxhYmVsQXR0cik7CiB9CiAKLXZvaWQg
SFRNTE9wdEdyb3VwRWxlbWVudDo6c2V0TGFiZWwoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQg
SFRNTE9wdEdyb3VwRWxlbWVudDo6c2V0TGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkK
IHsKICAgICBzZXRBdHRyaWJ1dGUobGFiZWxBdHRyLCB2YWx1ZSk7CiB9CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MT3B0R3JvdXBFbGVtZW50LmgJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hU
TUxPcHRHcm91cEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTQgQEAgY2xh
c3MgSFRNTE9wdEdyb3VwRWxlbWVudCA6IHB1YmxpYyBIVE1MRgogcHVibGljOgogICAgIEhUTUxP
cHRHcm91cEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1F
bGVtZW50KiA9IDApOwogCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsYWJlbCgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgQXRvbWljU3RyaW5nJik7CisKKyAgICBIVE1MU2VsZWN0
RWxlbWVudCogb3duZXJTZWxlY3RFbGVtZW50KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBncm91cExhYmVsVGV4dCgpIGNvbnN0OworCitwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBj
aGVja0RURChjb25zdCBOb2RlKik7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKQEAgLTUx
LDE0ICs1OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlQ2hpbGRyZW4oKTsK
ICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0g
ZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50
IGNoaWxkQ291bnREZWx0YSA9IDApOwogCi0gICAgU3RyaW5nIGxhYmVsKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICB2aXJ0dWFsIFN0cmluZyBn
cm91cExhYmVsVGV4dCgpIGNvbnN0OwotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBvd25lclNlbGVj
dEVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wg
c2VuZFRvQW55RWxlbWVudCk7CiAgICAgCi1wcml2YXRlOgogICAgIHZpcnR1YWwgUmVuZGVyU3R5
bGUqIG5vblJlbmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdDsKICAgICAKICAgICB2b2lkIHJlY2Fs
Y1NlbGVjdE9wdGlvbnMoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmNw
cAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoqCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMyBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTksNiArMTks
NyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MUGFyYWdyYXBoRWxlbWVudC5oIgogCkBAIC02Nywx
MiArNjgsMTIgQEAgdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6cGFyc2VNYXBwZWRBdAogICAg
ICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLVN0cmlu
ZyBIVE1MUGFyYWdyYXBoRWxlbWVudDo6YWxpZ24oKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5n
JiBIVE1MUGFyYWdyYXBoRWxlbWVudDo6YWxpZ24oKSBjb25zdAogewogICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoYWxpZ25BdHRyKTsKIH0KIAotdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6c2V0
QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OnNl
dEFsaWduKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGFs
aWduQXR0ciwgdmFsdWUpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJhZ3JhcGhFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmgJ
KHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDE1ICszMCwxNiBAQCBjbGFzcyBIVE1MUGFyYWdyYXBoRWxl
bWVudCA6IHB1YmxpYyBIVE1MCiBwdWJsaWM6CiAgICAgSFRNTFBhcmFncmFwaEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGFsaWduKCkgY29uc3Q7CisgICAgdm9pZCBzZXRBbGlnbihjb25zdCBBdG9taWNTdHJpbmcmKTsK
KworcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RU
RChjb25zdCBOb2RlKiBuZXdDaGlsZCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShj
b25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAg
ICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYp
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQ
YXJhbUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVt
ZW50LmNwcAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEwICszNiw2IEBAIEhUTUxQYXJhbUVsZW1lbnQ6
OkhUTUxQYXJhbUVsZW1lbnQoY29uc3QKICAgICBBU1NFUlQoaGFzVGFnTmFtZShwYXJhbVRhZykp
OwogfQogCi1IVE1MUGFyYW1FbGVtZW50Ojp+SFRNTFBhcmFtRWxlbWVudCgpCi17Ci19Ci0KIHZv
aWQgSFRNTFBhcmFtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
KiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gaWRBdHRyKSB7CkBAIC01OSw4ICs1
NSw3IEBAIHZvaWQgSFRNTFBhcmFtRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKIGJvb2wgSFRN
TFBhcmFtRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKSBjb25zdAogewog
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSog
YXR0ciA9IGF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lQXR0cik7Ci0gICAgICAg
IGlmIChhdHRyKSB7CisgICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHIgPSBhdHRyaWJ1dGVzKCkt
PmdldEF0dHJpYnV0ZUl0ZW0obmFtZUF0dHIpKSB7CiAgICAgICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZSh2YWx1ZSwgImRhdGEiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgIm1vdmll
IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJzcmMiKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTY5LDMyICs2NCwzMiBAQCBib29sIEhUTUxQYXJhbUVsZW1lbnQ6Omlz
VVJMQXR0cmlidXRlKEF0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEhUTUxQYXJhbUVs
ZW1lbnQ6OnNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTFBhcmFtRWxlbWVu
dDo6c2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0
ZShuYW1lQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTFBhcmFtRWxlbWVudDo6dHlwZSgp
IGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxQYXJhbUVsZW1lbnQ6OnR5cGUoKSBjb25z
dAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogfQogCi12b2lkIEhUTUxQ
YXJhbUVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTFBhcmFt
RWxlbWVudDo6c2V0VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0
dHJpYnV0ZSh0eXBlQXR0ciwgdmFsdWUpOwogfQogCi12b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNl
dFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNldFZh
bHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHZhbHVl
QXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTFBhcmFtRWxlbWVudDo6dmFsdWVUeXBlKCkg
Y29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFBhcmFtRWxlbWVudDo6dmFsdWVUeXBlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZhbHVldHlwZUF0dHIpOwogfQogCi12
b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnNldFZhbHVlVHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
dm9pZCBIVE1MUGFyYW1FbGVtZW50OjpzZXRWYWx1ZVR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUodmFsdWV0eXBlQXR0ciwgdmFsdWUpOwogfQpAQCAt
MTAzLDkgKzk4LDkgQEAgdm9pZCBIVE1MUGFyYW1FbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dAog
ewogICAgIEhUTUxFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAK
LSAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKG5hbWUoKSwgImRhdGEiKSAmJgotICAgICAgICAh
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSgpLCAibW92aWUiKSAmJgotICAgICAgICAhZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSgpLCAic3JjIikpCisgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShtX25h
bWUsICJkYXRhIikgJiYKKyAgICAgICAgIWVxdWFsSWdub3JpbmdDYXNlKG1fbmFtZSwgIm1vdmll
IikgJiYKKyAgICAgICAgIWVxdWFsSWdub3JpbmdDYXNlKG1fbmFtZSwgInNyYyIpKQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwodmFsdWUoKSkpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5oCShyZXZp
c2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDQwICsyNywz
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEhUTUxQYXJhbUVsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsZW1lbnQKLXsKLSAgICBmcmllbmQgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnQ7
CitjbGFzcyBIVE1MUGFyYW1FbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoK
ICAgICBIVE1MUGFyYW1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwot
ICAgIH5IVE1MUGFyYW1FbGVtZW50KCk7CiAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICB2b2lk
IHNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYpOwog
Ci0gICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Cisg
ICAgdm9pZCBzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAotICAgIFN0cmluZyBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmlu
ZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWVUeXBlKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRWYWx1ZVR5cGUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgdHlwZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmKTsKK3ByaXZhdGU6CisgICAg
dmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4g
VGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiAwOyB9CiAKLSAgICBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLSAgICBTdHJpbmcg
dmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWYWx1ZVR5cGUoY29uc3QgU3RyaW5nJik7
CisgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCiAg
ICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxL
VVJMPiYpIGNvbnN0OwogCi0gcHJvdGVjdGVkOgogICAgIEF0b21pY1N0cmluZyBtX25hbWU7CiAg
ICAgQXRvbWljU3RyaW5nIG1fdmFsdWU7CiB9OwogCi0KIH0KIAogI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNTQgKzg5LDUxIEBA
IFBhc3NTY3JpcHRJbnN0YW5jZSBIVE1MUGx1Z0luRWxlbWVudDo6Z2UKICAgICByZXR1cm4gbV9p
bnN0YW5jZTsKIH0KIAotU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50OjphbGlnbigpIGNvbnN0Citj
b25zdCBBdG9taWNTdHJpbmcmIEhUTUxQbHVnSW5FbGVtZW50OjphbGlnbigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwogfQogCi12b2lkIEhUTUxQbHVnSW5F
bGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MUGx1Z0luRWxl
bWVudDo6c2V0QWxpZ24oY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRy
aWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MUGx1Z0luRWxlbWVudDo6
aGVpZ2h0KCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFBsdWdJbkVsZW1lbnQ6Omhl
aWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKTsKIH0K
IAotdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6c2V0SGVpZ2h0KGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpzZXRIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgdmFsdWUpOwogfQogCi1TdHJp
bmcgSFRNTFBsdWdJbkVsZW1lbnQ6Om5hbWUoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MUGx1Z0luRWxlbWVudDo6bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShuYW1lQXR0cik7CiB9CiAKLXZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldE5hbWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnNldE5hbWUoY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUobmFtZUF0dHIsIHZhbHVlKTsK
IH0KIAotU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50Ojp3aWR0aCgpIGNvbnN0Citjb25zdCBBdG9t
aWNTdHJpbmcmIEhUTUxQbHVnSW5FbGVtZW50Ojp3aWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwogfQogCi12b2lkIEhUTUxQbHVnSW5FbGVtZW50Ojpz
ZXRXaWR0aChjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6c2V0
V2lkdGgoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUod2lk
dGhBdHRyLCB2YWx1ZSk7CiB9CiAKIGJvb2wgSFRNTFBsdWdJbkVsZW1lbnQ6Om1hcFRvRW50cnko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0CiB7Ci0gICAgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0ciB8fAotICAgICAgICBh
dHRyTmFtZSA9PSBoZWlnaHRBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09IHZzcGFjZUF0dHIg
fHwKLSAgICAgICAgYXR0ck5hbWUgPT0gaHNwYWNlQXR0cikgewotICAgICAgICAgICAgcmVzdWx0
ID0gZVVuaXZlcnNhbDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXR0ck5h
bWUgPT0gd2lkdGhBdHRyIHx8IGF0dHJOYW1lID09IGhlaWdodEF0dHIgfHwgYXR0ck5hbWUgPT0g
dnNwYWNlQXR0ciB8fCBhdHRyTmFtZSA9PSBoc3BhY2VBdHRyKSB7CisgICAgICAgIHJlc3VsdCA9
IGVVbml2ZXJzYWw7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgaWYg
KGF0dHJOYW1lID09IGFsaWduQXR0cikgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgJ
KHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsNDUgKzM1LDU0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIFJlbmRlcldpZGdldDsKIAogY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQg
OiBwdWJsaWMgSFRNTEZyYW1lT3duZXJFbGVtZW50IHsKLXB1YmxpYzoKK3Byb3RlY3RlZDoKICAg
ICBIVE1MUGx1Z0luRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCopOwogICAgIHZpcnR1YWwgfkhUTUxQbHVnSW5FbGVtZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmli
dXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVu
ZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpOwotCi0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVdpZGdldCgpIHsgfQotCi0gICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKK3B1YmxpYzoKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGFsaWduKCkgY29uc3Q7CisgICAgdm9pZCBzZXRBbGlnbihjb25zdCBBdG9t
aWNTdHJpbmcmKTsKICAgICAKLSAgICBTdHJpbmcgaGVpZ2h0KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRIZWlnaHQoY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBoZWlnaHQo
KSBjb25zdDsKKyAgICB2b2lkIHNldEhlaWdodChjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICAK
LSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcm
KTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldE5h
bWUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgCi0gICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRXaWR0aChjb25zdCBTdHJpbmcmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB3aWR0
aCgpIGNvbnN0OworICAgIHZvaWQgc2V0V2lkdGgoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAg
ICB2aXJ0dWFsIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisgICAgLy8gRklYTUU6IFRoZSByZXR1
cm4gdHlwZSBoZXJlIGlzIHdyb25nLiBUaGlzIHNob3VsZCBiZSBhIHJhdyBwb2ludGVyLCBub3Qg
YSBQYXNzUmVmUHRyLAorICAgIC8vIGJlY2F1c2Ugd2UgZG8gbm90IHBhc3Mgb3duZXJzaGlwIHRv
IHRoZSBjYWxsZXIuIEFsc28sIHRoZSAiZ2V0IiBpbiB0aGlzIG5hbWUgaXMgd3JvbmcuCiAgICAg
UGFzc1NjcmlwdEluc3RhbmNlIGdldEluc3RhbmNlKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICB2aXJ0dWFsIE5QT2JqZWN0KiBnZXROUE9iamVjdCgpOwor
ICAgIC8vIEZJWE1FOiBUaGUgImdldCIgaW4gdGhpcyBuYW1lIGlzIHdyb25nLgorICAgIE5QT2Jq
ZWN0KiBnZXROUE9iamVjdCgpOwogI2VuZGlmCiAKIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJv
b2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmli
dXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworCisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwor
CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlV2lkZ2V0Q2FsbGJhY2soTm9kZSopOwogCiAgICAgQXRv
bWljU3RyaW5nIG1fbmFtZTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCopOworCisgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldp
ZGdldEZvckpTQmluZGluZ3MoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsg
fQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2lkZ2V0KCkgeyB9CisKICAgICBtdXRhYmxlIFNjcmlwdElu
c3RhbmNlIG1faW5zdGFuY2U7CisKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAg
ICBOUE9iamVjdCogbV9OUE9iamVjdDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxR
dW90ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUXVvdGVFbGVt
ZW50LmNwcAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFF1b3RlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5LDYgKzE5LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSFRNTFF1b3RlRWxlbWVudC5oIgogCkBAIC0yOSw4ICszMCw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTFF1b3Rl
RWxlbWVudDo6SFRNTFF1b3RlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorSFRNTFF1b3Rl
RWxlbWVudDo6SFRNTFF1b3RlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkK
IHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShxVGFnKSk7CiB9CkBAIC00MiwxMiArNDMsMTIgQEAg
dm9pZCBIVE1MUXVvdGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bQogICAgIEhUTUxFbGVtZW50
OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogfQogCi1TdHJpbmcgSFRNTFF1b3RlRWxlbWVudDo6
Y2l0ZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxRdW90ZUVsZW1lbnQ6OmNpdGUo
KSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY2l0ZUF0dHIpOwogfQogCi12b2lk
IEhUTUxRdW90ZUVsZW1lbnQ6OnNldENpdGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRN
TFF1b3RlRWxlbWVudDo6c2V0Q2l0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAg
IHNldEF0dHJpYnV0ZShjaXRlQXR0ciwgdmFsdWUpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxRdW90ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFF1b3RlRWxl
bWVudC5oCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MUXVvdGVFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDYgKzE5LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgogICoKICAqLworCiAjaWZuZGVmIEhUTUxRdW90ZUVsZW1lbnRfaAogI2RlZmlu
ZSBIVE1MUXVvdGVFbGVtZW50X2gKIApAQCAtMjYsMjAgKzI3LDE4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgU3RyaW5nOwotCi1jbGFzcyBIVE1MUXVvdGVFbGVtZW50IDogcHVi
bGljIEhUTUxFbGVtZW50Ci17CitjbGFzcyBIVE1MUXVvdGVFbGVtZW50IDogcHVibGljIEhUTUxF
bGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1MUXVvdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwotICAgIAorCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjaXRlKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRDaXRlKGNvbnN0IEF0b21pY1N0cmluZyYpOworCitwcml2YXRl
OiAgICAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50
b0RvY3VtZW50KCk7Ci0KLSAgICBTdHJpbmcgY2l0ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2l0
ZShjb25zdCBTdHJpbmcmKTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxT
Y3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNj
cmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsOSBAQCBIVE1MU2Ny
aXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoY29uCiAgICAgbV9kYXRhLnNldENyZWF0ZWRC
eVBhcnNlcihjcmVhdGVkQnlQYXJzZXIpOwogfQogCi1IVE1MU2NyaXB0RWxlbWVudDo6fkhUTUxT
Y3JpcHRFbGVtZW50KCkKLXsKLX0KLQogYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6aXNVUkxBdHRy
aWJ1dGUoQXR0cmlidXRlKiBhdHRyKSBjb25zdAogewotICAgIHJldHVybiBhdHRyLT5uYW1lKCkg
PT0gc291cmNlQXR0cmlidXRlVmFsdWUoKTsKKyAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IGdl
dEF0dHJpYnV0ZShzcmNBdHRyKTsKIH0KIAogYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6c2hvdWxk
RXhlY3V0ZUFzSmF2YVNjcmlwdCgpIGNvbnN0CkBAIC03NSwxNCArNzEsMTQgQEAgdm9pZCBIVE1M
U2NyaXB0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogCiB2b2lkIEhUTUxTY3JpcHRFbGVtZW50
OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogewotICAgIFNjcmlwdEVsZW1lbnQ6OmZpbmlzaFBh
cnNpbmdDaGlsZHJlbihtX2RhdGEsIHNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkpOworICAgIFNjcmlw
dEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbihtX2RhdGEsIGdldEF0dHJpYnV0ZShzcmNB
dHRyKSk7CiAgICAgSFRNTEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwogfQogCiB2
b2lkIEhUTUxTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7CiAgICAgSFRN
TEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgU2NyaXB0RWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQobV9kYXRhLCBzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpKTsKKyAgICBT
Y3JpcHRFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudChtX2RhdGEsIGdldEF0dHJpYnV0ZShz
cmNBdHRyKSk7CiB9CiAKIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1l
bnQoKQpAQCAtOTYsNyArOTIsNyBAQCBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OnRleHQoKSBj
b25zdAogICAgIHJldHVybiBtX2RhdGEuc2NyaXB0Q29udGVudCgpOwogfQogCi12b2lkIEhUTUxT
Y3JpcHRFbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxTY3Jp
cHRFbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgaW50IG51bUNoaWxkcmVuID0gY2hpbGROb2RlQ291bnQoKTsKQEAg
LTEzNCwxMiArMTMwLDEyIEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldEV2ZW50KGNvbnN0
IFMKICAgICAvLyBET00gTGV2ZWwgMSBzYXlzOiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KIH0K
IAotU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpjaGFyc2V0KCkgY29uc3QKK2NvbnN0IEF0b21p
Y1N0cmluZyYgSFRNTFNjcmlwdEVsZW1lbnQ6OmNoYXJzZXQoKSBjb25zdAogewotICAgIHJldHVy
biBjaGFyc2V0QXR0cmlidXRlVmFsdWUoKTsKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNoYXJz
ZXRBdHRyKTsKIH0KIAotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0Q2hhcnNldChjb25zdCBT
dHJpbmcgJnZhbHVlKQordm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0Q2hhcnNldChjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShjaGFyc2V0QXR0ciwgdmFs
dWUpOwogfQpAQCAtMTU2LDIwICsxNTIsMjAgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0
RGVmZXIoYm9vbCBkZQogCiBLVVJMIEhUTUxTY3JpcHRFbGVtZW50OjpzcmMoKSBjb25zdAogewot
ICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgp
KTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0
dHIpKTsKIH0KIAotdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyAm
dmFsdWUpCit2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpzZXRTcmMoY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdmFsdWUpOwogfQogCi1TdHJp
bmcgSFRNTFNjcmlwdEVsZW1lbnQ6OnR5cGUoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MU2NyaXB0RWxlbWVudDo6dHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHR5cGVBdHRyaWJ1
dGVWYWx1ZSgpOworICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogfQogCi12b2lk
IEhUTUxTY3JpcHRFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhU
TUxTY3JpcHRFbGVtZW50OjpzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAg
ICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB2YWx1ZSk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFNjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNjcmlw
dEVsZW1lbnQuaAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTI0LDMxICsyNCwxNiBAQAogI2lmbmRlZiBIVE1MU2NyaXB0RWxlbWVudF9oCiAjZGVm
aW5lIEhUTUxTY3JpcHRFbGVtZW50X2gKIAotI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBIVE1MU2NyaXB0RWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgU2NyaXB0RWxlbWVudCB7
CitjbGFzcyBIVE1MU2NyaXB0RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIFNj
cmlwdEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxTY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKLSAgICB+SFRNTFNj
cmlwdEVsZW1lbnQoKTsKIAogICAgIGJvb2wgc2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIHNjcmlwdENvbnRlbnQoKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0No
aWxkKSB7IHJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpOyB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0gICAgdmlydHVhbCB2
b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9t
RG9jdW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdl
ZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hh
bmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwotCi0gICAgdmlydHVhbCBib29sIGlz
VVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQ
YXJzaW5nQ2hpbGRyZW4oKTsKIAogICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRUZXh0KGNvbnN0IFN0cmluZyYpOwpAQCAtNTksMjUgKzQ0LDI0IEBAIHB1YmxpYzoKICAgICBT
dHJpbmcgZXZlbnQoKSBjb25zdDsKICAgICB2b2lkIHNldEV2ZW50KGNvbnN0IFN0cmluZyYpOwog
Ci0gICAgU3RyaW5nIGNoYXJzZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldENoYXJzZXQoY29uc3Qg
U3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjaGFyc2V0KCkgY29uc3Q7CisgICAg
dm9pZCBzZXRDaGFyc2V0KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgYm9vbCBkZWZlcigp
IGNvbnN0OwogICAgIHZvaWQgc2V0RGVmZXIoYm9vbCk7CiAKICAgICBLVVJMIHNyYygpIGNvbnN0
OwotICAgIHZvaWQgc2V0U3JjKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0U3JjKGNvbnN0
IEF0b21pY1N0cmluZyYpOwogCi0gICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICB2b2lkIHNl
dFR5cGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBzY3JpcHRDaGFyc2V0
KCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OworICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VHlwZShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAog
ICAgIGJvb2wgaGF2ZUZpcmVkTG9hZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmhhdmVG
aXJlZExvYWRFdmVudCgpOyB9CiAKLXByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFN0cmluZyBzY3Jp
cHRDb250ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgc2NyaXB0Q2hhcnNldCgpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBzb3VyY2VBdHRyaWJ1dGVW
YWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGNoYXJzZXRBdHRyaWJ1dGVWYWx1ZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwpA
QCAtODYsNyArNzAsMjAgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaExv
YWRFdmVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEVycm9yRXZlbnQoKTsKIAotcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RI
YXNoU2V0PEtVUkw+JikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlz
VGV4dE5vZGUoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CisgICAgdmlydHVhbCB2
b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBi
ZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVs
dGEgPSAwKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKICAgICBT
Y3JpcHRFbGVtZW50RGF0YSBtX2RhdGE7CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNv
dXJjZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTAgKzQ0LDYgQEAgSFRNTFNvdXJjZUVsZW1l
bnQ6OkhUTUxTb3VyY2VFbGVtZW50KGNvbgogICAgIEFTU0VSVChoYXNUYWdOYW1lKHNvdXJjZVRh
ZykpOwogfQogCi1IVE1MU291cmNlRWxlbWVudDo6fkhUTUxTb3VyY2VFbGVtZW50KCkKLXsKLX0K
LQogdm9pZCBIVE1MU291cmNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAg
IEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwpAQCAtNjMsMjcgKzU5LDI3IEBA
IEtVUkwgSFRNTFNvdXJjZUVsZW1lbnQ6OnNyYygpIGNvbnN0CiAgICAgcmV0dXJuIGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9CiAKLXZvaWQgSFRNTFNv
dXJjZUVsZW1lbnQ6OnNldFNyYyhjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgSFRNTFNvdXJjZUVs
ZW1lbnQ6OnNldFNyYyhjb25zdCBBdG9taWNTdHJpbmcmIHVybCkKIHsKICAgICBzZXRBdHRyaWJ1
dGUoc3JjQXR0ciwgdXJsKTsKIH0KIAotU3RyaW5nIEhUTUxTb3VyY2VFbGVtZW50OjptZWRpYSgp
IGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxTb3VyY2VFbGVtZW50OjptZWRpYSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShtZWRpYUF0dHIpOwogfQogCi12b2lkIEhU
TUxTb3VyY2VFbGVtZW50OjpzZXRNZWRpYShjb25zdCBTdHJpbmcmIG1lZGlhKQordm9pZCBIVE1M
U291cmNlRWxlbWVudDo6c2V0TWVkaWEoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYSkKIHsKICAg
ICBzZXRBdHRyaWJ1dGUobWVkaWFBdHRyLCBtZWRpYSk7CiB9CiAKLVN0cmluZyBIVE1MU291cmNl
RWxlbWVudDo6dHlwZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxTb3VyY2VFbGVt
ZW50Ojp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsK
IH0KIAotdm9pZCBIVE1MU291cmNlRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUp
Cit2b2lkIEhUTUxTb3VyY2VFbGVtZW50OjpzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHR5cGUpOwogfQpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxTb3VyY2VFbGVtZW50LmgJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxT
b3VyY2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcgKzI5LDYgQEAK
ICNpZiBFTkFCTEUoVklERU8pCiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUg
PGxpbWl0cz4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCwyMiArMzcsMjQgQEAgY2xh
c3MgS1VSTDsKIGNsYXNzIEhUTUxTb3VyY2VFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsK
IHB1YmxpYzoKICAgICBIVE1MU291cmNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5IVE1MU291cmNlRWxlbWVudCgpOwogCisgICAgS1VSTCBz
cmMoKSBjb25zdDsKKyAgICB2b2lkIHNldFNyYyhjb25zdCBBdG9taWNTdHJpbmcmKTsgICAgCisK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFR5cGUo
Y29uc3QgQXRvbWljU3RyaW5nJik7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRNZWRpYShjb25zdCBBdG9taWNTdHJpbmcmKTsKKworcHJpdmF0
ZToKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICAKKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0gICAgCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50
b0RvY3VtZW50KCk7Ci0gICAgCi0gICAgS1VSTCBzcmMoKSBjb25zdDsKLSAgICBTdHJpbmcgbWVk
aWEoKSBjb25zdDsKLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3JjKGNv
bnN0IFN0cmluZyYpOyAgICAKLSAgICB2b2lkIHNldE1lZGlhKGNvbnN0IFN0cmluZyYpOwotICAg
IHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmKTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKIAogI2Vu
ZGlmCisKICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDYXB0aW9uRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAKLS8qKgorLyoKICAqIENv
cHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMgKG1qb25lc0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQogICogICAgICAgICAgIChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDYgKzIxLDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCIKIApAQCAtNTMsMTUgKzU0LDE1
IEBAIHZvaWQgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGUKICAgICAgICAgaWYg
KCFhdHRyLT52YWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU1Byb3BlcnR5Q2FwdGlvblNpZGUsIGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZQot
ICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAg
IEhUTUxUYWJsZVBhcnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAot
U3RyaW5nIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjphbGlnbigpIGNvbnN0Citjb25zdCBBdG9t
aWNTdHJpbmcmIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjphbGlnbigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwogfQogCi12b2lkIEhUTUxUYWJsZUNhcHRp
b25FbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MVGFibGVD
YXB0aW9uRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgQXRvbWljU3RyaW5nICZ2YWx1ZSkKIHsKICAg
ICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2YWx1ZSk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAK
ICAqICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsMTkgKzMwLDE5IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQg
OiBwdWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnQKLXsKK2NsYXNzIEhUTUxUYWJsZUNhcHRpb25F
bGVtZW50IDogcHVibGljIEhUTUxUYWJsZVBhcnRFbGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1M
VGFibGVDYXB0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAg
ICAKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWxpZ24oKSBjb25zdDsKKyAgICB2b2lkIHNl
dEFsaWduKGNvbnN0IEF0b21pY1N0cmluZyYpOworCitwcml2YXRlOgogICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1
OyB9CiAgICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgU3RyaW5nIGFsaWduKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKIH07CiAKIH0gLy9uYW1l
c3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAkocmV2aXNpb24g
NDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEyICsxLDEwIEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAx
OTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTcg
VG9yYmVuIFdlaXMgKHdlaXNAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBC
YXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjMsNiArMjEsNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJI
VE1MVGFibGVDZWxsRWxlbWVudC5oIgogCkBAIC0zNywzNCArMzYsMjUgQEAgdXNpbmcgc3RkOjpt
aW47CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ2xhbXAgcm93c3BhbiBhdCA4ayB0byBt
YXRjaCBGaXJlZm94Lgotc3RhdGljIGNvbnN0IGludCBtYXhSb3dzcGFuID0gODE5MDsKLQogdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorLy8gQ2xhbXAgcm93U3BhbiBhdCBhYm91dCA4SyB0
byBtYXRjaCBGaXJlZm94Lgorc3RhdGljIGNvbnN0IGludCBtYXhSb3dTcGFuID0gODE5MDsKKwog
SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OkhUTUxUYWJsZUNlbGxFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCiAgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVu
dCh0YWdOYW1lLCBkb2MpCi0gICAgLCBfcm93KC0xKQotICAgICwgX2NvbCgtMSkKLSAgICAsIHJT
cGFuKDEpCi0gICAgLCBjU3BhbigxKQotICAgICwgcm93SGVpZ2h0KDApCi0gICAgLCBtX3NvbGlk
KGZhbHNlKQotewotfQotCi1IVE1MVGFibGVDZWxsRWxlbWVudDo6fkhUTUxUYWJsZUNlbGxFbGVt
ZW50KCkKKyAgICAsIG1fcm93KC0xKQorICAgICwgbV9jb2woLTEpCisgICAgLCBtX3Jvd1NwYW4o
MSkKKyAgICAsIG1fY29sU3BhbigxKQogewogfQogCiBpbnQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6
OmNlbGxJbmRleCgpIGNvbnN0CiB7CiAgICAgaW50IGluZGV4ID0gMDsKLSAgICBmb3IgKGNvbnN0
IE5vZGUgKiBub2RlID0gcHJldmlvdXNTaWJsaW5nKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2
aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZSh0ZFRhZykgfHwg
bm9kZS0+aGFzVGFnTmFtZSh0aFRhZykpCi0gICAgICAgICAgICBpbmRleCsrOwotICAgIH0KLSAg
ICAKKyAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSBwcmV2aW91c1NpYmxpbmcoKTsgbm9kZTsg
bm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKQorICAgICAgICBpbmRleCArPSBub2RlLT5o
YXNUYWdOYW1lKHRkVGFnKSArIG5vZGUtPmhhc1RhZ05hbWUodGhUYWcpOwogICAgIHJldHVybiBp
bmRleDsKIH0KIApAQCAtNzQsOSArNjQsOCBAQCBib29sIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojpt
YXBUb0VudHJ5KGNvCiAgICAgICAgIHJlc3VsdCA9IGVVbml2ZXJzYWw7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0ciB8fAot
ICAgICAgICBhdHRyTmFtZSA9PSBoZWlnaHRBdHRyKSB7CisKKyAgICBpZiAoYXR0ck5hbWUgPT0g
d2lkdGhBdHRyIHx8IGF0dHJOYW1lID09IGhlaWdodEF0dHIpIHsKICAgICAgICAgcmVzdWx0ID0g
ZUNlbGw7IC8vIEJlY2F1c2Ugb2YgdGhlIHF1aXJreSBiZWhhdmlvciBvZiBpZ25vcmluZyAwIHZh
bHVlcywgY2VsbHMgYXJlIHNwZWNpYWwuCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBA
IC04NywzMCArNzYsMjQgQEAgYm9vbCBIVE1MVGFibGVDZWxsRWxlbWVudDo6bWFwVG9FbnRyeShj
bwogdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcm93c3BhbkF0dHIp
IHsKLSAgICAgICAgclNwYW4gPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50
KCkgOiAxOwotICAgICAgICByU3BhbiA9IG1heCgxLCBtaW4oclNwYW4sIG1heFJvd3NwYW4pKTsK
KyAgICAgICAgbV9yb3dTcGFuID0gYXR0ci0+aXNOdWxsKCkgPyAxIDogbWF4KDEsIG1pbihhdHRy
LT52YWx1ZSgpLnRvSW50KCksIG1heFJvd1NwYW4pKTsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkg
JiYgcmVuZGVyZXIoKS0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJl
bmRlclRhYmxlQ2VsbCo+KHJlbmRlcmVyKCkpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvbHNwYW5BdHRyKSB7Ci0gICAgICAgIGNTcGFuID0g
IWF0dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgpIDogMTsKLSAgICAgICAgY1Nw
YW4gPSBtYXgoMSwgY1NwYW4pOworICAgICAgICBtX2NvbFNwYW4gPSBhdHRyLT5pc051bGwoKSA/
IDEgOiBtYXgoMSwgYXR0ci0+dmFsdWUoKS50b0ludCgpKTsKICAgICAgICAgaWYgKHJlbmRlcmVy
KCkgJiYgcmVuZGVyZXIoKS0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlclRhYmxlQ2VsbCo+KHJlbmRlcmVyKCkpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5vd3JhcEF0dHIpIHsKICAgICAgICAgaWYgKCFh
dHRyLT5pc051bGwoKSkKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU1Byb3Bl
cnR5V2hpdGVTcGFjZSwgQ1NTVmFsdWVXZWJraXROb3dyYXApOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IHdpZHRoQXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBpbnQgd2lkdGhJbnQgPSBhdHRyLT52YWx1ZSgpLnRvSW50
KCk7Ci0gICAgICAgICAgICBpZiAod2lkdGhJbnQgPiAwKSAvLyB3aWR0aD0iMCIgaXMgaWdub3Jl
ZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFdpbklFLgotICAgICAgICAgICAgICAgIGFkZENTU0xl
bmd0aChhdHRyLCBDU1NQcm9wZXJ0eVdpZHRoLCBhdHRyLT52YWx1ZSgpKTsKLSAgICAgICAgfQor
ICAgICAgICBpbnQgd2lkdGhJbnQgPSBhdHRyLT52YWx1ZSgpLnRvSW50KCk7CisgICAgICAgIGlm
ICh3aWR0aEludCA+IDApIC8vIHdpZHRoPSIwIiBpcyBpZ25vcmVkIGZvciBjb21wYXRpYmlsaXR5
IHdpdGggV2luSUUuCisgICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTUHJvcGVydHlX
aWR0aCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaGVp
Z2h0QXR0cikgewotICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBpbnQgaGVpZ2h0SW50ID0gYXR0ci0+dmFsdWUoKS50b0ludCgpOwotICAgICAgICAg
ICAgaWYgKGhlaWdodEludCA+IDApIC8vIGhlaWdodD0iMCIgaXMgaWdub3JlZCBmb3IgY29tcGF0
aWJpbGl0eSB3aXRoIFdpbklFLgotICAgICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBD
U1NQcm9wZXJ0eUhlaWdodCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaW50
IGhlaWdodEludCA9IGF0dHItPnZhbHVlKCkudG9JbnQoKTsKKyAgICAgICAgaWYgKGhlaWdodElu
dCA+IDApIC8vIGhlaWdodD0iMCIgaXMgaWdub3JlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFdp
bklFLgorICAgICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5SGVpZ2h0LCBh
dHRyLT52YWx1ZSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgSFRNTFRhYmxlUGFydEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtMTE4LDc1ICsxMDEsNzUgQEAgdm9p
ZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6cGFyc2VNYXBwZWRBdAogLy8gdXNlZCBieSB0YWJsZSBj
ZWxscyB0byBzaGFyZSBzdHlsZSBkZWNscyBjcmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUu
CiB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNs
cyhWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiYgcmVzdWx0cykKIHsKLSAgICBO
b2RlKiBwID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChwICYmICFwLT5oYXNUYWdOYW1lKHRh
YmxlVGFnKSkKLSAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXApCisgICAg
Tm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUgKGFuY2VzdG9yICYmICFh
bmNlc3Rvci0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCisgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0
b3ItPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIWFuY2VzdG9yKQogICAgICAgICByZXR1cm47Ci0g
ICAgc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KHApLT5hZGRTaGFyZWRDZWxsRGVjbHMo
cmVzdWx0cyk7CisgICAgc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KGFuY2VzdG9yKS0+
YWRkU2hhcmVkQ2VsbERlY2xzKHJlc3VsdHMpOwogfQogCi1ib29sIEhUTUxUYWJsZUNlbGxFbGVt
ZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0Citib29sIEhUTUxUYWJs
ZUNlbGxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHJpYnV0ZSkgY29uc3QK
IHsKLSAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IGJhY2tncm91bmRBdHRyOworICAgIHJldHVy
biBhdHRyaWJ1dGUtPm5hbWUoKSA9PSBiYWNrZ3JvdW5kQXR0cjsKIH0KIAotU3RyaW5nIEhUTUxU
YWJsZUNlbGxFbGVtZW50OjphYmJyKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFRh
YmxlQ2VsbEVsZW1lbnQ6OmFiYnIoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
YWJickF0dHIpOwogfQogCi12b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRBYmJyKGNvbnN0
IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRBYmJyKGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGFiYnJBdHRyLCB2YWx1
ZSk7CiB9CiAKLVN0cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6YWxpZ24oKSBjb25zdAorY29u
c3QgQXRvbWljU3RyaW5nJiBIVE1MVGFibGVDZWxsRWxlbWVudDo6YWxpZ24oKSBjb25zdAogewog
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVD
ZWxsRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTFRhYmxl
Q2VsbEVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAg
c2V0QXR0cmlidXRlKGFsaWduQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ6OmF4aXMoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVGFibGVDZWxs
RWxlbWVudDo6YXhpcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShheGlzQXR0
cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldEF4aXMoY29uc3QgU3RyaW5n
ICZ2YWx1ZSkKK3ZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldEF4aXMoY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoYXhpc0F0dHIsIHZhbHVlKTsKIH0K
IAotU3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpiZ0NvbG9yKCkgY29uc3QKK2NvbnN0IEF0
b21pY1N0cmluZyYgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmJnQ29sb3IoKSBjb25zdAogewogICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUoYmdjb2xvckF0dHIpOwogfQogCi12b2lkIEhUTUxUYWJsZUNl
bGxFbGVtZW50OjpzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxUYWJs
ZUNlbGxFbGVtZW50OjpzZXRCZ0NvbG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAg
ICAgc2V0QXR0cmlidXRlKGJnY29sb3JBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MVGFi
bGVDZWxsRWxlbWVudDo6Y2goKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVGFibGVD
ZWxsRWxlbWVudDo6Y2goKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY2hhckF0
dHIpOwogfQogCi12b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRDaChjb25zdCBTdHJpbmcg
JnZhbHVlKQordm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Q2goY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoY2hhckF0dHIsIHZhbHVlKTsKIH0KIAot
U3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpjaE9mZigpIGNvbnN0Citjb25zdCBBdG9taWNT
dHJpbmcmIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpjaE9mZigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShjaGFyb2ZmQXR0cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1l
bnQ6OnNldENoT2ZmKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxUYWJsZUNlbGxFbGVt
ZW50OjpzZXRDaE9mZihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJp
YnV0ZShjaGFyb2ZmQXR0ciwgdmFsdWUpOwogfQpAQCAtMTk2LDIyICsxNzksMjIgQEAgdm9pZCBI
VE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Q29sU3BhbihpbgogICAgIHNldEF0dHJpYnV0ZShjb2xz
cGFuQXR0ciwgU3RyaW5nOjpudW1iZXIobikpOwogfQogCi1TdHJpbmcgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQ6OmhlYWRlcnMoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVGFibGVDZWxs
RWxlbWVudDo6aGVhZGVycygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoZWFk
ZXJzQXR0cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldEhlYWRlcnMoY29u
c3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldEhlYWRlcnMo
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoaGVhZGVyc0F0
dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpoZWlnaHQoKSBj
b25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVGFibGVDZWxsRWxlbWVudDo6aGVpZ2h0KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIpOwogfQogCi12b2lk
IEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRIZWlnaHQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3Zv
aWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldEhlaWdodChjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKQogewogICAgIHNldEF0dHJpYnV0ZShoZWlnaHRBdHRyLCB2YWx1ZSk7CiB9CkBAIC0yMzEs
MzIgKzIxNCwzMiBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRSb3dTcGFuKGluCiAg
ICAgc2V0QXR0cmlidXRlKHJvd3NwYW5BdHRyLCBTdHJpbmc6Om51bWJlcihuKSk7CiB9CiAKLVN0
cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2NvcGUoKSBjb25zdAorY29uc3QgQXRvbWljU3Ry
aW5nJiBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2NvcGUoKSBjb25zdAogewogICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUoc2NvcGVBdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6
c2V0U2NvcGUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6
OnNldFNjb3BlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRl
KHNjb3BlQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnZB
bGlnbigpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojp2
QWxpZ24oKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodmFsaWduQXR0cik7CiB9
CiAKLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldFZBbGlnbihjb25zdCBTdHJpbmcgJnZh
bHVlKQordm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0VkFsaWduKGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHZhbGlnbkF0dHIsIHZhbHVlKTsKIH0K
IAotU3RyaW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Citjb25zdCBBdG9t
aWNTdHJpbmcmIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojp3aWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwogfQogCi12b2lkIEhUTUxUYWJsZUNlbGxFbGVt
ZW50OjpzZXRXaWR0aChjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MVGFibGVDZWxsRWxl
bWVudDo6c2V0V2lkdGgoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRy
aWJ1dGUod2lkdGhBdHRyLCB2YWx1ZSk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxl
Q2VsbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQuaAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMSwxMCBAQAogLyoKLSAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5
cmlnaHQgKEMpIDE5OTcgTWFydGluIEpvbmVzIChtam9uZXNAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vpc0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAx
OTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw4NSArMzAsNzkgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBIVE1MVGFibGVDZWxsRWxlbWVudCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0
RWxlbWVudAoteworY2xhc3MgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgOiBwdWJsaWMgSFRNTFRhYmxl
UGFydEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgIH5IVE1MVGFibGVDZWxsRWxlbWVudCgpOwot
Ci0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIDY7IH0KIAogICAgIGludCBjZWxsSW5kZXgoKSBjb25zdDsKIAotICAg
IGludCBjb2woKSBjb25zdCB7IHJldHVybiBfY29sOyB9Ci0gICAgdm9pZCBzZXRDb2woaW50IGNv
bCkgeyBfY29sID0gY29sOyB9Ci0gICAgaW50IHJvdygpIGNvbnN0IHsgcmV0dXJuIF9yb3c7IH0K
LSAgICB2b2lkIHNldFJvdyhpbnQgcikgeyBfcm93ID0gcjsgfQotCi0gICAgaW50IGNvbFNwYW4o
KSBjb25zdCB7IHJldHVybiBjU3BhbjsgfQotICAgIGludCByb3dTcGFuKCkgY29uc3QgeyByZXR1
cm4gclNwYW47IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKLQotICAgIC8vIHVzZWQgYnkg
dGFibGUgY2VsbHMgdG8gc2hhcmUgc3R5bGUgZGVjbHMgY3JlYXRlZCBieSB0aGUgZW5jbG9zaW5n
IHRhYmxlLgotICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxl
RGVjbHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFkZGl0aW9u
YWxBdHRyaWJ1dGVTdHlsZURlY2xzKFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+
Jik7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNv
bnN0OworICAgIGludCBjb2woKSBjb25zdCB7IHJldHVybiBtX2NvbDsgfQorICAgIHZvaWQgc2V0
Q29sKGludCBjb2wpIHsgbV9jb2wgPSBjb2w7IH0KKyAgICBpbnQgcm93KCkgY29uc3QgeyByZXR1
cm4gbV9yb3c7IH0KKyAgICB2b2lkIHNldFJvdyhpbnQgcm93KSB7IG1fcm93ID0gcm93OyB9CiAK
LSAgICB2b2lkIHNldENlbGxJbmRleChpbnQpOworICAgIGludCBjb2xTcGFuKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2xTcGFuOyB9CisgICAgaW50IHJvd1NwYW4oKSBjb25zdCB7IHJldHVybiBtX3Jv
d1NwYW47IH0KIAotICAgIFN0cmluZyBhYmJyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBYmJyKGNv
bnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWJicigpIGNvbnN0OworICAg
IHZvaWQgc2V0QWJicihjb25zdCBBdG9taWNTdHJpbmcmKTsKIAotICAgIFN0cmluZyBhbGlnbigp
IGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBhbGlnbigpIGNvbnN0OworICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgQXRvbWlj
U3RyaW5nJik7CiAKLSAgICBTdHJpbmcgYXhpcygpIGNvbnN0OwotICAgIHZvaWQgc2V0QXhpcyhj
b25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF4aXMoKSBjb25zdDsKKyAg
ICB2b2lkIHNldEF4aXMoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgYmdDb2xv
cigpIGNvbnN0OwotICAgIHZvaWQgc2V0QmdDb2xvcihjb25zdCBTdHJpbmcmKTsKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGJnQ29sb3IoKSBjb25zdDsKKyAgICB2b2lkIHNldEJnQ29sb3IoY29u
c3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgY2goKSBjb25zdDsKLSAgICB2b2lkIHNl
dENoKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2goKSBjb25zdDsK
KyAgICB2b2lkIHNldENoKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCi0gICAgU3RyaW5nIGNoT2Zm
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaE9mZihjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGNoT2ZmKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDaE9mZihjb25zdCBBdG9t
aWNTdHJpbmcmKTsKIAogICAgIHZvaWQgc2V0Q29sU3BhbihpbnQpOwogCi0gICAgU3RyaW5nIGhl
YWRlcnMoKSBjb25zdDsKLSAgICB2b2lkIHNldEhlYWRlcnMoY29uc3QgU3RyaW5nJik7CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBoZWFkZXJzKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIZWFkZXJz
KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCi0gICAgU3RyaW5nIGhlaWdodCgpIGNvbnN0OwotICAg
IHZvaWQgc2V0SGVpZ2h0KGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
aGVpZ2h0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJik7
CiAKICAgICBib29sIG5vV3JhcCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Tm9XcmFwKGJvb2wpOwog
CiAgICAgdm9pZCBzZXRSb3dTcGFuKGludCk7CiAKLSAgICBTdHJpbmcgc2NvcGUoKSBjb25zdDsK
LSAgICB2b2lkIHNldFNjb3BlKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2NvcGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNjb3BlKGNvbnN0IEF0b21pY1N0cmluZyYp
OworCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2QWxpZ24oKSBjb25zdDsKKyAgICB2b2lkIHNl
dFZBbGlnbihjb25zdCBBdG9taWNTdHJpbmcmKTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
d2lkdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldFdpZHRoKGNvbnN0IEF0b21pY1N0cmluZyYpOwor
Citwcml2YXRlOgorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA2OyB9CiAKLSAgICBTdHJpbmcgdkFsaWduKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRWQWxpZ24oY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29s
IG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5Jikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSopOwogCi0gICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aChj
b25zdCBTdHJpbmcmKTsKKyAgICAvLyBVc2VkIGJ5IHRhYmxlIGNlbGxzIHRvIHNoYXJlIHN0eWxl
IGRlY2xzIGNyZWF0ZWQgYnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KKyAgICB2aXJ0dWFsIGJvb2wg
Y2FuSGF2ZUFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscyhWZWN0
b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiYpOworICAgIAorICAgIHZpcnR1YWwgYm9v
bCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIAot
cHJvdGVjdGVkOgotICAgIGludCBfcm93OwotICAgIGludCBfY29sOwotICAgIGludCByU3BhbjsK
LSAgICBpbnQgY1NwYW47Ci0gICAgaW50IHJvd0hlaWdodDsKLSAgICBib29sIG1fc29saWQ7Cisg
ICAgaW50IG1fcm93OworICAgIGludCBtX2NvbDsKKyAgICBpbnQgbV9yb3dTcGFuOworICAgIGlu
dCBtX2NvbFNwYW47CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TFRhYmxlQ29sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJs
ZUNvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFi
bGVDb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMSwxMCBAQAotLyoqCi0g
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0g
KgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMgKG1qb25lc0BrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM2LDEwICszNCwxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxUYWJs
ZUNvbEVsZW1lbnQ6OkhUTUxUYWJsZUNvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50KHRhZ05hbWUs
IGRvYykKK0hUTUxUYWJsZUNvbEVsZW1lbnQ6OkhUTUxUYWJsZUNvbEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTFRhYmxl
UGFydEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX3NwYW4oMSkKIHsKLSAgICBf
c3BhbiA9IDE7CiB9CiAKIEhUTUxUYWdTdGF0dXMgSFRNTFRhYmxlQ29sRWxlbWVudDo6ZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdApAQCAtNTYsOSArNTQsMTAgQEAgYm9vbCBIVE1MVGFibGVDb2xF
bGVtZW50OjpjaGVja0RURChjb25zdAogewogICAgIGlmIChoYXNMb2NhbE5hbWUoY29sVGFnKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgaWYgKG5ld0NoaWxkLT5pc1RleHRO
b2RlKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBUZXh0Kj4obmV3Q2hpbGQp
LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCk7CisKICAgICByZXR1cm4gbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoY29sVGFnKTsKIH0KIApAQCAtNzUsNyArNzQsOCBAQCBib29sIEhUTUxUYWJsZUNvbEVs
ZW1lbnQ6Om1hcFRvRW50cnkoY29uCiB2b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IHNwYW5BdHRyKSB7Ci0gICAgICAgIF9zcGFuID0gIWF0dHItPmlzTnVsbCgpID8gYXR0
ci0+dmFsdWUoKS50b0ludCgpIDogMTsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGVu
Zm9yY2UgYSBtaW5pbXVtIG9mIDEgdGhlIHdheSBIVE1MVGFibGVDZWxsRWxlbWVudCBkb2VzPwor
ICAgICAgICBtX3NwYW4gPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkg
OiAxOwogICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1RhYmxlQ29sKCkp
CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNvbCo+KHJlbmRlcmVyKCkpLT51
cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHdpZHRo
QXR0cikgewpAQCAtOTAsNDAgKzkwLDQwIEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxlbWVudDo6YWRk
aXRpb25hbEF0dHIKIHsKICAgICBpZiAoIWhhc0xvY2FsTmFtZShjb2xncm91cFRhZykpCiAgICAg
ICAgIHJldHVybjsKLSAgICBOb2RlKiBwID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChwICYm
ICFwLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKLSAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUoKTsK
LSAgICBpZiAoIXApCisgICAgTm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2RlKCk7CisgICAgd2hp
bGUgKGFuY2VzdG9yICYmICFhbmNlc3Rvci0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCisgICAgICAg
IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIWFuY2VzdG9yKQog
ICAgICAgICByZXR1cm47Ci0gICAgc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KHApLT5h
ZGRTaGFyZWRHcm91cERlY2xzKGZhbHNlLCByZXN1bHRzKTsKKyAgICBzdGF0aWNfY2FzdDxIVE1M
VGFibGVFbGVtZW50Kj4oYW5jZXN0b3IpLT5hZGRTaGFyZWRHcm91cERlY2xzKGZhbHNlLCByZXN1
bHRzKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OmFsaWduKCkgY29uc3QKK2Nv
bnN0IEF0b21pY1N0cmluZyYgSFRNTFRhYmxlQ29sRWxlbWVudDo6YWxpZ24oKSBjb25zdAogewog
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVD
b2xFbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MVGFibGVD
b2xFbGVtZW50OjpzZXRBbGlnbihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNl
dEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUNvbEVs
ZW1lbnQ6OmNoKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFRhYmxlQ29sRWxlbWVu
dDo6Y2goKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY2hhckF0dHIpOwogfQog
Ci12b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OnNldENoKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2
b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OnNldENoKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
CiB7CiAgICAgc2V0QXR0cmlidXRlKGNoYXJBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1M
VGFibGVDb2xFbGVtZW50OjpjaE9mZigpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxU
YWJsZUNvbEVsZW1lbnQ6OmNoT2ZmKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KGNoYXJvZmZBdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVDb2xFbGVtZW50OjpzZXRDaE9mZihj
b25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MVGFibGVDb2xFbGVtZW50OjpzZXRDaE9mZihj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShjaGFyb2ZmQXR0
ciwgdmFsdWUpOwogfQpAQCAtMTMzLDIyICsxMzMsMjIgQEAgdm9pZCBIVE1MVGFibGVDb2xFbGVt
ZW50OjpzZXRTcGFuKGludCBuKQogICAgIHNldEF0dHJpYnV0ZShzcGFuQXR0ciwgU3RyaW5nOjpu
dW1iZXIobikpOwogfQogCi1TdHJpbmcgSFRNTFRhYmxlQ29sRWxlbWVudDo6dkFsaWduKCkgY29u
c3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFRhYmxlQ29sRWxlbWVudDo6dkFsaWduKCkgY29u
c3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZhbGlnbkF0dHIpOwogfQogCi12b2lkIEhU
TUxUYWJsZUNvbEVsZW1lbnQ6OnNldFZBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBI
VE1MVGFibGVDb2xFbGVtZW50OjpzZXRWQWxpZ24oY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkK
IHsKICAgICBzZXRBdHRyaWJ1dGUodmFsaWduQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRN
TFRhYmxlQ29sRWxlbWVudDo6d2lkdGgoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1M
VGFibGVDb2xFbGVtZW50Ojp3aWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0
ZSh3aWR0aEF0dHIpOwogfQogCi12b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OnNldFdpZHRoKGNv
bnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OnNldFdpZHRoKGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwg
dmFsdWUpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5oCShyZXZpc2lvbiA0
Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTIgKzEsMTAgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9N
IGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk3IE1hcnRp
biBKb25lcyAobWpvbmVzQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdl
aXMgKHdlaXNAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChi
YXN0aWFuQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMzQsNDIgKzMyLDM5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTFRhYmxl
RWxlbWVudDsKIAotY2xhc3MgSFRNTFRhYmxlQ29sRWxlbWVudCA6IHB1YmxpYyBIVE1MVGFibGVQ
YXJ0RWxlbWVudAoteworY2xhc3MgSFRNTFRhYmxlQ29sRWxlbWVudCA6IHB1YmxpYyBIVE1MVGFi
bGVQYXJ0RWxlbWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxlQ29sRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwogCisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhbGlnbigpIGNvbnN0OworICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgQXRvbWljU3RyaW5n
Jik7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRD
aChjb25zdCBBdG9taWNTdHJpbmcmKTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2hPZmYo
KSBjb25zdDsKKyAgICB2b2lkIHNldENoT2ZmKGNvbnN0IEF0b21pY1N0cmluZyYpOworCisgICAg
aW50IHNwYW4oKSBjb25zdCB7IHJldHVybiBtX3NwYW47IH0KKyAgICB2b2lkIHNldFNwYW4oaW50
KTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdkFsaWduKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRWQWxpZ24oY29uc3QgQXRvbWljU3RyaW5nJik7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRXaWR0aChjb25zdCBBdG9taWNTdHJpbmcmKTsK
KworcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CiAKLSAgICAvLyBvdmVycmlkZXMKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmli
dXRlRW50cnkmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVBZGRpdGlvbmFsQXR0
cmlidXRlU3R5bGVEZWNscygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZv
aWQgYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbHMoVmVjdG9yPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKj4mKTsKICAgIAotICAgIGludCBzcGFuKCkgY29uc3QgeyByZXR1cm4gX3NwYW47
IH0KLQotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgY2goKSBjb25zdDsKLSAgICB2b2lkIHNldENoKGNvbnN0
IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGNoT2ZmKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaE9m
Zihjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgc2V0U3BhbihpbnQpOwotCi0gICAgU3RyaW5n
IHZBbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0VkFsaWduKGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgU3RyaW5nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aChjb25zdCBTdHJpbmcm
KTsKLQotcHJvdGVjdGVkOgotICAgIGludCBfc3BhbjsKKyAgICBpbnQgbV9zcGFuOwogfTsKIAog
fSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24g
NDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY1OCw5MiArNjU4LDkyIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxU
YWJsZUVsZW0KICAgICByZXR1cm4gSFRNTENvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBIVE1MQ29s
bGVjdGlvbjo6VGFibGVUQm9kaWVzKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OmFs
aWduKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFRhYmxlRWxlbWVudDo6YWxpZ24o
KSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsKIH0KIAotdm9p
ZCBIVE1MVGFibGVFbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBI
VE1MVGFibGVFbGVtZW50OjpzZXRBbGlnbihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewog
ICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJs
ZUVsZW1lbnQ6OmJnQ29sb3IoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVGFibGVF
bGVtZW50OjpiZ0NvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGJnY29s
b3JBdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRCZ0NvbG9yKGNvbnN0IFN0
cmluZyAmdmFsdWUpCit2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnNldEJnQ29sb3IoY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoYmdjb2xvckF0dHIsIHZhbHVl
KTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OmJvcmRlcigpIGNvbnN0Citjb25zdCBB
dG9taWNTdHJpbmcmIEhUTUxUYWJsZUVsZW1lbnQ6OmJvcmRlcigpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShib3JkZXJBdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVFbGVtZW50
OjpzZXRCb3JkZXIoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTFRhYmxlRWxlbWVudDo6
c2V0Qm9yZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRl
KGJvcmRlckF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OmNlbGxQ
YWRkaW5nKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFRhYmxlRWxlbWVudDo6Y2Vs
bFBhZGRpbmcoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY2VsbHBhZGRpbmdB
dHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRDZWxsUGFkZGluZyhjb25zdCBT
dHJpbmcgJnZhbHVlKQordm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRDZWxsUGFkZGluZyhjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShjZWxscGFkZGluZ0F0
dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OmNlbGxTcGFjaW5nKCkg
Y29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFRhYmxlRWxlbWVudDo6Y2VsbFNwYWNpbmco
KSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY2VsbHNwYWNpbmdBdHRyKTsKIH0K
IAotdm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRDZWxsU3BhY2luZyhjb25zdCBTdHJpbmcgJnZh
bHVlKQordm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRDZWxsU3BhY2luZyhjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShjZWxsc3BhY2luZ0F0dHIsIHZhbHVl
KTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OmZyYW1lKCkgY29uc3QKK2NvbnN0IEF0
b21pY1N0cmluZyYgSFRNTFRhYmxlRWxlbWVudDo6ZnJhbWUoKSBjb25zdAogewogICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoZnJhbWVBdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVFbGVtZW50Ojpz
ZXRGcmFtZShjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRG
cmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShmcmFt
ZUF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OnJ1bGVzKCkgY29u
c3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFRhYmxlRWxlbWVudDo6cnVsZXMoKSBjb25zdAog
ewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocnVsZXNBdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFi
bGVFbGVtZW50OjpzZXRSdWxlcyhjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MVGFibGVF
bGVtZW50OjpzZXRSdWxlcyhjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0
dHJpYnV0ZShydWxlc0F0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6
OnN1bW1hcnkoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVGFibGVFbGVtZW50Ojpz
dW1tYXJ5KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsK
IH0KIAotdm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRTdW1tYXJ5KGNvbnN0IFN0cmluZyAmdmFs
dWUpCit2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OnNldFN1bW1hcnkoY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoc3VtbWFyeUF0dHIsIHZhbHVlKTsKIH0KIAot
U3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OndpZHRoKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmlu
ZyYgSFRNTFRhYmxlRWxlbWVudDo6d2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUod2lkdGhBdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRXaWR0aChj
b25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MVGFibGVFbGVtZW50OjpzZXRXaWR0aChjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZSh3aWR0aEF0dHIsIHZh
bHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaAkocmV2aXNpb24gNDI4OTMpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwx
MCArMzgsNiBAQCBjbGFzcyBIVE1MVGFibGVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtCiBwdWJs
aWM6CiAgICAgSFRNTFRhYmxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiA5OyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0
IE5vZGUqKTsKLQogICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjYXB0aW9uKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRDYXB0aW9uKFBhc3NSZWZQdHI8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ+
LCBFeGNlcHRpb25Db2RlJik7CiAKQEAgLTYzLDMyICs1OSw0MCBAQCBwdWJsaWM6CiAgICAgUGFz
c1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gcm93cygpOwogICAgIFBhc3NSZWZQdHI8SFRNTENvbGxl
Y3Rpb24+IHRCb2RpZXMoKTsKIAotICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQg
c2V0QWxpZ24oY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbGlnbigp
IGNvbnN0OworICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBT
dHJpbmcgYmdDb2xvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0QmdDb2xvcihjb25zdCBTdHJpbmcm
KTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGJnQ29sb3IoKSBjb25zdDsKKyAgICB2b2lkIHNl
dEJnQ29sb3IoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgYm9yZGVyKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRCb3JkZXIoY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBib3JkZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldEJvcmRlcihjb25zdCBBdG9taWNT
dHJpbmcmKTsKIAotICAgIFN0cmluZyBjZWxsUGFkZGluZygpIGNvbnN0OwotICAgIHZvaWQgc2V0
Q2VsbFBhZGRpbmcoY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjZWxs
UGFkZGluZygpIGNvbnN0OworICAgIHZvaWQgc2V0Q2VsbFBhZGRpbmcoY29uc3QgQXRvbWljU3Ry
aW5nJik7CiAKLSAgICBTdHJpbmcgY2VsbFNwYWNpbmcoKSBjb25zdDsKLSAgICB2b2lkIHNldENl
bGxTcGFjaW5nKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2VsbFNw
YWNpbmcoKSBjb25zdDsKKyAgICB2b2lkIHNldENlbGxTcGFjaW5nKGNvbnN0IEF0b21pY1N0cmlu
ZyYpOwogCi0gICAgU3RyaW5nIGZyYW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGcmFtZShjb25z
dCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRGcmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAotICAgIFN0cmluZyBydWxlcygp
IGNvbnN0OwotICAgIHZvaWQgc2V0UnVsZXMoY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBydWxlcygpIGNvbnN0OworICAgIHZvaWQgc2V0UnVsZXMoY29uc3QgQXRvbWlj
U3RyaW5nJik7CiAKLSAgICBTdHJpbmcgc3VtbWFyeSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3Vt
bWFyeShjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN1bW1hcnkoKSBj
b25zdDsKKyAgICB2b2lkIHNldFN1bW1hcnkoY29uc3QgQXRvbWljU3RyaW5nJik7CisKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHdpZHRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRXaWR0aChjb25z
dCBBdG9taWNTdHJpbmcmKTsKKworICAgIHZvaWQgYWRkU2hhcmVkQ2VsbERlY2xzKFZlY3RvcjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+Jik7CisgICAgdm9pZCBhZGRTaGFyZWRHcm91cERl
Y2xzKGJvb2wgcm93cywgVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4mKTsKIAot
ICAgIFN0cmluZyB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lkdGgoY29uc3QgU3RyaW5n
Jik7Citwcml2YXRlOgorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA5OyB9CisgICAgdmlydHVhbCBib29sIGNoZWNr
RFREKGNvbnN0IE5vZGUqKTsKIAogICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZSogYWRkQ2hpbGQo
UGFzc1JlZlB0cjxOb2RlPik7CiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7CkBAIC0xMDAsMTIgKzEw
NCw5IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgcnVsZXMgYXR0cmlidXRlcy4KICAgICB2aXJ0dWFs
IGJvb2wgY2FuSGF2ZUFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNs
cyhWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiYpOwotICAgIHZvaWQgYWRkU2hh
cmVkQ2VsbERlY2xzKFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+Jik7Ci0gICAg
dm9pZCBhZGRTaGFyZWRHcm91cERlY2xzKGJvb2wgcm93cywgVmVjdG9yPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKj4mKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJp
YnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIAotcHJpdmF0ZToKICAgICB2b2lk
IGFkZFNoYXJlZENlbGxCb3JkZXJzRGVjbChWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qPiYpOwogICAgIHZvaWQgYWRkU2hhcmVkQ2VsbFBhZGRpbmdEZWNsKFZlY3RvcjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbio+Jik7CiAgICAgCkBAIC0xMjEsNyArMTIyLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fZnJhbWVBdHRyOyAgICAgICAgICAgLy8gSW1wbGllcyBhIHRoaW4gYm9y
ZGVyIHdpZHRoIGlmIG5vIGJvcmRlciBpcyBzZXQgYW5kIHRoZW4gYSBjZXJ0YWluIHNldCBvZiBz
b2xpZC9oaWRkZW4gYm9yZGVycyBiYXNlZCBvZmYgdGhlIHZhbHVlLgogICAgIFRhYmxlUnVsZXMg
bV9ydWxlc0F0dHI7ICAgICAvLyBJbXBsaWVzIGEgdGhpbiBib3JkZXIgd2lkdGgsIGEgY29sbGFw
c2luZyBib3JkZXIgbW9kZWwsIGFuZCBhbGwgYm9yZGVycyBvbiB0aGUgdGFibGUgYmVjb21pbmcg
c2V0IHRvIGhpZGRlbiAoaWYgZnJhbWUvYm9yZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGFyZSBwcmVzZW50LCB0byBub25lIG90aGVyd2lzZSkuCi0gICAKKwogICAgIHVu
c2lnbmVkIHNob3J0IG1fcGFkZGluZzsKICAgICBSZWZQdHI8Q1NTTWFwcGVkQXR0cmlidXRlRGVj
bGFyYXRpb24+IG1fcGFkZGluZ0RlY2w7CiB9OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJs
ZVBhcnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFy
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVQ
YXJ0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACi0vKioKLSAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisv
KgogICogQ29weXJpZ2h0IChDKSAxOTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdlaXMgKHdlaXNAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCkBAIC0yMyw2ICsy
MSw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAg
Ki8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZVBhcnRFbGVtZW50
LmgiCiAKQEAgLTM5LDE4ICszOCwxNSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogYm9v
bCBIVE1MVGFibGVQYXJ0RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAo
YXR0ck5hbWUgPT0gYmFja2dyb3VuZEF0dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gKE1hcHBlZEF0
dHJpYnV0ZUVudHJ5KShlTGFzdEVudHJ5ICsgZG9jdW1lbnQoKS0+ZG9jSUQoKSk7CisgICAgICAg
IHJlc3VsdCA9IHN0YXRpY19jYXN0PE1hcHBlZEF0dHJpYnV0ZUVudHJ5PihlTGFzdEVudHJ5ICsg
ZG9jdW1lbnQoKS0+ZG9jSUQoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
Ci0gICAgaWYgKGF0dHJOYW1lID09IGJnY29sb3JBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1lID09
IGJvcmRlcmNvbG9yQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSB2YWxpZ25BdHRyIHx8Ci0g
ICAgICAgIGF0dHJOYW1lID09IGhlaWdodEF0dHIpIHsKKworICAgIGlmIChhdHRyTmFtZSA9PSBi
Z2NvbG9yQXR0ciB8fCBhdHRyTmFtZSA9PSBib3JkZXJjb2xvckF0dHIgfHwgYXR0ck5hbWUgPT0g
dmFsaWduQXR0ciB8fCBhdHRyTmFtZSA9PSBoZWlnaHRBdHRyKSB7CiAgICAgICAgIHJlc3VsdCA9
IGVVbml2ZXJzYWw7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBp
ZiAoYXR0ck5hbWUgPT0gYWxpZ25BdHRyKSB7CiAgICAgICAgIHJlc3VsdCA9IGVDZWxsOyAvLyBB
bGwgdGFibGUgcGFydHMgd2lsbCBqdXN0IHNoYXJlIGluIHRoZSBURCBzcGFjZS4KICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNjQsNiArNjAsNyBAQCB2b2lkIEhUTUxUYWJsZVBhcnRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBiZ2NvbG9yQXR0cikKICAg
ICAgICAgYWRkQ1NTQ29sb3IoYXR0ciwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIGF0dHIt
PnZhbHVlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBiYWNrZ3JvdW5kQXR0cikg
eworICAgICAgICAvLyBGSVhNRTogcGFyc2VVUkwgc3RyaXBzIHdoaXRlc3BhY2UsIHdoaWNoIG1p
Z2h0IGJlIGdvb2QsIGJ1dCBhbHNvIHN0cmlwcyAidXJsKCkiLCB3aGljaCBpcyBjbGVhcmx5IG5v
dCB3YW50ZWQuCiAgICAgICAgIFN0cmluZyB1cmwgPSBwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsK
ICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQogICAgICAgICAgICAgYWRkQ1NTSW1hZ2VQcm9w
ZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSwgZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwodXJsKS5zdHJpbmcoKSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQu
aAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMSwxMCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQg
KEMpIDE5OTcgTWFydGluIEpvbmVzIChtam9uZXNAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5NyBUb3JiZW4gV2VpcyAod2Vpc0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk4IFdh
bGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDkgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzMsMTAgKzMxLDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxU
YWJsZVBhcnRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBIVE1M
VGFibGVQYXJ0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jKQotICAgICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKLSAgICAgICAgeyB9Citw
cm90ZWN0ZWQ6CisgICAgSFRNTFRhYmxlUGFydEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgICAgICA6IEhUTUxFbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KQorICAgIHsKKyAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRy
eShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFu
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zOCw4ICszOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTFRhYmxlUm93RWxlbWVudDo6SFRNTFRh
YmxlUm93RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
KQotICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnQodGFnTmFtZSwgZG9jKQorSFRNTFRhYmxlUm93
RWxlbWVudDo6SFRNTFRhYmxlUm93RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZSh0clRhZykpOwogfQpAQCAtNDgs
OCArNDgsMTEgQEAgYm9vbCBIVE1MVGFibGVSb3dFbGVtZW50OjpjaGVja0RURChjb25zdAogewog
ICAgIGlmIChuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgVGV4dCo+KG5ld0NoaWxkKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpOwotICAg
IHJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZSh0ZFRhZykgfHwgbmV3Q2hpbGQtPmhhc1RhZ05h
bWUodGhUYWcpIHx8Ci0gICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKGZvcm1UYWcpIHx8
IG5ld0NoaWxkLT5oYXNUYWdOYW1lKHNjcmlwdFRhZyk7CisKKyAgICByZXR1cm4gbmV3Q2hpbGQt
Pmhhc1RhZ05hbWUodGRUYWcpCisgICAgICAgIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKHRoVGFn
KQorICAgICAgICB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShmb3JtVGFnKQorICAgICAgICB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShzY3JpcHRUYWcpOwogfQogCiBDb250YWluZXJOb2RlKiBIVE1M
VGFibGVSb3dFbGVtZW50OjphZGRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IGNoaWxkKQpAQCAtNjgs
NDcgKzcxLDQ1IEBAIENvbnRhaW5lck5vZGUqIEhUTUxUYWJsZVJvd0VsZW1lbnQ6OmFkZEMKIAog
aW50IEhUTUxUYWJsZVJvd0VsZW1lbnQ6OnJvd0luZGV4KCkgY29uc3QKIHsKLSAgICBOb2RlICp0
YWJsZSA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXRhYmxlKQorICAgIE5vZGUqIHBhcmVudCA9
IHBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuIC0xOwotICAg
IHRhYmxlID0gdGFibGUtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS0+
aGFzVGFnTmFtZSh0YWJsZVRhZykpCisgICAgTm9kZSogZ3JhbmRwYXJlbnQgPSBwYXJlbnQtPnBh
cmVudE5vZGUoKTsKKyAgICBpZiAoIWdyYW5kcGFyZW50IHx8ICFncmFuZHBhcmVudC0+aGFzVGFn
TmFtZSh0YWJsZVRhZykpCiAgICAgICAgIHJldHVybiAtMTsKKyAgICBIVE1MVGFibGVFbGVtZW50
KiB0YWJsZSA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPih0YWJsZSk7CiAKICAgICAv
LyBUbyBtYXRjaCBGaXJlZm94LCB0aGUgcm93IGluZGljZXMgd29yayBsaWtlIHRoaXM6CiAgICAg
Ly8gICBSb3dzIGZyb20gdGhlIGZpcnN0IDx0aGVhZD4gYXJlIG51bWJlcmVkIGJlZm9yZSBhbGwg
PHRib2R5PiByb3dzLgogICAgIC8vICAgUm93cyBmcm9tIHRoZSBmaXJzdCA8dGZvb3Q+IGFyZSBu
dW1iZXJlZCBhZnRlciBhbGwgPHRib2R5PiByb3dzLgogICAgIC8vICAgUm93cyBmcm9tIG90aGVy
IDx0aGVhZD4gYW5kIDx0Zm9vdD4gZWxlbWVudHMgZG9uJ3QgZ2V0IHJvdyBpbmRpY2VzIGF0IGFs
bC4KIAotICAgIGludCBySW5kZXggPSAwOworICAgIGludCBpbmRleCA9IDA7CiAKLSAgICBpZiAo
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGhlYWQgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVt
ZW50Kj4odGFibGUpLT50SGVhZCgpKSB7Ci0gICAgICAgIGZvciAoTm9kZSAqcm93ID0gaGVhZC0+
Zmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgeworICAgIGlmIChI
VE1MVGFibGVTZWN0aW9uRWxlbWVudCogaGVhZCA9IHRhYmxlLT50SGVhZCgpKSB7CisgICAgICAg
IGZvciAoTm9kZSogcm93ID0gaGVhZC0+Zmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4
dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKHJvdyA9PSB0aGlzKQotICAgICAgICAgICAg
ICAgIHJldHVybiBySW5kZXg7Ci0gICAgICAgICAgICBpZiAocm93LT5oYXNUYWdOYW1lKHRyVGFn
KSkKLSAgICAgICAgICAgICAgICArK3JJbmRleDsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5k
ZXg7CisgICAgICAgICAgICBpbmRleCArPSByb3ctPmhhc1RhZ05hbWUodHJUYWcpOwogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIGZvciAoTm9kZSAqbm9kZSA9IHRhYmxlLT5maXJzdENoaWxk
KCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChOb2RlKiBu
b2RlID0gdGFibGUtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5n
KCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUodGJvZHlUYWcpKSB7CiAgICAgICAg
ICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50Kj4obm9kZSk7CiAgICAgICAgICAgICBmb3IgKE5vZGUqIHJvdyA9
IHNlY3Rpb24tPmZpcnN0Q2hpbGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAocm93ID09IHRoaXMpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBySW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHJvdy0+aGFzVGFnTmFtZSh0clRhZykp
Ci0gICAgICAgICAgICAgICAgICAgICsrckluZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaW5kZXggKz0gcm93LT5oYXNUYWdOYW1lKHRyVGFn
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudCogZm9vdCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPih0YWJs
ZSktPnRGb290KCkpIHsKLSAgICAgICAgZm9yIChOb2RlICpyb3cgPSBmb290LT5maXJzdENoaWxk
KCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGluZygpKSB7CisgICAgaWYgKEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50KiBmb290ID0gdGFibGUtPnRGb290KCkpIHsKKyAgICAgICAgZm9yIChOb2Rl
KiByb3cgPSBmb290LT5maXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGluZygp
KSB7CiAgICAgICAgICAgICBpZiAocm93ID09IHRoaXMpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHJJbmRleDsKLSAgICAgICAgICAgIGlmIChyb3ctPmhhc1RhZ05hbWUodHJUYWcpKQotICAgICAg
ICAgICAgICAgICsrckluZGV4OworICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAg
ICAgICAgIGluZGV4ICs9IHJvdy0+aGFzVGFnTmFtZSh0clRhZyk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTExOCwxNiArMTE5LDEwIEBAIGludCBIVE1MVGFibGVSb3dFbGVtZW50Ojpyb3dJbmRl
eCgpIGNvbnMKIAogaW50IEhUTUxUYWJsZVJvd0VsZW1lbnQ6OnNlY3Rpb25Sb3dJbmRleCgpIGNv
bnN0CiB7Ci0gICAgaW50IHJJbmRleCA9IDA7Ci0gICAgY29uc3QgTm9kZSAqbiA9IHRoaXM7Ci0g
ICAgZG8gewotICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChu
ICYmIG4tPmhhc1RhZ05hbWUodHJUYWcpKQotICAgICAgICAgICAgckluZGV4Kys7Ci0gICAgfQot
ICAgIHdoaWxlIChuKTsKLQotICAgIHJldHVybiBySW5kZXg7CisgICAgaW50IGluZGV4ID0gMDsK
KyAgICBmb3IgKGNvbnN0IE5vZGUqIG4gPSB0aGlzOyBuOyBuID0gbi0+cHJldmlvdXNTaWJsaW5n
KCkpCisgICAgICAgIGluZGV4ICs9IG4tPmhhc1RhZ05hbWUodHJUYWcpOworICAgIHJldHVybiBp
bmRleDsKIH0KIAogUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSFRNTFRhYmxlUm93RWxlbWVudDo6
aW5zZXJ0Q2VsbChpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTM5LDE4ICsxMzQs
MTYgQEAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSFRNTFRhYmxlUm93RWxlbQogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+IGMgPSBu
ZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQodGRUYWcsIGRvY3VtZW50KCkpOwotICAgIGlmIChpbmRl
eCA8IDAgfHwgaW5kZXggPj0gbnVtQ2VsbHMpCi0gICAgICAgIGFwcGVuZENoaWxkKGMsIGVjKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgTm9kZSogbjsKLSAgICAgICAgaWYgKGluZGV4IDwgMSkKLSAg
ICAgICAgICAgIG4gPSBmaXJzdENoaWxkKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG4g
PSBjaGlsZHJlbi0+aXRlbShpbmRleCk7Ci0gICAgICAgIGluc2VydEJlZm9yZShjLCBuLCBlYyk7
CisgICAgUmVmUHRyPEhUTUxUYWJsZUNlbGxFbGVtZW50PiBjZWxsID0gbmV3IEhUTUxUYWJsZUNl
bGxFbGVtZW50KHRkVGFnLCBkb2N1bWVudCgpKTsKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4
ID49IG51bUNlbGxzKSB7CisgICAgICAgIGlmICghYXBwZW5kQ2hpbGQoY2VsbCwgZWMpKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTm9kZSogYmVmb3JlTm9k
ZSA9IGluZGV4IDwgMSA/IGZpcnN0Q2hpbGQoKSA6IGNoaWxkcmVuLT5pdGVtKGluZGV4KTsKKyAg
ICAgICAgaWYgKCFpbnNlcnRCZWZvcmUoY2VsbCwgYmVmb3JlTm9kZSwgZWMpKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBjLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
Y2VsbC5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgSFRNTFRhYmxlUm93RWxlbWVudDo6ZGVsZXRlQ2Vs
bChpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTU4LDExICsxNTEsMTAgQEAgdm9p
ZCBIVE1MVGFibGVSb3dFbGVtZW50OjpkZWxldGVDZWxsKGludAogICAgIFJlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gY2hpbGRyZW4gPSBjZWxscygpOwogICAgIGludCBudW1DZWxscyA9IGNoaWxkcmVu
ID8gY2hpbGRyZW4tPmxlbmd0aCgpIDogMDsKICAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICAg
IGluZGV4ID0gbnVtQ2VsbHMtMTsKLSAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IG51bUNl
bGxzKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBjZWxsID0gY2hpbGRyZW4tPml0ZW0oaW5kZXgp
OwotICAgICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlQ2hpbGQoY2VsbC5nZXQoKSwgZWMpOwotICAg
IH0gZWxzZQorICAgICAgICBpbmRleCA9IG51bUNlbGxzIC0gMTsKKyAgICBpZiAoaW5kZXggPj0g
MCAmJiBpbmRleCA8IG51bUNlbGxzKQorICAgICAgICByZW1vdmVDaGlsZChjaGlsZHJlbi0+aXRl
bShpbmRleCksIGVjKTsKKyAgICBlbHNlCiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiB9
CiAKQEAgLTE3MSw1NyArMTYzLDU3IEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxU
YWJsZVJvd0UKICAgICByZXR1cm4gSFRNTENvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBIVE1MQ29s
bGVjdGlvbjo6VFJDZWxscyk7CiB9CiAKLXZvaWQgSFRNTFRhYmxlUm93RWxlbWVudDo6c2V0Q2Vs
bHMoSFRNTENvbGxlY3Rpb24gKiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIEhUTUxUYWJsZVJv
d0VsZW1lbnQ6OnNldENlbGxzKEhUTUxDb2xsZWN0aW9uKiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiB9CiAKLVN0cmluZyBIVE1M
VGFibGVSb3dFbGVtZW50OjphbGlnbigpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxU
YWJsZVJvd0VsZW1lbnQ6OmFsaWduKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KGFsaWduQXR0cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxlUm93RWxlbWVudDo6c2V0QWxpZ24oY29u
c3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTFRhYmxlUm93RWxlbWVudDo6c2V0QWxpZ24oY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoYWxpZ25BdHRyLCB2
YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MVGFibGVSb3dFbGVtZW50OjpiZ0NvbG9yKCkgY29uc3QK
K2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFRhYmxlUm93RWxlbWVudDo6YmdDb2xvcigpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShiZ2NvbG9yQXR0cik7CiB9CiAKLXZvaWQgSFRN
TFRhYmxlUm93RWxlbWVudDo6c2V0QmdDb2xvcihjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBI
VE1MVGFibGVSb3dFbGVtZW50OjpzZXRCZ0NvbG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
CiB7CiAgICAgc2V0QXR0cmlidXRlKGJnY29sb3JBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBI
VE1MVGFibGVSb3dFbGVtZW50OjpjaCgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxU
YWJsZVJvd0VsZW1lbnQ6OmNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNo
YXJBdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50OjpzZXRDaChjb25zdCBTdHJp
bmcgJnZhbHVlKQordm9pZCBIVE1MVGFibGVSb3dFbGVtZW50OjpzZXRDaChjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShjaGFyQXR0ciwgdmFsdWUpOwogfQog
Ci1TdHJpbmcgSFRNTFRhYmxlUm93RWxlbWVudDo6Y2hPZmYoKSBjb25zdAorY29uc3QgQXRvbWlj
U3RyaW5nJiBIVE1MVGFibGVSb3dFbGVtZW50OjpjaE9mZigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShjaGFyb2ZmQXR0cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxlUm93RWxlbWVu
dDo6c2V0Q2hPZmYoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgSFRNTFRhYmxlUm93RWxlbWVu
dDo6c2V0Q2hPZmYoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1
dGUoY2hhcm9mZkF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZVJvd0VsZW1lbnQ6
OnZBbGlnbigpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxUYWJsZVJvd0VsZW1lbnQ6
OnZBbGlnbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2YWxpZ25BdHRyKTsK
IH0KIAotdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50OjpzZXRWQWxpZ24oY29uc3QgU3RyaW5nICZ2
YWx1ZSkKK3ZvaWQgSFRNTFRhYmxlUm93RWxlbWVudDo6c2V0VkFsaWduKGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHZhbGlnbkF0dHIsIHZhbHVlKTsKIH0K
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuaAkocmV2aXNpb24gNDI4OTMpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00LDcg
KzQsNyBAQAogICogICAgICAgICAgIChDKSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQot
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTM0LDExICszNCw2IEBAIGNsYXNzIEhUTUxUYWJsZVJvd0VsZW1lbnQg
OiBwdWJsaWMgSFRNTFQKIHB1YmxpYzoKICAgICBIVE1MVGFibGVSb3dFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVu
ZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KLSAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDc7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOwotICAgIHZpcnR1YWwgQ29udGFpbmVyTm9k
ZSogYWRkQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7Ci0KICAgICBpbnQgcm93SW5kZXgoKSBjb25z
dDsKICAgICB2b2lkIHNldFJvd0luZGV4KGludCk7CiAKQEAgLTUxLDIwICs0NiwyNyBAQCBwdWJs
aWM6CiAgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY2VsbHMoKTsKICAgICB2b2lkIHNl
dENlbGxzKEhUTUxDb2xsZWN0aW9uICosIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFN0cmluZyBh
bGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBhbGlnbigpIGNvbnN0OworICAgIHZvaWQgc2V0QWxpZ24oY29uc3Qg
QXRvbWljU3RyaW5nJik7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGJnQ29sb3IoKSBjb25z
dDsKKyAgICB2b2lkIHNldEJnQ29sb3IoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJp
bmcgYmdDb2xvcigpIGNvbnN0OwotICAgIHZvaWQgc2V0QmdDb2xvcihjb25zdCBTdHJpbmcmKTsK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDaChjb25z
dCBBdG9taWNTdHJpbmcmKTsKIAotICAgIFN0cmluZyBjaCgpIGNvbnN0OwotICAgIHZvaWQgc2V0
Q2goY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjaE9mZigpIGNvbnN0
OworICAgIHZvaWQgc2V0Q2hPZmYoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcg
Y2hPZmYoKSBjb25zdDsKLSAgICB2b2lkIHNldENoT2ZmKGNvbnN0IFN0cmluZyYpOworICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgdkFsaWduKCkgY29uc3Q7CisgICAgdm9pZCBzZXRWQWxpZ24oY29u
c3QgQXRvbWljU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDc7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOworICAgIHZpcnR1YWwgQ29udGFpbmVy
Tm9kZSogYWRkQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7CiAKLSAgICBTdHJpbmcgdkFsaWduKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRWQWxpZ24oY29uc3QgU3RyaW5nJik7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAKLS8qKgorLyoKICAqIENvcHlyaWdo
dCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMgKG1qb25lc0BrZGUub3JnKQogICogICAgICAgICAgIChD
KSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTgg
V2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIxLDYgKzIxLDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaCIKIApAQCAtNDUsOCArNDYsMTAgQEAgYm9v
bCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6Y2hlY2tEVEQoYwogewogICAgIGlmIChuZXdDaGls
ZC0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dCo+
KG5ld0NoaWxkKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpOwotICAgIHJldHVybiBuZXdDaGls
ZC0+aGFzVGFnTmFtZSh0clRhZykgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoZm9ybVRhZykgfHwK
LSAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKTsKKworICAgIHJldHVy
biBuZXdDaGlsZC0+aGFzVGFnTmFtZSh0clRhZykKKyAgICAgICAgfHwgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoZm9ybVRhZykKKyAgICAgICAgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoc2NyaXB0VGFn
KTsKIH0KIAogQ29udGFpbmVyTm9kZSogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmFkZENoaWxk
KFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQpCkBAIC02NiwxMDEgKzY5LDkzIEBAIENvbnRhaW5lck5v
ZGUqIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjoKIC8vIHVzZWQgYnkgdGFibGUgcm93IGdyb3Vw
cyB0byBzaGFyZSBzdHlsZSBkZWNscyBjcmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUuCiB2
b2lkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNs
cyhWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiYgcmVzdWx0cykKIHsKLSAgICBO
b2RlKiBwID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChwICYmICFwLT5oYXNUYWdOYW1lKHRh
YmxlVGFnKSkKLSAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXApCisgICAg
Tm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUgKGFuY2VzdG9yICYmICFh
bmNlc3Rvci0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCisgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0
b3ItPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIWFuY2VzdG9yKQogICAgICAgICByZXR1cm47Ci0g
ICAgc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudCo+KHApLT5hZGRTaGFyZWRHcm91cERlY2xz
KHRydWUsIHJlc3VsdHMpOworICAgIHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPihhbmNl
c3RvciktPmFkZFNoYXJlZEdyb3VwRGVjbHModHJ1ZSwgcmVzdWx0cyk7CiB9CiAKIC8vIHRoZXNl
IGZ1bmN0aW9ucyBhcmUgcmF0aGVyIHNsb3csIHNpbmNlIHdlIG5lZWQgdG8gZ2V0IHRoZSByb3cg
YXQKIC8vIHRoZSBpbmRleC4uLiBidXQgdGhleSBhcmVuJ3QgdXNlZCBkdXJpbmcgdXN1YWwgSFRN
TCBwYXJzaW5nIGFueXdheQogUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQ6Omluc2VydFJvdyhpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IFJlZlB0cjxIVE1MVGFibGVSb3dFbGVtZW50PiByOwogICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlv
bj4gY2hpbGRyZW4gPSByb3dzKCk7Ci0gICAgaW50IG51bVJvd3MgPSBjaGlsZHJlbiA/IChpbnQp
Y2hpbGRyZW4tPmxlbmd0aCgpIDogMDsKLSAgICBpZiAoaW5kZXggPCAtMSB8fCBpbmRleCA+IG51
bVJvd3MpCisgICAgaW50IG51bVJvd3MgPSBjaGlsZHJlbiA/IGNoaWxkcmVuLT5sZW5ndGgoKSA6
IDBVOworICAgIGlmIChpbmRleCA8IC0xIHx8IGluZGV4ID4gbnVtUm93cykgewogICAgICAgICBl
YyA9IElOREVYX1NJWkVfRVJSOyAvLyBwZXIgdGhlIERPTQotICAgIGVsc2UgewotICAgICAgICBy
ID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnQodHJUYWcsIGRvY3VtZW50KCkpOwotICAgICAgICBp
ZiAobnVtUm93cyA9PSBpbmRleCB8fCBpbmRleCA9PSAtMSkKLSAgICAgICAgICAgIGFwcGVuZENo
aWxkKHIsIGVjKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBOb2RlKiBuOwotICAgICAg
ICAgICAgaWYgKGluZGV4IDwgMSkKLSAgICAgICAgICAgICAgICBuID0gZmlyc3RDaGlsZCgpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG4gPSBjaGlsZHJlbi0+aXRlbShpbmRl
eCk7Ci0gICAgICAgICAgICBpbnNlcnRCZWZvcmUociwgbiwgZWMpOwotICAgICAgICB9CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxIVE1MVGFibGVSb3dFbGVtZW50PiBy
b3cgPSBuZXcgSFRNTFRhYmxlUm93RWxlbWVudCh0clRhZywgZG9jdW1lbnQoKSk7CisgICAgaWYg
KG51bVJvd3MgPT0gaW5kZXggfHwgaW5kZXggPT0gLTEpIHsKKyAgICAgICAgaWYgKCFhcHBlbmRD
aGlsZChyb3csIGVjKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAg
ICAgIE5vZGUqIGJlZm9yZUNoaWxkID0gaW5kZXggPCAxID8gZmlyc3RDaGlsZCgpIDogY2hpbGRy
ZW4tPml0ZW0oaW5kZXgpOworICAgICAgICBpZiAoIWluc2VydEJlZm9yZShyb3csIGJlZm9yZUNo
aWxkLCBlYykpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIHIucmVs
ZWFzZSgpOworICAgIHJldHVybiByb3cucmVsZWFzZSgpOwogfQogCiB2b2lkIEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50OjpkZWxldGVSb3coIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjaGlsZHJlbiA9IHJvd3MoKTsKLSAgICBpbnQg
bnVtUm93cyA9IGNoaWxkcmVuID8gKGludCljaGlsZHJlbi0+bGVuZ3RoKCkgOiAwOworICAgIGlu
dCBudW1Sb3dzID0gY2hpbGRyZW4gPyBjaGlsZHJlbi0+bGVuZ3RoKCkgOiAwVTsKICAgICBpZiAo
aW5kZXggPT0gLTEpCiAgICAgICAgIGluZGV4ID0gbnVtUm93cyAtIDE7Ci0gICAgaWYgKGluZGV4
ID49IDAgJiYgaW5kZXggPCBudW1Sb3dzKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiByb3cgPSBj
aGlsZHJlbi0+aXRlbShpbmRleCk7Ci0gICAgICAgIEhUTUxFbGVtZW50OjpyZW1vdmVDaGlsZChy
b3cuZ2V0KCksIGVjKTsKLSAgICB9IGVsc2UKKyAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8
IG51bVJvd3MpCisgICAgICAgIEhUTUxFbGVtZW50OjpyZW1vdmVDaGlsZChjaGlsZHJlbi0+aXRl
bShpbmRleCksIGVjKTsKKyAgICBlbHNlCiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiB9
CiAKIGludCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6bnVtUm93cygpIGNvbnN0CiB7CiAgICAg
aW50IHJvd3MgPSAwOwotICAgIGNvbnN0IE5vZGUgKm4gPSBmaXJzdENoaWxkKCk7Ci0gICAgd2hp
bGUgKG4pIHsKLSAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUodHJUYWcpKQotICAgICAgICAgICAg
cm93cysrOwotICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0KKyAgICBmb3Ig
KGNvbnN0IE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKQor
ICAgICAgICByb3dzICs9IG4tPmhhc1RhZ05hbWUodHJUYWcpOwogICAgIHJldHVybiByb3dzOwog
fQogCi1TdHJpbmcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmFsaWduKCkgY29uc3QKK2NvbnN0
IEF0b21pY1N0cmluZyYgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmFsaWduKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50OjpzZXRBbGlnbihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQog
ewogICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50OjpjaCgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50OjpjaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShjaGFyQXR0cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldENoKGNv
bnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpzZXRDaChj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShjaGFyQXR0ciwg
dmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmNoT2ZmKCkgY29u
c3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmNoT2ZmKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNoYXJvZmZBdHRyKTsKIH0KIAotdm9p
ZCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6c2V0Q2hPZmYoY29uc3QgU3RyaW5nICZ2YWx1ZSkK
K3ZvaWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldENoT2ZmKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGNoYXJvZmZBdHRyLCB2YWx1ZSk7CiB9CiAK
LVN0cmluZyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6dkFsaWduKCkgY29uc3QKK2NvbnN0IEF0
b21pY1N0cmluZyYgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnZBbGlnbigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2YWxpZ25BdHRyKTsKIH0KIAotdm9pZCBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudDo6c2V0VkFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50OjpzZXRWQWxpZ24oY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkK
IHsKICAgICBzZXRBdHRyaWJ1dGUodmFsaWduQXR0ciwgdmFsdWUpOwogfQpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQsNyAr
NCw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMzQsMzEgKzM0LDMyIEBAIGNsYXNzIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50IDogcHVibGljIEgKIHB1YmxpYzoKICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwogCi0gICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0
aW9uYWw7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDg7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOwotICAgIHZpcnR1YWwg
Q29udGFpbmVyTm9kZSogYWRkQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgdmlydHVhbCBi
b29sIGNhbkhhdmVBZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscygpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbHMo
VmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4mKTsKLQogICAgIFBhc3NSZWZQdHI8
SFRNTEVsZW1lbnQ+IGluc2VydFJvdyhpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIGRlbGV0ZVJvdyhpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGludCBudW1S
b3dzKCkgY29uc3Q7CiAKLSAgICBTdHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFs
aWduKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWxpZ24oKSBjb25z
dDsKKyAgICB2b2lkIHNldEFsaWduKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCi0gICAgU3RyaW5n
IGNoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaChjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGNoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDaChjb25zdCBBdG9taWNTdHJp
bmcmKTsKIAotICAgIFN0cmluZyBjaE9mZigpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2hPZmYoY29u
c3QgU3RyaW5nJik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjaE9mZigpIGNvbnN0OworICAg
IHZvaWQgc2V0Q2hPZmYoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgdkFsaWdu
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWQWxpZ24oY29uc3QgU3RyaW5nJik7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2QWxpZ24oKSBjb25zdDsKKyAgICB2b2lkIHNldFZBbGlnbihjb25zdCBB
dG9taWNTdHJpbmcmKTsKIAogICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHJvd3MoKTsK
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gODsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RU
RChjb25zdCBOb2RlKik7CisgICAgdmlydHVhbCBDb250YWluZXJOb2RlKiBhZGRDaGlsZChQYXNz
UmVmUHRyPE5vZGU+KTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUFkZGl0aW9uYWxBdHRyaWJ1
dGVTdHlsZURlY2xzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBh
ZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscyhWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qPiYpOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxV
TGlzdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVt
ZW50LmNwcAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEyICs2MiwxMiBAQCB2b2lkIEhUTUxVTGlzdEVs
ZW1lbnQ6OnNldENvbXBhY3QoYm9vbCBiCiAgICAgc2V0QXR0cmlidXRlKGNvbXBhY3RBdHRyLCBi
ID8gIiIgOiAwKTsKIH0KIAotU3RyaW5nIEhUTUxVTGlzdEVsZW1lbnQ6OnR5cGUoKSBjb25zdAor
Y29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVUxpc3RFbGVtZW50Ojp0eXBlKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKIH0KIAotdm9pZCBIVE1MVUxpc3RFbGVt
ZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxVTGlzdEVsZW1lbnQ6
OnNldFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUo
dHlwZUF0dHIsIHZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuaAkocmV2aXNp
b24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwyMiArMjYsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBI
VE1MVUxpc3RFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci17CitjbGFzcyBIVE1MVUxpc3RF
bGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1MVUxpc3RFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCisgICAgYm9vbCBjb21wYWN0
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOworCisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmlu
ZyYpOworCitwcml2YXRlOgogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CiAgICAgdmlydHVhbCBp
bnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlKik7Ci0KLSAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbXBhY3Qo
Ym9vbCk7Ci0KLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShjb25z
dCBTdHJpbmcmKTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
VmlkZW9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxl
bWVudC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBAIHZvaWQgSFRNTFZpZGVvRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgICAgICAgICBtX2ltYWdlTG9hZGVyLnNl
dChuZXcgSFRNTEltYWdlTG9hZGVyKHRoaXMpKTsKICAgICAgICAgICAgIG1faW1hZ2VMb2FkZXIt
PnVwZGF0ZUZyb21FbGVtZW50SWdub3JpbmdQcmV2aW91c0Vycm9yKCk7CiAjZWxzZQotICAgICAg
ICAgICAgaWYgKG1fcGxheWVyKQotICAgICAgICAgICAgICAgIG1fcGxheWVyLT5zZXRQb3N0ZXIo
cG9zdGVyKCkpOworICAgICAgICAgICAgaWYgKHBsYXllcigpKQorICAgICAgICAgICAgICAgIHBs
YXllcigpLT5zZXRQb3N0ZXIocG9zdGVyKCkpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9IGVs
c2UgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0cikKQEAgLTExMywxNiArMTEzLDE2IEBAIHZvaWQg
SFRNTFZpZGVvRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKIAogdW5zaWduZWQgSFRNTFZpZGVv
RWxlbWVudDo6dmlkZW9XaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BsYXllcikKKyAgICBp
ZiAoIXBsYXllcigpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9wbGF5ZXItPm5h
dHVyYWxTaXplKCkud2lkdGgoKTsKKyAgICByZXR1cm4gcGxheWVyKCktPm5hdHVyYWxTaXplKCku
d2lkdGgoKTsKIH0KIAogdW5zaWduZWQgSFRNTFZpZGVvRWxlbWVudDo6dmlkZW9IZWlnaHQoKSBj
b25zdAogewotICAgIGlmICghbV9wbGF5ZXIpCisgICAgaWYgKCFwbGF5ZXIoKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fcGxheWVyLT5uYXR1cmFsU2l6ZSgpLmhlaWdodCgpOwor
ICAgIHJldHVybiBwbGF5ZXIoKS0+bmF0dXJhbFNpemUoKS5oZWlnaHQoKTsKIH0KIAogdW5zaWdu
ZWQgSFRNTFZpZGVvRWxlbWVudDo6d2lkdGgoKSBjb25zdApAQCAtMTU0LDcgKzE1NCw3IEBAIEtV
UkwgSFRNTFZpZGVvRWxlbWVudDo6cG9zdGVyKCkgY29uc3QKICAgICByZXR1cm4gZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHBvc3RlckF0dHIpKTsKIH0KIAotdm9pZCBIVE1M
VmlkZW9FbGVtZW50OjpzZXRQb3N0ZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTFZp
ZGVvRWxlbWVudDo6c2V0UG9zdGVyKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAg
c2V0QXR0cmlidXRlKHBvc3RlckF0dHIsIHZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MVmlkZW9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuaAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwzMCArMjksMTUgQEAKICNpZiBFTkFCTEUoVklERU8p
CiAKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxJbWFnZUxvYWRlcjsKIAotY2xh
c3MgSFRNTFZpZGVvRWxlbWVudCA6IHB1YmxpYyBIVE1MTWVkaWFFbGVtZW50Ci17CitjbGFzcyBI
VE1MVmlkZW9FbGVtZW50IDogcHVibGljIEhUTUxNZWRpYUVsZW1lbnQgewogcHVibGljOgogICAg
IEhUTUxWaWRlb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAg
Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0gICAg
dmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKLSNpZiAhRU5BQkxF
KFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKLSNlbmRpZgotICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0gICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cik7Ci0gICAg
dmlydHVhbCBib29sIGlzVmlkZW8oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBib29sIGhhc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gcGxheWVyKCkgJiYgcGxheWVyKCktPmhh
c1ZpZGVvKCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBjb25zdCBRdWFsaWZpZWROYW1lJiBpbWFnZVNvdXJjZUF0dHJp
YnV0ZU5hbWUoKSBjb25zdDsKLQogICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRXaWR0aCh1bnNpZ25lZCk7CiAgICAgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3Q7CkBAIC02
MiwxMSArNDcsMjUgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHZpZGVvSGVpZ2h0KCkgY29uc3Q7
CiAgICAgCiAgICAgS1VSTCBwb3N0ZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldFBvc3Rlcihjb25z
dCBTdHJpbmcmKTsKLQotICAgIHZvaWQgdXBkYXRlUG9zdGVySW1hZ2UoKTsKKyAgICB2b2lkIHNl
dFBvc3Rlcihjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcmVu
ZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNWaWRlbygpIGNvbnN0
IHsgcmV0dXJuIHBsYXllcigpICYmIHBsYXllcigpLT5oYXNWaWRlbygpOyB9CisgICAgdmlydHVh
bCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OworICAgIHZpcnR1YWwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgaW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkgY29uc3Q7CisKKyNp
ZiAhRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKyNlbmRpZgor
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBvc3RlckltYWdlKCk7CisKICAgICBPd25QdHI8SFRN
TEltYWdlTG9hZGVyPiBtX2ltYWdlTG9hZGVyOwogICAgIGJvb2wgbV9zaG91bGRTaG93UG9zdGVy
SW1hZ2U7CiB9OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDI4OTMpCisr
KyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOCw3
ICs1MDgsNyBAQCBGcmFtZSogRnJhbWVMb2FkZXI6OmxvYWRTdWJmcmFtZShIVE1MRnJhCiB9CiAK
IHZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBT
dHJpbmcmIHVybCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsCi0gICAgY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91
bmRhcnksCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29u
dGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRhcnksCiAgICAgYm9vbCBsb2NrSGlzdG9yeSwg
Ym9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgUGFzc1Jl
ZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSkKIHsKICAgICBBU1NFUlQoYWN0aW9uKTsKQEAgLTUz
Myw3ICs1MzMsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIqCiAK
ICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lUmVxdWVzdDsKIAotICAgIFN0cmluZyB0YXJnZXRP
ckJhc2VUYXJnZXQgPSB0YXJnZXQuaXNFbXB0eSgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YmFz
ZVRhcmdldCgpIDogdGFyZ2V0OworICAgIEF0b21pY1N0cmluZyB0YXJnZXRPckJhc2VUYXJnZXQg
PSB0YXJnZXQuaXNFbXB0eSgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVRhcmdldCgpIDog
dGFyZ2V0OwogICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGZpbmRGcmFtZUZvck5hdmlnYXRpb24o
dGFyZ2V0T3JCYXNlVGFyZ2V0KTsKICAgICBpZiAoIXRhcmdldEZyYW1lKSB7CiAgICAgICAgIHRh
cmdldEZyYW1lID0gbV9mcmFtZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNDI4
OTMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTcsNyArMjU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHJlcXVlc3RG
cmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgQXRv
bWljU3RyaW5nJiBmcmFtZU5hbWUpOwogCiAgICAgICAgIHZvaWQgc3VibWl0Rm9ybShjb25zdCBj
aGFyKiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdXJsLAotICAgICAgICAgICAgUGFzc1JlZlB0cjxG
b3JtRGF0YT4sIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBl
LCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LAorICAgICAgICAgICAgUGFzc1JlZlB0cjxGb3JtRGF0
YT4sIGNvbnN0IEF0b21pY1N0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBl
LCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LAogICAgICAgICAgICAgYm9vbCBsb2NrSGlzdG9yeSwg
Ym9vbCBsb2NrQmFja0ZvcndhcmRMaXN0LCBQYXNzUmVmUHRyPEV2ZW50PiwgUGFzc1JlZlB0cjxG
b3JtU3RhdGU+KTsKIAogICAgICAgICB2b2lkIHN0b3AoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L01lZGlhRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL01lZGlhRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvbG9hZGVyL01lZGlhRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgTWVkaWFUb2tlbml6
ZXI6OmNyZWF0ZURvY3VtZW50U3RydWMKICAgICBtX21lZGlhRWxlbWVudC0+c2V0QXR0cmlidXRl
KHN0eWxlQXR0ciwgIm1hcmdpbjogYXV0bzsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IHJp
Z2h0OiAwOyBib3R0b206IDA7IGxlZnQ6IDA7Iik7CiAKICAgICBtX21lZGlhRWxlbWVudC0+c2V0
QXR0cmlidXRlKG5hbWVBdHRyLCAibWVkaWEiKTsKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0U3Jj
KG1fZG9jLT51cmwoKSk7CisgICAgbV9tZWRpYUVsZW1lbnQtPnNldFNyYyhtX2RvYy0+dXJsKCku
c3RyaW5nKCkpOwogICAgIAogICAgIGJvZHktPmFwcGVuZENoaWxkKG1lZGlhRWxlbWVudCwgZWMp
OwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShy
ZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3Nyw4ICsyMzc3LDcgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjphcmlhTGlzdAogICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+
aXNFbGVtZW50Tm9kZSgpKSAvLyBkbyB0aGlzIGNoZWNrIHRvIGVuc3VyZSBzYWZldHkgb2Ygc3Rh
dGljX2Nhc3QgYWJvdmUKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIG11bHRpc2VsZWN0
YWJsZVByb3BlcnR5U3RyID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0
YWJsZSIpLnN0cmluZygpOwotICAgIGlzTXVsdGlzZWxlY3RhYmxlID0gZXF1YWxJZ25vcmluZ0Nh
c2UobXVsdGlzZWxlY3RhYmxlUHJvcGVydHlTdHIsICJ0cnVlIik7CisgICAgaXNNdWx0aXNlbGVj
dGFibGUgPSBlcXVhbElnbm9yaW5nQ2FzZShlbGVtZW50LT5nZXRBdHRyaWJ1dGUoImFyaWEtbXVs
dGlzZWxlY3RhYmxlIiksICJ0cnVlIik7CiAgICAgCiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAg
ICAgIC8vIGV2ZXJ5IGNoaWxkIHNob3VsZCBoYXZlIGFyaWEtcm9sZSBvcHRpb24sIGFuZCBpZiBz
bywgY2hlY2sgZm9yIHNlbGVjdGVkIGF0dHJpYnV0ZS9zdGF0ZQpAQCAtMjM4OSw4ICsyMzg4LDcg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhTGlzdAogICAgICAgICBpZiAo
Y2hpbGRSZW5kZXJlciAmJiBhcmlhUm9sZSA9PSBMaXN0Qm94T3B0aW9uUm9sZSkgewogICAgICAg
ICAgICAgRWxlbWVudCogY2hpbGRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGNoaWxk
UmVuZGVyZXItPm5vZGUoKSk7CiAgICAgICAgICAgICBpZiAoY2hpbGRFbGVtZW50ICYmIGNoaWxk
RWxlbWVudC0+aXNFbGVtZW50Tm9kZSgpKSB7IC8vIGRvIHRoaXMgY2hlY2sgdG8gZW5zdXJlIHNh
ZmV0eSBvZiBzdGF0aWNfY2FzdCBhYm92ZQotICAgICAgICAgICAgICAgIFN0cmluZyBzZWxlY3Rl
ZEF0dHJTdHJpbmcgPSBjaGlsZEVsZW1lbnQtPmdldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIp
LnN0cmluZygpOwotICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShzZWxlY3Rl
ZEF0dHJTdHJpbmcsICJ0cnVlIikpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UoY2hpbGRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiKSwgInRydWUi
KSkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNoaWxkKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzTXVsdGlzZWxlY3RhYmxlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxk
ZXIuaAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGFCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgRm9y
bURhdGFCdWlsZGVyX2gKICNkZWZpbmUgRm9ybURhdGFCdWlsZGVyX2gKIAotI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDExICs0MSwxMSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc011bHRpUGFydEZvcm0oKSBjb25zdCB7IHJldHVybiBtX2lz
TXVsdGlQYXJ0Rm9ybTsgfQogICAgIHZvaWQgc2V0SXNNdWx0aVBhcnRGb3JtKGJvb2wgdmFsdWUp
IHsgbV9pc011bHRpUGFydEZvcm0gPSB2YWx1ZTsgfQogCi0gICAgU3RyaW5nIGVuY29kaW5nVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RpbmdUeXBlOyB9Ci0gICAgdm9pZCBzZXRFbmNvZGlu
Z1R5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX2VuY29kaW5nVHlwZSA9IHZhbHVlOyB9Cisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBlbmNvZGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Vu
Y29kaW5nVHlwZTsgfQorICAgIHZvaWQgc2V0RW5jb2RpbmdUeXBlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpIHsgbV9lbmNvZGluZ1R5cGUgPSB2YWx1ZTsgfQogCi0gICAgU3RyaW5nIGFjY2Vw
dENoYXJzZXQoKSBjb25zdCB7IHJldHVybiBtX2FjY2VwdENoYXJzZXQ7IH0KLSAgICB2b2lkIHNl
dEFjY2VwdENoYXJzZXQoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX2FjY2VwdENoYXJzZXQgPSB2
YWx1ZTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWNjZXB0Q2hhcnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fYWNjZXB0Q2hhcnNldDsgfQorICAgIHZvaWQgc2V0QWNjZXB0Q2hhcnNldChjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IG1fYWNjZXB0Q2hhcnNldCA9IHZhbHVlOyB9CiAKICAg
ICB2b2lkIHBhcnNlRW5jb2RpbmdUeXBlKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgcGFyc2VN
ZXRob2RUeXBlKGNvbnN0IFN0cmluZyYpOwpAQCAtNjgsOCArNjgsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9pc1Bvc3RNZXRob2Q7CiAgICAgYm9vbCBtX2lzTXVsdGlQYXJ0Rm9ybTsKIAotICAg
IFN0cmluZyBtX2VuY29kaW5nVHlwZTsKLSAgICBTdHJpbmcgbV9hY2NlcHRDaGFyc2V0OworICAg
IEF0b21pY1N0cmluZyBtX2VuY29kaW5nVHlwZTsKKyAgICBBdG9taWNTdHJpbmcgbV9hY2NlcHRD
aGFyc2V0OwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNp
b24gNDI4OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1NSw3ICs0NTUsNyBAQCBib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChj
b25zdCBIaXRUCiAgICAgICAgIEhUTUxNYXBFbGVtZW50KiBtYXAgPSBpbWFnZU1hcCgpOwogICAg
ICAgICBpZiAobWFwKSB7CiAgICAgICAgICAgICAvLyB3ZSdyZSBhIGNsaWVudCBzaWRlIGltYWdl
IG1hcAotICAgICAgICAgICAgaW5zaWRlID0gbWFwLT5tYXBNb3VzZUV2ZW50KF94IC0gdHgsIF95
IC0gdHksIEludFNpemUoY29udGVudFdpZHRoKCksIGNvbnRlbnRIZWlnaHQoKSksIHRlbXBSZXN1
bHQpOworICAgICAgICAgICAgaW5zaWRlID0gbWFwLT5tYXBNb3VzZUV2ZW50KEludFBvaW50KF94
IC0gdHgsIF95IC0gdHkpLCBJbnRTaXplKGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkp
LCB0ZW1wUmVzdWx0KTsKICAgICAgICAgICAgIHRlbXBSZXN1bHQuc2V0SW5uZXJOb25TaGFyZWRO
b2RlKG5vZGUoKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJQYXJ0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJQYXJ0T2JqZWN0LmNwcAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJQYXJ0T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTYgKzM0LDE2IEBACiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCi0jaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1Jf
VklERU8pCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxWaWRl
b0VsZW1lbnQuaCIKLSNlbmRpZgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlJlbmRlclZp
ZXcuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKKyNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9W
SURFTykKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtMjEwLDggKzIxMCw4
IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KGJvb2wKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFlbWJlZCAmJiAhbmFtZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgdW5pcXVlUGFyYW1OYW1lcy5hZGQobmFtZS5pbXBsKCkpOwot
ICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChwLT5uYW1lKCkpOwotICAgICAg
ICAgICAgICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQocC0+dmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKG5hbWUpOworICAgICAgICAgICAgICAgICAgICBw
YXJhbVZhbHVlcy5hcHBlbmQocC0+dmFsdWUoKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdl
dChib29sCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYm9v
bCBzdWNjZXNzID0gZnJhbWUtPmxvYWRlcigpLT5yZXF1ZXN0T2JqZWN0KHRoaXMsIHVybCwgQXRv
bWljU3RyaW5nKG8tPm5hbWUoKSksIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVl
cyk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZyYW1lLT5sb2FkZXIoKS0+cmVxdWVzdE9iamVj
dCh0aGlzLCB1cmwsIG8tPm5hbWUoKSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFs
dWVzKTsKICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG1faGFzRmFsbGJhY2tDb250ZW50KQogICAg
ICAgICAgICAgby0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CiAgICAgfSBlbHNlIGlmIChub2Rl
KCktPmhhc1RhZ05hbWUoZW1iZWRUYWcpKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDE0ICsxMDksMTUgQEAgdm9pZCBS
ZW5kZXJUYWJsZUNlbGw6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBpZiAobm9kZSgpICYmIHN0eWxl
KCktPmF1dG9XcmFwKCkpIHsKICAgICAgICAgLy8gU2VlIGlmIG5vd3JhcCB3YXMgc2V0LgogICAg
ICAgICBMZW5ndGggdyA9IHN0eWxlT3JDb2xXaWR0aCgpOwotICAgICAgICBTdHJpbmcgbm93cmFw
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSktPmdldEF0dHJpYnV0ZShub3dyYXBBdHRy
KTsKLSAgICAgICAgaWYgKCFub3dyYXAuaXNOdWxsKCkgJiYgdy5pc0ZpeGVkKCkpCisgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbm93cmFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUo
KSktPmdldEF0dHJpYnV0ZShub3dyYXBBdHRyKTsKKyAgICAgICAgaWYgKCFub3dyYXAuaXNOdWxs
KCkgJiYgdy5pc0ZpeGVkKCkpIHsKICAgICAgICAgICAgIC8vIE5vd3JhcCBpcyBzZXQsIGJ1dCB3
ZSBkaWRuJ3QgYWN0dWFsbHkgdXNlIGl0IGJlY2F1c2Ugb2YgdGhlCiAgICAgICAgICAgICAvLyBm
aXhlZCB3aWR0aCBzZXQgb24gdGhlIGNlbGwuICBFdmVuIHNvLCBpdCBpcyBhIFdpbklFL01veiB0
cmFpdAogICAgICAgICAgICAgLy8gdG8gbWFrZSB0aGUgbWlud2lkdGggb2YgdGhlIGNlbGwgaW50
byB0aGUgZml4ZWQgd2lkdGguICBUaGV5IGRvIHRoaXMKICAgICAgICAgICAgIC8vIGV2ZW4gaW4g
c3RyaWN0IG1vZGUsIHNvIGRvIG5vdCBtYWtlIHRoaXMgYSBxdWlyay4gIEFmZmVjdGVkIHRoZSB0
b3AKICAgICAgICAgICAgIC8vIG9mIGhpcHRvcC5jb20uCiAgICAgICAgICAgICBtX21pblByZWZX
aWR0aCA9IG1heCh3LnZhbHVlKCksIG1fbWluUHJlZldpZHRoKTsKKyAgICAgICAgfQogICAgIH0K
IH0KIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL3N2
Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEwICs1NSw2IEBAIFNWR0FF
bGVtZW50OjpTVkdBRWxlbWVudChjb25zdCBRdWFsaWZpZWQKIHsKIH0KIAotU1ZHQUVsZW1lbnQ6
On5TVkdBRWxlbWVudCgpCi17Ci19Ci0KIFN0cmluZyBTVkdBRWxlbWVudDo6dGl0bGUoKSBjb25z
dAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6dGl0bGVBdHRyKTsKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcv
U1ZHQUVsZW1lbnQuaAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL3N2Zy9TVkdBRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0FFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwotICAgICAgICB2aXJ0dWFsIH5TVkdBRWxlbWVudCgpOwogCiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFs
aWQoKTsgfQogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50OjpSb3RhdGVNb2RlIFNWR0EKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IEF0b21pY1N0cmluZywgYXV0b1ZhbCwgKCJhdXRvIikpOwogICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBhdXRvUmV2ZXJzZSwgKCJhdXRvLXJldmVyc2UiKSk7
Ci0gICAgU3RyaW5nIHJvdGF0ZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6cm90YXRlQXR0cik7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiByb3RhdGUgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnJvdGF0ZUF0dHIpOwogICAgIGlmIChyb3RhdGUgPT0gYXV0b1ZhbCkKICAgICAgICAgcmV0dXJu
IFJvdGF0ZUF1dG87CiAgICAgaWYgKHJvdGF0ZSA9PSBhdXRvUmV2ZXJzZSkKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA0Mjg5MykKKysrIFdlYkNvcmUvc3Zn
L1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsMTcgKzIyNSwx
NyBAQCBTVkdBbmltYXRpb25FbGVtZW50OjpBdHRyaWJ1dGVUeXBlIFNWR0FuCiAgICAgcmV0dXJu
IEF0dHJpYnV0ZVR5cGVBdXRvOwogfQogCi1TdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6dG9W
YWx1ZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRv
VmFsdWUoKSBjb25zdAogeyAgICAKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjp0
b0F0dHIpOwogfQogCi1TdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6YnlWYWx1ZSgpIGNvbnN0
Citjb25zdCBBdG9taWNTdHJpbmcmIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJ5VmFsdWUoKSBjb25z
dAogeyAgICAKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpieUF0dHIpOwogfQog
Ci1TdHJpbmcgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZnJvbVZhbHVlKCkgY29uc3QKK2NvbnN0IEF0
b21pY1N0cmluZyYgU1ZHQW5pbWF0aW9uRWxlbWVudDo6ZnJvbVZhbHVlKCkgY29uc3QKIHsgICAg
CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShTVkdOYW1lczo6ZnJvbUF0dHIpOwogfQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL3N2
Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDkgKzc0LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBlbnVtIEF0dHJpYnV0ZVR5cGUgeyBBdHRyaWJ1
dGVUeXBlQ1NTLCBBdHRyaWJ1dGVUeXBlWE1MLCBBdHRyaWJ1dGVUeXBlQXV0byB9OwogICAgICAg
ICBBdHRyaWJ1dGVUeXBlIGF0dHJpYnV0ZVR5cGUoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAg
IFN0cmluZyB0b1ZhbHVlKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBieVZhbHVlKCkgY29uc3Q7
Ci0gICAgICAgIFN0cmluZyBmcm9tVmFsdWUoKSBjb25zdDsKKyAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB0b1ZhbHVlKCkgY29uc3Q7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYnlW
YWx1ZSgpIGNvbnN0OworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZyb21WYWx1ZSgpIGNv
bnN0OwogICAgICAgICAKICAgICAgICAgZW51bSBBbmltYXRpb25Nb2RlIHsgTm9BbmltYXRpb24s
IFRvQW5pbWF0aW9uLCBCeUFuaW1hdGlvbiwgVmFsdWVzQW5pbWF0aW9uLCBGcm9tVG9BbmltYXRp
b24sIEZyb21CeUFuaW1hdGlvbiwgUGF0aEFuaW1hdGlvbiB9OwogICAgICAgICBBbmltYXRpb25N
b2RlIGFuaW1hdGlvbk1vZGUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0
Mjg5MykKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MiwyMiArNzIsMjIgQEAgYm9vbCBTVkdFbGVtZW50Ojppc1N1cHBvcnRlZChTdHJpbmdJbXBsKgog
ICAgIHJldHVybiBET01JbXBsZW1lbnRhdGlvbjo6aGFzRmVhdHVyZShmZWF0dXJlLCB2ZXJzaW9u
KTsKIH0KIAotU3RyaW5nIFNWR0VsZW1lbnQ6OmlkKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmlu
ZyYgU1ZHRWxlbWVudDo6aWQoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoaWRB
dHRyKTsKIH0KIAotdm9pZCBTVkdFbGVtZW50OjpzZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlLCBF
eGNlcHRpb25Db2RlJikKK3ZvaWQgU1ZHRWxlbWVudDo6c2V0SWQoY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoaWRBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmlu
ZyBTVkdFbGVtZW50Ojp4bWxiYXNlKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgU1ZHRWxl
bWVudDo6eG1sYmFzZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShYTUxOYW1l
czo6YmFzZUF0dHIpOwogfQogCi12b2lkIFNWR0VsZW1lbnQ6OnNldFhtbGJhc2UoY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpCit2b2lkIFNWR0VsZW1lbnQ6OnNldFhtbGJhc2Uo
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoWE1MTmFtZXM6
OmJhc2VBdHRyLCB2YWx1ZSk7CiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiA0Mjg5MykKKysr
IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzU1ZHRWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzU3VwcG9y
dGVkKFN0cmluZ0ltcGwqIGZlYXR1cmUsIFN0cmluZ0ltcGwqIHZlcnNpb24pIGNvbnN0OwogICAg
ICAgICAKLSAgICAgICAgU3RyaW5nIGlkKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0SWQoY29u
c3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgICAgICBTdHJpbmcgeG1sYmFzZSgpIGNv
bnN0OwotICAgICAgICB2b2lkIHNldFhtbGJhc2UoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkKCkgY29uc3Q7CisgICAgICAgIHZv
aWQgc2V0SWQoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgeG1sYmFzZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFhtbGJhc2UoY29uc3QgQXRvbWlj
U3RyaW5nJik7CiAKICAgICAgICAgU1ZHU1ZHRWxlbWVudCogb3duZXJTVkdFbGVtZW50KCkgY29u
c3Q7CiAgICAgICAgIFNWR0VsZW1lbnQqIHZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OwpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5pZGwJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSw4IEBACiBtb2R1bGUgc3ZnIHsKIAogICAg
IGludGVyZmFjZSBbR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIsIENvbmRpdGlvbmFsPVNWR10gU1ZH
RWxlbWVudCA6IEVsZW1lbnQgewotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnRO
dWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgaWQKLSAgICAgICAgICAgICAgICAgICAgIHNldHRl
ciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHhtbGJhc2UKLSAgICAgICAgICAgICAgICAg
ICAgIHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgYXR0cmli
dXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGlkOworICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgeG1sYmFz
ZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR1NWR0VsZW1lbnQgb3duZXJTVkdFbGVt
ZW50OwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHRWxlbWVudCB2aWV3cG9ydEVsZW1l
bnQ7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkocmV2aXNpb24gNDI4OTMp
CisrKyBXZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjMsNyArMTIzLDcgQEAgdm9pZCBTVkdHbHlwaEVsZW1lbnQ6OmluaGVyaXRVbnNwZWNpZmllZAog
CiBzdGF0aWMgaW5saW5lIGZsb2F0IHBhcnNlU1ZHR2x5cGhBdHRyaWJ1dGUoY29uc3QgU1ZHRWxl
bWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKLSAg
ICBBdG9taWNTdHJpbmcgdmFsdWUoZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWUpKTsKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWUpOwog
ICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTVkdHbHlwaElkZW50aWZp
ZXI6OmluaGVyaXRlZFZhbHVlKCk7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NN
SUxFbGVtZW50LmNwcAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL3N2Zy9hbmltYXRpb24v
U1ZHU01JTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsNyArNDc1LDcgQEAgU1ZH
U01JTEVsZW1lbnQ6OkZpbGxNb2RlIFNWR1NNSUxFbGVtZW50OgogICAgIHJldHVybiB2YWx1ZSA9
PSBmcmVlemUgPyBGaWxsRnJlZXplIDogRmlsbFJlbW92ZTsKIH0KICAgICAKLVN0cmluZyBTVkdT
TUlMRWxlbWVudDo6eGxpbmtIcmVmKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgU1ZHU01J
TEVsZW1lbnQ6OnhsaW5rSHJlZigpIGNvbnN0CiB7ICAgIAogICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOwogfQpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmgJKHJldmlzaW9uIDQyODkzKQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9u
L1NWR1NNSUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBlbnVtIEZpbGxNb2RlIHsgRmlsbFJlbW92ZSwgRmlsbEZy
ZWV6ZSB9OwogICAgICAgICBGaWxsTW9kZSBmaWxsKCkgY29uc3Q7CiAgICAgICAgIAotICAgICAg
ICBTdHJpbmcgeGxpbmtIcmVmKCkgY29uc3Q7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
eGxpbmtIcmVmKCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBTTUlMVGltZSBkdXIoKSBjb25z
dDsKICAgICAgICAgU01JTFRpbWUgcmVwZWF0RHVyKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3dt
bC9XTUxPcHRHcm91cEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxPcHRH
cm91cEVsZW1lbnQuaAkocmV2aXNpb24gNDI4OTMpCisrKyBXZWJDb3JlL3dtbC9XTUxPcHRHcm91
cEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBwdWJsaWM6CiAgICAg
V01MT3B0R3JvdXBFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
Kik7CiAgICAgdmlydHVhbCB+V01MT3B0R3JvdXBFbGVtZW50KCk7CiAKLSAgICBTdHJpbmcgdGl0
bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdGl0bGUo
KSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSgpIGNvbnN0OwogCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJl
cHJlc2VudGF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1M
UmVwcmVzZW50YXRpb24ubW0JKHJldmlzaW9uIDQyODkzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjc0LDcgKzI3NCw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVt
ZW50RnJvbUQKICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnRG
cm9tRE9NRWxlbWVudChmb3JtKTsKICAgICBpZiAoIWZvcm1FbGVtZW50KQogICAgICAgICByZXR1
cm4gbmlsOwotICAgIFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGVsZW1lbnRzID0g
Zm9ybUVsZW1lbnQtPmZvcm1FbGVtZW50czsKKyAgICBjb25zdCBWZWN0b3I8SFRNTEZvcm1Db250
cm9sRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5mb3JtQ29udHJvbEVsZW1lbnRz
KCk7CiAgICAgQXRvbWljU3RyaW5nIHRhcmdldE5hbWUgPSBuYW1lOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBlbGVtZW50cy5zaXplKCk7IGkrKykgewogICAgICAgICBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50KiBlbHQgPSBlbGVtZW50c1tpXTsKQEAgLTMyMSwxOCArMzIxLDE4IEBAIHN0
YXRpYyBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnRGcm8KICAgICBIVE1MRm9ybUVsZW1l
bnQqIGZvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChmb3JtKTsKICAgICBp
ZiAoIWZvcm1FbGVtZW50KQogICAgICAgICByZXR1cm4gbmlsOwotICAgIE5TTXV0YWJsZUFycmF5
ICpyZXN1bHRzID0gbmlsOwotICAgIFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mIGVs
ZW1lbnRzID0gZm9ybUVsZW1lbnQtPmZvcm1FbGVtZW50czsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGVsZW1lbnRzW2ld
LT5pc0VudW1lcmF0YWJsZSgpKSB7IC8vIFNraXAgb3B0aW9uIGVsZW1lbnRzLCBvdGhlciBkdWRz
Ci0gICAgICAgICAgICBET01FbGVtZW50KiBkZSA9IGtpdChlbGVtZW50c1tpXSk7Ci0gICAgICAg
ICAgICBpZiAoIXJlc3VsdHMpCi0gICAgICAgICAgICAgICAgcmVzdWx0cyA9IFtOU011dGFibGVB
cnJheSBhcnJheVdpdGhPYmplY3Q6ZGVdOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIFtyZXN1bHRzIGFkZE9iamVjdDpkZV07Ci0gICAgICAgIH0KKyAgICBjb25zdCBWZWN0b3I8
SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiBlbGVtZW50cyA9IGZvcm1FbGVtZW50LT5mb3JtQ29u
dHJvbEVsZW1lbnRzKCk7CisgICAgc2l6ZV90IHNpemUgPSBlbGVtZW50cy5zaXplKCk7CisgICAg
TlNNdXRhYmxlQXJyYXkgKnJlc3VsdHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5OnNpemVdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7
CisgICAgICAgIGlmIChlbGVtZW50c1tpXS0+aXNFbnVtZXJhdGFibGUoKSkgLy8gU2tpcCBvcHRp
b24gZWxlbWVudHMsIG90aGVyIGR1ZHMKKyAgICAgICAgICAgIFtyZXN1bHRzIGFkZE9iamVjdDpr
aXQoZWxlbWVudHNbaV0pXTsKKyAgICB9CisgICAgaWYgKCFbcmVzdWx0cyBjb3VudF0pIHsKKyAg
ICAgICAgW3Jlc3VsdHMgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQotICAg
IHJldHVybiByZXN1bHRzOworICAgIHJldHVybiBbcmVzdWx0cyBhdXRvcmVsZWFzZV07CiB9CiAK
IC0gKE5TU3RyaW5nICopc2VhcmNoRm9yTGFiZWxzOihOU0FycmF5ICopbGFiZWxzIGJlZm9yZUVs
ZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31632</attachid>
            <date>2009-06-21 22:30:36 -0700</date>
            <delta_ts>2009-06-22 09:33:28 -0700</delta_ts>
            <desc>patch for part 1</desc>
            <filename>ReflectPatch1.txt</filename>
            <type>text/plain</type>
            <size>16514</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDkyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDktMDYtMjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
NTQyNTogRE9NIGF0dHJpYnV0ZSBnZXR0ZXIvc2V0dGVyIGZ1bmN0aW9ucyBzaG91bGQgdXNlIGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjU0MjUKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOiBUd2Vha2VkIG1lY2hhbmlzbSBmb3IgaW5jbHVkZXMgdG8gYmUgYSBiaXQK
KyAgICAgICAgbW9yZSBjb25zaXN0ZW50IGFuZCB0byBtYWtlIFNWR0VsZW1lbnQuaCBiZSBpbmNs
dWRlZCBpbiB0aGUgaGVhZGVyIHJhdGhlciB0aGFuIGluCisgICAgICAgIGV2ZXJ5IGltcGxlbWVu
dGF0aW9uIGZpbGUgdGhhdCBpbmNsdWRlcyB0aGUgaGVhZGVyLiBBZGRlZCBjb2RlIHRvIHVzZSBn
ZXRBdHRyaWJ1dGUKKyAgICAgICAgYW5kIHNldEF0dHJpYnV0ZSBkaXJlY3RseSB3aGVuIHRoZSBb
UmVmbGVjdF0gZXh0ZW5kZWQgYXR0cmlidXRlIGlzIHVzZWQuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtOiBEaXR0by4KKworICAgICAgICAqIGh0bWwv
SFRNTEVsZW1lbnQuaWRsOiBVc2VkIFtSZWZsZWN0XSBmb3IgYWxsIHRoZSBhdHRyaWJ1dGVzIGlu
IHRoaXMgY2xhc3MgdGhhdAorICAgICAgICByZWZsZWN0IGNvbnRlbnQgYXR0cmlidXRlcy4gUmVz
dHJpY3RpbmcgdGhpcyB0byBvbmUgY2xhc3MgZm9yIG5vdyB0byBrZWVwIHRoZQorICAgICAgICBw
YXRjaCBzbWFsbCBhbmQgc3RhcnQgb3V0IHNsb3dseS4KKwogMjAwOS0wNi0yMSAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZp
c2lvbiA0NDkyNykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAgbXkgJWhlYWRlckluY2x1ZGVzID0g
KCk7CiBteSBAaW1wbENvbnRlbnRIZWFkZXIgPSAoKTsKIG15IEBpbXBsQ29udGVudCA9ICgpOwog
bXkgJWltcGxJbmNsdWRlcyA9ICgpOwotbXkgJWltcGxLSlNJbmNsdWRlcyA9ICgpOwogCiAjIERl
ZmF1bHQgLmggdGVtcGxhdGUKIG15ICRoZWFkZXJUZW1wbGF0ZSA9IDw8ICJFT0YiOwpAQCAtMjIw
LDcgKzIxOSw3IEBAIHN1YiBBZGRDbGFzc0ZvcndhcmRJZk5lZWRlZAogewogICAgIG15ICRpbXBs
Q2xhc3NOYW1lID0gc2hpZnQ7CiAKLSAgICAjIFNWR0FuaW1hdGVkTGVuZ3RoL051bWJlci9ldGMu
LiBhcmUgdHlwZWRlZnMgdG8gU1ZHQW5pbXRhdGVkVGVtcGxhdGUsIHNvIGRvbid0IHVzZSBjbGFz
cyBmb3J3YXJkcyBmb3IgdGhlbSEKKyAgICAjIFNWR0FuaW1hdGVkTGVuZ3RoL051bWJlci9ldGMu
IGFyZSB0eXBlZGVmcyB0byBTVkdBbmltYXRlZFRlbXBsYXRlLCBzbyBkb24ndCB1c2UgY2xhc3Mg
Zm9yd2FyZHMgZm9yIHRoZW0hCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRpbXBs
Q2xhc3NOYW1lO1xuXG4iKSB1bmxlc3MgJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBl
KCRpbXBsQ2xhc3NOYW1lKTsKIH0KIApAQCAtMzc4LDM2ICszNzcsMzggQEAgc3ViIEdlbmVyYXRl
SGVhZGVyCiAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgIGlmICgkY29uZGl0aW9uYWwp
IHsKICAgICAgICAgJGNvbmRpdGlvbmFsU3RyaW5nID0gIkVOQUJMRSgiIC4gam9pbigiKSAmJiBF
TkFCTEUoIiwgc3BsaXQoLyYvLCAkY29uZGl0aW9uYWwpKSAuICIpIjsKLSAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudEhlYWRlciwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpOwor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCAiI2lmICR7Y29uZGl0aW9uYWxTdHJp
bmd9XG5cbiIpOwogICAgIH0KIAogICAgIGlmICgkaGFzUGFyZW50KSB7Ci0gICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnRIZWFkZXIsICIjaW5jbHVkZSBcIiRwYXJlbnRDbGFzc05hbWUuaFwiXG4i
KTsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkcGFyZW50Q2xhc3NOYW1lLmgifSA9IDE7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIiNpbmNsdWRl
IFwiSlNET01CaW5kaW5nLmhcIlxuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFk
ZXIsICIjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPlxuIik7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICIjaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5
cGUuaD5cbiIpOworICAgICAgICAkaGVhZGVySW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAx
OworICAgICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+In0g
PSAxOworICAgICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lL09iamVjdFByb3RvdHlwZS5o
PiJ9ID0gMTsKICAgICB9CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tQ2FsbCJ9KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICIj
aW5jbHVkZSA8cnVudGltZS9DYWxsRGF0YS5oPlxuIik7CisgICAgICAgICRoZWFkZXJJbmNsdWRl
c3siPHJ1bnRpbWUvQ2FsbERhdGEuaD4ifSA9IDE7CiAgICAgfQogCiAgICAgaWYgKCRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklubGluZUdldE93blByb3BlcnR5U2xvdCJ9KSB7Ci0g
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICIjaW5jbHVkZSA8cnVudGltZS9Mb29r
dXAuaD5cbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCAiI2luY2x1ZGUg
PHd0Zi9BbHdheXNJbmxpbmUuaD5cbiIpOworICAgICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50
aW1lL0xvb2t1cC5oPiJ9ID0gMTsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyI8d3RmL0Fsd2F5
c0lubGluZS5oPiJ9ID0gMTsKICAgICB9CiAKICAgICBpZiAoJGhhc1BhcmVudCAmJiAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciJ9KSB7Ci0g
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICIjaW5jbHVkZSBcIiR7aW1wbENsYXNz
TmFtZX0uaFwiIik7CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJGltcGxDbGFzc05hbWUuaCJ9
ID0gMTsKICAgICB9CiAKKyAgICAkaGVhZGVySW5jbHVkZXN7IlNWR0VsZW1lbnQuaCJ9ID0gMSBp
ZiAkY2xhc3NOYW1lID1+IC9eSlNTVkcvOworCiAgICAgIyBHZXQgY29ycmVjdCBwYXNzL3N0b3Jl
IHR5cGVzIHJlc3BlY3RpbmcgUE9EVHlwZSBmbGFnCiAgICAgbXkgJHBvZFR5cGUgPSAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQT0RUeXBlIn07CiAgICAgbXkgJGltcGxUeXBlID0g
JHBvZFR5cGUgPyAiSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4gIiA6ICRpbXBsQ2xhc3NO
YW1lOwotICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsICIjaW5jbHVkZSBcIiRwb2RUeXBl
LmhcIlxuIikgaWYgJHBvZFR5cGUgYW5kICRwb2RUeXBlIG5lICJmbG9hdCI7CisgICAgJGhlYWRl
ckluY2x1ZGVzeyIkcG9kVHlwZS5oIn0gPSAxIGlmICRwb2RUeXBlIGFuZCAkcG9kVHlwZSBuZSAi
ZmxvYXQiOwogCi0gICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwgIiNpbmNsdWRlIFwiSlNT
VkdQT0RUeXBlV3JhcHBlci5oXCJcbiIpIGlmICRwb2RUeXBlOworICAgICRoZWFkZXJJbmNsdWRl
c3siSlNTVkdQT0RUeXBlV3JhcHBlci5oIn0gPSAxIGlmICRwb2RUeXBlOwogCiAgICAgbXkgJG51
bUNvbnN0YW50cyA9IEB7JGRhdGFOb2RlLT5jb25zdGFudHN9OwogICAgIG15ICRudW1BdHRyaWJ1
dGVzID0gQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9OwpAQCAtNzQyLDI1ICs3NDMsMTkgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVt
cGxhdGUKICAgICBAaW1wbENvbnRlbnRIZWFkZXIgPSBzcGxpdCgiXHIiLCAkaGVhZGVyVGVtcGxh
dGUpOwotICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiXG4jaW5jbHVkZSBcImNvbmZpZy5o
XCJcblxuIik7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIlxuI2luY2x1ZGUgXCJj
b25maWcuaFwiXG4iKTsKICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgaWYgKCRjb25k
aXRpb25hbCkgewogICAgICAgICAkY29uZGl0aW9uYWxTdHJpbmcgPSAiRU5BQkxFKCIgLiBqb2lu
KCIpICYmIEVOQUJMRSgiLCBzcGxpdCgvJi8sICRjb25kaXRpb25hbCkpIC4gIikiOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIlxuI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5c
biIpOwogICAgIH0KLQotICAgIGlmICgkY2xhc3NOYW1lID1+IC9eSlNTVkcvKSB7Ci0gICAgICAg
IHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiI2luY2x1ZGUgXCJTVkdFbGVtZW50LmhcIlxuIik7
Ci0KLSAgICAgICAgaWYgKCRjbGFzc05hbWUgPX4gL15KU1NWR0FuaW1hdGVkLykgewotICAgICAg
ICAgICAgQWRkSW5jbHVkZXNGb3JTVkdBbmltYXRlZFR5cGUoJGludGVyZmFjZU5hbWUpOwotICAg
ICAgICB9Ci0gICAgfQotCiAgICAgcHVzaChAaW1wbENvbnRlbnRIZWFkZXIsICIjaW5jbHVkZSBc
IiRjbGFzc05hbWUuaFwiXG5cbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD5cblxuIik7CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRl
ciwgIiNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg+XG4iKSBpZiAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNJbmRleEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4R2V0dGVyIn07CisgICAgQWRkSW5j
bHVkZXNGb3JTVkdBbmltYXRlZFR5cGUoJGludGVyZmFjZU5hbWUpIGlmICRjbGFzc05hbWUgPX4g
L15KU1NWR0FuaW1hdGVkLzsKKworICAgICRpbXBsSW5jbHVkZXN7Ijx3dGYvR2V0UHRyLmg+In0g
PSAxOworICAgICRpbXBsSW5jbHVkZXN7IjxydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg+In0g
PSAxIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0dGVyIn0g
fHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5kZXhHZXR0ZXIi
fTsKIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkaW50ZXJmYWNlTmFtZSk7CiAKQEAgLTExNTgs
NyArMTE1MywxNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxDbGFzc05hbWUqIGltcCA9IHN0
YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4oc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KGFzT2Jq
ZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5pbXBsKCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBteSAkanNUeXBlID0gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwg
MCwgJGltcGxDbGFzc05hbWUsICRpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJzaW9uLCAiaW1w
LT4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgpIiwgInN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihh
c09iamVjdChzbG90LnNsb3RCYXNlKCkpKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgbXkg
JHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15ICRyZWZsZWN0ID0gJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSFRNTE5hbWVzLmgifSA9IDE7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGNvbnRlbnRBdHRyaWJ1dGVOYW1lID0g
JHJlZmxlY3QgZXEgIjEiID8gJG5hbWUgOiAkcmVmbGVjdDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkdmFsdWUgPSAiaW1wLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjoke2NvbnRlbnRB
dHRyaWJ1dGVOYW1lfUF0dHIpIgorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAiaW1wLT4kaW1wbEdldHRlckZ1bmN0
aW9uTmFtZSgpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIG15ICRqc1R5cGUgPSBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LCAwLCAkaW1wbENsYXNzTmFtZSwgJGltcGxDbGFzc05hbWVGb3JWYWx1ZUNvbnZlcnNpb24sICR2
YWx1ZSwgInN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkp
KSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR0Fu
aW1hdGVkVHlwZSgkdHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBSZWZQdHI8JHR5cGU+IG9iaiA9ICRqc1R5cGU7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gdG9K
UyhleGVjLCBvYmouZ2V0KCksIGltcCk7XG4iKTsKQEAgLTEyOTksOCArMTMwMiwxNSBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNP
YmplY3QpLT5pbXBsKCktPmNvbW1pdENoYW5nZShpbXAsIHN0YXRpY19jYXN0PCRjbGFzc05hbWUq
Pih0aGlzT2JqZWN0KS0+Y29udGV4dCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBzdGF0aWNfY2FzdDwkaW1wbENsYXNz
TmFtZSo+KHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+aW1wbCgpKTtcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkbmF0aXZlVmFsdWUgPSBKU1Zh
bHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7XG4iKSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpbXAtPnNl
dCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLCAidmFsdWUiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChteSAkcmVmbGVjdCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IlJlZmxlY3QifSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siSFRNTE5hbWVzLmgifSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBteSAkY29udGVudEF0dHJpYnV0ZU5hbWUgPSAkcmVmbGVjdCBlcSAiMSIgPyAk
bmFtZSA6ICRyZWZsZWN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaW1wLT5zZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjoke2NvbnRl
bnRBdHRyaWJ1dGVOYW1lfUF0dHIsICRuYXRpdmVWYWx1ZSIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1wLT5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFt
ZSgkbmF0aXZlVmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwgZWMiKSBp
ZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIik7XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTtcbiIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CkBAIC0xMzQ4
LDcgKzEzNTgsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIFVOVVNFRF9QQVJBTShhcmdzKTtcbiIpOwogCi0gICAgICAgICAgICAkaW1wbEtKU0luY2x1
ZGV7IkVycm9yLmgifSA9IDE7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9F
cnJvci5oPiJ9ID0gMTsKIAogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01X
aW5kb3ciKSB7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNz
TmFtZSogY2FzdGVkVGhpc09iaiA9IHRvSlNET01XaW5kb3codGhpc1ZhbHVlLnRvVGhpc09iamVj
dChleGVjKSk7XG4iKTsKQEAgLTE2NjQsNyArMTY3NCw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUK
ICAgICByZXR1cm4gImpzQm9vbGVhbigkdmFsdWUpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7CiAg
ICAgCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICR0
eXBlIGVxICJTVkdQYWludFR5cGUiIG9yICR0eXBlIGVxICJET01UaW1lU3RhbXAiKSB7Ci0gICAg
ICAgICRpbXBsS0pTSW5jbHVkZXsiSlNOdW1iZXJDZWxsLmgifSA9IDE7CisgICAgICAgICRpbXBs
SW5jbHVkZXN7IjxydW50aW1lL0pTTnVtYmVyQ2VsbC5oPiJ9ID0gMTsKICAgICAgICAgcmV0dXJu
ICJqc051bWJlcihleGVjLCAkdmFsdWUpIjsKICAgICB9CiAKQEAgLTE2NzgsNyArMTY4OCw3IEBA
IHN1YiBOYXRpdmVUb0pTVmFsdWUKIAogICAgICAgICAgICAgZGllICJVbmtub3duIHZhbHVlIGZv
ciBDb252ZXJ0TnVsbFN0cmluZ1RvIGV4dGVuZGVkIGF0dHJpYnV0ZSI7CiAgICAgICAgIH0KLSAg
ICAgICAgJGltcGxLSlNJbmNsdWRleyJKU1N0cmluZy5oIn0gPSAxOworICAgICAgICAkaW1wbElu
Y2x1ZGVzeyI8cnVudGltZS9KU1N0cmluZy5oPiJ9ID0gMTsKICAgICAgICAgcmV0dXJuICJqc1N0
cmluZyhleGVjLCAkdmFsdWUpIjsKICAgICB9CiAKQEAgLTE5NjQsMTcgKzE5NzQsMTcgQEAgc3Vi
IFdyaXRlRGF0YQogICAgICAgICAjIFdyaXRlIGNvbnRlbnQgdG8gZmlsZS4KICAgICAgICAgcHJp
bnQgJElNUEwgQGltcGxDb250ZW50SGVhZGVyOwogCi0gICAgICAgIGZvcmVhY2ggbXkgJGltcGxJ
bmNsdWRlIChzb3J0IGtleXMoJWltcGxJbmNsdWRlcykpIHsKLSAgICAgICAgICAgIG15ICRjaGVj
a1R5cGUgPSAkaW1wbEluY2x1ZGU7CisgICAgICAgIG15IEBpbmNsdWRlcyA9ICgpOworICAgICAg
ICBmb3JlYWNoIG15ICRpbmNsdWRlIChrZXlzICVpbXBsSW5jbHVkZXMpIHsKKyAgICAgICAgICAg
IG15ICRjaGVja1R5cGUgPSAkaW5jbHVkZTsKICAgICAgICAgICAgICRjaGVja1R5cGUgPX4gcy9c
LmgvLzsKKyAgICAgICAgICAgIG5leHQgaWYgJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRU
eXBlKCRjaGVja1R5cGUpOwogCi0gICAgICAgICAgICBwcmludCAkSU1QTCAiI2luY2x1ZGUgXCIk
aW1wbEluY2x1ZGVcIlxuIiB1bmxlc3MgJGNvZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBl
KCRjaGVja1R5cGUpOworICAgICAgICAgICAgJGluY2x1ZGUgPSAiXCIkaW5jbHVkZVwiIiB1bmxl
c3MgJGluY2x1ZGUgPX4gL15bIjxdLzsgIyAiCisgICAgICAgICAgICBwdXNoIEBpbmNsdWRlcywg
JGluY2x1ZGU7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaW50ICRJTVBMICJcbiI7
Ci0KLSAgICAgICAgZm9yZWFjaCBteSAkaW1wbEtKU0luY2x1ZGUgKHNvcnQga2V5cyglaW1wbEtK
U0luY2x1ZGUpKSB7Ci0gICAgICAgICAgICBwcmludCAkSU1QTCAiI2luY2x1ZGUgPHJ1bnRpbWUv
JGltcGxLSlNJbmNsdWRlPlxuIjsKKyAgICAgICAgZm9yZWFjaCBteSAkaW5jbHVkZSAoc29ydCBA
aW5jbHVkZXMpIHsKKyAgICAgICAgICAgIHByaW50ICRJTVBMICIjaW5jbHVkZSAkaW5jbHVkZVxu
IjsKICAgICAgICAgfQogCiAgICAgICAgIHByaW50ICRJTVBMIEBpbXBsQ29udGVudDsKQEAgLTE5
ODQsMTUgKzE5OTQsMTkgQEAgc3ViIFdyaXRlRGF0YQogICAgICAgICBAaW1wbENvbnRlbnRIZWFk
ZXIgPSAoKTsKICAgICAgICAgQGltcGxDb250ZW50ID0gKCk7CiAgICAgICAgICVpbXBsSW5jbHVk
ZXMgPSAoKTsKLSAgICAgICAgJWltcGxLSlNJbmNsdWRlcyA9ICgpOwogICAgIH0KIAogICAgIGlm
IChkZWZpbmVkKCRIRUFERVIpKSB7CiAgICAgICAgICMgV3JpdGUgY29udGVudCB0byBmaWxlLgog
ICAgICAgICBwcmludCAkSEVBREVSIEBoZWFkZXJDb250ZW50SGVhZGVyOwogCi0gICAgICAgIGZv
cmVhY2ggbXkgJGhlYWRlckluY2x1ZGUgKHNvcnQga2V5cyglaGVhZGVySW5jbHVkZXMpKSB7Ci0g
ICAgICAgICAgICBwcmludCAkSEVBREVSICIjaW5jbHVkZSBcIiRoZWFkZXJJbmNsdWRlXCJcbiI7
CisgICAgICAgIG15IEBpbmNsdWRlcyA9ICgpOworICAgICAgICBmb3JlYWNoIG15ICRpbmNsdWRl
IChrZXlzICVoZWFkZXJJbmNsdWRlcykgeworICAgICAgICAgICAgJGluY2x1ZGUgPSAiXCIkaW5j
bHVkZVwiIiB1bmxlc3MgJGluY2x1ZGUgPX4gL15bIjxdLzsgIyAiCisgICAgICAgICAgICBwdXNo
IEBpbmNsdWRlcywgJGluY2x1ZGU7CisgICAgICAgIH0KKyAgICAgICAgZm9yZWFjaCBteSAkaW5j
bHVkZSAoc29ydCBAaW5jbHVkZXMpIHsKKyAgICAgICAgICAgIHByaW50ICRIRUFERVIgIiNpbmNs
dWRlICRpbmNsdWRlXG4iOwogICAgICAgICB9CiAKICAgICAgICAgcHJpbnQgJEhFQURFUiBAaGVh
ZGVyQ29udGVudDsKQEAgLTIwNTcsNyArMjA3MSw3IEBAIGJvb2wgJHtjbGFzc05hbWV9Q29uc3Ry
dWN0b3I6OmdldE93blByb3AKIAogRU9GCiAKLSAgICAkaW1wbEtKU0luY2x1ZGV7IkpTTnVtYmVy
Q2VsbC5oIn0gPSAxOworICAgICRpbXBsSlNDSW5jbHVkZXsiSlNOdW1iZXJDZWxsLmgifSA9IDE7
CiAKICAgICByZXR1cm4gJGltcGxDb250ZW50OwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQkocmV2aXNpb24gNDQ5MjcpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTExMjksNyArMTEyOSwxNCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICAgICAgIyAtIEdFVFRFUgogICAgICAgICAgICAgbXkgJGdldHRlclNpZyA9ICItICgkYXR0cmli
dXRlVHlwZSkkYXR0cmlidXRlSW50ZXJmYWNlTmFtZVxuIjsKICAgICAgICAgICAgIG15ICRoYXNH
ZXR0ZXJFeGNlcHRpb24gPSBAeyRhdHRyaWJ1dGUtPmdldHRlckV4Y2VwdGlvbnN9OwotICAgICAg
ICAgICAgbXkgJGdldHRlckNvbnRlbnRIZWFkID0gIklNUEwtPiIgLiAkY29kZUdlbmVyYXRvci0+
V0tfbGNmaXJzdCgkYXR0cmlidXRlTmFtZSkgLiAiKCI7CisgICAgICAgICAgICBteSAkZ2V0dGVy
Q29udGVudEhlYWQ7CisgICAgICAgICAgICBpZiAobXkgJHJlZmxlY3QgPSAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In0pIHsKKyAgICAgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJIVE1MTmFtZXMuaCJ9ID0gMTsKKyAgICAgICAgICAgICAgICBt
eSAkY29udGVudEF0dHJpYnV0ZU5hbWUgPSAkcmVmbGVjdCBlcSAiMSIgPyAkYXR0cmlidXRlTmFt
ZSA6ICRyZWZsZWN0OworICAgICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50SGVhZCA9ICJJTVBM
LT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjoke2NvbnRlbnRBdHRyaWJ1dGVOYW1l
fUF0dHIiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAkZ2V0dGVyQ29u
dGVudEhlYWQgPSAiSU1QTC0+IiAuICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRhdHRyaWJ1
dGVOYW1lKSAuICIoIjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG15ICRnZXR0ZXJDb250
ZW50VGFpbCA9ICIpIjsKIAogICAgICAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIERPTVNWR051
bWJlcgpAQCAtMTIyNiw3ICsxMjMzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgICAgICAgICAjIEV4Y2VwdGlvbiBoYW5kbGluZwogICAgICAgICAgICAgICAgIG15ICRo
YXNTZXR0ZXJFeGNlcHRpb24gPSBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9OwogCi0g
ICAgICAgICAgICAgICAgJGF0dHJpYnV0ZU5hbWUgPSAic2V0IiAuICRjb2RlR2VuZXJhdG9yLT5X
S191Y2ZpcnN0KCRhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgICAgICBteSAkY29yZVNldHRl
ck5hbWUgPSAic2V0IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1dGVOYW1l
KTsKICAgICAgICAgICAgICAgICBteSAkc2V0dGVyTmFtZSA9ICJzZXQiIC4gdWNmaXJzdCgkYXR0
cmlidXRlSW50ZXJmYWNlTmFtZSk7CiAgICAgICAgICAgICAgICAgbXkgJGFyZ05hbWUgPSAibmV3
IiAuIHVjZmlyc3QoJGF0dHJpYnV0ZUludGVyZmFjZU5hbWUpOwogICAgICAgICAgICAgICAgIG15
ICRhcmcgPSBHZXRPYmpDVHlwZUdldHRlcigkYXJnTmFtZSwgJGlkbFR5cGUpOwpAQCAtMTI1Miwx
NCArMTI1OSwxOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAg
ICAgICBpZiAoJHBvZFR5cGUgZXEgImZsb2F0IikgewogICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgKklNUEwgPSAkYXJnO1xuIik7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBJTVBMLT4kYXR0cmlidXRlTmFtZSgkYXJnKTtcbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSU1QTC0+JGNvcmVTZXR0ZXJOYW1lKCRh
cmcpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2lm
ICgkaGFzU2V0dGVyRXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICRleGNlcHRpb25Jbml0XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgSU1QTC0+JGF0dHJpYnV0ZU5hbWUoJGFyZywgZWMpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIElNUEwtPiRjb3Jl
U2V0dGVyTmFtZSgkYXJnLCBlYyk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgJGV4Y2VwdGlvblJhaXNlT25FcnJvclxuIik7CisgICAgICAgICAgICAg
ICAgfSBlbHNpZiAobXkgJHJlZmxlY3QgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJSZWZsZWN0In0pIHsKKyAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siSFRNTE5hbWVzLmgifSA9IDE7CisgICAgICAgICAgICAgICAgICAgIG15ICRjb250ZW50
QXR0cmlidXRlTmFtZSA9ICRyZWZsZWN0IGVxICIxIiA/ICRhdHRyaWJ1dGVOYW1lIDogJHJlZmxl
Y3Q7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIElNUEwtPnNl
dEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OiR7Y29udGVudEF0dHJpYnV0ZU5hbWV9QXR0
ciwgJGFyZyk7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJTVBMLT4kYXR0cmlidXRlTmFtZSgkYXJnKTtc
biIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJTVBMLT4k
Y29yZVNldHRlck5hbWUoJGFyZyk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5p
ZGwJKHJldmlzaW9uIDQ0OTI3KQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC0yOSwxMSArMjksMTEgQEAgbW9kdWxlIGh0bWwgewogICAgIF0gSFRNTEVsZW1lbnQg
OiBFbGVtZW50IHsKICAgICAgICAgICAgICAgICAgLy8gaWh0LmNvbSByZWxpZXMgb24gaWQgcmV0
dXJuaW5nIHRoZSBlbXB0eSBzdHJpbmcgd2hlbiBubyBpZCBpcyBwcmVzZW50LiAKICAgICAgICAg
ICAgICAgICAgLy8gT3RoZXIgYnJvd3NlcnMgZG8gdGhpcyBhcyB3ZWxsLiBTbyB3ZSBkb24ndCBj
b252ZXJ0IG51bGwgdG8gSlMgbnVsbC4KLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGlkOwotICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdGl0bGU7Ci0gICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBs
YW5nOwotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5n
XSBET01TdHJpbmcgZGlyOwotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxs
VG9OdWxsU3RyaW5nXSBET01TdHJpbmcgY2xhc3NOYW1lOworICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJpbmcgaWQ7Cisg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxl
Y3RdIERPTVN0cmluZyB0aXRsZTsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0
TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nIGxhbmc7CisgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmlu
ZyBkaXI7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJp
bmcsIFJlZmxlY3Q9Y2xhc3NdIERPTVN0cmluZyBjbGFzc05hbWU7CiAKICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICB0YWJJbmRleDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31652</attachid>
            <date>2009-06-22 09:33:28 -0700</date>
            <delta_ts>2009-07-14 11:19:37 -0700</delta_ts>
            <desc>patch for part 2</desc>
            <filename>ReflectPatch2.txt</filename>
            <type>text/plain</type>
            <size>10894</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDkzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMDktMDYtMjIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
NTQyNTogRE9NIGF0dHJpYnV0ZSBnZXR0ZXIvc2V0dGVyIGZ1bmN0aW9ucyBzaG91bGQgdXNlIGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjU0MjUKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOiBBZGRlZCBoYW5kbGluZyBmb3IgUmVmbGVjdFVSTC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtOiBEaXR0by4KKworICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldFVSTEF0dHJp
YnV0ZSk6IEFkZGVkLiBGb3IgdXNlIGltcGxlbWVudGluZyBnZXR0ZXJzCisgICAgICAgIGZvciBS
ZWZsZWN0VVJMLgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6IEFkZGVkIGdldFVSTEF0dHJpYnV0
ZS4KKworICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5pZGw6IFVzZSBSZWZsZWN0IGFu
ZCBSZWZsZWN0VVJMLgorCiAyMDA5LTA2LTE5ICBZYWVsIEFoYXJvbiA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gNDQ5
MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTU0LDEwICsxMTU0LDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gc3RhdGljX2Nh
c3Q8JGltcGxDbGFzc05hbWUqPihzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmplY3Qoc2xv
dC5zbG90QmFzZSgpKSktPmltcGwoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG15
ICR2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteSAkcmVmbGVjdCA9ICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3QifSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbXkgJHJlZmxlY3QgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In07CisgICAgICAgICAgICAgICAgICAgICAg
ICBteSAkcmVmbGVjdFVSTCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IlJlZmxlY3RVUkwifTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcmVmbGVj
dCB8fCAkcmVmbGVjdFVSTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5j
bHVkZXN7IkhUTUxOYW1lcy5oIn0gPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15
ICRjb250ZW50QXR0cmlidXRlTmFtZSA9ICRyZWZsZWN0IGVxICIxIiA/ICRuYW1lIDogJHJlZmxl
Y3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gImltcC0+Z2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6JHtjb250ZW50QXR0cmlidXRlTmFtZX1BdHRyKSIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBteSAkY29udGVudEF0dHJpYnV0ZU5hbWUgPSAoKCRyZWZsZWN0IHx8
ICRyZWZsZWN0VVJMKSBlcSAiMSIpID8gJG5hbWUgOiAoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRnZXRBdHRyaWJ1dGVGdW5jdGlvbk5h
bWUgPSAkcmVmbGVjdFVSTCA/ICJnZXRVUkxBdHRyaWJ1dGUiIDogImdldEF0dHJpYnV0ZSI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gImltcC0+JGdldEF0dHJpYnV0ZUZ1
bmN0aW9uTmFtZShIVE1MTmFtZXM6OiR7Y29udGVudEF0dHJpYnV0ZU5hbWV9QXR0cikiCiAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICR2YWx1ZSA9ICJpbXAtPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCkiOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMTMwNCw5ICsxMzA3LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+
KHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+aW1wbCgpKTtcbiIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9O
YXRpdmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7XG4iKSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobXkgJHJlZmxlY3QgPSAkYXR0cmlidXRlLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXkgJHJlZmxlY3QgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG15ICRyZWZsZWN0VVJMID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiUmVmbGVjdFVSTCJ9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkhUTUxOYW1lcy5oIn0gPSAxOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGNvbnRlbnRBdHRyaWJ1dGVOYW1lID0gJHJlZmxl
Y3QgZXEgIjEiID8gJG5hbWUgOiAkcmVmbGVjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG15ICRjb250ZW50QXR0cmlidXRlTmFtZSA9ICgoJHJlZmxlY3QgfHwgJHJlZmxl
Y3RVUkwpIGVxICIxIikgPyAkbmFtZSA6ICgkcmVmbGVjdCB8fCAkcmVmbGVjdFVSTCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
bXAtPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OiR7Y29udGVudEF0dHJpYnV0ZU5hbWV9QXR0ciwg
JG5hdGl2ZVZhbHVlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpbXAtPnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKCRuYXRpdmVWYWx1ZSIpOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQkocmV2
aXNpb24gNDQ5MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9i
akMucG0JKHdvcmtpbmcgY29weSkKQEAgLTExMzAsMTAgKzExMzAsMTMgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIG15ICRnZXR0ZXJTaWcgPSAiLSAoJGF0dHJpYnV0
ZVR5cGUpJGF0dHJpYnV0ZUludGVyZmFjZU5hbWVcbiI7CiAgICAgICAgICAgICBteSAkaGFzR2V0
dGVyRXhjZXB0aW9uID0gQHskYXR0cmlidXRlLT5nZXR0ZXJFeGNlcHRpb25zfTsKICAgICAgICAg
ICAgIG15ICRnZXR0ZXJDb250ZW50SGVhZDsKLSAgICAgICAgICAgIGlmIChteSAkcmVmbGVjdCA9
ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3QifSkg
eworICAgICAgICAgICAgbXkgJHJlZmxlY3QgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In07CisgICAgICAgICAgICBteSAkcmVmbGVjdFVSTCA9
ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3RVUkwi
fTsKKyAgICAgICAgICAgIGlmICgkcmVmbGVjdCB8fCAkcmVmbGVjdFVSTCkgewogICAgICAgICAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IkhUTUxOYW1lcy5oIn0gPSAxOwotICAgICAgICAgICAgICAg
IG15ICRjb250ZW50QXR0cmlidXRlTmFtZSA9ICRyZWZsZWN0IGVxICIxIiA/ICRhdHRyaWJ1dGVO
YW1lIDogJHJlZmxlY3Q7Ci0gICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gIklN
UEwtPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OiR7Y29udGVudEF0dHJpYnV0ZU5h
bWV9QXR0ciI7CisgICAgICAgICAgICAgICAgbXkgJGNvbnRlbnRBdHRyaWJ1dGVOYW1lID0gKCgk
cmVmbGVjdCB8fCAkcmVmbGVjdFVSTCkgZXEgIjEiKSA/ICRhdHRyaWJ1dGVOYW1lIDogKCRyZWZs
ZWN0IHx8ICRyZWZsZWN0VVJMKTsKKyAgICAgICAgICAgICAgICBteSAkZ2V0QXR0cmlidXRlRnVu
Y3Rpb25OYW1lID0gJHJlZmxlY3RVUkwgPyAiZ2V0VVJMQXR0cmlidXRlIiA6ICJnZXRBdHRyaWJ1
dGUiOworICAgICAgICAgICAgICAgICRnZXR0ZXJDb250ZW50SGVhZCA9ICJJTVBMLT4ke2dldEF0
dHJpYnV0ZUZ1bmN0aW9uTmFtZX0oV2ViQ29yZTo6SFRNTE5hbWVzOjoke2NvbnRlbnRBdHRyaWJ1
dGVOYW1lfUF0dHIiOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAkZ2V0
dGVyQ29udGVudEhlYWQgPSAiSU1QTC0+IiAuICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRh
dHRyaWJ1dGVOYW1lKSAuICIoIjsKICAgICAgICAgICAgIH0KQEAgLTEyNjUsMTIgKzEyNjgsMTYg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgJGV4Y2VwdGlvbkluaXRcbiIpOwogICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJTVBMLT4kY29yZVNldHRlck5hbWUoJGFyZywgZWMp
O1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRleGNl
cHRpb25SYWlzZU9uRXJyb3JcbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzaWYgKG15ICRyZWZs
ZWN0ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVj
dCJ9KSB7Ci0gICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkhUTUxOYW1lcy5oIn0g
PSAxOwotICAgICAgICAgICAgICAgICAgICBteSAkY29udGVudEF0dHJpYnV0ZU5hbWUgPSAkcmVm
bGVjdCBlcSAiMSIgPyAkYXR0cmlidXRlTmFtZSA6ICRyZWZsZWN0OwotICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJTVBMLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjoke2NvbnRlbnRBdHRyaWJ1dGVOYW1lfUF0dHIsICRhcmcpO1xuIik7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSU1QTC0+JGNvcmVTZXR0ZXJOYW1lKCRhcmcpO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgIG15ICRyZWZsZWN0ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiUmVmbGVjdCJ9OworICAgICAgICAgICAgICAgICAgICBteSAkcmVmbGVjdFVSTCA9
ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3RVUkwi
fTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRyZWZsZWN0IHx8ICRyZWZsZWN0VVJMKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJIVE1MTmFtZXMuaCJ9ID0gMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG15ICRjb250ZW50QXR0cmlidXRlTmFtZSA9ICgoJHJl
ZmxlY3QgfHwgJHJlZmxlY3RVUkwpIGVxICIxIikgPyAkYXR0cmlidXRlTmFtZSA6ICgkcmVmbGVj
dCB8fCAkcmVmbGVjdFVSTCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBJTVBMLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjoke2NvbnRl
bnRBdHRyaWJ1dGVOYW1lfUF0dHIsICRhcmcpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBJ
TVBMLT4kY29yZVNldHRlck5hbWUoJGFyZyk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
fVxuXG4iKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0NDkzNCkKKysrIFdlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQxLDQgKzEzNDEsMTUgQEAgdW5zaWduZWQg
RWxlbWVudDo6Y2hpbGRFbGVtZW50Q291bnQoKSBjbwogICAgIHJldHVybiBjb3VudDsKIH0KIAor
S1VSTCBFbGVtZW50OjpnZXRVUkxBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkg
Y29uc3QKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgaWYgKG5hbWVkQXR0ck1hcCkgeworICAgICAg
ICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBuYW1lZEF0dHJNYXAtPmdldEF0dHJpYnV0ZUl0
ZW0obmFtZSkpCisgICAgICAgICAgICBBU1NFUlQoaXNVUkxBdHRyaWJ1dGUoYXR0cmlidXRlKSk7
CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0
dHJpYnV0ZShuYW1lKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJl
dmlzaW9uIDQ0OTM0KQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEF0dHJpYnV0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2b2lkIHNldEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
VVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIHF1YWxpZmllZE5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIHZvaWQgc2Nyb2xsSW50b1ZpZXcgKGJv
b2wgYWxpZ25Ub1RvcCA9IHRydWUpOworICAgIHZvaWQgc2Nyb2xsSW50b1ZpZXcoYm9vbCBhbGln
blRvVG9wID0gdHJ1ZSk7CiAgICAgdm9pZCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkKGJvb2wgY2Vu
dGVySWZOZWVkZWQgPSB0cnVlKTsKIAogICAgIHZvaWQgc2Nyb2xsQnlVbml0cyhpbnQgdW5pdHMs
IFNjcm9sbEdyYW51bGFyaXR5KTsKQEAgLTE1OCw2ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIC8qc2VuZFRvQW55RXZlbnQqLykgeyB9CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CisgICAg
S1VSTCBnZXRVUkxBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIHZp
cnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7
IH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbAkocmV2aXNpb24gNDQ5MzQpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21h
aWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI1LDIyICsyNSwyMiBAQCBtb2R1bGUgaHRtbCB7CiAg
ICAgICAgIEludGVyZmFjZVVVSUQ9YjIxYjgxMjUtZDAwYi00YmRmLWIwZTgtNjU5Njc4ZGIzOTIz
LAogICAgICAgICBJbXBsZW1lbnRhdGlvblVVSUQ9MjEyMWNhMjEtODExOC00ZjFiLWI5ZmUtNDc4
OGE5MDUwMjgxCiAgICAgXSBIVE1MSW1hZ2VFbGVtZW50IDogSFRNTEVsZW1lbnQgewotICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcg
bmFtZTsKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmlu
Z10gRE9NU3RyaW5nIGFsaWduOwotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnRO
dWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgYWx0OwotICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgYm9yZGVyOyAgICAgICAgCisg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxl
Y3RdIERPTVN0cmluZyBuYW1lOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnRO
dWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJpbmcgYWxpZ247CisgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmlu
ZyBhbHQ7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJp
bmcsIFJlZmxlY3RdIERPTVN0cmluZyBib3JkZXI7ICAgICAgICAKICAgICAgICAgICAgICAgICAg
YXR0cmlidXRlIGxvbmcgaGVpZ2h0OwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgbG9uZyBo
c3BhY2U7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGlzTWFwOwotICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcg
bG9uZ0Rlc2M7Ci0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyBzcmM7Ci0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVy
dE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB1c2VNYXA7CisgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RVUkw9bG9uZ2Rlc2NdIERP
TVN0cmluZyBsb25nRGVzYzsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVs
bFRvTnVsbFN0cmluZywgUmVmbGVjdFVSTF0gRE9NU3RyaW5nIHNyYzsKKyAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdD11c2VtYXBdIERP
TVN0cmluZyB1c2VNYXA7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBsb25nIHZzcGFjZTsK
ICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIGxvbmcgd2lkdGg7CiAgICAgICAgIAogICAgICAg
ICAvLyBFeHRlbnNpb25zCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGNvbXBs
ZXRlOwotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5n
XSBET01TdHJpbmcgbG93c3JjOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnRO
dWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0VVJMXSBET01TdHJpbmcgbG93c3JjOwogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBuYXR1cmFsSGVpZ2h0OwogICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgbG9uZyBuYXR1cmFsV2lkdGg7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBs
b25nIHg7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32722</attachid>
            <date>2009-07-14 11:19:37 -0700</date>
            <delta_ts>2009-08-16 22:05:26 -0700</delta_ts>
            <desc>patch that does this for eight classes</desc>
            <filename>ReflectPatch3.txt</filename>
            <type>text/plain</type>
            <size>49881</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTg2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzIgQEAKKzIwMDktMDctMTQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5leHQg
c3RlcCBpbiBtYWtpbmcgRE9NIGF0dHJpYnV0ZSBnZXR0ZXIvc2V0dGVycyBjb25zaXN0ZW50bHkg
dXNlIEF0b21pY1N0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjU0MjUKKworICAgICAgICBUaGlzIGNvdmVycyBlaWdodCBET00gY2xhc3Nlcywg
YW5kIGZvciBlYWNoIG9uZSBvZiB0aGUgY2xhc3NlczoKKworICAgICAgICAtIENoYW5nZXMgdGhl
IElETCB0byB1c2UgdGhlIFJlZmxlY3Qgc3ludGF4IGZvciBhbGwgc2ltcGxlIGNhc2VzLgorICAg
ICAgICAtIFJlbW92ZXMgdW51c2VkIGZ1bmN0aW9ucyBpbiB0aGUgY2xhc3NlcywgbWFpbmx5IG5l
d2x5IHVudXNlZCBvbmVzIHRoYXQgd2VyZQorICAgICAgICAgIHVzZWQgZm9yIHJlZmxlY3Rpb24g
YmVmb3JlLgorICAgICAgICAtIFJlbW92ZWQgdW5uZWVkZWQgZXhwbGljaXRseSBkZWZpbmVkIGRl
c3RydWN0b3JzLgorICAgICAgICAtIEV4cGxpY2l0bHkgZGVjbGFyZXMgZGVzdHJ1Y3RvcnMgYXMg
dmlydHVhbC4KKyAgICAgICAgLSBSZW1vdmVzIHVubmVlZGVkIGluY2x1ZGVzLgorICAgICAgICAt
IE1ha2VzIG1lbWJlcnMgcHJvdGVjdGVkIG9yIHByaXZhdGUgcmF0aGVyIHRoYW4gcHVibGljIHdo
ZXJlIHBvc3NpYmxlLgorICAgICAgICAtIFJlbmFtZXMgImRvYyIgdG8gImRvY3VtZW50Ii4KKyAg
ICAgICAgLSBUd2Vha3MgZm9ybWF0dGluZyB0byBtYXRjaCBvdXIgbGF0ZXN0IHN0eWxlIGluIGEg
ZmV3IHBsYWNlcy4KKyAgICAgICAgLSBJbXByb3ZlcyBzb21lIEZJWE1FIGNvbW1lbnRzLgorCisg
ICAgICAgIE92ZXIgdGltZSB3ZSdsbCB3YW50IHRvIGRvIHRoaXMgZm9yIGFsbCBIVE1MIERPTSBj
bGFzc2VzLgorCisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQpOgorICAgICAg
ICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNo
b3JFbGVtZW50OjplbmRUYWdSZXF1aXJlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5j
aG9yRWxlbWVudDo6dGFnUHJpb3JpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1l
bnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwOgorICAgICAgICAq
IGh0bWwvSFRNTEFwcGxldEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVt
ZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVt
ZW50OjplbmRUYWdSZXF1aXJlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1l
bnQ6OnRhZ1ByaW9yaXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5pZGw6Cisg
ICAgICAgICogaHRtbC9IVE1MQlJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxC
UkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxCUkVs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxCUkVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0
bWwvSFRNTEJhc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCYXNlRWxlbWVu
dDo6SFRNTEJhc2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCYXNlRWxlbWVudDo6
cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQ6
OnByb2Nlc3MpOgorICAgICAgICAqIGh0bWwvSFRNTEJhc2VFbGVtZW50Lmg6CisgICAgICAgICog
aHRtbC9IVE1MQmFzZUVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTEJhc2VGb250RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQmFzZUZvbnRFbGVtZW50OjpIVE1MQmFz
ZUZvbnRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxCYXNlRm9udEVsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxCYXNlRm9udEVsZW1lbnQ6OmVuZFRhZ1JlcXVpcmVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxCYXNlRm9udEVsZW1lbnQ6OnRhZ1ByaW9yaXR5KToKKyAg
ICAgICAgKiBodG1sL0hUTUxCYXNlRm9udEVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRN
TEJsb2NrcXVvdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCbG9ja3F1b3Rl
RWxlbWVudDo6SFRNTEJsb2NrcXVvdGVFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxCbG9j
a3F1b3RlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJsb2NrcXVvdGVFbGVtZW50
Ojp0YWdQcmlvcml0eSk6CisgICAgICAgICogaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuaWRs
OgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxCb2R5RWxlbWVudDo6SFRNTEJvZHlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxCb2R5RWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgKiBo
dG1sL0hUTUxCb2R5RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50
OjplbmRUYWdSZXF1aXJlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6
OnRhZ1ByaW9yaXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5pZGw6CisgICAg
ICAgIE1hZGUgY2hhbmdlcyBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgICAgICAgKiBsb2FkZXIv
RnJhbWVMb2FkZXIuY3BwOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YgSFRNTEFuY2hvckVs
ZW1lbnQuaC4KKwogMjAwOS0wNy0xNCAgQWRhbSBUcmVhdCAgPGFkYW0udHJlYXRAdG9yY2htb2Jp
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiA0NTg2MykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA2IEdyYWhhbSBE
ZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDUxICsy
NCwzNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50
LmgiCiAKLSNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJETlMuaCIKLSNpbmNsdWRl
ICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVy
LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1
ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIK
LSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJVSUV2ZW50LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEFu
Y2hvckVsZW1lbnQ6OkhUTUxBbmNob3JFbGVtZW50KERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1M
RWxlbWVudChhVGFnLCBkb2MpCitIVE1MQW5jaG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQo
RG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1lbnQoYVRhZywgZG9jdW1lbnQpCiAg
ICAgLCBtX3Jvb3RFZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bigwKQogICAg
ICwgbV93YXNTaGlmdEtleURvd25Pbk1vdXNlRG93bihmYWxzZSkKIHsKIH0KIAotSFRNTEFuY2hv
ckVsZW1lbnQ6OkhUTUxBbmNob3JFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCitIVE1MQW5j
aG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpCiAgICAgLCBtX3Jvb3RFZGl0YWJsZUVsZW1lbnRGb3JTZWxlY3Rpb25Pbk1vdXNlRG93bigw
KQogICAgICwgbV93YXNTaGlmdEtleURvd25Pbk1vdXNlRG93bihmYWxzZSkKIHsKIH0KIAotSFRN
TEFuY2hvckVsZW1lbnQ6On5IVE1MQW5jaG9yRWxlbWVudCgpCi17Ci19Ci0KIGJvb2wgSFRNTEFu
Y2hvckVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25zdAogewogICAgIGlmIChpc0NvbnRlbnRF
ZGl0YWJsZSgpKQpAQCAtMzIwLDM2ICszMDUsNiBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojpj
YW5TdGFydFNlbGVjdGlvCiAgICAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKLWNv
bnN0IEF0b21pY1N0cmluZyYgSFRNTEFuY2hvckVsZW1lbnQ6OmFjY2Vzc0tleSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKLX0KLQotdm9pZCBIVE1M
QW5jaG9yRWxlbWVudDo6c2V0QWNjZXNzS2V5KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIsIHZhbHVlKTsKLX0KLQotY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MQW5jaG9yRWxlbWVudDo6Y2hhcnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFuY2hvckVsZW1l
bnQ6OnNldENoYXJzZXQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUoY2hhcnNldEF0dHIsIHZhbHVlKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBIVE1M
QW5jaG9yRWxlbWVudDo6Y29vcmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KGNvb3Jkc0F0dHIpOwotfQotCi12b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRDb29yZHMoY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29vcmRzQXR0ciwg
dmFsdWUpOwotfQotCiBib29sIEhUTUxBbmNob3JFbGVtZW50OjpkcmFnZ2FibGUoKSBjb25zdAog
ewogICAgIC8vIFNob3VsZCBiZSBkcmFnZ2FibGUgaWYgd2UgaGF2ZSBhbiBocmVmIGF0dHJpYnV0
ZS4KQEAgLTM3MSw1NiArMzI2LDExIEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldEhyZWYo
Y29uc3QgQXQKICAgICBzZXRBdHRyaWJ1dGUoaHJlZkF0dHIsIHZhbHVlKTsKIH0KIAotY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MQW5jaG9yRWxlbWVudDo6aHJlZmxhbmcoKSBjb25zdAotewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUoaHJlZmxhbmdBdHRyKTsKLX0KLQotdm9pZCBIVE1MQW5jaG9y
RWxlbWVudDo6c2V0SHJlZmxhbmcoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBz
ZXRBdHRyaWJ1dGUoaHJlZmxhbmdBdHRyLCB2YWx1ZSk7Ci19Ci0KIGNvbnN0IEF0b21pY1N0cmlu
ZyYgSFRNTEFuY2hvckVsZW1lbnQ6Om5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUobmFtZUF0dHIpOwogfQogCi12b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXROYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG5hbWVBdHRyLCB2
YWx1ZSk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgSFRNTEFuY2hvckVsZW1lbnQ6OnJlbCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShyZWxBdHRyKTsKLX0KLQotdm9pZCBI
VE1MQW5jaG9yRWxlbWVudDo6c2V0UmVsKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKHJlbEF0dHIsIHZhbHVlKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5n
JiBIVE1MQW5jaG9yRWxlbWVudDo6cmV2KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKHJldkF0dHIpOwotfQotCi12b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRSZXYoY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUocmV2QXR0ciwgdmFsdWUp
OwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIEhUTUxBbmNob3JFbGVtZW50OjpzaGFwZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzaGFwZUF0dHIpOwotfQotCi12b2lkIEhU
TUxBbmNob3JFbGVtZW50OjpzZXRTaGFwZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShzaGFwZUF0dHIsIHZhbHVlKTsKLX0KLQogc2hvcnQgSFRNTEFuY2hv
ckVsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKIHsKICAgICAvLyBTa2lwIHRoZSBzdXBwb3J0c0Zv
Y3VzIGNoZWNrIGluIEhUTUxFbGVtZW50LgpAQCAtNDMyLDIxICszNDIsNiBAQCBTdHJpbmcgSFRN
TEFuY2hvckVsZW1lbnQ6OnRhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0
YXJnZXRBdHRyKTsKIH0KIAotdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6c2V0VGFyZ2V0KGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHRhcmdldEF0dHIsIHZh
bHVlKTsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MQW5jaG9yRWxlbWVudDo6dHlwZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Ci19Ci0KLXZvaWQg
SFRNTEFuY2hvckVsZW1lbnQ6OnNldFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKLX0KLQogU3RyaW5nIEhUTUxBbmNo
b3JFbGVtZW50OjpoYXNoKCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVmID0gaHJlZigpLnJlZigp
OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDQ1ODYzKQorKysgV2Vi
Q29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw1OSArMzIsMTEgQEAgY2xhc3Mg
SFRNTEFuY2hvckVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZQogcHVibGljOgogICAgIEhUTUxBbmNo
b3JFbGVtZW50KERvY3VtZW50Kik7CiAgICAgSFRNTEFuY2hvckVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxBbmNob3JFbGVtZW50KCk7Ci0KLSAgICB2
aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBU
YWdTdGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gMTsgfQotCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0gICAgdmlydHVhbCB2b2lkIGRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlKGJvb2wgYWN0
aXZlID0gdHJ1ZSwgYm9vbCBwYXVzZSA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWNjZXNz
S2V5QWN0aW9uKGJvb2wgZnVsbEFjdGlvbik7Ci0gICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmli
dXRlKEF0dHJpYnV0ZSopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0
aW9uKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjY2Vzc0tleSgpIGNvbnN0
OwotICAgIHZvaWQgc2V0QWNjZXNzS2V5KGNvbnN0IEF0b21pY1N0cmluZyYpOwotCi0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiBjaGFyc2V0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDaGFyc2V0KGNv
bnN0IEF0b21pY1N0cmluZyYpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb29yZHMoKSBj
b25zdDsKLSAgICB2b2lkIHNldENvb3Jkcyhjb25zdCBBdG9taWNTdHJpbmcmKTsKLQotICAgIHZp
cnR1YWwgYm9vbCBkcmFnZ2FibGUoKSBjb25zdDsKIAogICAgIEtVUkwgaHJlZigpIGNvbnN0Owog
ICAgIHZvaWQgc2V0SHJlZihjb25zdCBBdG9taWNTdHJpbmcmKTsKIAotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgaHJlZmxhbmcoKSBjb25zdDsKLSAgICB2b2lkIHNldEhyZWZsYW5nKGNvbnN0IEF0
b21pY1N0cmluZyYpOwotCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpOwotCi0gICAgY29uc3QgQXRvbWlj
U3RyaW5nJiByZWwoKSBjb25zdDsKLSAgICB2b2lkIHNldFJlbChjb25zdCBBdG9taWNTdHJpbmcm
KTsKLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcmV2KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRS
ZXYoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNoYXBl
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaGFwZShjb25zdCBBdG9taWNTdHJpbmcmKTsKLQotICAg
IHZpcnR1YWwgc2hvcnQgdGFiSW5kZXgoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIHRh
cmdldCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGFyZ2V0KGNvbnN0IEF0b21pY1N0cmluZyYpOwot
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBl
KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgU3RyaW5nIGhhc2goKSBjb25zdDsKICAgICBT
dHJpbmcgaG9zdCgpIGNvbnN0OwpAQCAtOTQsMTIgKzQ2LDMwIEBAIHB1YmxpYzoKICAgICBTdHJp
bmcgcHJvdG9jb2woKSBjb25zdDsKICAgICBTdHJpbmcgc2VhcmNoKCkgY29uc3Q7CiAgICAgU3Ry
aW5nIHRleHQoKSBjb25zdDsKLSAgICAKKwogICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0Owog
CiAgICAgYm9vbCBpc0xpdmVMaW5rKCkgY29uc3Q7CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisKIHByaXZhdGU6
CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShib29s
IGFjdGl2ZSA9IHRydWUsIGJvb2wgcGF1c2UgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lkIGFj
Y2Vzc0tleUFjdGlvbihib29sIGZ1bGxBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0
dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU3RhcnRTZWxl
Y3Rpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0YXJnZXQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHNob3J0IHRhYkluZGV4KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGRyYWdnYWJs
ZSgpIGNvbnN0OworCiAgICAgRWxlbWVudCogbV9yb290RWRpdGFibGVFbGVtZW50Rm9yU2VsZWN0
aW9uT25Nb3VzZURvd247CiAgICAgYm9vbCBtX3dhc1NoaWZ0S2V5RG93bk9uTW91c2VEb3duOwog
fTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmlkbAkocmV2aXNpb24gNDU4NjMpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdA
Z21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI1LDE3ICsyNSwxNyBAQCBtb2R1bGUgaHRtbCB7
CiAgICAgICAgIEludGVyZmFjZVVVSUQ9MGM3NGNlZjgtYjFmNy00YjQ0LTgzYTktOGRlZWIzNzZh
MjU3LAogICAgICAgICBJbXBsZW1lbnRhdGlvblVVSUQ9MzBmNzk3ZDUtZDE0NS00OThlLWExMjYt
ZDhlOWRkZWVkZWEzCiAgICAgXSBIVE1MQW5jaG9yRWxlbWVudCA6IEhUTUxFbGVtZW50IHsKLSAg
ICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGFjY2Vz
c0tleTsKLSAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3Ry
aW5nIGNoYXJzZXQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmdd
IERPTVN0cmluZyBjb29yZHM7Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyBocmVmOwotICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9O
dWxsU3RyaW5nXSBET01TdHJpbmcgaHJlZmxhbmc7Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ29udmVy
dE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBuYW1lOwotICAgICAgICBhdHRyaWJ1dGUgW0Nv
bnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgcmVsOwotICAgICAgICBhdHRyaWJ1dGUg
W0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgcmV2OwotICAgICAgICBhdHRyaWJ1
dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgc2hhcGU7Ci0gICAgICAgIGF0
dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0YXJnZXQ7Ci0gICAg
ICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0eXBlOwor
ICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0PWFjY2Vz
c2tleV0gRE9NU3RyaW5nIGFjY2Vzc0tleTsKKyAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVs
bFRvTnVsbFN0cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nIGNoYXJzZXQ7CisgICAgICAgIGF0dHJp
YnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyBjb29yZHM7
CisgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RVUkxd
IERPTVN0cmluZyBocmVmOworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3Ry
aW5nLCBSZWZsZWN0XSBET01TdHJpbmcgaHJlZmxhbmc7CisgICAgICAgIGF0dHJpYnV0ZSBbQ29u
dmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyBuYW1lOworICAgICAgICBh
dHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJpbmcgcmVs
OworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBE
T01TdHJpbmcgcmV2OworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5n
LCBSZWZsZWN0XSBET01TdHJpbmcgc2hhcGU7CisgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51
bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyB0YXJnZXQ7CisgICAgICAgIGF0dHJp
YnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyB0eXBlOwog
CiAgICAgICAgIC8vIElFIEV4dGVuc2lvbnMKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyBoYXNoOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCShyZXZpc2lv
biA0NTg2MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSAo
MVN0ZWluQGdteC5kZSkKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDE0ICsyNCwxMSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlJlbmRlckFwcGxldC5oIgotI2lu
Y2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDEwICs0
MCw2IEBAIEhUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChjb24KICAgICBBU1NF
UlQoaGFzVGFnTmFtZShhcHBsZXRUYWcpKTsKIH0KIAotSFRNTEFwcGxldEVsZW1lbnQ6On5IVE1M
QXBwbGV0RWxlbWVudCgpCi17Ci19Ci0KIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IGFsdEF0dHIgfHwKQEAgLTE2Myw0NiArMTU2LDYgQEAgdm9pZCBIVE1MQXBwbGV0RWxl
bWVudDo6ZmluaXNoUGFyc2luZ0NoaQogICAgICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91
dCh0cnVlKTsgLy8gVGhpcyB3aWxsIGNhdXNlIGl0IHRvIGNyZWF0ZSBpdHMgd2lkZ2V0ICYgdGhl
IEphdmEgYXBwbGV0CiB9CiAKLVN0cmluZyBIVE1MQXBwbGV0RWxlbWVudDo6YWx0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsdEF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBs
ZXRFbGVtZW50OjpzZXRBbHQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUoYWx0QXR0ciwgdmFsdWUpOwotfQotCi1TdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6OmFyY2hp
dmUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0dHIpOwotfQot
Ci12b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpzZXRBcmNoaXZlKGNvbnN0IFN0cmluZyAmdmFsdWUp
Ci17Ci0gICAgc2V0QXR0cmlidXRlKGFyY2hpdmVBdHRyLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBI
VE1MQXBwbGV0RWxlbWVudDo6Y29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShjb2RlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnNldENvZGUoY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29kZUF0dHIsIHZhbHVlKTsKLX0K
LQotU3RyaW5nIEhUTUxBcHBsZXRFbGVtZW50Ojpjb2RlQmFzZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShjb2RlYmFzZUF0dHIpOwotfQotCi12b2lkIEhUTUxBcHBsZXRFbGVt
ZW50OjpzZXRDb2RlQmFzZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0
ZShjb2RlYmFzZUF0dHIsIHZhbHVlKTsKLX0KLQogU3RyaW5nIEhUTUxBcHBsZXRFbGVtZW50Ojpo
c3BhY2UoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoaHNwYWNlQXR0cik7CkBA
IC0yMTMsMTYgKzE2Niw2IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnNldEhzcGFjZShjb25z
dCAKICAgICBzZXRBdHRyaWJ1dGUoaHNwYWNlQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRN
TEFwcGxldEVsZW1lbnQ6Om9iamVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShvYmplY3RBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6c2V0T2JqZWN0KGNv
bnN0IFN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKG9iamVjdEF0dHIsIHZhbHVl
KTsKLX0KLQogU3RyaW5nIEhUTUxBcHBsZXRFbGVtZW50Ojp2c3BhY2UoKSBjb25zdAogewogICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUodnNwYWNlQXR0cik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TEFwcGxldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVs
ZW1lbnQuaAkocmV2aXNpb24gNDU4NjMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw4ICszMywxNCBAQCBjbGFzcyBIVE1MSW1hZ2VM
b2FkZXI7CiBjbGFzcyBIVE1MQXBwbGV0RWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luRWxlbWVu
dCB7CiBwdWJsaWM6CiAgICAgSFRNTEFwcGxldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7Ci0gICAgfkhUTUxBcHBsZXRFbGVtZW50KCk7CiAKKyAgICBTdHJpbmcgaHNw
YWNlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIc3BhY2UoY29uc3QgU3RyaW5nJik7CisKKyAgICBT
dHJpbmcgdnNwYWNlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRWc3BhY2UoY29uc3QgU3RyaW5nJik7
CisKK3ByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAxOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKik7CkBAIC00NSwzMyArNTEsMTEgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwg
UmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3Q7CiAKLSAgICBT
dHJpbmcgYWx0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbHQoY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICBTdHJpbmcgYXJjaGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QXJjaGl2ZShjb25zdCBTdHJp
bmcmKTsKLQotICAgIFN0cmluZyBjb2RlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb2RlKGNvbnN0
IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIGNvZGVCYXNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRD
b2RlQmFzZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBoc3BhY2UoKSBjb25zdDsKLSAg
ICB2b2lkIHNldEhzcGFjZShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBvYmplY3QoKSBj
b25zdDsKLSAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyB2
c3BhY2UoKSBjb25zdDsKLSAgICB2b2lkIHNldFZzcGFjZShjb25zdCBTdHJpbmcmKTsKLQogICAg
IHZvaWQgc2V0dXBBcHBsZXQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZElu
dG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAK
LXByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nIG1faWQ7CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTEFwcGxldEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5pZGwJKHJldmlzaW9uIDQ1ODYzKQorKysgV2ViQ29yZS9odG1sL0hUTUxB
cHBsZXRFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2Vpbmln
QGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOSwyNSArMjksMjUgQEAgbW9kdWxlIGh0bWwg
ewogICAgICAgICBJbnRlcmZhY2VVVUlEPTliNWNiNGE4LWMxNTYtNGI1NS1hZmRiLWM2MDkzOGE0
ZDFiMSwKICAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPTU2NTQ0MzcyLTY3NWUtNDBkZC1iYTM5
LWZhNzA4YTRjNzY3OAogICAgIF0gSFRNTEFwcGxldEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7Ci0g
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0
cmluZyBhbGlnbjsKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVs
bFN0cmluZ10gRE9NU3RyaW5nIGFsdDsKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGFyY2hpdmU7Ci0gICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBjb2RlOwotICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJp
bmcgY29kZUJhc2U7Ci0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051
bGxTdHJpbmddIERPTVN0cmluZyBoZWlnaHQ7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBb
Q29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyBhbGlnbjsKKyAgICAg
ICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdF0g
RE9NU3RyaW5nIGFsdDsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRv
TnVsbFN0cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nIGFyY2hpdmU7CisgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyBj
b2RlOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5n
LCBSZWZsZWN0PWNvZGViYXNlXSBET01TdHJpbmcgY29kZUJhc2U7CisgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyBo
ZWlnaHQ7CiAjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZB
U0NSSVBUCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJp
bmddIERPTVN0cmluZyBoc3BhY2U7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVy
dE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyBoc3BhY2U7CiAjZWxzZQogICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnRGcm9tU3RyaW5nXSBsb25nIGhzcGFjZTsK
ICNlbmRpZgotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3Ry
aW5nXSBET01TdHJpbmcgbmFtZTsKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0
TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIG9iamVjdDsKKyAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nIG5hbWU7
CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJl
ZmxlY3RdIERPTVN0cmluZyBvYmplY3Q7CiAjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBU
KSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29u
dmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB2c3BhY2U7CisgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyB2
c3BhY2U7CiAjZWxzZQogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnRGcm9tU3Ry
aW5nXSBsb25nIHZzcGFjZTsKICNlbmRpZgotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0Nv
bnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgd2lkdGg7CisgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyB3
aWR0aDsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkocmV2aXNp
b24gNDU4NjMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsMTMgKzIyLDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJI
VE1MQXJlYUVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgotI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgot
I2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKQEAgLTUyLDcgKzQ4LDcgQEAgSFRNTEFyZWFFbGVtZW50Ojp+SFRNTEFyZWFF
bGVtZW50KCkKICAgICBkZWxldGUgW10gbV9jb29yZHM7CiB9CiAKLXZvaWQgSFRNTEFyZWFFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIEhU
TUxBcmVhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRy
KQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gc2hhcGVBdHRyKSB7CiAgICAgICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiZGVmYXVsdCIpKQpAQCAtMTUyLDQ2ICsx
NDgsMTEgQEAgUGF0aCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlZ2lvbihjb25zdCBJbgogICAgIHJl
dHVybiBwYXRoOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEhUTUxBcmVhRWxlbWVudDo6YWNj
ZXNzS2V5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIp
OwotfQotCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0QWNjZXNzS2V5KGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGFjY2Vzc2tleUF0dHIsIHZhbHVlKTsK
LX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MQXJlYUVsZW1lbnQ6OmFsdCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKLX0KLQotdm9pZCBIVE1MQXJlYUVs
ZW1lbnQ6OnNldEFsdChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQotewotICAgIHNldEF0dHJp
YnV0ZShhbHRBdHRyLCB2YWx1ZSk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgSFRNTEFyZWFF
bGVtZW50Ojpjb29yZHMoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29vcmRz
QXR0cik7Ci19Ci0KLXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRDb29yZHMoY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY29vcmRzQXR0ciwgdmFsdWUpOwot
fQotCiBLVVJMIEhUTUxBcmVhRWxlbWVudDo6aHJlZigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShocmVmQXR0cikpOwogfQogCi12b2lk
IEhUTUxBcmVhRWxlbWVudDo6c2V0SHJlZihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShocmVmQXR0ciwgdmFsdWUpOwotfQotCiBib29sIEhUTUxBcmVhRWxl
bWVudDo6bm9IcmVmKCkgY29uc3QKIHsKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShub2hyZWZB
dHRyKS5pc051bGwoKTsKQEAgLTIwMiwxNiArMTYzLDYgQEAgdm9pZCBIVE1MQXJlYUVsZW1lbnQ6
OnNldE5vSHJlZihib29sIG5vSAogICAgIHNldEF0dHJpYnV0ZShub2hyZWZBdHRyLCBub0hyZWYg
PyAiIiA6IDApOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIEhUTUxBcmVhRWxlbWVudDo6c2hh
cGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc2hhcGVBdHRyKTsKLX0KLQot
dm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldFNoYXBlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
Ci17Ci0gICAgc2V0QXR0cmlidXRlKHNoYXBlQXR0ciwgdmFsdWUpOwotfQotCiBib29sIEhUTUxB
cmVhRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAogewogICAgIHJldHVybiBIVE1MRWxlbWVu
dDo6aXNGb2N1c2FibGUoKTsKQEAgLTIyMiw5ICsxNzMsNCBAQCBTdHJpbmcgSFRNTEFyZWFFbGVt
ZW50Ojp0YXJnZXQoKSBjb25zdAogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7
CiB9CiAKLXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRUYXJnZXQoY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUodGFyZ2V0QXR0ciwgdmFsdWUpOwotfQotCiB9
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5oCShyZXZpc2lvbiA0NTg2MykKKysrIFdlYkNvcmUv
aHRtbC9IVE1MQXJlYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNDMgKzM0LDI2IEBA
IGNsYXNzIFBhdGg7CiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEFuY2hvckVs
ZW1lbnQgewogcHVibGljOgogICAgIEhUTUxBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKLSAgICB+SFRNTEFyZWFFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhU
TUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNG
b3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqKTsKKyAgICB2aXJ0dWFsIH5IVE1MQXJlYUVsZW1lbnQoKTsKIAogICAgIGJvb2wgaXNE
ZWZhdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZSA9PSBEZWZhdWx0OyB9CiAKICAgICBib29s
IG1hcE1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBjb25zdCBJbnRTaXplJiwgSGl0VGVzdFJlc3Vs
dCYpOwogCi0gICAgdmlydHVhbCBJbnRSZWN0IGdldFJlY3QoUmVuZGVyT2JqZWN0KikgY29uc3Q7
Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjY2Vzc0tleSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0QWNjZXNzS2V5KGNvbnN0IEF0b21pY1N0cmluZyYpOwotCi0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhbHQoKSBjb25zdDsKLSAgICB2b2lkIHNldEFsdChjb25zdCBBdG9taWNTdHJpbmcmKTsK
LQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29vcmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRD
b29yZHMoY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgSW50UmVjdCBnZXRSZWN0KFJlbmRlck9i
amVjdCopIGNvbnN0OwogCiAgICAgS1VSTCBocmVmKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIcmVm
KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgYm9vbCBub0hyZWYoKSBjb25zdDsKICAgICB2
b2lkIHNldE5vSHJlZihib29sKTsKIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhcGUoKSBj
b25zdDsKLSAgICB2b2lkIHNldFNoYXBlKGNvbnN0IEF0b21pY1N0cmluZyYpOwotCitwcml2YXRl
OgorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBj
b25zdDsKLQogICAgIHZpcnR1YWwgU3RyaW5nIHRhcmdldCgpIGNvbnN0OwotICAgIHZvaWQgc2V0
VGFyZ2V0KGNvbnN0IEF0b21pY1N0cmluZyYpOwogCi1wcml2YXRlOgogICAgIGVudW0gU2hhcGUg
eyBEZWZhdWx0LCBQb2x5LCBSZWN0LCBDaXJjbGUsIFVua25vd24gfTsKICAgICBQYXRoIGdldFJl
Z2lvbihjb25zdCBJbnRTaXplJikgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQu
aWRsCShyZXZpc2lvbiA0NTg2MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwg
V2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNSwxMyArMjUs
MTMgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBJbnRlcmZhY2VVVUlEPWFhYzk4NzI5LTQ3ZDMt
NDYyMy04YzViLTAwNDc4M2FmNWJkNiwKICAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPWYwNjMx
YTQxLTVmNTUtNDBlNS1hODc5LWMwOWU2NjNjMjZiYQogICAgIF0gSFRNTEFyZWFFbGVtZW50IDog
SFRNTEVsZW1lbnQgewotICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5n
XSBET01TdHJpbmcgYWNjZXNzS2V5OwotICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9O
dWxsU3RyaW5nXSBET01TdHJpbmcgYWx0OwotICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxs
VG9OdWxsU3RyaW5nXSBET01TdHJpbmcgY29vcmRzOwotICAgICAgICBhdHRyaWJ1dGUgW0NvbnZl
cnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgaHJlZjsKKyAgICAgICAgYXR0cmlidXRlIFtD
b252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdD1hY2Nlc3NrZXldIERPTVN0cmluZyBhY2Nl
c3NLZXk7CisgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxl
Y3RdIERPTVN0cmluZyBhbHQ7CisgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxT
dHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyBjb29yZHM7CisgICAgICAgIGF0dHJpYnV0ZSBbQ29u
dmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RVUkxdIERPTVN0cmluZyBocmVmOwogICAgICAg
ICBhdHRyaWJ1dGUgYm9vbGVhbiBub0hyZWY7Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51
bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBzaGFwZTsKLSAgICAgICAgYXR0cmlidXRlIFtDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRhcmdldDsKKyAgICAgICAgYXR0cmlidXRl
IFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nIHNoYXBlOworICAg
ICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJp
bmcgdGFyZ2V0OwogCiAgICAgICAgIC8vIElFIEV4dGVuc2lvbnMKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBoYXNoOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCUkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQlJFbGVtZW50LmNwcAkocmV2
aXNpb24gNDU4NjMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJSRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsOCArMSw4IEBACi0vKioKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVz
bWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzgsMTAg
KzM4LDYgQEAgSFRNTEJSRWxlbWVudDo6SFRNTEJSRWxlbWVudChjb25zdCBRdWFsaQogICAgIEFT
U0VSVChoYXNUYWdOYW1lKGJyVGFnKSk7CiB9CiAKLUhUTUxCUkVsZW1lbnQ6On5IVE1MQlJFbGVt
ZW50KCkKLXsKLX0KLQogYm9vbCBIVE1MQlJFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAog
ewogICAgIGlmIChhdHRyTmFtZSA9PSBjbGVhckF0dHIpIHsKQEAgLTUyLDcgKzQ4LDcgQEAgYm9v
bCBIVE1MQlJFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YQogICAgIHJldHVybiBIVE1MRWxl
bWVudDo6bWFwVG9FbnRyeShhdHRyTmFtZSwgcmVzdWx0KTsKIH0KIAotdm9pZCBIVE1MQlJFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit2b2lkIEhU
TUxCUkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikK
IHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGNsZWFyQXR0cikgewogICAgICAgICAvLyBJZiB0
aGUgc3RyaW5nIGlzIGVtcHR5LCB0aGVuIGRvbid0IGFkZCB0aGUgY2xlYXIgcHJvcGVydHkuIApA
QCAtNzYsMTQgKzcyLDQgQEAgUmVuZGVyT2JqZWN0KiBIVE1MQlJFbGVtZW50OjpjcmVhdGVSZW5k
ZQogICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyQlIodGhpcyk7CiB9CiAKLVN0cmluZyBI
VE1MQlJFbGVtZW50OjpjbGVhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShj
bGVhckF0dHIpOwotfQotCi12b2lkIEhUTUxCUkVsZW1lbnQ6OnNldENsZWFyKGNvbnN0IFN0cmlu
ZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNsZWFyQXR0ciwgdmFsdWUpOwotfQotCiB9
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEJSRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MQlJFbGVtZW50LmgJKHJldmlzaW9uIDQ1ODYzKQorKysgV2ViQ29yZS9odG1s
L0hUTUxCUkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChD
KSAyMDAwIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMTksNiArMjAsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCiAgKgogICovCisKICNpZm5kZWYgSFRNTEJSRWxlbWVudF9oCiAjZGVmaW5lIEhUTUxC
UkVsZW1lbnRfaAogCkBAIC0zMSwxOCArMzMsMTUgQEAgY2xhc3MgU3RyaW5nOwogY2xhc3MgSFRN
TEJSRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTEJSRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICB+SFRNTEJSRWxlbWVu
dCgpOwotICAgIAorCitwcml2YXRlOgogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQogICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVh
bCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cik7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSopOwogICAgIAotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7Ci0KLSAgICBTdHJpbmcgY2xl
YXIoKSBjb25zdDsKLSAgICB2b2lkIHNldENsZWFyKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1
YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxl
Kik7CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEJSRWxlbWVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCUkVsZW1lbnQuaWRsCShyZXZp
c2lvbiA0NTg2MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQlJFbGVtZW50LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDcgKzI0LDcgQEAgbW9k
dWxlIGh0bWwgewogICAgICAgICBJbnRlcmZhY2VVVUlEPWU4NGIxNGJjLWIwYWEtNDMxZi04M2M0
LWZjYzI5N2UzNTRiMCwKICAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPWMxMGQ0NWE0LWIwNDIt
NDVkMC1iMTcwLTZhYzcxNzNlZTgyMwogICAgIF0gSFRNTEJSRWxlbWVudCA6IEhUTUxFbGVtZW50
IHsKLSAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5n
IGNsZWFyOworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZs
ZWN0XSBET01TdHJpbmcgY2xlYXI7CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxCYXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCYXNlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDQ1ODYzKQorKysgV2ViQ29yZS9odG1sL0hUTUxCYXNlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNiw5ICsyNiw3IEBACiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk1h
cHBlZEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlhTU0F1ZGl0b3IuaCIKIApAQCAtMzYsMTYgKzM0
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAotSFRNTEJhc2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
cU5hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudChxTmFtZSwgZG9jKQorSFRN
TEJhc2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUs
IERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50KHFOYW1lLCBkb2N1bWVudCkK
IHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShiYXNlVGFnKSk7CiB9CiAKLUhUTUxCYXNlRWxlbWVu
dDo6fkhUTUxCYXNlRWxlbWVudCgpCi17Ci19Ci0KIHZvaWQgSFRNTEJhc2VFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBocmVmQXR0cikgewpAQCAtNjksOCArNjMsOCBAQCB2b2lkIEhUTUxCYXNlRWxl
bWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVuCiB7CiAgICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9t
RG9jdW1lbnQoKTsKIAotICAgIC8vIFNpbmNlIHRoZSBkb2N1bWVudCBkb2Vzbid0IGhhdmUgYSBi
YXNlIGVsZW1lbnQuLi4KLSAgICAvLyAoVGhpcyB3aWxsIGJyZWFrIGluIHRoZSBjYXNlIG9mIG11
bHRpcGxlIGJhc2UgZWxlbWVudHMsIGJ1dCB0aGF0J3Mgbm90IHZhbGlkIGFueXdheSAoPykpCisg
ICAgLy8gU2luY2UgdGhlIGRvY3VtZW50IGRvZXNuJ3QgaGF2ZSBhIGJhc2UgZWxlbWVudCwgY2xl
YXIgdGhlIGJhc2UgVVJMIGFuZCB0YXJnZXQuCisgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3Qg
aGFuZGxlIHRoZSBjYXNlIG9mIG11bHRpcGxlIGJhc2UgZWxlbWVudHMgY29ycmVjdGx5LgogICAg
IGRvY3VtZW50KCktPnNldEJhc2VFbGVtZW50VVJMKEtVUkwoKSk7CiAgICAgZG9jdW1lbnQoKS0+
c2V0QmFzZUVsZW1lbnRUYXJnZXQoU3RyaW5nKCkpOwogfQpAQCAtODYsMTcgKzgwLDcgQEAgdm9p
ZCBIVE1MQmFzZUVsZW1lbnQ6OnByb2Nlc3MoKQogICAgIGlmICghbV90YXJnZXQuaXNFbXB0eSgp
KQogICAgICAgICBkb2N1bWVudCgpLT5zZXRCYXNlRWxlbWVudFRhcmdldChtX3RhcmdldCk7CiAK
LSAgICAvLyAjIyMgc2hvdWxkIGNoYW5naW5nIGEgZG9jdW1lbnQncyBiYXNlIFVSTCBkeW5hbWlj
YWxseSBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBhbGwgaW1hZ2VzLCBzdHlsZXNoZWV0cyBldGM/Ci19
Ci0KLXZvaWQgSFRNTEJhc2VFbGVtZW50OjpzZXRIcmVmKGNvbnN0IFN0cmluZyAmdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKGhyZWZBdHRyLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgSFRNTEJhc2VF
bGVtZW50OjpzZXRUYXJnZXQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUodGFyZ2V0QXR0ciwgdmFsdWUpOworICAgIC8vIEZJWE1FOiBDaGFuZ2luZyBhIGRvY3VtZW50
J3MgYmFzZSBVUkwgc2hvdWxkIHByb2JhYmx5IGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSByZXNv
bHZlZCByZWxhdGl2ZSBVUkxzIG9mIGFsbCBpbWFnZXMsIHN0eWxlc2hlZXRzLCBldGMuCiB9CiAK
IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmgJKHJldmlzaW9uIDQ1ODYzKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxCYXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
ICAqCiAgKi8KKwogI2lmbmRlZiBIVE1MQmFzZUVsZW1lbnRfaAogI2RlZmluZSBIVE1MQmFzZUVs
ZW1lbnRfaAogCkBAIC0yOSwxMiArMzAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
SFRNTEJhc2VFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1M
QmFzZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxC
YXNlRWxlbWVudCgpOwogCitwcml2YXRlOgogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQogICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAgU3Ry
aW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX2hyZWY7IH0KICAgICB2aXJ0dWFsIFN0cmluZyB0
YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwpAQCAtNDYsNyArNDYsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRIcmVmKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0VGFy
Z2V0KGNvbnN0IFN0cmluZyYpOwogCi1wcm90ZWN0ZWQ6CiAgICAgU3RyaW5nIG1faHJlZkF0dHJW
YWx1ZTsKICAgICBTdHJpbmcgbV9ocmVmOwogICAgIFN0cmluZyBtX3RhcmdldDsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MQmFzZUVsZW1lbnQuaWRsCShyZXZpc2lvbiA0NTg2MykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MQmFzZUVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjQsOCArMjQsOCBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIEludGVyZmFj
ZVVVSUQ9ZTQxMTJiZWEtMTNkZS00MGY2LTkzZDAtNDFlMjg1YWUxNDkxLAogICAgICAgICBJbXBs
ZW1lbnRhdGlvblVVSUQ9MjNjZWMwNzQtNjYwZi00OTBhLTk5NmQtMTY3ZDY2YzE2NGQ1CiAgICAg
XSBIVE1MQmFzZUVsZW1lbnQgOiBIVE1MRWxlbWVudCB7Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ29u
dmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyAgICAgICAgICAgIGhyZWY7Ci0gICAgICAg
IGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyAgICAgICAgICAg
IHRhcmdldDsKKyAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVm
bGVjdF0gRE9NU3RyaW5nIGhyZWY7CisgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051
bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyB0YXJnZXQ7CiAgICAgfTsKIAogfQpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxCYXNlRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50LmNwcAkocmV2aXNpb24gNDU4NjMpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTEJhc2VGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5
LDQwICsxOSwyMiBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MQmFzZUZvbnRFbGVtZW50LmgiCisK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MQmFzZUZvbnRFbGVtZW50OjpIVE1MQmFzZUZvbnRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0gICAg
OiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCitIVE1MQmFzZUZvbnRFbGVtZW50OjpIVE1MQmFz
ZUZvbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCkKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogewogICAgIEFTU0VS
VChoYXNUYWdOYW1lKGJhc2Vmb250VGFnKSk7CiB9CiAKLVN0cmluZyBIVE1MQmFzZUZvbnRFbGVt
ZW50Ojpjb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjb2xvckF0dHIp
OwotfQotCi12b2lkIEhUTUxCYXNlRm9udEVsZW1lbnQ6OnNldENvbG9yKGNvbnN0IFN0cmluZyAm
dmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvbG9yQXR0ciwgdmFsdWUpOwotfQotCi1TdHJp
bmcgSFRNTEJhc2VGb250RWxlbWVudDo6ZmFjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShmYWNlQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEJhc2VGb250RWxlbWVudDo6c2V0RmFj
ZShjb25zdCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShmYWNlQXR0ciwgdmFs
dWUpOwotfQotCiBpbnQgSFRNTEJhc2VGb250RWxlbWVudDo6c2l6ZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShzaXplQXR0cikudG9JbnQoKTsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MQmFzZUZvbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxC
YXNlRm9udEVsZW1lbnQuaAkocmV2aXNpb24gNDU4NjMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJh
c2VGb250RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lmbmRlZiBIVE1MQmFzZUZv
bnRFbGVtZW50X2gKICNkZWZpbmUgSFRNTEJhc2VGb250RWxlbWVudF9oCiAKQEAgLTI4LDIxICsy
OSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxCYXNlRm9udEVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxCYXNlRm9udEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MpOwotCi0gICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9y
YmlkZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0KLSAgICBTdHJpbmcgY29sb3IoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbG9yKGNvbnN0
IFN0cmluZyAmKTsKLQotICAgIFN0cmluZyBmYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRGYWNl
KGNvbnN0IFN0cmluZyAmKTsKKyAgICBIVE1MQmFzZUZvbnRFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgaW50IHNpemUoKSBjb25zdDsKICAgICB2b2lkIHNl
dFNpemUoaW50KTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIH07CiAKLX0gLy9u
YW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxCYXNlRm9udEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQmFz
ZUZvbnRFbGVtZW50LmlkbAkocmV2aXNpb24gNDU4NjMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJh
c2VGb250RWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNCw4ICsyNCw4IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgSW50ZXJmYWNl
VVVJRD00MzRiMWJlNS00MDhlLTQ1YjUtYmU4My1jNzBlMTFlOWJiMzcsCiAgICAgICAgIEltcGxl
bWVudGF0aW9uVVVJRD0xZGM4NTA4ZS01M2M0LTRlN2UtOTNjMC0xNjc3MjM3MmIyZGMKICAgICBd
IEhUTUxCYXNlRm9udEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7Ci0gICAgICAgIGF0dHJpYnV0ZSBb
Q29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBjb2xvcjsKLSAgICAgICAgYXR0cmli
dXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGZhY2U7CisgICAgICAgIGF0
dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyBjb2xv
cjsKKyAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdF0g
RE9NU3RyaW5nIGZhY2U7CiAjaWYgZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgJiYgTEFO
R1VBR0VfT0JKRUNUSVZFX0MKICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0VG9TdHJpbmddIERP
TVN0cmluZyBzaXplOyAvLyB0aGlzIGNoYW5nZWQgdG8gYSBsb25nLCBidXQgb3VyIGV4aXN0aW5n
IEFQSSBpcyBhIHN0cmluZwogI2Vsc2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQmxvY2txdW90
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQmxvY2txdW90ZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA0NTg2MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQmxvY2txdW90
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAotLyoqCisvKgogICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTE5LDYgKzE5LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAq
LworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEJsb2NrcXVvdGVFbGVtZW50
LmgiCiAKQEAgLTI4LDI0ICsyOSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxCbG9ja3F1b3RlRWxlbWVudDo6SFRNTEJsb2NrcXVv
dGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0g
ICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCitIVE1MQmxvY2txdW90ZUVsZW1lbnQ6OkhU
TUxCbG9ja3F1b3RlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jdW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKIHsKICAg
ICBBU1NFUlQoaGFzVGFnTmFtZShibG9ja3F1b3RlVGFnKSk7CiB9CiAKLUhUTUxCbG9ja3F1b3Rl
RWxlbWVudDo6fkhUTUxCbG9ja3F1b3RlRWxlbWVudCgpCi17Ci19Ci0KLVN0cmluZyBIVE1MQmxv
Y2txdW90ZUVsZW1lbnQ6OmNpdGUoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
Y2l0ZUF0dHIpOwotfQotCi12b2lkIEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6c2V0Q2l0ZShjb25z
dCBTdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShjaXRlQXR0ciwgdmFsdWUpOwot
fQotCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEJsb2NrcXVvdGVFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCbG9ja3F1b3RlRWxlbWVudC5oCShyZXZpc2lvbiA0
NTg2MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI5LDEzICszMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBIVE1MQmxvY2txdW90ZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGlj
OgogICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKLSAgICB+SFRNTEJsb2NrcXVvdGVFbGVtZW50KCk7CiAKK3ByaXZhdGU6CiAgICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzUmVxdWlyZWQ7IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDU7IH0KLSAgICAKLSAgICBTdHJpbmcgY2l0ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0
Q2l0ZShjb25zdCBTdHJpbmcmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuaWRsCShyZXZpc2lvbiA0NTg2MykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNyArMjQsNyBAQCBtb2R1bGUgaHRt
bCB7CiAgICAgICAgIEludGVyZmFjZVVVSUQ9OTAyZDkwMTEtYzZkNi00MzYzLWI2ZmUtYmQyZDI4
ZWY1NTNiLAogICAgICAgICBJbXBsZW1lbnRhdGlvblVVSUQ9MzQ1ZGI5NDYtYmE5Yy00NGI5LTg3
ZmQtMDYwODNhYTQ3MmU0CiAgICAgXSBIVE1MQmxvY2txdW90ZUVsZW1lbnQgOiBIVE1MRWxlbWVu
dCB7Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmlu
ZyBjaXRlOworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZs
ZWN0XSBET01TdHJpbmcgY2l0ZTsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TEJvZHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVt
ZW50LmNwcAkocmV2aXNpb24gNDU4NjMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
MCBTaW1vbiBIYXVzbWFubiAoaGF1c21hbm5Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxMyArMjQsOSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgogCi0jaW5jbHVk
ZSAiQ1NTSGVscGVyLmgiCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIK
LSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdv
cmRzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQzLDggKzM5LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1I
VE1MQm9keUVsZW1lbnQ6OkhUTUxCb2R5RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorSFRN
TEJvZHlFbGVtZW50OjpIVE1MQm9keUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1l
bnQpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoYm9keVRhZykpOwogfQpAQCAtMTk0LDE2ICsx
OTAsNiBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0QUxpbmsoY29uc3QgU3RyCiAgICAgc2V0
QXR0cmlidXRlKGFsaW5rQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTEJvZHlFbGVtZW50
OjpiYWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGJhY2tncm91
bmRBdHRyKTsKLX0KLQotdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldEJhY2tncm91bmQoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIsIHZhbHVl
KTsKLX0KLQogU3RyaW5nIEhUTUxCb2R5RWxlbWVudDo6YmdDb2xvcigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShiZ2NvbG9yQXR0cik7CkBAIC0zMTUsNyArMzAxLDcgQEAgdm9p
ZCBIVE1MQm9keUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cgogewogICAgIEhUTUxFbGVtZW50
OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAKLSAgICBhZGRTdWJyZXNvdXJj
ZVVSTCh1cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChiYWNrZ3JvdW5kKCkpKTsKKyAgICBh
ZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1
dGUoYmFja2dyb3VuZEF0dHIpKSk7CiB9CiAKIHZvaWQgSFRNTEJvZHlFbGVtZW50OjpkaWRNb3Zl
VG9OZXdPd25lckRvY3VtZW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmgJKHJldmlzaW9u
IDQ1ODYzKQorKysgV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEwICsxLDggQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGlt
cGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4g
PGhhdXNtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDI0ICszMSwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MQm9keUVsZW1lbnQgOiBwdWJsaWMg
SFRNTEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxCb2R5RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICB+SFRNTEJvZHlFbGVtZW50KCk7Ci0KLSAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNSZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMTA7IH0KLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFs
aWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLQotICAgIHZvaWQgY3JlYXRlTGlua0RlY2wo
KTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29u
c3Q7CisgICAgdmlydHVhbCB+SFRNTEJvZHlFbGVtZW50KCk7CiAKICAgICBTdHJpbmcgYUxpbmso
KSBjb25zdDsKICAgICB2b2lkIHNldEFMaW5rKGNvbnN0IFN0cmluZyYpOwotICAgIFN0cmluZyBi
YWNrZ3JvdW5kKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kKGNvbnN0IFN0cmluZyYp
OwogICAgIFN0cmluZyBiZ0NvbG9yKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRCZ0NvbG9yKGNvbnN0
IFN0cmluZyYpOwogICAgIFN0cmluZyBsaW5rKCkgY29uc3Q7CkBAIC02MCw3ICs0NCw2IEBAIHB1
YmxpYzoKICAgICBTdHJpbmcgdkxpbmsoKSBjb25zdDsKICAgICB2b2lkIHNldFZMaW5rKGNvbnN0
IFN0cmluZyYpOwogCi0gICAgLy8gRXZlbnQgaGFuZGxlciBhdHRyaWJ1dGVzCiAgICAgdmlydHVh
bCBFdmVudExpc3RlbmVyKiBvbmJsdXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0T25i
bHVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwogICAgIHZpcnR1YWwgRXZlbnRMaXN0ZW5l
ciogb25lcnJvcigpIGNvbnN0OwpAQCAtODUsNiArNjgsMTkgQEAgcHVibGljOgogICAgIEV2ZW50
TGlzdGVuZXIqIG9udW5sb2FkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRPbnVubG9hZChQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+KTsKIAorcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsg
fQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTA7IH0KKyAg
ICAKKyAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFw
cGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQoKTsKKworICAgIHZvaWQgY3JlYXRlTGlua0RlY2woKTsKKyAgICAKKyAgICB2
aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CisKICAgICB2aXJ0
dWFsIGludCBzY3JvbGxMZWZ0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExl
ZnQoaW50IHNjcm9sbExlZnQpOwogICAgIApAQCAtOTYsMTEgKzkyLDkgQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hT
ZXQ8S1VSTD4mKSBjb25zdDsKICAgICAKLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IG1fbGlua0RlY2w7Ci0KLXByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIGRpZE1vdmVUb05ld093bmVyRG9jdW1lbnQoKTsKKworICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gbV9saW5rRGVjbDsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MQm9keUVsZW1lbnQuaWRsCShyZXZpc2lvbiA0NTg2MykKKysrIFdlYkNvcmUvaHRt
bC9IVE1MQm9keUVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsMTIgQEAg
bW9kdWxlIGh0bWwgewogICAgICAgICBJbnRlcmZhY2VVVUlEPTQ3ODlhZmM2LTJkOWUtNGYzYi04
YzI3LTEyYWJjOWQ0YTAxNCwKICAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPWQyZTE2OTExLTJm
N2UtNGQ1OC1hOTJjLTk0NzAwZDQ0NWIzOAogICAgIF0gSFRNTEJvZHlFbGVtZW50IDogSFRNTEVs
ZW1lbnQgewotICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01T
dHJpbmcgYUxpbms7Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmdd
IERPTVN0cmluZyBiYWNrZ3JvdW5kOwotICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9O
dWxsU3RyaW5nXSBET01TdHJpbmcgYmdDb2xvcjsKLSAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0
TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGxpbms7Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ29u
dmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0ZXh0OwotICAgICAgICBhdHRyaWJ1dGUg
W0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdkxpbms7CisgICAgICAgIGF0dHJp
YnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3Q9YWxpbmtdIERPTVN0cmluZyBh
TGluazsKKyAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVj
dF0gRE9NU3RyaW5nIGJhY2tncm91bmQ7CisgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxU
b051bGxTdHJpbmcsIFJlZmxlY3Q9Ymdjb2xvcl0gRE9NU3RyaW5nIGJnQ29sb3I7CisgICAgICAg
IGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyBs
aW5rOworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0
XSBET01TdHJpbmcgdGV4dDsKKyAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0
cmluZywgUmVmbGVjdD12bGlua10gRE9NU3RyaW5nIHZMaW5rOwogCiAjaWYgIWRlZmluZWQoTEFO
R1VBR0VfT0JKRUNUSVZFX0MpIHx8ICFMQU5HVUFHRV9PQkpFQ1RJVkVfQwogI2lmICFkZWZpbmVk
KExBTkdVQUdFX0NPTSkgfHwgIUxBTkdVQUdFX0NPTQpAQCAtNDMsMTIgKzQzLDYgQEAgbW9kdWxl
IGh0bWwgewogICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uc3Rv
cmFnZTsKICAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbnVubG9h
ZDsKIAotICAgICAgICAvLyBPdmVycmlkZXMgb2YgRWxlbWVudCBhdHRyaWJ1dGVzLgotICAgICAg
ICAvLyBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uYmx1cjsKLSAgICAgICAg
Ly8gYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbmVycm9yOwotICAgICAgICAv
LyBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uZm9jdXM7Ci0gICAgICAgIC8v
IGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25sb2FkOwotCiAgICAgICAgIC8v
IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCiAgICAgICAgIC8vIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2
ZW50TGlzdGVuZXIgb25hZnRlcnByaW50OwogICAgICAgICAvLyBhdHRyaWJ1dGUgW0RvbnRFbnVt
XSBFdmVudExpc3RlbmVyIG9uYmVmb3JlcHJpbnQ7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CShyZXZpc2lvbiA0NTg2MykKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5j
bHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQXBwbGV0RWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1l
bnQuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34947</attachid>
            <date>2009-08-16 22:05:26 -0700</date>
            <delta_ts>2010-03-15 09:45:15 -0700</delta_ts>
            <desc>patch that does this for four more classes</desc>
            <filename>FrameReflectPatch.txt</filename>
            <type>text/plain</type>
            <size>9931</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzM0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMDgtMTYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERPTSBh
dHRyaWJ1dGUgZ2V0dGVyL3NldHRlciBmdW5jdGlvbnMgc2hvdWxkIHVzZSBjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI1NDI1CisKKyAgICAgICAgQ29udmVydCA0IG1vcmUgY2xhc3Nlcy4gVGhlc2UgYXJlIGNs
YXNzZXMgSSBhbSBnb2luZyB0byBtYWtlIG90aGVyIGNoYW5nZXMKKyAgICAgICAgdG8gc29vbiwg
c28gaXQncyBnb29kIHRvIGhhdmUgdGhpcyB1c2Ugb2YgUmVmbGVjdCBpbiB0aGUgSURMIG91dCBv
ZiB0aGUgd2F5LgorCisgICAgICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmlkbDogVXNlIFJl
ZmxlY3QgZm9yIG1hbnkgYXR0cmlidXRlcy4KKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1l
bnQuaWRsOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbDogRGl0
dG8uCisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5pZGw6IERpdHRvLgorCiAyMDA5
LTA4LTE2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuaWtvbGFzLnppbW1lcm1hbm5AdG9yY2htb2Jp
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb3JnZSBTdGFpa29zLgpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MRW1iZWRFbGVtZW50LmlkbAkocmV2aXNpb24gNDczMTIpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEVtYmVkRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE3ICsyOSwxNyBAQCBt
b2R1bGUgaHRtbCB7CiAgICAgICAgIEludGVyZmFjZVVVSUQ9MThmOWJkNTgtNmJiMy00YjVjLWFh
MzAtNmRhMTNhZGZjOTFlLAogICAgICAgICBJbXBsZW1lbnRhdGlvblVVSUQ9OTNlMDQwN2EtODM4
MC00ZmYwLTk3OGQtZjc3M2YyZGVlNmEzCiAgICAgXSBIVE1MRW1iZWRFbGVtZW50IDogSFRNTEVs
ZW1lbnQgewotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3Ry
aW5nXSBET01TdHJpbmcgYWxpZ247CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVy
dE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyBhbGlnbjsKICNpZiBkZWZpbmVk
KExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pBVkFTQ1JJUFQKLSAgICAgICAgICAg
ICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGhlaWdo
dDsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywg
UmVmbGVjdF0gRE9NU3RyaW5nIGhlaWdodDsKICNlbHNlCiAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZSBbQ29udmVydEZyb21TdHJpbmddIGxvbmcgaGVpZ2h0OwogI2VuZGlmCi0gICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBuYW1l
OwotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBE
T01TdHJpbmcgc3JjOwotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9O
dWxsU3RyaW5nXSBET01TdHJpbmcgdHlwZTsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtD
b252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nIG5hbWU7CisgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERP
TVN0cmluZyBzcmM7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051
bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyB0eXBlOwogI2lmIGRlZmluZWQoTEFOR1VBR0Vf
SkFWQVNDUklQVCkgJiYgTEFOR1VBR0VfSkFWQVNDUklQVAotICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgd2lkdGg7CisgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERP
TVN0cmluZyB3aWR0aDsKICNlbHNlCiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVy
dEZyb21TdHJpbmddIGxvbmcgd2lkdGg7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
RnJhbWVFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxl
bWVudC5pZGwJKHJldmlzaW9uIDQ3MzEyKQorKysgV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1l
bnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTQgQEAgbW9kdWxlIGh0bWwgewog
ICAgICAgICBJbXBsZW1lbnRhdGlvblVVSUQ9MzhjOWUzYzgtMzM4NC00MGI2LWE0ODQtY2I4NDVj
NDhiNjdkCiAgICAgXSBIVE1MRnJhbWVFbGVtZW50IDogSFRNTEVsZW1lbnQgewogCi0gICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyAg
ICAgICBmcmFtZUJvcmRlcjsKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVs
bFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nICAgICAgIGxvbmdEZXNjOwotICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgICAgICAgbWFy
Z2luSGVpZ2h0OwotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxs
U3RyaW5nXSBET01TdHJpbmcgICAgICAgbWFyZ2luV2lkdGg7Ci0gICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyAgICAgICBuYW1lOwor
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZs
ZWN0PWZyYW1lYm9yZGVyXSBET01TdHJpbmcgICAgICAgZnJhbWVCb3JkZXI7CisgICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3Q9bG9uZ2Rl
c2NdIERPTVN0cmluZyAgICAgICBsb25nRGVzYzsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRl
IFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdD1tYXJnaW5oZWlnaHRdIERPTVN0cmlu
ZyAgICAgICBtYXJnaW5IZWlnaHQ7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVy
dE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3Q9bWFyZ2lud2lkdGhdIERPTVN0cmluZyAgICAgICBt
YXJnaW5XaWR0aDsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVs
bFN0cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nICAgICAgIG5hbWU7CiAgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgbm9SZXNpemU7Ci0gICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyAgICAgICBzY3JvbGxp
bmc7Ci0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcs
IEN1c3RvbVNldHRlcl0gRE9NU3RyaW5nICAgICAgIHNyYzsKKyAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nICAgICAg
IHNjcm9sbGluZzsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVs
bFN0cmluZywgQ3VzdG9tU2V0dGVyLCBSZWZsZWN0VVJMXSBET01TdHJpbmcgICAgICAgc3JjOwog
CiAgICAgICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDI6CiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBbQ2hlY2tGcmFtZVNlY3VyaXR5XSBEb2N1bWVudCAgICAgICAgY29udGVudERv
Y3VtZW50OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaWRsCShyZXZpc2lvbiA0NzMx
MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
U2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjYs
MTYgKzI2LDE2IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPTM3
MGM2MzE4LWY4MDQtNDlmOS1iYzhhLTQ2Yjk5Y2Q4NzM5OQogICAgIF0gSFRNTElGcmFtZUVsZW1l
bnQgOiBIVE1MRWxlbWVudCB7CiAKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0
TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nICAgICAgIGFsaWduOwotICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgICAgICAgZnJh
bWVCb3JkZXI7Ci0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyAgICAgICBoZWlnaHQ7Ci0gICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyAgICAgICBsb25nRGVzYzsKLSAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3Ry
aW5nICAgICAgIG1hcmdpbkhlaWdodDsKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nICAgICAgIG1hcmdpbldpZHRoOwotICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcg
ICAgICAgbmFtZTsKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVs
bFN0cmluZ10gRE9NU3RyaW5nICAgICAgIHNjcm9sbGluZzsKLSAgICAgICAgICAgICAgICAgYXR0
cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgQ3VzdG9tU2V0dGVyXSBET01TdHJpbmcg
ICAgICAgc3JjOwotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxs
U3RyaW5nXSBET01TdHJpbmcgICAgICAgd2lkdGg7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyAgICAgICBhbGln
bjsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywg
UmVmbGVjdD1mcmFtZWJvcmRlcl0gRE9NU3RyaW5nICAgICAgIGZyYW1lQm9yZGVyOworICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBE
T01TdHJpbmcgICAgICAgaGVpZ2h0OworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZl
cnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0PWxvbmdkZXNjXSBET01TdHJpbmcgICAgICAgbG9u
Z0Rlc2M7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJp
bmcsIFJlZmxlY3Q9bWFyZ2luaGVpZ2h0XSBET01TdHJpbmcgICAgICAgbWFyZ2luSGVpZ2h0Owor
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZs
ZWN0PW1hcmdpbndpZHRoXSBET01TdHJpbmcgICAgICAgbWFyZ2luV2lkdGg7CisgICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0
cmluZyAgICAgICBuYW1lOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxs
VG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJpbmcgICAgICAgc2Nyb2xsaW5nOworICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBDdXN0b21TZXR0
ZXIsIFJlZmxlY3RdIERPTVN0cmluZyAgICAgICBzcmM7CisgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyAgICAgICB3
aWR0aDsKIAogICAgICAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOgogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgW0NoZWNrRnJhbWVTZWN1cml0eV0gRG9jdW1lbnQgICAgICAgIGNv
bnRlbnREb2N1bWVudDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmlkbAkocmV2aXNp
b24gNDczMTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTMwLDIyICszMCwyMiBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIEltcGxlbWVudGF0aW9u
VVVJRD0yZGQyNDU1NC02Nzg0LTRlZjktOTcxMy0xNzlmM2QzN2IyZjkKICAgICBdIEhUTUxPYmpl
Y3RFbGVtZW50IDogSFRNTEVsZW1lbnQgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRN
TEZvcm1FbGVtZW50IGZvcm07Ci0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51
bGxUb051bGxTdHJpbmddIERPTVN0cmluZyAgICAgICBjb2RlOwotICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgICAgICAgYWxpZ247
Ci0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERP
TVN0cmluZyAgICAgICBhcmNoaXZlOwotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZl
cnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgICAgICAgYm9yZGVyOwotICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgICAgICAg
Y29kZUJhc2U7Ci0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyAgICAgICBjb2RlVHlwZTsKLSAgICAgICAgICAgICAgICAgYXR0cmli
dXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nICAgICAgIGRhdGE7CisgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3Rd
IERPTVN0cmluZyAgICAgICBjb2RlOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZl
cnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJpbmcgICAgICAgYWxpZ247CisgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3Rd
IERPTVN0cmluZyAgICAgICBhcmNoaXZlOworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0Nv
bnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJpbmcgICAgICAgYm9yZGVyOwor
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZs
ZWN0PWNvZGViYXNlXSBET01TdHJpbmcgICAgICAgY29kZUJhc2U7CisgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3Q9Y29kZXR5cGVdIERP
TVN0cmluZyAgICAgICBjb2RlVHlwZTsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdFVSTF0gRE9NU3RyaW5nICAgICAgIGRhdGE7CiAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgZGVjbGFyZTsKLSAgICAg
ICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5n
ICAgICAgIGhlaWdodDsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRv
TnVsbFN0cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nICAgICAgIGhlaWdodDsKICAgICAgICAgICAg
ICAgICAgYXR0cmlidXRlIGxvbmcgICAgICAgICAgICBoc3BhY2U7Ci0gICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyAgICAgICBuYW1l
OwotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBE
T01TdHJpbmcgICAgICAgc3RhbmRieTsKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nICAgICAgIHR5cGU7Ci0gICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyAgICAgICB1
c2VNYXA7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJp
bmcsIFJlZmxlY3RdIERPTVN0cmluZyAgICAgICBuYW1lOworICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJpbmcgICAgICAg
c3RhbmRieTsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0
cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nICAgICAgIHR5cGU7CisgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3Q9dXNlbWFwXSBET01TdHJp
bmcgICAgICAgdXNlTWFwOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgbG9uZyAgICAgICAg
ICAgIHZzcGFjZTsKLSAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVs
bFN0cmluZ10gRE9NU3RyaW5nICAgICAgIHdpZHRoOworICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJpbmcgICAgICAgd2lk
dGg7CiAKICAgICAgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIFtDaGVja0ZyYW1lU2VjdXJpdHldIERvY3VtZW50ICAgICAgICBjb250
ZW50RG9jdW1lbnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50715</attachid>
            <date>2010-03-15 09:45:15 -0700</date>
            <delta_ts>2010-06-11 13:34:29 -0700</delta_ts>
            <desc>More of this type of thing</desc>
            <filename>GetAttributePatch.txt</filename>
            <type>text/plain</type>
            <size>26105</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAJKHJldmlzaW9uIDU1OTgxKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjMsNyArNjYz
LDcgQEAgc3RhdGljIEVsZW1lbnQqIHNpYmxpbmdXaXRoQXJpYVJvbGUoU3RyaQogICAgIE5vZGUq
IHNpYmxpbmcgPSBub2RlLT5wYXJlbnQoKS0+Zmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChzaWJs
aW5nKSB7CiAgICAgICAgIGlmIChzaWJsaW5nLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAg
ICAgIFN0cmluZyBzaWJsaW5nQXJpYVJvbGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oc2libGlu
ZyktPmdldEF0dHJpYnV0ZShyb2xlQXR0cikuc3RyaW5nKCk7CisgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHNpYmxpbmdBcmlhUm9sZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihzaWJs
aW5nKS0+Z2V0QXR0cmlidXRlKHJvbGVBdHRyKS5zdHJpbmcoKTsKICAgICAgICAgICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShzaWJsaW5nQXJpYVJvbGUsIHJvbGUpKQogICAgICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oc2libGluZyk7CiAgICAgICAgIH0KSW5kZXg6
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDU1OTgxKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjM1LDggKzI2MzUsNyBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNT
dHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAgICAgICAgICAgLy8gd2UgYXJlIE5PVCBhbiBhbHRl
cm5hdGUgc2hlZXQsIHRoZW4gZXN0YWJsaXNoCiAgICAgICAgICAgICAgICAgICAgIC8vIHVzIGFz
IHRoZSBwcmVmZXJyZWQgc2V0LiAgT3RoZXJ3aXNlLCBqdXN0IGlnbm9yZQogICAgICAgICAgICAg
ICAgICAgICAvLyB0aGlzIHNoZWV0LgotICAgICAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcg
cmVsID0gZS0+Z2V0QXR0cmlidXRlKHJlbEF0dHIpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
ZS0+aGFzTG9jYWxOYW1lKHN0eWxlVGFnKSB8fCAhcmVsLmNvbnRhaW5zKCJhbHRlcm5hdGUiKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShzdHlsZVRhZykgfHwgIWUt
PmdldEF0dHJpYnV0ZShyZWxBdHRyKS5jb250YWlucygiYWx0ZXJuYXRlIikpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXQgPSBtX3NlbGVjdGVkU3R5bGVz
aGVldFNldCA9IHRpdGxlOwogICAgICAgICAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9kb20v
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDU1
OTgxKQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNTcsNyAr
MjE1Nyw3IEBAIEZsb2F0UG9pbnQgTm9kZTo6Y29udmVydEZyb21QYWdlKGNvbnN0IEYKIHN0YXRp
YyB2b2lkIGFwcGVuZEF0dHJpYnV0ZURlc2MoY29uc3QgTm9kZSogbm9kZSwgU3RyaW5nJiBzdHJp
bmcsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IGNoYXIqIGF0dHJEZXNjKQogewog
ICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgU3RyaW5nIGF0dHIgPSBz
dGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0ZShuYW1lKTsKKyAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVu
dCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUobmFtZSk7CiAgICAgICAgIGlmICghYXR0ci5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIHN0cmluZyArPSBhdHRyRGVzYzsKICAgICAgICAgICAgIHN0cmlu
ZyArPSBhdHRyOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmNwcAkocmV2aXNpb24gNTU5
ODEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDEyICs0MSwxMyBAQCBIVE1MQXVkaW9FbGVtZW50OjpIVE1MQXVkaW9FbGVtZW50KGNv
bnN0CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoYXVkaW9UYWcpKTsKIH0KIAotUGFzc1JlZlB0cjxI
VE1MQXVkaW9FbGVtZW50PiBIVE1MQXVkaW9FbGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9y
KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBzcmMpCitQYXNzUmVmUHRyPEhUTUxB
dWRpb0VsZW1lbnQ+IEhUTUxBdWRpb0VsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIHNyYykKIHsKICAgICBSZWZQdHI8
SFRNTEF1ZGlvRWxlbWVudD4gYXVkaW8gPSBuZXcgSFRNTEF1ZGlvRWxlbWVudChhdWRpb1RhZywg
ZG9jdW1lbnQpOwogICAgIGF1ZGlvLT5zZXRQcmVsb2FkKCJhdXRvIik7CiAgICAgaWYgKCFzcmMu
aXNOdWxsKCkpIHsKLSAgICAgICAgYXVkaW8tPnNldFNyYyhzcmMpOworICAgICAgICBhdWRpby0+
c2V0QXR0cmlidXRlKHNyY0F0dHIsIHNyYyk7CiAgICAgICAgIGF1ZGlvLT5zY2hlZHVsZUxvYWQo
KTsKICAgICB9CiAgICAgcmV0dXJuIGF1ZGlvLnJlbGVhc2UoKTsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MQXVkaW9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBdWRp
b0VsZW1lbnQuaAkocmV2aXNpb24gNTU5ODEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgSFRNTEF1ZGlvRWxlbWVudCA6IHB1YmxpYyBIVE1MTWVkaWFFbGVtZW50IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBjcmVhdGVG
b3JKU0NvbnN0cnVjdG9yKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBzcmMpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IGNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9j
dW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIHNyYyk7CiAgICAgSFRNTEF1ZGlvRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGlzVmlkZW8oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxEYXRhR3JpZENvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRGF0YUdyaWRDb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNTU5ODEpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTERhdGFHcmlkQ29sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw5ICsx
MDQsOCBAQCB2b2lkIEhUTUxEYXRhR3JpZENvbEVsZW1lbnQ6OnNldFR5cGUoY29uCiAKIHVuc2ln
bmVkIHNob3J0IEhUTUxEYXRhR3JpZENvbEVsZW1lbnQ6OnNvcnRhYmxlKCkgY29uc3QKIHsKLSAg
ICBpZiAoIWhhc0F0dHJpYnV0ZShzb3J0YWJsZUF0dHIpKQotICAgICAgICByZXR1cm4gMjsKLSAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKHNvcnRhYmxlQXR0cikudG9JbnQoMCk7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBzb3J0YWJsZSA9IGdldEF0dHJpYnV0ZShzb3J0YWJsZUF0dHIpOworICAg
IHJldHVybiBzb3J0YWJsZS5pc051bGwoKSA/IDIgOiBzb3J0YWJsZS50b0ludCgwKTsKIH0KIAog
dm9pZCBIVE1MRGF0YUdyaWRDb2xFbGVtZW50OjpzZXRTb3J0YWJsZSh1bnNpZ25lZCBzaG9ydCBz
b3J0YWJsZSkKQEAgLTExNiw3ICsxMTUsNyBAQCB2b2lkIEhUTUxEYXRhR3JpZENvbEVsZW1lbnQ6
OnNldFNvcnRhYmxlCiAKIHVuc2lnbmVkIHNob3J0IEhUTUxEYXRhR3JpZENvbEVsZW1lbnQ6OnNv
cnREaXJlY3Rpb24oKSBjb25zdAogewotICAgIFN0cmluZyBzb3J0RGlyZWN0aW9uID0gZ2V0QXR0
cmlidXRlKHNvcnRkaXJlY3Rpb25BdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNvcnRE
aXJlY3Rpb24gPSBnZXRBdHRyaWJ1dGUoc29ydGRpcmVjdGlvbkF0dHIpOwogICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShzb3J0RGlyZWN0aW9uLCAiYXNjZW5kaW5nIikpCiAgICAgICAgIHJldHVy
biAxOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShzb3J0RGlyZWN0aW9uLCAiZGVzY2VuZGlu
ZyIpKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNTU5ODEpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
Nyw4ICsxODcsOCBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtCiAg
ICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIHN0YXRpY19jYXN0
PEhUTUxEb2N1bWVudCo+KGRvY3VtZW50KCkpLT5hZGROYW1lZEl0ZW0obV9uYW1lKTsKIAotICAg
IFN0cmluZyB3aWR0aCA9IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwotICAgIFN0cmluZyBoZWln
aHQgPSBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB3
aWR0aCA9IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
aGVpZ2h0ID0gZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIpOwogICAgIGlmICghd2lkdGguaXNFbXB0
eSgpIHx8ICFoZWlnaHQuaXNFbXB0eSgpKSB7CiAgICAgICAgIE5vZGUqIG4gPSBwYXJlbnQoKTsK
ICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MSHRtbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1NTk4MSkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MSHRtbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQg
SFRNTEh0bWxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWUKICAgICAvLyBGSVhNRTogUmV2aXNp
dCB0aGlzIHdoZW4gd2UgZ2V0IGEgY2xhcmlmaWNhdGlvbiBmcm9tIHdoYXR3ZyBvbiBob3cgdG8g
aGFuZGxlIGVtcHR5CiAgICAgLy8gbWFuaWZlc3QgYXR0cmlidXRlcy4gQXMgc3BlYydkLCBhbmQg
Y29kZWQgaGVyZSwgdGhlIHN5c3RlbSB3aWxsIGluaXRpYXRlIGFuIHVwZGF0ZQogICAgIC8vIHBh
c3NpbmcgaW4gdGhlIGRvY3VtZW50IHVybCBhcyB0aGUgbWFuaWZlc3QgdXJsLiBUaGF0J3Mgbm90
IGEgZ29vZCB0aGluZy4KLSAgICBBdG9taWNTdHJpbmcgbWFuaWZlc3QgPSBnZXRBdHRyaWJ1dGUo
bWFuaWZlc3RBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG1hbmlmZXN0ID0gZ2V0QXR0
cmlidXRlKG1hbmlmZXN0QXR0cik7CiAgICAgaWYgKG1hbmlmZXN0LmlzTnVsbCgpKQogICAgICAg
ICBkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+c2VsZWN0Q2FjaGVXaXRo
b3V0TWFuaWZlc3QoKTsKICAgICBlbHNlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA1NTk4MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw2IEBAIFN0cmluZyBIVE1MSW1hZ2VFbGVtZW50
OjphbHRUZXh0KCkgY29uc3QKICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk4L1JFQy1o
dG1sNDAtMTk5ODA0MjQvYXBwZW5kaXgvbm90ZXMuaHRtbCNhbHRnZW4KICAgICAvLyBhbHNvIGhl
YXZpbHkgZGlzY3Vzc2VkIGJ5IEhpeGllIG9uIGJ1Z3ppbGxhCiAgICAgU3RyaW5nIGFsdCA9IGdl
dEF0dHJpYnV0ZShhbHRBdHRyKTsKLSAgICAvLyBmYWxsIGJhY2sgdG8gdGl0bGUgYXR0cmlidXRl
CiAgICAgaWYgKGFsdC5pc051bGwoKSkKICAgICAgICAgYWx0ID0gZ2V0QXR0cmlidXRlKHRpdGxl
QXR0cik7CiAgICAgcmV0dXJuIGFsdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDU1OTgxKQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjQ0LDcgKzEyNDQsNiBAQCBTdHJpbmcgSFRNTElucHV0RWxlbWVu
dDo6YWx0VGV4dCgpIGNvbnN0CiAgICAgLy8gYWxzbyBoZWF2aWx5IGRpc2N1c3NlZCBieSBIaXhp
ZSBvbiBidWd6aWxsYQogICAgIC8vIG5vdGUgdGhpcyBpcyBpbnRlbnRpb25hbGx5IGRpZmZlcmVu
dCB0byBIVE1MSW1hZ2VFbGVtZW50OjphbHRUZXh0KCkKICAgICBTdHJpbmcgYWx0ID0gZ2V0QXR0
cmlidXRlKGFsdEF0dHIpOwotICAgIC8vIGZhbGwgYmFjayB0byB0aXRsZSBhdHRyaWJ1dGUKICAg
ICBpZiAoYWx0LmlzTnVsbCgpKQogICAgICAgICBhbHQgPSBnZXRBdHRyaWJ1dGUodGl0bGVBdHRy
KTsKICAgICBpZiAoYWx0LmlzTnVsbCgpKQpAQCAtMTkwNywxNiArMTkwNiw2IEBAIFN0cmluZyBI
VE1MSW5wdXRFbGVtZW50OjpzZXJpYWxpemUoZG91YmwKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9
CiAKLVN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjpwbGFjZWhvbGRlcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpLnN0cmluZygpOwotfQotCi12b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFBsYWNlaG9sZGVyKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0ciwgdmFsdWUpOwotfQotCiBib29sIEhU
TUxJbnB1dEVsZW1lbnQ6OnNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShpbmNyZW1lbnRhbEF0dHIpOwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5oCShyZXZpc2lvbiA1NTk4MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw5ICsxNTAsNiBAQCBwdWJsaWM6CiAg
ICAgZG91YmxlIHZhbHVlQXNOdW1iZXIoKSBjb25zdDsKICAgICB2b2lkIHNldFZhbHVlQXNOdW1i
ZXIoZG91YmxlLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBwbGFjZWhv
bGRlcigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRQbGFjZWhvbGRlcihjb25zdCBTdHJp
bmcmKTsKLQogICAgIHZpcnR1YWwgYm9vbCBzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQo
KSBjb25zdDsKIAogICAgIFN0cmluZyB2YWx1ZVdpdGhEZWZhdWx0KCkgY29uc3Q7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCShyZXZpc2lvbiA1NTk4MSkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBt
b2R1bGUgaHRtbCB7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAg
bXVsdGlwbGU7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyBuYW1lOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZl
cnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJpbmcgcGF0dGVybjsKLSAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICBwbGFjZWhvbGRlcjsKKyAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgcGxhY2Vob2xkZXI7IC8vIEZJ
WE1FOiBTaG91bGQgd3JpdGUgYSB0ZXN0IGFuZCBhZGQgQ29udmVydE51bGxUb051bGxTdHJpbmcg
aGVyZS4KICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICByZWFkT25s
eTsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gICAgICAgICByZXF1aXJlZDsK
ICNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSAmJiBMQU5HVUFHRV9PQkpFQ1RJVkVf
QwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gNTU5ODEpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NCw3
ICsyODQsNyBAQCBSZW5kZXJPYmplY3QqIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZVJlCiB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBIVE1MRWxl
bWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBpZiAoIXNyYygpLmlzRW1wdHkoKSAm
JiBtX25ldHdvcmtTdGF0ZSA9PSBORVRXT1JLX0VNUFRZKQorICAgIGlmICghZ2V0QXR0cmlidXRl
KHNyY0F0dHIpLmlzRW1wdHkoKSAmJiBtX25ldHdvcmtTdGF0ZSA9PSBORVRXT1JLX0VNUFRZKQog
ICAgICAgICBzY2hlZHVsZUxvYWQoKTsKIH0KIApAQCAtMzgzLDcgKzM4Myw3IEBAIHN0YXRpYyBm
bG9hdCBwYXJzZVRpbWVPZmZzZXQoY29uc3QgU3RyaW4KIGZsb2F0IEhUTUxNZWRpYUVsZW1lbnQ6
OmdldFRpbWVPZmZzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgZmxvYXQg
dmFsdWVPbkVycm9yKSBjb25zdAogewogICAgIGJvb2wgb2s7Ci0gICAgU3RyaW5nIHRpbWVTdHJp
bmcgPSBnZXRBdHRyaWJ1dGUobmFtZSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aW1lU3Ry
aW5nID0gZ2V0QXR0cmlidXRlKG5hbWUpOwogICAgIGZsb2F0IHJlc3VsdCA9IHBhcnNlVGltZU9m
ZnNldCh0aW1lU3RyaW5nLCAmb2spOwogICAgIGlmIChvaykKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTQwMCwxNiArNDAwLDYgQEAgUGFzc1JlZlB0cjxNZWRpYUVycm9yPiBIVE1MTWVkaWFF
bGVtZW50OgogICAgIHJldHVybiBtX2Vycm9yOwogfQogCi1LVVJMIEhUTUxNZWRpYUVsZW1lbnQ6
OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0
dHJpYnV0ZShzcmNBdHRyKSk7Ci19Ci0KLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0U3JjKGNv
bnN0IFN0cmluZyYgdXJsKQotewotICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCB1cmwpOwotfQot
CiBTdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6Y3VycmVudFNyYygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fY3VycmVudFNyYzsKQEAgLTUzMCw4ICs1MjAsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnNlbGVjdE1lZGlhUmVzb3VyCiAgICAgLy8gMiAtIEFzeW5jaHJvbm91c2x5IGF3YWl0IGEg
c3RhYmxlIHN0YXRlLgogCiAgICAgLy8gMyAtIC4uLiB0aGUgbWVkaWEgZWxlbWVudCBoYXMgbmVp
dGhlciBhIHNyYyBhdHRyaWJ1dGUgLi4uCi0gICAgU3RyaW5nIG1lZGlhU3JjID0gZ2V0QXR0cmli
dXRlKHNyY0F0dHIpOwotICAgIGlmICghbWVkaWFTcmMpIHsKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIG1lZGlhU3JjID0gZ2V0QXR0cmlidXRlKHNyY0F0dHIpOworICAgIGlmICghbWVkaWFTcmMu
aXNOdWxsKCkpIHsKICAgICAgICAgLy8gLi4uIG5vciBhIHNvdXJjZSBlbGVtZW50IGNoaWxkOiAu
Li4KICAgICAgICAgTm9kZSogbm9kZTsKICAgICAgICAgZm9yIChub2RlID0gZmlyc3RDaGlsZCgp
OyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewpAQCAtMTQzNywyNSArMTQyNywy
NSBAQCBLVVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5leHRTb3VyY2VDCiAKICAgICAgICAg
aWYgKHNvdXJjZS0+aGFzQXR0cmlidXRlKG1lZGlhQXR0cikpIHsKICAgICAgICAgICAgIE1lZGlh
UXVlcnlFdmFsdWF0b3Igc2NyZWVuRXZhbCgic2NyZWVuIiwgZG9jdW1lbnQoKS0+ZnJhbWUoKSwg
cmVuZGVyZXIoKSA/IHJlbmRlcmVyKCktPnN0eWxlKCkgOiAwKTsKLSAgICAgICAgICAgIFJlZlB0
cjxNZWRpYUxpc3Q+IG1lZGlhID0gTWVkaWFMaXN0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9u
U3ludGF4KHNvdXJjZS0+bWVkaWEoKSk7CisgICAgICAgICAgICBSZWZQdHI8TWVkaWFMaXN0PiBt
ZWRpYSA9IE1lZGlhTGlzdDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChzb3VyY2Ut
PmdldEF0dHJpYnV0ZShtZWRpYUF0dHIpKTsKICAgICAgICAgICAgIGlmICghc2NyZWVuRXZhbC5l
dmFsKG1lZGlhLmdldCgpKSkgCiAgICAgICAgICAgICAgICAgZ290byBjaGVja19hZ2FpbjsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChzb3VyY2UtPmhhc0F0dHJpYnV0ZSh0eXBlQXR0cikpIHsK
LSAgICAgICAgICAgIGlmICghTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShDb250ZW50VHlwZShz
b3VyY2UtPnR5cGUoKSkpKQorICAgICAgICAgICAgaWYgKCFNZWRpYVBsYXllcjo6c3VwcG9ydHNU
eXBlKENvbnRlbnRUeXBlKHNvdXJjZS0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKSkpKQogICAgICAg
ICAgICAgICAgIGdvdG8gY2hlY2tfYWdhaW47CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJcyBp
dCBzYWZlIHRvIGxvYWQgdGhpcyB1cmw/Ci0gICAgICAgIG1lZGlhVVJMID0gc291cmNlLT5zcmMo
KTsKKyAgICAgICAgbWVkaWFVUkwgPSBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzb3VyY2UtPmdl
dEF0dHJpYnV0ZShzcmNBdHRyKSk7CiAgICAgICAgIGlmICghbWVkaWFVUkwuaXNWYWxpZCgpIHx8
ICFpc1NhZmVUb0xvYWRVUkwobWVkaWFVUkwsIGFjdGlvbklmSW52YWxpZCkgfHwgIWRpc3BhdGNo
QmVmb3JlTG9hZEV2ZW50KG1lZGlhVVJMLnN0cmluZygpKSkKICAgICAgICAgICAgIGdvdG8gY2hl
Y2tfYWdhaW47CiAKICAgICAgICAgLy8gTWFraW5nIGl0IHRoaXMgZmFyIG1lYW5zIHRoZSA8c291
cmNlPiBsb29rcyByZWFzb25hYmxlCiAgICAgICAgIGNhblVzZSA9IHRydWU7CiAgICAgICAgIGlm
IChjb250ZW50VHlwZSkKLSAgICAgICAgICAgICpjb250ZW50VHlwZSA9IENvbnRlbnRUeXBlKHNv
dXJjZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICpjb250ZW50VHlwZSA9IENvbnRlbnRUeXBlKHNv
dXJjZS0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKSk7CiAKIGNoZWNrX2FnYWluOgogICAgICAgICBp
ZiAoIWNhblVzZSAmJiBhY3Rpb25JZkludmFsaWQgPT0gQ29tcGxhaW4pCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDU1OTgxKQorKysgV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsNiBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxNZWRpYUVycm9yPiBlcnJvcigpIGNvbnN0OwogCiAvLyBuZXR3b3JrIHN0YXRl
Ci0gICAgS1VSTCBzcmMoKSBjb25zdDsKLSAgICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcmKTsK
ICAgICBTdHJpbmcgY3VycmVudFNyYygpIGNvbnN0OwogCiAgICAgZW51bSBOZXR3b3JrU3RhdGUg
eyBORVRXT1JLX0VNUFRZLCBORVRXT1JLX0lETEUsIE5FVFdPUktfTE9BRElORywgTkVUV09SS19M
T0FERUQsIE5FVFdPUktfTk9fU09VUkNFIH07CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aWRsCShyZXZpc2lvbiA1NTk4MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBpbnRlcmZhY2UgW0NvbmRpdGlvbmFs
PVZJREVPXSBIVE1MTWVkaWFFCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE1lZGlhRXJyb3IgZXJy
b3I7CiAKICAgICAvLyBuZXR3b3JrIHN0YXRlCi0gICAgYXR0cmlidXRlIERPTVN0cmluZyBzcmM7
CisgICAgYXR0cmlidXRlIFtSZWZsZWN0VVJMXSBET01TdHJpbmcgc3JjOyAvLyBGSVhNRTogU2hv
dWxkIHdyaXRlIGEgdGVzdCBhbmQgYWRkIENvbnZlcnROdWxsVG9OdWxsU3RyaW5nIGhlcmUuCiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBjdXJyZW50U3JjOwogICAgIAogICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IE5FVFdPUktfRU1QVFkgPSAwOwpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxTb3VyY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNv
dXJjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA1NTk4MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MU291
cmNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0Nyw2IEBAIEhUTUxTb3Vy
Y2VFbGVtZW50OjpIVE1MU291cmNlRWxlbWVudChjb24KICAgICBBU1NFUlQoaGFzVGFnTmFtZShz
b3VyY2VUYWcpKTsKIH0KIAotSFRNTFNvdXJjZUVsZW1lbnQ6On5IVE1MU291cmNlRWxlbWVudCgp
Ci17Ci19Ci0KIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkK
IHsKICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKQEAgLTYxLDM2ICs1
Nyw2IEBAIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3UKICAgICB9CiB9
CiAKLUtVUkwgSFRNTFNvdXJjZUVsZW1lbnQ6OnNyYygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7Ci19Ci0KLXZvaWQg
SFRNTFNvdXJjZUVsZW1lbnQ6OnNldFNyYyhjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBzZXRB
dHRyaWJ1dGUoc3JjQXR0ciwgdXJsKTsKLX0KLQotU3RyaW5nIEhUTUxTb3VyY2VFbGVtZW50Ojpt
ZWRpYSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShtZWRpYUF0dHIpOwotfQot
Ci12b2lkIEhUTUxTb3VyY2VFbGVtZW50OjpzZXRNZWRpYShjb25zdCBTdHJpbmcmIG1lZGlhKQot
ewotICAgIHNldEF0dHJpYnV0ZShtZWRpYUF0dHIsIG1lZGlhKTsKLX0KLQotU3RyaW5nIEhUTUxT
b3VyY2VFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5
cGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MU291cmNlRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJp
bmcmIHR5cGUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB0eXBlKTsKLX0KLQogdm9p
ZCBIVE1MU291cmNlRWxlbWVudDo6c2NoZWR1bGVFcnJvckV2ZW50KCkKIHsKICAgICBpZiAobV9l
cnJvckV2ZW50VGltZXIuaXNBY3RpdmUoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU291cmNl
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5o
CShyZXZpc2lvbiA1NTk4MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwzMyArMzAsMjIgQEAKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxsaW1pdHM+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgS1VSTDsKLQogY2xhc3MgSFRNTFNvdXJjZUVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxTb3VyY2VFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgIHZpcnR1YWwgfkhUTUxTb3VyY2VFbGVtZW50
KCk7CiAKKyAgICB2b2lkIHNjaGVkdWxlRXJyb3JFdmVudCgpOworICAgIHZvaWQgY2FuY2VsUGVu
ZGluZ0Vycm9yRXZlbnQoKTsKKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMg
ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0K
ICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAK
ICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICAKLSAgICBLVVJM
IHNyYygpIGNvbnN0OwotICAgIFN0cmluZyBtZWRpYSgpIGNvbnN0OwotICAgIFN0cmluZyB0eXBl
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTcmMoY29uc3QgU3RyaW5nJik7ICAgIAotICAgIHZvaWQg
c2V0TWVkaWEoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYp
OwotICAgIAotICAgIHZvaWQgc2NoZWR1bGVFcnJvckV2ZW50KCk7Ci0gICAgdm9pZCBjYW5jZWxQ
ZW5kaW5nRXJyb3JFdmVudCgpOwotCi1wcml2YXRlOgogICAgIHZvaWQgZXJyb3JFdmVudFRpbWVy
RmlyZWQoVGltZXI8SFRNTFNvdXJjZUVsZW1lbnQ+Kik7CiAKICAgICBUaW1lcjxIVE1MU291cmNl
RWxlbWVudD4gbV9lcnJvckV2ZW50VGltZXI7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNvdXJj
ZUVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVu
dC5pZGwJKHJldmlzaW9uIDU1OTgxKQorKysgV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogCiBtb2R1bGUgaHRtbCB7CiBp
bnRlcmZhY2UgW0NvbmRpdGlvbmFsPVZJREVPXSBIVE1MU291cmNlRWxlbWVudCA6IEhUTUxFbGVt
ZW50IHsKLSAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNyYzsKLSAgICBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHR5cGU7Ci0gICAgYXR0cmlidXRlIERPTVN0cmluZyBtZWRpYTsKKyAgICBhdHRyaWJ1dGUg
W1JlZmxlY3RVUkxdIERPTVN0cmluZyBzcmM7IC8vIEZJWE1FOiBTaG91bGQgd3JpdGUgYSB0ZXN0
IGFuZCBhZGQgQ29udmVydE51bGxUb051bGxTdHJpbmcgaGVyZS4KKyAgICBhdHRyaWJ1dGUgW1Jl
ZmxlY3RdIERPTVN0cmluZyB0eXBlOyAvLyBGSVhNRTogU2hvdWxkIHdyaXRlIGEgdGVzdCBhbmQg
YWRkIENvbnZlcnROdWxsVG9OdWxsU3RyaW5nIGhlcmUuCisgICAgYXR0cmlidXRlIFtSZWZsZWN0
XSBET01TdHJpbmcgbWVkaWE7IC8vIEZJWE1FOiBTaG91bGQgd3JpdGUgYSB0ZXN0IGFuZCBhZGQg
Q29udmVydE51bGxUb051bGxTdHJpbmcgaGVyZS4KIH07CiB9CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9JbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA1NTk4MSkKKysrIFdlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgSW1hZ2VMb2FkZXI6OnVw
ZGF0ZUZyb21FbGVtZW50KCkKICAgICBpZiAoIWRvY3VtZW50LT5yZW5kZXJlcigpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBBdG9taWNTdHJpbmcgYXR0ciA9IG1fZWxlbWVudC0+Z2V0QXR0cmli
dXRlKG1fZWxlbWVudC0+aW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkpOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0ciA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKG1fZWxlbWVudC0+aW1h
Z2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkpOwogCiAgICAgaWYgKGF0dHIgPT0gbV9mYWlsZWRMb2Fk
VVJMKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAkocmV2
aXNpb24gNTU5ODEpCisrKyBXZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIAogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgd3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCBhcHBlbmRE
YXRhKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFBhcnNpbmcoKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZmluaXNoKCk7CiAgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdDsK
ICAgICAgICAgCkBAIC05NCw5ICs5Myw5IEBAIHZvaWQgTWVkaWFUb2tlbml6ZXI6OmNyZWF0ZURv
Y3VtZW50U3RydWMKICAgICBtX21lZGlhRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwg
Im1hcmdpbjogYXV0bzsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IHJpZ2h0OiAwOyBib3R0
b206IDA7IGxlZnQ6IDA7Iik7CiAKICAgICBtX21lZGlhRWxlbWVudC0+c2V0QXR0cmlidXRlKG5h
bWVBdHRyLCAibWVkaWEiKTsKLSAgICBtX21lZGlhRWxlbWVudC0+c2V0U3JjKG1fZG9jLT51cmwo
KSk7CisgICAgbV9tZWRpYUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzcmNBdHRyLCBtX2RvYy0+dXJs
KCkuc3RyaW5nKCkpOwogICAgIAotICAgIGJvZHktPmFwcGVuZENoaWxkKG1lZGlhRWxlbWVudCwg
ZWMpOworICAgIGJvZHktPmFwcGVuZENoaWxkKG1lZGlhRWxlbWVudC5yZWxlYXNlKCksIGVjKTsK
IAogICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkBA
IC0xMTYsMTEgKzExNSw2IEBAIGJvb2wgTWVkaWFUb2tlbml6ZXI6OndyaXRlUmF3RGF0YShjb25z
dCAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAgICAgCi12b2lkIE1lZGlhVG9rZW5pemVyOjpzdG9w
UGFyc2luZygpCi17Ci0gICAgVG9rZW5pemVyOjpzdG9wUGFyc2luZygpOyAgICAgICAgCi19Ci0g
ICAgCiB2b2lkIE1lZGlhVG9rZW5pemVyOjpmaW5pc2goKQogewogICAgIGlmICghbV9wYXJzZXJT
dG9wcGVkKSAKSW5kZXg6IFdlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHJl
dmlzaW9uIDU1OTgxKQorKysgV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6dXBkYXRlRnJvbUVsZQogICAgIC8vIFdlIG1hZGUgbmVlZCB0aGUgZWxlbWVudCBsYXRl
ciBpZiB3ZSBjYW4ndCBzdHJldGNoLgogICAgIGlmIChub2RlKCktPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIGlmIChFbGVtZW50KiBtbyA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKCkpKSB7Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgc3RyZXRjaHlB
dHRyID0gbW8tPmdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6c3RyZXRjaHlBdHRyKTsKKyAgICAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RyZXRjaHlBdHRyID0gbW8tPmdldEF0dHJpYnV0
ZShNYXRoTUxOYW1lczo6c3RyZXRjaHlBdHRyKTsKICAgICAgICAgICAgIHN0cmV0Y2hEaXNhYmxl
ZCA9IGVxdWFsSWdub3JpbmdDYXNlKHN0cmV0Y2h5QXR0ciwgImZhbHNlIik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIC8vIElmIHN0cmV0Y2hpbmcgaXNuJ3QgZGlzYWJsZWQsIGdldCB0aGUg
Y2hhcmFjdGVyIGZyb20gdGhlIHRleHQgY29udGVudC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
d2luL0NsaXBib2FyZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkV2luLmNwcAkocmV2aXNpb24gNTU5ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9DbGlwYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDcsNyArNzA3LDcgQEAgdm9p
ZCBDbGlwYm9hcmRXaW46OmRlY2xhcmVBbmRXcml0ZURyYWdJbQogCiAgICAgd3JpdGVJbWFnZVRv
RGF0YU9iamVjdChtX3dyaXRhYmxlRGF0YU9iamVjdC5nZXQoKSwgZWxlbWVudCwgdXJsKTsKIAot
ICAgIEF0b21pY1N0cmluZyBpbWFnZVVSTCA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShzcmNBdHRy
KTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGltYWdlVVJMID0gZWxlbWVudC0+Z2V0QXR0cmli
dXRlKHNyY0F0dHIpOwogICAgIGlmIChpbWFnZVVSTC5pc0VtcHR5KCkpIAogICAgICAgICByZXR1
cm47CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkocmV2aXNpb24g
NTU5ODEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDksMTQgKzEwOSwxNSBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y2FsY1By
ZWZXaWR0aHMoKQogICAgIGlmIChub2RlKCkgJiYgc3R5bGUoKS0+YXV0b1dyYXAoKSkgewogICAg
ICAgICAvLyBTZWUgaWYgbm93cmFwIHdhcyBzZXQuCiAgICAgICAgIExlbmd0aCB3ID0gc3R5bGVP
ckNvbFdpZHRoKCk7Ci0gICAgICAgIFN0cmluZyBub3dyYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSgpKS0+Z2V0QXR0cmlidXRlKG5vd3JhcEF0dHIpOwotICAgICAgICBpZiAoIW5vd3Jh
cC5pc051bGwoKSAmJiB3LmlzRml4ZWQoKSkKKyAgICAgICAgYm9vbCBub3dyYXAgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+aGFzQXR0cmlidXRlKG5vd3JhcEF0dHIpOworICAgICAg
ICBpZiAobm93cmFwICYmIHcuaXNGaXhlZCgpKSB7CiAgICAgICAgICAgICAvLyBOb3dyYXAgaXMg
c2V0LCBidXQgd2UgZGlkbid0IGFjdHVhbGx5IHVzZSBpdCBiZWNhdXNlIG9mIHRoZQotICAgICAg
ICAgICAgLy8gZml4ZWQgd2lkdGggc2V0IG9uIHRoZSBjZWxsLiAgRXZlbiBzbywgaXQgaXMgYSBX
aW5JRS9Nb3ogdHJhaXQKLSAgICAgICAgICAgIC8vIHRvIG1ha2UgdGhlIG1pbndpZHRoIG9mIHRo
ZSBjZWxsIGludG8gdGhlIGZpeGVkIHdpZHRoLiAgVGhleSBkbyB0aGlzCi0gICAgICAgICAgICAv
LyBldmVuIGluIHN0cmljdCBtb2RlLCBzbyBkbyBub3QgbWFrZSB0aGlzIGEgcXVpcmsuICBBZmZl
Y3RlZCB0aGUgdG9wCisgICAgICAgICAgICAvLyBmaXhlZCB3aWR0aCBzZXQgb24gdGhlIGNlbGwu
IEV2ZW4gc28sIGl0IGlzIGEgV2luSUUvTW96IHRyYWl0CisgICAgICAgICAgICAvLyB0byBtYWtl
IHRoZSBtaW53aWR0aCBvZiB0aGUgY2VsbCBpbnRvIHRoZSBmaXhlZCB3aWR0aC4gVGhleSBkbyB0
aGlzCisgICAgICAgICAgICAvLyBldmVuIGluIHN0cmljdCBtb2RlLCBzbyBkbyBub3QgbWFrZSB0
aGlzIGEgcXVpcmsuIEFmZmVjdGVkIHRoZSB0b3AKICAgICAgICAgICAgIC8vIG9mIGhpcHRvcC5j
b20uCiAgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heCh3LnZhbHVlKCksIG1fbWluUHJl
ZldpZHRoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDU1OTgxKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxNSw3ICs2
MTUsNyBAQCB2b2lkIHdyaXRlUmVuZGVyUmVzb3VyY2VzKFRleHRTdHJlYW0mIHRzCiAgICAgICAg
IGlmICghcmVzb3VyY2UpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTdHJpbmcg
ZWxlbWVudElkID0gc3ZnRWxlbWVudC0+Z2V0QXR0cmlidXRlKHN2Z0VsZW1lbnQtPmlkQXR0cmli
dXRlTmFtZSgpKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQgPSBzdmdF
bGVtZW50LT5nZXRBdHRyaWJ1dGUoc3ZnRWxlbWVudC0+aWRBdHRyaWJ1dGVOYW1lKCkpOwogICAg
ICAgICAvLyBGSVhNRTogVGhlc2UgbmFtZXMgYXJlIGxpZXMhCiAgICAgICAgIGlmIChyZXNvdXJj
ZS0+aXNQYWludFNlcnZlcigpKSB7CiAgICAgICAgICAgICBSZWZQdHI8U1ZHUGFpbnRTZXJ2ZXI+
IHBhaW50U2VydmVyID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR1BhaW50U2VydmVyPihy
ZXNvdXJjZSk7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FsdEdseXBoRWxlbWVudC5jcHAJKHJldmlzaW9uIDU1
OTgxKQorKysgV2ViQ29yZS9zdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNiArNTIsOCBAQCB2b2lkIFNWR0FsdEdseXBoRWxlbWVudDo6c3luY2hyb25pemVQ
cm9wCiAKIHZvaWQgU1ZHQWx0R2x5cGhFbGVtZW50OjpzZXRHbHlwaFJlZihjb25zdCBBdG9taWNT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICAvLyBGSVhNRTogSXQncyBub3QgY2xl
YXIgd2h5IHRoaXMgaXMgaGVscGZ1bCBiZWhhdmlvciwgZ2l2ZW4gdGhhdCB0aGUgc2V0QXR0cmli
dXRlCisgICAgLy8gZnVuY3Rpb24gd2lsbCBhbGxvdyB0aGUgY2xpZW50IHRvIGNoYW5nZSB0aGUg
dmFsdWUgb2YgdGhlIGdseXBoUmVmIGF0dHJpYnV0ZS4KICAgICBlYyA9IE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjsKIH0KIApAQCAtNjIsNiArNjQsOCBAQCBjb25zdCBBdG9taWNTdHJpbmcm
IFNWR0FsdEdseXBoRWxlbWVudDo6CiAKIHZvaWQgU1ZHQWx0R2x5cGhFbGVtZW50OjpzZXRGb3Jt
YXQoY29uc3QgQXRvbWljU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgLy8gRklY
TUU6IEl0J3Mgbm90IGNsZWFyIHdoeSB0aGlzIGlzIGhlbHBmdWwgYmVoYXZpb3IsIGdpdmVuIHRo
YXQgdGhlIHNldEF0dHJpYnV0ZQorICAgIC8vIGZ1bmN0aW9uIHdpbGwgYWxsb3cgdGhlIGNsaWVu
dCB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBmb3JtYXQgYXR0cmlidXRlLgogICAgIGVjID0g
Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdB
bmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA1NTk4MSkKKysrIFdlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBA
QCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Um90YXRlTW9kZSBTVkdBCiB7CiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGF1dG9WYWwsICgiYXV0byIpKTsKICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgYXV0b1JldmVyc2UsICgi
YXV0by1yZXZlcnNlIikpOwotICAgIFN0cmluZyByb3RhdGUgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OnJvdGF0ZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcm90YXRlID0gZ2V0QXR0
cmlidXRlKFNWR05hbWVzOjpyb3RhdGVBdHRyKTsKICAgICBpZiAocm90YXRlID09IGF1dG9WYWwp
CiAgICAgICAgIHJldHVybiBSb3RhdGVBdXRvOwogICAgIGlmIChyb3RhdGUgPT0gYXV0b1JldmVy
c2UpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiA1NTk4MSkKKysrIFdlYkNv
cmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBA
QCB2b2lkIFNWR0ZvbnRFbGVtZW50OjplbnN1cmVHbHlwaENhY2hlKCkgCiAgICAgZm9yIChOb2Rl
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGdseXBoVGFnKSkgewogICAgICAg
ICAgICAgU1ZHR2x5cGhFbGVtZW50KiBnbHlwaCA9IHN0YXRpY19jYXN0PFNWR0dseXBoRWxlbWVu
dCo+KGNoaWxkKTsKLSAgICAgICAgICAgIFN0cmluZyB1bmljb2RlID0gZ2x5cGgtPmdldEF0dHJp
YnV0ZSh1bmljb2RlQXR0cik7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVuaWNv
ZGUgPSBnbHlwaC0+Z2V0QXR0cmlidXRlKHVuaWNvZGVBdHRyKTsKICAgICAgICAgICAgIGlmICh1
bmljb2RlLmxlbmd0aCgpKQogICAgICAgICAgICAgICAgIG1fZ2x5cGhNYXAuYWRkKHVuaWNvZGUs
IGdseXBoLT5idWlsZEdseXBoSWRlbnRpZmllcigpKTsKICAgICAgICAgfSBlbHNlIGlmIChjaGls
ZC0+aGFzVGFnTmFtZShoa2VyblRhZykpIHsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNl
VXJpRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VVcmlF
bGVtZW50LmNwcAkocmV2aXNpb24gNTU5ODEpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVy
aUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIFNWR0ZvbnRGYWNl
VXJpRWxlbWVudDo6flNWR0ZvbnRGYWNlVXJpRWwKIFBhc3NSZWZQdHI8Q1NTRm9udEZhY2VTcmNW
YWx1ZT4gU1ZHRm9udEZhY2VVcmlFbGVtZW50OjpzcmNWYWx1ZSgpIGNvbnN0CiB7CiAgICAgUmVm
UHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+IHNyYyA9IENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0
ZShnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpKTsKLSAgICBBdG9taWNTdHJpbmcg
dmFsdWUoZ2V0QXR0cmlidXRlKGZvcm1hdEF0dHIpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gZ2V0QXR0cmlidXRlKGZvcm1hdEF0dHIpOwogICAgIHNyYy0+c2V0Rm9ybWF0KHZh
bHVlLmlzRW1wdHkoKSA/ICJzdmciIDogdmFsdWUpOyAvLyBEZWZhdWx0IGZvcm1hdAogICAgIHJl
dHVybiBzcmMucmVsZWFzZSgpOwogfQpAQCAtODcsNyArODcsNyBAQCB2b2lkIFNWR0ZvbnRGYWNl
VXJpRWxlbWVudDo6bG9hZEZvbnQoKQogICAgIGlmIChtX2NhY2hlZEZvbnQpCiAgICAgICAgIG1f
Y2FjaGVkRm9udC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwogCi0gICAgU3RyaW5nIGhyZWYgPSBnZXRB
dHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
aHJlZiA9IGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CiAgICAgaWYgKCFocmVm
LmlzTnVsbCgpKSB7ICAgICAgICAKICAgICAgICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIgPSBkb2N1
bWVudCgpLT5kb2NMb2FkZXIoKTsKICAgICAgICAgbV9jYWNoZWRGb250ID0gZG9jTG9hZGVyLT5y
ZXF1ZXN0Rm9udChocmVmKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkocmV2aXNpb24g
NTU5ODEpCisrKyBXZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjQsMTAgKzEyNCw5IEBAIHZvaWQgU1ZHR2x5cGhFbGVtZW50Ojppbmhlcml0VW5zcGVj
aWZpZWQKIAogc3RhdGljIGlubGluZSBmbG9hdCBwYXJzZVNWR0dseXBoQXR0cmlidXRlKGNvbnN0
IFNWR0VsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUmIG5hbWUp
CiB7Ci0gICAgQXRvbWljU3RyaW5nIHZhbHVlKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lKSk7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShu
YW1lKTsKICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU1ZHR2x5cGhJ
ZGVudGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpOwotCiAgICAgcmV0dXJuIHZhbHVlLnRvRmxvYXQo
KTsKIH0KIApAQCAtMTY3LDcgKzE2Niw3IEBAIFNWR0dseXBoSWRlbnRpZmllciBTVkdHbHlwaEVs
ZW1lbnQ6OmJ1aWwKICAgICBpZGVudGlmaWVyLm9yaWVudGF0aW9uID0gcGFyc2VPcmllbnRhdGlv
bihnZXRBdHRyaWJ1dGUob3JpZW50YXRpb25BdHRyKSk7CiAgICAgaWRlbnRpZmllci5hcmFiaWNG
b3JtID0gcGFyc2VBcmFiaWNGb3JtKGdldEF0dHJpYnV0ZShhcmFiaWNfZm9ybUF0dHIpKTsKIAot
ICAgIFN0cmluZyBsYW5ndWFnZSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6bGFuZ0F0dHIpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbGFuZ3VhZ2UgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmxhbmdBdHRyKTsKICAgICBpZiAoIWxhbmd1YWdlLmlzRW1wdHkoKSkKICAgICAgICAgaWRlbnRp
Zmllci5sYW5ndWFnZXMgPSBwYXJzZURlbGltaXRlZFN0cmluZyhsYW5ndWFnZSwgJywnKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>