<?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>6528</bug_id>
          
          <creation_ts>2006-01-13 22:57:49 -0800</creation_ts>
          <short_desc>remove all use of QDict from WebCore</short_desc>
          <delta_ts>2006-01-15 13:33:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>28392</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-13 22:57:49 -0800</bug_when>
    <thetext>We want to get rid of QDict.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28393</commentid>
    <comment_count>1</comment_count>
      <attachid>5657</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-13 22:58:34 -0800</bug_when>
    <thetext>Created attachment 5657
remove QDict, use HashMap and HashSet instead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28396</commentid>
    <comment_count>2</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-01-14 01:28:17 -0800</bug_when>
    <thetext>There&apos;s tons of whitespace changes that are irrelevant to the patch.  Did you mean to include these (is this 
just because you de-tabified the files when you touched them)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28397</commentid>
    <comment_count>3</comment_count>
      <attachid>5657</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-01-14 01:29:25 -0800</bug_when>
    <thetext>Comment on attachment 5657
remove QDict, use HashMap and HashSet instead

r=me, may be worth running performance tests just to verify everything is ok
with all the hash tables performance-wise.

Whitespace/tab changes are fine too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28420</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-14 10:01:05 -0800</bug_when>
    <thetext>Right, Dave, the whitespace changes are because I de-tab-ified files as I touched them.

I guess I will have to run the performance tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28493</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-01-15 03:44:03 -0800</bug_when>
    <thetext>Maybe a CountedHashSet could be used for the m_idCount table instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28511</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-15 06:51:16 -0800</bug_when>
    <thetext>Good idea. I used HashCountedSet for m_idCount.

I also did performance tests, and it&apos;s working well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28523</commentid>
    <comment_count>7</comment_count>
      <attachid>5700</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-15 13:21:12 -0800</bug_when>
    <thetext>Created attachment 5700
follow-on to fix regression in layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28524</commentid>
    <comment_count>8</comment_count>
      <attachid>5700</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-01-15 13:33:20 -0800</bug_when>
    <thetext>Comment on attachment 5700
follow-on to fix regression in layout test

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5657</attachid>
            <date>2006-01-13 22:58:34 -0800</date>
            <delta_ts>2006-01-14 01:29:25 -0800</delta_ts>
            <desc>remove QDict, use HashMap and HashSet instead</desc>
            <filename>QDictPatch.txt</filename>
            <type>text/plain</type>
            <size>110519</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3htbC9Eb2N1bWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94bWwv
RG9jdW1lbnRJbXBsLmgJKHJldmlzaW9uIDEyMDcyKQorKysga2h0bWwveG1sL0RvY3VtZW50SW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8cXN0cmluZ2xp
c3QuaD4KICNpbmNsdWRlIDxxcHRybGlzdC5oPgogI2luY2x1ZGUgPHFvYmplY3QuaD4KLSNpbmNs
dWRlIDxxZGljdC5oPgogI2luY2x1ZGUgPHFwdHJkaWN0Lmg+CiAjaW5jbHVkZSA8cW1hcC5oPgog
I2luY2x1ZGUgPHFkYXRldGltZS5oPgpAQCAtNzM5LDEwICs3MzgsMTAgQEAKICAgICAKICAgICBS
ZWZQdHI8a2h0bWw6OkRlY29kZXI+IG1fZGVjb2RlcjsKIAotICAgIG11dGFibGUgUURpY3Q8RWxl
bWVudEltcGw+IG1fZWxlbWVudHNCeUlkOwotICAgIG11dGFibGUgUURpY3Q8Y2hhcj4gbV9pZENv
dW50OworICAgIG11dGFibGUgSGFzaE1hcDxET01TdHJpbmdJbXBsKiwgRWxlbWVudEltcGwqPiBt
X2VsZW1lbnRzQnlJZDsKKyAgICBtdXRhYmxlIEhhc2hNYXA8RE9NU3RyaW5nSW1wbCosIGludD4g
bV9pZENvdW50OwogICAgIAotICAgIFFEaWN0PEVsZW1lbnRJbXBsPiBtX2VsZW1lbnRzQnlBY2Nl
c3NLZXk7CisgICAgSGFzaE1hcDxET01TdHJpbmdJbXBsKiwgRWxlbWVudEltcGwqLCBDYXNlSW5z
ZW5zaXRpdmVIYXNoPiBtX2VsZW1lbnRzQnlBY2Nlc3NLZXk7CiAgICAgYm9vbCBtX2FjY2Vzc0tl
eURpY3RWYWxpZDsKICAKICAgICBib29sIG1fY3JlYXRlUmVuZGVyZXJzOwpJbmRleDoga2h0bWwv
eG1sL0RvY3VtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwveG1sL0RvY3VtZW50SW1w
bC5jcHAJKHJldmlzaW9uIDEyMDcyKQorKysga2h0bWwveG1sL0RvY3VtZW50SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogICAgICAgICBjYXNlIE5vZGU6OkVMRU1F
TlRfTk9ERTogewogICAgICAgICAgICAgRWxlbWVudEltcGwgKm9sZEVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50SW1wbCAqPihpbXBvcnRlZE5vZGUpOwogICAgICAgICAgICAgRWxlbWVudElt
cGwgKm5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50TlMob2xkRWxlbWVudC0+bmFtZXNwYWNlVVJJ
KCksIG9sZEVsZW1lbnQtPnRhZ05hbWUoKS50b1N0cmluZygpLCBleGNlcHRpb25jb2RlKTsKLQkJ
CQorICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uY29k
ZSAhPSAwKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCkBAIC02MTksMzIgKzYxOSwyNSBA
QAogCiBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpnZXRFbGVtZW50QnlJZCggY29uc3QgRE9N
U3RyaW5nICZlbGVtZW50SWQgKSBjb25zdAogewotICAgIEVsZW1lbnRJbXBsICplbGVtZW50Owot
ICAgIFFTdHJpbmcgcUlkID0gZWxlbWVudElkLnFzdHJpbmcoKTsKLQotICAgIGlmIChlbGVtZW50
SWQubGVuZ3RoKCkgPT0gMCkgeworICAgIGlmIChlbGVtZW50SWQubGVuZ3RoKCkgPT0gMCkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCi0gICAgZWxlbWVudCA9IG1fZWxlbWVudHNCeUlkLmZp
bmQocUlkKTsKLSAgICAKKyAgICBFbGVtZW50SW1wbCAqZWxlbWVudCA9IG1fZWxlbWVudHNCeUlk
LmdldChlbGVtZW50SWQuaW1wbCgpKTsKICAgICBpZiAoZWxlbWVudCkKICAgICAgICAgcmV0dXJu
IGVsZW1lbnQ7CiAgICAgICAgIAotICAgIGlmIChpbnQgaWRDb3VudCA9IChpbnQpbV9pZENvdW50
LmZpbmQocUlkKSkgeworICAgIGlmIChpbnQgaWRDb3VudCA9IG1faWRDb3VudC5nZXQoZWxlbWVu
dElkLmltcGwoKSkpIHsKICAgICAgICAgZm9yIChOb2RlSW1wbCAqbiA9IHRyYXZlcnNlTmV4dE5v
ZGUoKTsgbiAhPSAwOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBp
ZiAoIW4tPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+
KG4pOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBl
bGVtZW50LT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBlbGVtZW50SWQpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaWRDb3VudCA9PSAxKSAKLSAgICAgICAgICAgICAgICAgICAgbV9pZENvdW50LnJl
bW92ZShxSWQpOworICAgICAgICAgICAgICAgICAgICBtX2lkQ291bnQucmVtb3ZlKGVsZW1lbnRJ
ZC5pbXBsKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9p
ZENvdW50Lmluc2VydChxSWQsIChjaGFyICopaWRDb3VudCAtIDEpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1fZWxlbWVudHNCeUlkLmluc2VydChxSWQsIGVsZW1lbnQpOwor
ICAgICAgICAgICAgICAgICAgICBtX2lkQ291bnQuc2V0KGVsZW1lbnRJZC5pbXBsKCksIGlkQ291
bnQgLSAxKTsKKyAgICAgICAgICAgICAgICBtX2VsZW1lbnRzQnlJZC5zZXQoZWxlbWVudElkLmlt
cGwoKSwgZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTY2Nyw1OSArNjYwLDQ5IEBACiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEVsZW1lbnRJbXBsKj4obik7CiB9CiAKLXZvaWQgRG9jdW1lbnRJbXBsOjphZGRFbGVt
ZW50QnlJZChjb25zdCBET01TdHJpbmcgJmVsZW1lbnRJZCwgRWxlbWVudEltcGwgKmVsZW1lbnQp
Cit2b2lkIERvY3VtZW50SW1wbDo6YWRkRWxlbWVudEJ5SWQoY29uc3QgRE9NU3RyaW5nJiBlbGVt
ZW50SWQsIEVsZW1lbnRJbXBsKiBlbGVtZW50KQogewotICAgIFFTdHJpbmcgcUlkID0gZWxlbWVu
dElkLnFzdHJpbmcoKTsKLSAgICAKLSAgICBpZiAobV9lbGVtZW50c0J5SWQuZmluZChxSWQpID09
IE5VTEwpIHsKLSAgICAgICAgbV9lbGVtZW50c0J5SWQuaW5zZXJ0KHFJZCwgZWxlbWVudCk7Cisg
ICAgaWYgKCFtX2VsZW1lbnRzQnlJZC5jb250YWlucyhlbGVtZW50SWQuaW1wbCgpKSkgeworICAg
ICAgICBtX2VsZW1lbnRzQnlJZC5zZXQoZWxlbWVudElkLmltcGwoKSwgZWxlbWVudCk7CiAgICAg
ICAgIG1fYWNjZXNzS2V5RGljdFZhbGlkID0gZmFsc2U7CisgICAgICAgIG1fZWxlbWVudHNCeUFj
Y2Vzc0tleS5jbGVhcigpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBpZENvdW50ID0gKGlu
dCltX2lkQ291bnQuZmluZChxSWQpOwotICAgICAgICBtX2lkQ291bnQuaW5zZXJ0KHFJZCwgKGNo
YXIgKikoaWRDb3VudCArIDEpKTsKKyAgICAgICAgbV9pZENvdW50LnNldChlbGVtZW50SWQuaW1w
bCgpLCBtX2lkQ291bnQuZ2V0KGVsZW1lbnRJZC5pbXBsKCkpICsgMSk7CiAgICAgfQogfQogCi12
b2lkIERvY3VtZW50SW1wbDo6cmVtb3ZlRWxlbWVudEJ5SWQoY29uc3QgRE9NU3RyaW5nICZlbGVt
ZW50SWQsIEVsZW1lbnRJbXBsICplbGVtZW50KQordm9pZCBEb2N1bWVudEltcGw6OnJlbW92ZUVs
ZW1lbnRCeUlkKGNvbnN0IERPTVN0cmluZyYgZWxlbWVudElkLCBFbGVtZW50SW1wbCogZWxlbWVu
dCkKIHsKLSAgICBRU3RyaW5nIHFJZCA9IGVsZW1lbnRJZC5xc3RyaW5nKCk7Ci0KLSAgICBpZiAo
bV9lbGVtZW50c0J5SWQuZmluZChxSWQpID09IGVsZW1lbnQpIHsKLSAgICAgICAgbV9lbGVtZW50
c0J5SWQucmVtb3ZlKHFJZCk7CisgICAgaWYgKG1fZWxlbWVudHNCeUlkLmdldChlbGVtZW50SWQu
aW1wbCgpKSA9PSBlbGVtZW50KSB7CisgICAgICAgIG1fZWxlbWVudHNCeUlkLnJlbW92ZShlbGVt
ZW50SWQuaW1wbCgpKTsKICAgICAgICAgbV9hY2Nlc3NLZXlEaWN0VmFsaWQgPSBmYWxzZTsKKyAg
ICAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LmNsZWFyKCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgaW50IGlkQ291bnQgPSAoaW50KW1faWRDb3VudC5maW5kKHFJZCk7ICAgICAgICAKKyAgICAg
ICAgaW50IGlkQ291bnQgPSBtX2lkQ291bnQuZ2V0KGVsZW1lbnRJZC5pbXBsKCkpOyAgICAgICAg
CiAgICAgICAgIGFzc2VydChpZENvdW50ID4gMCk7CiAgICAgICAgIGlmIChpZENvdW50ID09IDEp
IAotICAgICAgICAgICAgbV9pZENvdW50LnJlbW92ZShxSWQpOworICAgICAgICAgICAgbV9pZENv
dW50LnJlbW92ZShlbGVtZW50SWQuaW1wbCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9pZENvdW50Lmluc2VydChxSWQsIChjaGFyICopKGlkQ291bnQgLSAxKSk7CisgICAgICAgICAg
ICBtX2lkQ291bnQuc2V0KGVsZW1lbnRJZC5pbXBsKCksIGlkQ291bnQgLSAxKTsKICAgICB9CiB9
CiAKLUVsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmdldEVsZW1lbnRCeUFjY2Vzc0tleSggY29u
c3QgRE9NU3RyaW5nICZrZXkgKQorRWxlbWVudEltcGwqIERvY3VtZW50SW1wbDo6Z2V0RWxlbWVu
dEJ5QWNjZXNzS2V5KGNvbnN0IERPTVN0cmluZyYga2V5KQogewogICAgIGlmICgha2V5Lmxlbmd0
aCgpKQotCXJldHVybiAwOwotCisgICAgICAgIHJldHVybiAwOwogICAgIGlmICghbV9hY2Nlc3NL
ZXlEaWN0VmFsaWQpIHsKLSAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LmNsZWFyKCk7Ci0g
ICAgCi0gICAgICAgIGNvbnN0IE5vZGVJbXBsICpuOwotICAgICAgICBmb3IgKG4gPSB0aGlzOyBu
ICE9IDA7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgZm9yIChOb2RlSW1w
bCogbiA9IHRoaXM7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgICAg
IGlmICghbi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgY29uc3QgRWxlbWVudEltcGwgKmVsZW1lbnRJbXBsID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBET01TdHJpbmcgYWNjZXNzS2V5KGVs
ZW1lbnRJbXBsLT5nZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0cikpOzsKLSAgICAgICAgICAgIGlm
ICghYWNjZXNzS2V5LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIFFTdHJpbmcgYWsgPSBh
Y2Nlc3NLZXkucXN0cmluZygpLmxvd2VyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZWxlbWVu
dHNCeUFjY2Vzc0tleS5maW5kKGFrKSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBtX2Vs
ZW1lbnRzQnlBY2Nlc3NLZXkuaW5zZXJ0KGFrLCBlbGVtZW50SW1wbCk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBFbGVtZW50SW1wbCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJ
bXBsICo+KG4pOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nlc3NLZXkgPSBl
bGVtZW50LT5nZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0cik7CisgICAgICAgICAgICBpZiAoIWFj
Y2Vzc0tleS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5
LnNldChhY2Nlc3NLZXkuaW1wbCgpLCBlbGVtZW50KTsKICAgICAgICAgfQogICAgICAgICBtX2Fj
Y2Vzc0tleURpY3RWYWxpZCA9IHRydWU7CiAgICAgfQotICAgIHJldHVybiBtX2VsZW1lbnRzQnlB
Y2Nlc3NLZXkuZmluZChrZXkucXN0cmluZygpKTsKKyAgICByZXR1cm4gbV9lbGVtZW50c0J5QWNj
ZXNzS2V5LmdldChrZXkuaW1wbCgpKTsKIH0KIAogdm9pZCBEb2N1bWVudEltcGw6OnVwZGF0ZVRp
dGxlKCkKQEAgLTg0Miw5ICs4MjUsNiBAQAogCiB2b2lkIERvY3VtZW50SW1wbDo6cmVjYWxjU3R5
bGUoIFN0eWxlQ2hhbmdlIGNoYW5nZSApCiB7Ci0vLyAgICAgcURlYnVnKCJyZWNhbGNTdHlsZSgl
cCkiLCB0aGlzKTsKLS8vICAgICBRVGltZSBxdDsKLS8vICAgICBxdC5zdGFydCgpOwogICAgIGlm
IChtX2luU3R5bGVSZWNhbGMpCiAgICAgICAgIHJldHVybjsgLy8gR3VhcmQgYWdhaW5zdCByZS1l
bnRyYW5jeS4gLWR3aAogICAgICAgICAKQEAgLTg2MSwxMSArODQxLDExIEBACiAgICAgICAgIF9z
dHlsZS0+c2V0VmlzdWFsbHlPcmRlcmVkKCB2aXN1YWxseU9yZGVyZWQgKTsKICAgICAgICAgLy8g
IyMjIG1ha2UgdGhlIGZvbnQgc3R1ZmYgX3JlYWxseV8gd29yayEhISEKIAotCWtodG1sOjpGb250
RGVmIGZvbnREZWY7Ci0JUUZvbnQgZiA9IEtHbG9iYWxTZXR0aW5nczo6Z2VuZXJhbEZvbnQoKTsK
LQlmb250RGVmLmZhbWlseSA9ICooZi5maXJzdEZhbWlseSgpKTsKLQlmb250RGVmLml0YWxpYyA9
IGYuaXRhbGljKCk7Ci0JZm9udERlZi53ZWlnaHQgPSBmLndlaWdodCgpOworICAgICAgICBraHRt
bDo6Rm9udERlZiBmb250RGVmOworICAgICAgICBRRm9udCBmID0gS0dsb2JhbFNldHRpbmdzOjpn
ZW5lcmFsRm9udCgpOworICAgICAgICBmb250RGVmLmZhbWlseSA9ICooZi5maXJzdEZhbWlseSgp
KTsKKyAgICAgICAgZm9udERlZi5pdGFsaWMgPSBmLml0YWxpYygpOworICAgICAgICBmb250RGVm
LndlaWdodCA9IGYud2VpZ2h0KCk7CiAgICAgICAgIGJvb2wgcHJpbnRpbmcgPSBtX3BhaW50RGV2
aWNlICYmIChtX3BhaW50RGV2aWNlLT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpQcmludGVyKTsK
ICAgICAgICAgZm9udERlZi51c2VQcmludGVyRm9udCA9IHByaW50aW5nOwogICAgICAgICBpZiAo
bV92aWV3KSB7CkBAIC04ODEsOSArODYxLDggQEAKICAgICAgICAgICAgIG1fc3R5bGVTZWxlY3Rv
ci0+c2V0Rm9udFNpemUoZm9udERlZiwgbV9zdHlsZVNlbGVjdG9yLT5mb250U2l6ZUZvcktleXdv
cmQoQ1NTX1ZBTF9NRURJVU0sIGluQ29tcGF0TW9kZSgpKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICAvL2tkRGVidWcoKSA8PCAiRG9jdW1lbnRJbXBsOjphdHRhY2g6IHNldHRpbmcgdG8gY2hhcnNl
dCAiIDw8IHNldHRpbmdzLT5jaGFyc2V0KCkgPDwgZW5kbDsKICAgICAgICAgX3N0eWxlLT5zZXRG
b250RGVmKGZvbnREZWYpOwotCV9zdHlsZS0+aHRtbEZvbnQoKS51cGRhdGUoIHBhaW50RGV2aWNl
TWV0cmljcygpICk7CisgICAgICAgIF9zdHlsZS0+aHRtbEZvbnQoKS51cGRhdGUoIHBhaW50RGV2
aWNlTWV0cmljcygpICk7CiAgICAgICAgIGlmICggaW5Db21wYXRNb2RlKCkgKQogICAgICAgICAg
ICAgX3N0eWxlLT5zZXRIdG1sSGFja3ModHJ1ZSk7IC8vIGVuYWJsZSBodG1sIHNwZWNpZmljIHJl
bmRlcmluZyB0cmlja3MKIApAQCAtOTAyLDEwICs4ODEsOSBAQAogICAgIGZvciAobiA9IF9maXJz
dDsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGlmICggY2hhbmdlPj0gSW5oZXJp
dCB8fCBuLT5oYXNDaGFuZ2VkQ2hpbGQoKSB8fCBuLT5jaGFuZ2VkKCkgKQogICAgICAgICAgICAg
bi0+cmVjYWxjU3R5bGUoIGNoYW5nZSApOwotICAgIC8va2REZWJ1ZyggNjAyMCApIDw8ICJUSU1F
OiByZWNhbGNTdHlsZSgpIGR0PSIgPDwgcXQuZWxhcHNlZCgpIDw8IGVuZGw7CiAKICAgICBpZiAo
Y2hhbmdlZCgpICYmIG1fdmlldykKLQltX3ZpZXctPmxheW91dCgpOworICAgICAgICBtX3ZpZXct
PmxheW91dCgpOwogCiBiYWlsX291dDoKICAgICBzZXRDaGFuZ2VkKCBmYWxzZSApOwpAQCAtOTU0
LDcgKzkzMiw3IEBACiAKICAgICAvLyBPbmx5IGRvIGEgbGF5b3V0IGlmIGNoYW5nZXMgaGF2ZSBv
Y2N1cnJlZCB0aGF0IG1ha2UgaXQgbmVjZXNzYXJ5LiAgICAgIAogICAgIGlmIChtX3ZpZXcgJiYg
cmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5uZWVkc0xheW91dCgpKQotCW1fdmlldy0+bGF5b3V0
KCk7CisgICAgICAgIG1fdmlldy0+bGF5b3V0KCk7CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlzIGEg
YmFkIGlkZWEgYW5kIG5lZWRzIHRvIGJlIHJlbW92ZWQgZXZlbnR1YWxseS4KQEAgLTk2OSw3ICs5
NDcsNyBAQAogICAgIAogICAgIGlmICghaGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpIHsKICAgICAg
ICAgbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSB0cnVlOwotCXVwZGF0ZVN0eWxlU2VsZWN0
b3IoKTsgICAgCisgICAgICAgIHVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsgICAgCiAgICAgfQogCiAg
ICAgdXBkYXRlTGF5b3V0KCk7CkBAIC0xNDE3LDcgKzEzOTUsNyBAQAogewogICAgIGlmICggbV91
c2Vyc2hlZXQgIT0gc2hlZXQgKSB7CiAgICAgICAgIG1fdXNlcnNoZWV0ID0gc2hlZXQ7Ci0JdXBk
YXRlU3R5bGVTZWxlY3RvcigpOworICAgICAgICB1cGRhdGVTdHlsZVNlbGVjdG9yKCk7CiAgICAg
fQogfQogCkBAIC0xNDQ0LDg2ICsxNDIyLDg2IEBACiAgICAgdW5zaWduZWQgc2hvcnQgZnJvbVRh
YkluZGV4OwogCiAgICAgaWYgKCFmcm9tTm9kZSkgewotCS8vIE5vIHN0YXJ0aW5nIG5vZGUgc3Vw
cGxpZWQ7IGJlZ2luIHdpdGggdGhlIHRvcCBvZiB0aGUgZG9jdW1lbnQKLQlOb2RlSW1wbCAqbjsK
KyAgICAgICAgLy8gTm8gc3RhcnRpbmcgbm9kZSBzdXBwbGllZDsgYmVnaW4gd2l0aCB0aGUgdG9w
IG9mIHRoZSBkb2N1bWVudAorICAgICAgICBOb2RlSW1wbCAqbjsKIAotCWludCBsb3dlc3RUYWJJ
bmRleCA9IDY1NTM1OwotCWZvciAobiA9IHRoaXM7IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNlTmV4
dE5vZGUoKSkgewotCSAgICBpZiAobi0+aXNLZXlib2FyZEZvY3VzYWJsZSgpKSB7Ci0JCWlmICgo
bi0+dGFiSW5kZXgoKSA+IDApICYmIChuLT50YWJJbmRleCgpIDwgbG93ZXN0VGFiSW5kZXgpKQot
CQkgICAgbG93ZXN0VGFiSW5kZXggPSBuLT50YWJJbmRleCgpOwotCSAgICB9Ci0JfQorICAgICAg
ICBpbnQgbG93ZXN0VGFiSW5kZXggPSA2NTUzNTsKKyAgICAgICAgZm9yIChuID0gdGhpczsgbiAh
PSAwOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAobi0+aXNL
ZXlib2FyZEZvY3VzYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKChuLT50YWJJbmRleCgp
ID4gMCkgJiYgKG4tPnRhYkluZGV4KCkgPCBsb3dlc3RUYWJJbmRleCkpCisgICAgICAgICAgICAg
ICAgICAgIGxvd2VzdFRhYkluZGV4ID0gbi0+dGFiSW5kZXgoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogCi0JaWYgKGxvd2VzdFRhYkluZGV4ID09IDY1NTM1KQotCSAgICBsb3dlc3RUYWJJ
bmRleCA9IDA7CisgICAgICAgIGlmIChsb3dlc3RUYWJJbmRleCA9PSA2NTUzNSkKKyAgICAgICAg
ICAgIGxvd2VzdFRhYkluZGV4ID0gMDsKIAotCS8vIEdvIHRvIHRoZSBmaXJzdCBub2RlIGluIHRo
ZSBkb2N1bWVudCB0aGF0IGhhcyB0aGUgZGVzaXJlZCB0YWIgaW5kZXgKLQlmb3IgKG4gPSB0aGlz
OyBuICE9IDA7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKLQkgICAgaWYgKG4tPmlzS2V5
Ym9hcmRGb2N1c2FibGUoKSAmJiAobi0+dGFiSW5kZXgoKSA9PSBsb3dlc3RUYWJJbmRleCkpCi0J
CXJldHVybiBuOwotCX0KKyAgICAgICAgLy8gR28gdG8gdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGRv
Y3VtZW50IHRoYXQgaGFzIHRoZSBkZXNpcmVkIHRhYiBpbmRleAorICAgICAgICBmb3IgKG4gPSB0
aGlzOyBuICE9IDA7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgICAgIGlm
IChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKCkgJiYgKG4tPnRhYkluZGV4KCkgPT0gbG93ZXN0VGFi
SW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICB9CiAKLQlyZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGVsc2UgewotCWZyb21UYWJJbmRleCA9
IGZyb21Ob2RlLT50YWJJbmRleCgpOworICAgICAgICBmcm9tVGFiSW5kZXggPSBmcm9tTm9kZS0+
dGFiSW5kZXgoKTsKICAgICB9CiAKICAgICBpZiAoZnJvbVRhYkluZGV4ID09IDApIHsKLQkvLyBK
dXN0IG5lZWQgdG8gZmluZCB0aGUgbmV4dCBzZWxlY3RhYmxlIG5vZGUgYWZ0ZXIgZnJvbU5vZGUg
KGluIGRvY3VtZW50IG9yZGVyKSB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHRhYiBpbmRleAotCU5vZGVJ
bXBsICpuID0gZnJvbU5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKLQl3aGlsZSAobiAmJiAhKG4t
PmlzS2V5Ym9hcmRGb2N1c2FibGUoKSAmJiBuLT50YWJJbmRleCgpID09IDApKQotCSAgICBuID0g
bi0+dHJhdmVyc2VOZXh0Tm9kZSgpOwotCXJldHVybiBuOworICAgICAgICAvLyBKdXN0IG5lZWQg
dG8gZmluZCB0aGUgbmV4dCBzZWxlY3RhYmxlIG5vZGUgYWZ0ZXIgZnJvbU5vZGUgKGluIGRvY3Vt
ZW50IG9yZGVyKSB0aGF0IGRvZXNuJ3QgaGF2ZSBhIHRhYiBpbmRleAorICAgICAgICBOb2RlSW1w
bCAqbiA9IGZyb21Ob2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIHdoaWxlIChuICYm
ICEobi0+aXNLZXlib2FyZEZvY3VzYWJsZSgpICYmIG4tPnRhYkluZGV4KCkgPT0gMCkpCisgICAg
ICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICByZXR1cm4gbjsKICAg
ICB9CiAgICAgZWxzZSB7Ci0JLy8gRmluZCB0aGUgbG93ZXN0IHRhYiBpbmRleCBvdXQgb2YgYWxs
IHRoZSBub2RlcyBleGNlcHQgZnJvbU5vZGUsIHRoYXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFs
IHRvIGZyb21Ob2RlJ3MKLQkvLyB0YWIgaW5kZXguIEZvciBub2RlcyB3aXRoIHRoZSBzYW1lIHRh
YiBpbmRleCBhcyBmcm9tTm9kZSwgd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aG9zZSB0aGF0
IGNvbWUgYWZ0ZXIKLQkvLyBmcm9tTm9kZSBpbiBkb2N1bWVudCBvcmRlci4KLQkvLyBJZiB3ZSBk
b24ndCBmaW5kIGEgc3VpdGFibGUgdGFiIGluZGV4LCB0aGUgbmV4dCBmb2N1cyBub2RlIHdpbGwg
YmUgb25lIHdpdGggYSB0YWIgaW5kZXggb2YgMC4KLQl1bnNpZ25lZCBzaG9ydCBsb3dlc3RTdWl0
YWJsZVRhYkluZGV4ID0gNjU1MzU7Ci0JTm9kZUltcGwgKm47CisgICAgICAgIC8vIEZpbmQgdGhl
IGxvd2VzdCB0YWIgaW5kZXggb3V0IG9mIGFsbCB0aGUgbm9kZXMgZXhjZXB0IGZyb21Ob2RlLCB0
aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBmcm9tTm9kZSdzCisgICAgICAgIC8vIHRh
YiBpbmRleC4gRm9yIG5vZGVzIHdpdGggdGhlIHNhbWUgdGFiIGluZGV4IGFzIGZyb21Ob2RlLCB3
ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRob3NlIHRoYXQgY29tZSBhZnRlcgorICAgICAgICAv
LyBmcm9tTm9kZSBpbiBkb2N1bWVudCBvcmRlci4KKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZmlu
ZCBhIHN1aXRhYmxlIHRhYiBpbmRleCwgdGhlIG5leHQgZm9jdXMgbm9kZSB3aWxsIGJlIG9uZSB3
aXRoIGEgdGFiIGluZGV4IG9mIDAuCisgICAgICAgIHVuc2lnbmVkIHNob3J0IGxvd2VzdFN1aXRh
YmxlVGFiSW5kZXggPSA2NTUzNTsKKyAgICAgICAgTm9kZUltcGwgKm47CiAKLQlib29sIHJlYWNo
ZWRGcm9tTm9kZSA9IGZhbHNlOwotCWZvciAobiA9IHRoaXM7IG4gIT0gMDsgbiA9IG4tPnRyYXZl
cnNlTmV4dE5vZGUoKSkgewotCSAgICBpZiAobi0+aXNLZXlib2FyZEZvY3VzYWJsZSgpICYmCi0J
CSgocmVhY2hlZEZyb21Ob2RlICYmIChuLT50YWJJbmRleCgpID49IGZyb21UYWJJbmRleCkpIHx8
Ci0JCSAoIXJlYWNoZWRGcm9tTm9kZSAmJiAobi0+dGFiSW5kZXgoKSA+IGZyb21UYWJJbmRleCkp
KSAmJgotCQkobi0+dGFiSW5kZXgoKSA8IGxvd2VzdFN1aXRhYmxlVGFiSW5kZXgpICYmCi0JCShu
ICE9IGZyb21Ob2RlKSkgeworICAgICAgICBib29sIHJlYWNoZWRGcm9tTm9kZSA9IGZhbHNlOwor
ICAgICAgICBmb3IgKG4gPSB0aGlzOyBuICE9IDA7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkp
IHsKKyAgICAgICAgICAgIGlmIChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKCkgJiYKKyAgICAgICAg
ICAgICAgICAoKHJlYWNoZWRGcm9tTm9kZSAmJiAobi0+dGFiSW5kZXgoKSA+PSBmcm9tVGFiSW5k
ZXgpKSB8fAorICAgICAgICAgICAgICAgICAoIXJlYWNoZWRGcm9tTm9kZSAmJiAobi0+dGFiSW5k
ZXgoKSA+IGZyb21UYWJJbmRleCkpKSAmJgorICAgICAgICAgICAgICAgIChuLT50YWJJbmRleCgp
IDwgbG93ZXN0U3VpdGFibGVUYWJJbmRleCkgJiYKKyAgICAgICAgICAgICAgICAobiAhPSBmcm9t
Tm9kZSkpIHsKIAotCQkvLyBXZSBmb3VuZCBhIHNlbGVjdGFibGUgbm9kZSB3aXRoIGEgdGFiIGlu
ZGV4IGF0IGxlYXN0IGFzIGhpZ2ggYXMgZnJvbU5vZGUncy4gS2VlcCBzZWFyY2hpbmcgdGhvdWdo
LAotCQkvLyBhcyB0aGVyZSBtYXkgYmUgYW5vdGhlciBub2RlIHdoaWNoIGhhcyBhIGxvd2VyIHRh
YiBpbmRleCBidXQgaXMgc3RpbGwgc3VpdGFibGUgZm9yIHVzZS4KLQkJbG93ZXN0U3VpdGFibGVU
YWJJbmRleCA9IG4tPnRhYkluZGV4KCk7Ci0JICAgIH0KKyAgICAgICAgICAgICAgICAvLyBXZSBm
b3VuZCBhIHNlbGVjdGFibGUgbm9kZSB3aXRoIGEgdGFiIGluZGV4IGF0IGxlYXN0IGFzIGhpZ2gg
YXMgZnJvbU5vZGUncy4gS2VlcCBzZWFyY2hpbmcgdGhvdWdoLAorICAgICAgICAgICAgICAgIC8v
IGFzIHRoZXJlIG1heSBiZSBhbm90aGVyIG5vZGUgd2hpY2ggaGFzIGEgbG93ZXIgdGFiIGluZGV4
IGJ1dCBpcyBzdGlsbCBzdWl0YWJsZSBmb3IgdXNlLgorICAgICAgICAgICAgICAgIGxvd2VzdFN1
aXRhYmxlVGFiSW5kZXggPSBuLT50YWJJbmRleCgpOworICAgICAgICAgICAgfQogCi0JICAgIGlm
IChuID09IGZyb21Ob2RlKQotCQlyZWFjaGVkRnJvbU5vZGUgPSB0cnVlOwotCX0KKyAgICAgICAg
ICAgIGlmIChuID09IGZyb21Ob2RlKQorICAgICAgICAgICAgICAgIHJlYWNoZWRGcm9tTm9kZSA9
IHRydWU7CisgICAgICAgIH0KIAotCWlmIChsb3dlc3RTdWl0YWJsZVRhYkluZGV4ID09IDY1NTM1
KSB7Ci0JICAgIC8vIE5vIG5leHQgbm9kZSB3aXRoIGEgdGFiIGluZGV4IC0+IGp1c3QgdGFrZSBm
aXJzdCBub2RlIHdpdGggdGFiIGluZGV4IG9mIDAKLQkgICAgTm9kZUltcGwgKm4gPSB0aGlzOwot
CSAgICB3aGlsZSAobiAmJiAhKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoKSAmJiBuLT50YWJJbmRl
eCgpID09IDApKQotCQluID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpOwotCSAgICByZXR1cm4gbjsK
LQl9CisgICAgICAgIGlmIChsb3dlc3RTdWl0YWJsZVRhYkluZGV4ID09IDY1NTM1KSB7CisgICAg
ICAgICAgICAvLyBObyBuZXh0IG5vZGUgd2l0aCBhIHRhYiBpbmRleCAtPiBqdXN0IHRha2UgZmly
c3Qgbm9kZSB3aXRoIHRhYiBpbmRleCBvZiAwCisgICAgICAgICAgICBOb2RlSW1wbCAqbiA9IHRo
aXM7CisgICAgICAgICAgICB3aGlsZSAobiAmJiAhKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoKSAm
JiBuLT50YWJJbmRleCgpID09IDApKQorICAgICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5l
eHROb2RlKCk7CisgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgfQogCi0JLy8gU2VhcmNo
IGZvcndhcmRzIGZyb20gZnJvbU5vZGUKLQlmb3IgKG4gPSBmcm9tTm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpOyBuICE9IDA7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKLQkgICAgaWYgKG4t
PmlzS2V5Ym9hcmRGb2N1c2FibGUoKSAmJiAobi0+dGFiSW5kZXgoKSA9PSBsb3dlc3RTdWl0YWJs
ZVRhYkluZGV4KSkKLQkJcmV0dXJuIG47Ci0JfQorICAgICAgICAvLyBTZWFyY2ggZm9yd2FyZHMg
ZnJvbSBmcm9tTm9kZQorICAgICAgICBmb3IgKG4gPSBmcm9tTm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpOyBuICE9IDA7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgICAgIGlm
IChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKCkgJiYgKG4tPnRhYkluZGV4KCkgPT0gbG93ZXN0U3Vp
dGFibGVUYWJJbmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgIH0KIAot
CS8vIFRoZSBuZXh0IG5vZGUgaXNuJ3QgYWZ0ZXIgZnJvbU5vZGUsIHN0YXJ0IGZyb20gdGhlIGJl
Z2lubmluZyBvZiB0aGUgZG9jdW1lbnQKLQlmb3IgKG4gPSB0aGlzOyBuICE9IGZyb21Ob2RlOyBu
ID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0JICAgIGlmIChuLT5pc0tleWJvYXJkRm9jdXNh
YmxlKCkgJiYgKG4tPnRhYkluZGV4KCkgPT0gbG93ZXN0U3VpdGFibGVUYWJJbmRleCkpCi0JCXJl
dHVybiBuOwotCX0KKyAgICAgICAgLy8gVGhlIG5leHQgbm9kZSBpc24ndCBhZnRlciBmcm9tTm9k
ZSwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudAorICAgICAgICBmb3Ig
KG4gPSB0aGlzOyBuICE9IGZyb21Ob2RlOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Cisg
ICAgICAgICAgICBpZiAobi0+aXNLZXlib2FyZEZvY3VzYWJsZSgpICYmIChuLT50YWJJbmRleCgp
ID09IGxvd2VzdFN1aXRhYmxlVGFiSW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBuOwor
ICAgICAgICB9CiAKLQlhc3NlcnQoZmFsc2UpOyAvLyBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUKLQly
ZXR1cm4gMDsKKyAgICAgICAgYXNzZXJ0KGZhbHNlKTsgLy8gc2hvdWxkIG5ldmVyIGdldCBoZXJl
CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0KIApAQCAtMTUzMSwxMDQgKzE1MDksMTA0IEBA
CiB7CiAgICAgTm9kZUltcGwgKmxhc3ROb2RlID0gdGhpczsKICAgICB3aGlsZSAobGFzdE5vZGUt
Pmxhc3RDaGlsZCgpKQotCWxhc3ROb2RlID0gbGFzdE5vZGUtPmxhc3RDaGlsZCgpOworICAgICAg
ICBsYXN0Tm9kZSA9IGxhc3ROb2RlLT5sYXN0Q2hpbGQoKTsKIAogICAgIGlmICghZnJvbU5vZGUp
IHsKLQkvLyBObyBzdGFydGluZyBub2RlIHN1cHBsaWVkOyBiZWdpbiB3aXRoIHRoZSB2ZXJ5IGxh
c3Qgbm9kZSBpbiB0aGUgZG9jdW1lbnQKLQlOb2RlSW1wbCAqbjsKKyAgICAgICAgLy8gTm8gc3Rh
cnRpbmcgbm9kZSBzdXBwbGllZDsgYmVnaW4gd2l0aCB0aGUgdmVyeSBsYXN0IG5vZGUgaW4gdGhl
IGRvY3VtZW50CisgICAgICAgIE5vZGVJbXBsICpuOwogCi0JaW50IGhpZ2hlc3RUYWJJbmRleCA9
IDA7Ci0JZm9yIChuID0gbGFzdE5vZGU7IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNO
b2RlKCkpIHsKLQkgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoKSkgewotCQlpZiAobi0+
dGFiSW5kZXgoKSA9PSAwKQotCQkgICAgcmV0dXJuIG47Ci0JCWVsc2UgaWYgKG4tPnRhYkluZGV4
KCkgPiBoaWdoZXN0VGFiSW5kZXgpCi0JCSAgICBoaWdoZXN0VGFiSW5kZXggPSBuLT50YWJJbmRl
eCgpOwotCSAgICB9Ci0JfQorICAgICAgICBpbnQgaGlnaGVzdFRhYkluZGV4ID0gMDsKKyAgICAg
ICAgZm9yIChuID0gbGFzdE5vZGU7IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2Rl
KCkpIHsKKyAgICAgICAgICAgIGlmIChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobi0+dGFiSW5kZXgoKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuLT50YWJJbmRleCgpID4gaGlnaGVz
dFRhYkluZGV4KQorICAgICAgICAgICAgICAgICAgICBoaWdoZXN0VGFiSW5kZXggPSBuLT50YWJJ
bmRleCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLQkvLyBObyBub2RlIHdpdGggYSB0
YWIgaW5kZXggb2YgMDsganVzdCBnbyB0byB0aGUgbGFzdCBub2RlIHdpdGggdGhlIGhpZ2hlc3Qg
dGFiIGluZGV4Ci0JZm9yIChuID0gbGFzdE5vZGU7IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNlUHJl
dmlvdXNOb2RlKCkpIHsKLQkgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoKSAmJiAobi0+
dGFiSW5kZXgoKSA9PSBoaWdoZXN0VGFiSW5kZXgpKQotCQlyZXR1cm4gbjsKLQl9CisgICAgICAg
IC8vIE5vIG5vZGUgd2l0aCBhIHRhYiBpbmRleCBvZiAwOyBqdXN0IGdvIHRvIHRoZSBsYXN0IG5v
ZGUgd2l0aCB0aGUgaGlnaGVzdCB0YWIgaW5kZXgKKyAgICAgICAgZm9yIChuID0gbGFzdE5vZGU7
IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpIHsKKyAgICAgICAgICAgIGlm
IChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKCkgJiYgKG4tPnRhYkluZGV4KCkgPT0gaGlnaGVzdFRh
YkluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgfQogCi0JcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBlbHNlIHsKLQl1bnNpZ25lZCBzaG9y
dCBmcm9tVGFiSW5kZXggPSBmcm9tTm9kZS0+dGFiSW5kZXgoKTsKKyAgICAgICAgdW5zaWduZWQg
c2hvcnQgZnJvbVRhYkluZGV4ID0gZnJvbU5vZGUtPnRhYkluZGV4KCk7CiAKLQlpZiAoZnJvbVRh
YkluZGV4ID09IDApIHsKLQkgICAgLy8gRmluZCB0aGUgcHJldmlvdXMgc2VsZWN0YWJsZSBub2Rl
IGJlZm9yZSBmcm9tTm9kZSAoaW4gZG9jdW1lbnQgb3JkZXIpIHRoYXQgZG9lc24ndCBoYXZlIGEg
dGFiIGluZGV4Ci0JICAgIE5vZGVJbXBsICpuID0gZnJvbU5vZGUtPnRyYXZlcnNlUHJldmlvdXNO
b2RlKCk7Ci0JICAgIHdoaWxlIChuICYmICEobi0+aXNLZXlib2FyZEZvY3VzYWJsZSgpICYmIG4t
PnRhYkluZGV4KCkgPT0gMCkpCi0JCW4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpOwotCSAg
ICBpZiAobikKLQkJcmV0dXJuIG47CisgICAgICAgIGlmIChmcm9tVGFiSW5kZXggPT0gMCkgewor
ICAgICAgICAgICAgLy8gRmluZCB0aGUgcHJldmlvdXMgc2VsZWN0YWJsZSBub2RlIGJlZm9yZSBm
cm9tTm9kZSAoaW4gZG9jdW1lbnQgb3JkZXIpIHRoYXQgZG9lc24ndCBoYXZlIGEgdGFiIGluZGV4
CisgICAgICAgICAgICBOb2RlSW1wbCAqbiA9IGZyb21Ob2RlLT50cmF2ZXJzZVByZXZpb3VzTm9k
ZSgpOworICAgICAgICAgICAgd2hpbGUgKG4gJiYgIShuLT5pc0tleWJvYXJkRm9jdXNhYmxlKCkg
JiYgbi0+dGFiSW5kZXgoKSA9PSAwKSkKKyAgICAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VQ
cmV2aW91c05vZGUoKTsKKyAgICAgICAgICAgIGlmIChuKQorICAgICAgICAgICAgICAgIHJldHVy
biBuOwogCi0JICAgIC8vIE5vIHByZXZpb3VzIG5vZGVzIHdpdGggYSAwIHRhYiBpbmRleCwgZ28g
dG8gdGhlIGxhc3Qgbm9kZSBpbiB0aGUgZG9jdW1lbnQgdGhhdCBoYXMgdGhlIGhpZ2hlc3QgdGFi
IGluZGV4Ci0JICAgIGludCBoaWdoZXN0VGFiSW5kZXggPSAwOwotCSAgICBmb3IgKG4gPSB0aGlz
OyBuICE9IDA7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKLQkJaWYgKG4tPmlzS2V5Ym9h
cmRGb2N1c2FibGUoKSAmJiAobi0+dGFiSW5kZXgoKSA+IGhpZ2hlc3RUYWJJbmRleCkpCi0JCSAg
ICBoaWdoZXN0VGFiSW5kZXggPSBuLT50YWJJbmRleCgpOwotCSAgICB9CisgICAgICAgICAgICAv
LyBObyBwcmV2aW91cyBub2RlcyB3aXRoIGEgMCB0YWIgaW5kZXgsIGdvIHRvIHRoZSBsYXN0IG5v
ZGUgaW4gdGhlIGRvY3VtZW50IHRoYXQgaGFzIHRoZSBoaWdoZXN0IHRhYiBpbmRleAorICAgICAg
ICAgICAgaW50IGhpZ2hlc3RUYWJJbmRleCA9IDA7CisgICAgICAgICAgICBmb3IgKG4gPSB0aGlz
OyBuICE9IDA7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobi0+aXNLZXlib2FyZEZvY3VzYWJsZSgpICYmIChuLT50YWJJbmRleCgpID4gaGlnaGVzdFRh
YkluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgaGlnaGVzdFRhYkluZGV4ID0gbi0+dGFiSW5k
ZXgoKTsKKyAgICAgICAgICAgIH0KIAotCSAgICBpZiAoaGlnaGVzdFRhYkluZGV4ID09IDApCi0J
CXJldHVybiAwOworICAgICAgICAgICAgaWYgKGhpZ2hlc3RUYWJJbmRleCA9PSAwKQorICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogCi0JICAgIGZvciAobiA9IGxhc3ROb2RlOyBuICE9IDA7IG4g
PSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKSB7Ci0JCWlmIChuLT5pc0tleWJvYXJkRm9jdXNh
YmxlKCkgJiYgKG4tPnRhYkluZGV4KCkgPT0gaGlnaGVzdFRhYkluZGV4KSkKLQkJICAgIHJldHVy
biBuOwotCSAgICB9CisgICAgICAgICAgICBmb3IgKG4gPSBsYXN0Tm9kZTsgbiAhPSAwOyBuID0g
bi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChuLT5pc0tl
eWJvYXJkRm9jdXNhYmxlKCkgJiYgKG4tPnRhYkluZGV4KCkgPT0gaGlnaGVzdFRhYkluZGV4KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAgICB9CiAKLQkgICAgYXNz
ZXJ0KGZhbHNlKTsgLy8gc2hvdWxkIG5ldmVyIGdldCBoZXJlCi0JICAgIHJldHVybiAwOwotCX0K
LQllbHNlIHsKLQkgICAgLy8gRmluZCB0aGUgbG93ZXN0IHRhYiBpbmRleCBvdXQgb2YgYWxsIHRo
ZSBub2RlcyBleGNlcHQgZnJvbU5vZGUsIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGZy
b21Ob2RlJ3MKLQkgICAgLy8gdGFiIGluZGV4LiBGb3Igbm9kZXMgd2l0aCB0aGUgc2FtZSB0YWIg
aW5kZXggYXMgZnJvbU5vZGUsIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhvc2UgYmVmb3Jl
Ci0JICAgIC8vIGZyb21Ob2RlLgotCSAgICAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgc3VpdGFibGUg
dGFiIGluZGV4LCB0aGVuIHRoZXJlIHdpbGwgYmUgbm8gcHJldmlvdXMgZm9jdXMgbm9kZS4KLQkg
ICAgdW5zaWduZWQgc2hvcnQgaGlnaGVzdFN1aXRhYmxlVGFiSW5kZXggPSAwOwotCSAgICBOb2Rl
SW1wbCAqbjsKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSk7IC8vIHNob3VsZCBuZXZlciBnZXQg
aGVyZQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAvLyBGaW5kIHRoZSBsb3dlc3QgdGFiIGluZGV4IG91dCBvZiBhbGwgdGhlIG5v
ZGVzIGV4Y2VwdCBmcm9tTm9kZSwgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZnJvbU5v
ZGUncworICAgICAgICAgICAgLy8gdGFiIGluZGV4LiBGb3Igbm9kZXMgd2l0aCB0aGUgc2FtZSB0
YWIgaW5kZXggYXMgZnJvbU5vZGUsIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhvc2UgYmVm
b3JlCisgICAgICAgICAgICAvLyBmcm9tTm9kZS4KKyAgICAgICAgICAgIC8vIElmIHdlIGRvbid0
IGZpbmQgYSBzdWl0YWJsZSB0YWIgaW5kZXgsIHRoZW4gdGhlcmUgd2lsbCBiZSBubyBwcmV2aW91
cyBmb2N1cyBub2RlLgorICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgaGlnaGVzdFN1aXRhYmxl
VGFiSW5kZXggPSAwOworICAgICAgICAgICAgTm9kZUltcGwgKm47CiAKLQkgICAgYm9vbCByZWFj
aGVkRnJvbU5vZGUgPSBmYWxzZTsKLQkgICAgZm9yIChuID0gdGhpczsgbiAhPSAwOyBuID0gbi0+
dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0JCWlmIChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKCkgJiYK
LQkJICAgICgoIXJlYWNoZWRGcm9tTm9kZSAmJiAobi0+dGFiSW5kZXgoKSA8PSBmcm9tVGFiSW5k
ZXgpKSB8fAotCQkgICAgIChyZWFjaGVkRnJvbU5vZGUgJiYgKG4tPnRhYkluZGV4KCkgPCBmcm9t
VGFiSW5kZXgpKSkgICYmCi0JCSAgICAobi0+dGFiSW5kZXgoKSA+IGhpZ2hlc3RTdWl0YWJsZVRh
YkluZGV4KSAmJgotCQkgICAgKG4gIT0gZnJvbU5vZGUpKSB7CisgICAgICAgICAgICBib29sIHJl
YWNoZWRGcm9tTm9kZSA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChuID0gdGhpczsgbiAhPSAw
OyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG4tPmlz
S2V5Ym9hcmRGb2N1c2FibGUoKSAmJgorICAgICAgICAgICAgICAgICAgICAoKCFyZWFjaGVkRnJv
bU5vZGUgJiYgKG4tPnRhYkluZGV4KCkgPD0gZnJvbVRhYkluZGV4KSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgIChyZWFjaGVkRnJvbU5vZGUgJiYgKG4tPnRhYkluZGV4KCkgPCBmcm9tVGFiSW5k
ZXgpKSkgICYmCisgICAgICAgICAgICAgICAgICAgIChuLT50YWJJbmRleCgpID4gaGlnaGVzdFN1
aXRhYmxlVGFiSW5kZXgpICYmCisgICAgICAgICAgICAgICAgICAgIChuICE9IGZyb21Ob2RlKSkg
ewogCi0JCSAgICAvLyBXZSBmb3VuZCBhIHNlbGVjdGFibGUgbm9kZSB3aXRoIGEgdGFiIGluZGV4
IG5vIGhpZ2hlciB0aGFuIGZyb21Ob2RlJ3MuIEtlZXAgc2VhcmNoaW5nIHRob3VnaCwgYXMKLQkJ
ICAgIC8vIHRoZXJlIG1heSBiZSBhbm90aGVyIG5vZGUgd2hpY2ggaGFzIGEgaGlnaGVyIHRhYiBp
bmRleCBidXQgaXMgc3RpbGwgc3VpdGFibGUgZm9yIHVzZS4KLQkJICAgIGhpZ2hlc3RTdWl0YWJs
ZVRhYkluZGV4ID0gbi0+dGFiSW5kZXgoKTsKLQkJfQorICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBmb3VuZCBhIHNlbGVjdGFibGUgbm9kZSB3aXRoIGEgdGFiIGluZGV4IG5vIGhpZ2hlciB0aGFu
IGZyb21Ob2RlJ3MuIEtlZXAgc2VhcmNoaW5nIHRob3VnaCwgYXMKKyAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlcmUgbWF5IGJlIGFub3RoZXIgbm9kZSB3aGljaCBoYXMgYSBoaWdoZXIgdGFiIGlu
ZGV4IGJ1dCBpcyBzdGlsbCBzdWl0YWJsZSBmb3IgdXNlLgorICAgICAgICAgICAgICAgICAgICBo
aWdoZXN0U3VpdGFibGVUYWJJbmRleCA9IG4tPnRhYkluZGV4KCk7CisgICAgICAgICAgICAgICAg
fQogCi0JCWlmIChuID09IGZyb21Ob2RlKQotCQkgICAgcmVhY2hlZEZyb21Ob2RlID0gdHJ1ZTsK
LQkgICAgfQorICAgICAgICAgICAgICAgIGlmIChuID09IGZyb21Ob2RlKQorICAgICAgICAgICAg
ICAgICAgICByZWFjaGVkRnJvbU5vZGUgPSB0cnVlOworICAgICAgICAgICAgfQogCi0JICAgIGlm
IChoaWdoZXN0U3VpdGFibGVUYWJJbmRleCA9PSAwKSB7Ci0JCS8vIE5vIHByZXZpb3VzIG5vZGUg
d2l0aCBhIHRhYiBpbmRleC4gU2luY2UgdGhlIG9yZGVyIHNwZWNpZmllZCBieSBIVE1MIGlzIG5v
ZGVzIHdpdGggdGFiIGluZGV4ID4gMAotCQkvLyBmaXJzdCwgdGhpcyBtZWFucyB0aGF0IHRoZXJl
IGlzIG5vIHByZXZpb3VzIG5vZGUuCi0JCXJldHVybiAwOwotCSAgICB9CisgICAgICAgICAgICBp
ZiAoaGlnaGVzdFN1aXRhYmxlVGFiSW5kZXggPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIE5v
IHByZXZpb3VzIG5vZGUgd2l0aCBhIHRhYiBpbmRleC4gU2luY2UgdGhlIG9yZGVyIHNwZWNpZmll
ZCBieSBIVE1MIGlzIG5vZGVzIHdpdGggdGFiIGluZGV4ID4gMAorICAgICAgICAgICAgICAgIC8v
IGZpcnN0LCB0aGlzIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gcHJldmlvdXMgbm9kZS4KKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KIAotCSAgICAvLyBTZWFyY2ggYmFj
a3dhcmRzIGZyb20gZnJvbU5vZGUKLQkgICAgZm9yIChuID0gZnJvbU5vZGUtPnRyYXZlcnNlUHJl
dmlvdXNOb2RlKCk7IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpIHsKLQkJ
aWYgKG4tPmlzS2V5Ym9hcmRGb2N1c2FibGUoKSAmJiAobi0+dGFiSW5kZXgoKSA9PSBoaWdoZXN0
U3VpdGFibGVUYWJJbmRleCkpCi0JCSAgICByZXR1cm4gbjsKLQkgICAgfQotCSAgICAvLyBUaGUg
cHJldmlvdXMgbm9kZSBpc24ndCBiZWZvcmUgZnJvbU5vZGUsIHN0YXJ0IGZyb20gdGhlIGVuZCBv
ZiB0aGUgZG9jdW1lbnQKLQkgICAgZm9yIChuID0gbGFzdE5vZGU7IG4gIT0gZnJvbU5vZGU7IG4g
PSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKSB7Ci0JCWlmIChuLT5pc0tleWJvYXJkRm9jdXNh
YmxlKCkgJiYgKG4tPnRhYkluZGV4KCkgPT0gaGlnaGVzdFN1aXRhYmxlVGFiSW5kZXgpKQotCQkg
ICAgcmV0dXJuIG47Ci0JICAgIH0KKyAgICAgICAgICAgIC8vIFNlYXJjaCBiYWNrd2FyZHMgZnJv
bSBmcm9tTm9kZQorICAgICAgICAgICAgZm9yIChuID0gZnJvbU5vZGUtPnRyYXZlcnNlUHJldmlv
dXNOb2RlKCk7IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobi0+aXNLZXlib2FyZEZvY3VzYWJsZSgpICYmIChuLT50YWJJbmRleCgp
ID09IGhpZ2hlc3RTdWl0YWJsZVRhYkluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgbm9kZSBpc24n
dCBiZWZvcmUgZnJvbU5vZGUsIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQKKyAg
ICAgICAgICAgIGZvciAobiA9IGxhc3ROb2RlOyBuICE9IGZyb21Ob2RlOyBuID0gbi0+dHJhdmVy
c2VQcmV2aW91c05vZGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChuLT5pc0tleWJvYXJkRm9j
dXNhYmxlKCkgJiYgKG4tPnRhYkluZGV4KCkgPT0gaGlnaGVzdFN1aXRhYmxlVGFiSW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgICAgIH0KIAotCSAgICBhc3Nl
cnQoZmFsc2UpOyAvLyBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUKLQkgICAgcmV0dXJuIDA7Ci0JfQor
ICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsgLy8gc2hvdWxkIG5ldmVyIGdldCBoZXJlCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTYzOCw3ICsxNjE2
LDcgQEAKIAogICAgIGludCBhYnNJbmRleCA9IDA7CiAgICAgZm9yIChOb2RlSW1wbCAqbiA9IG5v
ZGU7IG4gJiYgbiAhPSB0aGlzOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkKLQlhYnNJ
bmRleCsrOworICAgICAgICBhYnNJbmRleCsrOwogICAgIHJldHVybiBhYnNJbmRleDsKIH0KIApA
QCAtMTY0Niw3ICsxNjI0LDcgQEAKIHsKICAgICBOb2RlSW1wbCAqbiA9IHRoaXM7CiAgICAgZm9y
IChpbnQgaSA9IDA7IG4gJiYgKGkgPCBhYnNJbmRleCk7IGkrKykgewotCW4gPSBuLT50cmF2ZXJz
ZU5leHROb2RlKCk7CisgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgfQog
ICAgIHJldHVybiBuOwogfQpAQCAtMTY4MCwxMyArMTY1OCwxMyBAQAogICAgICAgICB7CiAgICAg
ICAgICAgICBib29sIG9rID0gZmFsc2U7CiAgICAgICAgICAgICBpbnQgZGVsYXkgPSAwOwotCSAg
ICBkZWxheSA9IHN0ci50b0ludCgmb2spOwotCSAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3Rvcnkg
aXRlbSBpZiB0aGUgcmVmcmVzaCB0aW1lb3V0ID4gMSBzZWNvbmQKLQkgICAgaWYob2sgJiYgZnJh
bWUpIGZyYW1lLT5zY2hlZHVsZVJlZGlyZWN0aW9uKGRlbGF5LCBmcmFtZS0+dXJsKCkudXJsKCks
IGRlbGF5IDw9IDEpOworICAgICAgICAgICAgZGVsYXkgPSBzdHIudG9JbnQoJm9rKTsKKyAgICAg
ICAgICAgIC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoZSByZWZyZXNoIHRpbWVv
dXQgPiAxIHNlY29uZAorICAgICAgICAgICAgaWYob2sgJiYgZnJhbWUpIGZyYW1lLT5zY2hlZHVs
ZVJlZGlyZWN0aW9uKGRlbGF5LCBmcmFtZS0+dXJsKCkudXJsKCksIGRlbGF5IDw9IDEpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgZG91YmxlIGRlbGF5ID0gMDsKICAgICAgICAgICAg
IGJvb2wgb2sgPSBmYWxzZTsKLQkgICAgZGVsYXkgPSBzdHIubGVmdChwb3MpLnN0cmlwV2hpdGVT
cGFjZSgpLnRvRG91YmxlKCZvayk7CisgICAgICAgICAgICBkZWxheSA9IHN0ci5sZWZ0KHBvcyku
c3RyaXBXaGl0ZVNwYWNlKCkudG9Eb3VibGUoJm9rKTsKIAogICAgICAgICAgICAgcG9zKys7CiAg
ICAgICAgICAgICB3aGlsZShwb3MgPCAoaW50KXN0ci5sZW5ndGgoKSAmJiBzdHJbcG9zXS5pc1Nw
YWNlKCkpIHBvcysrOwpAQCAtMTg4Myw3ICsxODYxLDcgQEAKICAgICBtX2F2YWlsYWJsZVNoZWV0
cy5jbGVhcigpOwogICAgIE5vZGVJbXBsICpuOwogICAgIGZvciAobiA9IHRoaXM7IG47IG4gPSBu
LT50cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAgICAJU3R5bGVTaGVldEltcGwgKnNoZWV0ID0gMDsK
KyAgICAgICAgU3R5bGVTaGVldEltcGwgKnNoZWV0ID0gMDsKIAogICAgICAgICBpZiAobi0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpCiAgICAgICAgIHsK
QEAgLTIwMDUsMTMgKzE5ODMsMTMgQEAKICAgICAvLyBEZS1yZWZlcmVuY2UgYWxsIHRoZSBzdHls
ZXNoZWV0cyBpbiB0aGUgb2xkIGxpc3QKICAgICBRUHRyTGlzdEl0ZXJhdG9yPFN0eWxlU2hlZXRJ
bXBsPiBpdChvbGRTdHlsZVNoZWV0cyk7CiAgICAgZm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkK
LQlpdC5jdXJyZW50KCktPmRlcmVmKCk7CisgICAgICAgIGl0LmN1cnJlbnQoKS0+ZGVyZWYoKTsK
IAogICAgIC8vIENyZWF0ZSBhIG5ldyBzdHlsZSBzZWxlY3RvcgogICAgIGRlbGV0ZSBtX3N0eWxl
U2VsZWN0b3I7CiAgICAgUVN0cmluZyB1c2Vyc2hlZXQgPSBtX3VzZXJzaGVldDsKICAgICBpZiAo
IG1fdmlldyAmJiBtX3ZpZXctPm1lZGlhVHlwZSgpID09ICJwcmludCIgKQotCXVzZXJzaGVldCAr
PSBtX3ByaW50U2hlZXQ7CisgICAgICAgIHVzZXJzaGVldCArPSBtX3ByaW50U2hlZXQ7CiAgICAg
bV9zdHlsZVNlbGVjdG9yID0gbmV3IENTU1N0eWxlU2VsZWN0b3IodGhpcywgdXNlcnNoZWV0LCBt
X3N0eWxlU2hlZXRzLCAhaW5Db21wYXRNb2RlKCkpOwogICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0
RW5jb2RlZFVSTChtX3VybCk7CiAgICAgbV9zdHlsZVNlbGVjdG9yRGlydHkgPSBmYWxzZTsKQEAg
LTIyNzMsMTEgKzIyNTEsMTEgQEAKIHsKICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgaXQgd2Ug
ZG9uJ3Qgd2FudCByZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyIHRvIGRlbGV0ZSBpdAogICAgIGlm
IChsaXN0ZW5lcikKLQlsaXN0ZW5lci0+cmVmKCk7CisgICAgICAgIGxpc3RlbmVyLT5yZWYoKTsK
ICAgICByZW1vdmVIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihldmVudFR5cGUpOwogICAgIGlmIChs
aXN0ZW5lcikgewotCWFkZFdpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwg
ZmFsc2UpOwotCWxpc3RlbmVyLT5kZXJlZigpOworICAgICAgICBhZGRXaW5kb3dFdmVudExpc3Rl
bmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTsKKyAgICAgICAgbGlzdGVuZXItPmRlcmVm
KCk7CiAgICAgfQogfQogCkBAIC0yMjg1LDggKzIyNjMsOCBAQAogewogICAgIFFQdHJMaXN0SXRl
cmF0b3I8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+IGl0KG1fd2luZG93RXZlbnRMaXN0ZW5lcnMp
OwogICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpCi0JaWYgKGl0LmN1cnJlbnQoKS0+ZXZl
bnRUeXBlKCkgPT0gZXZlbnRUeXBlICYmIGl0LmN1cnJlbnQoKS0+bGlzdGVuZXIoKS0+ZXZlbnRM
aXN0ZW5lclR5cGUoKSA9PSAiX2todG1sX0hUTUxFdmVudExpc3RlbmVyIikKLQkgICAgcmV0dXJu
IGl0LmN1cnJlbnQoKS0+bGlzdGVuZXIoKTsKKyAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+ZXZl
bnRUeXBlKCkgPT0gZXZlbnRUeXBlICYmIGl0LmN1cnJlbnQoKS0+bGlzdGVuZXIoKS0+ZXZlbnRM
aXN0ZW5lclR5cGUoKSA9PSAiX2todG1sX0hUTUxFdmVudExpc3RlbmVyIikKKyAgICAgICAgICAg
IHJldHVybiBpdC5jdXJyZW50KCktPmxpc3RlbmVyKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAg
LTIyOTQsMTAgKzIyNzIsMTAgQEAKIHsKICAgICBRUHRyTGlzdEl0ZXJhdG9yPFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyPiBpdChtX3dpbmRvd0V2ZW50TGlzdGVuZXJzKTsKICAgICBmb3IgKDsgaXQu
Y3VycmVudCgpOyArK2l0KQotCWlmIChpdC5jdXJyZW50KCktPmV2ZW50VHlwZSgpID09IGV2ZW50
VHlwZSAmJiBpdC5jdXJyZW50KCktPmxpc3RlbmVyKCktPmV2ZW50TGlzdGVuZXJUeXBlKCkgPT0g
Il9raHRtbF9IVE1MRXZlbnRMaXN0ZW5lciIpIHsKLQkgICAgbV93aW5kb3dFdmVudExpc3RlbmVy
cy5yZW1vdmVSZWYoaXQuY3VycmVudCgpKTsKLQkgICAgcmV0dXJuOwotCX0KKyAgICAgICAgaWYg
KGl0LmN1cnJlbnQoKS0+ZXZlbnRUeXBlKCkgPT0gZXZlbnRUeXBlICYmIGl0LmN1cnJlbnQoKS0+
bGlzdGVuZXIoKS0+ZXZlbnRMaXN0ZW5lclR5cGUoKSA9PSAiX2todG1sX0hUTUxFdmVudExpc3Rl
bmVyIikgeworICAgICAgICAgICAgbV93aW5kb3dFdmVudExpc3RlbmVycy5yZW1vdmVSZWYoaXQu
Y3VycmVudCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogfQogCiB2b2lkIERv
Y3VtZW50SW1wbDo6YWRkV2luZG93RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKQEAgLTIz
MjcsOSArMjMwNSw5IEBACiB7CiAgICAgUVB0ckxpc3RJdGVyYXRvcjxSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lcj4gaXQobV93aW5kb3dFdmVudExpc3RlbmVycyk7CiAgICAgZm9yICg7IGl0LmN1cnJl
bnQoKTsgKytpdCkgewotCWlmIChpdC5jdXJyZW50KCktPmV2ZW50VHlwZSgpID09IGV2ZW50VHlw
ZSkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9CisgICAgICAgIGlmIChpdC5jdXJyZW50KCktPmV2
ZW50VHlwZSgpID09IGV2ZW50VHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzM4LDkgKzIzMTYsOSBAQAog
RXZlbnRMaXN0ZW5lciAqRG9jdW1lbnRJbXBsOjpjcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihjb25z
dCBET01TdHJpbmcmIGNvZGUsIE5vZGVJbXBsICpub2RlKQogewogICAgIGlmIChmcmFtZSgpKSB7
Ci0JcmV0dXJuIGZyYW1lKCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGNvZGUsIG5vZGUpOwor
ICAgICAgICByZXR1cm4gZnJhbWUoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoY29kZSwgbm9k
ZSk7CiAgICAgfSBlbHNlIHsKLQlyZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAg
ICAgfQogfQogCkBAIC0yNjUzLDcgKzI2MzEsNyBAQAogICAgIERPTVN0cmluZyByZXN1bHQ7CiAK
ICAgICBmb3IgKE5vZGVJbXBsICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gTlVMTDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotCXJlc3VsdCArPSBjaGlsZC0+dG9TdHJp
bmcoKTsKKyAgICAgICAgcmVzdWx0ICs9IGNoaWxkLT50b1N0cmluZygpOwogICAgIH0KIAogICAg
IHJldHVybiByZXN1bHQ7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBraHRtbC94bWwvRG9jdW1lbnRJ
bXBsLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IGFsbG93LXRhYnMKICAgLSB4CgpJbmRleDoga2h0bWwv
ZWRpdGluZy9qc2VkaXRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL2pzZWRpdGlu
Zy5oCShyZXZpc2lvbiAxMjA3MikKKysrIGtodG1sL2VkaXRpbmcvanNlZGl0aW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDExICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lm
bmRlZiBfX2pzZWRpdGluZ19oX18KLSNkZWZpbmUgX19qc2VkaXRpbmdfaF9fCisjaWZuZGVmIGpz
ZWRpdGluZ19oX18KKyNkZWZpbmUganNlZGl0aW5nX2hfXwogCiAjaW5jbHVkZSAiZG9tX3N0cmlu
Zy5oIgotI2luY2x1ZGUgInFkaWN0LmgiCiAKIGNsYXNzIEZyYW1lOwogY2xhc3MgUVN0cmluZzsK
SW5kZXg6IGtodG1sL21pc2MvQ2FjaGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvbWlz
Yy9DYWNoZWRPYmplY3QuaAkocmV2aXNpb24gMTIwNzIpCisrKyBraHRtbC9taXNjL0NhY2hlZE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAgICAgVGhpcyBjbGFzcyBw
cm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHls
ZSBzaGVldHMgYW5kIGh0bWwKICAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9y
eSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KICovCisKICNpZm5kZWYgS0hUTUxfQ2FjaGVkT2Jq
ZWN0X2gKICNkZWZpbmUgS0hUTUxfQ2FjaGVkT2JqZWN0X2gKIApAQCAtMzQsNyArMzUsNiBAQAog
I2luY2x1ZGUgPHFwdHJsaXN0Lmg+CiAjaW5jbHVkZSA8cW9iamVjdC5oPgogI2luY2x1ZGUgPHFw
dHJkaWN0Lmg+Ci0jaW5jbHVkZSA8cWRpY3QuaD4KICNpbmNsdWRlIDxxcGl4bWFwLmg+CiAjaW5j
bHVkZSA8cWJ1ZmZlci5oPgogI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CkBAIC0yMjUsNiArMjI1
LDYgQEAKICAgICAgICAgZnJpZW5kIGNsYXNzIENhY2hlOwogICAgIH07CiAKLX07Cit9CiAKICNl
bmRpZgpJbmRleDoga2h0bWwvbWlzYy9DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL21pc2Mv
Q2FjaGUuaAkocmV2aXNpb24gMTIwNzIpCisrKyBraHRtbC9taXNjL0NhY2hlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDE4ICsyMywxNSBAQAogICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1
bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBo
dG1sCiAgICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRo
ZXNlIG9iamVjdHMuCiAqLworCiAjaWZuZGVmIEtIVE1MX0NhY2hlX2gKICNkZWZpbmUgS0hUTUxf
Q2FjaGVfaAogCi0jaW5jbHVkZSA8cXB0cmRpY3QuaD4KKyNpbmNsdWRlICJkb20vZG9tX3N0cmlu
Zy5oIgorI2luY2x1ZGUgPGtpby9nbG9iYWwuaD4KICNpbmNsdWRlIDxxcHRybGlzdC5oPgotI2lu
Y2x1ZGUgPHFkaWN0Lmg+CiAjaW5jbHVkZSA8cXN0cmluZy5oPgogCi0jaW5jbHVkZSA8a2lvL2ds
b2JhbC5oPgotCi0jaW5jbHVkZSA8ZG9tL2RvbV9zdHJpbmcuaD4KLQogY2xhc3MgUVBpeG1hcDsK
IGNsYXNzIEtVUkw7CiAKQEAgLTUwLDQyICs0NywzNiBAQAogCiAjZGVmaW5lIE1BWF9MUlVfTElT
VFMgMjAKICAgICAKLSAgICBzdHJ1Y3QgTFJVTGlzdCB7Ci0gICAgICAgIENhY2hlZE9iamVjdCog
bV9oZWFkOwotICAgICAgICBDYWNoZWRPYmplY3QqIG1fdGFpbDsKKyAgICBzdHJ1Y3QgTFJVTGlz
dDsKICAgICAKLSAgICAgICAgTFJVTGlzdCgpOwotICAgICAgICB+TFJVTGlzdCgpOwotICAgIH07
Ci0gICAgCiAgICAgLyoqCiAgICAgICogUHJvdmlkZXMgYSBjYWNoZS9sb2FkZXIgZm9yIG9iamVj
dHMgbmVlZGVkIGZvciBkaXNwbGF5aW5nIHRoZSBodG1sIHBhZ2UuCiAgICAgICogQXQgdGhlIG1v
bWVudCB0aGVzZSBhcmUgc3R5bGVzaGVldHMsIHNjcmlwdHMgYW5kIGltYWdlcwogICAgICAqLwog
ICAgIGNsYXNzIENhY2hlCiAgICAgewotCWZyaWVuZCBjbGFzcyBEb2NMb2FkZXI7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBEb2NMb2FkZXI7CiAgICAgcHVibGljOgotCS8qKgotCSAqIGluaXQgdGhl
IGNhY2hlIGluIGNhc2UgaXQncyBub3QgYWxyZWFkeS4gVGhpcyBuZWVkcyB0byBnZXQgY2FsbGVk
IG9uY2UKLQkgKiBiZWZvcmUgdXNpbmcgaXQuCi0JICovCi0Jc3RhdGljIHZvaWQgaW5pdCgpOwor
ICAgICAgICAvKioKKyAgICAgICAgICogaW5pdCB0aGUgY2FjaGUgaW4gY2FzZSBpdCdzIG5vdCBh
bHJlYWR5LiBUaGlzIG5lZWRzIHRvIGdldCBjYWxsZWQgb25jZQorICAgICAgICAgKiBiZWZvcmUg
dXNpbmcgaXQuCisgICAgICAgICAqLworICAgICAgICBzdGF0aWMgdm9pZCBpbml0KCk7CiAgICAg
ICAgIAotCS8qKgotCSAqIEFzayB0aGUgY2FjaGUgZm9yIHNvbWUgdXJsLiBXaWxsIHJldHVybiBh
IGNhY2hlZE9iamVjdCwgYW5kCi0JICogbG9hZCB0aGUgcmVxdWVzdGVkIGRhdGEgaW4gY2FzZSBp
dCdzIG5vdCBjYWhjZWQKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFzayB0aGUgY2FjaGUgZm9y
IHNvbWUgdXJsLiBXaWxsIHJldHVybiBhIGNhY2hlZE9iamVjdCwgYW5kCisgICAgICAgICAqIGxv
YWQgdGhlIHJlcXVlc3RlZCBkYXRhIGluIGNhc2UgaXQncyBub3QgY2FoY2VkCiAgICAgICAgICAq
IGlmIHRoZSBEb2NMb2FkZXIgaXMgemVybywgdGhlIHVybCBtdXN0IGJlIGZ1bGwtcXVhbGlmaWVk
LgogICAgICAgICAgKiBPdGhlcndpc2UsIGl0IGlzIGF1dG9tYXRpY2FsbHkgYmFzZS11cmwgZXhw
YW5kZWQKLQkgKi8KLQlzdGF0aWMgQ2FjaGVkSW1hZ2UgKnJlcXVlc3RJbWFnZSggRG9jTG9hZGVy
KiBsLCBjb25zdCBET006OkRPTVN0cmluZyAmdXJsLCBib29sIHJlbG9hZD1mYWxzZSwgdGltZV90
IF9leHBpcmVEYXRlPTApOworICAgICAgICAgKi8KKyAgICAgICAgc3RhdGljIENhY2hlZEltYWdl
ICpyZXF1ZXN0SW1hZ2UoIERvY0xvYWRlciogbCwgY29uc3QgRE9NOjpET01TdHJpbmcgJnVybCwg
Ym9vbCByZWxvYWQ9ZmFsc2UsIHRpbWVfdCBfZXhwaXJlRGF0ZT0wKTsKICAgICAgICAgc3RhdGlj
IENhY2hlZEltYWdlICpyZXF1ZXN0SW1hZ2UoIERvY0xvYWRlciogbCwgY29uc3QgS1VSTCAmdXJs
LCBib29sIHJlbG9hZD1mYWxzZSwgdGltZV90IF9leHBpcmVEYXRlPTApOwogCi0JLyoqCi0JICog
QXNrIHRoZSBjYWNoZSBmb3Igc29tZSB1cmwuIFdpbGwgcmV0dXJuIGEgY2FjaGVkT2JqZWN0LCBh
bmQKLQkgKiBsb2FkIHRoZSByZXF1ZXN0ZWQgZGF0YSBpbiBjYXNlIGl0J3Mgbm90IGNhY2hlZAot
CSAqLwotCXN0YXRpYyBDYWNoZWRDU1NTdHlsZVNoZWV0ICpyZXF1ZXN0U3R5bGVTaGVldCggRG9j
TG9hZGVyKiBsLCBjb25zdCBET006OkRPTVN0cmluZyAmdXJsLCBib29sIHJlbG9hZD1mYWxzZSwg
dGltZV90IF9leHBpcmVEYXRlPTAsIGNvbnN0IFFTdHJpbmcmIGNoYXJzZXQgPSBRU3RyaW5nOjpu
dWxsKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFzayB0aGUgY2FjaGUgZm9yIHNvbWUgdXJs
LiBXaWxsIHJldHVybiBhIGNhY2hlZE9iamVjdCwgYW5kCisgICAgICAgICAqIGxvYWQgdGhlIHJl
cXVlc3RlZCBkYXRhIGluIGNhc2UgaXQncyBub3QgY2FjaGVkCisgICAgICAgICAqLworICAgICAg
ICBzdGF0aWMgQ2FjaGVkQ1NTU3R5bGVTaGVldCAqcmVxdWVzdFN0eWxlU2hlZXQoIERvY0xvYWRl
ciogbCwgY29uc3QgRE9NOjpET01TdHJpbmcgJnVybCwgYm9vbCByZWxvYWQ9ZmFsc2UsIHRpbWVf
dCBfZXhwaXJlRGF0ZT0wLCBjb25zdCBRU3RyaW5nJiBjaGFyc2V0ID0gUVN0cmluZzo6bnVsbCk7
CiAKICNpZmRlZiBLSFRNTF9YU0xUCiAgICAgICAgIC8vIEFzayB0aGUgY2FjaGUgZm9yIGFuIFhT
TCBzdHlsZXNoZWV0LgpAQCAtMTAzLDQ0ICs5NCw0NCBAQAogICAgICAgICAgKi8KICAgICAgICAg
c3RhdGljIHZvaWQgcHJlbG9hZFN0eWxlU2hlZXQoY29uc3QgUVN0cmluZyAmdXJsLCBjb25zdCBR
U3RyaW5nICZzdHlsZXNoZWV0X2RhdGEpOwogCi0JLyoqCi0JICogQXNrIHRoZSBjYWNoZSBmb3Ig
c29tZSB1cmwuIFdpbGwgcmV0dXJuIGEgY2FjaGVkT2JqZWN0LCBhbmQKLQkgKiBsb2FkIHRoZSBy
ZXF1ZXN0ZWQgZGF0YSBpbiBjYXNlIGl0J3Mgbm90IGNhaGNlZAotCSAqLwotCXN0YXRpYyBDYWNo
ZWRTY3JpcHQgKnJlcXVlc3RTY3JpcHQoIERvY0xvYWRlciogbCwgY29uc3QgRE9NOjpET01TdHJp
bmcgJnVybCwgYm9vbCByZWxvYWQ9ZmFsc2UsIHRpbWVfdCBfZXhwaXJlRGF0ZT0wLCBjb25zdCBR
U3RyaW5nJiBjaGFyc2V0PVFTdHJpbmc6Om51bGwpOworICAgICAgICAvKioKKyAgICAgICAgICog
QXNrIHRoZSBjYWNoZSBmb3Igc29tZSB1cmwuIFdpbGwgcmV0dXJuIGEgY2FjaGVkT2JqZWN0LCBh
bmQKKyAgICAgICAgICogbG9hZCB0aGUgcmVxdWVzdGVkIGRhdGEgaW4gY2FzZSBpdCdzIG5vdCBj
YWhjZWQKKyAgICAgICAgICovCisgICAgICAgIHN0YXRpYyBDYWNoZWRTY3JpcHQgKnJlcXVlc3RT
Y3JpcHQoIERvY0xvYWRlciogbCwgY29uc3QgRE9NOjpET01TdHJpbmcgJnVybCwgYm9vbCByZWxv
YWQ9ZmFsc2UsIHRpbWVfdCBfZXhwaXJlRGF0ZT0wLCBjb25zdCBRU3RyaW5nJiBjaGFyc2V0PVFT
dHJpbmc6Om51bGwpOwogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBQcmUtbG9hZHMgYSBzY3Jp
cHQgaW50byB0aGUgY2FjaGUuCiAgICAgICAgICAqLwogICAgICAgICBzdGF0aWMgdm9pZCBwcmVs
b2FkU2NyaXB0KGNvbnN0IFFTdHJpbmcgJnVybCwgY29uc3QgUVN0cmluZyAmc2NyaXB0X2RhdGEp
OwogCi0JLyoqCi0JICogc2V0cyB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUuIFRoaXMgd2lsbCBvbmx5
IGhvZCBhcHByb3hpbWF0ZWx5LCBzaW5jZSB0aGUgc2l6ZSBzb21lCi0JICogY2FjaGVkIG9iamVj
dHMgKGxpa2Ugc3R5bGVzaGVldHMpIHRha2UgdXAgaW4gbWVtb3J5IGlzIG5vdCBleGFjbHR5IGtu
b3duLgotCSAqLwotCXN0YXRpYyB2b2lkIHNldFNpemUoIGludCBieXRlcyApOwotCS8qKgotCSAq
IHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNhY2hlCi0JICovCi0Jc3RhdGljIGludCBzaXplKCkg
eyByZXR1cm4gbWF4U2l6ZTsgfTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIHNldHMgdGhlIHNp
emUgb2YgdGhlIGNhY2hlLiBUaGlzIHdpbGwgb25seSBob2QgYXBwcm94aW1hdGVseSwgc2luY2Ug
dGhlIHNpemUgc29tZQorICAgICAgICAgKiBjYWNoZWQgb2JqZWN0cyAobGlrZSBzdHlsZXNoZWV0
cykgdGFrZSB1cCBpbiBtZW1vcnkgaXMgbm90IGV4YWNsdHkga25vd24uCisgICAgICAgICAqLwor
ICAgICAgICBzdGF0aWMgdm9pZCBzZXRTaXplKCBpbnQgYnl0ZXMgKTsKKyAgICAgICAgLyoqCisg
ICAgICAgICAqIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNhY2hlCisgICAgICAgICAqLworICAg
ICAgICBzdGF0aWMgaW50IHNpemUoKSB7IHJldHVybiBtYXhTaXplOyB9OwogCiAgICAgICAgIHN0
YXRpYyBpbnQgbWF4Q2FjaGVhYmxlT2JqZWN0U2l6ZSgpIHsgcmV0dXJuIG1heENhY2hlYWJsZTsg
fQogCi0JLyoqCi0JICogY2xlYW4gdXAgY2FjaGUKLQkgKi8KLQlzdGF0aWMgdm9pZCBmbHVzaChi
b29sIGZvcmNlPWZhbHNlKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIGNsZWFuIHVwIGNhY2hl
CisgICAgICAgICAqLworICAgICAgICBzdGF0aWMgdm9pZCBmbHVzaChib29sIGZvcmNlPWZhbHNl
KTsKIAotCS8qKgotCSAqIGNsZWFycyB0aGUgY2FjaGUKLQkgKiBXYXJuaW5nOiBjYWxsIHRoaXMg
b25seSBhdCB0aGUgZW5kIG9mIHlvdXIgcHJvZ3JhbSwgdG8gY2xlYW4KLQkgKiB1cCBtZW1vcnkg
KHVzZWZ1bCBmb3IgZmluZGluZyBtZW1vcnkgaG9sZXMpCi0JICovCi0Jc3RhdGljIHZvaWQgY2xl
YXIoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIGNsZWFycyB0aGUgY2FjaGUKKyAgICAgICAg
ICogV2FybmluZzogY2FsbCB0aGlzIG9ubHkgYXQgdGhlIGVuZCBvZiB5b3VyIHByb2dyYW0sIHRv
IGNsZWFuCisgICAgICAgICAqIHVwIG1lbW9yeSAodXNlZnVsIGZvciBmaW5kaW5nIG1lbW9yeSBo
b2xlcykKKyAgICAgICAgICovCisgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyKCk7CiAKLQlzdGF0
aWMgTG9hZGVyICpsb2FkZXIoKSB7IHJldHVybiBtX2xvYWRlcjsgfQorICAgICAgICBzdGF0aWMg
TG9hZGVyICpsb2FkZXIoKSB7IHJldHVybiBtX2xvYWRlcjsgfQogCi0gICAgCXN0YXRpYyBRUGl4
bWFwICpudWxsUGl4bWFwOworICAgICAgICBzdGF0aWMgUVBpeG1hcCAqbnVsbFBpeG1hcDsKICAg
ICAgICAgc3RhdGljIFFQaXhtYXAgKmJyb2tlblBpeG1hcDsKIAogICAgICAgICBzdGF0aWMgdm9p
ZCByZW1vdmVDYWNoZUVudHJ5KCBDYWNoZWRPYmplY3QgKm9iamVjdCApOwpAQCAtMTc4LDcgKzE2
OSw2IEBACiAgICAgICAgIHN0YXRpYyB2b2lkIGNoZWNrTFJVQW5kVW5jYWNoZWFibGVMaXN0SW50
ZWdyaXR5KCk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBRRGljdDxDYWNoZWRP
YmplY3Q+ICpjYWNoZTsKICAgICAgICAgc3RhdGljIFFQdHJMaXN0PERvY0xvYWRlcj4qIGRvY2xv
YWRlcjsKICAgICAKICAgICAgICAgc3RhdGljIGludCBtYXhTaXplOwpAQCAtMTk1LDcgKzE4NSwx
MCBAQAogICAgICAgICBzdGF0aWMgQ2FjaGVkT2JqZWN0ICptX2hlYWRPZlVuY2FjaGVhYmxlTGlz
dDsKICAgICAgICAgICAgIAogICAgICAgICBzdGF0aWMgaW50IG1fY291bnRPZkxSVUFuZFVuY2Fj
aGVhYmxlTGlzdHM7CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgQ2FjaGVkT2JqZWN0
KiBnZXQoRE9NOjpET01TdHJpbmdJbXBsKik7CiAgICAgfTsKLX07Cit9CiAKICNlbmRpZgoKUHJv
cGVydHkgY2hhbmdlcyBvbjoga2h0bWwvbWlzYy9DYWNoZS5oCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogYWxs
b3ctdGFicwogICAtIHgKCkluZGV4OiBraHRtbC9taXNjL0RvY0xvYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtodG1sL21pc2MvRG9jTG9hZGVyLmgJKHJldmlzaW9uIDEyMDcyKQorKysga2h0bWwvbWlz
Yy9Eb2NMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDExIEBACiAgICAgVGhp
cyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1h
Z2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKICAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhh
cyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KICovCisKICNpZm5kZWYgS0hUTUxf
RG9jTG9hZGVyX2gKICNkZWZpbmUgS0hUTUxfRG9jTG9hZGVyX2gKIAogI2luY2x1ZGUgPHFwdHJs
aXN0Lmg+Ci0jaW5jbHVkZSA8cWRpY3QuaD4KICNpbmNsdWRlIDxxYnVmZmVyLmg+CiAjaW5jbHVk
ZSA8cXN0cmluZ2xpc3QuaD4KIApAQCAtMTA2LDYgKzEwNiw2IEBACiAgICAgICAgIGJvb2wgbV9s
b2FkSW5Qcm9ncmVzczsKICAgICB9OwogCi19OworfQogCiAjZW5kaWYKSW5kZXg6IGtodG1sL21p
c2MvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL21pc2MvQ2FjaGUuY3BwCShyZXZpc2lv
biAxMjA3MikKKysrIGtodG1sL21pc2MvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
NCArMjcsMTcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNhY2hlLmgiCisK
KyNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2Uu
aCIKICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNo
ZWV0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkRvY0xv
YWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50SW1wbC5oIgogI2luY2x1ZGUgImxvYWRlci5oIgot
I2luY2x1ZGUgIkRvY3VtZW50SW1wbC5oIgotCisjaW5jbHVkZSA8a2lvL2pvYi5oPgorI2luY2x1
ZGUgPGtpby9qb2JjbGFzc2VzLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgog
I2luY2x1ZGUgPHFwaXhtYXAuaD4KIAogLy8gdXAgdG8gd2hpY2ggc2l6ZSBpcyBhIHBpY3R1cmUg
Zm9yIHN1cmUgY2FjaGVhYmxlCkBAIC00MiwyNSArNDUsMjIgQEAKIC8vIGRlZmF1bHQgY2FjaGUg
c2l6ZQogI2RlZmluZSBERUZDQUNIRVNJWkUgNDA5NioxMDI0CiAKLSNpbmNsdWRlIDxraW8vam9i
Lmg+Ci0jaW5jbHVkZSA8a2lvL2pvYmNsYXNzZXMuaD4KK3VzaW5nIG5hbWVzcGFjZSBET007CiAK
LSNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CituYW1lc3BhY2Uga2h0bWwgewogCi11
c2luZyBuYW1lc3BhY2Uga2h0bWw7Ci11c2luZyBuYW1lc3BhY2UgRE9NOworc3RydWN0IExSVUxp
c3QgeworICAgIENhY2hlZE9iamVjdCogbV9oZWFkOworICAgIENhY2hlZE9iamVjdCogbV90YWls
OworICAgIExSVUxpc3QoKSA6IG1faGVhZCgwKSwgbV90YWlsKDApIHsgfQorfTsKIAogc3RhdGlj
IGJvb2wgY2FjaGVEaXNhYmxlZDsKIAotTFJVTGlzdDo6TFJVTGlzdCgpIDptX2hlYWQoMCksIG1f
dGFpbCgwKSAKLXsKLX0KK3R5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RE9NU3RyaW5nSW1wbD4sIENh
Y2hlZE9iamVjdCo+IENhY2hlTWFwOwogCi1MUlVMaXN0Ojp+TFJVTGlzdCgpCi17Ci19CitzdGF0
aWMgQ2FjaGVNYXAqIGNhY2hlID0gMDsKIAotUURpY3Q8Q2FjaGVkT2JqZWN0PiAqQ2FjaGU6OmNh
Y2hlID0gMDsKIFFQdHJMaXN0PERvY0xvYWRlcj4qIENhY2hlOjpkb2Nsb2FkZXIgPSAwOwogTG9h
ZGVyICpDYWNoZTo6bV9sb2FkZXIgPSAwOwogCkBAIC03OCw4ICs3OCw4IEBACiAKIHZvaWQgQ2Fj
aGU6OmluaXQoKQogewotICAgIGlmICggIWNhY2hlICkKLSAgICAgICAgY2FjaGUgPSBuZXcgUURp
Y3Q8Q2FjaGVkT2JqZWN0Pig0MDEsIHRydWUpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIGNh
Y2hlID0gbmV3IENhY2hlTWFwOwogCiAgICAgaWYgKCAhZG9jbG9hZGVyICkKICAgICAgICAgZG9j
bG9hZGVyID0gbmV3IFFQdHJMaXN0PERvY0xvYWRlcj47CkBAIC05OSw3ICs5OSwxMCBAQAogICAg
IGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNhY2hlLT5zZXRBdXRvRGVsZXRl
KCB0cnVlICk7CisgICAgQ2FjaGVNYXA6Oml0ZXJhdG9yIGUgPSBjYWNoZS0+ZW5kKCk7CisgICAg
Zm9yIChDYWNoZU1hcDo6aXRlcmF0b3IgaSA9IGNhY2hlLT5iZWdpbigpOyBpICE9IGU7ICsraSkK
KyAgICAgICAgZGVsZXRlIGktPnNlY29uZDsKKwogICAgIGRlbGV0ZSBjYWNoZTsgY2FjaGUgPSAw
OwogICAgIGRlbGV0ZSBudWxsUGl4bWFwOyBudWxsUGl4bWFwID0gMDsKICAgICBkZWxldGUgYnJv
a2VuUGl4bWFwOyBicm9rZW5QaXhtYXAgPSAwOwpAQCAtMTM0LDcgKzEzNyw3IEBACiAKICAgICBD
YWNoZWRPYmplY3QgKm8gPSAwOwogICAgIGlmICghcmVsb2FkKQotICAgICAgICBvID0gY2FjaGUt
PmZpbmQodXJsLnVybCgpKTsKKyAgICAgICAgbyA9IGNhY2hlLT5nZXQoRE9NU3RyaW5nKHVybC51
cmwoKSkuaW1wbCgpKTsKICAgICBpZighbykKICAgICB7CiAjaWZkZWYgQ0FDSEVfREVCVUcKQEAg
LTE0NSw4ICsxNDgsOCBAQAogICAgICAgICBpZiAoY2FjaGVEaXNhYmxlZCkKICAgICAgICAgICAg
IGltLT5zZXRGcmVlKHRydWUpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgY2FjaGUtPmluc2Vy
dCggdXJsLnVybCgpLCBpbSApOwotICAgICAgICBtb3ZlVG9IZWFkT2ZMUlVMaXN0KGltKTsKKyAg
ICAgICAgICAgIGNhY2hlLT5zZXQoRE9NU3RyaW5nKHVybC51cmwoKSkuaW1wbCgpLCBpbSk7Cisg
ICAgICAgICAgICBtb3ZlVG9IZWFkT2ZMUlVMaXN0KGltKTsKICAgICAgICAgfQogICAgICAgICBv
ID0gaW07CiAgICAgfQpAQCAtMTk0LDcgKzE5Nyw3IEBACiAKICAgICAvLyBDaGVja2luZyBpZiB0
aGUgVVJMIGlzIG1hbGZvcm1lZCBpcyBsb3RzIG9mIGV4dHJhIHdvcmsgZm9yIGxpdHRsZSBiZW5l
Zml0LgogCi0gICAgQ2FjaGVkT2JqZWN0ICpvID0gY2FjaGUtPmZpbmQoa3VybC51cmwoKSk7Cisg
ICAgQ2FjaGVkT2JqZWN0ICpvID0gY2FjaGUtPmdldChET01TdHJpbmcoa3VybC51cmwoKSkuaW1w
bCgpKTsKICAgICBpZighbykKICAgICB7CiAjaWZkZWYgQ0FDSEVfREVCVUcKQEAgLTIwNCw4ICsy
MDcsOCBAQAogICAgICAgICBpZiAoY2FjaGVEaXNhYmxlZCkKICAgICAgICAgICAgIHNoZWV0LT5z
ZXRGcmVlKHRydWUpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgY2FjaGUtPmluc2VydCgga3Vy
bC51cmwoKSwgc2hlZXQgKTsKLSAgICAgICAgbW92ZVRvSGVhZE9mTFJVTGlzdChzaGVldCk7Cisg
ICAgICAgICAgICBjYWNoZS0+c2V0KERPTVN0cmluZyhrdXJsLnVybCgpKS5pbXBsKCksIHNoZWV0
KTsKKyAgICAgICAgICAgIG1vdmVUb0hlYWRPZkxSVUxpc3Qoc2hlZXQpOwogICAgICAgICB9CiAg
ICAgICAgIG8gPSBzaGVldDsKICAgICB9CkBAIC0yMzUsMTQgKzIzOCwxMiBAQAogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0ICo+KG8pOwogfQogCi12b2lkIENhY2hl
OjpwcmVsb2FkU3R5bGVTaGVldCggY29uc3QgUVN0cmluZyAmdXJsLCBjb25zdCBRU3RyaW5nICZz
dHlsZXNoZWV0X2RhdGEpCit2b2lkIENhY2hlOjpwcmVsb2FkU3R5bGVTaGVldChjb25zdCBRU3Ry
aW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJnN0eWxlc2hlZXRfZGF0YSkKIHsKLSAgICBDYWNoZWRP
YmplY3QgKm8gPSBjYWNoZS0+ZmluZCh1cmwpOwotICAgIGlmKG8pCisgICAgQ2FjaGVkT2JqZWN0
ICpvID0gY2FjaGUtPmdldChET01TdHJpbmcodXJsKS5pbXBsKCkpOworICAgIGlmIChvKQogICAg
ICAgICByZW1vdmVDYWNoZUVudHJ5KG8pOwotCi0gICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCAqc3R5
bGVzaGVldCA9IG5ldyBDYWNoZWRDU1NTdHlsZVNoZWV0KHVybCwgc3R5bGVzaGVldF9kYXRhKTsK
LSAgICBjYWNoZS0+aW5zZXJ0KCB1cmwsIHN0eWxlc2hlZXQgKTsKKyAgICBjYWNoZS0+c2V0KERP
TVN0cmluZyh1cmwpLmltcGwoKSwgbmV3IENhY2hlZENTU1N0eWxlU2hlZXQodXJsLCBzdHlsZXNo
ZWV0X2RhdGEpKTsKIH0KIAogQ2FjaGVkU2NyaXB0ICpDYWNoZTo6cmVxdWVzdFNjcmlwdCggRG9j
TG9hZGVyKiBkbCwgY29uc3QgRE9NOjpET01TdHJpbmcgJnVybCwgYm9vbCByZWxvYWQsIHRpbWVf
dCBfZXhwaXJlRGF0ZSwgY29uc3QgUVN0cmluZyYgY2hhcnNldCkKQEAgLTI2Myw3ICsyNjQsNyBA
QAogCiAgICAgLy8gQ2hlY2tpbmcgaWYgdGhlIFVSTCBpcyBtYWxmb3JtZWQgaXMgbG90cyBvZiBl
eHRyYSB3b3JrIGZvciBsaXR0bGUgYmVuZWZpdC4KIAotICAgIENhY2hlZE9iamVjdCAqbyA9IGNh
Y2hlLT5maW5kKGt1cmwudXJsKCkpOworICAgIENhY2hlZE9iamVjdCAqbyA9IGNhY2hlLT5nZXQo
RE9NU3RyaW5nKGt1cmwudXJsKCkpLmltcGwoKSk7CiAgICAgaWYoIW8pCiAgICAgewogI2lmZGVm
IENBQ0hFX0RFQlVHCkBAIC0yNzMsOCArMjc0LDggQEAKICAgICAgICAgaWYgKGNhY2hlRGlzYWJs
ZWQpCiAgICAgICAgICAgICBzY3JpcHQtPnNldEZyZWUodHJ1ZSk7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICBjYWNoZS0+aW5zZXJ0KCBrdXJsLnVybCgpLCBzY3JpcHQgKTsKLSAgICAgICAgbW92
ZVRvSGVhZE9mTFJVTGlzdChzY3JpcHQpOworICAgICAgICAgICAgY2FjaGUtPnNldChET01TdHJp
bmcoa3VybC51cmwoKSkuaW1wbCgpLCBzY3JpcHQgKTsKKyAgICAgICAgICAgIG1vdmVUb0hlYWRP
ZkxSVUxpc3Qoc2NyaXB0KTsKICAgICAgICAgfQogICAgICAgICBvID0gc2NyaXB0OwogICAgIH0K
QEAgLTMwNSwxNCArMzA2LDEyIEBACiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZFNjcmlw
dCAqPihvKTsKIH0KIAotdm9pZCBDYWNoZTo6cHJlbG9hZFNjcmlwdCggY29uc3QgUVN0cmluZyAm
dXJsLCBjb25zdCBRU3RyaW5nICZzY3JpcHRfZGF0YSkKK3ZvaWQgQ2FjaGU6OnByZWxvYWRTY3Jp
cHQoY29uc3QgUVN0cmluZyAmdXJsLCBjb25zdCBRU3RyaW5nICZzY3JpcHRfZGF0YSkKIHsKLSAg
ICBDYWNoZWRPYmplY3QgKm8gPSBjYWNoZS0+ZmluZCh1cmwpOworICAgIENhY2hlZE9iamVjdCAq
byA9IGNhY2hlLT5nZXQoRE9NU3RyaW5nKHVybCkuaW1wbCgpKTsKICAgICBpZihvKQogICAgICAg
ICByZW1vdmVDYWNoZUVudHJ5KG8pOwotCi0gICAgQ2FjaGVkU2NyaXB0ICpzY3JpcHQgPSBuZXcg
Q2FjaGVkU2NyaXB0KHVybCwgc2NyaXB0X2RhdGEpOwotICAgIGNhY2hlLT5pbnNlcnQoIHVybCwg
c2NyaXB0ICk7CisgICAgY2FjaGUtPnNldChET01TdHJpbmcodXJsKS5pbXBsKCksIG5ldyBDYWNo
ZWRTY3JpcHQodXJsLCBzY3JpcHRfZGF0YSkpOwogfQogCiAjaWZkZWYgS0hUTUxfWFNMVApAQCAt
MzMzLDcgKzMzMiw3IEBACiAgICAgCiAgICAgLy8gQ2hlY2tpbmcgaWYgdGhlIFVSTCBpcyBtYWxm
b3JtZWQgaXMgbG90cyBvZiBleHRyYSB3b3JrIGZvciBsaXR0bGUgYmVuZWZpdC4KICAgICAKLSAg
ICBDYWNoZWRPYmplY3QgKm8gPSBjYWNoZS0+ZmluZChrdXJsLnVybCgpKTsKKyAgICBDYWNoZWRP
YmplY3QgKm8gPSBjYWNoZS0+Z2V0KERPTVN0cmluZyhrdXJsLnVybCgpKS5pbXBsKCkpOwogICAg
IGlmICghbykgewogI2lmZGVmIENBQ0hFX0RFQlVHCiAgICAgICAgIGtkRGVidWcoIDYwNjAgKSA8
PCAiQ2FjaGU6IG5ldzogIiA8PCBrdXJsLnVybCgpIDw8IGVuZGw7CkBAIC0zNDIsNyArMzQxLDcg
QEAKICAgICAgICAgaWYgKGNhY2hlRGlzYWJsZWQpCiAgICAgICAgICAgICBkb2MtPnNldEZyZWUo
dHJ1ZSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2FjaGUtPmluc2VydChrdXJsLnVy
bCgpLCBkb2MpOworICAgICAgICAgICAgY2FjaGUtPnNldChET01TdHJpbmcoa3VybC51cmwoKSku
aW1wbCgpLCBkb2MpOwogICAgICAgICAgICAgbW92ZVRvSGVhZE9mTFJVTGlzdChkb2MpOwogICAg
ICAgICB9CiAgICAgICAgIG8gPSBkb2M7CkBAIC0zOTEsNyArMzkwLDcgQEAKICAgICAKICAgICAv
LyBDaGVja2luZyBpZiB0aGUgVVJMIGlzIG1hbGZvcm1lZCBpcyBsb3RzIG9mIGV4dHJhIHdvcmsg
Zm9yIGxpdHRsZSBiZW5lZml0LgogICAgIAotICAgIENhY2hlZE9iamVjdCAqbyA9IGNhY2hlLT5m
aW5kKGt1cmwudXJsKCkpOworICAgIENhY2hlZE9iamVjdCAqbyA9IGNhY2hlLT5nZXQoRE9NU3Ry
aW5nKGt1cmwudXJsKCkpLmltcGwoKSk7CiAgICAgaWYoIW8pCiAgICAgewogI2lmZGVmIENBQ0hF
X0RFQlVHCkBAIC00MDEsNyArNDAwLDcgQEAKICAgICAgICAgaWYgKGNhY2hlRGlzYWJsZWQpCiAg
ICAgICAgICAgICBkb2MtPnNldEZyZWUodHJ1ZSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgY2FjaGUtPmluc2VydChrdXJsLnVybCgpLCBkb2MpOworICAgICAgICAgICAgY2FjaGUtPnNl
dChET01TdHJpbmcoa3VybC51cmwoKSkuaW1wbCgpLCBkb2MpOwogICAgICAgICAgICAgbW92ZVRv
SGVhZE9mTFJVTGlzdChkb2MpOwogICAgICAgICB9CiAgICAgICAgIG8gPSBkb2M7CkBAIC00NzAs
MTMgKzQ2OSwxMSBAQAogCiB2b2lkIENhY2hlOjpyZW1vdmVDYWNoZUVudHJ5KCBDYWNoZWRPYmpl
Y3QgKm9iamVjdCApCiB7Ci0gIFFTdHJpbmcga2V5ID0gb2JqZWN0LT51cmwoKS5xc3RyaW5nKCk7
Ci0KICAgLy8gdGhpcyBpbmRpY2F0ZXMgdGhlIGRlcmVmKCkgbWV0aG9kIG9mIENhY2hlZE9iamVj
dCB0byBkZWxldGUgaXRzZWxmIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudGVyCiAgIC8vIGRyb3Bz
IGRvd24gdG8gemVybwotICBvYmplY3QtPnNldEZyZWUoIHRydWUgKTsKKyAgb2JqZWN0LT5zZXRG
cmVlKHRydWUpOwogCi0gIGNhY2hlLT5yZW1vdmUoIGtleSApOworICBjYWNoZS0+cmVtb3ZlKG9i
amVjdC0+dXJsKCkuaW1wbCgpKTsKICAgcmVtb3ZlRnJvbUxSVUxpc3Qob2JqZWN0KTsKIAogICBj
b25zdCBEb2NMb2FkZXIqIGRsOwpAQCAtNjEyLDkgKzYwOSw5IEBACiAgICAgaWYgKCFjYWNoZSkK
ICAgICAgICAgcmV0dXJuIHN0YXRzOwogCi0gICAgUURpY3RJdGVyYXRvcjxDYWNoZWRPYmplY3Q+
IGkoKmNhY2hlKTsKLSAgICBmb3IgKGkudG9GaXJzdCgpOyBpLmN1cnJlbnQoKTsgKytpKSB7Ci0g
ICAgICAgIENhY2hlZE9iamVjdCAqbyA9IGkuY3VycmVudCgpOworICAgIENhY2hlTWFwOjppdGVy
YXRvciBlID0gY2FjaGUtPmVuZCgpOworICAgIGZvciAoQ2FjaGVNYXA6Oml0ZXJhdG9yIGkgPSBj
YWNoZS0+YmVnaW4oKTsgaSAhPSBlOyArK2kpIHsKKyAgICAgICAgQ2FjaGVkT2JqZWN0ICpvID0g
aS0+c2Vjb25kOwogICAgICAgICBzd2l0Y2ggKG8tPnR5cGUoKSkgewogICAgICAgICAgICAgY2Fz
ZSBDYWNoZWRPYmplY3Q6OkltYWdlOgogICAgICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5jb3Vu
dCsrOwpAQCAtNjU3LDExICs2NTQsMTAgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICg7
OykgewotICAgICAgICBRRGljdEl0ZXJhdG9yPENhY2hlZE9iamVjdD4gaSgqY2FjaGUpOwotICAg
ICAgICBDYWNoZWRPYmplY3QgKm8gPSBpLnRvRmlyc3QoKTsKLSAgICAgICAgaWYgKCFvKQorICAg
ICAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaSA9IGNhY2hlLT5iZWdpbigpOworICAgICAgICBpZiAo
aSA9PSBjYWNoZS0+ZW5kKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmVtb3ZlQ2Fj
aGVFbnRyeShvKTsKKyAgICAgICAgcmVtb3ZlQ2FjaGVFbnRyeShpLT5zZWNvbmQpOwogICAgIH0K
IH0KIApAQCAtNjcxLDMgKzY2NywxMCBAQAogICAgIGlmIChkaXNhYmxlZCkKICAgICAgICAgZmx1
c2hBbGwoKTsKIH0KKworQ2FjaGVkT2JqZWN0KiBDYWNoZTo6Z2V0KERPTVN0cmluZ0ltcGwqIHMp
Cit7CisgICAgcmV0dXJuIGNhY2hlID8gY2FjaGUtPmdldChzKSA6IDA7Cit9CisKK30KSW5kZXg6
IGtodG1sL21pc2MvRG9jTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9taXNjL0RvY0xv
YWRlci5jcHAJKHJldmlzaW9uIDEyMDcyKQorKysga2h0bWwvbWlzYy9Eb2NMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBACiAgICAgewogICAgICAgIGlmICghbV9yZWxv
YWRlZFVSTHMuY29udGFpbnMoZnVsbFVSTC51cmwoKSkpCiAgICAgICAgewotICAgICAgICAgIENh
Y2hlZE9iamVjdCAqZXhpc3RpbmcgPSBDYWNoZTo6Y2FjaGUtPmZpbmQoZnVsbFVSTC51cmwoKSk7
CisgICAgICAgICAgQ2FjaGVkT2JqZWN0KiBleGlzdGluZyA9IENhY2hlOjpnZXQoRE9NU3RyaW5n
KGZ1bGxVUkwudXJsKCkpLmltcGwoKSk7CiAgICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0
aW5nLT5pc0V4cGlyZWQoKSkKICAgICAgICAgICB7CiAgICAgICAgICAgICAgQ2FjaGU6OnJlbW92
ZUNhY2hlRW50cnkoZXhpc3RpbmcpOwpAQCAtODcsMTEgKzg3LDkgQEAKICAgICB7CiAgICAgICAg
aWYgKCFtX3JlbG9hZGVkVVJMcy5jb250YWlucyhmdWxsVVJMLnVybCgpKSkKICAgICAgICB7Ci0g
ICAgICAgICAgQ2FjaGVkT2JqZWN0ICpleGlzdGluZyA9IENhY2hlOjpjYWNoZS0+ZmluZChmdWxs
VVJMLnVybCgpKTsKKyAgICAgICAgICBDYWNoZWRPYmplY3QqIGV4aXN0aW5nID0gQ2FjaGU6Omdl
dChET01TdHJpbmcoZnVsbFVSTC51cmwoKSkuaW1wbCgpKTsKICAgICAgICAgICBpZiAoZXhpc3Rp
bmcpCi0gICAgICAgICAgewogICAgICAgICAgICAgIENhY2hlOjpyZW1vdmVDYWNoZUVudHJ5KGV4
aXN0aW5nKTsKLSAgICAgICAgICB9CiAgICAgICAgICAgbV9yZWxvYWRlZFVSTHMuYXBwZW5kKGZ1
bGxVUkwudXJsKCkpOwogICAgICAgICAgIHJlbG9hZCA9IHRydWU7CiAgICAgICAgfQpJbmRleDog
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAkocmV2aXNpb24gMTIwNzIpCisrKyBraHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KICAqICAgICAg
ICAgICAoQykgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSAoMVN0ZWluQGdteC5kZSkKLSAqIENvcHly
aWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIyLDM0ICsyMiwzNSBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICov
Ci0vLyNkZWZpbmUgREVCVUdfTEFZT1VUCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJyZW5kZXJfZnJhbWVzLmgiCi0jaW5jbHVkZSAicmVuZGVyX2NhbnZhcy5oIgorCisjaW5jbHVk
ZSAiRG9jdW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfYmFzZWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0
bWxfb2JqZWN0aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbHRva2VuaXplci5oIgorI2luY2x1
ZGUgInJlbmRlcl9hcmVuYS5oIgorI2luY2x1ZGUgInJlbmRlcl9jYW52YXMuaCIKKyNpbmNsdWRl
ICJ4bWwvRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKLSNp
bmNsdWRlICJEb2N1bWVudEltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCi0j
aW5jbHVkZSAieG1sL0V2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNs
dWRlICJGcmFtZS5oIgotI2luY2x1ZGUgInJlbmRlcl9hcmVuYS5oIgotCiAjaW5jbHVkZSA8a2N1
cnNvci5oPgorI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtsb2NhbGUuaD4KLSNpbmNs
dWRlIDxrZGVidWcuaD4KKyNpbmNsdWRlIDxxcGFpbnRlci5oPgogI2luY2x1ZGUgPHF0aW1lci5o
PgotI2luY2x1ZGUgPHFwYWludGVyLmg+Ci0jaW5jbHVkZSAicWRpY3QuaCIKIAotdXNpbmcgbmFt
ZXNwYWNlIGtodG1sOwogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBFdmVu
dE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorLy8jZGVmaW5lIERFQlVHX0xB
WU9VVAorCituYW1lc3BhY2Uga2h0bWwgeworCiBSZW5kZXJGcmFtZVNldDo6UmVuZGVyRnJhbWVT
ZXQoIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsICpmcmFtZVNldCkKICAgICA6IFJlbmRlckNvbnRh
aW5lcihmcmFtZVNldCkKIHsKQEAgLTMzMCw3ICszMzEsNyBAQAogCiAgICAgUmVuZGVyT2JqZWN0
ICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICBpZiAoICFjaGlsZCApCi0JZ290byBlbmQyOwor
ICAgICAgICBnb3RvIGVuZDI7CiAKICAgICBpZighbV9oU3BsaXRWYXIgJiYgIW1fdlNwbGl0VmFy
KQogICAgIHsKQEAgLTQyMCw3ICs0MjEsNyBAQAogICAgICAgICAgIGNoaWxkLT5zZXRXaWR0aCgg
bV9ncmlkTGF5b3V0WzFdW2NdICk7CiAgICAgICAgICAgY2hpbGQtPnNldEhlaWdodCggbV9ncmlk
TGF5b3V0WzBdW3JdICk7CiAgICAgICAgICAgY2hpbGQtPnNldE5lZWRzTGF5b3V0KHRydWUpOwot
CSAgY2hpbGQtPmxheW91dCgpOworICAgICAgICAgIGNoaWxkLT5sYXlvdXQoKTsKICAgICAgIH0K
IAogICAgICAgeFBvcyArPSBtX2dyaWRMYXlvdXRbMV1bY10gKyBlbGVtZW50KCktPmJvcmRlcigp
OwpAQCAtNjUxLDcgKzY1Miw3IEBACiBSZW5kZXJQYXJ0Ojp+UmVuZGVyUGFydCgpCiB7CiAgICAg
aWYgKG1fd2lkZ2V0ICYmIG1fd2lkZ2V0LT5pbmhlcml0cygiS0hUTUxWaWV3IikpIHsKLQlzdGF0
aWNfY2FzdDxLSFRNTFZpZXcgKj4obV93aWRnZXQpLT5kZXJlZigpOworICAgICAgICBzdGF0aWNf
Y2FzdDxLSFRNTFZpZXcgKj4obV93aWRnZXQpLT5kZXJlZigpOwogICAgIH0KIH0KIApAQCAtNjYy
LDE5ICs2NjMsMTkgQEAKICNlbmRpZgogICAgIAogICAgIGlmICh3aWRnZXQgPT0gbV93aWRnZXQp
IHsKLQlyZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobV93aWRnZXQg
JiYgbV93aWRnZXQtPmluaGVyaXRzKCJLSFRNTFZpZXciKSkgewotCXN0YXRpY19jYXN0PEtIVE1M
VmlldyAqPihtX3dpZGdldCktPmRlcmVmKCk7CisgICAgICAgIHN0YXRpY19jYXN0PEtIVE1MVmll
dyAqPihtX3dpZGdldCktPmRlcmVmKCk7CiAgICAgfQogICAgIAotICAgIGlmICh3aWRnZXQgJiYg
d2lkZ2V0LT5pbmhlcml0cygiS0hUTUxWaWV3IikpIHsJCi0Jc3RhdGljX2Nhc3Q8S0hUTUxWaWV3
ICo+KHdpZGdldCktPnJlZigpOwotCXNldFFXaWRnZXQoIHdpZGdldCwgZmFsc2UgKTsKLQljb25u
ZWN0KCB3aWRnZXQsIFNJR05BTCggY2xlYXJlZCgpICksIHRoaXMsIFNMT1QoIHNsb3RWaWV3Q2xl
YXJlZCgpICkgKTsKKyAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+aW5oZXJpdHMoIktIVE1MVmll
dyIpKSB7CisgICAgICAgIHN0YXRpY19jYXN0PEtIVE1MVmlldyAqPih3aWRnZXQpLT5yZWYoKTsK
KyAgICAgICAgc2V0UVdpZGdldCggd2lkZ2V0LCBmYWxzZSApOworICAgICAgICBjb25uZWN0KCB3
aWRnZXQsIFNJR05BTCggY2xlYXJlZCgpICksIHRoaXMsIFNMT1QoIHNsb3RWaWV3Q2xlYXJlZCgp
ICkgKTsKICAgICB9IGVsc2UgewotCXNldFFXaWRnZXQoIHdpZGdldCApOworICAgICAgICBzZXRR
V2lkZ2V0KCB3aWRnZXQgKTsKICAgICB9CiAgICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNh
bGMoKTsKICAgICAKQEAgLTczNiw3ICs3MzcsNyBAQAogICAgIG5ld1VSTC5zZXRSZWYoUVN0cmlu
Zzo6bnVsbCk7CiAgICAgCiAgICAgaWYgKGRvYy0+ZnJhbWUoKS0+dG9wTGV2ZWxGcmFtZUNvdW50
KCkgPj0gMjAwKQotCXJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ly8gV2UgYWxsb3cgb25lIGxldmVsIG9mIHNlbGYtcmVmZXJlbmNlIGJlY2F1c2Ugc29tZSBzaXRl
cyBkZXBlbmQgb24gdGhhdC4KICAgICAvLyBCdXQgd2UgZG9uJ3QgYWxsb3cgbW9yZSB0aGFuIG9u
ZS4KQEAgLTgzMiw3ICs4MzMsNyBAQAogICAgICAgICAgIHNlcnZpY2VUeXBlID0gby0+c2Vydmlj
ZVR5cGU7CiAgICAgICB9CiAgICAgICAKLSAgICAgIFFEaWN0PGJvb2w+IHVuaXF1ZVBhcmFtTmFt
ZXMoNSwgZmFsc2UpOworICAgICAgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgQ2FzZUluc2Vuc2l0
aXZlSGFzaD4gdW5pcXVlUGFyYW1OYW1lczsKICAgICAgIAogICAgICAgLy8gU2NhbiB0aGUgUEFS
QU0gY2hpbGRyZW4uCiAgICAgICAvLyBHZXQgdGhlIFVSTCBhbmQgdHlwZSBmcm9tIHRoZSBwYXJh
bXMgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIHRoZW0uCkBAIC04NDAsNyArODQxLDcgQEAKICAg
ICAgIE5vZGVJbXBsICpjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsKICAgICAgIHdoaWxlIChjaGls
ZCAmJiAodXJsLmlzRW1wdHkoKSB8fCBzZXJ2aWNlVHlwZS5pc0VtcHR5KCkgfHwgIWVtYmVkKSkg
ewogICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShwYXJhbVRhZykpIHsKLSAgICAgICAg
ICAgICAgSFRNTFBhcmFtRWxlbWVudEltcGwgKnAgPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVt
ZW50SW1wbCAqPiggY2hpbGQgKTsKKyAgICAgICAgICAgICAgSFRNTFBhcmFtRWxlbWVudEltcGwg
KnAgPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAqPihjaGlsZCk7CiAgICAgICAg
ICAgICAgIERPTVN0cmluZyBuYW1lID0gcC0+bmFtZSgpLmxvd2VyKCk7CiAgICAgICAgICAgICAg
IGlmICh1cmwuaXNFbXB0eSgpICYmIChuYW1lID09ICJzcmMiIHx8IG5hbWUgPT0gIm1vdmllIiB8
fCBuYW1lID09ICJjb2RlIiB8fCBuYW1lID09ICJ1cmwiKSkKICAgICAgICAgICAgICAgICAgIHVy
bCA9IHAtPnZhbHVlKCkucXN0cmluZygpOwpAQCAtODUyLDggKzg1Myw3IEBACiAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKCFlbWJlZCkgewot
ICAgICAgICAgICAgICAgICAgYm9vbCBkdW1teVZhbHVlID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgIHVuaXF1ZVBhcmFtTmFtZXMuaW5zZXJ0KHAtPm5hbWUoKS5xc3RyaW5nKCksICZkdW1teVZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgIHVuaXF1ZVBhcmFtTmFtZXMuaW5zZXJ0KHAtPm5hbWUo
KS5pbXBsKCkpOwogICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQocC0+bmFtZSgp
LnFzdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQocC0+dmFs
dWUoKS5xc3RyaW5nKCkpOwogICAgICAgICAgICAgICB9CkBAIC04NjYsOSArODY2LDEwIEBACiAg
ICAgICAvLyBpbiBhIFBBUkFNIHRhZy4gU2VlIDxodHRwOi8vamF2YS5zdW4uY29tL3Byb2R1Y3Rz
L3BsdWdpbi8xLjIvZG9jcy90YWdzLmh0bWw+LiBUaGlzIG1lYW5zCiAgICAgICAvLyB3ZSBoYXZl
IHRvIGV4cGxpY2l0bHkgc3VwcHJlc3MgdGhlIHRhZydzIENPREVCQVNFIGF0dHJpYnV0ZSBpZiB0
aGVyZSBpcyBub25lIGluIGEgUEFSQU0sCiAgICAgICAvLyBlbHNlIG91ciBKYXZhIHBsdWdpbiB3
aWxsIG1pc2ludGVycHJldCBpdC4gWzQwMDQ1MzFdCisgICAgICBET01TdHJpbmcgY29kZWJhc2U7
CiAgICAgICBpZiAoIWVtYmVkICYmIHNlcnZpY2VUeXBlLmxvd2VyKCkgPT0gImFwcGxpY2F0aW9u
L3gtamF2YS1hcHBsZXQiKSB7Ci0gICAgICAgICAgYm9vbCBkdW1teVZhbHVlID0gdHJ1ZTsKLSAg
ICAgICAgICB1bmlxdWVQYXJhbU5hbWVzLmluc2VydCgiY29kZWJhc2UiLCAmZHVtbXlWYWx1ZSk7
IC8vIHByZXRlbmQgd2UgZm91bmQgaXQgaW4gYSBQQVJBTSBhbHJlYWR5CisgICAgICAgICAgY29k
ZWJhc2UgPSAiY29kZWJhc2UiOworICAgICAgICAgIHVuaXF1ZVBhcmFtTmFtZXMuaW5zZXJ0KGNv
ZGViYXNlLmltcGwoKSk7IC8vIHByZXRlbmQgd2UgZm91bmQgaXQgaW4gYSBQQVJBTSBhbHJlYWR5
CiAgICAgICB9CiAgICAgICAKICAgICAgIC8vIFR1cm4gdGhlIGF0dHJpYnV0ZXMgb2YgZWl0aGVy
IHRoZSBFTUJFRCB0YWcgb3IgT0JKRUNUIHRhZyBpbnRvIGFycmF5cywgYnV0IGRvbid0IG92ZXJy
aWRlIFBBUkFNIHZhbHVlcy4KQEAgLTg3Niw5ICs4NzcsOSBAQAogICAgICAgaWYgKGF0dHJpYnV0
ZXMpIHsKICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVu
Z3RoKCk7ICsraSkgewogICAgICAgICAgICAgICBBdHRyaWJ1dGVJbXBsKiBpdCA9IGF0dHJpYnV0
ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgICAgICAgIFFTdHJpbmcgbmFtZSA9IGl0LT5u
YW1lKCkubG9jYWxOYW1lKCkucXN0cmluZygpOwotICAgICAgICAgICAgICBpZiAoZW1iZWQgfHwg
dW5pcXVlUGFyYW1OYW1lcy5maW5kKG5hbWUpID09IDApIHsKLSAgICAgICAgICAgICAgICAgIHBh
cmFtTmFtZXMuYXBwZW5kKG5hbWUpOworICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUgPSBpdC0+bmFtZSgpLmxvY2FsTmFtZSgpOworICAgICAgICAgICAgICBpZiAoZW1iZWQg
fHwgdW5pcXVlUGFyYW1OYW1lcy5jb250YWlucyhuYW1lLmltcGwoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKG5hbWUucXN0cmluZygpKTsKICAgICAgICAgICAgICAg
ICAgIHBhcmFtVmFsdWVzLmFwcGVuZChpdC0+dmFsdWUoKS5xc3RyaW5nKCkpOwogICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgfQpAQCAtOTMyLDE0ICs5MzMsMTQgQEAKICAgICAgIGlmICghaXNV
UkxBbGxvd2VkKGRvY3VtZW50KCksIHVybCkpCiAgICAgICAgICAgcmV0dXJuOwogICAgICAgaWYg
KHVybC5pc0VtcHR5KCkpCi0JICB1cmwgPSAiYWJvdXQ6YmxhbmsiOworICAgICAgICAgIHVybCA9
ICJhYm91dDpibGFuayI7CiAgICAgICBLSFRNTFZpZXcgKnYgPSBzdGF0aWNfY2FzdDxLSFRNTFZp
ZXcgKj4obV92aWV3KTsKICAgICAgIGJvb2wgcmVxdWVzdFN1Y2NlZWRlZCA9IHYtPmZyYW1lKCkt
PnJlcXVlc3RGcmFtZSggdGhpcywgdXJsLCBvLT5tX25hbWUucXN0cmluZygpLCBRU3RyaW5nTGlz
dCgpLCBRU3RyaW5nTGlzdCgpLCB0cnVlICk7CiAgICAgICBpZiAocmVxdWVzdFN1Y2NlZWRlZCAm
JiB1cmwgPT0gImFib3V0OmJsYW5rIikgewotCSAgRnJhbWUgKm5ld1BhcnQgPSB2LT5mcmFtZSgp
LT5maW5kRnJhbWUoIG8tPm1fbmFtZS5xc3RyaW5nKCkgKTsKLQkgIGlmIChuZXdQYXJ0ICYmIG5l
d1BhcnQtPnhtbERvY0ltcGwoKSkgewotCSAgICAgIG5ld1BhcnQtPnhtbERvY0ltcGwoKS0+c2V0
QmFzZVVSTCggdi0+ZnJhbWUoKS0+YmFzZVVSTCgpLnVybCgpICk7Ci0JICB9CisgICAgICAgICAg
RnJhbWUgKm5ld1BhcnQgPSB2LT5mcmFtZSgpLT5maW5kRnJhbWUoIG8tPm1fbmFtZS5xc3RyaW5n
KCkgKTsKKyAgICAgICAgICBpZiAobmV3UGFydCAmJiBuZXdQYXJ0LT54bWxEb2NJbXBsKCkpIHsK
KyAgICAgICAgICAgICAgbmV3UGFydC0+eG1sRG9jSW1wbCgpLT5zZXRCYXNlVVJMKCB2LT5mcmFt
ZSgpLT5iYXNlVVJMKCkudXJsKCkgKTsKKyAgICAgICAgICB9CiAgICAgICB9CiAgIH0KIH0KQEAg
LTk3MCwxMiArOTcxLDEyIEBACiAgICAgICBpbnQgbWFyZ2ludyA9IC0xOwogICAgICAgaW50IG1h
cmdpbmggPSAtMTsKICAgICAgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkg
ewotCSAgSFRNTElGcmFtZUVsZW1lbnRJbXBsICpmcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxJRnJh
bWVFbGVtZW50SW1wbCAqPihlbGVtZW50KCkpOwotCSAgaWYoZnJhbWUtPm1fZnJhbWVCb3JkZXIp
Ci0JICAgICAgZnJhbWVTdHlsZSA9IFFGcmFtZTo6Qm94OworICAgICAgICAgIEhUTUxJRnJhbWVF
bGVtZW50SW1wbCAqZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgKj4o
ZWxlbWVudCgpKTsKKyAgICAgICAgICBpZihmcmFtZS0+bV9mcmFtZUJvcmRlcikKKyAgICAgICAg
ICAgICAgZnJhbWVTdHlsZSA9IFFGcmFtZTo6Qm94OwogICAgICAgICAgIHNjcm9sbCA9IGZyYW1l
LT5tX3Njcm9sbGluZzsKLQkgIG1hcmdpbncgPSBmcmFtZS0+bV9tYXJnaW5XaWR0aDsKLQkgIG1h
cmdpbmggPSBmcmFtZS0+bV9tYXJnaW5IZWlnaHQ7CisgICAgICAgICAgbWFyZ2ludyA9IGZyYW1l
LT5tX21hcmdpbldpZHRoOworICAgICAgICAgIG1hcmdpbmggPSBmcmFtZS0+bV9tYXJnaW5IZWln
aHQ7CiAgICAgICB9CiAgICAgICB2aWV3LT5zZXRGcmFtZVN0eWxlKGZyYW1lU3R5bGUpOwogCkBA
IC0xMDE5LDMgKzEwMjAsNSBAQAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8S0hUTUxWaWV3Kj4o
dmlldyktPmxheW91dCgpOwogICAgIH0KIH0KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjoga2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogYWxsb3ctdGFi
cwogICAtIHgKCkluZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjA3
MikKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTg4LDggKzE4OCw2IEBACiAJCTkzRjE5OTJGMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FDdXJz
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4
Njg0MDJERTNCODYwMUVBNDEyMiAvKiBLV1FDdXJzb3IuaCAqLzsgfTsKIAkJOTNGMTk5MzIwODI0
NUU1OTAwMUU5QUJDIC8qIEtXUURhdGVUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODY4NTAyREUzQjg2MDFFQTQxMjIgLyogS1dRRGF0ZVRp
bWUuaCAqLzsgfTsKIAkJOTNGMTk5MzMwODI0NUU1OTAwMUU5QUJDIC8qIEtXUURlZi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0REEwMkRFMzc1
OTAxRUE0MTIyIC8qIEtXUURlZi5oICovOyB9OwotCQk5M0YxOTkzNDA4MjQ1RTU5MDAxRTlBQkMg
LyogS1dRRGljdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjU4Nzg2ODYwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUURpY3QuaCAqLzsgfTsKLQkJOTNGMTk5
MzUwODI0NUU1OTAwMUU5QUJDIC8qIEtXUURpY3RJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODREQjAyREUzNzU5MDFFQTQxMjIgLyogS1dR
RGljdEltcGwuaCAqLzsgfTsKIAkJOTNGMTk5MzcwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODY4
ODAyREUzQjg2MDFFQTQxMjIgLyogS1dRRXZlbnQuaCAqLzsgfTsKIAkJOTNGMTk5MzgwODI0NUU1
OTAwMUU5QUJDIC8qIEtXUUZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY1ODc4Njg5MDJERTNCODYwMUVBNDEyMiAvKiBLV1FGaWxlLmggKi87IH07
CiAJCTkzRjE5OTM5MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FGaWxlQnV0dG9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NDRjdENDAzM0JENDNDMDA4
NjM1Q0UgLyogS1dRRmlsZUJ1dHRvbi5oICovOyB9OwpAQCAtMzczLDcgKzM3MSw2IEBACiAJCTkz
RjE5QTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FDU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NEQ1MDJERTM3NTkwMUVBNDEyMiAv
KiBLV1FDU3RyaW5nLmNwcCAqLzsgfTsKIAkJOTNGMTlBMTkwODI0NUU1OTAwMUU5QUJDIC8qIEtX
UUN1cnNvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY1ODc4NEQ2MDJERTM3NTkwMUVBNDEyMiAvKiBLV1FDdXJzb3IubW0gKi87IH07CiAJCTkzRjE5
QTFBMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FEYXRlVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODRENzAyREUzNzU5MDFFQTQxMjIgLyog
S1dRRGF0ZVRpbWUuY3BwICovOyB9OwotCQk5M0YxOUExQjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dR
RGljdEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjU4Nzg0REMwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUURpY3RJbXBsLmNwcCAqLzsgfTsKIAkJ
OTNGMTlBMUMwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUV2ZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0REUwMkRFMzc1OTAxRUE0MTIyIC8q
IEtXUUV2ZW50Lm1tICovOyB9OwogCQk5M0YxOUExRDA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRRmls
ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4
NERGMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FGaWxlLm1tICovOyB9OwogCQk5M0YxOUExRTA4MjQ1
RTU5MDAxRTlBQkMgLyogS1dRRm9udC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1ODc4NEUwMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FGb250Lm1tICov
OyB9OwpAQCAtNzk4LDggKzc5NSw2IEBACiAJCUE4OEFEMTc3MDk1MjQ4MEEwMDFERDE5NiAvKiBL
V1FDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY1ODc4Njg0MDJERTNCODYwMUVBNDEyMiAvKiBLV1FDdXJzb3IuaCAqLzsgfTsKIAkJQTg4QUQx
NzkwOTUyNDgwQTAwMUREMTk2IC8qIEtXUURhdGVUaW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODY4NTAyREUzQjg2MDFFQTQxMjIgLyogS1dR
RGF0ZVRpbWUuaCAqLzsgfTsKIAkJQTg4QUQxN0EwOTUyNDgwQTAwMUREMTk2IC8qIEtXUURlZi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0REEw
MkRFMzc1OTAxRUE0MTIyIC8qIEtXUURlZi5oICovOyB9OwotCQlBODhBRDE3QjA5NTI0ODBBMDAx
REQxOTYgLyogS1dRRGljdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjU4Nzg2ODYwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUURpY3QuaCAqLzsgfTsKLQkJ
QTg4QUQxN0MwOTUyNDgwQTAwMUREMTk2IC8qIEtXUURpY3RJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODREQjAyREUzNzU5MDFFQTQxMjIg
LyogS1dRRGljdEltcGwuaCAqLzsgfTsKIAkJQTg4QUQxN0UwOTUyNDgwQTAwMUREMTk2IC8qIEtX
UUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODY4ODAyREUzQjg2MDFFQTQxMjIgLyogS1dRRXZlbnQuaCAqLzsgfTsKIAkJQTg4QUQxN0Yw
OTUyNDgwQTAwMUREMTk2IC8qIEtXUUZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4Njg5MDJERTNCODYwMUVBNDEyMiAvKiBLV1FGaWxlLmgg
Ki87IH07CiAJCUE4OEFEMTgwMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FGaWxlQnV0dG9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NDRjdENDAzM0JE
NDNDMDA4NjM1Q0UgLyogS1dRRmlsZUJ1dHRvbi5oICovOyB9OwpAQCAtMTAyNSw3ICsxMDIwLDYg
QEAKIAkJQTg4QUQyNzUwOTUyNDgwQTAwMUREMTk2IC8qIEtXUUNTdHJpbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0RDUwMkRFMzc1OTAx
RUE0MTIyIC8qIEtXUUNTdHJpbmcuY3BwICovOyB9OwogCQlBODhBRDI3NjA5NTI0ODBBMDAxREQx
OTYgLyogS1dRQ3Vyc29yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjU4Nzg0RDYwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUN1cnNvci5tbSAqLzsgfTsK
IAkJQTg4QUQyNzcwOTUyNDgwQTAwMUREMTk2IC8qIEtXUURhdGVUaW1lLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NEQ3MDJERTM3NTkwMUVB
NDEyMiAvKiBLV1FEYXRlVGltZS5jcHAgKi87IH07Ci0JCUE4OEFEMjc4MDk1MjQ4MEEwMDFERDE5
NiAvKiBLV1FEaWN0SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTg3ODREQzAyREUzNzU5MDFFQTQxMjIgLyogS1dRRGljdEltcGwuY3BwICov
OyB9OwogCQlBODhBRDI3OTA5NTI0ODBBMDAxREQxOTYgLyogS1dRRXZlbnQubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODRERTAyREUzNzU5MDFF
QTQxMjIgLyogS1dRRXZlbnQubW0gKi87IH07CiAJCUE4OEFEMjdBMDk1MjQ4MEEwMDFERDE5NiAv
KiBLV1FGaWxlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjU4Nzg0REYwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUZpbGUubW0gKi87IH07CiAJCUE4OEFE
MjdCMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FGb250Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg0RTAwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUZv
bnQubW0gKi87IH07CkBAIC0yNjY2LDggKzI2NjAsNiBAQAogCQlGNTg3ODRENjAyREUzNzU5MDFF
QTQxMjIgLyogS1dRQ3Vyc29yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gS1dRQ3Vyc29yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg0RDcwMkRFMzc1OTAx
RUE0MTIyIC8qIEtXUURhdGVUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtXUURhdGVUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NERBMDJERTM3
NTkwMUVBNDEyMiAvKiBLV1FEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gS1dRRGVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTg3ODREQjAyREUzNzU5MDFFQTQxMjIgLyog
S1dRRGljdEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gS1dRRGljdEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1ODc4NERDMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FE
aWN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBLV1FEaWN0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODRERTAyREUzNzU5MDFFQTQxMjIgLyog
S1dRRXZlbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBLV1FFdmVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NERGMDJERTM3NTkwMUVBNDEyMiAvKiBL
V1FGaWxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gS1dRRmlsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NEUwMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FG
b250Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gS1dRRm9udC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CkBAIC0yNzczLDcgKzI3NjUsNiBAQAogCQlGNTg3ODY4MzAyREUz
Qjg2MDFFQTQxMjIgLyogS1dRQ1N0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBLV1FDU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODY4NDAyREUzQjg2MDFF
QTQxMjIgLyogS1dRQ3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEtXUUN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg2ODUwMkRFM0I4NjAxRUE0MTIyIC8q
IEtXUURhdGVUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEtXUURhdGVUaW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTg3ODY4NjAyREUzQjg2MDFFQTQxMjIgLyogS1dR
RGljdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBLV1FEaWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwogCQlGNTg3ODY4ODAyREUzQjg2MDFFQTQxMjIgLyogS1dRRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS1dRRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCUY1ODc4Njg5MDJERTNCODYwMUVBNDEyMiAvKiBLV1FGaWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUUZpbGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NjhB
MDJERTNCODYwMUVBNDEyMiAvKiBLV1FGb250LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUUZvbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC00MjcwLDkgKzQyNjEsNiBAQAog
CQkJCUY1ODc4NEQ2MDJERTM3NTkwMUVBNDEyMiAvKiBLV1FDdXJzb3IubW0gKi8sCiAJCQkJRjU4
Nzg2ODUwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUURhdGVUaW1lLmggKi8sCiAJCQkJRjU4Nzg0RDcw
MkRFMzc1OTAxRUE0MTIyIC8qIEtXUURhdGVUaW1lLmNwcCAqLywKLQkJCQlGNTg3ODY4NjAyREUz
Qjg2MDFFQTQxMjIgLyogS1dRRGljdC5oICovLAotCQkJCUY1ODc4NERCMDJERTM3NTkwMUVBNDEy
MiAvKiBLV1FEaWN0SW1wbC5oICovLAotCQkJCUY1ODc4NERDMDJERTM3NTkwMUVBNDEyMiAvKiBL
V1FEaWN0SW1wbC5jcHAgKi8sCiAJCQkJRjU4Nzg2ODgwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUUV2
ZW50LmggKi8sCiAJCQkJRjU4Nzg0REUwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUV2ZW50Lm1tICov
LAogCQkJCUY1ODc4Njg5MDJERTNCODYwMUVBNDEyMiAvKiBLV1FGaWxlLmggKi8sCkBAIC00NDc2
LDggKzQ0NjQsNiBAQAogCQkJCTkzRjE5OTJGMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FDdXJzb3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTMyMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FEYXRl
VGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5MzMwODI0NUU1OTAwMUU5QUJDIC8qIEtX
UURlZi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTNGMTk5MzQwODI0NUU1OTAwMUU5QUJDIC8qIEtX
UURpY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzRjE5OTM1MDgyNDVFNTkwMDFFOUFCQyAvKiBL
V1FEaWN0SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5MzcwODI0NUU1OTAwMUU5QUJD
IC8qIEtXUUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTkzODA4MjQ1RTU5MDAxRTlB
QkMgLyogS1dRRmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5MzkwODI0NUU1OTAwMUU5
QUJDIC8qIEtXUUZpbGVCdXR0b24uaCBpbiBIZWFkZXJzICovLApAQCAtNTAwMiw4ICs0OTg4LDYg
QEAKIAkJCQlBODhBRDE3NzA5NTI0ODBBMDAxREQxOTYgLyogS1dRQ3Vyc29yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODhBRDE3OTA5NTI0ODBBMDAxREQxOTYgLyogS1dRRGF0ZVRpbWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4OEFEMTdBMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FEZWYuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUE4OEFEMTdCMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FEaWN0LmggaW4g
SGVhZGVycyAqLywKLQkJCQlBODhBRDE3QzA5NTI0ODBBMDAxREQxOTYgLyogS1dRRGljdEltcGwu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEMTdFMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FFdmVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQxN0YwOTUyNDgwQTAwMUREMTk2IC8qIEtXUUZp
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEMTgwMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FG
aWxlQnV0dG9uLmggaW4gSGVhZGVycyAqLywKQEAgLTYzMzIsNyArNjMxNiw2IEBACiAJCQkJOTNG
MTlBMTgwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTNGMTlBMTkwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUN1cnNvci5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTkzRjE5QTFBMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FEYXRlVGltZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk5M0YxOUExQjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRRGljdEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBMUMwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUV2ZW50
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBMUQwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUZp
bGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUExRTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dR
Rm9udC5tbSBpbiBTb3VyY2VzICovLApAQCAtNjc4OSw3ICs2NzcyLDYgQEAKIAkJCQlBODhBRDI3
NTA5NTI0ODBBMDAxREQxOTYgLyogS1dRQ1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
ODhBRDI3NjA5NTI0ODBBMDAxREQxOTYgLyogS1dRQ3Vyc29yLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTg4QUQyNzcwOTUyNDgwQTAwMUREMTk2IC8qIEtXUURhdGVUaW1lLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUE4OEFEMjc4MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FEaWN0SW1wbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBODhBRDI3OTA5NTI0ODBBMDAxREQxOTYgLyogS1dRRXZlbnQubW0g
aW4gU291cmNlcyAqLywKIAkJCQlBODhBRDI3QTA5NTI0ODBBMDAxREQxOTYgLyogS1dRRmlsZS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEMjdCMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FGb250
Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRG9jdW1lbnRJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRG9jdW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTIw
NzIpCisrKyBrc3ZnMi9zdmcvU1ZHRG9jdW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsOCArMjMsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgog
Ci0jaW5jbHVkZSA8cTNkaWN0Lmg+Ci0KICNpbmNsdWRlIDxrdXJsLmg+CiAjaW5jbHVkZSA8a2xv
Y2FsZS5oPgogCkluZGV4OiBicmlkZ2UvbWFjL01hY0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYnJp
ZGdlL21hYy9NYWNGcmFtZS5oCShyZXZpc2lvbiAxMjA3MikKKysrIGJyaWRnZS9tYWMvTWFjRnJh
bWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjEgKzI3LDE3IEBACiAjZGVmaW5lIE1hY0ZyYW1l
X0gKIAogI2luY2x1ZGUgIkZyYW1lLmgiCi0KKyNpbmNsdWRlICJLV1FDbGlwYm9hcmQuaCIKKyNp
bmNsdWRlICJLV1FTY3JvbGxCYXIuaCIKKyNpbmNsdWRlICJXZWJDb3JlS2V5Ym9hcmRBY2Nlc3Mu
aCIKKyNpbmNsdWRlICJkb21fbm9kZWltcGwuaCIKICNpbmNsdWRlICJ0ZXh0X2FmZmluaXR5Lmgi
CisjaW5jbHVkZSA8a3htbGNvcmUvSGFzaFNldC5oPgogCi0jaW5jbHVkZSAiZG9tX25vZGVpbXBs
LmgiCi0KLSNpbmNsdWRlICJXZWJDb3JlS2V5Ym9hcmRBY2Nlc3MuaCIKLQogI2lmIF9fQVBQTEVf
XwogI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KICNlbmRpZgogCi0j
aW5jbHVkZSAiS1dRRGljdC5oIgotI2luY2x1ZGUgIktXUUNsaXBib2FyZC5oIgotI2luY2x1ZGUg
IktXUVNjcm9sbEJhci5oIgotCiBjbGFzcyBGcmFtZVByaXZhdGU7CiBjbGFzcyBLV1FXaW5kb3dX
aWRnZXQ7CiBjbGFzcyBOUE9iamVjdDsKQEAgLTI2MCw4ICsyNTYsOCBAQAogICAgIAogICAgIFdl
YkNvcmVLZXlib2FyZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpIGNvbnN0OwogCi0gICAgdm9pZCBk
aWRUZWxsQnJpZGdlQWJvdXRMb2FkKGNvbnN0IFFTdHJpbmcgJnVybFN0cmluZyk7Ci0gICAgYm9v
bCBoYXZlVG9sZEJyaWRnZUFib3V0TG9hZChjb25zdCBRU3RyaW5nICZ1cmxTdHJpbmcpOworICAg
IHZvaWQgZGlkVGVsbEJyaWRnZUFib3V0TG9hZChjb25zdCBET006OkRPTVN0cmluZyYgVVJMKTsK
KyAgICBib29sIGhhdmVUb2xkQnJpZGdlQWJvdXRMb2FkKGNvbnN0IERPTTo6RE9NU3RyaW5nJiBV
UkwpOwogCiAgICAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKmdldEVtYmVkSW5zdGFuY2VGb3JX
aWRnZXQoUVdpZGdldCopOwogICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpnZXRPYmplY3RJ
bnN0YW5jZUZvcldpZGdldChRV2lkZ2V0Kik7CkBAIC0zNjAsNyArMzU2LDcgQEAKIAogICAgIGJv
b2wgX2hhdmVVbmRvUmVkb09wZXJhdGlvbnM7CiAgICAgCi0gICAgUURpY3Q8Y2hhcj4gdXJsc0Jy
aWRnZUtub3dzQWJvdXQ7CisgICAgSGFzaFNldDxSZWZQdHI8RE9NOjpET01TdHJpbmdJbXBsPiA+
IHVybHNCcmlkZ2VLbm93c0Fib3V0OwogCiAgICAgZnJpZW5kIGNsYXNzIEZyYW1lOwogCkluZGV4
OiBicmlkZ2UvbWFjL01hY0ZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvTWFjRnJh
bWUubW0JKHJldmlzaW9uIDEyMDcyKQorKysgYnJpZGdlL21hYy9NYWNGcmFtZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzA3NSwxNSArMzA3NSwxNCBAQAogICAgIHJldHVybiBXZWJDb3JlS2V5Ym9h
cmRBY2Nlc3NEZWZhdWx0OwogfQogCi12b2lkIE1hY0ZyYW1lOjpkaWRUZWxsQnJpZGdlQWJvdXRM
b2FkKGNvbnN0IFFTdHJpbmcgJnVybFN0cmluZykKK3ZvaWQgTWFjRnJhbWU6OmRpZFRlbGxCcmlk
Z2VBYm91dExvYWQoY29uc3QgRE9NOjpET01TdHJpbmcmIFVSTCkKIHsKLSAgICBzdGF0aWMgY2hh
ciBkdW1teTsKLSAgICB1cmxzQnJpZGdlS25vd3NBYm91dC5pbnNlcnQodXJsU3RyaW5nLCAmZHVt
bXkpOworICAgIHVybHNCcmlkZ2VLbm93c0Fib3V0Lmluc2VydChVUkwuaW1wbCgpKTsKIH0KIAot
Ym9vbCBNYWNGcmFtZTo6aGF2ZVRvbGRCcmlkZ2VBYm91dExvYWQoY29uc3QgUVN0cmluZyAmdXJs
U3RyaW5nKQorYm9vbCBNYWNGcmFtZTo6aGF2ZVRvbGRCcmlkZ2VBYm91dExvYWQoY29uc3QgRE9N
OjpET01TdHJpbmcmIFVSTCkKIHsKLSAgICByZXR1cm4gdXJsc0JyaWRnZUtub3dzQWJvdXQuZmlu
ZCh1cmxTdHJpbmcpICE9IDA7CisgICAgcmV0dXJuIHVybHNCcmlkZ2VLbm93c0Fib3V0LmNvbnRh
aW5zKFVSTC5pbXBsKCkpOwogfQogCiB2b2lkIE1hY0ZyYW1lOjpjbGVhcigpCkluZGV4OiBGb3J3
YXJkaW5nSGVhZGVycy9xZGljdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEZvcndhcmRpbmdIZWFkZXJzL3Fk
aWN0LmgJKHJldmlzaW9uIDEyMDcyKQorKysgRm9yd2FyZGluZ0hlYWRlcnMvcWRpY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiS1dRRGljdC5oIgpJbmRleDogRm9y
d2FyZGluZ0hlYWRlcnMvcTNkaWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gRm9yd2FyZGluZ0hlYWRlcnMv
cTNkaWN0LmgJKHJldmlzaW9uIDEyMDcyKQorKysgRm9yd2FyZGluZ0hlYWRlcnMvcTNkaWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEgKzAsMCBAQAotI2ltcG9ydCAiS1dRRGljdC5oIgpJbmRleDog
a3dxL0tXUUxvYWRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRTG9hZGVyLm1tCShyZXZpc2lv
biAxMjA3MikKKysrIGt3cS9LV1FMb2FkZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3
LDcgQEAKICAgICBOU1N0cmluZyAqbGFzdEhlYWRlck5hbWUgPSBuaWw7CiAKICAgICB3aGlsZSAo
TlNTdHJpbmcgKmxpbmUgPSAoTlNTdHJpbmcgKilbZSBuZXh0T2JqZWN0XSkgewotCWlmIChbbGlu
ZSBsZW5ndGhdKSB7CisgICAgICAgIGlmIChbbGluZSBsZW5ndGhdKSB7CiAgICAgICAgICAgICB1
bmljaGFyIGZpcnN0Q2hhciA9IFtsaW5lIGNoYXJhY3RlckF0SW5kZXg6MF07CiAgICAgICAgICAg
ICBpZiAoKGZpcnN0Q2hhciA9PSAnICcgfHwgZmlyc3RDaGFyID09ICdcdCcpICYmIGxhc3RIZWFk
ZXJOYW1lICE9IG5pbCkgewogICAgICAgICAgICAgICAgIC8vIGxpbmVzIHRoYXQgc3RhcnQgd2l0
aCBzcGFjZSBvciB0YWIgY29udGludWUgdGhlIHByZXZpb3VzIGhlYWRlciB2YWx1ZQpAQCAtNzgs
MjQgKzc4LDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yS2V5Omxhc3RIZWFk
ZXJOYW1lXTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLQl9Cisg
ICAgICAgIH0KIAotCU5TUmFuZ2UgY29sb25SYW5nZSA9IFtsaW5lIHJhbmdlT2ZTdHJpbmc6QCI6
Il07Ci0JaWYgKGNvbG9uUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewotCSAgICAvLyBk
b24ndCB3b3JyeSBhYm91dCBjYXNlLCBhc3N1bWUgbG93ZXIgbGV2ZWxzIHdpbGwgdGFrZSBjYXJl
IG9mIGl0CisgICAgICAgIE5TUmFuZ2UgY29sb25SYW5nZSA9IFtsaW5lIHJhbmdlT2ZTdHJpbmc6
QCI6Il07CisgICAgICAgIGlmIChjb2xvblJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpIHsK
KyAgICAgICAgICAgIC8vIGRvbid0IHdvcnJ5IGFib3V0IGNhc2UsIGFzc3VtZSBsb3dlciBsZXZl
bHMgd2lsbCB0YWtlIGNhcmUgb2YgaXQKIAotCSAgICBOU1N0cmluZyAqaGVhZGVyTmFtZSA9IFtb
bGluZSBzdWJzdHJpbmdUb0luZGV4OmNvbG9uUmFuZ2UubG9jYXRpb25dIHN0cmluZ0J5VHJpbW1p
bmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IGNoYXJhY3RlclNldFdpdGhDaGFyYWN0
ZXJzSW5TdHJpbmc6QCIgXHQiXV07Ci0JICAgIE5TU3RyaW5nICpoZWFkZXJWYWx1ZSA9IFtbbGlu
ZSBzdWJzdHJpbmdGcm9tSW5kZXg6Y29sb25SYW5nZS5sb2NhdGlvbiArIDFdIHN0cmluZ0J5VHJp
bW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IGNoYXJhY3RlclNldFdpdGhDaGFy
YWN0ZXJzSW5TdHJpbmc6QCIgXHQiXV07Ci0JICAgIAotCSAgICBOU1N0cmluZyAqb2xkVmFsID0g
W2hlYWRlcnMgb2JqZWN0Rm9yS2V5OmhlYWRlck5hbWVdOwotCSAgICBpZiAob2xkVmFsKSB7Ci0J
CWhlYWRlclZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCwgJUAiLCBvbGRW
YWwsIGhlYWRlclZhbHVlXTsKLQkgICAgfQorICAgICAgICAgICAgTlNTdHJpbmcgKmhlYWRlck5h
bWUgPSBbW2xpbmUgc3Vic3RyaW5nVG9JbmRleDpjb2xvblJhbmdlLmxvY2F0aW9uXSBzdHJpbmdC
eVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNldCBjaGFyYWN0ZXJTZXRXaXRo
Q2hhcmFjdGVyc0luU3RyaW5nOkAiIFx0Il1dOworICAgICAgICAgICAgTlNTdHJpbmcgKmhlYWRl
clZhbHVlID0gW1tsaW5lIHN1YnN0cmluZ0Zyb21JbmRleDpjb2xvblJhbmdlLmxvY2F0aW9uICsg
MV0gc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgY2hhcmFj
dGVyU2V0V2l0aENoYXJhY3RlcnNJblN0cmluZzpAIiBcdCJdXTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTlNTdHJpbmcgKm9sZFZhbCA9IFtoZWFkZXJzIG9iamVjdEZvcktleTpoZWFkZXJO
YW1lXTsKKyAgICAgICAgICAgIGlmIChvbGRWYWwpIHsKKyAgICAgICAgICAgICAgICBoZWFkZXJW
YWx1ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAsICVAIiwgb2xkVmFsLCBoZWFk
ZXJWYWx1ZV07CisgICAgICAgICAgICB9CiAKLQkgICAgW2hlYWRlcnMgc2V0T2JqZWN0OmhlYWRl
clZhbHVlIGZvcktleTpoZWFkZXJOYW1lXTsKLQkgICAgCi0JICAgIGxhc3RIZWFkZXJOYW1lID0g
aGVhZGVyTmFtZTsKLQl9CisgICAgICAgICAgICBbaGVhZGVycyBzZXRPYmplY3Q6aGVhZGVyVmFs
dWUgZm9yS2V5OmhlYWRlck5hbWVdOworICAgICAgICAgICAgCisgICAgICAgICAgICBsYXN0SGVh
ZGVyTmFtZSA9IGhlYWRlck5hbWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICBOU0RpY3Rpb25h
cnkgKmRpY3Rpb25hcnkgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoRGljdGlvbmFyeTpo
ZWFkZXJzXTsKQEAgLTEyMywxNCArMTIzLDE0IEBACiAgICAgUVN0cmluZyBoZWFkZXJTdHJpbmcg
PSBqb2ItPnF1ZXJ5TWV0YURhdGEoImN1c3RvbUhUVFBIZWFkZXIiKTsKIAogICAgIGlmICghaGVh
ZGVyU3RyaW5nLmlzRW1wdHkoKSkgewotCWhlYWRlckRpY3QgPSBbTlNEaWN0aW9uYXJ5IF93ZWJj
b3JlX2RpY3Rpb25hcnlXaXRoSGVhZGVyU3RyaW5nOmhlYWRlclN0cmluZy5nZXROU1N0cmluZygp
XTsKKyAgICAgICAgaGVhZGVyRGljdCA9IFtOU0RpY3Rpb25hcnkgX3dlYmNvcmVfZGljdGlvbmFy
eVdpdGhIZWFkZXJTdHJpbmc6aGVhZGVyU3RyaW5nLmdldE5TU3RyaW5nKCldOwogICAgIH0KIAog
ICAgIGlmIChqb2ItPm1ldGhvZCgpID09ICJQT1NUIikgewotCWhhbmRsZSA9IFticmlkZ2Ugc3Rh
cnRMb2FkaW5nUmVzb3VyY2U6cmVzb3VyY2VMb2FkZXIgd2l0aFVSTDpqb2ItPnVybCgpLmdldE5T
VVJMKCkgY3VzdG9tSGVhZGVyczpoZWFkZXJEaWN0CisgICAgICAgIGhhbmRsZSA9IFticmlkZ2Ug
c3RhcnRMb2FkaW5nUmVzb3VyY2U6cmVzb3VyY2VMb2FkZXIgd2l0aFVSTDpqb2ItPnVybCgpLmdl
dE5TVVJMKCkgY3VzdG9tSGVhZGVyczpoZWFkZXJEaWN0CiAgICAgICAgICAgICBwb3N0RGF0YTph
cnJheUZyb21Gb3JtRGF0YShqb2ItPnBvc3REYXRhKCkpXTsKICAgICB9IGVsc2UgewotCWhhbmRs
ZSA9IFticmlkZ2Ugc3RhcnRMb2FkaW5nUmVzb3VyY2U6cmVzb3VyY2VMb2FkZXIgd2l0aFVSTDpq
b2ItPnVybCgpLmdldE5TVVJMKCkgY3VzdG9tSGVhZGVyczpoZWFkZXJEaWN0XTsKKyAgICAgICAg
aGFuZGxlID0gW2JyaWRnZSBzdGFydExvYWRpbmdSZXNvdXJjZTpyZXNvdXJjZUxvYWRlciB3aXRo
VVJMOmpvYi0+dXJsKCkuZ2V0TlNVUkwoKSBjdXN0b21IZWFkZXJzOmhlYWRlckRpY3RdOwogICAg
IH0KICAgICBbcmVzb3VyY2VMb2FkZXIgc2V0SGFuZGxlOmhhbmRsZV07CiAgICAgW3Jlc291cmNl
TG9hZGVyIHJlbGVhc2VdOwpAQCAtMTUxLDE2ICsxNTEsMTYgQEAKICAgICBib29sIGZpcnN0ID0g
dHJ1ZTsKICAgICAKICAgICB3aGlsZSAoKGtleSA9IFtlIG5leHRPYmplY3RdKSAhPSBuaWwpIHsK
LQlpZiAoZmlyc3QpIHsKLQkgICAgZmlyc3QgPSBmYWxzZTsKLQl9IGVsc2UgewotCSAgICBbaGVh
ZGVyU3RyaW5nIGFwcGVuZFN0cmluZzpAIlxuIl07Ci0JfQotCVtoZWFkZXJTdHJpbmcgYXBwZW5k
U3RyaW5nOmtleV07Ci0JW2hlYWRlclN0cmluZyBhcHBlbmRTdHJpbmc6QCI6ICJdOwotCVtoZWFk
ZXJTdHJpbmcgYXBwZW5kU3RyaW5nOltoZWFkZXJzIG9iamVjdEZvcktleTprZXldXTsKKyAgICAg
ICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgW2hlYWRlclN0cmluZyBhcHBlbmRTdHJpbmc6QCJcbiJdOworICAg
ICAgICB9CisgICAgICAgIFtoZWFkZXJTdHJpbmcgYXBwZW5kU3RyaW5nOmtleV07CisgICAgICAg
IFtoZWFkZXJTdHJpbmcgYXBwZW5kU3RyaW5nOkAiOiAiXTsKKyAgICAgICAgW2hlYWRlclN0cmlu
ZyBhcHBlbmRTdHJpbmc6W2hlYWRlcnMgb2JqZWN0Rm9yS2V5OmtleV1dOwogICAgIH0KLQkKKyAg
ICAgICAgCiAgICAgcmV0dXJuIGhlYWRlclN0cmluZzsKIH0KIApAQCAtMTc3LDEyICsxNzcsMTIg
QEAKICAgICBRU3RyaW5nIGhlYWRlclN0cmluZyA9IGpvYi0+cXVlcnlNZXRhRGF0YSgiY3VzdG9t
SFRUUEhlYWRlciIpOwogCiAgICAgaWYgKCFoZWFkZXJTdHJpbmcuaXNFbXB0eSgpKSB7Ci0JaGVh
ZGVyRGljdCA9IFtbTlNEaWN0aW9uYXJ5IF93ZWJjb3JlX2RpY3Rpb25hcnlXaXRoSGVhZGVyU3Ry
aW5nOmhlYWRlclN0cmluZy5nZXROU1N0cmluZygpXSByZXRhaW5dOworICAgICAgICBoZWFkZXJE
aWN0ID0gW1tOU0RpY3Rpb25hcnkgX3dlYmNvcmVfZGljdGlvbmFyeVdpdGhIZWFkZXJTdHJpbmc6
aGVhZGVyU3RyaW5nLmdldE5TU3RyaW5nKCldIHJldGFpbl07CiAgICAgfQogCiAgICAgTlNBcnJh
eSAqcG9zdERhdGEgPSBuaWw7CiAgICAgaWYgKGpvYi0+bWV0aG9kKCkgPT0gIlBPU1QiKSB7Ci0J
cG9zdERhdGEgPSBhcnJheUZyb21Gb3JtRGF0YShqb2ItPnBvc3REYXRhKCkpOworICAgICAgICBw
b3N0RGF0YSA9IGFycmF5RnJvbUZvcm1EYXRhKGpvYi0+cG9zdERhdGEoKSk7CiAgICAgfQogCiAg
ICAgTlNVUkwgKmZpbmFsTlNVUkwgPSBuaWw7CkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAvLyBO
b3RpZnkgdGhlIGNhbGxlciB0aGF0IHdlICJsb2FkZWQiLgogICAgIE1hY0ZyYW1lICpmcmFtZSA9
IHN0YXRpY19jYXN0PE1hY0ZyYW1lICo+KGxvYWRlci0+ZnJhbWUoKSk7CiAKLSAgICBpZiAoIWZy
YW1lLT5oYXZlVG9sZEJyaWRnZUFib3V0TG9hZChjYWNoZWRPYmplY3QtPnVybCgpLnFzdHJpbmco
KSkpIHsKKyAgICBpZiAoIWZyYW1lLT5oYXZlVG9sZEJyaWRnZUFib3V0TG9hZChjYWNoZWRPYmpl
Y3QtPnVybCgpKSkgewogICAgICAgICBXZWJDb3JlRnJhbWVCcmlkZ2UgKmJyaWRnZSA9IGZyYW1l
LT5icmlkZ2UoKTsKICAgICAgICAgCiAgICAgICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwpAQCAt
MjUyLDcgKzI1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YTooTlNEYXRhICopY2FjaGVkT2JqZWN0LT5hbGxEYXRhKCldOwogICAgICAgICBLV1FfVU5C
TE9DS19FWENFUFRJT05TOwogCi0gICAgICAgIGZyYW1lLT5kaWRUZWxsQnJpZGdlQWJvdXRMb2Fk
KGNhY2hlZE9iamVjdC0+dXJsKCkucXN0cmluZygpKTsKKyAgICAgICAgZnJhbWUtPmRpZFRlbGxC
cmlkZ2VBYm91dExvYWQoY2FjaGVkT2JqZWN0LT51cmwoKSk7CiAgICAgfQogfQogCkBAIC0yODEs
NyArMjgxLDcgQEAKICAgICAKICAgICBib29sIHJldCA9IGZhbHNlOwogICAgIGlmKCFtZW1jbXAo
dXJsU3RyaW5nQ2hhcmFjdGVycywgbV91cmwudW5pY29kZSgpLCBtX3VybC5sZW5ndGgoKSpzaXpl
b2YoUUNoYXIpKSkKLQlyZXQgPSB0cnVlOworICAgICAgICByZXQgPSB0cnVlOwogICAgIAogICAg
IGlmICh1cmxTdHJpbmdDaGFyYWN0ZXJzICE9IF9idWZmZXIpCiAgICAgICAgIGZhc3RGcmVlKHVy
bFN0cmluZ0NoYXJhY3RlcnMpOwoKUHJvcGVydHkgY2hhbmdlcyBvbjoga3dxL0tXUUxvYWRlci5t
bQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk5hbWU6IGFsbG93LXRhYnMKICAgLSB4CgpJbmRleDoga3dxL0tXUURpY3RJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRRGljdEltcGwuY3BwCShyZXZpc2lvbiAxMjA3
MikKKysrIGt3cS9LV1FEaWN0SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIktX
UURpY3RJbXBsLmgiCi0KLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5o
PgotCi1LV1FEaWN0SW1wbDo6S1dRRGljdEltcGwoaW50IHNpemUsIGJvb2wgY2FzZVNlbnNpdGl2
ZSwgdm9pZCAoKmRlbGV0ZUZ1bmMpKHZvaWQgKikpIDoKLSAgICBLV1FQdHJEaWN0SW1wbChzaXpl
LCBkZWxldGVGdW5jLCAma0NGQ29weVN0cmluZ0RpY3Rpb25hcnlLZXlDYWxsQmFja3MpLCBtX2Nh
c2VTZW5zaXRpdmUoY2FzZVNlbnNpdGl2ZSkKLXsKLX0KLQotdm9pZCBLV1FEaWN0SW1wbDo6aW5z
ZXJ0KGNvbnN0IFFTdHJpbmcgJmtleSwgY29uc3Qgdm9pZCAqdmFsdWUpCi17Ci0gICAgS1dRUHRy
RGljdEltcGw6Omluc2VydCgodm9pZCAqKShtX2Nhc2VTZW5zaXRpdmUgPyBrZXkgOiBrZXkubG93
ZXIoKSkuZ2V0Q0ZTdHJpbmcoKSwgdmFsdWUpOwotfQotCi1ib29sIEtXUURpY3RJbXBsOjpyZW1v
dmUoY29uc3QgUVN0cmluZyAma2V5LCBib29sIGRlbGV0ZUl0ZW0pCi17Ci0gICAgcmV0dXJuIEtX
UVB0ckRpY3RJbXBsOjpyZW1vdmUoKHZvaWQgKikobV9jYXNlU2Vuc2l0aXZlID8ga2V5IDoga2V5
Lmxvd2VyKCkpLmdldENGU3RyaW5nKCksIGRlbGV0ZUl0ZW0pOwotfQotCi12b2lkICpLV1FEaWN0
SW1wbDo6ZmluZChjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEtXUVB0
ckRpY3RJbXBsOjpmaW5kKCh2b2lkICopKG1fY2FzZVNlbnNpdGl2ZSA/IGtleSA6IGtleS5sb3dl
cigpKS5nZXRDRlN0cmluZygpKTsKLX0KLQotUVN0cmluZyBLV1FEaWN0SXRlcmF0b3JJbXBsOjpj
dXJyZW50U3RyaW5nS2V5KCkgY29uc3QKLXsKLSAgICB2b2lkICprZXkgPSBjdXJyZW50S2V5KCk7
Ci0KLSAgICBpZiAoa2V5ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBRU3RyaW5nKCk7Ci0gICAg
ICAgIAotICAgIHJldHVybiBRU3RyaW5nOjpmcm9tQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWtleSk7
Ci19CkluZGV4OiBrd3EvS1dRS1VSTC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRS1VSTC5tbQko
cmV2aXNpb24gMTIwNzIpCisrKyBrd3EvS1dRS1VSTC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUz
LDEyICsyNTMsMTIgQEAKICAgICAgICAgYnVmZmVyWzNdID0gJ2UnOwogICAgICAgICBidWZmZXJb
NF0gPSAnOic7CiAgICAgICAgIG1lbWNweSgmYnVmZmVyWzVdLCB1cmwsIHVybExlbmd0aCk7Ci0J
cGFyc2UoYnVmZmVyLCBOVUxMKTsKKyAgICAgICAgcGFyc2UoYnVmZmVyLCBOVUxMKTsKICAgICAg
ICAgaWYgKGJ1ZmZlciAhPSBzdGF0aWNCdWZmZXIpIHsKICAgICAgICAgICAgIGZhc3RGcmVlKGJ1
ZmZlcik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotCXBhcnNlKHVybCwgTlVMTCk7CisgICAg
ICAgIHBhcnNlKHVybCwgTlVMTCk7CiAgICAgfQogfQogCkBAIC0yNzksMTIgKzI3OSwxMiBAQAog
ICAgICAgICBidWZmZXJbM10gPSAnZSc7CiAgICAgICAgIGJ1ZmZlcls0XSA9ICc6JzsKICAgICAg
ICAgdXJsLmNvcHlMYXRpbjEoJmJ1ZmZlcls1XSk7Ci0JcGFyc2UoYnVmZmVyLCBOVUxMKTsKKyAg
ICAgICAgcGFyc2UoYnVmZmVyLCBOVUxMKTsKICAgICAgICAgaWYgKGJ1ZmZlciAhPSBzdGF0aWNC
dWZmZXIpIHsKICAgICAgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewotCXBhcnNlKHVybC5hc2NpaSgpLCAmdXJsKTsKKyAgICAgICAgcGFyc2UodXJsLmFz
Y2lpKCksICZ1cmwpOwogICAgIH0KIH0KIApAQCAtMzAyLDcgKzMwMiw3IEBACiAgICAgICAgIH0K
ICAgICAgICAgY2hhciAqYnl0ZXMgPSAmYnVmZmVyWzVdOwogICAgICAgICBDRlVSTEdldEJ5dGVz
KChDRlVSTFJlZil1cmwsIChVSW50OCAqKWJ5dGVzLCBieXRlc0xlbmd0aCk7Ci0JYnl0ZXNbYnl0
ZXNMZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgYnl0ZXNbYnl0ZXNMZW5ndGhdID0gJ1wwJzsKICAg
ICAgICAgaWYgKGJ5dGVzWzBdID09ICcvJykgewogICAgICAgICAgICAgYnVmZmVyWzBdID0gJ2Yn
OwogICAgICAgICAgICAgYnVmZmVyWzFdID0gJ2knOwpAQCAtMzM2LDcgKzMzNiw3IEBACiAgICAg
UVN0cmluZyBzdWJzdGl0dXRlZFJlbGF0aXZlOwogICAgIGJvb2wgY29udGFpbnNCYWNrc2xhc2gg
PSByZWxhdGl2ZS5jb250YWlucygnXFwnKTsKICAgICBpZiAoY29udGFpbnNCYWNrc2xhc2gpIHsK
LQlzdWJzdGl0dXRlZFJlbGF0aXZlID0gc3Vic3RpdHV0ZUJhY2tzbGFzaGVzKHJlbGF0aXZlKTsK
KyAgICAgICAgc3Vic3RpdHV0ZWRSZWxhdGl2ZSA9IHN1YnN0aXR1dGVCYWNrc2xhc2hlcyhyZWxh
dGl2ZSk7CiAgICAgfQogCiAgICAgY29uc3QgUVN0cmluZyAmcmVsID0gY29udGFpbnNCYWNrc2xh
c2ggPyBzdWJzdGl0dXRlZFJlbGF0aXZlIDogcmVsYXRpdmU7CkBAIC0zOTYsOTEgKzM5Niw5MSBA
QAogICAgIH0KIAogICAgIGlmIChhYnNvbHV0ZSkgewotCXBhcnNlKHN0ciwgKGFsbEFTQ0lJICYm
ICFzdHJpcHBlZFN0YXJ0ICYmIChjaGFyc1RvQ2hvcE9mZkVuZCA9PSAwKSkgPyAmcmVsIDogMCk7
CisgICAgICAgIHBhcnNlKHN0ciwgKGFsbEFTQ0lJICYmICFzdHJpcHBlZFN0YXJ0ICYmIChjaGFy
c1RvQ2hvcE9mZkVuZCA9PSAwKSkgPyAmcmVsIDogMCk7CiAgICAgfSBlbHNlIHsKLQkvLyBpZiB0
aGUgYmFzZSBpcyBpbnZhbGlkLCBqdXN0IGFwcGVuZCB0aGUgcmVsYXRpdmUKLQkvLyBwb3J0aW9u
LiBUaGUgUkZDIGRvZXMgbm90IHNwZWNpZnkgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UuCi0JaWYg
KCFiYXNlLm1faXNWYWxpZCkgewotCSAgICBRU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5n
ICsgc3RyOwotCSAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgIC8v
IGlmIHRoZSBiYXNlIGlzIGludmFsaWQsIGp1c3QgYXBwZW5kIHRoZSByZWxhdGl2ZQorICAgICAg
ICAvLyBwb3J0aW9uLiBUaGUgUkZDIGRvZXMgbm90IHNwZWNpZnkgd2hhdCB0byBkbyBpbiB0aGlz
IGNhc2UuCisgICAgICAgIGlmICghYmFzZS5tX2lzVmFsaWQpIHsKKyAgICAgICAgICAgIFFTdHJp
bmcgbmV3VVJMID0gYmFzZS51cmxTdHJpbmcgKyBzdHI7CisgICAgICAgICAgICBwYXJzZShuZXdV
UkwuYXNjaWkoKSwgJm5ld1VSTCk7CiAgICAgICAgICAgICBpZiAoc3RyQnVmZmVyKSB7CiAgICAg
ICAgICAgICAgICAgZmFzdEZyZWUoc3RyQnVmZmVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybjsKLQl9CisgICAgICAgIH0KIAotCXN3aXRjaChzdHJbMF0pIHsKLQljYXNlICdc
MCc6Ci0JICAgIC8vIHRoZSByZWZlcmVuY2UgbXVzdCBiZSBlbXB0eSAtIHRoZSBSRkMgc2F5cyB0
aGlzIGlzIGEKLQkgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBzYW1lIGRvY3VtZW50Ci0JICAgIHsK
LQkJKnRoaXMgPSBiYXNlOwotCQlicmVhazsKLQkgICAgfQotCWNhc2UgJyMnOgotCSAgICAvLyBt
dXN0IGJlIGZyYWdtZW50LW9ubHkgcmVmZXJlbmNlCi0JICAgIHsKLQkJUVN0cmluZyBuZXdVUkwg
PSBiYXNlLnVybFN0cmluZy5sZWZ0KGJhc2UucXVlcnlFbmRQb3MpICsgc3RyOwotCQlwYXJzZShu
ZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JY2FzZSAnPyc6Cisg
ICAgICAgIHN3aXRjaChzdHJbMF0pIHsKKyAgICAgICAgY2FzZSAnXDAnOgorICAgICAgICAgICAg
Ly8gdGhlIHJlZmVyZW5jZSBtdXN0IGJlIGVtcHR5IC0gdGhlIFJGQyBzYXlzIHRoaXMgaXMgYQor
ICAgICAgICAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSBzYW1lIGRvY3VtZW50CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgKnRoaXMgPSBiYXNlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICBjYXNlICcjJzoKKyAgICAgICAgICAgIC8vIG11c3Qg
YmUgZnJhZ21lbnQtb25seSByZWZlcmVuY2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBRU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5nLmxlZnQoYmFzZS5xdWVyeUVuZFBvcykg
KyBzdHI7CisgICAgICAgICAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlICc/JzoK
ICAgICAgICAgICAgIC8vIHF1ZXJ5LW9ubHkgcmVmZXJlbmNlLCBzcGVjaWFsIGNhc2UgbmVlZGVk
IGZvciBub24tVVJMIHJlc3VsdHMKLQkgICAgewotCQlRU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJs
U3RyaW5nLmxlZnQoYmFzZS5wYXRoRW5kUG9zKSArIHN0cjsKLQkJcGFyc2UobmV3VVJMLmFzY2lp
KCksICZuZXdVUkwpOwotCQlicmVhazsKLQkgICAgfQotCWNhc2UgJy8nOgotCSAgICAvLyBtdXN0
IGJlIG5ldC1wYXRoIG9yIGFic29sdXRlLXBhdGggcmVmZXJlbmNlCi0JICAgIHsKLQkJaWYgKHN0
clsxXSA9PSAnLycpIHsKLQkJICAgIC8vIG5ldC1wYXRoCi0JCSAgICBRU3RyaW5nIG5ld1VSTCA9
IGJhc2UudXJsU3RyaW5nLmxlZnQoYmFzZS5zY2hlbWVFbmRQb3MgKyAxKSArIHN0cjsKLQkJICAg
IHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKLQkJfSBlbHNlIHsKLQkJICAgIC8vIGFi
cy1wYXRoCi0JCSAgICBRU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5nLmxlZnQoYmFzZS5w
b3J0RW5kUG9zKSArIHN0cjsKLQkJICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsK
LQkJfQotCQlicmVhazsKLQkgICAgfQotCWRlZmF1bHQ6Ci0JICAgIHsKLQkJLy8gbXVzdCBiZSBy
ZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFFT
dHJpbmcgbmV3VVJMID0gYmFzZS51cmxTdHJpbmcubGVmdChiYXNlLnBhdGhFbmRQb3MpICsgc3Ry
OworICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAnLyc6CisgICAg
ICAgICAgICAvLyBtdXN0IGJlIG5ldC1wYXRoIG9yIGFic29sdXRlLXBhdGggcmVmZXJlbmNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHN0clsxXSA9PSAnLycpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gbmV0LXBhdGgKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBu
ZXdVUkwgPSBiYXNlLnVybFN0cmluZy5sZWZ0KGJhc2Uuc2NoZW1lRW5kUG9zICsgMSkgKyBzdHI7
CisgICAgICAgICAgICAgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3VVJMKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBhYnMtcGF0aAor
ICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIG5ld1VSTCA9IGJhc2UudXJsU3RyaW5nLmxlZnQo
YmFzZS5wb3J0RW5kUG9zKSArIHN0cjsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2UobmV3VVJM
LmFzY2lpKCksICZuZXdVUkwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAvLyBtdXN0IGJlIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlCiAKLQkJY2hh
ciBzdGF0aWNCdWZmZXJbMjA0OF07Ci0JCWNoYXIgKmJ1ZmZlcjsKLQkJCisgICAgICAgICAgICAg
ICAgY2hhciBzdGF0aWNCdWZmZXJbMjA0OF07CisgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVy
OworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEJhc2UgcGFydCBwbHVzIHJl
bGF0aXZlIHBhcnQgcGx1cyBvbmUgcG9zc2libGUgc2xhc2ggYWRkZWQgaW4gYmV0d2VlbiBwbHVz
IHRlcm1pbmF0aW5nIFwwIGJ5dGUuCi0JCXNpemVfdCBidWZmZXJMZW5ndGggPSBiYXNlLnBhdGhF
bmRQb3MgKyAxICsgc3RybGVuKHN0cikgKyAxOworICAgICAgICAgICAgICAgIHNpemVfdCBidWZm
ZXJMZW5ndGggPSBiYXNlLnBhdGhFbmRQb3MgKyAxICsgc3RybGVuKHN0cikgKyAxOwogCi0JCWlm
IChidWZmZXJMZW5ndGggPiBzaXplb2Yoc3RhdGljQnVmZmVyKSkgewotCQkgICAgYnVmZmVyID0g
KGNoYXIgKilmYXN0TWFsbG9jKGJ1ZmZlckxlbmd0aCk7Ci0JCX0gZWxzZSB7Ci0JCSAgICBidWZm
ZXIgPSBzdGF0aWNCdWZmZXI7Ci0JCX0KLQkJCi0JCWNoYXIgKmJ1ZmZlclBvcyA9IGJ1ZmZlcjsK
LQkJCi0JCS8vIGZpcnN0IGNvcHkgZXZlcnl0aGluZyBiZWZvcmUgdGhlIHBhdGggZnJvbSB0aGUg
YmFzZQotCQljb25zdCBjaGFyICpiYXNlU3RyaW5nID0gYmFzZS51cmxTdHJpbmcuYXNjaWkoKTsK
LQkJY29uc3QgY2hhciAqYmFzZVN0cmluZ1N0YXJ0ID0gYmFzZVN0cmluZzsKLQkJY29uc3QgY2hh
ciAqcGF0aFN0YXJ0ID0gYmFzZVN0cmluZ1N0YXJ0ICsgYmFzZS5wb3J0RW5kUG9zOwotCQl3aGls
ZSAoYmFzZVN0cmluZ1N0YXJ0IDwgcGF0aFN0YXJ0KSB7Ci0JCSAgICAqYnVmZmVyUG9zKysgPSAq
YmFzZVN0cmluZ1N0YXJ0Kys7Ci0JCX0KKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyTGVuZ3Ro
ID4gc2l6ZW9mKHN0YXRpY0J1ZmZlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0g
KGNoYXIgKilmYXN0TWFsbG9jKGJ1ZmZlckxlbmd0aCk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gc3RhdGljQnVmZmVyOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjaGFyICpidWZmZXJQ
b3MgPSBidWZmZXI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gZmlyc3Qg
Y29weSBldmVyeXRoaW5nIGJlZm9yZSB0aGUgcGF0aCBmcm9tIHRoZSBiYXNlCisgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZyA9IGJhc2UudXJsU3RyaW5nLmFzY2lpKCk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ1N0YXJ0ID0gYmFzZVN0cmluZzsK
KyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoU3RhcnQgPSBiYXNlU3RyaW5nU3RhcnQg
KyBiYXNlLnBvcnRFbmRQb3M7CisgICAgICAgICAgICAgICAgd2hpbGUgKGJhc2VTdHJpbmdTdGFy
dCA8IHBhdGhTdGFydCkgeworICAgICAgICAgICAgICAgICAgICAqYnVmZmVyUG9zKysgPSAqYmFz
ZVN0cmluZ1N0YXJ0Kys7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNoYXIg
KmJ1ZmZlclBhdGhTdGFydCA9IGJ1ZmZlclBvczsKIAotCQkvLyBub3cgY29weSB0aGUgYmFzZSBw
YXRoIAotCQljb25zdCBjaGFyICpiYXNlU3RyaW5nRW5kID0gYmFzZVN0cmluZyArIGJhc2UucGF0
aEVuZFBvczsKLQkJCi0JCS8vIGdvIGJhY2sgdG8gdGhlIGxhc3Qgc2xhc2gKLQkJd2hpbGUgKGJh
c2VTdHJpbmdFbmQgPiBiYXNlU3RyaW5nU3RhcnQgJiYgYmFzZVN0cmluZ0VuZFstMV0gIT0gJy8n
KSB7Ci0JCSAgICBiYXNlU3RyaW5nRW5kLS07Ci0JCX0KLQkJCi0JCWlmIChiYXNlU3RyaW5nRW5k
ID09IGJhc2VTdHJpbmdTdGFydCkgeworICAgICAgICAgICAgICAgIC8vIG5vdyBjb3B5IHRoZSBi
YXNlIHBhdGggCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZVN0cmluZ0VuZCA9IGJh
c2VTdHJpbmcgKyBiYXNlLnBhdGhFbmRQb3M7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLy8gZ28gYmFjayB0byB0aGUgbGFzdCBzbGFzaAorICAgICAgICAgICAgICAgIHdoaWxl
IChiYXNlU3RyaW5nRW5kID4gYmFzZVN0cmluZ1N0YXJ0ICYmIGJhc2VTdHJpbmdFbmRbLTFdICE9
ICcvJykgeworICAgICAgICAgICAgICAgICAgICBiYXNlU3RyaW5nRW5kLS07CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChiYXNlU3RyaW5n
RW5kID09IGJhc2VTdHJpbmdTdGFydCkgewogICAgICAgICAgICAgICAgICAgICAvLyBubyBwYXRo
IGluIGJhc2UsIGFkZCBhIHBhdGggc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeQogICAgICAgICAgICAg
ICAgICAgICBpZiAoYmFzZS5zY2hlbWVFbmRQb3MgKyAxICE9IGJhc2UucGF0aEVuZFBvcyAmJiAq
c3RyICE9ICdcMCcgJiYgKnN0ciAhPSAnPycgJiYgKnN0ciAhPSAnIycpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICpidWZmZXJQb3MrKyA9ICcvJzsKQEAgLTQ4OSw1NyArNDg5LDU3IEBACiAg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcyArPSBjb3B5UGF0aFJlbW92aW5nRG90cyhidWZm
ZXJQb3MsIGJhc2VTdHJpbmdTdGFydCwgMCwgYmFzZVN0cmluZ0VuZCAtIGJhc2VTdHJpbmdTdGFy
dCk7CiAgICAgICAgICAgICAgICAgfQogCi0JCWNvbnN0IGNoYXIgKnJlbFN0cmluZ1N0YXJ0ID0g
c3RyOwotCQljb25zdCBjaGFyICpyZWxTdHJpbmdQb3MgPSByZWxTdHJpbmdTdGFydDsKLQkJCi0J
CXdoaWxlICgqcmVsU3RyaW5nUG9zICE9ICdcMCcgJiYgKnJlbFN0cmluZ1BvcyAhPSAnPycgJiYg
KnJlbFN0cmluZ1BvcyAhPSAnIycpIHsKLQkJICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy4n
ICYmIGJ1ZmZlclBvc1stMV0gPT0gJy8nKSB7Ci0JCQlpZiAoaXNQYXRoU2VnbWVudEVuZENoYXIo
cmVsU3RyaW5nUG9zWzFdKSkgewotCQkJICAgIC8vIHNraXAgb3ZlciAiLiIgc2VnbWVudAotCQkJ
ICAgIHJlbFN0cmluZ1BvcyArPSAxOwotCQkJICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy8n
KSB7Ci0JCQkJcmVsU3RyaW5nUG9zKys7Ci0JCQkgICAgfQotCQkJICAgIGNvbnRpbnVlOwotCQkJ
fSBlbHNlIGlmIChyZWxTdHJpbmdQb3NbMV0gPT0gJy4nICYmIGlzUGF0aFNlZ21lbnRFbmRDaGFy
KHJlbFN0cmluZ1Bvc1syXSkpIHsKLQkJCSAgICAvLyBza2lwIG92ZXIgIi4uIiBzZWdtZW50IGFu
ZCByZXdpbmQgdGhlIGxhc3Qgc2VnbWVudAotCQkJICAgIC8vIHRoZSBSRkMgbGVhdmVzIGl0IHVw
IHRvIHRoZSBhcHAgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCBleGNlc3MKLQkJCSAgICAvLyAi
Li4iIHNlZ21lbnRzIC0gd2UgY2hvb3NlIHRvIGRyb3AgdGhlbSBzaW5jZSBzb21lIHdlYiBjb250
ZW50Ci0JCQkgICAgLy8gcmVsaWVzIG9uIHRoaXMuCi0JCQkgICAgcmVsU3RyaW5nUG9zICs9IDI7
Ci0JCQkgICAgaWYgKHJlbFN0cmluZ1Bvc1swXSA9PSAnLycpIHsKLQkJCQlyZWxTdHJpbmdQb3Mr
KzsKLQkJCSAgICB9Ci0JCQkgICAgaWYgKGJ1ZmZlclBvcyA+IGJ1ZmZlclBhdGhTdGFydCArIDEp
IHsKLQkJCQlidWZmZXJQb3MtLTsKLQkJCSAgICB9Ci0JCQkgICAgd2hpbGUgKGJ1ZmZlclBvcyA+
IGJ1ZmZlclBhdGhTdGFydCArIDEgICYmIGJ1ZmZlclBvc1stMV0gIT0gJy8nKSB7Ci0JCQkJYnVm
ZmVyUG9zLS07Ci0JCQkgICAgfQotCQkJICAgIGNvbnRpbnVlOwotCQkJfQotCQkgICAgfQotCQkg
ICAgCi0JCSAgICAqYnVmZmVyUG9zID0gKnJlbFN0cmluZ1BvczsKLQkJICAgIHJlbFN0cmluZ1Bv
cysrOwotCQkgICAgYnVmZmVyUG9zKys7Ci0JCX0KKyAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpyZWxTdHJpbmdTdGFydCA9IHN0cjsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWxT
dHJpbmdQb3MgPSByZWxTdHJpbmdTdGFydDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoKnJlbFN0cmluZ1BvcyAhPSAnXDAnICYmICpyZWxTdHJpbmdQb3MgIT0gJz8n
ICYmICpyZWxTdHJpbmdQb3MgIT0gJyMnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWxT
dHJpbmdQb3NbMF0gPT0gJy4nICYmIGJ1ZmZlclBvc1stMV0gPT0gJy8nKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VnbWVudEVuZENoYXIocmVsU3RyaW5nUG9zWzFdKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciAiLiIgc2VnbWVudAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1BvcyArPSAxOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQb3NbMF0gPT0gJy8nKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1BvcysrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVsU3RyaW5nUG9zWzFdID09ICcuJyAm
JiBpc1BhdGhTZWdtZW50RW5kQ2hhcihyZWxTdHJpbmdQb3NbMl0pKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc2tpcCBvdmVyICIuLiIgc2VnbWVudCBhbmQgcmV3aW5kIHRoZSBs
YXN0IHNlZ21lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgUkZDIGxlYXZl
cyBpdCB1cCB0byB0aGUgYXBwIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggZXhjZXNzCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIi4uIiBzZWdtZW50cyAtIHdlIGNob29zZSB0byBk
cm9wIHRoZW0gc2luY2Ugc29tZSB3ZWIgY29udGVudAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHJlbGllcyBvbiB0aGlzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0
cmluZ1BvcyArPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxTdHJpbmdQ
b3NbMF0gPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbFN0cmlu
Z1BvcysrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYnVmZmVyUG9zID4gYnVmZmVyUGF0aFN0YXJ0ICsgMSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJQb3MtLTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlclBv
cyA+IGJ1ZmZlclBhdGhTdGFydCArIDEgICYmIGJ1ZmZlclBvc1stMV0gIT0gJy8nKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclBvcy0tOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlclBvcyA9ICpyZWxTdHJpbmdQ
b3M7CisgICAgICAgICAgICAgICAgICAgIHJlbFN0cmluZ1BvcysrOworICAgICAgICAgICAgICAg
ICAgICBidWZmZXJQb3MrKzsKKyAgICAgICAgICAgICAgICB9CiAKLQkJLy8gYWxsIGRvbmUgd2l0
aCB0aGUgcGF0aCB3b3JrLCBub3cgY29weSBhbnkgcmVtYWluZGVyCi0JCS8vIG9mIHRoZSByZWxh
dGl2ZSByZWZlcmVuY2U7IHRoaXMgd2lsbCBhbHNvIGFkZCBhIG51bGwgdGVybWluYXRvcgotCQlz
dHJjcHkoYnVmZmVyUG9zLCByZWxTdHJpbmdQb3MpOworICAgICAgICAgICAgICAgIC8vIGFsbCBk
b25lIHdpdGggdGhlIHBhdGggd29yaywgbm93IGNvcHkgYW55IHJlbWFpbmRlcgorICAgICAgICAg
ICAgICAgIC8vIG9mIHRoZSByZWxhdGl2ZSByZWZlcmVuY2U7IHRoaXMgd2lsbCBhbHNvIGFkZCBh
IG51bGwgdGVybWluYXRvcgorICAgICAgICAgICAgICAgIHN0cmNweShidWZmZXJQb3MsIHJlbFN0
cmluZ1Bvcyk7CiAKLQkJcGFyc2UoYnVmZmVyLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBwYXJz
ZShidWZmZXIsIE5VTEwpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFTU0VS
VChzdHJsZW4oYnVmZmVyKSArIDEgPD0gYnVmZmVyTGVuZ3RoKTsKLQkJCi0JCWlmIChidWZmZXIg
IT0gc3RhdGljQnVmZmVyKSB7Ci0JCSAgICBmYXN0RnJlZShidWZmZXIpOwotCQl9Ci0JCQotCQli
cmVhazsKLQkgICAgfQotCX0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
YnVmZmVyICE9IHN0YXRpY0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBmYXN0RnJlZShi
dWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBp
ZiAoc3RyQnVmZmVyKSB7CkBAIC01NTUsNyArNTU1LDcgQEAKIFFTdHJpbmcgS1VSTDo6cHJvdG9j
b2woKSBjb25zdAogewogICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0JcmV0dXJuIFFTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKICAgICB9CiAKICAgICByZXR1cm4gdXJsU3RyaW5n
LmxlZnQoc2NoZW1lRW5kUG9zKTsKQEAgLTU2NCw3ICs1NjQsNyBAQAogUVN0cmluZyBLVVJMOjpo
b3N0KCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxpZCkgewotCXJldHVybiBRU3RyaW5nKCk7
CisgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CiAgICAgfQogCiAgICAgaW50IHN0YXJ0ID0gKHBh
c3N3b3JkRW5kUG9zID09IHVzZXJTdGFydFBvcykgPyBwYXNzd29yZEVuZFBvcyA6IHBhc3N3b3Jk
RW5kUG9zICsgMTsKQEAgLTU3NCwxNiArNTc0LDE2IEBACiB1bnNpZ25lZCBzaG9ydCBpbnQgS1VS
TDo6cG9ydCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLQlyZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgaWYgKGhvc3RFbmRQb3MgIT0gcG9ydEVuZFBv
cykgewotCWJvb2wgb2s7Ci0JdW5zaWduZWQgc2hvcnQgcmVzdWx0ID0gdXJsU3RyaW5nLm1pZCho
b3N0RW5kUG9zICsgMSwgcG9ydEVuZFBvcyAtIGhvc3RFbmRQb3MgLSAxKS50b1VTaG9ydCgmb2sp
OwotCWlmICghb2spIHsKLQkgICAgcmVzdWx0ID0gMDsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgYm9vbCBvazsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVzdWx0ID0gdXJsU3RyaW5n
Lm1pZChob3N0RW5kUG9zICsgMSwgcG9ydEVuZFBvcyAtIGhvc3RFbmRQb3MgLSAxKS50b1VTaG9y
dCgmb2spOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICByZXN1bHQgPSAwOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBA
IC01OTIsMTEgKzU5MiwxMSBAQAogUVN0cmluZyBLVVJMOjpwYXNzKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1faXNWYWxpZCkgewotCXJldHVybiBRU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBRU3Ry
aW5nKCk7CiAgICAgfQogCiAgICAgaWYgKHBhc3N3b3JkRW5kUG9zID09IHVzZXJFbmRQb3MpIHsK
LQlyZXR1cm4gUVN0cmluZygpOworICAgICAgICByZXR1cm4gUVN0cmluZygpOwogICAgIH0KIAog
ICAgIHJldHVybiBkZWNvZGVfc3RyaW5nKHVybFN0cmluZy5taWQodXNlckVuZFBvcyArIDEsIHBh
c3N3b3JkRW5kUG9zIC0gdXNlckVuZFBvcyAtIDEpKTsgCkBAIC02MDUsNyArNjA1LDcgQEAKIFFT
dHJpbmcgS1VSTDo6dXNlcigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLQlyZXR1
cm4gUVN0cmluZygpOworICAgICAgICByZXR1cm4gUVN0cmluZygpOwogICAgIH0KIAogICAgIHJl
dHVybiBkZWNvZGVfc3RyaW5nKHVybFN0cmluZy5taWQodXNlclN0YXJ0UG9zLCB1c2VyRW5kUG9z
IC0gdXNlclN0YXJ0UG9zKSk7CkBAIC02MTQsNyArNjE0LDcgQEAKIFFTdHJpbmcgS1VSTDo6cmVm
KCkgY29uc3QKIHsKICAgICBpZiAoIW1faXNWYWxpZCB8fCBmcmFnbWVudEVuZFBvcyA9PSBxdWVy
eUVuZFBvcykgewotCXJldHVybiBRU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBRU3RyaW5nKCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIHVybFN0cmluZy5taWQocXVlcnlFbmRQb3MgKyAxLCBmcmFn
bWVudEVuZFBvcyAtIChxdWVyeUVuZFBvcyArIDEpKTsKQEAgLTYyOCw3ICs2MjgsNyBAQAogUVN0
cmluZyBLVVJMOjpxdWVyeSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLQlyZXR1
cm4gUVN0cmluZygpOworICAgICAgICByZXR1cm4gUVN0cmluZygpOwogICAgIH0KIAogICAgIHJl
dHVybiB1cmxTdHJpbmcubWlkKHBhdGhFbmRQb3MsIHF1ZXJ5RW5kUG9zIC0gcGF0aEVuZFBvcyk7
IApAQCAtNjM3LDYyICs2MzcsMTggQEAKIFFTdHJpbmcgS1VSTDo6cGF0aCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2lzVmFsaWQpIHsKLQlyZXR1cm4gUVN0cmluZygpOworICAgICAgICByZXR1cm4g
UVN0cmluZygpOwogICAgIH0KIAogICAgIHJldHVybiBkZWNvZGVfc3RyaW5nKHVybFN0cmluZy5t
aWQocG9ydEVuZFBvcywgcGF0aEVuZFBvcyAtIHBvcnRFbmRQb3MpKTsgCiB9CiAKLSNpZmRlZiBD
T05TVFJVQ1RfQ0FOT05JQ0FMX1NUUklORwotUVN0cmluZyBLVVJMOjpfcGF0aCgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2lzVmFsaWQpIHsKLQlyZXR1cm4gUVN0cmluZygpOwotICAgIH0KLQotICAg
IHJldHVybiB1cmxTdHJpbmcubWlkKHBvcnRFbmRQb3MsIHBhdGhFbmRQb3MgLSBwb3J0RW5kUG9z
KTsKLX0KLQotUVN0cmluZyBLVVJMOjpfdXNlcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2lzVmFs
aWQpIHsKLQlyZXR1cm4gUVN0cmluZygpOwotICAgIH0KLQotICAgIHJldHVybiB1cmxTdHJpbmcu
bWlkKHVzZXJTdGFydFBvcywgdXNlckVuZFBvcyAtIHVzZXJTdGFydFBvcyk7Ci19Ci0KLVFTdHJp
bmcgS1VSTDo6X3Bhc3MoKSBjb25zdAotewotICAgIGlmICghbV9pc1ZhbGlkKSB7Ci0JcmV0dXJu
IFFTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBpZiAocGFzc3dvcmRFbmRQb3MgPT0gdXNlckVuZFBv
cykgewotCXJldHVybiBRU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVybFN0cmluZy5t
aWQodXNlckVuZFBvcyArIDEsIHBhc3N3b3JkRW5kUG9zIC0gdXNlckVuZFBvcyAtIDEpOyAKLX0K
LQotUVN0cmluZyBLVVJMOjpfaG9zdCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2lzVmFsaWQpIHsK
LQlyZXR1cm4gUVN0cmluZygpOwotICAgIH0KLQotICAgIGludCBzdGFydCA9IChwYXNzd29yZEVu
ZFBvcyA9PSB1c2VyU3RhcnRQb3MpID8gcGFzc3dvcmRFbmRQb3MgOiBwYXNzd29yZEVuZFBvcyAr
IDE7Ci0gICAgcmV0dXJuIHVybFN0cmluZy5taWQoc3RhcnQsIGhvc3RFbmRQb3MgLSBzdGFydCk7
Ci19Ci0KLSNlbmRpZgotCiB2b2lkIEtVUkw6OnNldFByb3RvY29sKGNvbnN0IFFTdHJpbmcgJnMp
CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKLQlRU3RyaW5nIG5ld1VSTCA9IHMgKyAiOiIgKyB1
cmxTdHJpbmc7Ci0JcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwotCXJldHVybjsKKyAg
ICAgICAgUVN0cmluZyBuZXdVUkwgPSBzICsgIjoiICsgdXJsU3RyaW5nOworICAgICAgICBwYXJz
ZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBRU3RyaW5nIG5ld1VSTCA9IHMgKyB1cmxTdHJpbmcubWlkKHNjaGVtZUVuZFBvcyk7CkBAIC03
MDIsMjEgKzY1OCwyMSBAQAogdm9pZCBLVVJMOjpzZXRIb3N0KGNvbnN0IFFTdHJpbmcgJnMpCiB7
CiAgICAgaWYgKG1faXNWYWxpZCkgewotCWJvb2wgc2xhc2hTbGFzaE5lZWRlZCA9IHVzZXJTdGFy
dFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAxOwotCWludCBob3N0U3RhcnQgPSAocGFzc3dvcmRFbmRQ
b3MgPT0gdXNlclN0YXJ0UG9zKSA/IHBhc3N3b3JkRW5kUG9zIDogcGFzc3dvcmRFbmRQb3MgKyAx
OwotCQotCVFTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQoaG9zdFN0YXJ0KSArIChzbGFz
aFNsYXNoTmVlZGVkID8gIi8vIiA6IFFTdHJpbmcoKSkgKyBzICsgdXJsU3RyaW5nLm1pZChob3N0
RW5kUG9zKTsKLQlwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAgIGJvb2wg
c2xhc2hTbGFzaE5lZWRlZCA9IHVzZXJTdGFydFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAxOworICAg
ICAgICBpbnQgaG9zdFN0YXJ0ID0gKHBhc3N3b3JkRW5kUG9zID09IHVzZXJTdGFydFBvcykgPyBw
YXNzd29yZEVuZFBvcyA6IHBhc3N3b3JkRW5kUG9zICsgMTsKKyAgICAgICAgCisgICAgICAgIFFT
dHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQoaG9zdFN0YXJ0KSArIChzbGFzaFNsYXNoTmVl
ZGVkID8gIi8vIiA6IFFTdHJpbmcoKSkgKyBzICsgdXJsU3RyaW5nLm1pZChob3N0RW5kUG9zKTsK
KyAgICAgICAgcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOwogICAgIH0KIH0KIAogdm9p
ZCBLVVJMOjpzZXRQb3J0KHVuc2lnbmVkIHNob3J0IGkpCiB7CiAgICAgaWYgKG1faXNWYWxpZCkg
ewotCWJvb2wgY29sb25OZWVkZWQgPSBwb3J0RW5kUG9zID09IGhvc3RFbmRQb3M7Ci0JaW50IHBv
cnRTdGFydCA9IChjb2xvbk5lZWRlZCA/IGhvc3RFbmRQb3MgOiBob3N0RW5kUG9zICsgMSk7Ci0J
UVN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdChwb3J0U3RhcnQpICsgKGNvbG9uTmVlZGVk
ID8gIjoiIDogUVN0cmluZygpKSArIFFTdHJpbmc6Om51bWJlcihpKSArIHVybFN0cmluZy5taWQo
cG9ydEVuZFBvcyk7Ci0JcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAgICBi
b29sIGNvbG9uTmVlZGVkID0gcG9ydEVuZFBvcyA9PSBob3N0RW5kUG9zOworICAgICAgICBpbnQg
cG9ydFN0YXJ0ID0gKGNvbG9uTmVlZGVkID8gaG9zdEVuZFBvcyA6IGhvc3RFbmRQb3MgKyAxKTsK
KyAgICAgICAgUVN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdChwb3J0U3RhcnQpICsgKGNv
bG9uTmVlZGVkID8gIjoiIDogUVN0cmluZygpKSArIFFTdHJpbmc6Om51bWJlcihpKSArIHVybFN0
cmluZy5taWQocG9ydEVuZFBvcyk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgpLCAmbmV3
VVJMKTsKICAgICB9CiB9CiAKQEAgLTc4MSw4ICs3MzcsOCBAQAogdm9pZCBLVVJMOjpzZXRSZWYo
Y29uc3QgUVN0cmluZyAmcykKIHsKICAgICBpZiAobV9pc1ZhbGlkKSB7Ci0JUVN0cmluZyBuZXdV
UkwgPSB1cmxTdHJpbmcubGVmdChxdWVyeUVuZFBvcykgKyAocy5pc0VtcHR5KCkgPyBRU3RyaW5n
KCkgOiAiIyIgKyBzKTsKLQlwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CisgICAgICAg
IFFTdHJpbmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocXVlcnlFbmRQb3MpICsgKHMuaXNFbXB0
eSgpID8gUVN0cmluZygpIDogIiMiICsgcyk7CisgICAgICAgIHBhcnNlKG5ld1VSTC5hc2NpaSgp
LCAmbmV3VVJMKTsKICAgICB9CiB9CiAKQEAgLTc5MCw3NiArNzQ2LDI1IEBACiB7CiAgICAgaWYg
KG1faXNWYWxpZCkgewogICAgICAgICBRU3RyaW5nIHE7Ci0JaWYgKCFxdWVyeS5pc0VtcHR5KCkg
JiYgcXVlcnlbMF0gIT0gJz8nKSB7Ci0JICAgIHEgPSAiPyIgKyBxdWVyeTsKLQl9IGVsc2Ugewot
CSAgICBxID0gcXVlcnk7Ci0JfQorICAgICAgICBpZiAoIXF1ZXJ5LmlzRW1wdHkoKSAmJiBxdWVy
eVswXSAhPSAnPycpIHsKKyAgICAgICAgICAgIHEgPSAiPyIgKyBxdWVyeTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHEgPSBxdWVyeTsKKyAgICAgICAgfQogCiAgICAgICAgIFFTdHJp
bmcgbmV3VVJMID0gdXJsU3RyaW5nLmxlZnQocGF0aEVuZFBvcykgKyBxICsgdXJsU3RyaW5nLm1p
ZChxdWVyeUVuZFBvcyk7Ci0JcGFyc2UobmV3VVJMLmFzY2lpKCksICZuZXdVUkwpOworICAgICAg
ICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CiAgICAgfQogfQogCiB2b2lkIEtVUkw6
OnNldFBhdGgoY29uc3QgUVN0cmluZyAmcykKIHsKICAgICBpZiAobV9pc1ZhbGlkKSB7Ci0JUVN0
cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdChwb3J0RW5kUG9zKSArIGVuY29kZV9zdHJpbmco
cykgKyB1cmxTdHJpbmcubWlkKHBhdGhFbmRQb3MpOwotCXBhcnNlKG5ld1VSTC5hc2NpaSgpLCAm
bmV3VVJMKTsKKyAgICAgICAgUVN0cmluZyBuZXdVUkwgPSB1cmxTdHJpbmcubGVmdChwb3J0RW5k
UG9zKSArIGVuY29kZV9zdHJpbmcocykgKyB1cmxTdHJpbmcubWlkKHBhdGhFbmRQb3MpOworICAg
ICAgICBwYXJzZShuZXdVUkwuYXNjaWkoKSwgJm5ld1VSTCk7CiAgICAgfQogfQogCi1RU3RyaW5n
IEtVUkw6OmNhbm9uaWNhbFVSTCgpIGNvbnN0Ci17Ci0jaWZkZWYgQ09OU1RSVUNUX0NBTk9OSUNB
TF9TVFJJTkcKLSAgICBib29sIGhhZFByZVBhdGhDb21wb25lbnQgPSBmYWxzZTsKLSAgICBRU3Ry
aW5nIGNhbm9uaWNhbFVSTDsKLSAgICAKLSAgICBpZiAoIXByb3RvY29sKCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGNhbm9uaWNhbFVSTCArPSBwcm90b2NvbCgpOwotICAgICAgICBjYW5vbmljYWxV
UkwgKz0gIjovLyI7Ci0gICAgICAgIGhhZFByZVBhdGhDb21wb25lbnQgPSB0cnVlOwotICAgIH0K
LSAgICBpZiAoIV91c2VyKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNhbm9uaWNhbFVSTCArPSBf
dXNlcigpOwotICAgICAgICBpZiAoIV9wYXNzKCkuaXNFbXB0eSgpKXsKLSAgICAgICAgICAgIGNh
bm9uaWNhbFVSTCArPSAiOiI7Ci0gICAgICAgICAgICBjYW5vbmljYWxVUkwgKz0gX3Bhc3MoKTsK
LSAgICAgICAgfQotICAgICAgICBjYW5vbmljYWxVUkwgKz0gIkAiOwotICAgICAgICBoYWRQcmVQ
YXRoQ29tcG9uZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFfaG9zdCgpLmlzRW1wdHkoKSkg
ewotICAgICAgICBjYW5vbmljYWxVUkwgKz0gX2hvc3QoKTsKLSAgICAgICAgdW5zaWduZWQgc2hv
cnQgaW50IHAgPSBwb3J0KCk7Ci0gICAgICAgIGlmIChwICE9IDApIHsKLSAgICAgICAgICAgIGNh
bm9uaWNhbFVSTCArPSAiOiI7Ci0gICAgICAgICAgICBjYW5vbmljYWxVUkwgKz0gUVN0cmluZzo6
bnVtYmVyKHApOwotICAgICAgICB9Ci0gICAgICAgIGhhZFByZVBhdGhDb21wb25lbnQgPSB0cnVl
OwotICAgIH0KLSAgICBpZiAoaGFkUHJlUGF0aENvbXBvbmVudCAmJiAoc3RybmNhc2VjbXAgKCJo
dHRwIiwgdXJsLCBzY2hlbWVFbmQpID09IDAgfHwKLSAgICAgICAgc3RybmNhc2VjbXAgKCJodHRw
cyIsIHVybCwgc2NoZW1lRW5kKSA9PSAwKSAmJiBfcGF0aCgpLmlzRW1wdHkoKSkgewotICAgICAg
ICBjYW5vbmljYWxVUkwgKz0gIi8iOwotICAgIH0KLSAgICBpZiAoIV9wYXRoKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGNhbm9uaWNhbFVSTCArPSBfcGF0aCgpOwotICAgIH0KLSAgICBpZiAoIXF1
ZXJ5KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNhbm9uaWNhbFVSTCArPSAiPyI7Ci0gICAgICAg
IGNhbm9uaWNhbFVSTCArPSBxdWVyeSgpOwotICAgIH0KLSAgICBpZiAoIXJlZigpLmlzRW1wdHko
KSkgewotICAgICAgICBjYW5vbmljYWxVUkwgKz0gIiMiOwotICAgICAgICBjYW5vbmljYWxVUkwg
Kz0gcmVmKCk7Ci0gICAgfQotICAgIHJldHVybiBjYW5vbmljYWxVUkw7Ci0jZWxzZQotICAgIHJl
dHVybiB1cmxTdHJpbmc7Ci0jZW5kaWYKLX0KLQotCiBRU3RyaW5nIEtVUkw6OnByZXR0eVVSTCgp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFsaWQpIHsKQEAgLTg3MSwxNSArNzc2LDE1IEBACiAg
ICAgUVN0cmluZyBhdXRob3JpdHk7CiAKICAgICBpZiAoaG9zdEVuZFBvcyAhPSBwYXNzd29yZEVu
ZFBvcykgewotCWlmICh1c2VyRW5kUG9zICE9IHVzZXJTdGFydFBvcykgewotCSAgICBhdXRob3Jp
dHkgKz0gdXNlcigpOwotCSAgICBhdXRob3JpdHkgKz0gIkAiOwotCX0KLQlhdXRob3JpdHkgKz0g
aG9zdCgpOwotCWlmIChwb3J0KCkgIT0gMCkgewotCSAgICBhdXRob3JpdHkgKz0gIjoiOwotCSAg
ICBhdXRob3JpdHkgKz0gUVN0cmluZzo6bnVtYmVyKHBvcnQoKSk7Ci0JfQorICAgICAgICBpZiAo
dXNlckVuZFBvcyAhPSB1c2VyU3RhcnRQb3MpIHsKKyAgICAgICAgICAgIGF1dGhvcml0eSArPSB1
c2VyKCk7CisgICAgICAgICAgICBhdXRob3JpdHkgKz0gIkAiOworICAgICAgICB9CisgICAgICAg
IGF1dGhvcml0eSArPSBob3N0KCk7CisgICAgICAgIGlmIChwb3J0KCkgIT0gMCkgeworICAgICAg
ICAgICAgYXV0aG9yaXR5ICs9ICI6IjsKKyAgICAgICAgICAgIGF1dGhvcml0eSArPSBRU3RyaW5n
OjpudW1iZXIocG9ydCgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghYXV0aG9yaXR5
LmlzRW1wdHkoKSkgewpAQCAtOTc1LDcgKzg4MCw3IEBACiAgICAgY29uc3QgY2hhciAqc3RyID0g
c3RyU3RhcnQ7CiAgICAgY29uc3QgY2hhciAqc3RyRW5kID0gc3RyU3RhcnQgKyBsZW5ndGg7CiAg
ICAgd2hpbGUgKHN0ciA8IHN0ckVuZCkgewotCXVuc2lnbmVkIGNoYXIgYyA9ICpzdHIrKzsKKyAg
ICAgICAgdW5zaWduZWQgY2hhciBjID0gKnN0cisrOwogICAgICAgICBpZiAoaXNCYWRDaGFyKGMp
KSB7CiAgICAgICAgICAgICBpZiAoYyA9PSAnJScgJiYgc3RyRW5kIC0gc3RyID49IDIgJiYgaXNI
ZXhEaWdpdChzdHJbMF0pICYmIGlzSGV4RGlnaXQoc3RyWzFdKSkgewogICAgICAgICAgICAgICAg
ICpwKysgPSBjOwpAQCAtOTg4LDkgKzg5Myw5IEBACiAgICAgICAgICAgICAgICAgKnArKyA9IGhl
eERpZ2l0c1tjID4+IDRdOwogICAgICAgICAgICAgICAgICpwKysgPSBoZXhEaWdpdHNbYyAmIDB4
Rl07CiAgICAgICAgICAgICB9Ci0JfSBlbHNlIHsKLQkgICAgKnArKyA9IGM7Ci0JfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgKnArKyA9IGM7CisgICAgICAgIH0KICAgICB9CiAgICAg
CiAgICAgYnVmZmVyID0gcDsKQEAgLTEwNzgsMjkgKzk4MywyOSBAQAogICAgIG1faXNWYWxpZCA9
IHRydWU7CiAKICAgICBpZiAodXJsID09IE5VTEwgfHwgdXJsWzBdID09ICdcMCcpIHsKLQkvLyB2
YWxpZCBVUkwgbXVzdCBiZSBub24tZW1wdHkKLQltX2lzVmFsaWQgPSBmYWxzZTsKLQl1cmxTdHJp
bmcgPSB1cmw7Ci0JcmV0dXJuOworICAgICAgICAvLyB2YWxpZCBVUkwgbXVzdCBiZSBub24tZW1w
dHkKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIHVybFN0cmluZyA9IHVybDsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghaXNTY2hlbWVGaXJzdENoYXIodXJs
WzBdKSkgewotCS8vIHNjaGVtZSBtdXN0IHN0YXJ0IHdpdGggYW4gYWxwaGFiZXRpYyBjaGFyYWN0
ZXIKLQltX2lzVmFsaWQgPSBmYWxzZTsKLQl1cmxTdHJpbmcgPSB1cmw7Ci0JcmV0dXJuOworICAg
ICAgICAvLyBzY2hlbWUgbXVzdCBzdGFydCB3aXRoIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyCisg
ICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICB1cmxTdHJpbmcgPSB1cmw7CisgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpbnQgc2NoZW1lRW5kID0gMDsKICAKICAgICB3aGls
ZSAoaXNTY2hlbWVDaGFyKHVybFtzY2hlbWVFbmRdKSkgewotCXNjaGVtZUVuZCsrOworICAgICAg
ICBzY2hlbWVFbmQrKzsKICAgICB9CiAKICAgICBpZiAodXJsW3NjaGVtZUVuZF0gIT0gJzonKSB7
Ci0JbV9pc1ZhbGlkID0gZmFsc2U7Ci0JdXJsU3RyaW5nID0gdXJsOwotCXJldHVybjsKKyAgICAg
ICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIHVybFN0cmluZyA9IHVybDsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGludCB1c2VyU3RhcnQgPSBzY2hlbWVFbmQgKyAxOwpAQCAt
MTExNSw5MiArMTAyMCw5MiBAQAogICAgIGJvb2wgaGllcmFyY2hpY2FsID0gdXJsW3NjaGVtZUVu
ZCArIDFdID09ICcvJzsKIAogICAgIGlmIChoaWVyYXJjaGljYWwgJiYgdXJsW3NjaGVtZUVuZCAr
IDJdID09ICcvJykgewotCS8vIHBhcnQgYWZ0ZXIgdGhlIHNjaGVtZSBtdXN0IGJlIGEgbmV0X3Bh
dGgsIHBhcnNlIHRoZSBhdXRob3JpdHkgc2VjdGlvbgorICAgICAgICAvLyBwYXJ0IGFmdGVyIHRo
ZSBzY2hlbWUgbXVzdCBiZSBhIG5ldF9wYXRoLCBwYXJzZSB0aGUgYXV0aG9yaXR5IHNlY3Rpb24K
IAotCS8vIEZJWE1FOiBhdXRob3JpdHkgY2hhcmFjdGVycyBtYXkgYmUgc2Nhbm5lZCB0d2ljZQot
CXVzZXJTdGFydCArPSAyOwotCXVzZXJFbmQgPSB1c2VyU3RhcnQ7CisgICAgICAgIC8vIEZJWE1F
OiBhdXRob3JpdHkgY2hhcmFjdGVycyBtYXkgYmUgc2Nhbm5lZCB0d2ljZQorICAgICAgICB1c2Vy
U3RhcnQgKz0gMjsKKyAgICAgICAgdXNlckVuZCA9IHVzZXJTdGFydDsKIAotCWludCBjb2xvblBv
cyA9IDA7Ci0Jd2hpbGUgKGlzVXNlckluZm9DaGFyKHVybFt1c2VyRW5kXSkpIHsKLQkgICAgaWYg
KHVybFt1c2VyRW5kXSA9PSAnOicgJiYgY29sb25Qb3MgPT0gMCkgewotCQljb2xvblBvcyA9IHVz
ZXJFbmQ7Ci0JICAgIH0KLQkgICAgdXNlckVuZCsrOwotCX0KLQkKLQlpZiAodXJsW3VzZXJFbmRd
ID09ICdAJykgewotCSAgICAvLyBhY3R1YWwgZW5kIG9mIHRoZSB1c2VyaW5mbywgc3RhcnQgb24g
dGhlIGhvc3QKLQkgICAgaWYgKGNvbG9uUG9zICE9IDApIHsKLQkJcGFzc3dvcmRFbmQgPSB1c2Vy
RW5kOwotCQl1c2VyRW5kID0gY29sb25Qb3M7Ci0JCXBhc3N3b3JkU3RhcnQgPSBjb2xvblBvcyAr
IDE7Ci0JICAgIH0gZWxzZSB7Ci0JCXBhc3N3b3JkU3RhcnQgPSBwYXNzd29yZEVuZCA9IHVzZXJF
bmQ7Ci0JICAgIH0KLQkgICAgaG9zdFN0YXJ0ID0gcGFzc3dvcmRFbmQgKyAxOwotCX0gZWxzZSBp
ZiAodXJsW3VzZXJFbmRdID09ICdbJyB8fCBpc1BhdGhTZWdtZW50RW5kQ2hhcih1cmxbdXNlckVu
ZF0pKSB7Ci0JICAgIC8vIGhpdCB0aGUgZW5kIG9mIHRoZSBhdXRob3JpdHksIG11c3QgaGF2ZSBi
ZWVuIG5vIHVzZXIKLQkgICAgLy8gb3IgbG9va3MgbGlrZSBhbiBJUHY2IGhvc3RuYW1lCi0JICAg
IC8vIGVpdGhlciB3YXksIHRyeSB0byBwYXJzZSBpdCBhcyBhIGhvc3RuYW1lCi0JICAgIHVzZXJF
bmQgPSB1c2VyU3RhcnQ7Ci0JICAgIHBhc3N3b3JkU3RhcnQgPSBwYXNzd29yZEVuZCA9IHVzZXJF
bmQ7Ci0JICAgIGhvc3RTdGFydCA9IHVzZXJTdGFydDsKLQl9IGVsc2UgewotCSAgICAvLyBpbnZh
bGlkIGNoYXJhY3RlcgotCSAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLQkgICAgdXJsU3RyaW5nID0g
dXJsOwotCSAgICByZXR1cm47Ci0JfQorICAgICAgICBpbnQgY29sb25Qb3MgPSAwOworICAgICAg
ICB3aGlsZSAoaXNVc2VySW5mb0NoYXIodXJsW3VzZXJFbmRdKSkgeworICAgICAgICAgICAgaWYg
KHVybFt1c2VyRW5kXSA9PSAnOicgJiYgY29sb25Qb3MgPT0gMCkgeworICAgICAgICAgICAgICAg
IGNvbG9uUG9zID0gdXNlckVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVzZXJFbmQr
KzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHVybFt1c2VyRW5kXSA9PSAnQCcp
IHsKKyAgICAgICAgICAgIC8vIGFjdHVhbCBlbmQgb2YgdGhlIHVzZXJpbmZvLCBzdGFydCBvbiB0
aGUgaG9zdAorICAgICAgICAgICAgaWYgKGNvbG9uUG9zICE9IDApIHsKKyAgICAgICAgICAgICAg
ICBwYXNzd29yZEVuZCA9IHVzZXJFbmQ7CisgICAgICAgICAgICAgICAgdXNlckVuZCA9IGNvbG9u
UG9zOworICAgICAgICAgICAgICAgIHBhc3N3b3JkU3RhcnQgPSBjb2xvblBvcyArIDE7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhc3N3b3JkU3RhcnQgPSBwYXNzd29y
ZEVuZCA9IHVzZXJFbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBob3N0U3RhcnQgPSBw
YXNzd29yZEVuZCArIDE7CisgICAgICAgIH0gZWxzZSBpZiAodXJsW3VzZXJFbmRdID09ICdbJyB8
fCBpc1BhdGhTZWdtZW50RW5kQ2hhcih1cmxbdXNlckVuZF0pKSB7CisgICAgICAgICAgICAvLyBo
aXQgdGhlIGVuZCBvZiB0aGUgYXV0aG9yaXR5LCBtdXN0IGhhdmUgYmVlbiBubyB1c2VyCisgICAg
ICAgICAgICAvLyBvciBsb29rcyBsaWtlIGFuIElQdjYgaG9zdG5hbWUKKyAgICAgICAgICAgIC8v
IGVpdGhlciB3YXksIHRyeSB0byBwYXJzZSBpdCBhcyBhIGhvc3RuYW1lCisgICAgICAgICAgICB1
c2VyRW5kID0gdXNlclN0YXJ0OworICAgICAgICAgICAgcGFzc3dvcmRTdGFydCA9IHBhc3N3b3Jk
RW5kID0gdXNlckVuZDsKKyAgICAgICAgICAgIGhvc3RTdGFydCA9IHVzZXJTdGFydDsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGludmFsaWQgY2hhcmFjdGVyCisgICAgICAgICAg
ICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHVybFN0cmluZyA9IHVybDsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JaG9zdEVuZCA9IGhvc3RTdGFydDsKKyAgICAg
ICAgaG9zdEVuZCA9IGhvc3RTdGFydDsKIAotCS8vIElQVjYgSVAgYWRkcmVzcwotCWlmICh1cmxb
aG9zdEVuZF0gPT0gJ1snKSB7Ci0JICAgIGhvc3RFbmQrKzsKLQkgICAgd2hpbGUgKGlzSVB2NkNo
YXIodXJsW2hvc3RFbmRdKSkgewotCQlob3N0RW5kKys7Ci0JICAgIH0KLQkgICAgaWYgKHVybFto
b3N0RW5kXSA9PSAnXScpIHsKLQkJaG9zdEVuZCsrOwotCSAgICB9IGVsc2UgewotCQkvLyBpbnZh
bGlkIGNoYXJhY3RlcgotCQltX2lzVmFsaWQgPSBmYWxzZTsKLQkJdXJsU3RyaW5nID0gdXJsOwot
CQlyZXR1cm47Ci0JICAgIH0KLQl9IGVsc2UgewotCSAgICB3aGlsZSAoaXNIb3N0bmFtZUNoYXIo
dXJsW2hvc3RFbmRdKSkgewotCQlob3N0RW5kKys7Ci0JICAgIH0KLQl9Ci0JCi0JaWYgKHVybFto
b3N0RW5kXSA9PSAnOicpIHsKLQkgICAgcG9ydFN0YXJ0ID0gcG9ydEVuZCA9IGhvc3RFbmQgKyAx
OworICAgICAgICAvLyBJUFY2IElQIGFkZHJlc3MKKyAgICAgICAgaWYgKHVybFtob3N0RW5kXSA9
PSAnWycpIHsKKyAgICAgICAgICAgIGhvc3RFbmQrKzsKKyAgICAgICAgICAgIHdoaWxlIChpc0lQ
djZDaGFyKHVybFtob3N0RW5kXSkpIHsKKyAgICAgICAgICAgICAgICBob3N0RW5kKys7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAodXJsW2hvc3RFbmRdID09ICddJykgeworICAgICAg
ICAgICAgICAgIGhvc3RFbmQrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gaW52YWxpZCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB1cmxTdHJpbmcgPSB1cmw7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2hpbGUg
KGlzSG9zdG5hbWVDaGFyKHVybFtob3N0RW5kXSkpIHsKKyAgICAgICAgICAgICAgICBob3N0RW5k
Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh1cmxb
aG9zdEVuZF0gPT0gJzonKSB7CisgICAgICAgICAgICBwb3J0U3RhcnQgPSBwb3J0RW5kID0gaG9z
dEVuZCArIDE7CiAgCi0JICAgIC8vIHBvc3NpYmxlIHN0YXJ0IG9mIHBvcnQKLQkgICAgcG9ydEVu
ZCA9IHBvcnRTdGFydDsKLQkgICAgd2hpbGUgKGlzZGlnaXQodXJsW3BvcnRFbmRdKSkgewotCQlw
b3J0RW5kKys7Ci0JICAgIH0KLQl9IGVsc2UgewotCSAgICBwb3J0U3RhcnQgPSBwb3J0RW5kID0g
aG9zdEVuZDsKLQl9CisgICAgICAgICAgICAvLyBwb3NzaWJsZSBzdGFydCBvZiBwb3J0CisgICAg
ICAgICAgICBwb3J0RW5kID0gcG9ydFN0YXJ0OworICAgICAgICAgICAgd2hpbGUgKGlzZGlnaXQo
dXJsW3BvcnRFbmRdKSkgeworICAgICAgICAgICAgICAgIHBvcnRFbmQrKzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBvcnRTdGFydCA9IHBvcnRFbmQgPSBo
b3N0RW5kOworICAgICAgICB9CiAKLQlpZiAoIWlzUGF0aFNlZ21lbnRFbmRDaGFyKHVybFtwb3J0
RW5kXSkpIHsKLQkgICAgLy8gaW52YWxpZCBjaGFyYWN0ZXIKLQkgICAgbV9pc1ZhbGlkID0gZmFs
c2U7Ci0JICAgIHVybFN0cmluZyA9IHVybDsKLQkgICAgcmV0dXJuOwotCX0KKyAgICAgICAgaWYg
KCFpc1BhdGhTZWdtZW50RW5kQ2hhcih1cmxbcG9ydEVuZF0pKSB7CisgICAgICAgICAgICAvLyBp
bnZhbGlkIGNoYXJhY3RlcgorICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAg
ICAgICB1cmxTdHJpbmcgPSB1cmw7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAg
ICB9IGVsc2UgewotCS8vIHRoZSBwYXJ0IGFmdGVyIHRoZSBzY2hlbWUgbXVzdCBiZSBhbiBvcGFx
dWVfcGFydCBvciBhbiBhYnNfcGF0aAotCXVzZXJFbmQgPSB1c2VyU3RhcnQ7Ci0JcGFzc3dvcmRT
dGFydCA9IHBhc3N3b3JkRW5kID0gdXNlckVuZDsKLQlob3N0U3RhcnQgPSBob3N0RW5kID0gcGFz
c3dvcmRFbmQ7Ci0JcG9ydFN0YXJ0ID0gcG9ydEVuZCA9IGhvc3RFbmQ7CisgICAgICAgIC8vIHRo
ZSBwYXJ0IGFmdGVyIHRoZSBzY2hlbWUgbXVzdCBiZSBhbiBvcGFxdWVfcGFydCBvciBhbiBhYnNf
cGF0aAorICAgICAgICB1c2VyRW5kID0gdXNlclN0YXJ0OworICAgICAgICBwYXNzd29yZFN0YXJ0
ID0gcGFzc3dvcmRFbmQgPSB1c2VyRW5kOworICAgICAgICBob3N0U3RhcnQgPSBob3N0RW5kID0g
cGFzc3dvcmRFbmQ7CisgICAgICAgIHBvcnRTdGFydCA9IHBvcnRFbmQgPSBob3N0RW5kOwogICAg
IH0KLQkKKyAgICAgICAgCiAgICAgaW50IHBhdGhTdGFydCA9IHBvcnRFbmQ7CiAgICAgaW50IHBh
dGhFbmQgPSBwYXRoU3RhcnQ7CiAgICAgaW50IHF1ZXJ5U3RhcnQ7CkBAIC0xMjEyLDEzICsxMTE3
LDEzIEBACiAgICAgICAgIHdoaWxlICh1cmxbcGF0aEVuZF0gIT0gJ1wwJyAmJiB1cmxbcGF0aEVu
ZF0gIT0gJz8nKSB7CiAgICAgICAgICAgICBwYXRoRW5kKys7CiAgICAgICAgIH0KLSAgICAJcXVl
cnlTdGFydCA9IHF1ZXJ5RW5kID0gcGF0aEVuZDsKKyAgICAgICAgcXVlcnlTdGFydCA9IHF1ZXJ5
RW5kID0gcGF0aEVuZDsKIAogICAgICAgICB3aGlsZSAodXJsW3F1ZXJ5RW5kXSAhPSAnXDAnKSB7
CiAgICAgICAgICAgICBxdWVyeUVuZCsrOwogICAgICAgICB9CiAKLSAgICAJZnJhZ21lbnRTdGFy
dCA9IGZyYWdtZW50RW5kID0gcXVlcnlFbmQ7CisgICAgICAgIGZyYWdtZW50U3RhcnQgPSBmcmFn
bWVudEVuZCA9IHF1ZXJ5RW5kOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgd2hpbGUgKHVy
bFtwYXRoRW5kXSAhPSAnXDAnICYmIHVybFtwYXRoRW5kXSAhPSAnPycgJiYgdXJsW3BhdGhFbmRd
ICE9ICcjJykgewpAQCAtMTI1MCw5ICsxMTU1LDkgQEAKICAgICBjaGFyICpidWZmZXI7CiAgICAg
dWludCBidWZmZXJMZW5ndGggPSBmcmFnbWVudEVuZCAqIDMgKyAxOwogICAgIGlmIChidWZmZXJM
ZW5ndGggPD0gc2l6ZW9mKHN0YXRpY0J1ZmZlcikpIHsKLQlidWZmZXIgPSBzdGF0aWNCdWZmZXI7
CisgICAgICAgIGJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsKICAgICB9IGVsc2UgewotCWJ1ZmZlciA9
IChjaGFyICopZmFzdE1hbGxvYyhidWZmZXJMZW5ndGgpOworICAgICAgICBidWZmZXIgPSAoY2hh
ciAqKWZhc3RNYWxsb2MoYnVmZmVyTGVuZ3RoKTsKICAgICB9CiAKICAgICBjaGFyICpwID0gYnVm
ZmVyOwpAQCAtMTI2MSw3ICsxMTY2LDcgQEAKICAgICAvLyBjb3B5IGluIHRoZSBzY2hlbWUKICAg
ICBjb25zdCBjaGFyICpzY2hlbWVFbmRQdHIgPSB1cmwgKyBzY2hlbWVFbmQ7CiAgICAgd2hpbGUg
KHN0clB0ciA8IHNjaGVtZUVuZFB0cikgewotCSpwKysgPSAqc3RyUHRyKys7CisgICAgICAgICpw
KysgPSAqc3RyUHRyKys7CiAgICAgfQogICAgIHNjaGVtZUVuZFBvcyA9IHAgLSBidWZmZXI7CiAK
QEAgLTEzMTEsNTYgKzEyMTYsNTYgQEAKIC8vZG9lc24ndCBhZGQgLy8gZm9yIHRoaW5ncyBsaWtl
IGZpbGU6Ly8vZm9vCiAKICAgICAgICAgKnArKyA9ICcvJzsKLQkqcCsrID0gJy8nOworICAgICAg
ICAqcCsrID0gJy8nOwogCi0JdXNlclN0YXJ0UG9zID0gcCAtIGJ1ZmZlcjsKKyAgICAgICAgdXNl
clN0YXJ0UG9zID0gcCAtIGJ1ZmZlcjsKIAotCS8vIGNvcHkgaW4gdGhlIHVzZXIKLQlzdHJQdHIg
PSB1cmwgKyB1c2VyU3RhcnQ7Ci0JY29uc3QgY2hhciAqdXNlckVuZFB0ciA9IHVybCArIHVzZXJF
bmQ7Ci0Jd2hpbGUgKHN0clB0ciA8IHVzZXJFbmRQdHIpIHsKLQkgICAgKnArKyA9ICpzdHJQdHIr
KzsKLQl9Ci0JdXNlckVuZFBvcyA9IHAgLSBidWZmZXI7Ci0JCi0JLy8gY29weSBpbiB0aGUgcGFz
c3dvcmQKLQlpZiAocGFzc3dvcmRFbmQgIT0gcGFzc3dvcmRTdGFydCkgewotCSAgICAqcCsrID0g
JzonOwotCSAgICBzdHJQdHIgPSB1cmwgKyBwYXNzd29yZFN0YXJ0OwotCSAgICBjb25zdCBjaGFy
ICpwYXNzd29yZEVuZFB0ciA9IHVybCArIHBhc3N3b3JkRW5kOwotCSAgICB3aGlsZSAoc3RyUHRy
IDwgcGFzc3dvcmRFbmRQdHIpIHsKLQkJKnArKyA9ICpzdHJQdHIrKzsKLQkgICAgfQotCX0KLQlw
YXNzd29yZEVuZFBvcyA9IHAgLSBidWZmZXI7Ci0JCi0JLy8gSWYgd2UgaGFkIGFueSB1c2VyIGlu
Zm8sIGFkZCAiQCIKLQlpZiAocCAtIGJ1ZmZlciAhPSB1c2VyU3RhcnRQb3MpIHsKLQkgICAgKnAr
KyA9ICdAJzsKLQl9Ci0JCi0JLy8gY29weSBpbiB0aGUgaG9zdCwgZXhjZXB0IGluIHRoZSBjYXNl
IG9mIGEgZmlsZSBVUkwgd2l0aCBhdXRob3JpdHk9ImxvY2FsaG9zdCIKLQlpZiAoIShpc0ZpbGUg
JiYgaG9zdElzTG9jYWxIb3N0ICYmICFoYXZlTm9uSG9zdEF1dGhvcml0eVBhcnQpKSB7CisgICAg
ICAgIC8vIGNvcHkgaW4gdGhlIHVzZXIKKyAgICAgICAgc3RyUHRyID0gdXJsICsgdXNlclN0YXJ0
OworICAgICAgICBjb25zdCBjaGFyICp1c2VyRW5kUHRyID0gdXJsICsgdXNlckVuZDsKKyAgICAg
ICAgd2hpbGUgKHN0clB0ciA8IHVzZXJFbmRQdHIpIHsKKyAgICAgICAgICAgICpwKysgPSAqc3Ry
UHRyKys7CisgICAgICAgIH0KKyAgICAgICAgdXNlckVuZFBvcyA9IHAgLSBidWZmZXI7CisgICAg
ICAgIAorICAgICAgICAvLyBjb3B5IGluIHRoZSBwYXNzd29yZAorICAgICAgICBpZiAocGFzc3dv
cmRFbmQgIT0gcGFzc3dvcmRTdGFydCkgeworICAgICAgICAgICAgKnArKyA9ICc6JzsKKyAgICAg
ICAgICAgIHN0clB0ciA9IHVybCArIHBhc3N3b3JkU3RhcnQ7CisgICAgICAgICAgICBjb25zdCBj
aGFyICpwYXNzd29yZEVuZFB0ciA9IHVybCArIHBhc3N3b3JkRW5kOworICAgICAgICAgICAgd2hp
bGUgKHN0clB0ciA8IHBhc3N3b3JkRW5kUHRyKSB7CisgICAgICAgICAgICAgICAgKnArKyA9ICpz
dHJQdHIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwYXNzd29yZEVuZFBv
cyA9IHAgLSBidWZmZXI7CisgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSBoYWQgYW55IHVzZXIg
aW5mbywgYWRkICJAIgorICAgICAgICBpZiAocCAtIGJ1ZmZlciAhPSB1c2VyU3RhcnRQb3MpIHsK
KyAgICAgICAgICAgICpwKysgPSAnQCc7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IGNvcHkgaW4gdGhlIGhvc3QsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhIGZpbGUgVVJMIHdpdGgg
YXV0aG9yaXR5PSJsb2NhbGhvc3QiCisgICAgICAgIGlmICghKGlzRmlsZSAmJiBob3N0SXNMb2Nh
bEhvc3QgJiYgIWhhdmVOb25Ib3N0QXV0aG9yaXR5UGFydCkpIHsKICAgICAgICAgICAgIHN0clB0
ciA9IHVybCArIGhvc3RTdGFydDsKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmhvc3RFbmRQdHIg
PSB1cmwgKyBob3N0RW5kOwogICAgICAgICAgICAgd2hpbGUgKHN0clB0ciA8IGhvc3RFbmRQdHIp
IHsKICAgICAgICAgICAgICAgICAqcCsrID0gKnN0clB0cisrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0JaG9zdEVuZFBvcyA9IHAgLSBidWZmZXI7Ci0JCi0JLy8gY29weSBpbiB0aGUgcG9y
dAotCWlmIChwb3J0RW5kICE9IHBvcnRTdGFydCkgewotCSAgICAqcCsrID0gJzonOwotCSAgICBz
dHJQdHIgPSB1cmwgKyBwb3J0U3RhcnQ7Ci0JICAgIGNvbnN0IGNoYXIgKnBvcnRFbmRQdHIgPSB1
cmwgKyBwb3J0RW5kOwotCSAgICB3aGlsZSAoc3RyUHRyIDwgcG9ydEVuZFB0cikgewotCQkqcCsr
ID0gKnN0clB0cisrOwotCSAgICB9Ci0JfQotCXBvcnRFbmRQb3MgPSBwIC0gYnVmZmVyOworICAg
ICAgICBob3N0RW5kUG9zID0gcCAtIGJ1ZmZlcjsKKyAgICAgICAgCisgICAgICAgIC8vIGNvcHkg
aW4gdGhlIHBvcnQKKyAgICAgICAgaWYgKHBvcnRFbmQgIT0gcG9ydFN0YXJ0KSB7CisgICAgICAg
ICAgICAqcCsrID0gJzonOworICAgICAgICAgICAgc3RyUHRyID0gdXJsICsgcG9ydFN0YXJ0Owor
ICAgICAgICAgICAgY29uc3QgY2hhciAqcG9ydEVuZFB0ciA9IHVybCArIHBvcnRFbmQ7CisgICAg
ICAgICAgICB3aGlsZSAoc3RyUHRyIDwgcG9ydEVuZFB0cikgeworICAgICAgICAgICAgICAgICpw
KysgPSAqc3RyUHRyKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcG9ydEVu
ZFBvcyA9IHAgLSBidWZmZXI7CiAgICAgfSBlbHNlIHsKLQl1c2VyU3RhcnRQb3MgPSB1c2VyRW5k
UG9zID0gcGFzc3dvcmRFbmRQb3MgPSBob3N0RW5kUG9zID0gcG9ydEVuZFBvcyA9IHAgLSBidWZm
ZXI7CisgICAgICAgIHVzZXJTdGFydFBvcyA9IHVzZXJFbmRQb3MgPSBwYXNzd29yZEVuZFBvcyA9
IGhvc3RFbmRQb3MgPSBwb3J0RW5kUG9zID0gcCAtIGJ1ZmZlcjsKICAgICB9CiAKICAgICAvLyBG
b3IgY2Fub25pY2FsaXphdGlvbiwgZW5zdXJlIHdlIGhhdmUgYSAnLycgZm9yIG5vIHBhdGguCkBA
IC0xMzk4LDggKzEzMDMsOCBAQAogICAgIAogICAgIC8vIGFkZCBmcmFnbWVudCwgZXNjYXBpbmcg
YmFkIGNoYXJhY3RlcnMKICAgICBpZiAoZnJhZ21lbnRFbmQgIT0gcXVlcnlFbmQpIHsKLQkqcCsr
ID0gJyMnOwotCWFwcGVuZEVzY2FwaW5nQmFkQ2hhcnMocCwgdXJsICsgZnJhZ21lbnRTdGFydCwg
ZnJhZ21lbnRFbmQgLSBmcmFnbWVudFN0YXJ0KTsKKyAgICAgICAgKnArKyA9ICcjJzsKKyAgICAg
ICAgYXBwZW5kRXNjYXBpbmdCYWRDaGFycyhwLCB1cmwgKyBmcmFnbWVudFN0YXJ0LCBmcmFnbWVu
dEVuZCAtIGZyYWdtZW50U3RhcnQpOwogICAgIH0KICAgICBmcmFnbWVudEVuZFBvcyA9IHAgLSBi
dWZmZXI7CiAKQEAgLTE0MDcsMTUgKzEzMTIsMTUgQEAKICAgICAvLyBpdCBzdGFydGVkIGFzIGEg
UVN0cmluZywganVzdCByZXVzZSBpdCwgdG8gYXZvaWQgZXh0cmEKICAgICAvLyBhbGxvY2F0aW9u
LgogICAgIGlmIChvcmlnaW5hbFN0cmluZyAhPSBOVUxMICYmIHN0cm5jbXAoYnVmZmVyLCB1cmws
IGZyYWdtZW50RW5kUG9zKSA9PSAwKSB7Ci0JdXJsU3RyaW5nID0gKm9yaWdpbmFsU3RyaW5nOwor
ICAgICAgICB1cmxTdHJpbmcgPSAqb3JpZ2luYWxTdHJpbmc7CiAgICAgfSBlbHNlIHsKLQl1cmxT
dHJpbmcgPSBRU3RyaW5nKGJ1ZmZlciwgZnJhZ21lbnRFbmRQb3MpOworICAgICAgICB1cmxTdHJp
bmcgPSBRU3RyaW5nKGJ1ZmZlciwgZnJhZ21lbnRFbmRQb3MpOwogICAgIH0KIAogICAgIEFTU0VS
VChwIC0gYnVmZmVyIDw9IChpbnQpYnVmZmVyTGVuZ3RoKTsKLQkJCisgICAgICAgICAgICAgICAg
CiAgICAgaWYgKGJ1ZmZlciAhPSBzdGF0aWNCdWZmZXIpIHsKLQlmYXN0RnJlZShidWZmZXIpOwor
ICAgICAgICBmYXN0RnJlZShidWZmZXIpOwogICAgIH0KIH0KIApAQCAtMTQ0NCw5ICsxMzQ5LDkg
QEAKICAgICBjaGFyICpidWZmZXI7CiAgICAgdWludCBidWZmZXJMZW5ndGggPSBhc1VURjgubGVu
Z3RoKCkgKiAzICsgMTsKICAgICBpZiAoYnVmZmVyTGVuZ3RoIDw9IHNpemVvZihzdGF0aWNCdWZm
ZXIpKSB7Ci0JYnVmZmVyID0gc3RhdGljQnVmZmVyOworICAgICAgICBidWZmZXIgPSBzdGF0aWNC
dWZmZXI7CiAgICAgfSBlbHNlIHsKLQlidWZmZXIgPSAoY2hhciAqKWZhc3RNYWxsb2MoYnVmZmVy
TGVuZ3RoKTsKKyAgICAgICAgYnVmZmVyID0gKGNoYXIgKilmYXN0TWFsbG9jKGJ1ZmZlckxlbmd0
aCk7CiAgICAgfQogICAgIAogICAgIGNoYXIgKnAgPSBidWZmZXI7CkBAIC0xNDU0LDIyICsxMzU5
LDIyIEBACiAgICAgY29uc3QgY2hhciAqc3RyID0gYXNVVEY4OwogICAgIGNvbnN0IGNoYXIgKnN0
ckVuZCA9IHN0ciArIGFzVVRGOC5sZW5ndGgoKTsKICAgICB3aGlsZSAoc3RyIDwgc3RyRW5kKSB7
Ci0JdW5zaWduZWQgY2hhciBjID0gKnN0cisrOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAq
c3RyKys7CiAgICAgICAgIGlmIChpc0JhZENoYXIoYykpIHsKICAgICAgICAgICAgICpwKysgPSAn
JSc7CiAgICAgICAgICAgICAqcCsrID0gaGV4RGlnaXRzW2MgPj4gNF07CiAgICAgICAgICAgICAq
cCsrID0gaGV4RGlnaXRzW2MgJiAweEZdOwotCX0gZWxzZSB7Ci0JICAgICpwKysgPSBjOwotCX0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpwKysgPSBjOworICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIFFTdHJpbmcgcmVzdWx0KGJ1ZmZlciwgcCAtIGJ1ZmZlcik7CiAgICAgCiAg
ICAgQVNTRVJUKHAgLSBidWZmZXIgPD0gKGludClidWZmZXJMZW5ndGgpOwotCQkKKyAgICAgICAg
ICAgICAgICAKICAgICBpZiAoYnVmZmVyICE9IHN0YXRpY0J1ZmZlcikgewotCWZhc3RGcmVlKGJ1
ZmZlcik7CisgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7CiAgICAgfQogCiAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTE3MjksMTEgKzE2MzQsMTEgQEAKICAgICB1bnNpZ25lZCBwYXRoRW5kOwogICAg
IAogICAgIGlmIChoYXNoUG9zID49IDAgJiYgKHF1ZXN0aW9uUG9zIDwgMCB8fCBxdWVzdGlvblBv
cyA+IGhhc2hQb3MpKSB7Ci0JcGF0aEVuZCA9IGhhc2hQb3M7CisgICAgICAgIHBhdGhFbmQgPSBo
YXNoUG9zOwogICAgIH0gZWxzZSBpZiAocXVlc3Rpb25Qb3MgPj0gMCkgewotCXBhdGhFbmQgPSBx
dWVzdGlvblBvczsKKyAgICAgICAgcGF0aEVuZCA9IHF1ZXN0aW9uUG9zOwogICAgIH0gZWxzZSB7
Ci0JcGF0aEVuZCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgcGF0aEVuZCA9IHN0cmluZy5s
ZW5ndGgoKTsKICAgICB9CiAKICAgICByZXR1cm4gc3RyaW5nLmxlZnQocGF0aEVuZCkucmVwbGFj
ZSgnXFwnLCcvJykgKyBzdHJpbmcubWlkKHBhdGhFbmQpOwoKUHJvcGVydHkgY2hhbmdlcyBvbjog
a3dxL0tXUUtVUkwubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBhbGxvdy10YWJzCiAgIC0geAoKSW5kZXg6
IGt3cS9LV1FLVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUUtVUkwuaAkocmV2aXNpb24gMTIw
NzIpCisrKyBrd3EvS1dRS1VSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBACiAg
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CiAgICAgYm9vbCBo
YXNQYXRoKCkgY29uc3Q7CiAKLSAgICBRU3RyaW5nIGNhbm9uaWNhbFVSTCgpIGNvbnN0OwogICAg
IFFTdHJpbmcgdXJsKCkgY29uc3QgeyByZXR1cm4gdXJsU3RyaW5nOyB9CiAKICAgICBRU3RyaW5n
IHByb3RvY29sKCkgY29uc3Q7CkBAIC05MywxMyArOTIsNiBAQAogICAgIGJvb2wgaXNIaWVyYXJj
aGljYWwoKSBjb25zdDsKICAgICB2b2lkIHBhcnNlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgUVN0
cmluZyAqb3JpZ2luYWxTdHJpbmcpOwogCi0jaWZkZWYgQ09OU1RSVUNUX0NBTk9OSUNBTF9TVFJJ
TkcKLSAgICBRU3RyaW5nIF9wYXRoKCkgY29uc3Q7Ci0gICAgUVN0cmluZyBfdXNlcigpIGNvbnN0
OwotICAgIFFTdHJpbmcgX3Bhc3MoKSBjb25zdDsKLSAgICBRU3RyaW5nIF9ob3N0KCkgY29uc3Q7
Ci0jZW5kaWYKLSAgICAKICAgICBRU3RyaW5nIHVybFN0cmluZzsKICAgICBib29sIG1faXNWYWxp
ZDsKICAgICBpbnQgc2NoZW1lRW5kUG9zOwpJbmRleDoga3dxL0tXUURpY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrd3EvS1dRRGljdC5oCShyZXZpc2lvbiAxMjA3MikKKysrIGt3cS9LV1FEaWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBRRElDVF9IXwotI2RlZmluZSBRRElDVF9IXwotCi0jaW5jbHVkZSAiS1dRQ29sbGVjdGlvbi5o
IgotI2luY2x1ZGUgIktXUVN0cmluZy5oIgotCi0jaW5jbHVkZSAiS1dRRGljdEltcGwuaCIKLQot
dGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgUURpY3RJdGVyYXRvcjsKLQotdGVtcGxhdGUgPGNsYXNz
IFQ+IGNsYXNzIFFEaWN0IDogcHVibGljIFFQdHJDb2xsZWN0aW9uIHsKLXB1YmxpYzoKLSAgICBR
RGljdChpbnQgc2l6ZT0xNywgYm9vbCBjYXNlU2Vuc2l0aXZlPXRydWUpIDogaW1wbChzaXplLCBj
YXNlU2Vuc2l0aXZlLCBRRGljdDo6ZGVsZXRlRnVuYykge30KLSAgICB2aXJ0dWFsIH5RRGljdCgp
IHsgaW1wbC5jbGVhcihkZWxfaXRlbSk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpIHsg
aW1wbC5jbGVhcihkZWxfaXRlbSk7IH0KLSAgICB2aXJ0dWFsIHVpbnQgY291bnQoKSBjb25zdCB7
IHJldHVybiBpbXBsLmNvdW50KCk7IH0KLSAgICB2b2lkIGluc2VydChjb25zdCBRU3RyaW5nICZr
ZXksIGNvbnN0IFQgKnZhbHVlKSB7IGltcGwuaW5zZXJ0KGtleSwodm9pZCAqKXZhbHVlKTt9Ci0g
ICAgYm9vbCByZW1vdmUoY29uc3QgUVN0cmluZyAma2V5KSB7IHJldHVybiBpbXBsLnJlbW92ZShr
ZXksZGVsX2l0ZW0pOyB9Ci0gICAgdm9pZCByZXBsYWNlKGNvbnN0IFFTdHJpbmcgJmtleSwgY29u
c3QgVCAqdmFsdWUpIHsgaWYgKGZpbmQoa2V5KSkgcmVtb3ZlKGtleSk7IGluc2VydChrZXksIHZh
bHVlKTsgfQotICAgIAotICAgIFQgKmZpbmQoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdCB7IHJl
dHVybiAoVCAqKWltcGwuZmluZChrZXkpOyB9Ci0KLSAgICBRRGljdCAmb3BlcmF0b3I9KGNvbnN0
IFFEaWN0ICZkKSB7IGltcGwuYXNzaWduKGQuaW1wbCwgZGVsX2l0ZW0pOyBRUHRyQ29sbGVjdGlv
bjo6b3BlcmF0b3I9KGQpOyByZXR1cm4gKnRoaXM7fQotICAgIFQgKm9wZXJhdG9yW10oY29uc3Qg
UVN0cmluZyAma2V5KSBjb25zdCB7IHJldHVybiBmaW5kKGtleSk7IH0KLQotIHByaXZhdGU6Ci0g
ICAgc3RhdGljIHZvaWQgZGVsZXRlRnVuYyh2b2lkICppdGVtKSB7IGRlbGV0ZSAoVCAqKWl0ZW07
IH0KLQotICAgIEtXUURpY3RJbXBsIGltcGw7Ci0KLSAgICBmcmllbmQgY2xhc3MgUURpY3RJdGVy
YXRvcjxUPjsKLX07Ci0KLQotdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgUURpY3RJdGVyYXRvciB7
Ci1wdWJsaWM6Ci0gICAgUURpY3RJdGVyYXRvcihjb25zdCBRRGljdDxUPiAmZCkgOiBpbXBsKGQu
aW1wbCkge30KLQotICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBpbXBsLmNvdW50KCk7
IH0KLSAgICBUICpjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gKFQgKilpbXBsLmN1cnJlbnQoKTsg
fQotICAgIFFTdHJpbmcgY3VycmVudEtleSgpIGNvbnN0IHsgcmV0dXJuIGltcGwuY3VycmVudFN0
cmluZ0tleSgpOyB9Ci0gICAgVCAqdG9GaXJzdCgpIHsgcmV0dXJuIChUICopaW1wbC50b0ZpcnN0
KCk7IH0KLQotICAgIFQgKm9wZXJhdG9yKysoKSB7IHJldHVybiAoVCAqKSsraW1wbDsgfQotICAg
IFQgKm9wZXJhdG9yKigpIHsgcmV0dXJuIChUICopaW1wbC5jdXJyZW50KCk7IH0KLQotcHJpdmF0
ZToKLSAgICBLV1FEaWN0SXRlcmF0b3JJbXBsIGltcGw7Ci19OwotCi0jZGVmaW5lIFEzRGljdCBR
RGljdAotI2RlZmluZSBRM0RpY3RJdGVyYXRvciBRRGljdEl0ZXJhdG9yCi0KLSNlbmRpZgpJbmRl
eDoga3dxL0tXUURpY3RJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3dxL0tXUURpY3RJbXBsLmgJKHJl
dmlzaW9uIDEyMDcyKQorKysga3dxL0tXUURpY3RJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBLV1FfRElDVF9JTVBMX0gK
LSNkZWZpbmUgS1dRX0RJQ1RfSU1QTF9ICi0KLSNpbmNsdWRlICJLV1FQdHJEaWN0SW1wbC5oIgot
I2luY2x1ZGUgIktXUVN0cmluZy5oIgotCi1jbGFzcyBLV1FEaWN0SW1wbCA6IHB1YmxpYyBLV1FQ
dHJEaWN0SW1wbCB7Ci0gcHVibGljOgotICAgIEtXUURpY3RJbXBsKGludCBzaXplLCBib29sIGNh
c2VTZW5zaXRpdmUsIHZvaWQgKCpkZWxldGVGdW5jKSh2b2lkICopKTsKLQotICAgIHZvaWQgaW5z
ZXJ0KGNvbnN0IFFTdHJpbmcgJmtleSwgY29uc3Qgdm9pZCAqdmFsdWUpOwotICAgIGJvb2wgcmVt
b3ZlKGNvbnN0IFFTdHJpbmcgJmtleSwgYm9vbCBkZWxldGVJdGVtcyk7Ci0gICAgdm9pZCAqZmlu
ZChjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGJvb2wgbV9jYXNl
U2Vuc2l0aXZlOwotfTsKLQotY2xhc3MgS1dRRGljdEl0ZXJhdG9ySW1wbCA6IHB1YmxpYyBLV1FQ
dHJEaWN0SXRlcmF0b3JJbXBsIHsKLSBwdWJsaWM6Ci0gICAgS1dRRGljdEl0ZXJhdG9ySW1wbChj
b25zdCBLV1FEaWN0SW1wbCAmZGkpIDogS1dRUHRyRGljdEl0ZXJhdG9ySW1wbChkaSkgeyB9Ci0K
LSAgICBRU3RyaW5nIGN1cnJlbnRTdHJpbmdLZXkoKSBjb25zdDsKLX07Ci0KLSNlbmRpZgo=
</data>
<flag name="review"
          id="1264"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5700</attachid>
            <date>2006-01-15 13:21:12 -0800</date>
            <delta_ts>2006-01-15 13:33:20 -0800</delta_ts>
            <desc>follow-on to fix regression in layout test</desc>
            <filename>AtomicStringIDPatch.txt</filename>
            <type>text/plain</type>
            <size>27598</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3htbC9Eb2N1bWVudFR5cGVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRt
bC94bWwvRG9jdW1lbnRUeXBlSW1wbC5jcHAJKHJldmlzaW9uIDEyMTEyKQorKysga2h0bWwveG1s
L0RvY3VtZW50VHlwZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50VHlwZUltcGwuaCIK
IAotI2luY2x1ZGUgIkRvY3VtZW50VHlwZUltcGwuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRh
dGlvbkltcGwuaCIKICNpbmNsdWRlICJEb2N1bWVudEltcGwuaCIKICNpbmNsdWRlICJkb21fbm9k
ZS5oIgpAQCAtNTUsMjAgKzU1LDIwIEBACiAgICAgRE9NU3RyaW5nIHJlc3VsdCA9ICI8IURPQ1RZ
UEUgIjsKICAgICByZXN1bHQgKz0gbV9uYW1lOwogICAgIGlmICghbV9wdWJsaWNJZC5pc0VtcHR5
KCkpIHsKLQlyZXN1bHQgKz0gIiBQVUJMSUMgXCIiOwotCXJlc3VsdCArPSBtX3B1YmxpY0lkOwot
CXJlc3VsdCArPSAiXCIgXCIiOwotCXJlc3VsdCArPSBtX3N5c3RlbUlkOwotCXJlc3VsdCArPSAi
XCIiOworICAgICAgICByZXN1bHQgKz0gIiBQVUJMSUMgXCIiOworICAgICAgICByZXN1bHQgKz0g
bV9wdWJsaWNJZDsKKyAgICAgICAgcmVzdWx0ICs9ICJcIiBcIiI7CisgICAgICAgIHJlc3VsdCAr
PSBtX3N5c3RlbUlkOworICAgICAgICByZXN1bHQgKz0gIlwiIjsKICAgICB9IGVsc2UgaWYgKCFt
X3N5c3RlbUlkLmlzRW1wdHkoKSkgewotCXJlc3VsdCArPSAiIFNZU1RFTSBcIiI7Ci0JcmVzdWx0
ICs9IG1fc3lzdGVtSWQ7Ci0JcmVzdWx0ICs9ICJcIiI7CisgICAgICAgIHJlc3VsdCArPSAiIFNZ
U1RFTSBcIiI7CisgICAgICAgIHJlc3VsdCArPSBtX3N5c3RlbUlkOworICAgICAgICByZXN1bHQg
Kz0gIlwiIjsKICAgICB9CiAgICAgaWYgKCFtX3N1YnNldC5pc0VtcHR5KCkpIHsKLQlyZXN1bHQg
Kz0gIiBbIjsKLQlyZXN1bHQgKz0gbV9zdWJzZXQ7Ci0JcmVzdWx0ICs9ICJdIjsKKyAgICAgICAg
cmVzdWx0ICs9ICIgWyI7CisgICAgICAgIHJlc3VsdCArPSBtX3N1YnNldDsKKyAgICAgICAgcmVz
dWx0ICs9ICJdIjsKICAgICB9CiAgICAgcmVzdWx0ICs9ICI+IjsKICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtODQsMTAgKzg0LDEwIEBACiAgICAgcmV0dXJuIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9E
RTsKIH0KIAotTm9kZUltcGwgKkRvY3VtZW50VHlwZUltcGw6OmNsb25lTm9kZShib29sIC8qZGVl
cCovKQorTm9kZUltcGwqIERvY3VtZW50VHlwZUltcGw6OmNsb25lTm9kZShib29sIC8qZGVlcCov
KQogewogICAgIC8vIFRoZSBET00gTGV2ZWwgMiBzcGVjaWZpY2F0aW9uIHNheXMgY2xvbmluZyBE
b2N1bWVudFR5cGUgbm9kZXMgaXMgImltcGxlbWVudGF0aW9uIGRlcGVuZGVudCIgc28gZm9yIG5v
dyB3ZSBkbyBub3Qgc3VwcG9ydCBpdC4KICAgICByZXR1cm4gMDsKIH0KIAotfTsKK30KClByb3Bl
cnR5IGNoYW5nZXMgb246IGtodG1sL3htbC9Eb2N1bWVudFR5cGVJbXBsLmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck5hbWU6IGFsbG93LXRhYnMKICAgLSB4CgpJbmRleDoga2h0bWwveG1sL0RvY3VtZW50SW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtodG1sL3htbC9Eb2N1bWVudEltcGwuaAkocmV2aXNpb24gMTIxMTQp
CisrKyBraHRtbC94bWwvRG9jdW1lbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw4ICsx
NTYsOCBAQAogICAgIEVudGl0eVJlZmVyZW5jZUltcGwgKmNyZWF0ZUVudGl0eVJlZmVyZW5jZShj
b25zdCBET01TdHJpbmcgJm5hbWUsIGludCAmZXhjZXB0aW9uQ29kZSk7CiAgICAgTm9kZUltcGwg
KmltcG9ydE5vZGUoIE5vZGVJbXBsICppbXBvcnRlZE5vZGUsIGJvb2wgZGVlcCwgaW50ICZleGNl
cHRpb25jb2RlICk7CiAgICAgdmlydHVhbCBFbGVtZW50SW1wbCAqY3JlYXRlRWxlbWVudE5TKGNv
bnN0IERPTVN0cmluZyAmX25hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZfcXVhbGlmaWVk
TmFtZSwgaW50ICZleGNlcHRpb25jb2RlKTsKLSAgICBFbGVtZW50SW1wbCAqZ2V0RWxlbWVudEJ5
SWQgKCBjb25zdCBET01TdHJpbmcgJmVsZW1lbnRJZCApIGNvbnN0OwotICAgIEVsZW1lbnRJbXBs
ICplbGVtZW50RnJvbVBvaW50ICggY29uc3QgaW50IF94LCBjb25zdCBpbnQgX3kgKSBjb25zdDsK
KyAgICBFbGVtZW50SW1wbCogZ2V0RWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJikgY29u
c3Q7CisgICAgRWxlbWVudEltcGwqIGVsZW1lbnRGcm9tUG9pbnQoaW50IHgsIGludCB5KSBjb25z
dDsKIAogICAgIE5vZGVJbXBsICphZG9wdE5vZGUoTm9kZUltcGwgKnNvdXJjZSwgaW50ICZleGNl
cHRpb25jb2RlKTsKICAgICAKQEAgLTQ5Miw4ICs0OTIsOCBAQAogICAgIC8vIChlbXB0eSBzdHJp
bmcgb3IgaW52YWxpZCBjaGFyYWN0ZXJzKS4KICAgICBzdGF0aWMgYm9vbCBwYXJzZVF1YWxpZmll
ZE5hbWUoY29uc3QgRE9NU3RyaW5nICZxdWFsaWZpZWROYW1lLCBET01TdHJpbmcgJnByZWZpeCwg
RE9NU3RyaW5nICZsb2NhbE5hbWUpOwogICAgIAotICAgIHZvaWQgYWRkRWxlbWVudEJ5SWQoY29u
c3QgRE9NU3RyaW5nICZlbGVtZW50SWQsIEVsZW1lbnRJbXBsICplbGVtZW50KTsKLSAgICB2b2lk
IHJlbW92ZUVsZW1lbnRCeUlkKGNvbnN0IERPTVN0cmluZyAmZWxlbWVudElkLCBFbGVtZW50SW1w
bCAqZWxlbWVudCk7CisgICAgdm9pZCBhZGRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcm
IGVsZW1lbnRJZCwgRWxlbWVudEltcGwgKmVsZW1lbnQpOworICAgIHZvaWQgcmVtb3ZlRWxlbWVu
dEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQsIEVsZW1lbnRJbXBsICplbGVtZW50
KTsKIAogICAgIHZvaWQgYWRkSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnRJbXBsICopOwogICAgIHZv
aWQgcmVtb3ZlSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnRJbXBsICopOwpAQCAtNzM2LDggKzczNiw4
IEBACiAgICAgCiAgICAgUmVmUHRyPGtodG1sOjpEZWNvZGVyPiBtX2RlY29kZXI7CiAKLSAgICBt
dXRhYmxlIEhhc2hNYXA8RE9NU3RyaW5nSW1wbCosIEVsZW1lbnRJbXBsKj4gbV9lbGVtZW50c0J5
SWQ7Ci0gICAgbXV0YWJsZSBIYXNoQ291bnRlZFNldDxET01TdHJpbmdJbXBsKj4gbV9pZENvdW50
OworICAgIG11dGFibGUgSGFzaE1hcDxET01TdHJpbmdJbXBsKiwgRWxlbWVudEltcGwqLCBQb2lu
dGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiBtX2VsZW1lbnRzQnlJZDsKKyAgICBtdXRhYmxlIEhh
c2hDb3VudGVkU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4g
PiBtX2R1cGxpY2F0ZUlkczsKICAgICAKICAgICBIYXNoTWFwPERPTVN0cmluZ0ltcGwqLCBFbGVt
ZW50SW1wbCosIENhc2VJbnNlbnNpdGl2ZUhhc2g+IG1fZWxlbWVudHNCeUFjY2Vzc0tleTsKICAg
ICBib29sIG1fYWNjZXNzS2V5TWFwVmFsaWQ7CkluZGV4OiBraHRtbC94bWwvZG9tMl9ldmVudHNp
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmNwcAkocmV2
aXNpb24gMTIxMTIpCisrKyBraHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQogICogKEMpIDIwMDEgVG9iaWFzIEFudG9uIChhbnRvbkBzdHVkLmZiaS5maC1kYXJt
c3RhZHQuZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xNTIsMTAgKzE1MiwxMCBAQAogfQogCiB2b2lkIFVJ
RXZlbnRJbXBsOjppbml0VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0JCQkg
ICAgICBib29sIGNhbkJ1YmJsZUFyZywKLQkJCSAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLQkJ
CSAgICAgIEFic3RyYWN0Vmlld0ltcGwgKnZpZXdBcmcsCi0JCQkgICAgICBpbnQgZGV0YWlsQXJn
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXdJbXBsICp2aWV3QXJnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZykKIHsKICAgICBpZiAoZGlzcGF0Y2hl
ZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMTUsMTggKzIxNSwxOCBAQAogfQogCiBNb3VzZVJl
bGF0ZWRFdmVudEltcGw6Ok1vdXNlUmVsYXRlZEV2ZW50SW1wbChjb25zdCBBdG9taWNTdHJpbmcg
JmV2ZW50VHlwZSwKLQkJCSAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLQkJCSAgICAgICBib29s
IGNhbmNlbGFibGVBcmcsCi0JCQkgICAgICAgQWJzdHJhY3RWaWV3SW1wbCAqdmlld0FyZywKLQkJ
CSAgICAgICBpbnQgZGV0YWlsQXJnLAotCQkJICAgICAgIGludCBzY3JlZW5YQXJnLAotCQkJICAg
ICAgIGludCBzY3JlZW5ZQXJnLAotCQkJICAgICAgIGludCBjbGllbnRYQXJnLAotCQkJICAgICAg
IGludCBjbGllbnRZQXJnLAotCQkJICAgICAgIGJvb2wgY3RybEtleUFyZywKLQkJCSAgICAgICBi
b29sIGFsdEtleUFyZywKLQkJCSAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotCQkJICAgICAgIGJv
b2wgbWV0YUtleUFyZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1
YmJsZUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVB
cmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3SW1wbCAqdmll
d0FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBjbGllbnRYQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjbGllbnRZQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3Ry
bEtleUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZykKICAgICA6IFVJRXZlbnRX
aXRoS2V5U3RhdGVJbXBsKGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2
aWV3QXJnLCBkZXRhaWxBcmcsCiAgICAgICAgIGN0cmxLZXlBcmcsIGFsdEtleUFyZywgc2hpZnRL
ZXlBcmcsIG1ldGFLZXlBcmcpCiAgICAgLCBtX3NjcmVlblgoc2NyZWVuWEFyZyksIG1fc2NyZWVu
WShzY3JlZW5ZQXJnKQpAQCAtMzI4LDIwICszMjgsMjAgQEAKIH0KIAogTW91c2VFdmVudEltcGw6
Ok1vdXNlRXZlbnRJbXBsKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLAotCQkJICAgICAg
IGJvb2wgY2FuQnViYmxlQXJnLAotCQkJICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLQkJCSAg
ICAgICBBYnN0cmFjdFZpZXdJbXBsICp2aWV3QXJnLAotCQkJICAgICAgIGludCBkZXRhaWxBcmcs
Ci0JCQkgICAgICAgaW50IHNjcmVlblhBcmcsCi0JCQkgICAgICAgaW50IHNjcmVlbllBcmcsCi0J
CQkgICAgICAgaW50IGNsaWVudFhBcmcsCi0JCQkgICAgICAgaW50IGNsaWVudFlBcmcsCi0JCQkg
ICAgICAgYm9vbCBjdHJsS2V5QXJnLAotCQkJICAgICAgIGJvb2wgYWx0S2V5QXJnLAotCQkJICAg
ICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0JCQkgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotCQkJICAg
ICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbkFyZywKLQkJCSAgICAgICBOb2RlSW1wbCAqcmVsYXRl
ZFRhcmdldEFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJs
ZUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3SW1wbCAqdmlld0Fy
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBjbGllbnRYQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBjbGllbnRZQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtl
eUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZUltcGwgKnJlbGF0ZWRUYXJnZXRBcmcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2xpcGJvYXJkSW1wbCAqY2xpcGJvYXJkQXJnKQogICAgIDogTW91
c2VSZWxhdGVkRXZlbnRJbXBsKGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJn
LCB2aWV3QXJnLCBkZXRhaWxBcmcsCiAgICAgICAgIHNjcmVlblhBcmcsIHNjcmVlbllBcmcsIGNs
aWVudFhBcmcsIGNsaWVudFlBcmcsCkBAIC01MzgsMTMgKzUzOCwxMyBAQAogfQogCiBNdXRhdGlv
bkV2ZW50SW1wbDo6TXV0YXRpb25FdmVudEltcGwoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5
cGUsCi0JCQkJICAgICBib29sIGNhbkJ1YmJsZUFyZywKLQkJCQkgICAgIGJvb2wgY2FuY2VsYWJs
ZUFyZywKLQkJCQkgICAgIE5vZGVJbXBsICpyZWxhdGVkTm9kZUFyZywKLQkJCQkgICAgIGNvbnN0
IERPTVN0cmluZyAmcHJldlZhbHVlQXJnLAotCQkJCSAgICAgY29uc3QgRE9NU3RyaW5nICZuZXdW
YWx1ZUFyZywKLQkJCQkgICAgIGNvbnN0IERPTVN0cmluZyAmYXR0ck5hbWVBcmcsCi0JCQkJICAg
ICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlSW1wbCAqcmVsYXRlZE5vZGVBcmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZwcmV2VmFsdWVBcmcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZuZXdWYWx1
ZUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJp
bmcgJmF0dHJOYW1lQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcpCiAgICAgOiBFdmVudEltcGwoZXZlbnRUeXBlLCBj
YW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpCiAgICAgLCBtX3JlbGF0ZWROb2RlKHJlbGF0ZWRO
b2RlQXJnKQogICAgICwgbV9wcmV2VmFsdWUocHJldlZhbHVlQXJnLmltcGwoKSkKQEAgLTU1NSwx
MyArNTU1LDEzIEBACiB9CiAKIHZvaWQgTXV0YXRpb25FdmVudEltcGw6OmluaXRNdXRhdGlvbkV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywKLQkJCQkJICBib29sIGNhbkJ1YmJsZUFy
ZywKLQkJCQkJICBib29sIGNhbmNlbGFibGVBcmcsCi0JCQkJCSAgTm9kZUltcGwgKnJlbGF0ZWRO
b2RlQXJnLAotCQkJCQkgIGNvbnN0IERPTVN0cmluZyAmcHJldlZhbHVlQXJnLAotCQkJCQkgIGNv
bnN0IERPTVN0cmluZyAmbmV3VmFsdWVBcmcsCi0JCQkJCSAgY29uc3QgRE9NU3RyaW5nICZhdHRy
TmFtZUFyZywKLQkJCQkJICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqcmVs
YXRlZE5vZGVBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBET01TdHJpbmcgJnByZXZWYWx1ZUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmbmV3VmFsdWVBcmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJpbmcgJmF0dHJOYW1l
QXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgYXR0ckNoYW5nZUFyZykKIHsKICAgICBpZiAoZGlzcGF0Y2hlZCgpKQogICAgICAgICBy
ZXR1cm47CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBraHRtbC94bWwvZG9tMl9ldmVudHNpbXBsLmNw
cApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk5hbWU6IGFsbG93LXRhYnMKICAgLSB4CgpJbmRleDoga2h0bWwveG1sL05v
ZGVMaXN0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL3htbC9Ob2RlTGlzdEltcGwuaAkocmV2
aXNpb24gMTIxMTIpCisrKyBraHRtbC94bWwvTm9kZUxpc3RJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIyLDYgKzIyLDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgog
ICoKICAqLworCiAjaWZuZGVmIERPTV9Ob2RlTGlzdEltcGxfaAogI2RlZmluZSBET01fTm9kZUxp
c3RJbXBsX2gKIApAQCAtMjksOCArMzAsOCBAQAogCiBuYW1lc3BhY2UgRE9NIHsKIAorY2xhc3Mg
QXRvbWljU3RyaW5nOwogY2xhc3MgTm9kZUltcGw7Ci1jbGFzcyBET01TdHJpbmc7CiAKIGNsYXNz
IE5vZGVMaXN0SW1wbCA6IHB1YmxpYyBTaGFyZWQ8Tm9kZUxpc3RJbXBsPgogewpAQCAtNDAsMjcg
KzQxLDI3IEBACiAKICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vZGVMaXN0
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBO
b2RlSW1wbCAqaXRlbSAoIHVuc2lnbmVkIGluZGV4ICkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
Tm9kZUltcGwgKml0ZW1CeUlkICggY29uc3QgRE9NU3RyaW5nICYgZWxlbWVudElkICkgY29uc3Q7
CisgICAgdmlydHVhbCBOb2RlSW1wbCogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOwor
ICAgIE5vZGVJbXBsKiBpdGVtQnlJZChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKIAogICAg
IC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKLQogICAgIHZpcnR1YWwgdm9pZCBy
b290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUF0dHJp
YnV0ZUNoYW5nZWQoKSB7fQogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gaGVscGVyIGZ1bmN0aW9ucyBm
b3Igc2VhcmNoaW5nIGFsbCBFbGVtZW50SW1wbHMgaW4gYSB0cmVlCi0gICAgdW5zaWduZWQgcmVj
dXJzaXZlTGVuZ3RoKE5vZGVJbXBsICpzdGFydCA9IDApIGNvbnN0OwotICAgIE5vZGVJbXBsICpy
ZWN1cnNpdmVJdGVtICggdW5zaWduZWQgb2Zmc2V0LCBOb2RlSW1wbCAqc3RhcnQgPSAwICkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKCBOb2RlSW1wbCAqdGVzdE5vZGUgKSBj
b25zdCA9IDA7CisgICAgdW5zaWduZWQgcmVjdXJzaXZlTGVuZ3RoKE5vZGVJbXBsKiBzdGFydCA9
IDApIGNvbnN0OworICAgIE5vZGVJbXBsKiByZWN1cnNpdmVJdGVtICh1bnNpZ25lZCBvZmZzZXQs
IE5vZGVJbXBsKiBzdGFydCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hl
cyhOb2RlSW1wbCogdGVzdE5vZGUpIGNvbnN0ID0gMDsKIAotICAgIE5vZGVJbXBsICpyb290Tm9k
ZTsKKyAgICBOb2RlSW1wbCogcm9vdE5vZGU7CiAgICAgbXV0YWJsZSBpbnQgY2FjaGVkTGVuZ3Ro
OwotICAgIG11dGFibGUgTm9kZUltcGwgKmxhc3RJdGVtOworICAgIG11dGFibGUgTm9kZUltcGwq
IGxhc3RJdGVtOwogICAgIG11dGFibGUgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7CiAgICAgbXV0
YWJsZSBib29sIGlzTGVuZ3RoQ2FjaGVWYWxpZCA6IDE7CiAgICAgbXV0YWJsZSBib29sIGlzSXRl
bUNhY2hlVmFsaWQgOiAxOwogfTsKIAotfTsgLy9uYW1lc3BhY2UKK30gLy9uYW1lc3BhY2UKKwog
I2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBraHRtbC94bWwvZG9tMl9yYW5nZWltcGwuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTmFtZTogYWxsb3ctdGFicwogICAtIHgKCkluZGV4OiBraHRtbC94bWwvRG9j
dW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94bWwvRG9jdW1lbnRJbXBsLmNwcAko
cmV2aXNpb24gMTIxMTQpCisrKyBraHRtbC94bWwvRG9jdW1lbnRJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjE3LDcgKzYxNyw3IEBACiAgICAgcmV0dXJuIGU7CiB9CiAKLUVsZW1lbnRJbXBs
ICpEb2N1bWVudEltcGw6OmdldEVsZW1lbnRCeUlkKGNvbnN0IERPTVN0cmluZyYgZWxlbWVudElk
KSBjb25zdAorRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Z2V0RWxlbWVudEJ5SWQoY29uc3Qg
QXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0CiB7CiAgICAgaWYgKGVsZW1lbnRJZC5sZW5n
dGgoKSA9PSAwKQogICAgICAgICByZXR1cm4gMDsKQEAgLTYyNiwxMiArNjI2LDEyIEBACiAgICAg
aWYgKGVsZW1lbnQpCiAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICAKLSAgICBpZiAo
bV9pZENvdW50LmNvbnRhaW5zKGVsZW1lbnRJZC5pbXBsKCkpKSB7CisgICAgaWYgKG1fZHVwbGlj
YXRlSWRzLmNvbnRhaW5zKGVsZW1lbnRJZC5pbXBsKCkpKSB7CiAgICAgICAgIGZvciAoTm9kZUlt
cGwgKm4gPSB0cmF2ZXJzZU5leHROb2RlKCk7IG4gIT0gMDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5v
ZGUoKSkgewogICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAg
ICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICAg
ICAgICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShpZEF0
dHIpID09IGVsZW1lbnRJZCkgewotICAgICAgICAgICAgICAgICAgICBtX2lkQ291bnQucmVtb3Zl
KGVsZW1lbnRJZC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICBtX2R1cGxpY2F0ZUlkcy5y
ZW1vdmUoZWxlbWVudElkLmltcGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fZWxlbWVudHNC
eUlkLnNldChlbGVtZW50SWQuaW1wbCgpLCBlbGVtZW50KTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjQxLDEzICs2NDEsMTMgQEAK
ICAgICByZXR1cm4gMDsKIH0KIAotRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6ZWxlbWVudEZy
b21Qb2ludCggY29uc3QgaW50IF94LCBjb25zdCBpbnQgX3kgKSBjb25zdAorRWxlbWVudEltcGwq
IERvY3VtZW50SW1wbDo6ZWxlbWVudEZyb21Qb2ludChpbnQgeCwgaW50IHkpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3JlbmRlcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBSZW5kZXJP
YmplY3Q6Ok5vZGVJbmZvIG5vZGVJbmZvKHRydWUsIHRydWUpOwotICAgIG1fcmVuZGVyLT5sYXll
cigpLT5oaXRUZXN0KG5vZGVJbmZvLCBfeCwgX3kpOyAKKyAgICBtX3JlbmRlci0+bGF5ZXIoKS0+
aGl0VGVzdChub2RlSW5mbywgeCwgeSk7IAogCiAgICAgTm9kZUltcGwqIG4gPSBub2RlSW5mby5p
bm5lck5vZGUoKTsKICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQpAQCAtNjU1
LDIwICs2NTUsMjAgQEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKTsK
IH0KIAotdm9pZCBEb2N1bWVudEltcGw6OmFkZEVsZW1lbnRCeUlkKGNvbnN0IERPTVN0cmluZyYg
ZWxlbWVudElkLCBFbGVtZW50SW1wbCogZWxlbWVudCkKK3ZvaWQgRG9jdW1lbnRJbXBsOjphZGRF
bGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCwgRWxlbWVudEltcGwqIGVs
ZW1lbnQpCiB7CiAgICAgaWYgKCFtX2VsZW1lbnRzQnlJZC5jb250YWlucyhlbGVtZW50SWQuaW1w
bCgpKSkKICAgICAgICAgbV9lbGVtZW50c0J5SWQuc2V0KGVsZW1lbnRJZC5pbXBsKCksIGVsZW1l
bnQpOwogICAgIGVsc2UKLSAgICAgICAgbV9pZENvdW50Lmluc2VydChlbGVtZW50SWQuaW1wbCgp
KTsKKyAgICAgICAgbV9kdXBsaWNhdGVJZHMuaW5zZXJ0KGVsZW1lbnRJZC5pbXBsKCkpOwogfQog
Ci12b2lkIERvY3VtZW50SW1wbDo6cmVtb3ZlRWxlbWVudEJ5SWQoY29uc3QgRE9NU3RyaW5nJiBl
bGVtZW50SWQsIEVsZW1lbnRJbXBsKiBlbGVtZW50KQordm9pZCBEb2N1bWVudEltcGw6OnJlbW92
ZUVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkLCBFbGVtZW50SW1wbCog
ZWxlbWVudCkKIHsKICAgICBpZiAobV9lbGVtZW50c0J5SWQuZ2V0KGVsZW1lbnRJZC5pbXBsKCkp
ID09IGVsZW1lbnQpCiAgICAgICAgIG1fZWxlbWVudHNCeUlkLnJlbW92ZShlbGVtZW50SWQuaW1w
bCgpKTsKICAgICBlbHNlCi0gICAgICAgIG1faWRDb3VudC5yZW1vdmUoZWxlbWVudElkLmltcGwo
KSk7CisgICAgICAgIG1fZHVwbGljYXRlSWRzLnJlbW92ZShlbGVtZW50SWQuaW1wbCgpKTsKIH0K
IAogRWxlbWVudEltcGwqIERvY3VtZW50SW1wbDo6Z2V0RWxlbWVudEJ5QWNjZXNzS2V5KGNvbnN0
IERPTVN0cmluZyYga2V5KQpAQCAtMTg2Miw3ICsxODYyLDcgQEAKICAgICAgICAgICAgICAgICAv
LyA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IiNteXN0eWxlIj4sIHdpdGggdGhlIGVsZW1lbnQKICAg
ICAgICAgICAgICAgICAvLyA8Zm9vIGlkPSJteXN0eWxlIj5oZWFkaW5nIHsgY29sb3I6IHJlZDsg
fTwvZm9vPiBhdCBzb21lIGxvY2F0aW9uIGluCiAgICAgICAgICAgICAgICAgLy8gdGhlIGRvY3Vt
ZW50Ci0gICAgICAgICAgICAgICAgRWxlbWVudEltcGwqIGVsZW0gPSBnZXRFbGVtZW50QnlJZChw
aS0+bG9jYWxIcmVmKCkpOworICAgICAgICAgICAgICAgIEVsZW1lbnRJbXBsKiBlbGVtID0gZ2V0
RWxlbWVudEJ5SWQocGktPmxvY2FsSHJlZigpLmltcGwoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KGVsZW0pIHsKICAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nIHNoZWV0VGV4dCgiIik7CiAg
ICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpjOwpJbmRleDoga2h0bWwveG1sL05vZGVMaXN0
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwveG1sL05vZGVMaXN0SW1wbC5jcHAJKHJldmlz
aW9uIDEyMTEyKQorKysga2h0bWwveG1sL05vZGVMaXN0SW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI0LDEyICsyNCwxMSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiTm9kZUxpc3RJbXBsLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudEltcGwuaCIKICNpbmNsdWRl
ICJOb2RlSW1wbC5oIgogI2luY2x1ZGUgImRvbV9ub2RlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRJ
bXBsLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBraHRtbDsKLQogbmFtZXNwYWNlIERPTSB7CiAKIE5v
ZGVMaXN0SW1wbDo6Tm9kZUxpc3RJbXBsKE5vZGVJbXBsICpfcm9vdE5vZGUpCkBAIC0xMTAsMTIg
KzEwOSwxMiBAQAogICAgIHJldHVybiAwOyAvLyBubyBtYXRjaGluZyBub2RlIGluIHRoaXMgc3Vi
dHJlZQogfQogCi1Ob2RlSW1wbCAqTm9kZUxpc3RJbXBsOjppdGVtQnlJZCAoY29uc3QgRE9NU3Ry
aW5nJiBlbGVtZW50SWQpIGNvbnN0CitOb2RlSW1wbCogTm9kZUxpc3RJbXBsOjppdGVtQnlJZChj
b25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKIHsKICAgICBpZiAocm9vdE5vZGUt
PmlzRG9jdW1lbnROb2RlKCkgfHwgcm9vdE5vZGUtPmluRG9jdW1lbnQoKSkgewogICAgICAgICBO
b2RlSW1wbCAqbm9kZSA9IHJvb3ROb2RlLT5nZXREb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChl
bGVtZW50SWQpOwogCi0gICAgICAgIGlmIChub2RlID09IE5VTEwgfHwgIW5vZGVNYXRjaGVzKG5v
ZGUpKQorICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGVNYXRjaGVzKG5vZGUpKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAgICAgZm9yIChOb2RlSW1wbCAqcCA9IG5vZGUtPnBhcmVudE5v
ZGUoKTsgcDsgcCA9IHAtPnBhcmVudE5vZGUoKSkgewoKUHJvcGVydHkgY2hhbmdlcyBvbjoga2h0
bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBhbGxvdy10YWJzCiAg
IC0geAoKSW5kZXg6IGtodG1sL2h0bWwvSFRNTExhYmVsRWxlbWVudEltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtodG1sL2h0bWwvSFRNTExhYmVsRWxlbWVudEltcGwuY3BwCShyZXZpc2lvbiAxMjEx
MikKKysrIGtodG1sL2h0bWwvSFRNTExhYmVsRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw3ICs2NSw3IEBACiAKIEVsZW1lbnRJbXBsICpIVE1MTGFiZWxFbGVtZW50SW1wbDo6
Zm9ybUVsZW1lbnQoKQogewotICAgIERPTVN0cmluZyBmb3JtRWxlbWVudElkID0gZ2V0QXR0cmli
dXRlKGZvckF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUVsZW1lbnRJZCA9IGdl
dEF0dHJpYnV0ZShmb3JBdHRyKTsKICAgICBpZiAoZm9ybUVsZW1lbnRJZC5pc051bGwoKSkgewog
ICAgICAgICAvLyBTZWFyY2ggY2hpbGRyZW4gb2YgdGhlIGxhYmVsIGVsZW1lbnQgZm9yIGEgZm9y
bSBlbGVtZW50LgogICAgICAgICBOb2RlSW1wbCAqbm9kZSA9IHRoaXM7CkluZGV4OiBraHRtbC9l
Y21hL2tqc19jc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEva2pzX2Nzcy5jcHAJKHJl
dmlzaW9uIDEyMTEyKQorKysga2h0bWwvZWNtYS9ranNfY3NzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzg5LDcgKzM4OSw3IEBACiBKU1ZhbHVlICpET01TdHlsZVNoZWV0TGlzdDo6bmFtZUdldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERPTVN0
eWxlU2hlZXRMaXN0ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RE9NU3R5bGVTaGVldExpc3QgKj4o
c2xvdC5zbG90QmFzZSgpKTsKLSAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSB0aGlzT2JqLT5tX2Rv
Yy0+Z2V0RWxlbWVudEJ5SWQocHJvcGVydHlOYW1lLmRvbVN0cmluZygpKTsKKyAgRWxlbWVudElt
cGwgKmVsZW1lbnQgPSB0aGlzT2JqLT5tX2RvYy0+Z2V0RWxlbWVudEJ5SWQocHJvcGVydHlOYW1l
LmRvbVN0cmluZygpLmltcGwoKSk7CiAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0
YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5zaGVldCgpKTsKIH0K
IApAQCAtNDIzLDcgKzQyMyw3IEBACiAgIC8vICMjIyBCYWQgaW1wbGVtZW50YXRpb24gYmVjYXVz
ZSByZXR1cm5zIGEgc2luZ2xlIGVsZW1lbnQgKGFyZSBJRHMgYWx3YXlzIHVuaXF1ZT8pCiAgIC8v
IGFuZCBkb2Vzbid0IGxvb2sgZm9yIG5hbWUgYXR0cmlidXRlIChzZWUgaW1wbGVtZW50YXRpb24g
YWJvdmUpLgogICAvLyBCdXQgdW5pY2l0eSBvZiBzdHlsZXNoZWV0IGlkcyBpcyBnb29kIHByYWN0
aWNlIGFueXdheSA7KQotICBFbGVtZW50SW1wbCAqZWxlbWVudCA9IG1fZG9jLT5nZXRFbGVtZW50
QnlJZChwcm9wZXJ0eU5hbWUuZG9tU3RyaW5nKCkpOworICBFbGVtZW50SW1wbCAqZWxlbWVudCA9
IG1fZG9jLT5nZXRFbGVtZW50QnlJZChwcm9wZXJ0eU5hbWUuZG9tU3RyaW5nKCkuaW1wbCgpKTsK
ICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShzdHlsZVRhZykpIHsKICAgICBz
bG90LnNldEN1c3RvbSh0aGlzLCBuYW1lR2V0dGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS9ranNf
d2luZG93LmNwcAkocmV2aXNpb24gMTIxMTIpCisrKyBraHRtbC9lY21hL2tqc193aW5kb3cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDI3LDcgKzEwMjcsNyBAQAogICAvLyBhbGxvdyBzaG9ydGN1
dHMgbGlrZSAnSW1hZ2UxJyBpbnN0ZWFkIG9mIGRvY3VtZW50LmltYWdlcy5JbWFnZTEKICAgRG9j
dW1lbnRJbXBsICpkb2MgPSBtX2ZyYW1lLT54bWxEb2NJbXBsKCk7CiAgIGlmIChpc1NhZmVTY3Jp
cHQoZXhlYykgJiYgZG9jICYmIGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgIERPTVN0cmlu
ZyBuYW1lID0gcHJvcGVydHlOYW1lLmRvbVN0cmluZygpOworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSA9IHByb3BlcnR5TmFtZS5kb21TdHJpbmcoKS5pbXBsKCk7CiAgICAgaWYgKHN0YXRp
Y19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oZG9jKS0+aGFzTmFtZWRJdGVtKG5hbWUpIHx8IGRv
Yy0+Z2V0RWxlbWVudEJ5SWQobmFtZSkpIHsKICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5h
bWVkSXRlbUdldHRlcik7CiAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IGtodG1sL2VjbWEva2pz
X2RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS9ranNfZG9tLmNwcAkocmV2aXNpb24g
MTIxMTIpCisrKyBraHRtbC9lY21hL2tqc19kb20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjQs
NyArNzI0LDcgQEAKIEpTVmFsdWUgKkRPTU5vZGVMaXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NTm9kZUxpc3QgKnRoaXNP
YmogPSBzdGF0aWNfY2FzdDxET01Ob2RlTGlzdCAqPihzbG90LnNsb3RCYXNlKCkpOwotICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLCB0aGlzT2JqLT5tX2ltcGwtPml0ZW1CeUlkKHByb3BlcnR5TmFt
ZS5kb21TdHJpbmcoKSkpOworICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCB0aGlzT2JqLT5tX2lt
cGwtPml0ZW1CeUlkKHByb3BlcnR5TmFtZS5kb21TdHJpbmcoKS5pbXBsKCkpKTsKIH0KIAogYm9v
bCBET01Ob2RlTGlzdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC03NDcsNyAr
NzQ3LDcgQEAKICAgaWYgKG9rICYmIGlkeCA8IGxpc3QubGVuZ3RoKCkpIHsKICAgICBzbG90LnNl
dEN1c3RvbUluZGV4KHRoaXMsIGlkeCwgaW5kZXhHZXR0ZXIpOwogICAgIHJldHVybiB0cnVlOwot
ICB9IGVsc2UgaWYgKGxpc3QuaXRlbUJ5SWQocHJvcGVydHlOYW1lLmRvbVN0cmluZygpKSkgewor
ICB9IGVsc2UgaWYgKGxpc3QuaXRlbUJ5SWQocHJvcGVydHlOYW1lLmRvbVN0cmluZygpLmltcGwo
KSkpIHsKICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBuYW1lR2V0dGVyKTsKICAgICByZXR1cm4g
dHJ1ZTsKICAgfQpAQCAtMTAyOCw3ICsxMDI4LDcgQEAKICAgY2FzZSBET01Eb2N1bWVudDo6R2V0
RWxlbWVudHNCeVRhZ05hbWVOUzogLy8gRE9NMgogICAgIHJldHVybiBnZXRET01Ob2RlTGlzdChl
eGVjLGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKHMsIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMp
LmRvbVN0cmluZygpKS5nZXQoKSk7CiAgIGNhc2UgRE9NRG9jdW1lbnQ6OkdldEVsZW1lbnRCeUlk
OgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZG9jLmdldEVsZW1lbnRCeUlkKGFyZ3NbMF0t
PnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpKSk7CisgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
Yyxkb2MuZ2V0RWxlbWVudEJ5SWQoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCku
aW1wbCgpKSk7CiAgIGNhc2UgRE9NRG9jdW1lbnQ6OkNyZWF0ZVJhbmdlOgogICAgIHJldHVybiBn
ZXRET01SYW5nZShleGVjLGRvYy5jcmVhdGVSYW5nZSgpKTsKICAgY2FzZSBET01Eb2N1bWVudDo6
Q3JlYXRlTm9kZUl0ZXJhdG9yOiB7CkluZGV4OiBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcAkocmV2aXNpb24gMTIxMTIp
CisrKyBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyAr
NTgsNyBAQAogICAgIHJldHVybiB0czsKIH0KIAotS0NhbnZhc0ZpbHRlciAqZ2V0RmlsdGVyQnlJ
ZChLRE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25zdCBLRE9NOjpET01TdHJpbmcgJmlk
KQorS0NhbnZhc0ZpbHRlciAqZ2V0RmlsdGVyQnlJZChLRE9NOjpEb2N1bWVudEltcGwgKmRvY3Vt
ZW50LCBjb25zdCBLRE9NOjpBdG9taWNTdHJpbmcgJmlkKQogewogICAgIEtDYW52YXNSZXNvdXJj
ZSAqcmVzb3VyY2UgPSBnZXRSZXNvdXJjZUJ5SWQoZG9jdW1lbnQsIGlkKTsKICAgICBpZiAocmVz
b3VyY2UgJiYgcmVzb3VyY2UtPmlzRmlsdGVyKCkpCkluZGV4OiBrY2FudmFzL0tDYW52YXNSZXNv
dXJjZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5jcHAJKHJl
dmlzaW9uIDEyMTEyKQorKysga2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYxLDcgKzI2MSw3IEBACiAgICAgcmV0dXJuIHRzOwogfQogCi1LQ2FudmFzUmVz
b3VyY2UgKmdldFJlc291cmNlQnlJZChLRE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25z
dCBLRE9NOjpET01TdHJpbmcgJmlkKQorS0NhbnZhc1Jlc291cmNlICpnZXRSZXNvdXJjZUJ5SWQo
S0RPTTo6RG9jdW1lbnRJbXBsICpkb2N1bWVudCwgY29uc3QgS0RPTTo6QXRvbWljU3RyaW5nICZp
ZCkKIHsKICAgICBpZiAoaWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTI3NCw3
ICsyNzQsNyBAQAogICAgIHJldHVybiAwOwogfQogCi1LQ2FudmFzTWFya2VyICpnZXRNYXJrZXJC
eUlkKEtET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQsIGNvbnN0IEtET006OkRPTVN0cmluZyAm
aWQpCitLQ2FudmFzTWFya2VyICpnZXRNYXJrZXJCeUlkKEtET006OkRvY3VtZW50SW1wbCAqZG9j
dW1lbnQsIGNvbnN0IEtET006OkF0b21pY1N0cmluZyAmaWQpCiB7CiAgICAgS0NhbnZhc1Jlc291
cmNlICpyZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChkb2N1bWVudCwgaWQpOwogICAgIGlmIChy
ZXNvdXJjZSAmJiByZXNvdXJjZS0+aXNNYXJrZXIoKSkKQEAgLTI4Miw3ICsyODIsNyBAQAogICAg
IHJldHVybiAwOwogfQogCi1LQ2FudmFzQ2xpcHBlciAqZ2V0Q2xpcHBlckJ5SWQoS0RPTTo6RG9j
dW1lbnRJbXBsICpkb2N1bWVudCwgY29uc3QgS0RPTTo6RE9NU3RyaW5nICZpZCkKK0tDYW52YXND
bGlwcGVyICpnZXRDbGlwcGVyQnlJZChLRE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25z
dCBLRE9NOjpBdG9taWNTdHJpbmcgJmlkKQogewogICAgIEtDYW52YXNSZXNvdXJjZSAqcmVzb3Vy
Y2UgPSBnZXRSZXNvdXJjZUJ5SWQoZG9jdW1lbnQsIGlkKTsKICAgICBpZiAocmVzb3VyY2UgJiYg
cmVzb3VyY2UtPmlzQ2xpcHBlcigpKQpAQCAtMjkwLDcgKzI5MCw3IEBACiAgICAgcmV0dXJuIDA7
CiB9CiAKLUtDYW52YXNNYXNrZXIgKmdldE1hc2tlckJ5SWQoS0RPTTo6RG9jdW1lbnRJbXBsICpk
b2N1bWVudCwgY29uc3QgS0RPTTo6RE9NU3RyaW5nICZpZCkKK0tDYW52YXNNYXNrZXIgKmdldE1h
c2tlckJ5SWQoS0RPTTo6RG9jdW1lbnRJbXBsICpkb2N1bWVudCwgY29uc3QgS0RPTTo6QXRvbWlj
U3RyaW5nICZpZCkKIHsKICAgICBLQ2FudmFzUmVzb3VyY2UgKnJlc291cmNlID0gZ2V0UmVzb3Vy
Y2VCeUlkKGRvY3VtZW50LCBpZCk7CiAgICAgaWYgKHJlc291cmNlICYmIHJlc291cmNlLT5pc01h
c2tlcigpKQpAQCAtMjk4LDcgKzI5OCw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLUtSZW5kZXJp
bmdQYWludFNlcnZlciAqZ2V0UGFpbnRTZXJ2ZXJCeUlkKEtET006OkRvY3VtZW50SW1wbCAqZG9j
dW1lbnQsIGNvbnN0IEtET006OkRPTVN0cmluZyAmaWQpCitLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIg
KmdldFBhaW50U2VydmVyQnlJZChLRE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25zdCBL
RE9NOjpBdG9taWNTdHJpbmcgJmlkKQogewogICAgIEtDYW52YXNSZXNvdXJjZSAqcmVzb3VyY2Ug
PSBnZXRSZXNvdXJjZUJ5SWQoZG9jdW1lbnQsIGlkKTsKICAgICBpZiAocmVzb3VyY2UgJiYgcmVz
b3VyY2UtPmlzUGFpbnRTZXJ2ZXIoKSkKSW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgJKHJldmlzaW9uIDEyMTEyKQor
Kysga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2
LDcgQEAKICAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7CiB9OwogCi1LQ2FudmFzRmlsdGVyICpn
ZXRGaWx0ZXJCeUlkKEtET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQsIGNvbnN0IEtET006OkRP
TVN0cmluZyAmaWQpOworS0NhbnZhc0ZpbHRlciAqZ2V0RmlsdGVyQnlJZChLRE9NOjpEb2N1bWVu
dEltcGwgKmRvY3VtZW50LCBjb25zdCBLRE9NOjpBdG9taWNTdHJpbmcgJmlkKTsKIAogY2xhc3Mg
S0NhbnZhc0ZpbHRlckVmZmVjdAogewpJbmRleDoga2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmgJKHJldmlzaW9uIDEyMTEy
KQorKysga2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwx
MSArMTQ5LDExIEBACiAKIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0U3RyZWFtICZ0cywg
Y29uc3QgS0NhbnZhc1Jlc291cmNlICZyKTsKIAotS0NhbnZhc1Jlc291cmNlICpnZXRSZXNvdXJj
ZUJ5SWQoS0RPTTo6RG9jdW1lbnRJbXBsICpkb2N1bWVudCwgY29uc3QgS0RPTTo6RE9NU3RyaW5n
ICZpZCk7Ci1LQ2FudmFzTWFya2VyICpnZXRNYXJrZXJCeUlkKEtET006OkRvY3VtZW50SW1wbCAq
ZG9jdW1lbnQsIGNvbnN0IEtET006OkRPTVN0cmluZyAmaWQpOwotS0NhbnZhc0NsaXBwZXIgKmdl
dENsaXBwZXJCeUlkKEtET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQsIGNvbnN0IEtET006OkRP
TVN0cmluZyAmaWQpOwotS0NhbnZhc01hc2tlciAqZ2V0TWFza2VyQnlJZChLRE9NOjpEb2N1bWVu
dEltcGwgKmRvY3VtZW50LCBjb25zdCBLRE9NOjpET01TdHJpbmcgJmlkKTsKLUtSZW5kZXJpbmdQ
YWludFNlcnZlciAqZ2V0UGFpbnRTZXJ2ZXJCeUlkKEtET006OkRvY3VtZW50SW1wbCAqZG9jdW1l
bnQsIGNvbnN0IEtET006OkRPTVN0cmluZyAmaWQpOworS0NhbnZhc1Jlc291cmNlICpnZXRSZXNv
dXJjZUJ5SWQoS0RPTTo6RG9jdW1lbnRJbXBsICpkb2N1bWVudCwgY29uc3QgS0RPTTo6QXRvbWlj
U3RyaW5nICZpZCk7CitLQ2FudmFzTWFya2VyICpnZXRNYXJrZXJCeUlkKEtET006OkRvY3VtZW50
SW1wbCAqZG9jdW1lbnQsIGNvbnN0IEtET006OkF0b21pY1N0cmluZyAmaWQpOworS0NhbnZhc0Ns
aXBwZXIgKmdldENsaXBwZXJCeUlkKEtET006OkRvY3VtZW50SW1wbCAqZG9jdW1lbnQsIGNvbnN0
IEtET006OkF0b21pY1N0cmluZyAmaWQpOworS0NhbnZhc01hc2tlciAqZ2V0TWFza2VyQnlJZChL
RE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25zdCBLRE9NOjpBdG9taWNTdHJpbmcgJmlk
KTsKK0tSZW5kZXJpbmdQYWludFNlcnZlciAqZ2V0UGFpbnRTZXJ2ZXJCeUlkKEtET006OkRvY3Vt
ZW50SW1wbCAqZG9jdW1lbnQsIGNvbnN0IEtET006OkF0b21pY1N0cmluZyAmaWQpOwogCiAjZW5k
aWYKIApJbmRleDogQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24g
MTIxMTUpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NiBAQAorMjAw
Ni0wMS0xNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQW5kZXJzLgorCisgICAgICAgIC0gZml4IHJlZ3Jlc3Npb24gaW4gZHVwbGljYXRlIElE
IGxheW91dCB0ZXN0CisKKyAgICAgICAgKiBraHRtbC94bWwvRG9jdW1lbnRJbXBsLmNwcDoKKyAg
ICAgICAgKERvY3VtZW50SW1wbDo6Z2V0RWxlbWVudEJ5SWQpOiBDaGFuZ2UgdG8gdGFrZSBBdG9t
aWNTdHJpbmcsIHNvIHdlIGNhbiB1c2UKKyAgICAgICAgdGhlIHN0cmluZyBwb2ludGVyIGFzIGEg
aGFzaCBrZXkgYW5kIG5vdCB3b3JyeSBhYm91dCByZWYnaW5nIHRoZSBwb2ludGVyIG9yCisgICAg
ICAgIGFib3V0IG9iamVjdCBsaWZldGltZSBzaW5jZSB0aGUgc3RyaW5nIHdpbGwgYmUgc3RvcmVk
IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlCisgICAgICAgIElEIGF0dHJpYnV0ZS4gQWxzbyB1cGRh
dGUgZm9yIHRoZSBjb3VudGVkIHNldCBmb3JtZXJseSBuYW1lZCBtX2lkQ291bnQgdG8gdXNlCisg
ICAgICAgIGl0cyBuZXcgbmFtZSwgbV9kdXBsaWNhdGVJZHMuCisgICAgICAgIChEb2N1bWVudElt
cGw6OmFkZEVsZW1lbnRCeUlkKTogRGl0dG8uCisgICAgICAgIChEb2N1bWVudEltcGw6OnJlbW92
ZUVsZW1lbnRCeUlkKTogRGl0dG8uCisgICAgICAgIChEb2N1bWVudEltcGw6OnJlY2FsY1N0eWxl
U2VsZWN0b3IpOiBQYXNzIGEgRE9NU3RyaW5nSW1wbCogKHNlZSBiZWxvdykuCisgICAgICAgICog
a2h0bWwveG1sL0RvY3VtZW50SW1wbC5oOiBDaGFuZ2UgZnVuY3Rpb25zIHRvIHRha2UgQXRvbWlj
U3RyaW5nLgorCisgICAgICAgICoga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5jcHA6IChnZXRGaWx0
ZXJCeUlkKTogVXNlIEF0b21pY1N0cmluZy4KKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNGaWx0
ZXJzLmg6IERpdHRvLgorICAgICAgICAqIGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5jcHA6Cisg
ICAgICAgIChnZXRSZXNvdXJjZUJ5SWQpOiBEaXR0by4KKyAgICAgICAgKGdldE1hcmtlckJ5SWQp
OiBEaXR0by4KKyAgICAgICAgKGdldENsaXBwZXJCeUlkKTogRGl0dG8uCisgICAgICAgIChnZXRN
YXNrZXJCeUlkKTogRGl0dG8uCisgICAgICAgIChnZXRQYWludFNlcnZlckJ5SWQpOiBEaXR0by4K
KyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNSZXNvdXJjZXMuaDogRGl0dG8uCisgICAgICAgICog
a2h0bWwvZWNtYS9ranNfd2luZG93LmNwcDogKEtKUzo6V2luZG93OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOiBEaXR0by4KKyAgICAgICAgKiBraHRtbC9odG1sL0hUTUxMYWJlbEVsZW1lbnRJbXBsLmNw
cDoKKyAgICAgICAgKERPTTo6SFRNTExhYmVsRWxlbWVudEltcGw6OmZvcm1FbGVtZW50KTogRGl0
dG8uCisgICAgICAgICoga2h0bWwveG1sL05vZGVMaXN0SW1wbC5jcHA6IChET006Ok5vZGVMaXN0
SW1wbDo6aXRlbUJ5SWQpOiBEaXR0by4KKyAgICAgICAgKiBraHRtbC94bWwvTm9kZUxpc3RJbXBs
Lmg6IERpdHRvLiBBbHNvIHJlbW92ZWQgdW5uZWNlc3NhcnkgInZpcnR1YWwiLgorCisgICAgICAg
ICoga2h0bWwvZWNtYS9ranNfY3NzLmNwcDoKKyAgICAgICAgKEtKUzo6RE9NU3R5bGVTaGVldExp
c3Q6Om5hbWVHZXR0ZXIpOiBQYXNzIGEgRE9NU3RyaW5nSW1wbCosIHdoaWNoIGdldHMKKyAgICAg
ICAgY29udmVydGVkIHRvIGFuIEF0b21pY1N0cmluZyBpbXBsaWNpdGx5LCByYXRoZXIgdGhhbiBh
IERPTVN0cmluZywgd2hpY2gKKyAgICAgICAgZG9lcyBub3QuIChCdXQgdGhhdCdzIGEgY3Jhenkg
cnVsZSAtLSB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgYXJvdW5kIGxvbmcgdGVybS4pCisgICAgICAg
IChLSlM6OkRPTVN0eWxlU2hlZXRMaXN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOiBEaXR0by4KKyAg
ICAgICAgKiBraHRtbC9lY21hL2tqc19kb20uY3BwOgorICAgICAgICAoS0pTOjpET01Ob2RlTGlz
dDo6bmFtZUdldHRlcik6IERpdHRvLgorICAgICAgICAoS0pTOjpET01Ob2RlTGlzdDo6Z2V0T3du
UHJvcGVydHlTbG90KTogRGl0dG8uCisgICAgICAgIChLSlM6OkRPTURvY3VtZW50UHJvdG9GdW5j
OjpjYWxsQXNGdW5jdGlvbik6IERpdHRvLgorCisgICAgICAgIC0gTWVyZ2Uga2h0bWwsIERPTSwg
YW5kIEtET00gaW50byBvbmUgYmlnIG5hbWVzcGFjZSwgV2ViQ29yZS4KKworICAgICAgICAqIFdl
YkNvcmVQcmVmaXguaDogVXNlIGRlZmluZWQgdG8gbWFwIHRoZSBvbGQgbmFtZXNwYWNlIG5hbWVz
IHRvIFdlYkNvcmUuCisgICAgICAgIE5vdyB0aGF0IHRoaXMgaXMgZG9uZSBpbiB0aGUgcHJlZml4
LCB3ZSBjYW4gc3RhcnQgYWN0dWFsbHkgY2FsbGluZyBpdCBieQorICAgICAgICB0aGF0IG5hbWUs
IHBoYXNlIG91dCB0aGUgb2xkIG5hbWVzLCB0aGVuIHJlbW92ZSB0aGUgZGVmaW5lcy4KKworICAg
ICAgICAtIG90aGVyIGNoYW5nZXMKKworICAgICAgICAqIGtodG1sL3htbC9Eb2N1bWVudFR5cGVJ
bXBsLmNwcDogQ29udmVydGVkIHRhYnMgdG8gc3BhY2VzLgorICAgICAgICAqIGtodG1sL3htbC9k
b20yX2V2ZW50c2ltcGwuY3BwOiBEaXR0by4KKwogMjAwNi0wMS0xNSAgQWxleGFuZGVyIEtlbGxl
dHQgIDxseXBhbm92QGtkZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYW5kIGxhbmRlZCBieSBB
bmRlcnMuCkluZGV4OiBXZWJDb3JlUHJlZml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZVByZWZp
eC5oCShyZXZpc2lvbiAxMjExMikKKysrIFdlYkNvcmVQcmVmaXguaAkod29ya2luZyBjb3B5KQpA
QCAtNjksOCArNjksOSBAQAogI2RlZmluZSBkZWxldGUgKCJpZiB5b3UgdXNlIG5ldy9kZWxldGUg
bWFrZSBzdXJlIHRvIGluY2x1ZGUgY29uZmlnLmggYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSIoKSkg
CiAjZW5kaWYKIAotI2RlZmluZSBLRE9NIERPTQorI2RlZmluZSBLRE9NIFdlYkNvcmUKKyNkZWZp
bmUgRE9NIFdlYkNvcmUKKyNkZWZpbmUga2h0bWwgV2ViQ29yZQogCiAjdW5kZWYgdHJ5CiAjdW5k
ZWYgY2F0Y2gKLQpJbmRleDogRm9yd2FyZGluZ0hlYWRlcnMva3htbGNvcmUvSGFzaEZ1bmN0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KClByb3BlcnR5IGNoYW5nZXMgb246IEZvcndhcmRpbmdIZWFkZXJzL2t4
bWxjb3JlL0hhc2hGdW5jdGlvbnMuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAg
KyBuYXRpdmUKCg==
</data>
<flag name="review"
          id="1283"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>