<?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>33329</bug_id>
          
          <creation_ts>2010-01-07 10:40:34 -0800</creation_ts>
          <short_desc>[V8] Generate header declarations for custom named and indexed accessors</short_desc>
          <delta_ts>2010-01-07 16:05:46 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>32638</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>178255</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-07 10:40:34 -0800</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178258</commentid>
    <comment_count>1</comment_count>
      <attachid>46064</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-07 10:47:56 -0800</bug_when>
    <thetext>Created attachment 46064
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178259</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-07 10:49:18 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 46064 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178302</commentid>
    <comment_count>3</comment_count>
      <attachid>46064</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-01-07 12:12:36 -0800</bug_when>
    <thetext>Comment on attachment 46064
patch

cool beans, except for:

&gt; +sub GenerateNamedAndIndexedPropertyAccessorHeaders

GenerateHeaderNamedAndIndexedPropertyAccessor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178429</commentid>
    <comment_count>4</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-01-07 16:05:46 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/52952</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46064</attachid>
            <date>2010-01-07 10:47:56 -0800</date>
            <delta_ts>2010-01-07 12:12:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>47969</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MjkyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDEtMDcgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBH
ZW5lcmF0ZSBWOCBiaW5kaW5ncyBoZWFkZXIgZGVjbGFyYXRpb25zIGZvciBuYW1lZCBhbmQgaW5k
ZXhlZCBhY2Nlc3NvcnMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxQbHVnSW5FbGVtZW50Q3VzdG9tLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3Rv
bS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5jcHA6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFnZUN1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMSW50QXJyYXlDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHA6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1
c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZElu
dEFycmF5Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVu
c2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHA6CisKIDIwMTAtMDEtMDcgIFNpbW9uIEhhdXNtYW5u
ICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5
IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA1MjkyOSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTI4Nyw2
ICsyODcsOCBAQAogICAgICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
OwogICAgICAgICBteSAkYXR0ckV4dCA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXM7CiAKKyAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgYmUgZ2VuZXJhdGlu
ZyBjYWxsYmFjayBkZWNsYXJhdGlvbnMgZm9yIGZ1bmN0aW9ucyBsYWJlbGVkIFtDdXN0b21dIG9y
IFtWOEN1c3RvbV0sCisgICAgICAgICMgYnV0IHdlIGNhbid0IGRvIHRoYXQgZHVlIHRvIHNvbWUg
bWlzbGFiZWxlZCBmdW5jdGlvbnMgaW4gdGhlIGlkbCdzIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzMwNjYpLgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8
PEVORCk7CiAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtuYW1lfUNhbGxiYWNrKGNv
bnN0IHY4OjpBcmd1bWVudHMmKTsKIEVORApAQCAtMzE2LDYgKzMxOCw3IEBACiAgICAgfQogCiAg
ICAgR2VuZXJhdGVIZWFkZXJSdW50aW1lRW5hYmxlckRlY2xhcmF0aW9ucyhAZW5hYmxlZEF0UnVu
dGltZSk7CisgICAgR2VuZXJhdGVOYW1lZEFuZEluZGV4ZWRQcm9wZXJ0eUFjY2Vzc29ySGVhZGVy
cygkZGF0YU5vZGUpOwogICAgIEdlbmVyYXRlSGVhZGVyQ3VzdG9tQ2FsbCgkZGF0YU5vZGUpOwog
ICAgIAogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja0RvbWFp
blNlY3VyaXR5In0pIHsKQEAgLTM2MCw2ICszNjMsNzUgQEAKICAgICB9CiB9CiAKK215ICVpbmRl
eGVyU3BlY2lhbENhc2VzID0gKAorICAgICJTdG9yYWdlIiA9PiAxLAorICAgICJIVE1MQXBwbGV0
RWxlbWVudCIgPT4gMSwKKyAgICAiSFRNTEVtYmVkRWxlbWVudCIgPT4gMSwKKyAgICAiSFRNTE9i
amVjdEVsZW1lbnQiID0+IDEKKyk7CisKK3N1YiBHZW5lcmF0ZU5hbWVkQW5kSW5kZXhlZFByb3Bl
cnR5QWNjZXNzb3JIZWFkZXJzCit7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgbXkg
JGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGhhc0N1c3RvbUluZGV4
ZWRHZXR0ZXIgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNJbmRleEdldHRl
ciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldE93blByb3Bl
cnR5U2xvdCJ9OworICAgIG15ICRoYXNDdXN0b21JbmRleGVkU2V0dGVyID0gJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5kZXhTZXR0ZXIifSAmJiAhJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn07CisgICAgbXkg
JGhhc0N1c3RvbU5hbWVkR2V0dGVyID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SGFzTmFtZUdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc092
ZXJyaWRpbmdOYW1lR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90In07CisgICAgbXkgJGhhc0N1c3RvbU5hbWVkU2V0dGVy
ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ1B1dEZ1bmN0aW9u
In07CisgICAgbXkgJGhhc0N1c3RvbURlbGV0ZXJzID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tRGVsZXRlUHJvcGVydHkifTsKKyAgICBteSAkaGFzQ3VzdG9tRW51bWVy
YXRvciA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldFByb3BlcnR5
TmFtZXMifTsKKyAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkhUTUxPcHRpb25zQ29sbGVjdGlv
biIpIHsKKyAgICAgICAgJGludGVyZmFjZU5hbWUgPSAiSFRNTENvbGxlY3Rpb24iOworICAgICAg
ICAkaGFzQ3VzdG9tSW5kZXhlZEdldHRlciA9IDE7CisgICAgICAgICRoYXNDdXN0b21OYW1lZEdl
dHRlciA9IDE7CisgICAgfQorICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93Iikg
eworICAgICAgICAkaGFzQ3VzdG9tRGVsZXRlcnIgPSAwOworICAgICAgICAkaGFzRW51bWVyYXRv
ciA9IDA7CisgICAgfQorICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTFNlbGVjdEVsZW1l
bnQiKSB7CisgICAgICAgICRoYXNDdXN0b21OYW1lZEdldHRlciA9IDE7CisgICAgfQorICAgIG15
ICRpc0luZGV4ZXJTcGVjaWFsQ2FzZSA9IGV4aXN0cyAkaW5kZXhlclNwZWNpYWxDYXNlc3skaW50
ZXJmYWNlTmFtZX07CisKKyAgICBpZiAoJGhhc0N1c3RvbUluZGV4ZWRHZXR0ZXIgfHwgJGlzSW5k
ZXhlclNwZWNpYWxDYXNlKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsK
KyAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbmRleGVkUHJvcGVydHlHZXR0ZXIodWlu
dDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pOworRU5ECisgICAgfQor
ICAgICAgCisgICAgaWYgKCRpc0luZGV4ZXJTcGVjaWFsQ2FzZSB8fCAkaGFzQ3VzdG9tSW5kZXhl
ZFNldHRlcikgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW5kZXhlZFByb3BlcnR5U2V0dGVyKHVpbnQzMl90IGlu
ZGV4LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbyk7CitFTkQKKyAgICB9CisgICAgaWYgKCRoYXNDdXN0b21EZWxldGVycykgeworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpC
b29sZWFuPiBpbmRleGVkUHJvcGVydHlEZWxldGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKTsKK0VORAorICAgIH0KKyAgICBpZiAoJGhhc0N1c3RvbU5hbWVk
R2V0dGVyKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKKyAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKTsKK0VORAorICAgIH0K
KyAgICBpZiAoJGhhc0N1c3RvbU5hbWVkU2V0dGVyKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsIDw8RU5EKTsKKyAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBuYW1lZFByb3Bl
cnR5U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVl
PiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbyk7CitFTkQKKyAgICB9CisgICAg
aWYgKCRoYXNDdXN0b21EZWxldGVycyB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTERvY3VtZW50
IikgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpCb29sZWFuPiBuYW1lZFByb3BlcnR5RGVsZXRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbyk7CitFTkQKKyAgICB9Cisg
ICAgaWYgKCRoYXNDdXN0b21FbnVtZXJhdG9yKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsIDw8RU5EKTsKKyAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkFycmF5PiBuYW1lZFByb3BlcnR5
RW51bWVyYXRvcihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKTsKK0VORAorICAgIH0KK30K
Kwogc3ViIEdlbmVyYXRlSGVhZGVyQ3VzdG9tQ2FsbAogewogICAgIG15ICRkYXRhTm9kZSA9IHNo
aWZ0OwpAQCAtMTIwMSwxMyArMTI3Myw2IEBACiBFTkQKIH0KIAotbXkgJWluZGV4ZXJTcGVjaWFs
Q2FzZXMgPSAoCi0gICAgIlN0b3JhZ2UiID0+IDEsCi0gICAgIkhUTUxBcHBsZXRFbGVtZW50IiA9
PiAxLAotICAgICJIVE1MRW1iZWRFbGVtZW50IiA9PiAxLAotICAgICJIVE1MT2JqZWN0RWxlbWVu
dCIgPT4gMQotKTsKLQogc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25JbmRleGVyCiB7CiAgICAg
bXkgJGRhdGFOb2RlID0gc2hpZnQ7CkBAIC0xMjg1LDEwICsxMzUwLDEwIEBACiAgICAgICAgICRo
YXNEZWxldGVyID0gMDsKICAgICB9CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgZGVzYy0+
JHtzZXRPbn1UZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKFY4Q3VzdG9tOjp2
OCR7aW50ZXJmYWNlTmFtZX1JbmRleGVkUHJvcGVydHlHZXR0ZXIiKTsKLSAgICBwdXNoKEBpbXBs
Q29udGVudCwgJGhhc0N1c3RvbVNldHRlciA/ICIsIFY4Q3VzdG9tOjp2OCR7aW50ZXJmYWNlTmFt
ZX1JbmRleGVkUHJvcGVydHlTZXR0ZXIiIDogIiwgMCIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICBkZXNjLT4ke3NldE9ufVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRsZXIo
Vjgke2ludGVyZmFjZU5hbWV9OjppbmRleGVkUHJvcGVydHlHZXR0ZXIiKTsKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgJGhhc0N1c3RvbVNldHRlciA/ICIsIFY4JHtpbnRlcmZhY2VOYW1lfTo6aW5k
ZXhlZFByb3BlcnR5U2V0dGVyIiA6ICIsIDAiKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiwg
MCIpOyAjIEluZGV4ZWRQcm9wZXJ0eVF1ZXJ5IC0tIG5vdCBiZWluZyB1c2VkIGF0IHRoZSBtb21l
bnQuCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICRoYXNEZWxldGVyID8gIiwgVjhDdXN0b206OnY4
JHtpbnRlcmZhY2VOYW1lfUluZGV4ZWRQcm9wZXJ0eURlbGV0ZXIiIDogIiwgMCIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAkaGFzRGVsZXRlciA/ICIsIFY4JHtpbnRlcmZhY2VOYW1lfTo6aW5k
ZXhlZFByb3BlcnR5RGVsZXRlciIgOiAiLCAwIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIs
IG5vZGVDb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcjwke2ludGVyZmFjZU5hbWV9
Piwgdjg6OkludGVnZXI6Ok5ldyhWOENsYXNzSW5kZXg6Ok5PREUpIikgaWYgJGhhc0VudW1lcmF0
b3I7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIpO1xuIik7CiB9CkBAIC0xMzM4LDExICsxNDAz
LDExIEBACiAgICAgICAgICRoYXNFbnVtZXJhdG9yID0gMDsKICAgICB9CiAKLSAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgZGVzYy0+JHtzZXRPbn1UZW1wbGF0ZSgpLT5TZXROYW1lZFByb3BlcnR5
SGFuZGxlcihWOEN1c3RvbTo6djgke2ludGVyZmFjZU5hbWV9TmFtZWRQcm9wZXJ0eUdldHRlciwg
Iik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQsICRoYXNTZXR0ZXIgPyAiVjhDdXN0b206OnY4JHtp
bnRlcmZhY2VOYW1lfU5hbWVkUHJvcGVydHlTZXR0ZXIsICIgOiAiMCwgIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgIGRlc2MtPiR7c2V0T259VGVtcGxhdGUoKS0+U2V0TmFtZWRQcm9wZXJ0
eUhhbmRsZXIoVjgke2ludGVyZmFjZU5hbWV9OjpuYW1lZFByb3BlcnR5R2V0dGVyLCAiKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgJGhhc1NldHRlciA/ICJWOCR7aW50ZXJmYWNlTmFtZX06Om5h
bWVkUHJvcGVydHlTZXR0ZXIsICIgOiAiMCwgIik7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICIw
ICwiKTsgIyBOYW1lZFByb3BlcnR5UXVlcnkgLS0gbm90IGJlaW5nIHVzZWQgYXQgdGhlIG1vbWVu
dC4KLSAgICBwdXNoKEBpbXBsQ29udGVudCwgJGhhc0RlbGV0ZXIgPyAiVjhDdXN0b206OnY4JHtp
bnRlcmZhY2VOYW1lfU5hbWVkUHJvcGVydHlEZWxldGVyLCAiIDogIjAsICIpOwotICAgIHB1c2go
QGltcGxDb250ZW50LCAkaGFzRW51bWVyYXRvciA/ICJWOEN1c3RvbTo6djgke2ludGVyZmFjZU5h
bWV9TmFtZWRQcm9wZXJ0eUVudW1lcmF0b3IiIDogIjAiKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgJGhhc0RlbGV0ZXIgPyAiVjgke2ludGVyZmFjZU5hbWV9OjpuYW1lZFByb3BlcnR5RGVsZXRl
ciwgIiA6ICIwLCAiKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgJGhhc0VudW1lcmF0b3IgPyAi
Vjgke2ludGVyZmFjZU5hbWV9OjpuYW1lZFByb3BlcnR5RW51bWVyYXRvciIgOiAiMCIpOwogICAg
IHB1c2goQGltcGxDb250ZW50LCAiKTtcbiIpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwCShyZXZp
c2lvbiA1MjkyOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xGbG9hdEFy
cmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMzEgKzUxLDYgQEAKICAgICByZXR1
cm4gY29uc3RydWN0V2ViR0xBcnJheTxXZWJHTEZsb2F0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRl
eDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJHTEZMT0FUQVJSQVkpKTsKIH0KIAotLy8gR2V0IHRo
ZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFz
IGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2
YWxpZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCi1JTkRFWEVEX1BST1BFUlRZX0dF
VFRFUihXZWJHTEZsb2F0QXJyYXkpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uV2ViR0xGbG9hdEFy
cmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIFdlYkdMRmxvYXRBcnJheSogYXJyYXkg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTEZsb2F0QXJyYXk+KFY4
Q2xhc3NJbmRleDo6V0VCR0xGTE9BVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKLQotICAgIGlmICgo
aW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKLSAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKLSAgICBmbG9hdCByZXN1bHQ7Ci0gICAgaWYgKCFhcnJheS0+Z2V0
KGluZGV4LCByZXN1bHQpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIHJl
dHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKLX0KLQotLy8gU2V0IHRoZSBzcGVjaWZpZWQg
dmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5n
ZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KLUlOREVYRURfUFJPUEVSVFlfU0VUVEVSKFdlYkdMRmxv
YXRBcnJheSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEZsb2F0QXJyYXkuSW5kZXhlZFBy
b3BlcnR5U2V0dGVyIik7Ci0gICAgV2ViR0xGbG9hdEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYkdMRmxvYXRBcnJheT4oVjhDbGFzc0luZGV4OjpX
RUJHTEZMT0FUQVJSQVksIGluZm8uSG9sZGVyKCkpOwotCi0gICAgaWYgKChpbmRleCA+PSAwKSAm
JiAoaW5kZXggPCBhcnJheS0+bGVuZ3RoKCkpKQotICAgICAgICBhcnJheS0+c2V0KGluZGV4LCB2
YWx1ZS0+TnVtYmVyVmFsdWUoKSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhXZWJHTEZsb2F0QXJyYXk6OmdldENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xGbG9hdEFycmF5LmdldCgp
Iik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
Rm9ybUVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1MjkyOSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlOREVYRURfUFJPUEVS
VFlfR0VUVEVSKEhUTUxGb3JtRWxlbWVudCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxG
b3JtRWxlbWVudDo6aW5kZXhlZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxGb3JtRWxl
bWVudC5JbmRleGVkUHJvcGVydHlHZXR0ZXIiKTsKICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0g
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxGb3JtRWxlbWVudD4o
aW5mby5Ib2xkZXIoKSk7CkBAIC01MSw4ICs1MSw3IEBACiAgICAgcmV0dXJuIFY4RE9NV3JhcHBl
cjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KGZvcm1FbGVtZW50LnJlbGVhc2UoKSk7CiB9CiAKLQot
TkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxGb3JtRWxlbWVudCkKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOEhUTUxGb3JtRWxlbWVudDo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5IVE1MRm9ybUVsZW1lbnQuTmFtZWRQcm9wZXJ0eUdldHRlciIpOwogICAgIEhU
TUxGb3JtRWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9k
ZTxIVE1MRm9ybUVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiA1MjkyOSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFnZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIEVOQUJM
RShET01fU1RPUkFHRSkKKyNpbmNsdWRlICJWOFN0b3JhZ2UuaCIKIAogI2luY2x1ZGUgIlN0b3Jh
Z2UuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKQEAgLTQwLDcgKzQxLDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogLy8gR2V0IGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGlu
ZGV4ZWQgcHJvcGVydGllcyBpbiBhIGNvbGxlY3Rpb24uCi12ODo6SGFuZGxlPHY4OjpBcnJheT4g
VjhDdXN0b206OnY4U3RvcmFnZU5hbWVkUHJvcGVydHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCit2ODo6SGFuZGxlPHY4OjpBcnJheT4gVjhTdG9yYWdlOjpuYW1lZFBy
b3BlcnR5RW51bWVyYXRvcihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFN0
b3JhZ2UqIHN0b3JhZ2UgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxTdG9y
YWdlPihWOENsYXNzSW5kZXg6OlNUT1JBR0UsIGluZm8uSG9sZGVyKCkpOwogICAgIHVuc2lnbmVk
IGludCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKQEAgLTY2LDE0ICs2NywxNCBAQAogICAg
IHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogfQogCi1JTkRFWEVEX1BST1BFUlRZ
X0dFVFRFUihTdG9yYWdlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U3RvcmFnZTo6aW5kZXhl
ZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLlN0b3JhZ2UuSW5kZXhlZFByb3BlcnR5R2V0dGVy
Iik7CiAgICAgdjg6OkxvY2FsPHY4OjpJbnRlZ2VyPiBpbmRleFY4ID0gdjg6OkludGVnZXI6Ok5l
dyhpbmRleCk7CiAgICAgcmV0dXJuIHN0b3JhZ2VHZXR0ZXIoaW5kZXhWOC0+VG9TdHJpbmcoKSwg
aW5mbyk7CiB9CiAKLU5BTUVEX1BST1BFUlRZX0dFVFRFUihTdG9yYWdlKQordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4U3RvcmFnZTo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RB
VFMoIkRPTS5TdG9yYWdlLk5hbWVkUHJvcGVydHlHZXR0ZXIiKTsKICAgICByZXR1cm4gc3RvcmFn
ZUdldHRlcihuYW1lLCBpbmZvKTsKQEAgLTEwMSwxNCArMTAyLDE0IEBACiAgICAgcmV0dXJuIHY4
VmFsdWU7CiB9CiAKLUlOREVYRURfUFJPUEVSVFlfU0VUVEVSKFN0b3JhZ2UpCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhTdG9yYWdlOjppbmRleGVkUHJvcGVydHlTZXR0ZXIodWludDMyX3QgaW5k
ZXgsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLlN0b3JhZ2UuTmFtZWRQcm9wZXJ0eUdldHRlciIp
OwogICAgIHY4OjpMb2NhbDx2ODo6SW50ZWdlcj4gaW5kZXhWOCA9IHY4OjpJbnRlZ2VyOjpOZXco
aW5kZXgpOwogICAgIHJldHVybiBzdG9yYWdlU2V0dGVyKGluZGV4VjgtPlRvU3RyaW5nKCksIHZh
bHVlLCBpbmZvKTsKIH0KIAotTkFNRURfUFJPUEVSVFlfU0VUVEVSKFN0b3JhZ2UpCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhTdG9yYWdlOjpuYW1lZFByb3BlcnR5U2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5TdG9yYWdlLk5hbWVkUHJv
cGVydHlTZXR0ZXIiKTsKICAgICByZXR1cm4gc3RvcmFnZVNldHRlcihuYW1lLCB2YWx1ZSwgaW5m
byk7CkBAIC0xMjcsMTQgKzEyOCwxNCBAQAogICAgIHJldHVybiBkZWxldGlvbk5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CiB9CiAKLUlOREVYRURfUFJPUEVSVFlfREVMRVRFUihTdG9yYWdlKQor
djg6OkhhbmRsZTx2ODo6Qm9vbGVhbj4gVjhTdG9yYWdlOjppbmRleGVkUHJvcGVydHlEZWxldGVy
KHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElO
Q19TVEFUUygiRE9NLlN0b3JhZ2UuSW5kZXhlZFByb3BlcnR5RGVsZXRlciIpOwogICAgIHY4OjpM
b2NhbDx2ODo6SW50ZWdlcj4gaW5kZXhWOCA9IHY4OjpJbnRlZ2VyOjpOZXcoaW5kZXgpOwogICAg
IHJldHVybiBzdG9yYWdlRGVsZXRlcihpbmRleFY4LT5Ub1N0cmluZygpLCBpbmZvKTsKIH0KIAot
TkFNRURfUFJPUEVSVFlfREVMRVRFUihTdG9yYWdlKQordjg6OkhhbmRsZTx2ODo6Qm9vbGVhbj4g
VjhTdG9yYWdlOjpuYW1lZFByb3BlcnR5RGVsZXRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5T
dG9yYWdlLk5hbWVkUHJvcGVydHlEZWxldGVyIik7CiAgICAgcmV0dXJuIHN0b3JhZ2VEZWxldGVy
KG5hbWUsIGluZm8pOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5k
b3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNTI5MjkpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2NCw3
ICs3NjQsNyBAQAogfQogCiAKLUlOREVYRURfUFJPUEVSVFlfR0VUVEVSKERPTVdpbmRvdykKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6aW5kZXhlZFByb3BlcnR5R2V0dGVyKHVp
bnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19T
VEFUUygiRE9NLkRPTVdpbmRvdy5JbmRleGVkUHJvcGVydHlHZXR0ZXIiKTsKIApAQCAtNzg0LDcg
Kzc4NCw3IEBACiB9CiAKIAotTkFNRURfUFJPUEVSVFlfR0VUVEVSKERPTVdpbmRvdykKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAg
ICBJTkNfU1RBVFMoIkRPTS5ET01XaW5kb3cuTmFtZWRQcm9wZXJ0eUdldHRlciIpOwogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBbGxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNTI5MjkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsNyBAQAogICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9i
amVjdChyZXN1bHQucmVsZWFzZSgpKTsKIH0KIAotTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxB
bGxDb2xsZWN0aW9uKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEFsbENvbGxlY3Rpb246
Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEFsbENvbGxl
Y3Rpb24uTmFtZWRQcm9wZXJ0eUdldHRlciIpOwogICAgIC8vIFNlYXJjaCB0aGUgcHJvdG90eXBl
IGNoYWluIGZpcnN0LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29s
bGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDUyOTI5KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAKICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0
Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAKLU5BTUVEX1BST1BFUlRZX0dF
VFRFUihIVE1MQ29sbGVjdGlvbikKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxDb2xsZWN0
aW9uOjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxDb2xs
ZWN0aW9uLk5hbWVkUHJvcGVydHlHZXR0ZXIiKTsKICAgICAvLyBTZWFyY2ggdGhlIHByb3RvdHlw
ZSBjaGFpbiBmaXJzdC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xC
eXRlQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViR0xCeXRlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MjkyOSkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xCeXRlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSwzNCArNTEsNiBAQAogICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5
PFdlYkdMQnl0ZUFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6
V0VCR0xCWVRFQVJSQVkpKTsKIH0KIAotLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0
aGUgYnl0ZSBidWZmZXIgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1i
ZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBieXRlIGJ1ZmZlciBy
YW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCi1JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihXZWJHTEJ5
dGVBcnJheSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEJ5dGVBcnJheS5JbmRleGVkUHJv
cGVydHlHZXR0ZXIiKTsKLSAgICBXZWJHTEJ5dGVBcnJheSogYnl0ZUJ1ZmZlciA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYkdMQnl0ZUFycmF5PihWOENsYXNzSW5kZXg6
OldFQkdMQllURUFSUkFZLCBpbmZvLkhvbGRlcigpKTsKLQotICAgIGlmICgoaW5kZXggPCAwKSB8
fCAoaW5kZXggPj0gYnl0ZUJ1ZmZlci0+bGVuZ3RoKCkpKQotICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwotICAgIHNpZ25lZCBjaGFyIHJlc3VsdDsKLSAgICBpZiAoIWJ5dGVCdWZmZXIt
PmdldChpbmRleCwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAg
ICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHJlc3VsdCk7Ci19Ci0KLS8vIFNldCB0aGUgc3BlY2lm
aWVkIHZhbHVlIGluIHRoZSBieXRlIGJ1ZmZlci4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQg
Ynl0ZSBidWZmZXIgcmFuZ2UgYXJlIHNpbGVudGx5IGlnbm9yZWQuCi1JTkRFWEVEX1BST1BFUlRZ
X1NFVFRFUihXZWJHTEJ5dGVBcnJheSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEJ5dGVB
cnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKLSAgICBXZWJHTEJ5dGVBcnJheSogYXJyYXkg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTEJ5dGVBcnJheT4oVjhD
bGFzc0luZGV4OjpXRUJHTEJZVEVBUlJBWSwgaW5mby5Ib2xkZXIoKSk7Ci0KLSAgICBpZiAoKGlu
ZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKLSAgICAgICAgaWYgKCF2
YWx1ZS0+SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBu
b3QgY29udmVydCB2YWx1ZSBhcmd1bWVudCB0byBhIG51bWJlciIpOwotICAgICAgICBhcnJheS0+
c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1
ZTsKLX0KLQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xCeXRlQXJyYXk6OmdldENhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2Vi
R0xCeXRlQXJyYXkuZ2V0KCkiKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U3R5bGVTaGVldExpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1MjkyOSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSwxNiArMjksMTcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVjhTdHlsZVNoZWV0TGlzdC5oIgorCiAjaW5jbHVkZSAiSFRNTFN0eWxl
RWxlbWVudC5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCi0KICNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOFByb3h5
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTkFNRURfUFJPUEVSVFlfR0VUVEVSKFN0eWxl
U2hlZXRMaXN0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U3R5bGVTaGVldExpc3Q6Om5hbWVk
UHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uU3R5bGVTaGVldExpc3QuTmFt
ZWRQcm9wZXJ0eUdldHRlciIpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE5hbWVkTm9kZU1hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwCShyZXZpc2lvbiA1MjkyOSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksOCArMjksOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJWOE5hbWVkTm9kZU1hcC5oIgorCiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCi0K
ICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNp
bmNsdWRlICJWOFByb3h5LmgiCkBAIC0zOSw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoTmFtZWROb2RlTWFwKQordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4TmFtZWROb2RlTWFwOjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3Qg
aW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uTmFtZWROb2RlTWFwLkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwogICAgIE5hbWVkTm9kZU1h
cCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TmFtZWROb2RlTWFw
PihWOENsYXNzSW5kZXg6Ok5BTUVETk9ERU1BUCwgaW5mby5Ib2xkZXIoKSk7CkBAIC01MCw3ICs1
MSw3IEBACiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJl
c3VsdC5yZWxlYXNlKCkpOwogfQogCi1OQU1FRF9QUk9QRVJUWV9HRVRURVIoTmFtZWROb2RlTWFw
KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TmFtZWROb2RlTWFwOjpuYW1lZFByb3BlcnR5R2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLk5hbWVkTm9kZU1hcC5OYW1lZFByb3BlcnR5R2V0
dGVyIik7CiAgICAgLy8gU2VhcmNoIHRoZSBwcm90b3R5cGUgY2hhaW4gZmlyc3QuCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiA1MjkyOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLU5BTUVEX1BST1BFUlRZX0RFTEVURVIoSFRNTERvY3VtZW50
KQordjg6OkhhbmRsZTx2ODo6Qm9vbGVhbj4gVjhIVE1MRG9jdW1lbnQ6Om5hbWVkUHJvcGVydHlE
ZWxldGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQogewogICAgIC8vIE9ubHkgaGFuZGxlIGRvY3VtZW50LmFsbC4gIEluc2VydCB0aGUg
bWFya2VyIG9iamVjdCBpbnRvIHRoZQogICAgIC8vIHNoYWRvdyBpbnRlcm5hbCBmaWVsZCB0byBz
aWduYWwgdGhhdCBkb2N1bWVudC5hbGwgaXMgbm8gbG9uZ2VyCkBAIC01NywxMyArNTcsMTMgQEAK
ICAgICBpZiAoa2V5ICE9IGFsbCkKICAgICAgICAgcmV0dXJuIGRlbGV0aW9uTm90SGFuZGxlZEJ5
SW50ZXJjZXB0b3IoKTsKIAotICAgIEFTU0VSVChpbmZvLkhvbGRlcigpLT5JbnRlcm5hbEZpZWxk
Q291bnQoKSA9PSBrSFRNTERvY3VtZW50SW50ZXJuYWxGaWVsZENvdW50KTsKLSAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiBtYXJrZXIgPSBpbmZvLkhvbGRlcigpLT5HZXRJbnRlcm5hbEZpZWxkKGtI
VE1MRG9jdW1lbnRNYXJrZXJJbmRleCk7Ci0gICAgaW5mby5Ib2xkZXIoKS0+U2V0SW50ZXJuYWxG
aWVsZChrSFRNTERvY3VtZW50U2hhZG93SW5kZXgsIG1hcmtlcik7CisgICAgQVNTRVJUKGluZm8u
SG9sZGVyKCktPkludGVybmFsRmllbGRDb3VudCgpID09IFY4Q3VzdG9tOjprSFRNTERvY3VtZW50
SW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBtYXJrZXIgPSBp
bmZvLkhvbGRlcigpLT5HZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprSFRNTERvY3VtZW50TWFy
a2VySW5kZXgpOworICAgIGluZm8uSG9sZGVyKCktPlNldEludGVybmFsRmllbGQoVjhDdXN0b206
OmtIVE1MRG9jdW1lbnRTaGFkb3dJbmRleCwgbWFya2VyKTsKICAgICByZXR1cm4gdjg6OlRydWUo
KTsKIH0KIAotTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxEb2N1bWVudCkKK3Y4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOEhUTUxEb2N1bWVudDo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQuTmFtZWRQcm9wZXJ0eUdldHRlciIpOwogICAgIEF0
b21pY1N0cmluZyBrZXkgPSB2OFN0cmluZ1RvQXRvbWljV2ViQ29yZVN0cmluZyhuYW1lKTsKQEAg
LTczLDkgKzczLDkgQEAKICAgICAvLyBiZWVuIHRlbXBvcmFyaWx5IHNoYWRvd2VkIGFuZCB3ZSBy
ZXR1cm4gdGhlIHZhbHVlLgogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3Ry
aW5nLCBhbGwsICgiYWxsIikpOwogICAgIGlmIChrZXkgPT0gYWxsKSB7Ci0gICAgICAgIEFTU0VS
VChpbmZvLkhvbGRlcigpLT5JbnRlcm5hbEZpZWxkQ291bnQoKSA9PSBrSFRNTERvY3VtZW50SW50
ZXJuYWxGaWVsZENvdW50KTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gbWFya2VyID0g
aW5mby5Ib2xkZXIoKS0+R2V0SW50ZXJuYWxGaWVsZChrSFRNTERvY3VtZW50TWFya2VySW5kZXgp
OwotICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IGluZm8uSG9sZGVyKCktPkdl
dEludGVybmFsRmllbGQoa0hUTUxEb2N1bWVudFNoYWRvd0luZGV4KTsKKyAgICAgICAgQVNTRVJU
KGluZm8uSG9sZGVyKCktPkludGVybmFsRmllbGRDb3VudCgpID09IFY4Q3VzdG9tOjprSFRNTERv
Y3VtZW50SW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
bWFya2VyID0gaW5mby5Ib2xkZXIoKS0+R2V0SW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0hUTUxE
b2N1bWVudE1hcmtlckluZGV4KTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUg
PSBpbmZvLkhvbGRlcigpLT5HZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprSFRNTERvY3VtZW50
U2hhZG93SW5kZXgpOwogICAgICAgICBpZiAobWFya2VyICE9IHZhbHVlKQogICAgICAgICAgICAg
cmV0dXJuIHZhbHVlOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCShy
ZXZpc2lvbiA1MjkyOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNp
Z25lZFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwzNCArNTEsNiBA
QAogICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdMVW5zaWduZWRTaG9ydEFycmF5
PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRFNI
T1JUQVJSQVkpKTsKIH0KIAotLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJy
YXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRv
IFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVm
aW5lZCIuCi1JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSkK
LXsKLSAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5JbmRleGVkUHJv
cGVydHlHZXR0ZXIiKTsKLSAgICBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSogYXJyYXkgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4o
VjhDbGFzc0luZGV4OjpXRUJHTFVOU0lHTkVEU0hPUlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7Ci0K
LSAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5LT5sZW5ndGgoKSkpCi0gICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgc2hvcnQgcmVzdWx0Owot
ICAgIGlmICghYXJyYXktPmdldChpbmRleCwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKLSAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHJlc3VsdCk7Ci19Ci0KLS8v
IFNldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRoZSBhcnJheS4gQWNjZXNzZXMgb3V0c2lkZSB0
aGUgdmFsaWQgYXJyYXkgcmFuZ2UgYXJlIHNpbGVudGx5IGlnbm9yZWQuCi1JTkRFWEVEX1BST1BF
UlRZX1NFVFRFUihXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSkKLXsKLSAgICBJTkNfU1RBVFMoIkRP
TS5XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKLSAgICBX
ZWJHTFVuc2lnbmVkU2hvcnRBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4oVjhDbGFzc0luZGV4OjpXRUJHTFVO
U0lHTkVEU0hPUlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7Ci0KLSAgICBpZiAoKGluZGV4ID49IDAp
ICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+SXNO
dW1iZXIoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgY29udmVy
dCB2YWx1ZSBhcmd1bWVudCB0byBhIG51bWJlciIpOwotICAgICAgICBhcnJheS0+c2V0KGluZGV4
LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OmdldENhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2Vi
R0xVbnNpZ25lZFNob3J0QXJyYXkuZ2V0KCkiKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCShyZXZpc2lvbiA1MjkyOSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwzMCArMzQsNiBAQAogI2luY2x1ZGUgIlY4SW5kZXguaCIKICNpbmNsdWRlIDx2OC5oPgogCi0j
ZGVmaW5lIElOREVYRURfUFJPUEVSVFlfR0VUVEVSKE5BTUUpIFwKLSAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhDdXN0b206OnY4IyNOQU1FIyNJbmRleGVkUHJvcGVydHlHZXR0ZXIoIFwKLSAg
ICAgICAgdWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi0KLSNk
ZWZpbmUgSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoTkFNRSkgXAotICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEN1c3RvbTo6djgjI05BTUUjI0luZGV4ZWRQcm9wZXJ0eVNldHRlciggXAotICAg
ICAgICB1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCi0KLSNkZWZpbmUgSU5ERVhFRF9QUk9QRVJUWV9ERUxFVEVS
KE5BTUUpIFwKLSAgICB2ODo6SGFuZGxlPHY4OjpCb29sZWFuPiBWOEN1c3RvbTo6djgjI05BTUUj
I0luZGV4ZWRQcm9wZXJ0eURlbGV0ZXIoIFwKLSAgICAgICAgdWludDMyX3QgaW5kZXgsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi0KLSNkZWZpbmUgTkFNRURfUFJPUEVSVFlfR0VUVEVS
KE5BTUUpIFwKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDdXN0b206OnY4IyNOQU1FIyNO
YW1lZFByb3BlcnR5R2V0dGVyKCBcCi0gICAgICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotCi0jZGVmaW5lIE5BTUVEX1BST1BFUlRZ
X1NFVFRFUihOQU1FKSBcCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q3VzdG9tOjp2OCMj
TkFNRSMjTmFtZWRQcm9wZXJ0eVNldHRlciggXAotICAgICAgICB2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCi0KLSNkZWZpbmUgTkFNRURfUFJPUEVSVFlfREVMRVRFUihOQU1FKSBcCi0gICAg
djg6OkhhbmRsZTx2ODo6Qm9vbGVhbj4gVjhDdXN0b206OnY4IyNOQU1FIyNOYW1lZFByb3BlcnR5
RGVsZXRlciggXAotICAgICAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFY4
Q3VzdG9tIHsKICAgICBwdWJsaWM6CkBAIC0xNTIsNDkgKzEyOCw5IEBACiAgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQga1dlYlNvY2tldEludGVybmFsRmllbGRDb3VudCA9IGtEZWZhdWx0V3JhcHBl
ckludGVybmFsRmllbGRDb3VudCArIDE7CiAjZW5kaWYKIAotI2RlZmluZSBERUNMQVJFX05BTUVE
X1BST1BFUlRZX0dFVFRFUihOQU1FKSAgXAotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdjgjI05BTUUjI05hbWVkUHJvcGVydHlHZXR0ZXIoIFwKLSAgICAgICAgdjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi0KLSNkZWZpbmUg
REVDTEFSRV9OQU1FRF9QUk9QRVJUWV9TRVRURVIoTkFNRSkgXAotICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdjgjI05BTUUjI05hbWVkUHJvcGVydHlTZXR0ZXIoIFwKLSAgICAgICAg
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotCi0jZGVmaW5lIERFQ0xBUkVfTkFNRURfUFJP
UEVSVFlfREVMRVRFUihOQU1FKSBcCi0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OkJvb2xlYW4+
IHY4IyNOQU1FIyNOYW1lZFByb3BlcnR5RGVsZXRlciggXAotICAgICAgICB2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLQotI2RlZmluZSBV
U0VfTkFNRURfUFJPUEVSVFlfR0VUVEVSKE5BTUUpIFY4Q3VzdG9tOjp2OCMjTkFNRSMjTmFtZWRQ
cm9wZXJ0eUdldHRlcgotCi0jZGVmaW5lIFVTRV9OQU1FRF9QUk9QRVJUWV9TRVRURVIoTkFNRSkg
VjhDdXN0b206OnY4IyNOQU1FIyNOYW1lZFByb3BlcnR5U2V0dGVyCi0KLSNkZWZpbmUgVVNFX05B
TUVEX1BST1BFUlRZX0RFTEVURVIoTkFNRSkgVjhDdXN0b206OnY4IyNOQU1FIyNOYW1lZFByb3Bl
cnR5RGVsZXRlcgotCi0jZGVmaW5lIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoTkFN
RSkgXAotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjgjI05BTUUjI0luZGV4ZWRQ
cm9wZXJ0eUdldHRlciggXAotICAgICAgICB1aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKLQotI2RlZmluZSBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVS
KE5BTUUpIFwKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4IyNOQU1FIyNJbmRl
eGVkUHJvcGVydHlTZXR0ZXIoIFwKLSAgICAgICAgdWludDMyX3QgaW5kZXgsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotCi0jZGVmaW5l
IERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9ERUxFVEVSKE5BTUUpIFwKLSAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6Qm9vbGVhbj4gdjgjI05BTUUjI0luZGV4ZWRQcm9wZXJ0eURlbGV0ZXIoIFwK
LSAgICAgICAgdWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi0K
LSNkZWZpbmUgVVNFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKE5BTUUpIFY4Q3VzdG9tOjp2OCMj
TkFNRSMjSW5kZXhlZFByb3BlcnR5R2V0dGVyCi0KLSNkZWZpbmUgVVNFX0lOREVYRURfUFJPUEVS
VFlfU0VUVEVSKE5BTUUpIFY4Q3VzdG9tOjp2OCMjTkFNRSMjSW5kZXhlZFByb3BlcnR5U2V0dGVy
Ci0KLSNkZWZpbmUgVVNFX0lOREVYRURfUFJPUEVSVFlfREVMRVRFUihOQU1FKSBWOEN1c3RvbTo6
djgjI05BTUUjI0luZGV4ZWRQcm9wZXJ0eURlbGV0ZXIKLQogI2RlZmluZSBERUNMQVJFX0NBTExC
QUNLKE5BTUUpIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjgjI05BTUUjI0NhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi0KICNkZWZpbmUgVVNFX0NBTExCQUNLKE5BTUUp
IFY4Q3VzdG9tOjp2OCMjTkFNRSMjQ2FsbGJhY2sKIAotICAgICAgICBERUNMQVJFX05BTUVEX1BS
T1BFUlRZX0dFVFRFUihIVE1MRG9jdW1lbnQpOwotICAgICAgICBERUNMQVJFX05BTUVEX1BST1BF
UlRZX0RFTEVURVIoSFRNTERvY3VtZW50KTsKLQogICAgICAgICBERUNMQVJFX0NBTExCQUNLKERP
TVBhcnNlckNvbnN0cnVjdG9yKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhIVE1MQXVkaW9F
bGVtZW50Q29uc3RydWN0b3IpOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKEhUTUxJbWFnZUVs
ZW1lbnRDb25zdHJ1Y3Rvcik7CkBAIC0yMTgsNzYgKzE1NCw2IEBACiAgICAgICAgIERFQ0xBUkVf
Q0FMTEJBQ0soV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcik7CiAjZW5kaWYKIAot
ICAgICAgICBERUNMQVJFX05BTUVEX1BST1BFUlRZX0dFVFRFUihET01XaW5kb3cpOwotICAgICAg
ICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKERPTVdpbmRvdyk7Ci0KLSAgICAgICAg
REVDTEFSRV9OQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTEZyYW1lU2V0RWxlbWVudCk7Ci0gICAg
ICAgIERFQ0xBUkVfTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxGb3JtRWxlbWVudCk7Ci0gICAg
ICAgIERFQ0xBUkVfTkFNRURfUFJPUEVSVFlfR0VUVEVSKE5vZGVMaXN0KTsKLSAgICAgICAgREVD
TEFSRV9OQU1FRF9QUk9QRVJUWV9HRVRURVIoTmFtZWROb2RlTWFwKTsKLSAgICAgICAgREVDTEFS
RV9OQU1FRF9QUk9QRVJUWV9HRVRURVIoQ1NTU3R5bGVEZWNsYXJhdGlvbik7Ci0gICAgICAgIERF
Q0xBUkVfTkFNRURfUFJPUEVSVFlfU0VUVEVSKENTU1N0eWxlRGVjbGFyYXRpb24pOwotICAgICAg
ICBERUNMQVJFX05BTUVEX1BST1BFUlRZX0dFVFRFUihIVE1MQXBwbGV0RWxlbWVudCk7Ci0gICAg
ICAgIERFQ0xBUkVfTkFNRURfUFJPUEVSVFlfU0VUVEVSKEhUTUxBcHBsZXRFbGVtZW50KTsKLSAg
ICAgICAgREVDTEFSRV9OQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTEVtYmVkRWxlbWVudCk7Ci0g
ICAgICAgIERFQ0xBUkVfTkFNRURfUFJPUEVSVFlfU0VUVEVSKEhUTUxFbWJlZEVsZW1lbnQpOwot
ICAgICAgICBERUNMQVJFX05BTUVEX1BST1BFUlRZX0dFVFRFUihIVE1MT2JqZWN0RWxlbWVudCk7
Ci0gICAgICAgIERFQ0xBUkVfTkFNRURfUFJPUEVSVFlfU0VUVEVSKEhUTUxPYmplY3RFbGVtZW50
KTsKLSAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihIVE1MQXBwbGV0RWxl
bWVudCk7Ci0gICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoSFRNTEFwcGxl
dEVsZW1lbnQpOwotICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxF
bWJlZEVsZW1lbnQpOwotICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKEhU
TUxFbWJlZEVsZW1lbnQpOwotICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVS
KEhUTUxPYmplY3RFbGVtZW50KTsKLSAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NF
VFRFUihIVE1MT2JqZWN0RWxlbWVudCk7Ci0KLSAgICAgICAgREVDTEFSRV9OQU1FRF9QUk9QRVJU
WV9HRVRURVIoU3R5bGVTaGVldExpc3QpOwotICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVS
VFlfR0VUVEVSKE5hbWVkTm9kZU1hcCk7Ci0gICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJU
WV9HRVRURVIoSFRNTEZvcm1FbGVtZW50KTsKLSAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BF
UlRZX0dFVFRFUihIVE1MT3B0aW9uc0NvbGxlY3Rpb24pOwotICAgICAgICBERUNMQVJFX0lOREVY
RURfUFJPUEVSVFlfU0VUVEVSKEhUTUxPcHRpb25zQ29sbGVjdGlvbik7Ci0gICAgICAgIERFQ0xB
UkVfTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxTZWxlY3RFbGVtZW50KTsKLSAgICAgICAgREVD
TEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihIVE1MU2VsZWN0RWxlbWVudCk7Ci0gICAgICAg
IERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoSFRNTFNlbGVjdEVsZW1lbnQpOwotICAg
ICAgICBERUNMQVJFX05BTUVEX1BST1BFUlRZX0dFVFRFUihIVE1MQWxsQ29sbGVjdGlvbik7Ci0g
ICAgICAgIERFQ0xBUkVfTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxDb2xsZWN0aW9uKTsKLQot
I2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9H
RVRURVIoV2ViR0xCeXRlQXJyYXkpOwotICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlf
U0VUVEVSKFdlYkdMQnl0ZUFycmF5KTsKLQotICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVS
VFlfR0VUVEVSKFdlYkdMRmxvYXRBcnJheSk7Ci0gICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9Q
RVJUWV9TRVRURVIoV2ViR0xGbG9hdEFycmF5KTsKLQotICAgICAgICBERUNMQVJFX0lOREVYRURf
UFJPUEVSVFlfR0VUVEVSKFdlYkdMSW50QXJyYXkpOwotICAgICAgICBERUNMQVJFX0lOREVYRURf
UFJPUEVSVFlfU0VUVEVSKFdlYkdMSW50QXJyYXkpOwotCi0gICAgICAgIERFQ0xBUkVfSU5ERVhF
RF9QUk9QRVJUWV9HRVRURVIoV2ViR0xTaG9ydEFycmF5KTsKLSAgICAgICAgREVDTEFSRV9JTkRF
WEVEX1BST1BFUlRZX1NFVFRFUihXZWJHTFNob3J0QXJyYXkpOwotCi0gICAgICAgIERFQ0xBUkVf
SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSk7Ci0gICAgICAg
IERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSk7
Ci0KLSAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihXZWJHTFVuc2lnbmVk
SW50QXJyYXkpOwotICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKFdlYkdM
VW5zaWduZWRJbnRBcnJheSk7Ci0KLSAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dF
VFRFUihXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSk7Ci0gICAgICAgIERFQ0xBUkVfSU5ERVhFRF9Q
Uk9QRVJUWV9TRVRURVIoV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkpOwotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoREFUQUdSSUQpCi0gICAgICAgIERFQ0xBUkVfTkFNRURfUFJPUEVSVFlfR0VUVEVSKERh
dGFHcmlkQ29sdW1uTGlzdCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAg
ICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihTdG9yYWdlKTsKLSAgICAgICAg
REVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihTdG9yYWdlKTsKLSAgICAgICAgREVDTEFS
RV9JTkRFWEVEX1BST1BFUlRZX0RFTEVURVIoU3RvcmFnZSk7Ci0gICAgICAgIERFQ0xBUkVfTkFN
RURfUFJPUEVSVFlfR0VUVEVSKFN0b3JhZ2UpOwotICAgICAgICBERUNMQVJFX05BTUVEX1BST1BF
UlRZX1NFVFRFUihTdG9yYWdlKTsKLSAgICAgICAgREVDTEFSRV9OQU1FRF9QUk9QRVJUWV9ERUxF
VEVSKFN0b3JhZ2UpOwotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHY4U3Rv
cmFnZU5hbWVkUHJvcGVydHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
OwotI2VuZGlmCi0KICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAgICAgREVDTEFSRV9DQUxMQkFD
SyhXb3JrZXJDb25zdHJ1Y3Rvcik7CiAjZW5kaWYKQEAgLTMwMCwxNCArMTY2LDYgQEAKICAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhXZWJTb2NrZXRDb25zdHJ1Y3Rvcik7CiAjZW5kaWYKIAotI3Vu
ZGVmIERFQ0xBUkVfTkFNRURfUFJPUEVSVFlfR0VUVEVSCi0jdW5kZWYgREVDTEFSRV9OQU1FRF9Q
Uk9QRVJUWV9TRVRURVIKLSN1bmRlZiBERUNMQVJFX05BTUVEX1BST1BFUlRZX0RFTEVURVIKLQot
I3VuZGVmIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIKLSN1bmRlZiBERUNMQVJFX0lO
REVYRURfUFJPUEVSVFlfU0VUVEVSCi0jdW5kZWYgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0RF
TEVURVIKLQogI3VuZGVmIERFQ0xBUkVfQ0FMTEJBQ0sKICAgICB9OwogCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlv
bkN1c3RvbS5jcHAJKHJldmlzaW9uIDUyOTI5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
OSArMjksMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTU3R5
bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIlY4Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIgogCiAj
aW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgog
I2luY2x1ZGUgIkNTU1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNp
bmNsdWRlICJFdmVudFRhcmdldC5oIgpAQCAtMTUyLDcgKzE1Myw3IEBACiAgICAgcmV0dXJuIHBy
b3BJbmZvOwogfQogCi1OQU1FRF9QUk9QRVJUWV9HRVRURVIoQ1NTU3R5bGVEZWNsYXJhdGlvbikK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVkUHJvcGVy
dHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ1NTU3R5bGVEZWNsYXJhdGlvbi5OYW1l
ZFByb3BlcnR5R2V0dGVyIik7CiAgICAgLy8gRmlyc3QgbG9vayBmb3IgQVBJIGRlZmluZWQgYXR0
cmlidXRlcyBvbiB0aGUgc3R5bGUgZGVjbGFyYXRpb24gb2JqZWN0LgpAQCAtMTkxLDcgKzE5Miw3
IEBACiAgICAgcmV0dXJuIHY4U3RyaW5nKHJlc3VsdCk7CiB9CiAKLU5BTUVEX1BST1BFUlRZX1NF
VFRFUihDU1NTdHlsZURlY2xhcmF0aW9uKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q1NTU3R5
bGVEZWNsYXJhdGlvbjo6bmFtZWRQcm9wZXJ0eVNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ1NTU3R5bGVEZWNsYXJhdGlvbi5OYW1lZFBy
b3BlcnR5U2V0dGVyIik7CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogaW1wID0KSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2ln
bmVkQnl0ZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTI5MjkpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCwzNSArNTAsNiBAQAogCiAgICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJy
YXk8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENs
YXNzSW5kZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVkpKTsKIH0KLQotLy8gR2V0IHRoZSBzcGVj
aWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2
YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBh
cnJheSByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCi1JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihX
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5KQotewotICAgIElOQ19TVEFUUygiRE9NLldlYkdMVW5zaWdu
ZWRCeXRlQXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgV2ViR0xVbnNpZ25lZEJ5
dGVBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJH
TFVuc2lnbmVkQnl0ZUFycmF5PihWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVks
IGluZm8uSG9sZGVyKCkpOwotCi0gICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJh
eS0+bGVuZ3RoKCkpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIHVuc2ln
bmVkIGNoYXIgcmVzdWx0OwotICAgIGlmICghYXJyYXktPmdldChpbmRleCwgcmVzdWx0KSkKLSAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3
KHJlc3VsdCk7Ci19Ci0KLS8vIFNldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRoZSBhcnJheS4g
QWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFuZ2UgYXJlIHNpbGVudGx5IGlnbm9y
ZWQuCi1JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KQotewot
ICAgIElOQ19TVEFUUygiRE9NLldlYkdMVW5zaWduZWRCeXRlQXJyYXkuSW5kZXhlZFByb3BlcnR5
U2V0dGVyIik7Ci0gICAgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSogYXJyYXkgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PihWOENsYXNz
SW5kZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVksIGluZm8uSG9sZGVyKCkpOwotCi0gICAgaWYg
KChpbmRleCA+PSAwKSAmJiAoaW5kZXggPCBhcnJheS0+bGVuZ3RoKCkpKSB7Ci0gICAgICAgIGlm
ICghdmFsdWUtPklzTnVtYmVyKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291
bGQgbm90IGNvbnZlcnQgdmFsdWUgYXJndW1lbnQgdG8gYSBudW1iZXIiKTsKLSAgICAgICAgYXJy
YXktPnNldChpbmRleCwgdmFsdWUtPk51bWJlclZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4g
dmFsdWU7Ci19Ci0KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMVW5zaWduZWRCeXRlQXJy
YXk6OmdldENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5nZXQoKSIpOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xsZWN0
aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNTI5MjkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNCw3ICsxMTQsNyBAQAogICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CiB9CiAK
LUlOREVYRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxPcHRpb25zQ29sbGVjdGlvbikKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6aW5kZXhlZFByb3BlcnR5R2V0
dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAg
IElOQ19TVEFUUygiRE9NLkhUTUxPcHRpb25zQ29sbGVjdGlvbi5JbmRleGVkUHJvcGVydHlHZXR0
ZXIiKTsKICAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KFY4Q2xhc3NJ
bmRleDo6SFRNTE9QVElPTlNDT0xMRUNUSU9OLCBpbmZvLkhvbGRlcigpKTsKQEAgLTEyNiw3ICsx
MjYsNyBAQAogICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChy
ZXN1bHQucmVsZWFzZSgpKTsKIH0KIAotSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoSFRNTE9wdGlv
bnNDb2xsZWN0aW9uKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTE9wdGlvbnNDb2xsZWN0
aW9uOjppbmRleGVkUHJvcGVydHlTZXR0ZXIodWludDMyX3QgaW5kZXgsIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19T
VEFUUygiRE9NLkhUTUxPcHRpb25zQ29sbGVjdGlvbi5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsK
ICAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6
SFRNTE9QVElPTlNDT0xMRUNUSU9OLCBpbmZvLkhvbGRlcigpKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50Q3Vz
dG9tLmNwcAkocmV2aXNpb24gNTI5MjkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiAr
MjksMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1l
U2V0RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTEZyYW1lU2V0RWxlbWVudC5oIgogCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxDb2xs
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxG
cmFtZVNldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJOb2Rl
LmgiCiAKQEAgLTQ0LDcgKzQ1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OQU1FRF9Q
Uk9QRVJUWV9HRVRURVIoSFRNTEZyYW1lU2V0RWxlbWVudCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOEhUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5D
X1NUQVRTKCJET00uSFRNTEZyYW1lU2V0RWxlbWVudC5OYW1lZFByb3BlcnR5R2V0dGVyIik7CiAg
ICAgSFRNTEZyYW1lU2V0RWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3Jh
cHBlclRvTm9kZTxIVE1MRnJhbWVTZXRFbGVtZW50PihpbmZvLkhvbGRlcigpKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiA1MjkyOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw5
ICs0NSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTkFNRURfUFJPUEVSVFlfR0VUVEVS
KEhUTUxTZWxlY3RFbGVtZW50KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTFNlbGVjdEVs
ZW1lbnQ6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7Ci0gICAgSU5DX1NUQVRTKCJET00uSFRNTFNl
bGVjdEVsZW1lbnQuTmFtZWRQcm9wZXJ0eVNldHRlciIpOworICAgIElOQ19TVEFUUygiRE9NLkhU
TUxTZWxlY3RFbGVtZW50Lk5hbWVkUHJvcGVydHlHZXR0ZXIiKTsKICAgICBIVE1MU2VsZWN0RWxl
bWVudCogc2VsZWN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1M
U2VsZWN0RWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlID0gaW5mby5Ib2xkZXIoKS0+R2V0UmVhbE5hbWVkUHJvcGVydHlJblByb3RvdHlwZUNo
YWluKG5hbWUpOwogCkBAIC03Myw3ICs3Myw3IEBACiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpOT0RFTElTVCwgbGlzdCk7CiB9CiAKLUlO
REVYRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxTZWxlY3RFbGVtZW50KQordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4SFRNTFNlbGVjdEVsZW1lbnQ6OmluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJf
dCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBBU1NFUlQoVjhE
T01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOwogICAgIEFTU0VSVChW
OERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJbmRl
eDo6Tk9ERSk7CkBAIC04NCw3ICs4NCw3IEBACiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29u
dmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOwogfQogCi1JTkRFWEVEX1BST1BF
UlRZX1NFVFRFUihIVE1MU2VsZWN0RWxlbWVudCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhU
TUxTZWxlY3RFbGVtZW50OjppbmRleGVkUHJvcGVydHlTZXR0ZXIodWludDMyX3QgaW5kZXgsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQog
ewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxTZWxlY3RFbGVtZW50LkluZGV4ZWRQcm9wZXJ0eVNl
dHRlciIpOwogICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxTZWxlY3RFbGVtZW50PihpbmZvLkhvbGRlcigpKTsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20u
Y3BwCShyZXZpc2lvbiA1MjkyOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9k
ZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotTkFNRURfUFJPUEVSVFlfR0VUVEVSKE5vZGVMaXN0KQordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4Tm9kZUxpc3Q6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uTm9kZUxpc3QuTmFtZWRQcm9wZXJ0eUdldHRlciIpOwogICAgIE5vZGVM
aXN0KiBsaXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Tm9kZUxpc3Q+
KFY4Q2xhc3NJbmRleDo6Tk9ERUxJU1QsIGluZm8uSG9sZGVyKCkpOwpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0luRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0luRWxlbWVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDUyOTI5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MUGx1Z0luRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDM3ICs3Mywz
NyBAQAogICAgIHJldHVybiBucE9iamVjdFNldE5hbWVkUHJvcGVydHkoaW5zdGFuY2UsIG5hbWUs
IHZhbHVlKTsKIH0KIAotTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxBcHBsZXRFbGVtZW50KQor
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEFwcGxldEVsZW1lbnQ6Om5hbWVkUHJvcGVydHlH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEFwcGxldEVsZW1lbnQuTmFtZWRQcm9w
ZXJ0eUdldHRlciIpOwogICAgIHJldHVybiBucE9iamVjdE5hbWVkR2V0dGVyKG5hbWUsIGluZm8p
OwogfQogCi1OQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTEVtYmVkRWxlbWVudCkKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEhUTUxFbWJlZEVsZW1lbnQ6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEVtYmVkRWxlbWVudC5OYW1lZFByb3BlcnR5R2V0dGVy
Iik7CiAgICAgcmV0dXJuIG5wT2JqZWN0TmFtZWRHZXR0ZXIobmFtZSwgaW5mbyk7CiB9CiAKLU5B
TUVEX1BST1BFUlRZX0dFVFRFUihIVE1MT2JqZWN0RWxlbWVudCkKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOEhUTUxPYmplY3RFbGVtZW50OjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElO
Q19TVEFUUygiRE9NLkhUTUxPYmplY3RFbGVtZW50Lk5hbWVkUHJvcGVydHlHZXR0ZXIiKTsKICAg
ICByZXR1cm4gbnBPYmplY3ROYW1lZEdldHRlcihuYW1lLCBpbmZvKTsKIH0KIAotTkFNRURfUFJP
UEVSVFlfU0VUVEVSKEhUTUxBcHBsZXRFbGVtZW50KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
SFRNTEFwcGxldEVsZW1lbnQ6Om5hbWVkUHJvcGVydHlTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxBcHBsZXRFbGVtZW50Lk5hbWVk
UHJvcGVydHlTZXR0ZXIiKTsKICAgICByZXR1cm4gbnBPYmplY3ROYW1lZFNldHRlcihuYW1lLCB2
YWx1ZSwgaW5mbyk7CiB9CiAKLU5BTUVEX1BST1BFUlRZX1NFVFRFUihIVE1MRW1iZWRFbGVtZW50
KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEVtYmVkRWxlbWVudDo6bmFtZWRQcm9wZXJ0
eVNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
dmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uSFRNTEVtYmVkRWxlbWVudC5OYW1lZFByb3BlcnR5U2V0dGVyIik7CiAgICAgcmV0dXJuIG5w
T2JqZWN0TmFtZWRTZXR0ZXIobmFtZSwgdmFsdWUsIGluZm8pOwogfQogCi1OQU1FRF9QUk9QRVJU
WV9TRVRURVIoSFRNTE9iamVjdEVsZW1lbnQpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1M
T2JqZWN0RWxlbWVudDo6bmFtZWRQcm9wZXJ0eVNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTE9iamVjdEVsZW1lbnQuTmFtZWRQcm9w
ZXJ0eVNldHRlciIpOwogICAgIHJldHVybiBucE9iamVjdE5hbWVkU2V0dGVyKG5hbWUsIHZhbHVl
LCBpbmZvKTsKQEAgLTE1NywzNyArMTU3LDM3IEBACiAgICAgcmV0dXJuIG5wT2JqZWN0U2V0SW5k
ZXhlZFByb3BlcnR5KGluc3RhbmNlLCBpbmRleCwgdmFsdWUpOwogfQogCi1JTkRFWEVEX1BST1BF
UlRZX0dFVFRFUihIVE1MQXBwbGV0RWxlbWVudCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhU
TUxBcHBsZXRFbGVtZW50OjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEFw
cGxldEVsZW1lbnQuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7CiAgICAgcmV0dXJuIG5wT2JqZWN0
SW5kZXhlZEdldHRlcihpbmRleCwgaW5mbyk7CiB9CiAKLUlOREVYRURfUFJPUEVSVFlfR0VUVEVS
KEhUTUxFbWJlZEVsZW1lbnQpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MRW1iZWRFbGVt
ZW50OjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEVtYmVkRWxlbWVudC5J
bmRleGVkUHJvcGVydHlHZXR0ZXIiKTsKICAgICByZXR1cm4gbnBPYmplY3RJbmRleGVkR2V0dGVy
KGluZGV4LCBpbmZvKTsKIH0KIAotSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoSFRNTE9iamVjdEVs
ZW1lbnQpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MT2JqZWN0RWxlbWVudDo6aW5kZXhl
ZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxPYmplY3RFbGVtZW50LkluZGV4ZWRQcm9w
ZXJ0eUdldHRlciIpOwogICAgIHJldHVybiBucE9iamVjdEluZGV4ZWRHZXR0ZXIoaW5kZXgsIGlu
Zm8pOwogfQogCi1JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihIVE1MQXBwbGV0RWxlbWVudCkKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxBcHBsZXRFbGVtZW50OjppbmRleGVkUHJvcGVydHlT
ZXR0ZXIodWludDMyX3QgaW5kZXgsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxBcHBsZXRF
bGVtZW50LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOwogICAgIHJldHVybiBucE9iamVjdEluZGV4
ZWRTZXR0ZXIoaW5kZXgsIHZhbHVlLCBpbmZvKTsKIH0KIAotSU5ERVhFRF9QUk9QRVJUWV9TRVRU
RVIoSFRNTEVtYmVkRWxlbWVudCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxFbWJlZEVs
ZW1lbnQ6OmluZGV4ZWRQcm9wZXJ0eVNldHRlcih1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5D
X1NUQVRTKCJET00uSFRNTEVtYmVkRWxlbWVudC5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKICAg
ICByZXR1cm4gbnBPYmplY3RJbmRleGVkU2V0dGVyKGluZGV4LCB2YWx1ZSwgaW5mbyk7CiB9CiAK
LUlOREVYRURfUFJPUEVSVFlfU0VUVEVSKEhUTUxPYmplY3RFbGVtZW50KQordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4SFRNTE9iamVjdEVsZW1lbnQ6OmluZGV4ZWRQcm9wZXJ0eVNldHRlcih1aW50
MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTE9iamVjdEVsZW1lbnQuSW5k
ZXhlZFByb3BlcnR5U2V0dGVyIik7CiAgICAgcmV0dXJuIG5wT2JqZWN0SW5kZXhlZFNldHRlcihp
bmRleCwgdmFsdWUsIGluZm8pOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhX
ZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAkocmV2aXNp
b24gNTI5MjkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRJ
bnRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDM0ICs1MSw2IEBACiAgICAg
cmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2ViR0xVbnNpZ25lZEludEFycmF5PihhcmdzLCBW
OENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRElOVEFSUkFZKSk7
CiB9CiAKLS8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGludGVnZXIgYXJyYXkg
YW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4
LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBwaXhlbCBidWZmZXIgcmFuZ2UgcmV0dXJuICJ1
bmRlZmluZWQiLgotSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoV2ViR0xVbnNpZ25lZEludEFycmF5
KQotewotICAgIElOQ19TVEFUUygiRE9NLldlYkdMVW5zaWduZWRJbnRBcnJheS5JbmRleGVkUHJv
cGVydHlHZXR0ZXIiKTsKLSAgICBXZWJHTFVuc2lnbmVkSW50QXJyYXkqIGFycmF5ID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xVbnNpZ25lZEludEFycmF5PihWOENs
YXNzSW5kZXg6OldFQkdMVU5TSUdORURJTlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7Ci0KLSAgICBp
ZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5LT5sZW5ndGgoKSkpCi0gICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgaW50IHJlc3VsdDsKLSAgICBpZiAo
IWFycmF5LT5nZXQoaW5kZXgsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Ci0gICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhyZXN1bHQpOwotfQotCi0vLyBTZXQgdGhl
IHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgaW50ZWdlciBhcnJheS4gQWNjZXNzZXMgb3V0c2lkZSB0
aGUgdmFsaWQgaW50ZWdlciBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KLUlOREVY
RURfUFJPUEVSVFlfU0VUVEVSKFdlYkdMVW5zaWduZWRJbnRBcnJheSkKLXsKLSAgICBJTkNfU1RB
VFMoIkRPTS5XZWJHTFVuc2lnbmVkSW50QXJyYXkuSW5kZXhlZFByb3BlcnR5U2V0dGVyIik7Ci0g
ICAgV2ViR0xVbnNpZ25lZEludEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PFdlYkdMVW5zaWduZWRJbnRBcnJheT4oVjhDbGFzc0luZGV4OjpXRUJHTFVO
U0lHTkVESU5UQVJSQVksIGluZm8uSG9sZGVyKCkpOwotCi0gICAgaWYgKChpbmRleCA+PSAwKSAm
JiAoaW5kZXggPCBhcnJheS0+bGVuZ3RoKCkpKSB7Ci0gICAgICAgIGlmICghdmFsdWUtPklzTnVt
YmVyKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQg
dmFsdWUgYXJndW1lbnQgdG8gYSBudW1iZXIiKTsKLSAgICAgICAgYXJyYXktPnNldChpbmRleCwg
dmFsdWUtPk51bWJlclZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMVW5zaWduZWRJbnRBcnJheTo6Z2V0Q2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFVu
c2lnbmVkSW50QXJyYXkuZ2V0KCkiKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJHTEludEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTI5MjkpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMSW50QXJyYXlDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwzNCArNTEsNiBAQAogICAgIHJldHVybiBjb25zdHJ1Y3RXZWJH
TEFycmF5PFdlYkdMSW50QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0lu
ZGV4OjpXRUJHTElOVEFSUkFZKSk7CiB9CiAKLS8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZy
b20gdGhlIGludGVnZXIgYXJyYXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlw
dCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBwaXhlbCBi
dWZmZXIgcmFuZ2UgcmV0dXJuICJ1bmRlZmluZWQiLgotSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIo
V2ViR0xJbnRBcnJheSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEludEFycmF5LkluZGV4
ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIFdlYkdMSW50QXJyYXkqIGFycmF5ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xJbnRBcnJheT4oVjhDbGFzc0luZGV4OjpX
RUJHTElOVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKLQotICAgIGlmICgoaW5kZXggPCAwKSB8fCAo
aW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKLSAgICBpbnQgcmVzdWx0OwotICAgIGlmICghYXJyYXktPmdldChpbmRleCwgcmVzdWx0KSkK
LSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gdjg6Ok51bWJlcjo6
TmV3KHJlc3VsdCk7Ci19Ci0KLS8vIFNldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRoZSBpbnRl
Z2VyIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBpbnRlZ2VyIGFycmF5IHJhbmdl
IGFyZSBzaWxlbnRseSBpZ25vcmVkLgotSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoV2ViR0xJbnRB
cnJheSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEludEFycmF5LkluZGV4ZWRQcm9wZXJ0
eVNldHRlciIpOwotICAgIFdlYkdMSW50QXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xJbnRBcnJheT4oVjhDbGFzc0luZGV4OjpXRUJHTElOVEFS
UkFZLCBpbmZvLkhvbGRlcigpKTsKLQotICAgIGlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwg
YXJyYXktPmxlbmd0aCgpKSkgewotICAgICAgICBpZiAoIXZhbHVlLT5Jc051bWJlcigpKQotICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IHZhbHVlIGFyZ3Vt
ZW50IHRvIGEgbnVtYmVyIik7Ci0gICAgICAgIGFycmF5LT5zZXQoaW5kZXgsIHZhbHVlLT5OdW1i
ZXJWYWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhXZWJHTEludEFycmF5OjpnZXRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLldlYkdMSW50QXJyYXkuZ2V0KCkiKTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMU2hvcnRB
cnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUyOTI5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwz
NCArNTEsNiBAQAogICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdMU2hvcnRBcnJh
eT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OldFQkdMU0hPUlRBUlJB
WSkpOwogfQogCi0vLyBHZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBmcm9tIHRoZSBhcnJheSBhbmQg
cmV0dXJuIGl0IHdyYXBwZWQgYXMgYSBKYXZhU2NyaXB0IE51bWJlciBvYmplY3QgdG8gVjguIEFj
Y2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIGFycmF5IHJhbmdlIHJldHVybiAidW5kZWZpbmVkIi4K
LUlOREVYRURfUFJPUEVSVFlfR0VUVEVSKFdlYkdMU2hvcnRBcnJheSkKLXsKLSAgICBJTkNfU1RB
VFMoIkRPTS5XZWJHTFNob3J0QXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgV2Vi
R0xTaG9ydEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PFdlYkdMU2hvcnRBcnJheT4oVjhDbGFzc0luZGV4OjpXRUJHTFNIT1JUQVJSQVksIGluZm8uSG9s
ZGVyKCkpOwotCi0gICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS0+bGVuZ3Ro
KCkpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIHNob3J0IHJlc3VsdDsK
LSAgICBpZiAoIWFycmF5LT5nZXQoaW5kZXgsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhyZXN1bHQpOwotfQotCi0v
LyBTZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgYXJyYXkuIEFjY2Vzc2VzIG91dHNpZGUg
dGhlIHZhbGlkIGFycmF5IHJhbmdlIGFyZSBzaWxlbnRseSBpZ25vcmVkLgotSU5ERVhFRF9QUk9Q
RVJUWV9TRVRURVIoV2ViR0xTaG9ydEFycmF5KQotewotICAgIElOQ19TVEFUUygiRE9NLldlYkdM
U2hvcnRBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKLSAgICBXZWJHTFNob3J0QXJyYXkq
IGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xTaG9ydEFy
cmF5PihWOENsYXNzSW5kZXg6OldFQkdMU0hPUlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7Ci0KLSAg
ICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKLSAgICAg
ICAgaWYgKCF2YWx1ZS0+SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJDb3VsZCBub3QgY29udmVydCB2YWx1ZSBhcmd1bWVudCB0byBhIG51bWJlciIpOwotICAgICAg
ICBhcnJheS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7Ci0gICAgfQotICAgIHJl
dHVybiB2YWx1ZTsKLX0KLQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xTaG9ydEFycmF5
OjpnZXRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFU
UygiRE9NLldlYkdMU2hvcnRBcnJheS5nZXQoKSIpOwo=
</data>
<flag name="review"
          id="28273"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>